{"version":3,"file":"explore.0dfd49f78dc93c695e30.js","mappings":"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","sources":["webpack://grafana/./public/app/features/dashboard/dashgrid/SeriesVisibilityConfigFactory.ts","webpack://grafana/./public/app/features/explore/ExploreGraph.tsx","webpack://grafana/./public/app/features/explore/exploreGraphStyleUtils.ts","webpack://grafana/./public/app/features/explore/ExploreGraphLabel.tsx","webpack://grafana/./.yarn/__virtual__/re-resizable-virtual-820bbedce8/3/opt/drone/yarncache/re-resizable-npm-6.9.5-33d584b1c1-cd82a1baff.zip/node_modules/re-resizable/lib/resizer.js","webpack://grafana/./.yarn/__virtual__/re-resizable-virtual-820bbedce8/3/opt/drone/yarncache/re-resizable-npm-6.9.5-33d584b1c1-cd82a1baff.zip/node_modules/re-resizable/lib/index.js","webpack://grafana/./public/app/features/explore/ExploreDrawer.tsx","webpack://grafana/./public/app/features/explore/ExploreQueryInspector.tsx","webpack://grafana/./public/app/features/explore/TimeSyncButton.tsx","webpack://grafana/./public/app/features/explore/ExploreTimeControls.tsx","webpack://grafana/./public/app/features/explore/LiveTailButton.tsx","webpack://grafana/./public/app/features/explore/RunButton.tsx","webpack://grafana/./public/app/features/explore/useLiveTailControls.ts","webpack://grafana/./public/app/features/explore/ExploreToolbar.tsx","webpack://grafana/./.yarn/__virtual__/react-use-virtual-00326e70ba/3/opt/drone/yarncache/react-use-npm-17.3.2-a032cbeb01-7379460f51.zip/node_modules/react-use/esm/useInterval.js","webpack://grafana/./public/app/features/explore/Time.tsx","webpack://grafana/./public/app/features/explore/ElapsedTime.tsx","webpack://grafana/./public/app/features/explore/LiveLogs.tsx","webpack://grafana/./public/app/features/explore/MetaInfoText.tsx","webpack://grafana/./public/app/features/explore/LogsMetaRow.tsx","webpack://grafana/./public/app/features/explore/LogsNavigationPages.tsx","webpack://grafana/./public/app/features/explore/LogsNavigation.tsx","webpack://grafana/./public/app/features/explore/Logs.tsx","webpack://grafana/./public/app/features/explore/utils/LogsCrossFadeTransition.tsx","webpack://grafana/./public/app/features/explore/LogsContainer.tsx","webpack://grafana/./public/app/features/explore/LogsVolumePanel.tsx","webpack://grafana/./public/app/features/explore/NoDataSourceCallToAction.tsx","webpack://grafana/./public/app/features/explore/NodeGraphContainer.tsx","webpack://grafana/./public/app/features/explore/QueryRows.tsx","webpack://grafana/./public/app/core/components/Animations/FadeIn.tsx","webpack://grafana/./public/app/features/explore/ErrorContainer.tsx","webpack://grafana/./public/app/features/explore/ResponseErrorContainer.tsx","webpack://grafana/./public/app/features/explore/RichHistory/RichHistoryCard.tsx","webpack://grafana/./public/app/features/explore/RichHistory/RichHistoryQueriesTab.tsx","webpack://grafana/./public/app/features/explore/RichHistory/RichHistorySettings.tsx","webpack://grafana/./public/app/features/explore/RichHistory/RichHistoryStarredTab.tsx","webpack://grafana/./public/app/features/explore/RichHistory/RichHistory.tsx","webpack://grafana/./public/app/features/explore/RichHistory/RichHistoryContainer.tsx","webpack://grafana/./public/app/features/explore/SecondaryActions.tsx","webpack://grafana/./public/app/features/explore/TableContainer.tsx","webpack://grafana/./packages/jaeger-ui-components/src/common/UiFindInput.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TracePageHeader/TracePageSearchBar.markers.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TracePageHeader/TracePageSearchBar.tsx","webpack://grafana/./public/app/features/explore/TraceView/createSpanLink.tsx","webpack://grafana/./public/app/features/explore/TraceView/useDetailState.ts","webpack://grafana/./public/app/features/explore/TraceView/TraceView.tsx","webpack://grafana/./public/app/features/explore/TraceView/useHoverIndentGuide.ts","webpack://grafana/./public/app/features/explore/TraceView/useViewRange.ts","webpack://grafana/./public/app/features/explore/TraceView/useChildrenState.ts","webpack://grafana/./public/app/features/explore/TraceView/utils/transform.ts","webpack://grafana/./public/app/features/explore/TraceView/TraceViewContainer.tsx","webpack://grafana/./public/app/features/explore/TraceView/useSearch.ts","webpack://grafana/./public/app/features/explore/Explore.tsx","webpack://grafana/./public/app/features/explore/ExplorePaneContainer.tsx","webpack://grafana/./public/app/features/explore/Wrapper.tsx","webpack://grafana/./public/app/features/explore/state/selectors.ts","webpack://grafana/./.yarn/__virtual__/react-use-virtual-00326e70ba/3/opt/drone/yarncache/react-use-npm-17.3.2-a032cbeb01-7379460f51.zip/node_modules/react-use/esm/usePrevious.js","webpack://grafana/../../opt/drone/yarncache/fast-memoize-npm-2.5.2-f42a7c6940-79fa759719.zip/node_modules/fast-memoize/src/index.js","webpack://grafana/../../opt/drone/yarncache/immer-npm-9.0.12-e8cd7358fa-bcbec6d76d.zip/node_modules/immer/dist/immer.esm.js"],"sourcesContent":["import {\n ByNamesMatcherMode,\n DataFrame,\n DynamicConfigValue,\n FieldConfigSource,\n FieldMatcherID,\n FieldType,\n getFieldDisplayName,\n isSystemOverrideWithRef,\n SystemConfigOverrideRule,\n} from '@grafana/data';\nimport { SeriesVisibilityChangeMode } from '@grafana/ui';\n\nconst displayOverrideRef = 'hideSeriesFrom';\nconst isHideSeriesOverride = isSystemOverrideWithRef(displayOverrideRef);\n\nexport function seriesVisibilityConfigFactory(\n label: string,\n mode: SeriesVisibilityChangeMode,\n fieldConfig: FieldConfigSource,\n data: DataFrame[]\n) {\n const { overrides } = fieldConfig;\n\n const displayName = label;\n const currentIndex = overrides.findIndex(isHideSeriesOverride);\n\n if (currentIndex < 0) {\n if (mode === SeriesVisibilityChangeMode.ToggleSelection) {\n const override = createOverride([displayName]);\n\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, override],\n };\n }\n\n const displayNames = getDisplayNames(data, displayName);\n const override = createOverride(displayNames);\n\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, override],\n };\n }\n\n const overridesCopy = Array.from(overrides);\n const [current] = overridesCopy.splice(currentIndex, 1) as SystemConfigOverrideRule[];\n\n if (mode === SeriesVisibilityChangeMode.ToggleSelection) {\n const existing = getExistingDisplayNames(current);\n\n if (existing[0] === displayName && existing.length === 1) {\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n const override = createOverride([displayName]);\n\n return {\n ...fieldConfig,\n overrides: [...overridesCopy, override],\n };\n }\n\n const override = createExtendedOverride(current, displayName);\n\n if (allFieldsAreExcluded(override, data)) {\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n return {\n ...fieldConfig,\n overrides: [...overridesCopy, override],\n };\n}\n\nfunction createOverride(\n names: string[],\n mode = ByNamesMatcherMode.exclude,\n property?: DynamicConfigValue\n): SystemConfigOverrideRule {\n property = property ?? {\n id: 'custom.hideFrom',\n value: {\n viz: true,\n legend: false,\n tooltip: false,\n },\n };\n\n return {\n __systemRef: displayOverrideRef,\n matcher: {\n id: FieldMatcherID.byNames,\n options: {\n mode: mode,\n names: names,\n prefix: mode === ByNamesMatcherMode.exclude ? 'All except:' : undefined,\n readOnly: true,\n },\n },\n properties: [\n {\n ...property,\n value: {\n viz: true,\n legend: false,\n tooltip: false,\n },\n },\n ],\n };\n}\n\nconst createExtendedOverride = (\n current: SystemConfigOverrideRule,\n displayName: string,\n mode = ByNamesMatcherMode.exclude\n): SystemConfigOverrideRule => {\n const property = current.properties.find((p) => p.id === 'custom.hideFrom');\n const existing = getExistingDisplayNames(current);\n const index = existing.findIndex((name) => name === displayName);\n\n if (index < 0) {\n existing.push(displayName);\n } else {\n existing.splice(index, 1);\n }\n\n return createOverride(existing, mode, property);\n};\n\nconst getExistingDisplayNames = (rule: SystemConfigOverrideRule): string[] => {\n const names = rule.matcher.options?.names;\n if (!Array.isArray(names)) {\n return [];\n }\n return [...names];\n};\n\nconst allFieldsAreExcluded = (override: SystemConfigOverrideRule, data: DataFrame[]): boolean => {\n return getExistingDisplayNames(override).length === getDisplayNames(data).length;\n};\n\nconst getDisplayNames = (data: DataFrame[], excludeName?: string): string[] => {\n const unique = new Set<string>();\n\n for (const frame of data) {\n for (const field of frame.fields) {\n if (field.type !== FieldType.number) {\n continue;\n }\n\n const name = getFieldDisplayName(field, frame, data);\n\n if (name === excludeName) {\n continue;\n }\n\n unique.add(name);\n }\n }\n\n return Array.from(unique);\n};\n","import { css, cx } from '@emotion/css';\nimport { identity } from 'lodash';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { usePrevious } from 'react-use';\n\nimport {\n AbsoluteTimeRange,\n applyFieldOverrides,\n compareArrayValues,\n compareDataFrameStructures,\n createFieldConfigRegistry,\n DataFrame,\n dateTime,\n FieldColorModeId,\n FieldConfigSource,\n getFrameDisplayName,\n GrafanaTheme2,\n LoadingState,\n SplitOpen,\n TimeZone,\n} from '@grafana/data';\nimport { PanelRenderer } from '@grafana/runtime';\nimport { GraphDrawStyle, LegendDisplayMode, TooltipDisplayMode, SortOrder } from '@grafana/schema';\nimport {\n Icon,\n PanelContext,\n PanelContextProvider,\n SeriesVisibilityChangeMode,\n useStyles2,\n useTheme2,\n} from '@grafana/ui';\nimport appEvents from 'app/core/app_events';\nimport { defaultGraphConfig, getGraphFieldConfig } from 'app/plugins/panel/timeseries/config';\nimport { TimeSeriesOptions } from 'app/plugins/panel/timeseries/types';\n\nimport { ExploreGraphStyle } from '../../types';\nimport { seriesVisibilityConfigFactory } from '../dashboard/dashgrid/SeriesVisibilityConfigFactory';\n\nimport { applyGraphStyle } from './exploreGraphStyleUtils';\n\nconst MAX_NUMBER_OF_TIME_SERIES = 20;\n\ninterface Props {\n data: DataFrame[];\n height: number;\n width: number;\n absoluteRange: AbsoluteTimeRange;\n timeZone: TimeZone;\n loadingState: LoadingState;\n annotations?: DataFrame[];\n onHiddenSeriesChanged?: (hiddenSeries: string[]) => void;\n tooltipDisplayMode?: TooltipDisplayMode;\n splitOpenFn?: SplitOpen;\n onChangeTime: (timeRange: AbsoluteTimeRange) => void;\n graphStyle: ExploreGraphStyle;\n}\n\nexport function ExploreGraph({\n data,\n height,\n width,\n timeZone,\n absoluteRange,\n onChangeTime,\n loadingState,\n annotations,\n onHiddenSeriesChanged,\n splitOpenFn,\n graphStyle,\n tooltipDisplayMode = TooltipDisplayMode.Single,\n}: Props) {\n const theme = useTheme2();\n const [showAllTimeSeries, setShowAllTimeSeries] = useState(false);\n const [baseStructureRev, setBaseStructureRev] = useState(1);\n\n const previousData = usePrevious(data);\n const structureChangesRef = useRef(0);\n\n if (data && previousData && !compareArrayValues(previousData, data, compareDataFrameStructures)) {\n structureChangesRef.current++;\n }\n\n const structureRev = baseStructureRev + structureChangesRef.current;\n\n const [fieldConfig, setFieldConfig] = useState<FieldConfigSource>({\n defaults: {\n color: {\n mode: FieldColorModeId.PaletteClassic,\n },\n custom: {\n drawStyle: GraphDrawStyle.Line,\n fillOpacity: 0,\n pointSize: 5,\n },\n },\n overrides: [],\n });\n\n const style = useStyles2(getStyles);\n const timeRange = {\n from: dateTime(absoluteRange.from),\n to: dateTime(absoluteRange.to),\n raw: {\n from: dateTime(absoluteRange.from),\n to: dateTime(absoluteRange.to),\n },\n };\n\n const dataWithConfig = useMemo(() => {\n const registry = createFieldConfigRegistry(getGraphFieldConfig(defaultGraphConfig), 'Explore');\n const styledFieldConfig = applyGraphStyle(fieldConfig, graphStyle);\n return applyFieldOverrides({\n fieldConfig: styledFieldConfig,\n data,\n timeZone,\n replaceVariables: (value) => value, // We don't need proper replace here as it is only used in getLinks and we use getFieldLinks\n theme,\n fieldConfigRegistry: registry,\n });\n }, [fieldConfig, graphStyle, data, timeZone, theme]);\n\n useEffect(() => {\n if (onHiddenSeriesChanged) {\n const hiddenFrames: string[] = [];\n dataWithConfig.forEach((frame) => {\n const allFieldsHidden = frame.fields.map((field) => field.config?.custom?.hideFrom?.viz).every(identity);\n if (allFieldsHidden) {\n hiddenFrames.push(getFrameDisplayName(frame));\n }\n });\n onHiddenSeriesChanged(hiddenFrames);\n }\n }, [dataWithConfig, onHiddenSeriesChanged]);\n\n const seriesToShow = showAllTimeSeries ? dataWithConfig : dataWithConfig.slice(0, MAX_NUMBER_OF_TIME_SERIES);\n\n const panelContext: PanelContext = {\n eventBus: appEvents,\n onSplitOpen: splitOpenFn,\n onToggleSeriesVisibility(label: string, mode: SeriesVisibilityChangeMode) {\n setBaseStructureRev((r) => r + 1);\n setFieldConfig(seriesVisibilityConfigFactory(label, mode, fieldConfig, data));\n },\n };\n\n return (\n <PanelContextProvider value={panelContext}>\n {dataWithConfig.length > MAX_NUMBER_OF_TIME_SERIES && !showAllTimeSeries && (\n <div className={cx([style.timeSeriesDisclaimer])}>\n <Icon className={style.disclaimerIcon} name=\"exclamation-triangle\" />\n {`Showing only ${MAX_NUMBER_OF_TIME_SERIES} time series. `}\n <span\n className={cx([style.showAllTimeSeries])}\n onClick={() => {\n structureChangesRef.current++;\n setShowAllTimeSeries(true);\n }}\n >{`Show all ${dataWithConfig.length}`}</span>\n </div>\n )}\n <PanelRenderer\n data={{ series: seriesToShow, timeRange, structureRev, state: loadingState, annotations }}\n pluginId=\"timeseries\"\n title=\"\"\n width={width}\n height={height}\n onChangeTimeRange={onChangeTime}\n timeZone={timeZone}\n options={\n {\n tooltip: { mode: tooltipDisplayMode, sort: SortOrder.None },\n legend: { displayMode: LegendDisplayMode.List, placement: 'bottom', calcs: [] },\n } as TimeSeriesOptions\n }\n />\n </PanelContextProvider>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n timeSeriesDisclaimer: css`\n label: time-series-disclaimer;\n width: 300px;\n margin: ${theme.spacing(1)} auto;\n padding: 10px 0;\n border-radius: ${theme.spacing(2)};\n text-align: center;\n background-color: ${theme.colors.background.primary};\n `,\n disclaimerIcon: css`\n label: disclaimer-icon;\n color: ${theme.colors.warning.main};\n margin-right: ${theme.spacing(0.5)};\n `,\n showAllTimeSeries: css`\n label: show-all-time-series;\n cursor: pointer;\n color: ${theme.colors.text.link};\n `,\n});\n","import produce from 'immer';\n\nimport { FieldConfigSource } from '@grafana/data';\nimport { GraphDrawStyle, GraphFieldConfig, StackingMode } from '@grafana/schema';\n\nimport { ExploreGraphStyle } from '../../types';\n\nexport type FieldConfig = FieldConfigSource<GraphFieldConfig>;\n\nexport function applyGraphStyle(config: FieldConfig, style: ExploreGraphStyle): FieldConfig {\n return produce(config, (draft) => {\n if (draft.defaults.custom === undefined) {\n draft.defaults.custom = {};\n }\n\n const { custom } = draft.defaults;\n\n if (custom.stacking === undefined) {\n custom.stacking = { group: 'A' };\n }\n\n switch (style) {\n case 'lines':\n custom.drawStyle = GraphDrawStyle.Line;\n custom.stacking.mode = StackingMode.None;\n custom.fillOpacity = 0;\n break;\n case 'bars':\n custom.drawStyle = GraphDrawStyle.Bars;\n custom.stacking.mode = StackingMode.None;\n custom.fillOpacity = 100;\n break;\n case 'points':\n custom.drawStyle = GraphDrawStyle.Points;\n custom.stacking.mode = StackingMode.None;\n custom.fillOpacity = 0;\n break;\n case 'stacked_lines':\n custom.drawStyle = GraphDrawStyle.Line;\n custom.stacking.mode = StackingMode.Normal;\n custom.fillOpacity = 100;\n break;\n case 'stacked_bars':\n custom.drawStyle = GraphDrawStyle.Bars;\n custom.stacking.mode = StackingMode.Normal;\n custom.fillOpacity = 100;\n break;\n default: {\n // should never happen\n // NOTE: casting to `never` will cause typescript\n // to verify that the switch statement checks every possible\n // enum-value\n const invalidValue: never = style;\n throw new Error(`Invalid graph-style: ${invalidValue}`);\n }\n }\n });\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { RadioButtonGroup } from '@grafana/ui';\n\nimport { EXPLORE_GRAPH_STYLES, ExploreGraphStyle } from '../../types';\n\nconst ALL_GRAPH_STYLE_OPTIONS: Array<SelectableValue<ExploreGraphStyle>> = EXPLORE_GRAPH_STYLES.map((style) => ({\n value: style,\n // capital-case it and switch `_` to ` `\n label: style[0].toUpperCase() + style.slice(1).replace(/_/, ' '),\n}));\n\nconst spacing = css({\n display: 'flex',\n justifyContent: 'space-between',\n});\n\ntype Props = {\n graphStyle: ExploreGraphStyle;\n onChangeGraphStyle: (style: ExploreGraphStyle) => void;\n};\n\nexport function ExploreGraphLabel(props: Props) {\n const { graphStyle, onChangeGraphStyle } = props;\n return (\n <div className={spacing}>\n Graph\n <RadioButtonGroup size=\"sm\" options={ALL_GRAPH_STYLE_OPTIONS} value={graphStyle} onChange={onChangeGraphStyle} />\n </div>\n );\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport * as React from 'react';\nvar styles = {\n top: {\n width: '100%',\n height: '10px',\n top: '-5px',\n left: '0px',\n cursor: 'row-resize',\n },\n right: {\n width: '10px',\n height: '100%',\n top: '0px',\n right: '-5px',\n cursor: 'col-resize',\n },\n bottom: {\n width: '100%',\n height: '10px',\n bottom: '-5px',\n left: '0px',\n cursor: 'row-resize',\n },\n left: {\n width: '10px',\n height: '100%',\n top: '0px',\n left: '-5px',\n cursor: 'col-resize',\n },\n topRight: {\n width: '20px',\n height: '20px',\n position: 'absolute',\n right: '-10px',\n top: '-10px',\n cursor: 'ne-resize',\n },\n bottomRight: {\n width: '20px',\n height: '20px',\n position: 'absolute',\n right: '-10px',\n bottom: '-10px',\n cursor: 'se-resize',\n },\n bottomLeft: {\n width: '20px',\n height: '20px',\n position: 'absolute',\n left: '-10px',\n bottom: '-10px',\n cursor: 'sw-resize',\n },\n topLeft: {\n width: '20px',\n height: '20px',\n position: 'absolute',\n left: '-10px',\n top: '-10px',\n cursor: 'nw-resize',\n },\n};\nvar Resizer = /** @class */ (function (_super) {\n __extends(Resizer, _super);\n function Resizer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.onMouseDown = function (e) {\n _this.props.onResizeStart(e, _this.props.direction);\n };\n _this.onTouchStart = function (e) {\n _this.props.onResizeStart(e, _this.props.direction);\n };\n return _this;\n }\n Resizer.prototype.render = function () {\n return (React.createElement(\"div\", { className: this.props.className || '', style: __assign(__assign({ position: 'absolute', userSelect: 'none' }, styles[this.props.direction]), (this.props.replaceStyles || {})), onMouseDown: this.onMouseDown, onTouchStart: this.onTouchStart }, this.props.children));\n };\n return Resizer;\n}(React.PureComponent));\nexport { Resizer };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport * as React from 'react';\nimport { Resizer } from './resizer';\nimport memoize from 'fast-memoize';\nvar DEFAULT_SIZE = {\n width: 'auto',\n height: 'auto',\n};\nvar clamp = memoize(function (n, min, max) { return Math.max(Math.min(n, max), min); });\nvar snap = memoize(function (n, size) { return Math.round(n / size) * size; });\nvar hasDirection = memoize(function (dir, target) {\n return new RegExp(dir, 'i').test(target);\n});\n// INFO: In case of window is a Proxy and does not porxy Events correctly, use isTouchEvent & isMouseEvent to distinguish event type instead of `instanceof`.\nvar isTouchEvent = function (event) {\n return Boolean(event.touches && event.touches.length);\n};\nvar isMouseEvent = function (event) {\n return Boolean((event.clientX || event.clientX === 0) &&\n (event.clientY || event.clientY === 0));\n};\nvar findClosestSnap = memoize(function (n, snapArray, snapGap) {\n if (snapGap === void 0) { snapGap = 0; }\n var closestGapIndex = snapArray.reduce(function (prev, curr, index) { return (Math.abs(curr - n) < Math.abs(snapArray[prev] - n) ? index : prev); }, 0);\n var gap = Math.abs(snapArray[closestGapIndex] - n);\n return snapGap === 0 || gap < snapGap ? snapArray[closestGapIndex] : n;\n});\nvar endsWith = memoize(function (str, searchStr) {\n return str.substr(str.length - searchStr.length, searchStr.length) === searchStr;\n});\nvar getStringSize = memoize(function (n) {\n n = n.toString();\n if (n === 'auto') {\n return n;\n }\n if (endsWith(n, 'px')) {\n return n;\n }\n if (endsWith(n, '%')) {\n return n;\n }\n if (endsWith(n, 'vh')) {\n return n;\n }\n if (endsWith(n, 'vw')) {\n return n;\n }\n if (endsWith(n, 'vmax')) {\n return n;\n }\n if (endsWith(n, 'vmin')) {\n return n;\n }\n return n + \"px\";\n});\nvar getPixelSize = function (size, parentSize, innerWidth, innerHeight) {\n if (size && typeof size === 'string') {\n if (endsWith(size, 'px')) {\n return Number(size.replace('px', ''));\n }\n if (endsWith(size, '%')) {\n var ratio = Number(size.replace('%', '')) / 100;\n return parentSize * ratio;\n }\n if (endsWith(size, 'vw')) {\n var ratio = Number(size.replace('vw', '')) / 100;\n return innerWidth * ratio;\n }\n if (endsWith(size, 'vh')) {\n var ratio = Number(size.replace('vh', '')) / 100;\n return innerHeight * ratio;\n }\n }\n return size;\n};\nvar calculateNewMax = memoize(function (parentSize, innerWidth, innerHeight, maxWidth, maxHeight, minWidth, minHeight) {\n maxWidth = getPixelSize(maxWidth, parentSize.width, innerWidth, innerHeight);\n maxHeight = getPixelSize(maxHeight, parentSize.height, innerWidth, innerHeight);\n minWidth = getPixelSize(minWidth, parentSize.width, innerWidth, innerHeight);\n minHeight = getPixelSize(minHeight, parentSize.height, innerWidth, innerHeight);\n return {\n maxWidth: typeof maxWidth === 'undefined' ? undefined : Number(maxWidth),\n maxHeight: typeof maxHeight === 'undefined' ? undefined : Number(maxHeight),\n minWidth: typeof minWidth === 'undefined' ? undefined : Number(minWidth),\n minHeight: typeof minHeight === 'undefined' ? undefined : Number(minHeight),\n };\n});\nvar definedProps = [\n 'as',\n 'style',\n 'className',\n 'grid',\n 'snap',\n 'bounds',\n 'boundsByDirection',\n 'size',\n 'defaultSize',\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight',\n 'lockAspectRatio',\n 'lockAspectRatioExtraWidth',\n 'lockAspectRatioExtraHeight',\n 'enable',\n 'handleStyles',\n 'handleClasses',\n 'handleWrapperStyle',\n 'handleWrapperClass',\n 'children',\n 'onResizeStart',\n 'onResize',\n 'onResizeStop',\n 'handleComponent',\n 'scale',\n 'resizeRatio',\n 'snapGap',\n];\n// HACK: This class is used to calculate % size.\nvar baseClassName = '__resizable_base__';\nvar Resizable = /** @class */ (function (_super) {\n __extends(Resizable, _super);\n function Resizable(props) {\n var _this = _super.call(this, props) || this;\n _this.ratio = 1;\n _this.resizable = null;\n // For parent boundary\n _this.parentLeft = 0;\n _this.parentTop = 0;\n // For boundary\n _this.resizableLeft = 0;\n _this.resizableRight = 0;\n _this.resizableTop = 0;\n _this.resizableBottom = 0;\n // For target boundary\n _this.targetLeft = 0;\n _this.targetTop = 0;\n _this.appendBase = function () {\n if (!_this.resizable || !_this.window) {\n return null;\n }\n var parent = _this.parentNode;\n if (!parent) {\n return null;\n }\n var element = _this.window.document.createElement('div');\n element.style.width = '100%';\n element.style.height = '100%';\n element.style.position = 'absolute';\n element.style.transform = 'scale(0, 0)';\n element.style.left = '0';\n element.style.flex = '0 0 100%';\n if (element.classList) {\n element.classList.add(baseClassName);\n }\n else {\n element.className += baseClassName;\n }\n parent.appendChild(element);\n return element;\n };\n _this.removeBase = function (base) {\n var parent = _this.parentNode;\n if (!parent) {\n return;\n }\n parent.removeChild(base);\n };\n _this.ref = function (c) {\n if (c) {\n _this.resizable = c;\n }\n };\n _this.state = {\n isResizing: false,\n width: typeof (_this.propsSize && _this.propsSize.width) === 'undefined'\n ? 'auto'\n : _this.propsSize && _this.propsSize.width,\n height: typeof (_this.propsSize && _this.propsSize.height) === 'undefined'\n ? 'auto'\n : _this.propsSize && _this.propsSize.height,\n direction: 'right',\n original: {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n },\n backgroundStyle: {\n height: '100%',\n width: '100%',\n backgroundColor: 'rgba(0,0,0,0)',\n cursor: 'auto',\n opacity: 0,\n position: 'fixed',\n zIndex: 9999,\n top: '0',\n left: '0',\n bottom: '0',\n right: '0',\n },\n flexBasis: undefined,\n };\n _this.onResizeStart = _this.onResizeStart.bind(_this);\n _this.onMouseMove = _this.onMouseMove.bind(_this);\n _this.onMouseUp = _this.onMouseUp.bind(_this);\n return _this;\n }\n Object.defineProperty(Resizable.prototype, \"parentNode\", {\n get: function () {\n if (!this.resizable) {\n return null;\n }\n return this.resizable.parentNode;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Resizable.prototype, \"window\", {\n get: function () {\n if (!this.resizable) {\n return null;\n }\n if (!this.resizable.ownerDocument) {\n return null;\n }\n return this.resizable.ownerDocument.defaultView;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Resizable.prototype, \"propsSize\", {\n get: function () {\n return this.props.size || this.props.defaultSize || DEFAULT_SIZE;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Resizable.prototype, \"size\", {\n get: function () {\n var width = 0;\n var height = 0;\n if (this.resizable && this.window) {\n var orgWidth = this.resizable.offsetWidth;\n var orgHeight = this.resizable.offsetHeight;\n // HACK: Set position `relative` to get parent size.\n // This is because when re-resizable set `absolute`, I can not get base width correctly.\n var orgPosition = this.resizable.style.position;\n if (orgPosition !== 'relative') {\n this.resizable.style.position = 'relative';\n }\n // INFO: Use original width or height if set auto.\n width = this.resizable.style.width !== 'auto' ? this.resizable.offsetWidth : orgWidth;\n height = this.resizable.style.height !== 'auto' ? this.resizable.offsetHeight : orgHeight;\n // Restore original position\n this.resizable.style.position = orgPosition;\n }\n return { width: width, height: height };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Resizable.prototype, \"sizeStyle\", {\n get: function () {\n var _this = this;\n var size = this.props.size;\n var getSize = function (key) {\n if (typeof _this.state[key] === 'undefined' || _this.state[key] === 'auto') {\n return 'auto';\n }\n if (_this.propsSize && _this.propsSize[key] && endsWith(_this.propsSize[key].toString(), '%')) {\n if (endsWith(_this.state[key].toString(), '%')) {\n return _this.state[key].toString();\n }\n var parentSize = _this.getParentSize();\n var value = Number(_this.state[key].toString().replace('px', ''));\n var percent = (value / parentSize[key]) * 100;\n return percent + \"%\";\n }\n return getStringSize(_this.state[key]);\n };\n var width = size && typeof size.width !== 'undefined' && !this.state.isResizing\n ? getStringSize(size.width)\n : getSize('width');\n var height = size && typeof size.height !== 'undefined' && !this.state.isResizing\n ? getStringSize(size.height)\n : getSize('height');\n return { width: width, height: height };\n },\n enumerable: false,\n configurable: true\n });\n Resizable.prototype.getParentSize = function () {\n if (!this.parentNode) {\n if (!this.window) {\n return { width: 0, height: 0 };\n }\n return { width: this.window.innerWidth, height: this.window.innerHeight };\n }\n var base = this.appendBase();\n if (!base) {\n return { width: 0, height: 0 };\n }\n // INFO: To calculate parent width with flex layout\n var wrapChanged = false;\n var wrap = this.parentNode.style.flexWrap;\n if (wrap !== 'wrap') {\n wrapChanged = true;\n this.parentNode.style.flexWrap = 'wrap';\n // HACK: Use relative to get parent padding size\n }\n base.style.position = 'relative';\n base.style.minWidth = '100%';\n base.style.minHeight = '100%';\n var size = {\n width: base.offsetWidth,\n height: base.offsetHeight,\n };\n if (wrapChanged) {\n this.parentNode.style.flexWrap = wrap;\n }\n this.removeBase(base);\n return size;\n };\n Resizable.prototype.bindEvents = function () {\n if (this.window) {\n this.window.addEventListener('mouseup', this.onMouseUp);\n this.window.addEventListener('mousemove', this.onMouseMove);\n this.window.addEventListener('mouseleave', this.onMouseUp);\n this.window.addEventListener('touchmove', this.onMouseMove, {\n capture: true,\n passive: false,\n });\n this.window.addEventListener('touchend', this.onMouseUp);\n }\n };\n Resizable.prototype.unbindEvents = function () {\n if (this.window) {\n this.window.removeEventListener('mouseup', this.onMouseUp);\n this.window.removeEventListener('mousemove', this.onMouseMove);\n this.window.removeEventListener('mouseleave', this.onMouseUp);\n this.window.removeEventListener('touchmove', this.onMouseMove, true);\n this.window.removeEventListener('touchend', this.onMouseUp);\n }\n };\n Resizable.prototype.componentDidMount = function () {\n if (!this.resizable || !this.window) {\n return;\n }\n var computedStyle = this.window.getComputedStyle(this.resizable);\n this.setState({\n width: this.state.width || this.size.width,\n height: this.state.height || this.size.height,\n flexBasis: computedStyle.flexBasis !== 'auto' ? computedStyle.flexBasis : undefined,\n });\n };\n Resizable.prototype.componentWillUnmount = function () {\n if (this.window) {\n this.unbindEvents();\n }\n };\n Resizable.prototype.createSizeForCssProperty = function (newSize, kind) {\n var propsSize = this.propsSize && this.propsSize[kind];\n return this.state[kind] === 'auto' &&\n this.state.original[kind] === newSize &&\n (typeof propsSize === 'undefined' || propsSize === 'auto')\n ? 'auto'\n : newSize;\n };\n Resizable.prototype.calculateNewMaxFromBoundary = function (maxWidth, maxHeight) {\n var boundsByDirection = this.props.boundsByDirection;\n var direction = this.state.direction;\n var widthByDirection = boundsByDirection && hasDirection('left', direction);\n var heightByDirection = boundsByDirection && hasDirection('top', direction);\n var boundWidth;\n var boundHeight;\n if (this.props.bounds === 'parent') {\n var parent_1 = this.parentNode;\n if (parent_1) {\n boundWidth = widthByDirection\n ? this.resizableRight - this.parentLeft\n : parent_1.offsetWidth + (this.parentLeft - this.resizableLeft);\n boundHeight = heightByDirection\n ? this.resizableBottom - this.parentTop\n : parent_1.offsetHeight + (this.parentTop - this.resizableTop);\n }\n }\n else if (this.props.bounds === 'window') {\n if (this.window) {\n boundWidth = widthByDirection ? this.resizableRight : this.window.innerWidth - this.resizableLeft;\n boundHeight = heightByDirection ? this.resizableBottom : this.window.innerHeight - this.resizableTop;\n }\n }\n else if (this.props.bounds) {\n boundWidth = widthByDirection\n ? this.resizableRight - this.targetLeft\n : this.props.bounds.offsetWidth + (this.targetLeft - this.resizableLeft);\n boundHeight = heightByDirection\n ? this.resizableBottom - this.targetTop\n : this.props.bounds.offsetHeight + (this.targetTop - this.resizableTop);\n }\n if (boundWidth && Number.isFinite(boundWidth)) {\n maxWidth = maxWidth && maxWidth < boundWidth ? maxWidth : boundWidth;\n }\n if (boundHeight && Number.isFinite(boundHeight)) {\n maxHeight = maxHeight && maxHeight < boundHeight ? maxHeight : boundHeight;\n }\n return { maxWidth: maxWidth, maxHeight: maxHeight };\n };\n Resizable.prototype.calculateNewSizeFromDirection = function (clientX, clientY) {\n var scale = this.props.scale || 1;\n var resizeRatio = this.props.resizeRatio || 1;\n var _a = this.state, direction = _a.direction, original = _a.original;\n var _b = this.props, lockAspectRatio = _b.lockAspectRatio, lockAspectRatioExtraHeight = _b.lockAspectRatioExtraHeight, lockAspectRatioExtraWidth = _b.lockAspectRatioExtraWidth;\n var newWidth = original.width;\n var newHeight = original.height;\n var extraHeight = lockAspectRatioExtraHeight || 0;\n var extraWidth = lockAspectRatioExtraWidth || 0;\n if (hasDirection('right', direction)) {\n newWidth = original.width + ((clientX - original.x) * resizeRatio) / scale;\n if (lockAspectRatio) {\n newHeight = (newWidth - extraWidth) / this.ratio + extraHeight;\n }\n }\n if (hasDirection('left', direction)) {\n newWidth = original.width - ((clientX - original.x) * resizeRatio) / scale;\n if (lockAspectRatio) {\n newHeight = (newWidth - extraWidth) / this.ratio + extraHeight;\n }\n }\n if (hasDirection('bottom', direction)) {\n newHeight = original.height + ((clientY - original.y) * resizeRatio) / scale;\n if (lockAspectRatio) {\n newWidth = (newHeight - extraHeight) * this.ratio + extraWidth;\n }\n }\n if (hasDirection('top', direction)) {\n newHeight = original.height - ((clientY - original.y) * resizeRatio) / scale;\n if (lockAspectRatio) {\n newWidth = (newHeight - extraHeight) * this.ratio + extraWidth;\n }\n }\n return { newWidth: newWidth, newHeight: newHeight };\n };\n Resizable.prototype.calculateNewSizeFromAspectRatio = function (newWidth, newHeight, max, min) {\n var _a = this.props, lockAspectRatio = _a.lockAspectRatio, lockAspectRatioExtraHeight = _a.lockAspectRatioExtraHeight, lockAspectRatioExtraWidth = _a.lockAspectRatioExtraWidth;\n var computedMinWidth = typeof min.width === 'undefined' ? 10 : min.width;\n var computedMaxWidth = typeof max.width === 'undefined' || max.width < 0 ? newWidth : max.width;\n var computedMinHeight = typeof min.height === 'undefined' ? 10 : min.height;\n var computedMaxHeight = typeof max.height === 'undefined' || max.height < 0 ? newHeight : max.height;\n var extraHeight = lockAspectRatioExtraHeight || 0;\n var extraWidth = lockAspectRatioExtraWidth || 0;\n if (lockAspectRatio) {\n var extraMinWidth = (computedMinHeight - extraHeight) * this.ratio + extraWidth;\n var extraMaxWidth = (computedMaxHeight - extraHeight) * this.ratio + extraWidth;\n var extraMinHeight = (computedMinWidth - extraWidth) / this.ratio + extraHeight;\n var extraMaxHeight = (computedMaxWidth - extraWidth) / this.ratio + extraHeight;\n var lockedMinWidth = Math.max(computedMinWidth, extraMinWidth);\n var lockedMaxWidth = Math.min(computedMaxWidth, extraMaxWidth);\n var lockedMinHeight = Math.max(computedMinHeight, extraMinHeight);\n var lockedMaxHeight = Math.min(computedMaxHeight, extraMaxHeight);\n newWidth = clamp(newWidth, lockedMinWidth, lockedMaxWidth);\n newHeight = clamp(newHeight, lockedMinHeight, lockedMaxHeight);\n }\n else {\n newWidth = clamp(newWidth, computedMinWidth, computedMaxWidth);\n newHeight = clamp(newHeight, computedMinHeight, computedMaxHeight);\n }\n return { newWidth: newWidth, newHeight: newHeight };\n };\n Resizable.prototype.setBoundingClientRect = function () {\n // For parent boundary\n if (this.props.bounds === 'parent') {\n var parent_2 = this.parentNode;\n if (parent_2) {\n var parentRect = parent_2.getBoundingClientRect();\n this.parentLeft = parentRect.left;\n this.parentTop = parentRect.top;\n }\n }\n // For target(html element) boundary\n if (this.props.bounds && typeof this.props.bounds !== 'string') {\n var targetRect = this.props.bounds.getBoundingClientRect();\n this.targetLeft = targetRect.left;\n this.targetTop = targetRect.top;\n }\n // For boundary\n if (this.resizable) {\n var _a = this.resizable.getBoundingClientRect(), left = _a.left, top_1 = _a.top, right = _a.right, bottom = _a.bottom;\n this.resizableLeft = left;\n this.resizableRight = right;\n this.resizableTop = top_1;\n this.resizableBottom = bottom;\n }\n };\n Resizable.prototype.onResizeStart = function (event, direction) {\n if (!this.resizable || !this.window) {\n return;\n }\n var clientX = 0;\n var clientY = 0;\n if (event.nativeEvent && isMouseEvent(event.nativeEvent)) {\n clientX = event.nativeEvent.clientX;\n clientY = event.nativeEvent.clientY;\n }\n else if (event.nativeEvent && isTouchEvent(event.nativeEvent)) {\n clientX = event.nativeEvent.touches[0].clientX;\n clientY = event.nativeEvent.touches[0].clientY;\n }\n if (this.props.onResizeStart) {\n if (this.resizable) {\n var startResize = this.props.onResizeStart(event, direction, this.resizable);\n if (startResize === false) {\n return;\n }\n }\n }\n // Fix #168\n if (this.props.size) {\n if (typeof this.props.size.height !== 'undefined' && this.props.size.height !== this.state.height) {\n this.setState({ height: this.props.size.height });\n }\n if (typeof this.props.size.width !== 'undefined' && this.props.size.width !== this.state.width) {\n this.setState({ width: this.props.size.width });\n }\n }\n // For lockAspectRatio case\n this.ratio =\n typeof this.props.lockAspectRatio === 'number' ? this.props.lockAspectRatio : this.size.width / this.size.height;\n var flexBasis;\n var computedStyle = this.window.getComputedStyle(this.resizable);\n if (computedStyle.flexBasis !== 'auto') {\n var parent_3 = this.parentNode;\n if (parent_3) {\n var dir = this.window.getComputedStyle(parent_3).flexDirection;\n this.flexDir = dir.startsWith('row') ? 'row' : 'column';\n flexBasis = computedStyle.flexBasis;\n }\n }\n // For boundary\n this.setBoundingClientRect();\n this.bindEvents();\n var state = {\n original: {\n x: clientX,\n y: clientY,\n width: this.size.width,\n height: this.size.height,\n },\n isResizing: true,\n backgroundStyle: __assign(__assign({}, this.state.backgroundStyle), { cursor: this.window.getComputedStyle(event.target).cursor || 'auto' }),\n direction: direction,\n flexBasis: flexBasis,\n };\n this.setState(state);\n };\n Resizable.prototype.onMouseMove = function (event) {\n if (!this.state.isResizing || !this.resizable || !this.window) {\n return;\n }\n if (this.window.TouchEvent && isTouchEvent(event)) {\n try {\n event.preventDefault();\n event.stopPropagation();\n }\n catch (e) {\n // Ignore on fail\n }\n }\n var _a = this.props, maxWidth = _a.maxWidth, maxHeight = _a.maxHeight, minWidth = _a.minWidth, minHeight = _a.minHeight;\n var clientX = isTouchEvent(event) ? event.touches[0].clientX : event.clientX;\n var clientY = isTouchEvent(event) ? event.touches[0].clientY : event.clientY;\n var _b = this.state, direction = _b.direction, original = _b.original, width = _b.width, height = _b.height;\n var parentSize = this.getParentSize();\n var max = calculateNewMax(parentSize, this.window.innerWidth, this.window.innerHeight, maxWidth, maxHeight, minWidth, minHeight);\n maxWidth = max.maxWidth;\n maxHeight = max.maxHeight;\n minWidth = max.minWidth;\n minHeight = max.minHeight;\n // Calculate new size\n var _c = this.calculateNewSizeFromDirection(clientX, clientY), newHeight = _c.newHeight, newWidth = _c.newWidth;\n // Calculate max size from boundary settings\n var boundaryMax = this.calculateNewMaxFromBoundary(maxWidth, maxHeight);\n if (this.props.snap && this.props.snap.x) {\n newWidth = findClosestSnap(newWidth, this.props.snap.x, this.props.snapGap);\n }\n if (this.props.snap && this.props.snap.y) {\n newHeight = findClosestSnap(newHeight, this.props.snap.y, this.props.snapGap);\n }\n // Calculate new size from aspect ratio\n var newSize = this.calculateNewSizeFromAspectRatio(newWidth, newHeight, { width: boundaryMax.maxWidth, height: boundaryMax.maxHeight }, { width: minWidth, height: minHeight });\n newWidth = newSize.newWidth;\n newHeight = newSize.newHeight;\n if (this.props.grid) {\n var newGridWidth = snap(newWidth, this.props.grid[0]);\n var newGridHeight = snap(newHeight, this.props.grid[1]);\n var gap = this.props.snapGap || 0;\n newWidth = gap === 0 || Math.abs(newGridWidth - newWidth) <= gap ? newGridWidth : newWidth;\n newHeight = gap === 0 || Math.abs(newGridHeight - newHeight) <= gap ? newGridHeight : newHeight;\n }\n var delta = {\n width: newWidth - original.width,\n height: newHeight - original.height,\n };\n if (width && typeof width === 'string') {\n if (endsWith(width, '%')) {\n var percent = (newWidth / parentSize.width) * 100;\n newWidth = percent + \"%\";\n }\n else if (endsWith(width, 'vw')) {\n var vw = (newWidth / this.window.innerWidth) * 100;\n newWidth = vw + \"vw\";\n }\n else if (endsWith(width, 'vh')) {\n var vh = (newWidth / this.window.innerHeight) * 100;\n newWidth = vh + \"vh\";\n }\n }\n if (height && typeof height === 'string') {\n if (endsWith(height, '%')) {\n var percent = (newHeight / parentSize.height) * 100;\n newHeight = percent + \"%\";\n }\n else if (endsWith(height, 'vw')) {\n var vw = (newHeight / this.window.innerWidth) * 100;\n newHeight = vw + \"vw\";\n }\n else if (endsWith(height, 'vh')) {\n var vh = (newHeight / this.window.innerHeight) * 100;\n newHeight = vh + \"vh\";\n }\n }\n var newState = {\n width: this.createSizeForCssProperty(newWidth, 'width'),\n height: this.createSizeForCssProperty(newHeight, 'height'),\n };\n if (this.flexDir === 'row') {\n newState.flexBasis = newState.width;\n }\n else if (this.flexDir === 'column') {\n newState.flexBasis = newState.height;\n }\n this.setState(newState);\n if (this.props.onResize) {\n this.props.onResize(event, direction, this.resizable, delta);\n }\n };\n Resizable.prototype.onMouseUp = function (event) {\n var _a = this.state, isResizing = _a.isResizing, direction = _a.direction, original = _a.original;\n if (!isResizing || !this.resizable) {\n return;\n }\n var delta = {\n width: this.size.width - original.width,\n height: this.size.height - original.height,\n };\n if (this.props.onResizeStop) {\n this.props.onResizeStop(event, direction, this.resizable, delta);\n }\n if (this.props.size) {\n this.setState(this.props.size);\n }\n this.unbindEvents();\n this.setState({\n isResizing: false,\n backgroundStyle: __assign(__assign({}, this.state.backgroundStyle), { cursor: 'auto' }),\n });\n };\n Resizable.prototype.updateSize = function (size) {\n this.setState({ width: size.width, height: size.height });\n };\n Resizable.prototype.renderResizer = function () {\n var _this = this;\n var _a = this.props, enable = _a.enable, handleStyles = _a.handleStyles, handleClasses = _a.handleClasses, handleWrapperStyle = _a.handleWrapperStyle, handleWrapperClass = _a.handleWrapperClass, handleComponent = _a.handleComponent;\n if (!enable) {\n return null;\n }\n var resizers = Object.keys(enable).map(function (dir) {\n if (enable[dir] !== false) {\n return (React.createElement(Resizer, { key: dir, direction: dir, onResizeStart: _this.onResizeStart, replaceStyles: handleStyles && handleStyles[dir], className: handleClasses && handleClasses[dir] }, handleComponent && handleComponent[dir] ? handleComponent[dir] : null));\n }\n return null;\n });\n // #93 Wrap the resize box in span (will not break 100% width/height)\n return (React.createElement(\"div\", { className: handleWrapperClass, style: handleWrapperStyle }, resizers));\n };\n Resizable.prototype.render = function () {\n var _this = this;\n var extendsProps = Object.keys(this.props).reduce(function (acc, key) {\n if (definedProps.indexOf(key) !== -1) {\n return acc;\n }\n acc[key] = _this.props[key];\n return acc;\n }, {});\n var style = __assign(__assign(__assign({ position: 'relative', userSelect: this.state.isResizing ? 'none' : 'auto' }, this.props.style), this.sizeStyle), { maxWidth: this.props.maxWidth, maxHeight: this.props.maxHeight, minWidth: this.props.minWidth, minHeight: this.props.minHeight, boxSizing: 'border-box', flexShrink: 0 });\n if (this.state.flexBasis) {\n style.flexBasis = this.state.flexBasis;\n }\n var Wrapper = this.props.as || 'div';\n return (React.createElement(Wrapper, __assign({ ref: this.ref, style: style, className: this.props.className }, extendsProps),\n this.state.isResizing && React.createElement(\"div\", { style: this.state.backgroundStyle }),\n this.props.children,\n this.renderResizer()));\n };\n Resizable.defaultProps = {\n as: 'div',\n onResizeStart: function () { },\n onResize: function () { },\n onResizeStop: function () { },\n enable: {\n top: true,\n right: true,\n bottom: true,\n left: true,\n topRight: true,\n bottomRight: true,\n bottomLeft: true,\n topLeft: true,\n },\n style: {},\n grid: [1, 1],\n lockAspectRatio: false,\n lockAspectRatioExtraWidth: 0,\n lockAspectRatioExtraHeight: 0,\n scale: 1,\n resizeRatio: 1,\n snapGap: 0,\n };\n return Resizable;\n}(React.PureComponent));\nexport { Resizable };\n","// Libraries\nimport { css, cx, keyframes } from '@emotion/css';\nimport { Resizable, ResizeCallback } from 're-resizable';\nimport React from 'react';\n\n// Services & Utils\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { stylesFactory, useTheme2 } from '@grafana/ui';\n\n// Types\n\nconst drawerSlide = keyframes`\n 0% {\n transform: translateY(400px);\n }\n\n 100% {\n transform: translateY(0px);\n }\n`;\n\nconst getStyles = stylesFactory((theme: GrafanaTheme2) => {\n return {\n container: css`\n position: fixed !important;\n bottom: 0;\n background: ${theme.colors.background.primary};\n border-top: 1px solid ${theme.colors.border.weak};\n margin: ${theme.spacing(0, -2, 0, -2)};\n box-shadow: ${theme.shadows.z3};\n z-index: ${theme.zIndex.sidemenu};\n `,\n drawerActive: css`\n opacity: 1;\n animation: 0.5s ease-out ${drawerSlide};\n `,\n rzHandle: css`\n background: ${theme.colors.secondary.main};\n transition: 0.3s background ease-in-out;\n position: relative;\n width: 200px !important;\n height: 7px !important;\n left: calc(50% - 100px) !important;\n top: -4px !important;\n cursor: grab;\n border-radius: 4px;\n &:hover {\n background: ${theme.colors.secondary.shade};\n }\n `,\n };\n});\n\nexport interface Props {\n width: number;\n children: React.ReactNode;\n onResize?: ResizeCallback;\n}\n\nexport function ExploreDrawer(props: Props) {\n const { width, children, onResize } = props;\n const theme = useTheme2();\n const styles = getStyles(theme);\n const drawerWidth = `${width + 31.5}px`;\n\n return (\n <Resizable\n className={cx(styles.container, styles.drawerActive)}\n defaultSize={{ width: drawerWidth, height: '400px' }}\n handleClasses={{ top: styles.rzHandle }}\n enable={{\n top: true,\n right: false,\n bottom: false,\n left: false,\n topRight: false,\n bottomRight: false,\n bottomLeft: false,\n topLeft: false,\n }}\n maxHeight=\"100vh\"\n maxWidth={drawerWidth}\n minWidth={drawerWidth}\n onResize={onResize}\n >\n {children}\n </Resizable>\n );\n}\n","import React from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport { TimeZone } from '@grafana/data';\nimport { TabbedContainer, TabConfig } from '@grafana/ui';\nimport { ExploreDrawer } from 'app/features/explore/ExploreDrawer';\nimport { InspectDataTab } from 'app/features/inspector/InspectDataTab';\nimport { InspectErrorTab } from 'app/features/inspector/InspectErrorTab';\nimport { InspectJSONTab } from 'app/features/inspector/InspectJSONTab';\nimport { InspectStatsTab } from 'app/features/inspector/InspectStatsTab';\nimport { QueryInspector } from 'app/features/inspector/QueryInspector';\nimport { StoreState, ExploreItemState, ExploreId } from 'app/types';\n\nimport { runQueries } from './state/query';\n\ninterface DispatchProps {\n width: number;\n exploreId: ExploreId;\n timeZone: TimeZone;\n onClose: () => void;\n}\n\ntype Props = DispatchProps & ConnectedProps<typeof connector>;\n\nexport function ExploreQueryInspector(props: Props) {\n const { loading, width, onClose, queryResponse, timeZone } = props;\n const dataFrames = queryResponse?.series || [];\n const error = queryResponse?.error;\n\n const statsTab: TabConfig = {\n label: 'Stats',\n value: 'stats',\n icon: 'chart-line',\n content: <InspectStatsTab data={queryResponse!} timeZone={queryResponse?.request?.timezone as TimeZone} />,\n };\n\n const jsonTab: TabConfig = {\n label: 'JSON',\n value: 'json',\n icon: 'brackets-curly',\n content: <InspectJSONTab data={queryResponse} onClose={onClose} />,\n };\n\n const dataTab: TabConfig = {\n label: 'Data',\n value: 'data',\n icon: 'database',\n content: (\n <InspectDataTab\n data={dataFrames}\n isLoading={loading}\n options={{ withTransforms: false, withFieldConfig: false }}\n timeZone={timeZone}\n />\n ),\n };\n\n const queryTab: TabConfig = {\n label: 'Query',\n value: 'query',\n icon: 'info-circle',\n content: <QueryInspector data={dataFrames} onRefreshQuery={() => props.runQueries(props.exploreId)} />,\n };\n\n const tabs = [statsTab, queryTab, jsonTab, dataTab];\n if (error) {\n const errorTab: TabConfig = {\n label: 'Error',\n value: 'error',\n icon: 'exclamation-triangle',\n content: <InspectErrorTab error={error} />,\n };\n tabs.push(errorTab);\n }\n return (\n <ExploreDrawer width={width} onResize={() => {}}>\n <TabbedContainer tabs={tabs} onClose={onClose} closeIconTooltip=\"Close query inspector\" />\n </ExploreDrawer>\n );\n}\n\nfunction mapStateToProps(state: StoreState, { exploreId }: { exploreId: ExploreId }) {\n const explore = state.explore;\n const item: ExploreItemState = explore[exploreId]!;\n const { loading, queryResponse } = item;\n\n return {\n loading,\n queryResponse,\n };\n}\n\nconst mapDispatchToProps = {\n runQueries,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(ExploreQueryInspector);\n","import React from 'react';\n\nimport { Tooltip, ToolbarButton } from '@grafana/ui';\n\ninterface TimeSyncButtonProps {\n isSynced: boolean;\n onClick: () => void;\n}\n\nexport function TimeSyncButton(props: TimeSyncButtonProps) {\n const { onClick, isSynced } = props;\n\n const syncTimesTooltip = () => {\n const { isSynced } = props;\n const tooltip = isSynced ? 'Unsync all views' : 'Sync all views to this time range';\n return <>{tooltip}</>;\n };\n\n return (\n <Tooltip content={syncTimesTooltip} placement=\"bottom\">\n <ToolbarButton\n icon=\"link\"\n variant={isSynced ? 'active' : 'default'}\n aria-label={isSynced ? 'Synced times' : 'Unsynced times'}\n onClick={onClick}\n />\n </Tooltip>\n );\n}\n","import React, { Component } from 'react';\n\nimport { TimeRange, TimeZone, RawTimeRange, dateTimeForTimeZone, dateMath } from '@grafana/data';\nimport { TimePickerWithHistory } from 'app/core/components/TimePicker/TimePickerWithHistory';\nimport { getShiftedTimeRange, getZoomedTimeRange } from 'app/core/utils/timePicker';\nimport { ExploreId } from 'app/types';\n\nimport { TimeSyncButton } from './TimeSyncButton';\n\nexport interface Props {\n exploreId: ExploreId;\n hideText?: boolean;\n range: TimeRange;\n timeZone: TimeZone;\n fiscalYearStartMonth: number;\n splitted: boolean;\n syncedTimes: boolean;\n onChangeTimeSync: () => void;\n onChangeTime: (range: RawTimeRange) => void;\n onChangeTimeZone: (timeZone: TimeZone) => void;\n onChangeFiscalYearStartMonth: (fiscalYearStartMonth: number) => void;\n}\n\nexport class ExploreTimeControls extends Component<Props> {\n onMoveTimePicker = (direction: number) => {\n const { range, onChangeTime, timeZone } = this.props;\n const { from, to } = getShiftedTimeRange(direction, range);\n const nextTimeRange = {\n from: dateTimeForTimeZone(timeZone, from),\n to: dateTimeForTimeZone(timeZone, to),\n };\n\n onChangeTime(nextTimeRange);\n };\n\n onMoveForward = () => this.onMoveTimePicker(1);\n onMoveBack = () => this.onMoveTimePicker(-1);\n\n onChangeTimePicker = (timeRange: TimeRange) => {\n const adjustedFrom = dateMath.isMathString(timeRange.raw.from) ? timeRange.raw.from : timeRange.from;\n const adjustedTo = dateMath.isMathString(timeRange.raw.to) ? timeRange.raw.to : timeRange.to;\n\n this.props.onChangeTime({\n from: adjustedFrom,\n to: adjustedTo,\n });\n };\n\n onZoom = () => {\n const { range, onChangeTime, timeZone } = this.props;\n const { from, to } = getZoomedTimeRange(range, 2);\n const nextTimeRange = {\n from: dateTimeForTimeZone(timeZone, from),\n to: dateTimeForTimeZone(timeZone, to),\n };\n\n onChangeTime(nextTimeRange);\n };\n\n render() {\n const {\n range,\n timeZone,\n fiscalYearStartMonth,\n splitted,\n syncedTimes,\n onChangeTimeSync,\n hideText,\n onChangeTimeZone,\n onChangeFiscalYearStartMonth,\n } = this.props;\n const timeSyncButton = splitted ? <TimeSyncButton onClick={onChangeTimeSync} isSynced={syncedTimes} /> : undefined;\n const timePickerCommonProps = {\n value: range,\n timeZone,\n fiscalYearStartMonth,\n onMoveBackward: this.onMoveBack,\n onMoveForward: this.onMoveForward,\n onZoom: this.onZoom,\n hideText,\n };\n\n return (\n <TimePickerWithHistory\n {...timePickerCommonProps}\n timeSyncButton={timeSyncButton}\n isSynced={syncedTimes}\n onChange={this.onChangeTimePicker}\n onChangeTimeZone={onChangeTimeZone}\n onChangeFiscalYearStartMonth={onChangeFiscalYearStartMonth}\n />\n );\n }\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport { Tooltip, ButtonGroup, ToolbarButton } from '@grafana/ui';\n\ntype LiveTailButtonProps = {\n splitted: boolean;\n start: () => void;\n stop: () => void;\n pause: () => void;\n resume: () => void;\n isLive: boolean;\n isPaused: boolean;\n};\n\nexport function LiveTailButton(props: LiveTailButtonProps) {\n const { start, pause, resume, isLive, isPaused, stop, splitted } = props;\n const buttonVariant = isLive && !isPaused ? 'active' : 'default';\n const onClickMain = isLive ? (isPaused ? resume : pause) : start;\n\n return (\n <ButtonGroup>\n <Tooltip\n content={isLive && !isPaused ? <>Pause the live stream</> : <>Start live stream your logs</>}\n placement=\"bottom\"\n >\n <ToolbarButton\n iconOnly={splitted}\n variant={buttonVariant}\n icon={!isLive || isPaused ? 'play' : 'pause'}\n onClick={onClickMain}\n >\n {isLive && isPaused ? 'Paused' : 'Live'}\n </ToolbarButton>\n </Tooltip>\n\n <CSSTransition\n mountOnEnter={true}\n unmountOnExit={true}\n timeout={100}\n in={isLive}\n classNames={{\n enter: styles.stopButtonEnter,\n enterActive: styles.stopButtonEnterActive,\n exit: styles.stopButtonExit,\n exitActive: styles.stopButtonExitActive,\n }}\n >\n <Tooltip content={<>Stop and exit the live stream</>} placement=\"bottom\">\n <ToolbarButton variant={buttonVariant} onClick={stop} icon=\"square-shape\" />\n </Tooltip>\n </CSSTransition>\n </ButtonGroup>\n );\n}\n\nconst styles = {\n stopButtonEnter: css`\n label: stopButtonEnter;\n width: 0;\n opacity: 0;\n overflow: hidden;\n `,\n stopButtonEnterActive: css`\n label: stopButtonEnterActive;\n opacity: 1;\n width: 32px;\n `,\n stopButtonExit: css`\n label: stopButtonExit;\n width: 32px;\n opacity: 1;\n overflow: hidden;\n `,\n stopButtonExitActive: css`\n label: stopButtonExitActive;\n opacity: 0;\n width: 0;\n `,\n};\n","import React from 'react';\n\nimport { RefreshPicker, defaultIntervals } from '@grafana/ui';\nimport { getTimeSrv } from 'app/features/dashboard/services/TimeSrv';\n\nexport type Props = {\n isSmall?: boolean;\n loading: boolean;\n isLive: boolean;\n onRun: (loading: boolean) => void;\n refreshInterval?: string;\n onChangeRefreshInterval: (interval: string) => void;\n showDropdown: boolean;\n};\n\nexport function RunButton(props: Props) {\n const { isSmall, loading, onRun, onChangeRefreshInterval, refreshInterval, showDropdown, isLive } = props;\n const intervals = getTimeSrv().getValidIntervals(defaultIntervals);\n let text: string | undefined = loading ? 'Cancel' : 'Run query';\n let tooltip = '';\n let width = '108px';\n\n if (isLive) {\n return null;\n }\n\n if (isSmall) {\n tooltip = text;\n text = undefined;\n width = '35px';\n }\n\n return (\n <RefreshPicker\n onIntervalChanged={onChangeRefreshInterval}\n value={refreshInterval}\n isLoading={loading}\n text={text}\n tooltip={tooltip}\n intervals={intervals}\n isLive={isLive}\n onRefresh={() => onRun(loading)}\n noIntervalPicker={!showDropdown}\n primary={true}\n width={width}\n />\n );\n}\n","import React, { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { RefreshPicker } from '@grafana/ui';\n\nimport { ExploreId } from '../../types';\n\nimport { setPausedStateAction, runQueries } from './state/query';\nimport { changeRefreshInterval } from './state/time';\n\n/**\n * Hook that gives you all the functions needed to control the live tailing.\n */\nexport function useLiveTailControls(exploreId: ExploreId) {\n const dispatch = useDispatch();\n\n const pause = useCallback(() => {\n dispatch(setPausedStateAction({ exploreId, isPaused: true }));\n }, [exploreId, dispatch]);\n\n const resume = useCallback(() => {\n dispatch(setPausedStateAction({ exploreId, isPaused: false }));\n }, [exploreId, dispatch]);\n\n const stop = useCallback(() => {\n // We need to pause here first because there is transition where we are not live but live logs are still shown\n // to cross fade with the normal view. This will prevent reordering of the logs in the live view during the\n // transition.\n pause();\n\n // TODO referencing this from perspective of refresh picker when there is designated button for it now is not\n // great. Needs a bit of refactoring.\n dispatch(changeRefreshInterval(exploreId, RefreshPicker.offOption.value));\n dispatch(runQueries(exploreId));\n }, [exploreId, dispatch, pause]);\n\n const start = useCallback(() => {\n dispatch(changeRefreshInterval(exploreId, RefreshPicker.liveOption.value));\n }, [exploreId, dispatch]);\n\n return {\n pause,\n resume,\n stop,\n start,\n };\n}\n\ntype Props = {\n exploreId: ExploreId;\n children: (controls: ReturnType<typeof useLiveTailControls>) => React.ReactElement;\n};\n\n/**\n * If you can't use the hook you can use this as a render prop pattern.\n */\nexport function LiveTailControls(props: Props) {\n const controls = useLiveTailControls(props.exploreId);\n return props.children(controls);\n}\n","import React, { lazy, PureComponent, RefObject, Suspense } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport { DataSourceInstanceSettings, RawTimeRange } from '@grafana/data';\nimport { config, DataSourcePicker } from '@grafana/runtime';\nimport { PageToolbar, SetInterval, ToolbarButton, ToolbarButtonRow } from '@grafana/ui';\nimport { createAndCopyShortLink } from 'app/core/utils/shortLinks';\nimport { ExploreId } from 'app/types/explore';\nimport { StoreState } from 'app/types/store';\n\nimport { DashNavButton } from '../dashboard/components/DashNav/DashNavButton';\nimport { updateFiscalYearStartMonthForSession, updateTimeZoneForSession } from '../profile/state/reducers';\nimport { getFiscalYearStartMonth, getTimeZone } from '../profile/state/selectors';\n\nimport { ExploreTimeControls } from './ExploreTimeControls';\nimport { LiveTailButton } from './LiveTailButton';\nimport { RunButton } from './RunButton';\nimport { changeDatasource } from './state/datasource';\nimport { splitClose, splitOpen } from './state/main';\nimport { cancelQueries, runQueries } from './state/query';\nimport { isSplit } from './state/selectors';\nimport { syncTimes, changeRefreshInterval } from './state/time';\nimport { LiveTailControls } from './useLiveTailControls';\n\nconst AddToDashboard = lazy(() =>\n import('./AddToDashboard').then(({ AddToDashboard }) => ({ default: AddToDashboard }))\n);\n\ninterface OwnProps {\n exploreId: ExploreId;\n onChangeTime: (range: RawTimeRange, changedByScanner?: boolean) => void;\n topOfExploreViewRef?: RefObject<HTMLDivElement>;\n}\n\ntype Props = OwnProps & ConnectedProps<typeof connector>;\n\nclass UnConnectedExploreToolbar extends PureComponent<Props> {\n onChangeDatasource = async (dsSettings: DataSourceInstanceSettings) => {\n this.props.changeDatasource(this.props.exploreId, dsSettings.uid, { importQueries: true });\n };\n\n onRunQuery = (loading = false) => {\n const { runQueries, cancelQueries, exploreId } = this.props;\n if (loading) {\n return cancelQueries(exploreId);\n } else {\n return runQueries(exploreId);\n }\n };\n\n onChangeRefreshInterval = (item: string) => {\n const { changeRefreshInterval, exploreId } = this.props;\n changeRefreshInterval(exploreId, item);\n };\n\n onChangeTimeSync = () => {\n const { syncTimes, exploreId } = this.props;\n syncTimes(exploreId);\n };\n\n render() {\n const {\n datasourceMissing,\n closeSplit,\n exploreId,\n loading,\n range,\n timeZone,\n fiscalYearStartMonth,\n splitted,\n syncedTimes,\n refreshInterval,\n onChangeTime,\n split,\n hasLiveOption,\n isLive,\n isPaused,\n containerWidth,\n onChangeTimeZone,\n onChangeFiscalYearStartMonth,\n topOfExploreViewRef,\n } = this.props;\n\n const showSmallDataSourcePicker = (splitted ? containerWidth < 700 : containerWidth < 800) || false;\n const showSmallTimePicker = splitted || containerWidth < 1210;\n\n return (\n <div ref={topOfExploreViewRef}>\n <PageToolbar\n aria-label=\"Explore toolbar\"\n title={exploreId === ExploreId.left ? 'Explore' : undefined}\n pageIcon={exploreId === ExploreId.left ? 'compass' : undefined}\n leftItems={[\n exploreId === ExploreId.left && (\n <DashNavButton\n key=\"share\"\n tooltip=\"Copy shortened link\"\n icon=\"share-alt\"\n onClick={() => createAndCopyShortLink(window.location.href)}\n aria-label=\"Copy shortened link\"\n />\n ),\n !datasourceMissing && (\n <DataSourcePicker\n key={`${exploreId}-ds-picker`}\n onChange={this.onChangeDatasource}\n current={this.props.datasourceName}\n hideTextValue={showSmallDataSourcePicker}\n width={showSmallDataSourcePicker ? 8 : undefined}\n />\n ),\n ].filter(Boolean)}\n >\n <ToolbarButtonRow>\n {!splitted ? (\n <ToolbarButton title=\"Split\" onClick={() => split()} icon=\"columns\" disabled={isLive}>\n Split\n </ToolbarButton>\n ) : (\n <ToolbarButton title=\"Close split pane\" onClick={() => closeSplit(exploreId)} icon=\"times\">\n Close\n </ToolbarButton>\n )}\n\n {config.featureToggles.explore2Dashboard && (\n <Suspense fallback={null}>\n <AddToDashboard exploreId={exploreId} />\n </Suspense>\n )}\n\n {!isLive && (\n <ExploreTimeControls\n exploreId={exploreId}\n range={range}\n timeZone={timeZone}\n fiscalYearStartMonth={fiscalYearStartMonth}\n onChangeTime={onChangeTime}\n splitted={splitted}\n syncedTimes={syncedTimes}\n onChangeTimeSync={this.onChangeTimeSync}\n hideText={showSmallTimePicker}\n onChangeTimeZone={onChangeTimeZone}\n onChangeFiscalYearStartMonth={onChangeFiscalYearStartMonth}\n />\n )}\n\n <RunButton\n refreshInterval={refreshInterval}\n onChangeRefreshInterval={this.onChangeRefreshInterval}\n isSmall={splitted || showSmallTimePicker}\n isLive={isLive}\n loading={loading || (isLive && !isPaused)}\n onRun={this.onRunQuery}\n showDropdown={!isLive}\n />\n\n {refreshInterval && <SetInterval func={this.onRunQuery} interval={refreshInterval} loading={loading} />}\n\n {hasLiveOption && (\n <LiveTailControls exploreId={exploreId}>\n {(controls) => (\n <LiveTailButton\n splitted={splitted}\n isLive={isLive}\n isPaused={isPaused}\n start={controls.start}\n pause={controls.pause}\n resume={controls.resume}\n stop={controls.stop}\n />\n )}\n </LiveTailControls>\n )}\n </ToolbarButtonRow>\n </PageToolbar>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state: StoreState, { exploreId }: OwnProps) => {\n const { syncedTimes } = state.explore;\n const exploreItem = state.explore[exploreId]!;\n const { datasourceInstance, datasourceMissing, range, refreshInterval, loading, isLive, isPaused, containerWidth } =\n exploreItem;\n\n const hasLiveOption = !!datasourceInstance?.meta?.streaming;\n\n return {\n datasourceMissing,\n datasourceName: datasourceInstance?.name,\n loading,\n range,\n timeZone: getTimeZone(state.user),\n fiscalYearStartMonth: getFiscalYearStartMonth(state.user),\n splitted: isSplit(state),\n refreshInterval,\n hasLiveOption,\n isLive,\n isPaused,\n syncedTimes,\n containerWidth,\n };\n};\n\nconst mapDispatchToProps = {\n changeDatasource,\n changeRefreshInterval,\n cancelQueries,\n runQueries,\n closeSplit: splitClose,\n split: splitOpen,\n syncTimes,\n onChangeTimeZone: updateTimeZoneForSession,\n onChangeFiscalYearStartMonth: updateFiscalYearStartMonthForSession,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport const ExploreToolbar = connector(UnConnectedExploreToolbar);\n","import { useEffect, useRef } from 'react';\nvar useInterval = function (callback, delay) {\n var savedCallback = useRef(function () { });\n useEffect(function () {\n savedCallback.current = callback;\n });\n useEffect(function () {\n if (delay !== null) {\n var interval_1 = setInterval(function () { return savedCallback.current(); }, delay || 0);\n return function () { return clearInterval(interval_1); };\n }\n return undefined;\n }, [delay]);\n};\nexport default useInterval;\n","import React, { FC } from 'react';\n\nimport { toDuration } from '@grafana/data';\n\nexport interface TimeProps {\n timeInMs: number;\n className?: string;\n humanize?: boolean;\n}\n\nexport const Time: FC<TimeProps> = ({ timeInMs, className, humanize }) => {\n return <span className={`elapsed-time ${className}`}>{formatTime(timeInMs, humanize)}</span>;\n};\n\nconst formatTime = (timeInMs: number, humanize = false): string => {\n const inSeconds = timeInMs / 1000;\n\n if (!humanize) {\n return `${inSeconds.toFixed(1)}s`;\n }\n\n const duration = toDuration(inSeconds, 'seconds');\n const hours = duration.hours();\n const minutes = duration.minutes();\n const seconds = duration.seconds();\n\n if (hours) {\n return `${hours}h ${minutes}m ${seconds}s`;\n }\n\n if (minutes) {\n return `${minutes}m ${seconds}s`;\n }\n\n return `${seconds}s`;\n};\n","import React, { FC, useState, useEffect } from 'react';\nimport { useInterval } from 'react-use';\n\nimport { Time, TimeProps } from './Time';\n\nconst INTERVAL = 150;\n\nexport interface ElapsedTimeProps extends Omit<TimeProps, 'timeInMs'> {\n // Use this to reset the timer. Any value is allowed just need to be !== from the previous.\n // Keep in mind things like [] !== [] or {} !== {}.\n resetKey?: any;\n}\n\nexport const ElapsedTime: FC<ElapsedTimeProps> = ({ resetKey, humanize, className }) => {\n const [elapsed, setElapsed] = useState(0); // the current value of elapsed\n\n // hook that will schedule a interval and then update the elapsed value on every tick.\n useInterval(() => setElapsed(elapsed + INTERVAL), INTERVAL);\n // this effect will only be run when resetKey changes. This will reset the elapsed to 0.\n useEffect(() => setElapsed(0), [resetKey]);\n\n return <Time timeInMs={elapsed} className={className} humanize={humanize} />;\n};\n","import { css, cx } from '@emotion/css';\nimport React, { PureComponent } from 'react';\nimport tinycolor from 'tinycolor2';\n\nimport { LogRowModel, TimeZone, dateTimeFormat, GrafanaTheme2 } from '@grafana/data';\nimport { LogMessageAnsi, getLogRowStyles, Icon, Button, Themeable2, withTheme2 } from '@grafana/ui';\n\nimport { ElapsedTime } from './ElapsedTime';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n logsRowsLive: css`\n label: logs-rows-live;\n font-family: ${theme.typography.fontFamilyMonospace};\n font-size: ${theme.typography.bodySmall.fontSize};\n display: flex;\n flex-flow: column nowrap;\n height: 60vh;\n overflow-y: scroll;\n :first-child {\n margin-top: auto !important;\n }\n `,\n logsRowFade: css`\n label: logs-row-fresh;\n color: ${theme.colors.text};\n background-color: ${tinycolor(theme.colors.info.transparent).setAlpha(0.25).toString()};\n animation: fade 1s ease-out 1s 1 normal forwards;\n @keyframes fade {\n from {\n background-color: ${tinycolor(theme.colors.info.transparent).setAlpha(0.25).toString()};\n }\n to {\n background-color: transparent;\n }\n }\n `,\n logsRowsIndicator: css`\n font-size: ${theme.typography.h6.fontSize};\n padding-top: ${theme.spacing(1)};\n display: flex;\n align-items: center;\n `,\n button: css`\n margin-right: ${theme.spacing(1)};\n `,\n fullWidth: css`\n width: 100%;\n `,\n});\n\nexport interface Props extends Themeable2 {\n logRows?: LogRowModel[];\n timeZone: TimeZone;\n stopLive: () => void;\n onPause: () => void;\n onResume: () => void;\n isPaused: boolean;\n}\n\ninterface State {\n logRowsToRender?: LogRowModel[];\n}\n\nclass LiveLogs extends PureComponent<Props, State> {\n private liveEndDiv: HTMLDivElement | null = null;\n private scrollContainerRef = React.createRef<HTMLTableSectionElement>();\n\n constructor(props: Props) {\n super(props);\n this.state = {\n logRowsToRender: props.logRows,\n };\n }\n\n static getDerivedStateFromProps(nextProps: Props, state: State) {\n if (!nextProps.isPaused) {\n return {\n // We update what we show only if not paused. We keep any background subscriptions running and keep updating\n // our state, but we do not show the updates, this allows us start again showing correct result after resuming\n // without creating a gap in the log results.\n logRowsToRender: nextProps.logRows,\n };\n } else {\n return null;\n }\n }\n\n /**\n * Handle pausing when user scrolls up so that we stop resetting his position to the bottom when new row arrives.\n * We do not need to throttle it here much, adding new rows should be throttled/buffered itself in the query epics\n * and after you pause we remove the handler and add it after you manually resume, so this should not be fired often.\n */\n onScroll = (event: React.SyntheticEvent) => {\n const { isPaused, onPause } = this.props;\n const { scrollTop, clientHeight, scrollHeight } = event.currentTarget;\n const distanceFromBottom = scrollHeight - (scrollTop + clientHeight);\n if (distanceFromBottom >= 5 && !isPaused) {\n onPause();\n }\n };\n\n rowsToRender = () => {\n const { isPaused } = this.props;\n let { logRowsToRender: rowsToRender = [] } = this.state;\n if (!isPaused) {\n // A perf optimisation here. Show just 100 rows when streaming and full length when the streaming is paused.\n rowsToRender = rowsToRender.slice(-100);\n }\n return rowsToRender;\n };\n\n render() {\n const { theme, timeZone, onPause, onResume, isPaused } = this.props;\n const styles = getStyles(theme);\n const { logsRow, logsRowLocalTime, logsRowMessage } = getLogRowStyles(theme);\n\n return (\n <div>\n <table className={styles.fullWidth}>\n <tbody\n onScroll={isPaused ? undefined : this.onScroll}\n className={cx(['logs-rows', styles.logsRowsLive])}\n ref={this.scrollContainerRef}\n >\n {this.rowsToRender().map((row: LogRowModel) => {\n return (\n <tr className={cx(logsRow, styles.logsRowFade)} key={row.uid}>\n <td className={cx(logsRowLocalTime)}>{dateTimeFormat(row.timeEpochMs, { timeZone })}</td>\n <td className={cx(logsRowMessage)}>{row.hasAnsi ? <LogMessageAnsi value={row.raw} /> : row.entry}</td>\n </tr>\n );\n })}\n <tr\n ref={(element) => {\n this.liveEndDiv = element;\n // This is triggered on every update so on every new row. It keeps the view scrolled at the bottom by\n // default.\n if (this.liveEndDiv && !isPaused) {\n this.scrollContainerRef.current?.scrollTo(0, this.scrollContainerRef.current.scrollHeight);\n }\n }}\n />\n </tbody>\n </table>\n <div className={styles.logsRowsIndicator}>\n <Button variant=\"secondary\" onClick={isPaused ? onResume : onPause} className={styles.button}>\n <Icon name={isPaused ? 'play' : 'pause'} />\n \n {isPaused ? 'Resume' : 'Pause'}\n </Button>\n <Button variant=\"secondary\" onClick={this.props.stopLive} className={styles.button}>\n <Icon name=\"square-shape\" size=\"lg\" type=\"mono\" />\n Exit live mode\n </Button>\n {isPaused || (\n <span>\n Last line received: <ElapsedTime resetKey={this.props.logRows} humanize={true} /> ago\n </span>\n )}\n </div>\n </div>\n );\n }\n}\n\nexport const LiveLogsWithTheme = withTheme2(LiveLogs);\n","import { css } from '@emotion/css';\nimport React, { memo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n metaContainer: css`\n flex: 1;\n color: ${theme.colors.text.secondary};\n margin-bottom: ${theme.spacing(2)};\n min-width: 30%;\n display: flex;\n flex-wrap: wrap;\n `,\n metaItem: css`\n margin-right: ${theme.spacing(2)};\n margin-top: ${theme.spacing(0.5)};\n display: flex;\n align-items: baseline;\n\n .logs-meta-item__error {\n color: ${theme.colors.error.text};\n }\n `,\n metaLabel: css`\n margin-right: calc(${theme.spacing(2)} / 2);\n font-size: ${theme.typography.bodySmall.fontSize};\n font-weight: ${theme.typography.fontWeightMedium};\n `,\n metaValue: css`\n font-family: ${theme.typography.fontFamilyMonospace};\n font-size: ${theme.typography.bodySmall.fontSize};\n `,\n});\n\nexport interface MetaItemProps {\n label?: string;\n value: string | JSX.Element;\n}\n\nconst MetaInfoItem = memo(function MetaInfoItem(props: MetaItemProps) {\n const style = useStyles2(getStyles);\n const { label, value } = props;\n\n return (\n <div data-testid=\"meta-info-text-item\" className={style.metaItem}>\n {label && <span className={style.metaLabel}>{label}:</span>}\n <span className={style.metaValue}>{value}</span>\n </div>\n );\n});\n\ninterface MetaInfoTextProps {\n metaItems: MetaItemProps[];\n}\n\nexport const MetaInfoText = memo(function MetaInfoText(props: MetaInfoTextProps) {\n const style = useStyles2(getStyles);\n const { metaItems } = props;\n\n return (\n <div className={style.metaContainer} data-testid=\"meta-info-text\">\n {metaItems.map((item, index) => (\n <MetaInfoItem key={`${index}-${item.label}`} label={item.label} value={item.value} />\n ))}\n </div>\n );\n});\n","import React from 'react';\n\nimport { LogsDedupStrategy, LogsMetaItem, LogsMetaKind, LogRowModel } from '@grafana/data';\nimport { Button, Tooltip, Icon, LogLabels } from '@grafana/ui';\nimport { MAX_CHARACTERS } from '@grafana/ui/src/components/Logs/LogRowMessage';\n\nimport { MetaInfoText, MetaItemProps } from './MetaInfoText';\n\nexport type Props = {\n meta: LogsMetaItem[];\n dedupStrategy: LogsDedupStrategy;\n dedupCount: number;\n showDetectedFields: string[];\n hasUnescapedContent: boolean;\n forceEscape: boolean;\n logRows: LogRowModel[];\n onEscapeNewlines: () => void;\n clearDetectedFields: () => void;\n};\n\nexport const LogsMetaRow: React.FC<Props> = React.memo(\n ({\n meta,\n dedupStrategy,\n dedupCount,\n showDetectedFields,\n clearDetectedFields,\n hasUnescapedContent,\n forceEscape,\n onEscapeNewlines,\n logRows,\n }) => {\n const logsMetaItem: Array<LogsMetaItem | MetaItemProps> = [...meta];\n\n // Add deduplication info\n if (dedupStrategy !== LogsDedupStrategy.none) {\n logsMetaItem.push({\n label: 'Dedup count',\n value: dedupCount,\n kind: LogsMetaKind.Number,\n });\n }\n // Add info about limit for highlighting\n if (logRows.some((r) => r.entry.length > MAX_CHARACTERS)) {\n logsMetaItem.push({\n label: 'Info',\n value: 'Logs with more than 100,000 characters could not be parsed and highlighted',\n kind: LogsMetaKind.String,\n });\n }\n\n // Add detected fields info\n if (showDetectedFields?.length > 0) {\n logsMetaItem.push(\n {\n label: 'Showing only detected fields',\n value: renderMetaItem(showDetectedFields, LogsMetaKind.LabelsMap),\n },\n {\n label: '',\n value: (\n <Button variant=\"secondary\" size=\"sm\" onClick={clearDetectedFields}>\n Show all detected fields\n </Button>\n ),\n }\n );\n }\n\n // Add unescaped content info\n if (hasUnescapedContent) {\n logsMetaItem.push({\n label: 'Your logs might have incorrectly escaped content',\n value: (\n <Tooltip\n content=\"Fix incorrectly escaped newline and tab sequences in log lines. Manually review the results to confirm that the replacements are correct.\"\n placement=\"right\"\n >\n <Button variant=\"secondary\" size=\"sm\" onClick={onEscapeNewlines}>\n <span>{forceEscape ? 'Remove escaping' : 'Escape newlines'} </span>\n <Icon name=\"exclamation-triangle\" className=\"muted\" size=\"sm\" />\n </Button>\n </Tooltip>\n ),\n });\n }\n\n return (\n <>\n {logsMetaItem && (\n <MetaInfoText\n metaItems={logsMetaItem.map((item) => {\n return {\n label: item.label,\n value: 'kind' in item ? renderMetaItem(item.value, item.kind) : item.value,\n };\n })}\n />\n )}\n </>\n );\n }\n);\n\nLogsMetaRow.displayName = 'LogsMetaRow';\n\nfunction renderMetaItem(value: any, kind: LogsMetaKind) {\n if (kind === LogsMetaKind.LabelsMap) {\n return (\n <span className=\"logs-meta-item__labels\">\n <LogLabels labels={value} />\n </span>\n );\n } else if (kind === LogsMetaKind.Error) {\n return <span className=\"logs-meta-item__error\">{value}</span>;\n }\n return value;\n}\n","import { css, cx } from '@emotion/css';\nimport React from 'react';\n\nimport { dateTimeFormat, systemDateFormats, TimeZone, AbsoluteTimeRange, GrafanaTheme2 } from '@grafana/data';\nimport { CustomScrollbar, Spinner, useTheme2 } from '@grafana/ui';\n\nimport { LogsPage } from './LogsNavigation';\n\ntype Props = {\n pages: LogsPage[];\n currentPageIndex: number;\n oldestLogsFirst: boolean;\n timeZone: TimeZone;\n loading: boolean;\n changeTime: (range: AbsoluteTimeRange) => void;\n};\n\nexport function LogsNavigationPages({\n pages,\n currentPageIndex,\n oldestLogsFirst,\n timeZone,\n loading,\n changeTime,\n}: Props) {\n const formatTime = (time: number) => {\n return `${dateTimeFormat(time, {\n format: systemDateFormats.interval.second,\n timeZone: timeZone,\n })}`;\n };\n\n const createPageContent = (page: LogsPage, index: number) => {\n if (currentPageIndex === index && loading) {\n return <Spinner />;\n }\n const topContent = formatTime(oldestLogsFirst ? page.logsRange.from : page.logsRange.to);\n const bottomContent = formatTime(oldestLogsFirst ? page.logsRange.to : page.logsRange.from);\n return `${topContent} — ${bottomContent}`;\n };\n\n const theme = useTheme2();\n const styles = getStyles(theme, loading);\n\n return (\n <CustomScrollbar autoHide>\n <div className={styles.pagesWrapper} data-testid=\"logsNavigationPages\">\n <div className={styles.pagesContainer}>\n {pages.map((page: LogsPage, index: number) => (\n <div\n data-testid={`page${index + 1}`}\n className={styles.page}\n key={page.queryRange.to}\n onClick={() => !loading && changeTime({ from: page.queryRange.from, to: page.queryRange.to })}\n >\n <div className={cx(styles.line, { selectedBg: currentPageIndex === index })} />\n <div className={cx(styles.time, { selectedText: currentPageIndex === index })}>\n {createPageContent(page, index)}\n </div>\n </div>\n ))}\n </div>\n </div>\n </CustomScrollbar>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2, loading: boolean) => {\n return {\n pagesWrapper: css`\n height: 100%;\n padding-left: ${theme.spacing(0.5)};\n display: flex;\n flex-direction: column;\n overflow-y: scroll;\n &::after {\n content: '';\n display: block;\n background: repeating-linear-gradient(\n 135deg,\n ${theme.colors.background.primary},\n ${theme.colors.background.primary} 5px,\n ${theme.colors.background.secondary} 5px,\n ${theme.colors.background.secondary} 15px\n );\n width: 3px;\n height: inherit;\n margin-bottom: 8px;\n }\n `,\n pagesContainer: css`\n display: flex;\n padding: 0;\n flex-direction: column;\n `,\n page: css`\n display: flex;\n margin: ${theme.spacing(2)} 0;\n cursor: ${loading ? 'auto' : 'pointer'};\n white-space: normal;\n .selectedBg {\n background: ${theme.colors.primary.main};\n }\n .selectedText {\n color: ${theme.colors.primary.main};\n }\n `,\n line: css`\n width: 3px;\n height: 100%;\n align-items: center;\n background: ${theme.colors.text.secondary};\n `,\n time: css`\n width: 60px;\n min-height: 80px;\n font-size: ${theme.v1.typography.size.sm};\n padding-left: ${theme.spacing(0.5)};\n display: flex;\n align-items: center;\n `,\n };\n};\n","import { css } from '@emotion/css';\nimport { isEqual } from 'lodash';\nimport React, { memo, useState, useEffect, useRef } from 'react';\n\nimport { LogsSortOrder, AbsoluteTimeRange, TimeZone, DataQuery, GrafanaTheme2 } from '@grafana/data';\nimport { Button, Icon, Spinner, useTheme2 } from '@grafana/ui';\n\nimport { LogsNavigationPages } from './LogsNavigationPages';\n\ntype Props = {\n absoluteRange: AbsoluteTimeRange;\n timeZone: TimeZone;\n queries: DataQuery[];\n loading: boolean;\n visibleRange: AbsoluteTimeRange;\n logsSortOrder?: LogsSortOrder | null;\n onChangeTime: (range: AbsoluteTimeRange) => void;\n scrollToTopLogs: () => void;\n addResultsToCache: () => void;\n clearCache: () => void;\n};\n\nexport type LogsPage = {\n logsRange: AbsoluteTimeRange;\n queryRange: AbsoluteTimeRange;\n};\n\nfunction LogsNavigation({\n absoluteRange,\n logsSortOrder,\n timeZone,\n loading,\n onChangeTime,\n scrollToTopLogs,\n visibleRange,\n queries,\n clearCache,\n addResultsToCache,\n}: Props) {\n const [pages, setPages] = useState<LogsPage[]>([]);\n const [currentPageIndex, setCurrentPageIndex] = useState(0);\n\n // These refs are to determine, if we want to clear up logs navigation when totally new query is run\n const expectedQueriesRef = useRef<DataQuery[]>();\n const expectedRangeRef = useRef<AbsoluteTimeRange>();\n // This ref is to store range span for future queres based on firstly selected time range\n // e.g. if last 5 min selected, always run 5 min range\n const rangeSpanRef = useRef(0);\n\n const oldestLogsFirst = logsSortOrder === LogsSortOrder.Ascending;\n const onFirstPage = oldestLogsFirst ? currentPageIndex === pages.length - 1 : currentPageIndex === 0;\n const onLastPage = oldestLogsFirst ? currentPageIndex === 0 : currentPageIndex === pages.length - 1;\n const theme = useTheme2();\n const styles = getStyles(theme, oldestLogsFirst, loading);\n\n // Main effect to set pages and index\n useEffect(() => {\n const newPage = { logsRange: visibleRange, queryRange: absoluteRange };\n let newPages: LogsPage[] = [];\n // We want to start new pagination if queries change or if absolute range is different than expected\n if (!isEqual(expectedRangeRef.current, absoluteRange) || !isEqual(expectedQueriesRef.current, queries)) {\n clearCache();\n setPages([newPage]);\n setCurrentPageIndex(0);\n expectedQueriesRef.current = queries;\n rangeSpanRef.current = absoluteRange.to - absoluteRange.from;\n } else {\n setPages((pages) => {\n // Remove duplicates with new query\n newPages = pages.filter((page) => !isEqual(newPage.queryRange, page.queryRange));\n // Sort pages based on logsOrder so they visually align with displayed logs\n newPages = [...newPages, newPage].sort((a, b) => sortPages(a, b, logsSortOrder));\n // Set new pages\n\n return newPages;\n });\n\n // Set current page index\n const index = newPages.findIndex((page) => page.queryRange.to === absoluteRange.to);\n setCurrentPageIndex(index);\n }\n addResultsToCache();\n }, [visibleRange, absoluteRange, logsSortOrder, queries, clearCache, addResultsToCache]);\n\n useEffect(() => {\n clearCache();\n // We can't enforce the eslint rule here because we only want to run when component is mounted.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const changeTime = ({ from, to }: AbsoluteTimeRange) => {\n expectedRangeRef.current = { from, to };\n onChangeTime({ from, to });\n };\n\n const sortPages = (a: LogsPage, b: LogsPage, logsSortOrder?: LogsSortOrder | null) => {\n if (logsSortOrder === LogsSortOrder.Ascending) {\n return a.queryRange.to > b.queryRange.to ? 1 : -1;\n }\n return a.queryRange.to > b.queryRange.to ? -1 : 1;\n };\n\n const olderLogsButton = (\n <Button\n data-testid=\"olderLogsButton\"\n className={styles.navButton}\n variant=\"secondary\"\n onClick={() => {\n //If we are not on the last page, use next page's range\n if (!onLastPage) {\n const indexChange = oldestLogsFirst ? -1 : 1;\n changeTime({\n from: pages[currentPageIndex + indexChange].queryRange.from,\n to: pages[currentPageIndex + indexChange].queryRange.to,\n });\n } else {\n //If we are on the last page, create new range\n changeTime({ from: visibleRange.from - rangeSpanRef.current, to: visibleRange.from });\n }\n }}\n disabled={loading}\n >\n <div className={styles.navButtonContent}>\n {loading ? <Spinner /> : <Icon name={oldestLogsFirst ? 'angle-up' : 'angle-down'} size=\"lg\" />}\n Older logs\n </div>\n </Button>\n );\n\n const newerLogsButton = (\n <Button\n data-testid=\"newerLogsButton\"\n className={styles.navButton}\n variant=\"secondary\"\n onClick={() => {\n //If we are not on the first page, use previous page's range\n if (!onFirstPage) {\n const indexChange = oldestLogsFirst ? 1 : -1;\n changeTime({\n from: pages[currentPageIndex + indexChange].queryRange.from,\n to: pages[currentPageIndex + indexChange].queryRange.to,\n });\n }\n //If we are on the first page, button is disabled and we do nothing\n }}\n disabled={loading || onFirstPage}\n >\n <div className={styles.navButtonContent}>\n {loading && <Spinner />}\n {onFirstPage || loading ? null : <Icon name={oldestLogsFirst ? 'angle-down' : 'angle-up'} size=\"lg\" />}\n {onFirstPage ? 'Start of range' : 'Newer logs'}\n </div>\n </Button>\n );\n\n return (\n <div className={styles.navContainer}>\n {oldestLogsFirst ? olderLogsButton : newerLogsButton}\n <LogsNavigationPages\n pages={pages}\n currentPageIndex={currentPageIndex}\n oldestLogsFirst={oldestLogsFirst}\n timeZone={timeZone}\n loading={loading}\n changeTime={changeTime}\n />\n {oldestLogsFirst ? newerLogsButton : olderLogsButton}\n <Button\n data-testid=\"scrollToTop\"\n className={styles.scrollToTopButton}\n variant=\"secondary\"\n onClick={scrollToTopLogs}\n title=\"Scroll to top\"\n >\n <Icon name=\"arrow-up\" size=\"lg\" />\n </Button>\n </div>\n );\n}\n\nexport default memo(LogsNavigation);\n\nconst getStyles = (theme: GrafanaTheme2, oldestLogsFirst: boolean, loading: boolean) => {\n return {\n navContainer: css`\n max-height: 95vh;\n display: flex;\n flex-direction: column;\n justify-content: ${oldestLogsFirst ? 'flex-start' : 'space-between'};\n position: sticky;\n top: ${theme.spacing(2)};\n right: 0;\n `,\n navButton: css`\n width: 58px;\n height: 68px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n line-height: 1;\n `,\n navButtonContent: css`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n white-space: normal;\n `,\n scrollToTopButton: css`\n width: 40px;\n height: 40px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n margin-top: ${theme.spacing(1)};\n `,\n };\n};\n","import { css } from '@emotion/css';\nimport { capitalize } from 'lodash';\nimport memoizeOne from 'memoize-one';\nimport React, { PureComponent, createRef } from 'react';\n\nimport {\n rangeUtil,\n RawTimeRange,\n LogLevel,\n TimeZone,\n AbsoluteTimeRange,\n LogsDedupStrategy,\n LogRowModel,\n LogsDedupDescription,\n LogsMetaItem,\n LogsSortOrder,\n LinkModel,\n Field,\n DataQuery,\n DataFrame,\n GrafanaTheme2,\n LoadingState,\n} from '@grafana/data';\nimport { TooltipDisplayMode } from '@grafana/schema';\nimport {\n RadioButtonGroup,\n LogRows,\n Button,\n InlineField,\n InlineFieldRow,\n InlineSwitch,\n withTheme2,\n Themeable2,\n} from '@grafana/ui';\nimport { RowContextOptions } from '@grafana/ui/src/components/Logs/LogRowContextProvider';\nimport { dedupLogRows, filterLogLevels } from 'app/core/logs_model';\nimport store from 'app/core/store';\nimport { ExploreId } from 'app/types/explore';\n\nimport { ExploreGraph } from './ExploreGraph';\nimport { LogsMetaRow } from './LogsMetaRow';\nimport LogsNavigation from './LogsNavigation';\n\nconst SETTINGS_KEYS = {\n showLabels: 'grafana.explore.logs.showLabels',\n showTime: 'grafana.explore.logs.showTime',\n wrapLogMessage: 'grafana.explore.logs.wrapLogMessage',\n prettifyLogMessage: 'grafana.explore.logs.prettifyLogMessage',\n logsSortOrder: 'grafana.explore.logs.sortOrder',\n};\n\ninterface Props extends Themeable2 {\n width: number;\n logRows: LogRowModel[];\n logsMeta?: LogsMetaItem[];\n logsSeries?: DataFrame[];\n logsQueries?: DataQuery[];\n visibleRange?: AbsoluteTimeRange;\n theme: GrafanaTheme2;\n loading: boolean;\n loadingState: LoadingState;\n absoluteRange: AbsoluteTimeRange;\n timeZone: TimeZone;\n scanning?: boolean;\n scanRange?: RawTimeRange;\n exploreId: ExploreId;\n showContextToggle?: (row?: LogRowModel) => boolean;\n onChangeTime: (range: AbsoluteTimeRange) => void;\n onClickFilterLabel?: (key: string, value: string) => void;\n onClickFilterOutLabel?: (key: string, value: string) => void;\n onStartScanning?: () => void;\n onStopScanning?: () => void;\n getRowContext?: (row: LogRowModel, options?: RowContextOptions) => Promise<any>;\n getFieldLinks: (field: Field, rowIndex: number) => Array<LinkModel<Field>>;\n addResultsToCache: () => void;\n clearCache: () => void;\n}\n\ninterface State {\n showLabels: boolean;\n showTime: boolean;\n wrapLogMessage: boolean;\n prettifyLogMessage: boolean;\n dedupStrategy: LogsDedupStrategy;\n hiddenLogLevels: LogLevel[];\n logsSortOrder: LogsSortOrder | null;\n isFlipping: boolean;\n showDetectedFields: string[];\n forceEscape: boolean;\n}\n\nclass UnthemedLogs extends PureComponent<Props, State> {\n flipOrderTimer?: number;\n cancelFlippingTimer?: number;\n topLogsRef = createRef<HTMLDivElement>();\n\n state: State = {\n showLabels: store.getBool(SETTINGS_KEYS.showLabels, false),\n showTime: store.getBool(SETTINGS_KEYS.showTime, true),\n wrapLogMessage: store.getBool(SETTINGS_KEYS.wrapLogMessage, true),\n prettifyLogMessage: store.getBool(SETTINGS_KEYS.prettifyLogMessage, false),\n dedupStrategy: LogsDedupStrategy.none,\n hiddenLogLevels: [],\n logsSortOrder: store.get(SETTINGS_KEYS.logsSortOrder) || LogsSortOrder.Descending,\n isFlipping: false,\n showDetectedFields: [],\n forceEscape: false,\n };\n\n componentWillUnmount() {\n if (this.flipOrderTimer) {\n window.clearTimeout(this.flipOrderTimer);\n }\n\n if (this.cancelFlippingTimer) {\n window.clearTimeout(this.cancelFlippingTimer);\n }\n }\n\n onChangeLogsSortOrder = () => {\n this.setState({ isFlipping: true });\n // we are using setTimeout here to make sure that disabled button is rendered before the rendering of reordered logs\n this.flipOrderTimer = window.setTimeout(() => {\n this.setState((prevState) => {\n const newSortOrder =\n prevState.logsSortOrder === LogsSortOrder.Descending ? LogsSortOrder.Ascending : LogsSortOrder.Descending;\n store.set(SETTINGS_KEYS.logsSortOrder, newSortOrder);\n return { logsSortOrder: newSortOrder };\n });\n }, 0);\n this.cancelFlippingTimer = window.setTimeout(() => this.setState({ isFlipping: false }), 1000);\n };\n\n onEscapeNewlines = () => {\n this.setState((prevState) => ({\n forceEscape: !prevState.forceEscape,\n }));\n };\n\n onChangeDedup = (dedupStrategy: LogsDedupStrategy) => {\n this.setState({ dedupStrategy });\n };\n\n onChangeLabels = (event: React.ChangeEvent<HTMLInputElement>) => {\n const { target } = event;\n if (target) {\n const showLabels = target.checked;\n this.setState({\n showLabels,\n });\n store.set(SETTINGS_KEYS.showLabels, showLabels);\n }\n };\n\n onChangeTime = (event: React.ChangeEvent<HTMLInputElement>) => {\n const { target } = event;\n if (target) {\n const showTime = target.checked;\n this.setState({\n showTime,\n });\n store.set(SETTINGS_KEYS.showTime, showTime);\n }\n };\n\n onChangewrapLogMessage = (event: React.ChangeEvent<HTMLInputElement>) => {\n const { target } = event;\n if (target) {\n const wrapLogMessage = target.checked;\n this.setState({\n wrapLogMessage,\n });\n store.set(SETTINGS_KEYS.wrapLogMessage, wrapLogMessage);\n }\n };\n\n onChangePrettifyLogMessage = (event: React.ChangeEvent<HTMLInputElement>) => {\n const { target } = event;\n if (target) {\n const prettifyLogMessage = target.checked;\n this.setState({\n prettifyLogMessage,\n });\n store.set(SETTINGS_KEYS.prettifyLogMessage, prettifyLogMessage);\n }\n };\n\n onToggleLogLevel = (hiddenRawLevels: string[]) => {\n const hiddenLogLevels = hiddenRawLevels.map((level) => LogLevel[level as LogLevel]);\n this.setState({ hiddenLogLevels });\n };\n\n onClickScan = (event: React.SyntheticEvent) => {\n event.preventDefault();\n if (this.props.onStartScanning) {\n this.props.onStartScanning();\n }\n };\n\n onClickStopScan = (event: React.SyntheticEvent) => {\n event.preventDefault();\n if (this.props.onStopScanning) {\n this.props.onStopScanning();\n }\n };\n\n showDetectedField = (key: string) => {\n const index = this.state.showDetectedFields.indexOf(key);\n\n if (index === -1) {\n this.setState((state) => {\n return {\n showDetectedFields: state.showDetectedFields.concat(key),\n };\n });\n }\n };\n\n hideDetectedField = (key: string) => {\n const index = this.state.showDetectedFields.indexOf(key);\n if (index > -1) {\n this.setState((state) => {\n return {\n showDetectedFields: state.showDetectedFields.filter((k) => key !== k),\n };\n });\n }\n };\n\n clearDetectedFields = () => {\n this.setState((state) => {\n return {\n showDetectedFields: [],\n };\n });\n };\n\n checkUnescapedContent = memoizeOne((logRows: LogRowModel[]) => {\n return !!logRows.some((r) => r.hasUnescapedContent);\n });\n\n dedupRows = memoizeOne((logRows: LogRowModel[], dedupStrategy: LogsDedupStrategy) => {\n const dedupedRows = dedupLogRows(logRows, dedupStrategy);\n const dedupCount = dedupedRows.reduce((sum, row) => (row.duplicates ? sum + row.duplicates : sum), 0);\n return { dedupedRows, dedupCount };\n });\n\n filterRows = memoizeOne((logRows: LogRowModel[], hiddenLogLevels: LogLevel[]) => {\n return filterLogLevels(logRows, new Set(hiddenLogLevels));\n });\n\n scrollToTopLogs = () => this.topLogsRef.current?.scrollIntoView();\n\n render() {\n const {\n width,\n logRows,\n logsMeta,\n logsSeries,\n visibleRange,\n loading = false,\n loadingState,\n onClickFilterLabel,\n onClickFilterOutLabel,\n timeZone,\n scanning,\n scanRange,\n showContextToggle,\n absoluteRange,\n onChangeTime,\n getFieldLinks,\n theme,\n logsQueries,\n clearCache,\n addResultsToCache,\n exploreId,\n } = this.props;\n\n const {\n showLabels,\n showTime,\n wrapLogMessage,\n prettifyLogMessage,\n dedupStrategy,\n hiddenLogLevels,\n logsSortOrder,\n isFlipping,\n showDetectedFields,\n forceEscape,\n } = this.state;\n\n const styles = getStyles(theme, wrapLogMessage);\n const hasData = logRows && logRows.length > 0;\n const hasUnescapedContent = this.checkUnescapedContent(logRows);\n\n const filteredLogs = this.filterRows(logRows, hiddenLogLevels);\n const { dedupedRows, dedupCount } = this.dedupRows(filteredLogs, dedupStrategy);\n\n const scanText = scanRange ? `Scanning ${rangeUtil.describeTimeRange(scanRange)}` : 'Scanning...';\n return (\n <>\n {logsSeries && logsSeries.length ? (\n <>\n <div className={styles.infoText}>\n This datasource does not support full-range histograms. The graph is based on the logs seen in the\n response.\n </div>\n <ExploreGraph\n graphStyle=\"lines\"\n data={logsSeries}\n height={150}\n width={width}\n tooltipDisplayMode={TooltipDisplayMode.Multi}\n absoluteRange={visibleRange || absoluteRange}\n timeZone={timeZone}\n loadingState={loadingState}\n onChangeTime={onChangeTime}\n onHiddenSeriesChanged={this.onToggleLogLevel}\n />\n </>\n ) : undefined}\n <div className={styles.logOptions} ref={this.topLogsRef}>\n <InlineFieldRow>\n <InlineField label=\"Time\" className={styles.horizontalInlineLabel} transparent>\n <InlineSwitch\n value={showTime}\n onChange={this.onChangeTime}\n className={styles.horizontalInlineSwitch}\n transparent\n id={`show-time_${exploreId}`}\n />\n </InlineField>\n <InlineField label=\"Unique labels\" className={styles.horizontalInlineLabel} transparent>\n <InlineSwitch\n value={showLabels}\n onChange={this.onChangeLabels}\n className={styles.horizontalInlineSwitch}\n transparent\n id={`unique-labels_${exploreId}`}\n />\n </InlineField>\n <InlineField label=\"Wrap lines\" className={styles.horizontalInlineLabel} transparent>\n <InlineSwitch\n value={wrapLogMessage}\n onChange={this.onChangewrapLogMessage}\n className={styles.horizontalInlineSwitch}\n transparent\n id={`wrap-lines_${exploreId}`}\n />\n </InlineField>\n <InlineField label=\"Prettify JSON\" className={styles.horizontalInlineLabel} transparent>\n <InlineSwitch\n value={prettifyLogMessage}\n onChange={this.onChangePrettifyLogMessage}\n className={styles.horizontalInlineSwitch}\n transparent\n id={`prettify_${exploreId}`}\n />\n </InlineField>\n <InlineField label=\"Dedup\" className={styles.horizontalInlineLabel} transparent>\n <RadioButtonGroup\n options={Object.values(LogsDedupStrategy).map((dedupType) => ({\n label: capitalize(dedupType),\n value: dedupType,\n description: LogsDedupDescription[dedupType],\n }))}\n value={dedupStrategy}\n onChange={this.onChangeDedup}\n className={styles.radioButtons}\n />\n </InlineField>\n </InlineFieldRow>\n <div>\n <InlineField label=\"Display results\" className={styles.horizontalInlineLabel} transparent>\n <RadioButtonGroup\n disabled={isFlipping}\n options={[\n {\n label: 'Newest first',\n value: LogsSortOrder.Descending,\n description: 'Show results newest to oldest',\n },\n {\n label: 'Oldest first',\n value: LogsSortOrder.Ascending,\n description: 'Show results oldest to newest',\n },\n ]}\n value={logsSortOrder}\n onChange={this.onChangeLogsSortOrder}\n className={styles.radioButtons}\n />\n </InlineField>\n </div>\n </div>\n <LogsMetaRow\n logRows={logRows}\n meta={logsMeta || []}\n dedupStrategy={dedupStrategy}\n dedupCount={dedupCount}\n hasUnescapedContent={hasUnescapedContent}\n forceEscape={forceEscape}\n showDetectedFields={showDetectedFields}\n onEscapeNewlines={this.onEscapeNewlines}\n clearDetectedFields={this.clearDetectedFields}\n />\n <div className={styles.logsSection}>\n <div className={styles.logRows} data-testid=\"logRows\">\n <LogRows\n logRows={logRows}\n deduplicatedRows={dedupedRows}\n dedupStrategy={dedupStrategy}\n getRowContext={this.props.getRowContext}\n onClickFilterLabel={onClickFilterLabel}\n onClickFilterOutLabel={onClickFilterOutLabel}\n showContextToggle={showContextToggle}\n showLabels={showLabels}\n showTime={showTime}\n enableLogDetails={true}\n forceEscape={forceEscape}\n wrapLogMessage={wrapLogMessage}\n prettifyLogMessage={prettifyLogMessage}\n timeZone={timeZone}\n getFieldLinks={getFieldLinks}\n logsSortOrder={logsSortOrder}\n showDetectedFields={showDetectedFields}\n onClickShowDetectedField={this.showDetectedField}\n onClickHideDetectedField={this.hideDetectedField}\n />\n </div>\n <LogsNavigation\n logsSortOrder={logsSortOrder}\n visibleRange={visibleRange ?? absoluteRange}\n absoluteRange={absoluteRange}\n timeZone={timeZone}\n onChangeTime={onChangeTime}\n loading={loading}\n queries={logsQueries ?? []}\n scrollToTopLogs={this.scrollToTopLogs}\n addResultsToCache={addResultsToCache}\n clearCache={clearCache}\n />\n </div>\n {!loading && !hasData && !scanning && (\n <div className={styles.noData}>\n No logs found.\n <Button size=\"xs\" fill=\"text\" onClick={this.onClickScan}>\n Scan for older logs\n </Button>\n </div>\n )}\n\n {scanning && (\n <div className={styles.noData}>\n <span>{scanText}</span>\n <Button size=\"xs\" fill=\"text\" onClick={this.onClickStopScan}>\n Stop scan\n </Button>\n </div>\n )}\n </>\n );\n }\n}\n\nexport const Logs = withTheme2(UnthemedLogs);\n\nconst getStyles = (theme: GrafanaTheme2, wrapLogMessage: boolean) => {\n return {\n noData: css`\n > * {\n margin-left: 0.5em;\n }\n `,\n logOptions: css`\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n flex-wrap: wrap;\n background-color: ${theme.colors.background.primary};\n padding: ${theme.spacing(1, 2)};\n border-radius: ${theme.shape.borderRadius()};\n margin: ${theme.spacing(2, 0, 1)};\n border: 1px solid ${theme.colors.border.medium};\n `,\n headerButton: css`\n margin: ${theme.spacing(0.5, 0, 0, 1)};\n `,\n horizontalInlineLabel: css`\n > label {\n margin-right: 0;\n }\n `,\n horizontalInlineSwitch: css`\n padding: 0 ${theme.spacing(1)} 0 0;\n `,\n radioButtons: css`\n margin: 0;\n `,\n logsSection: css`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n `,\n logRows: css`\n overflow-x: ${wrapLogMessage ? 'unset' : 'scroll'};\n overflow-y: visible;\n width: 100%;\n `,\n infoText: css`\n font-size: ${theme.typography.size.sm};\n color: ${theme.colors.text.secondary};\n `,\n };\n};\n","import { css } from '@emotion/css';\nimport memoizeOne from 'memoize-one';\nimport React from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nconst transitionDuration = 500;\n// We add a bit of delay to the transition as another perf optimisation. As at the start we need to render\n// quite a bit of new rows, if we start transition at the same time there can be frame rate drop. This gives time\n// for react to first render them and then do the animation.\nconst transitionDelay = 100;\n\nconst getStyles = memoizeOne(() => {\n return {\n logsEnter: css`\n label: logsEnter;\n position: absolute;\n opacity: 0;\n height: auto;\n width: 100%;\n `,\n logsEnterActive: css`\n label: logsEnterActive;\n opacity: 1;\n transition: opacity ${transitionDuration}ms ease-out ${transitionDelay}ms;\n `,\n logsExit: css`\n label: logsExit;\n position: absolute;\n opacity: 1;\n height: auto;\n width: 100%;\n `,\n logsExitActive: css`\n label: logsExitActive;\n opacity: 0;\n transition: opacity ${transitionDuration}ms ease-out ${transitionDelay}ms;\n `,\n };\n});\n\ntype Props = {\n children: React.ReactNode;\n visible: boolean;\n};\n\n/**\n * Cross fade transition component that is tied a bit too much to the logs containers so not very useful elsewhere\n * right now.\n */\nexport function LogsCrossFadeTransition(props: Props) {\n const { visible, children } = props;\n const styles = getStyles();\n return (\n <CSSTransition\n in={visible}\n mountOnEnter={true}\n unmountOnExit={true}\n timeout={transitionDuration + transitionDelay}\n classNames={{\n enter: styles.logsEnter,\n enterActive: styles.logsEnterActive,\n exit: styles.logsExit,\n exitActive: styles.logsExitActive,\n }}\n >\n {children}\n </CSSTransition>\n );\n}\n","import { css } from '@emotion/css';\nimport React, { PureComponent } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport {\n AbsoluteTimeRange,\n Field,\n hasLogsContextSupport,\n LoadingState,\n LogRowModel,\n RawTimeRange,\n} from '@grafana/data';\nimport { Collapse } from '@grafana/ui';\nimport { StoreState } from 'app/types';\nimport { ExploreId, ExploreItemState } from 'app/types/explore';\n\nimport { getTimeZone } from '../profile/state/selectors';\n\nimport { LiveLogsWithTheme } from './LiveLogs';\nimport { Logs } from './Logs';\nimport { splitOpen } from './state/main';\nimport { addResultsToCache, clearCache } from './state/query';\nimport { updateTimeRange } from './state/time';\nimport { LiveTailControls } from './useLiveTailControls';\nimport { LogsCrossFadeTransition } from './utils/LogsCrossFadeTransition';\nimport { getFieldLinksForExplore } from './utils/links';\n\ninterface LogsContainerProps extends PropsFromRedux {\n width: number;\n exploreId: ExploreId;\n scanRange?: RawTimeRange;\n syncedTimes: boolean;\n loadingState: LoadingState;\n onClickFilterLabel?: (key: string, value: string) => void;\n onClickFilterOutLabel?: (key: string, value: string) => void;\n onStartScanning: () => void;\n onStopScanning: () => void;\n}\n\nclass LogsContainer extends PureComponent<LogsContainerProps> {\n onChangeTime = (absoluteRange: AbsoluteTimeRange) => {\n const { exploreId, updateTimeRange } = this.props;\n updateTimeRange({ exploreId, absoluteRange });\n };\n\n getLogRowContext = async (row: LogRowModel, options?: any): Promise<any> => {\n const { datasourceInstance } = this.props;\n\n if (hasLogsContextSupport(datasourceInstance)) {\n return datasourceInstance.getLogRowContext(row, options);\n }\n\n return [];\n };\n\n showContextToggle = (row?: LogRowModel): boolean => {\n const { datasourceInstance } = this.props;\n\n if (hasLogsContextSupport(datasourceInstance)) {\n return datasourceInstance.showContextToggle(row);\n }\n\n return false;\n };\n\n getFieldLinks = (field: Field, rowIndex: number) => {\n const { splitOpen: splitOpenFn, range } = this.props;\n return getFieldLinksForExplore({ field, rowIndex, splitOpenFn, range });\n };\n\n render() {\n const {\n loading,\n loadingState,\n logRows,\n logsMeta,\n logsSeries,\n logsQueries,\n onClickFilterLabel,\n onClickFilterOutLabel,\n onStartScanning,\n onStopScanning,\n absoluteRange,\n timeZone,\n visibleRange,\n scanning,\n range,\n width,\n isLive,\n exploreId,\n addResultsToCache,\n clearCache,\n } = this.props;\n\n if (!logRows) {\n return null;\n }\n\n // We need to override css overflow of divs in Collapse element to enable sticky Logs navigation\n const styleOverridesForStickyNavigation = css`\n & > div {\n overflow: visible;\n & > div {\n overflow: visible;\n }\n }\n `;\n\n return (\n <>\n <LogsCrossFadeTransition visible={isLive}>\n <Collapse label=\"Logs\" loading={false} isOpen>\n <LiveTailControls exploreId={exploreId}>\n {(controls) => (\n <LiveLogsWithTheme\n logRows={logRows}\n timeZone={timeZone}\n stopLive={controls.stop}\n isPaused={this.props.isPaused}\n onPause={controls.pause}\n onResume={controls.resume}\n />\n )}\n </LiveTailControls>\n </Collapse>\n </LogsCrossFadeTransition>\n <LogsCrossFadeTransition visible={!isLive}>\n <Collapse label=\"Logs\" loading={loading} isOpen className={styleOverridesForStickyNavigation}>\n <Logs\n exploreId={exploreId}\n logRows={logRows}\n logsMeta={logsMeta}\n logsSeries={logsSeries}\n logsQueries={logsQueries}\n width={width}\n loading={loading}\n loadingState={loadingState}\n onChangeTime={this.onChangeTime}\n onClickFilterLabel={onClickFilterLabel}\n onClickFilterOutLabel={onClickFilterOutLabel}\n onStartScanning={onStartScanning}\n onStopScanning={onStopScanning}\n absoluteRange={absoluteRange}\n visibleRange={visibleRange}\n timeZone={timeZone}\n scanning={scanning}\n scanRange={range.raw}\n showContextToggle={this.showContextToggle}\n getRowContext={this.getLogRowContext}\n getFieldLinks={this.getFieldLinks}\n addResultsToCache={() => addResultsToCache(exploreId)}\n clearCache={() => clearCache(exploreId)}\n />\n </Collapse>\n </LogsCrossFadeTransition>\n </>\n );\n }\n}\n\nfunction mapStateToProps(state: StoreState, { exploreId }: { exploreId: string }) {\n const explore = state.explore;\n // @ts-ignore\n const item: ExploreItemState = explore[exploreId];\n const {\n logsResult,\n loading,\n scanning,\n datasourceInstance,\n isLive,\n isPaused,\n range,\n absoluteRange,\n logsVolumeDataProvider,\n logsVolumeData,\n } = item;\n const timeZone = getTimeZone(state.user);\n\n return {\n loading,\n logRows: logsResult?.rows,\n logsMeta: logsResult?.meta,\n logsSeries: logsResult?.series,\n logsQueries: logsResult?.queries,\n visibleRange: logsResult?.visibleRange,\n scanning,\n timeZone,\n datasourceInstance,\n isLive,\n isPaused,\n range,\n absoluteRange,\n logsVolumeDataProvider,\n logsVolumeData,\n };\n}\n\nconst mapDispatchToProps = {\n updateTimeRange,\n splitOpen,\n addResultsToCache,\n clearCache,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport default connector(LogsContainer);\n","import { css } from '@emotion/css';\nimport React, { useState } from 'react';\n\nimport { AbsoluteTimeRange, DataQueryError, DataQueryResponse, LoadingState, SplitOpen, TimeZone } from '@grafana/data';\nimport { Alert, Button, Collapse, InlineField, TooltipDisplayMode, useStyles2, useTheme2 } from '@grafana/ui';\n\nimport { ExploreGraph } from './ExploreGraph';\n\ntype Props = {\n logsVolumeData?: DataQueryResponse;\n absoluteRange: AbsoluteTimeRange;\n timeZone: TimeZone;\n splitOpen: SplitOpen;\n width: number;\n onUpdateTimeRange: (timeRange: AbsoluteTimeRange) => void;\n onLoadLogsVolume: () => void;\n};\n\nconst SHORT_ERROR_MESSAGE_LIMIT = 100;\n\nfunction ErrorAlert(props: { error: DataQueryError }) {\n const [isOpen, setIsOpen] = useState(false);\n // generic get-error-message-logic, taken from\n // /public/app/features/explore/ErrorContainer.tsx\n const message = props.error.message || props.error.data?.message || '';\n\n const showButton = !isOpen && message.length > SHORT_ERROR_MESSAGE_LIMIT;\n\n return (\n <Alert title=\"Failed to load log volume for this query\" severity=\"warning\">\n {showButton ? (\n <Button\n variant=\"secondary\"\n size=\"xs\"\n onClick={() => {\n setIsOpen(true);\n }}\n >\n Show details\n </Button>\n ) : (\n message\n )}\n </Alert>\n );\n}\n\nexport function LogsVolumePanel(props: Props) {\n const { width, logsVolumeData, absoluteRange, timeZone, splitOpen, onUpdateTimeRange, onLoadLogsVolume } = props;\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n const spacing = parseInt(theme.spacing(2).slice(0, -2), 10);\n const height = 150;\n\n let LogsVolumePanelContent;\n\n if (!logsVolumeData) {\n return null;\n } else if (logsVolumeData?.error) {\n return <ErrorAlert error={logsVolumeData?.error} />;\n } else if (logsVolumeData?.state === LoadingState.Loading) {\n LogsVolumePanelContent = <span>Log volume is loading...</span>;\n } else if (logsVolumeData?.data) {\n if (logsVolumeData.data.length > 0) {\n LogsVolumePanelContent = (\n <ExploreGraph\n graphStyle=\"lines\"\n loadingState={LoadingState.Done}\n data={logsVolumeData.data}\n height={height}\n width={width - spacing}\n absoluteRange={absoluteRange}\n onChangeTime={onUpdateTimeRange}\n timeZone={timeZone}\n splitOpenFn={splitOpen}\n tooltipDisplayMode={TooltipDisplayMode.Multi}\n />\n );\n } else {\n LogsVolumePanelContent = <span>No volume data.</span>;\n }\n }\n\n const zoomRatio = logsLevelZoomRatio(logsVolumeData, absoluteRange);\n let zoomLevelInfo;\n\n if (zoomRatio !== undefined && zoomRatio < 1) {\n zoomLevelInfo = (\n <InlineField label=\"Reload log volume\" transparent>\n <Button size=\"xs\" icon=\"sync\" variant=\"secondary\" onClick={onLoadLogsVolume} id=\"reload-volume\" />\n </InlineField>\n );\n }\n\n return (\n <Collapse label=\"Log volume\" isOpen={true} loading={logsVolumeData?.state === LoadingState.Loading}>\n <div style={{ height }} className={styles.contentContainer}>\n {LogsVolumePanelContent}\n </div>\n <div className={styles.zoomInfoContainer}>{zoomLevelInfo}</div>\n </Collapse>\n );\n}\n\nconst getStyles = () => {\n return {\n zoomInfoContainer: css`\n display: flex;\n justify-content: end;\n position: absolute;\n right: 5px;\n top: 5px;\n `,\n contentContainer: css`\n display: flex;\n align-items: center;\n justify-content: center;\n `,\n };\n};\n\nfunction logsLevelZoomRatio(\n logsVolumeData: DataQueryResponse | undefined,\n selectedTimeRange: AbsoluteTimeRange\n): number | undefined {\n const dataRange = logsVolumeData && logsVolumeData.data[0] && logsVolumeData.data[0].meta?.custom?.absoluteRange;\n return dataRange ? (selectedTimeRange.from - selectedTimeRange.to) / (dataRange.from - dataRange.to) : undefined;\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { LinkButton, CallToActionCard, Icon, useTheme2 } from '@grafana/ui';\nimport { contextSrv } from 'app/core/core';\nimport { AccessControlAction } from 'app/types';\n\nexport const NoDataSourceCallToAction = () => {\n const theme = useTheme2();\n\n const canCreateDataSource =\n contextSrv.hasPermission(AccessControlAction.DataSourcesCreate) &&\n contextSrv.hasPermission(AccessControlAction.DataSourcesWrite);\n\n const message =\n 'Explore requires at least one data source. Once you have added a data source, you can query it here.';\n const footer = (\n <>\n <Icon name=\"rocket\" />\n <> ProTip: You can also define data sources through configuration files. </>\n <a\n href=\"http://docs.grafana.org/administration/provisioning/#datasources?utm_source=explore\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-link\"\n >\n Learn more\n </a>\n </>\n );\n\n const ctaElement = (\n <LinkButton size=\"lg\" href=\"datasources/new\" icon=\"database\" disabled={!canCreateDataSource}>\n Add data source\n </LinkButton>\n );\n\n const cardClassName = css`\n max-width: ${theme.breakpoints.values.lg}px;\n margin-top: ${theme.spacing(2)};\n align-self: center;\n `;\n\n return (\n <CallToActionCard callToActionElement={ctaElement} className={cardClassName} footer={footer} message={message} />\n );\n};\n","import { css } from '@emotion/css';\nimport React from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport { useToggle } from 'react-use';\n\nimport { applyFieldOverrides, DataFrame, GrafanaTheme2 } from '@grafana/data';\nimport { Badge, Collapse, useStyles2, useTheme2 } from '@grafana/ui';\n\nimport { NodeGraph } from '../../plugins/panel/nodeGraph';\nimport { useCategorizeFrames } from '../../plugins/panel/nodeGraph/useCategorizeFrames';\nimport { ExploreId, StoreState } from '../../types';\n\nimport { splitOpen } from './state/main';\nimport { useLinks } from './utils/links';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n warningText: css`\n label: warningText;\n font-size: ${theme.typography.bodySmall.fontSize};\n color: ${theme.colors.text.secondary};\n `,\n});\n\ninterface OwnProps {\n // Edges and Nodes are separate frames\n dataFrames: DataFrame[];\n exploreId: ExploreId;\n // When showing the node graph together with trace view we do some changes so it works better.\n withTraceView?: boolean;\n}\n\ntype Props = OwnProps & ConnectedProps<typeof connector>;\n\nexport function UnconnectedNodeGraphContainer(props: Props) {\n const { dataFrames, range, splitOpen, withTraceView } = props;\n const getLinks = useLinks(range, splitOpen);\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n\n // This is implicit dependency that is needed for links to work. At some point when replacing variables in the link\n // it requires field to have a display property which is added by the overrides even though we don't add any field\n // overrides in explore.\n const frames = applyFieldOverrides({\n fieldConfig: {\n defaults: {},\n overrides: [],\n },\n data: dataFrames,\n // We don't need proper replace here as it is only used in getLinks and we use getFieldLinks\n replaceVariables: (value) => value,\n theme,\n });\n\n const { nodes } = useCategorizeFrames(frames);\n const [open, toggleOpen] = useToggle(false);\n\n const countWarning =\n withTraceView && nodes[0]?.length > 1000 ? (\n <span className={styles.warningText}> ({nodes[0].length} nodes, can be slow to load)</span>\n ) : null;\n\n return (\n <Collapse\n label={\n <span>\n Node graph{countWarning}{' '}\n <Badge text={'Beta'} color={'blue'} icon={'rocket'} tooltip={'This visualization is in beta'} />\n </span>\n }\n collapsible={withTraceView}\n // We allow collapsing this only when it is shown together with trace view.\n isOpen={withTraceView ? open : true}\n onToggle={withTraceView ? () => toggleOpen() : undefined}\n >\n <div style={{ height: withTraceView ? 500 : 600 }}>\n <NodeGraph dataFrames={frames} getLinks={getLinks} />\n </div>\n </Collapse>\n );\n}\n\nfunction mapStateToProps(state: StoreState, { exploreId }: OwnProps) {\n return {\n range: state.explore[exploreId]!.range,\n };\n}\n\nconst mapDispatchToProps = {\n splitOpen,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\nexport const NodeGraphContainer = connector(UnconnectedNodeGraphContainer);\n","import { createSelector } from '@reduxjs/toolkit';\nimport React, { useCallback, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { CoreApp, DataQuery } from '@grafana/data';\nimport { getNextRefIdChar } from 'app/core/utils/query';\nimport { ExploreId } from 'app/types/explore';\n\nimport { getDatasourceSrv } from '../plugins/datasource_srv';\nimport { QueryEditorRows } from '../query/components/QueryEditorRows';\n\nimport { runQueries, changeQueriesAction } from './state/query';\nimport { getExploreItemSelector } from './state/selectors';\n\ninterface Props {\n exploreId: ExploreId;\n}\n\nconst makeSelectors = (exploreId: ExploreId) => {\n const exploreItemSelector = getExploreItemSelector(exploreId);\n return {\n getQueries: createSelector(exploreItemSelector, (s) => s!.queries),\n getQueryResponse: createSelector(exploreItemSelector, (s) => s!.queryResponse),\n getHistory: createSelector(exploreItemSelector, (s) => s!.history),\n getEventBridge: createSelector(exploreItemSelector, (s) => s!.eventBridge),\n getDatasourceInstanceSettings: createSelector(\n exploreItemSelector,\n (s) => getDatasourceSrv().getInstanceSettings(s!.datasourceInstance?.uid)!\n ),\n };\n};\n\nexport const QueryRows = ({ exploreId }: Props) => {\n const dispatch = useDispatch();\n const { getQueries, getDatasourceInstanceSettings, getQueryResponse, getHistory, getEventBridge } = useMemo(\n () => makeSelectors(exploreId),\n [exploreId]\n );\n\n const queries = useSelector(getQueries)!;\n const dsSettings = useSelector(getDatasourceInstanceSettings)!;\n const queryResponse = useSelector(getQueryResponse)!;\n const history = useSelector(getHistory);\n const eventBridge = useSelector(getEventBridge);\n\n const onRunQueries = useCallback(() => {\n dispatch(runQueries(exploreId));\n }, [dispatch, exploreId]);\n\n const onChange = useCallback(\n (newQueries: DataQuery[]) => {\n dispatch(changeQueriesAction({ queries: newQueries, exploreId }));\n\n // if we are removing a query we want to run the remaining ones\n if (newQueries.length < queries.length) {\n onRunQueries();\n }\n },\n [dispatch, exploreId, onRunQueries, queries]\n );\n\n const onAddQuery = useCallback(\n (query: DataQuery) => {\n onChange([...queries, { ...query, refId: getNextRefIdChar(queries) }]);\n },\n [onChange, queries]\n );\n\n return (\n <QueryEditorRows\n dsSettings={dsSettings}\n queries={queries}\n onQueriesChange={onChange}\n onAddQuery={onAddQuery}\n onRunQueries={onRunQueries}\n data={queryResponse}\n app={CoreApp.Explore}\n history={history}\n eventBus={eventBridge}\n />\n );\n};\n","import React, { FC, CSSProperties } from 'react';\nimport Transition, { ExitHandler } from 'react-transition-group/Transition';\n\ninterface Props {\n duration: number;\n children: JSX.Element;\n in: boolean;\n unmountOnExit?: boolean;\n onExited?: ExitHandler<HTMLDivElement>;\n}\n\nexport const FadeIn: FC<Props> = (props) => {\n const defaultStyle: CSSProperties = {\n transition: `opacity ${props.duration}ms linear`,\n opacity: 0,\n };\n\n const transitionStyles: { [str: string]: CSSProperties } = {\n exited: { opacity: 0, display: 'none' },\n entering: { opacity: 0 },\n entered: { opacity: 1 },\n exiting: { opacity: 0 },\n };\n\n return (\n <Transition\n in={props.in}\n timeout={props.duration}\n unmountOnExit={props.unmountOnExit || false}\n onExited={props.onExited}\n >\n {(state) => (\n <div\n style={{\n ...defaultStyle,\n ...transitionStyles[state],\n }}\n >\n {props.children}\n </div>\n )}\n </Transition>\n );\n};\n","import { css } from '@emotion/css';\nimport React, { FunctionComponent } from 'react';\n\nimport { DataQueryError } from '@grafana/data';\nimport { Alert, useTheme2 } from '@grafana/ui';\nimport { FadeIn } from 'app/core/components/Animations/FadeIn';\n\nexport interface ErrorContainerProps {\n queryError?: DataQueryError;\n}\n\nexport const ErrorContainer: FunctionComponent<ErrorContainerProps> = (props) => {\n const { queryError } = props;\n const theme = useTheme2();\n const showError = queryError ? true : false;\n const duration = showError ? 100 : 10;\n const title = queryError ? 'Query error' : 'Unknown error';\n const message = queryError?.message || queryError?.data?.message || null;\n const alertWithTopMargin = css`\n margin-top: ${theme.spacing(2)};\n `;\n\n return (\n <FadeIn in={showError} duration={duration}>\n <Alert severity=\"error\" title={title} className={alertWithTopMargin}>\n {message}\n </Alert>\n </FadeIn>\n );\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { LoadingState } from '@grafana/data';\n\nimport { ExploreId, StoreState } from '../../types';\n\nimport { ErrorContainer } from './ErrorContainer';\n\ninterface Props {\n exploreId: ExploreId;\n}\nexport function ResponseErrorContainer(props: Props) {\n const queryResponse = useSelector((state: StoreState) => state.explore[props.exploreId]?.queryResponse);\n\n const queryError = queryResponse?.state === LoadingState.Error ? queryResponse?.error : undefined;\n\n return <ErrorContainer queryError={queryError} />;\n}\n","import { css, cx } from '@emotion/css';\nimport React, { useState, useEffect } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport { GrafanaTheme, DataSourceApi, DataQuery } from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { stylesFactory, useTheme, TextArea, Button, IconButton } from '@grafana/ui';\nimport { notifyApp } from 'app/core/actions';\nimport appEvents from 'app/core/app_events';\nimport { createSuccessNotification } from 'app/core/copy/appNotification';\nimport { copyStringToClipboard } from 'app/core/utils/explore';\nimport { createUrlFromRichHistory, createQueryText } from 'app/core/utils/richHistory';\nimport { createAndCopyShortLink } from 'app/core/utils/shortLinks';\nimport { dispatch } from 'app/store/store';\nimport { StoreState } from 'app/types';\nimport { RichHistoryQuery, ExploreId } from 'app/types/explore';\n\nimport { ShowConfirmModalEvent } from '../../../types/events';\nimport { changeDatasource } from '../state/datasource';\nimport { starHistoryItem, commentHistoryItem, deleteHistoryItem } from '../state/history';\nimport { setQueries } from '../state/query';\n\nfunction mapStateToProps(state: StoreState, { exploreId }: { exploreId: ExploreId }) {\n const explore = state.explore;\n const { datasourceInstance } = explore[exploreId]!;\n return {\n exploreId,\n datasourceInstance,\n };\n}\n\nconst mapDispatchToProps = {\n changeDatasource,\n deleteHistoryItem,\n commentHistoryItem,\n starHistoryItem,\n setQueries,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface OwnProps<T extends DataQuery = DataQuery> {\n query: RichHistoryQuery<T>;\n dsImg: string;\n isRemoved: boolean;\n}\n\nexport type Props<T extends DataQuery = DataQuery> = ConnectedProps<typeof connector> & OwnProps<T>;\n\nconst getStyles = stylesFactory((theme: GrafanaTheme, isRemoved: boolean) => {\n /* Hard-coded value so all buttons and icons on right side of card are aligned */\n const rigtColumnWidth = '240px';\n const rigtColumnContentWidth = '170px';\n\n /* If datasource was removed, card will have inactive color */\n const cardColor = theme.colors.bg2;\n\n return {\n queryCard: css`\n display: flex;\n flex-direction: column;\n border: 1px solid ${theme.colors.border1};\n margin: ${theme.spacing.sm} 0;\n background-color: ${cardColor};\n border-radius: ${theme.border.radius.sm};\n .starred {\n color: ${theme.palette.orange};\n }\n `,\n cardRow: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: ${theme.spacing.sm};\n border-bottom: none;\n :first-of-type {\n border-bottom: 1px solid ${theme.colors.border1};\n padding: ${theme.spacing.xs} ${theme.spacing.sm};\n }\n img {\n height: ${theme.typography.size.base};\n max-width: ${theme.typography.size.base};\n margin-right: ${theme.spacing.sm};\n }\n `,\n datasourceContainer: css`\n display: flex;\n align-items: center;\n font-size: ${theme.typography.size.sm};\n font-weight: ${theme.typography.weight.semibold};\n `,\n queryActionButtons: css`\n max-width: ${rigtColumnContentWidth};\n display: flex;\n justify-content: flex-end;\n font-size: ${theme.typography.size.base};\n button {\n margin-left: ${theme.spacing.sm};\n }\n `,\n queryContainer: css`\n font-weight: ${theme.typography.weight.semibold};\n width: calc(100% - ${rigtColumnWidth});\n `,\n queryRow: css`\n border-top: 1px solid ${theme.colors.border1};\n word-break: break-all;\n padding: 4px 2px;\n :first-child {\n border-top: none;\n padding: 0 0 4px 0;\n }\n `,\n updateCommentContainer: css`\n width: calc(100% + ${rigtColumnWidth});\n margin-top: ${theme.spacing.sm};\n `,\n comment: css`\n overflow-wrap: break-word;\n font-size: ${theme.typography.size.sm};\n font-weight: ${theme.typography.weight.regular};\n margin-top: ${theme.spacing.xs};\n `,\n commentButtonRow: css`\n > * {\n margin-right: ${theme.spacing.sm};\n }\n `,\n textArea: css`\n width: 100%;\n `,\n runButton: css`\n max-width: ${rigtColumnContentWidth};\n display: flex;\n justify-content: flex-end;\n button {\n height: auto;\n padding: ${theme.spacing.xs} ${theme.spacing.md};\n line-height: 1.4;\n span {\n white-space: normal !important;\n }\n }\n `,\n };\n});\n\nexport function RichHistoryCard(props: Props) {\n const {\n query,\n dsImg,\n isRemoved,\n commentHistoryItem,\n starHistoryItem,\n deleteHistoryItem,\n changeDatasource,\n exploreId,\n datasourceInstance,\n setQueries,\n } = props;\n const [activeUpdateComment, setActiveUpdateComment] = useState(false);\n const [comment, setComment] = useState<string | undefined>(query.comment);\n const [queryDsInstance, setQueryDsInstance] = useState<DataSourceApi | undefined>(undefined);\n\n useEffect(() => {\n const getQueryDsInstance = async () => {\n const ds = await getDataSourceSrv().get(query.datasourceName);\n setQueryDsInstance(ds);\n };\n\n getQueryDsInstance();\n }, [query.datasourceName]);\n\n const theme = useTheme();\n const styles = getStyles(theme, isRemoved);\n\n const onRunQuery = async () => {\n const queriesToRun = query.queries;\n if (query.datasourceName !== datasourceInstance?.name) {\n await changeDatasource(exploreId, query.datasourceName, { importQueries: true });\n setQueries(exploreId, queriesToRun);\n } else {\n setQueries(exploreId, queriesToRun);\n }\n };\n\n const onCopyQuery = () => {\n const queriesToCopy = query.queries.map((q) => createQueryText(q, queryDsInstance)).join('\\n');\n copyStringToClipboard(queriesToCopy);\n dispatch(notifyApp(createSuccessNotification('Query copied to clipboard')));\n };\n\n const onCreateShortLink = async () => {\n const link = createUrlFromRichHistory(query);\n await createAndCopyShortLink(link);\n };\n\n const onDeleteQuery = () => {\n // For starred queries, we want confirmation. For non-starred, we don't.\n if (query.starred) {\n appEvents.publish(\n new ShowConfirmModalEvent({\n title: 'Delete',\n text: 'Are you sure you want to permanently delete your starred query?',\n yesText: 'Delete',\n icon: 'trash-alt',\n onConfirm: () => {\n deleteHistoryItem(query.id);\n dispatch(notifyApp(createSuccessNotification('Query deleted')));\n },\n })\n );\n } else {\n deleteHistoryItem(query.id);\n dispatch(notifyApp(createSuccessNotification('Query deleted')));\n }\n };\n\n const onStarrQuery = () => {\n starHistoryItem(query.id, !query.starred);\n };\n\n const toggleActiveUpdateComment = () => setActiveUpdateComment(!activeUpdateComment);\n\n const onUpdateComment = () => {\n commentHistoryItem(query.id, comment);\n setActiveUpdateComment(false);\n };\n\n const onCancelUpdateComment = () => {\n setActiveUpdateComment(false);\n setComment(query.comment);\n };\n\n const onKeyDown = (keyEvent: React.KeyboardEvent) => {\n if (keyEvent.key === 'Enter' && (keyEvent.shiftKey || keyEvent.ctrlKey)) {\n onUpdateComment();\n }\n\n if (keyEvent.key === 'Escape') {\n onCancelUpdateComment();\n }\n };\n\n const updateComment = (\n <div className={styles.updateCommentContainer} aria-label={comment ? 'Update comment form' : 'Add comment form'}>\n <TextArea\n value={comment}\n placeholder={comment ? undefined : 'An optional description of what the query does.'}\n onChange={(e) => setComment(e.currentTarget.value)}\n className={styles.textArea}\n />\n <div className={styles.commentButtonRow}>\n <Button onClick={onUpdateComment} aria-label=\"Submit button\">\n Save comment\n </Button>\n <Button variant=\"secondary\" onClick={onCancelUpdateComment}>\n Cancel\n </Button>\n </div>\n </div>\n );\n\n const queryActionButtons = (\n <div className={styles.queryActionButtons}>\n <IconButton\n name=\"comment-alt\"\n onClick={toggleActiveUpdateComment}\n title={query.comment?.length > 0 ? 'Edit comment' : 'Add comment'}\n />\n <IconButton name=\"copy\" onClick={onCopyQuery} title=\"Copy query to clipboard\" />\n {!isRemoved && (\n <IconButton name=\"share-alt\" onClick={onCreateShortLink} title=\"Copy shortened link to clipboard\" />\n )}\n <IconButton name=\"trash-alt\" title={'Delete query'} onClick={onDeleteQuery} />\n <IconButton\n name={query.starred ? 'favorite' : 'star'}\n iconType={query.starred ? 'mono' : 'default'}\n onClick={onStarrQuery}\n title={query.starred ? 'Unstar query' : 'Star query'}\n />\n </div>\n );\n\n return (\n <div className={styles.queryCard} onKeyDown={onKeyDown}>\n <div className={styles.cardRow}>\n <div className={styles.datasourceContainer}>\n <img src={dsImg} aria-label=\"Data source icon\" />\n <div aria-label=\"Data source name\">\n {isRemoved ? 'Data source does not exist anymore' : query.datasourceName}\n </div>\n </div>\n {queryActionButtons}\n </div>\n <div className={cx(styles.cardRow)}>\n <div className={styles.queryContainer}>\n {query.queries.map((q, i) => {\n const queryText = createQueryText(q, queryDsInstance);\n return (\n <div aria-label=\"Query text\" key={`${q}-${i}`} className={styles.queryRow}>\n {queryText}\n </div>\n );\n })}\n {!activeUpdateComment && query.comment && (\n <div aria-label=\"Query comment\" className={styles.comment}>\n {query.comment}\n </div>\n )}\n {activeUpdateComment && updateComment}\n </div>\n {!activeUpdateComment && (\n <div className={styles.runButton}>\n <Button variant=\"secondary\" onClick={onRunQuery} disabled={isRemoved}>\n {datasourceInstance?.name === query.datasourceName ? 'Run query' : 'Switch data source and run query'}\n </Button>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default connector(RichHistoryCard);\n","import { css } from '@emotion/css';\nimport { uniqBy } from 'lodash';\nimport React, { useState, useEffect } from 'react';\nimport { useDebounce } from 'react-use';\n\nimport { GrafanaTheme, SelectableValue } from '@grafana/data';\nimport { stylesFactory, useTheme, RangeSlider, MultiSelect, Select, FilterInput } from '@grafana/ui';\nimport {\n SortOrder,\n mapNumbertoTimeInSlider,\n mapQueriesToHeadings,\n createDatasourcesList,\n filterAndSortQueries,\n} from 'app/core/utils/richHistory';\nimport { RichHistoryQuery, ExploreId } from 'app/types/explore';\n\nimport { sortOrderOptions } from './RichHistory';\nimport RichHistoryCard from './RichHistoryCard';\n\nexport interface Props {\n queries: RichHistoryQuery[];\n sortOrder: SortOrder;\n activeDatasourceOnly: boolean;\n datasourceFilters: SelectableValue[];\n retentionPeriod: number;\n exploreId: ExploreId;\n height: number;\n onChangeSortOrder: (sortOrder: SortOrder) => void;\n onSelectDatasourceFilters: (value: SelectableValue[]) => void;\n}\n\nconst getStyles = stylesFactory((theme: GrafanaTheme, height: number) => {\n const bgColor = theme.isLight ? theme.palette.gray5 : theme.palette.dark4;\n\n /* 134px is based on the width of the Query history tabs bar, so the content is aligned to right side of the tab */\n const cardWidth = '100% - 134px';\n const sliderHeight = `${height - 180}px`;\n return {\n container: css`\n display: flex;\n .label-slider {\n font-size: ${theme.typography.size.sm};\n &:last-of-type {\n margin-top: ${theme.spacing.lg};\n }\n &:first-of-type {\n font-weight: ${theme.typography.weight.semibold};\n margin-bottom: ${theme.spacing.md};\n }\n }\n `,\n containerContent: css`\n width: calc(${cardWidth});\n `,\n containerSlider: css`\n width: 129px;\n margin-right: ${theme.spacing.sm};\n .slider {\n bottom: 10px;\n height: ${sliderHeight};\n width: 129px;\n padding: ${theme.spacing.sm} 0;\n }\n `,\n slider: css`\n position: fixed;\n `,\n selectors: css`\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n `,\n filterInput: css`\n margin-bottom: ${theme.spacing.sm};\n `,\n multiselect: css`\n width: 100%;\n margin-bottom: ${theme.spacing.sm};\n .gf-form-select-box__multi-value {\n background-color: ${bgColor};\n padding: ${theme.spacing.xxs} ${theme.spacing.xs} ${theme.spacing.xxs} ${theme.spacing.sm};\n border-radius: ${theme.border.radius.sm};\n }\n `,\n sort: css`\n width: 170px;\n `,\n sessionName: css`\n display: flex;\n align-items: flex-start;\n justify-content: flex-start;\n margin-top: ${theme.spacing.lg};\n h4 {\n margin: 0 10px 0 0;\n }\n `,\n heading: css`\n font-size: ${theme.typography.heading.h4};\n margin: ${theme.spacing.md} ${theme.spacing.xxs} ${theme.spacing.sm} ${theme.spacing.xxs};\n `,\n footer: css`\n height: 60px;\n margin: ${theme.spacing.lg} auto;\n display: flex;\n justify-content: center;\n font-weight: ${theme.typography.weight.light};\n font-size: ${theme.typography.size.sm};\n a {\n font-weight: ${theme.typography.weight.semibold};\n margin-left: ${theme.spacing.xxs};\n }\n `,\n queries: css`\n font-size: ${theme.typography.size.sm};\n font-weight: ${theme.typography.weight.regular};\n margin-left: ${theme.spacing.xs};\n `,\n };\n});\n\nexport function RichHistoryQueriesTab(props: Props) {\n const {\n datasourceFilters,\n onSelectDatasourceFilters,\n queries,\n onChangeSortOrder,\n sortOrder,\n activeDatasourceOnly,\n retentionPeriod,\n exploreId,\n height,\n } = props;\n\n const [timeFilter, setTimeFilter] = useState<[number, number]>([0, retentionPeriod]);\n const [data, setData] = useState<[RichHistoryQuery[], ReturnType<typeof createDatasourcesList>]>([[], []]);\n const [searchInput, setSearchInput] = useState('');\n const [debouncedSearchInput, setDebouncedSearchInput] = useState('');\n\n const theme = useTheme();\n const styles = getStyles(theme, height);\n\n useDebounce(\n () => {\n setDebouncedSearchInput(searchInput);\n },\n 300,\n [searchInput]\n );\n\n useEffect(() => {\n const datasourcesRetrievedFromQueryHistory = uniqBy(queries, 'datasourceName').map((d) => d.datasourceName);\n const listOfDatasources = createDatasourcesList(datasourcesRetrievedFromQueryHistory);\n\n setData([\n filterAndSortQueries(\n queries,\n sortOrder,\n datasourceFilters.map((d) => d.value),\n debouncedSearchInput,\n timeFilter\n ),\n listOfDatasources,\n ]);\n }, [timeFilter, queries, sortOrder, datasourceFilters, debouncedSearchInput]);\n\n const [filteredQueries, listOfDatasources] = data;\n\n /* mappedQueriesToHeadings is an object where query headings (stringified dates/data sources)\n * are keys and arrays with queries that belong to that headings are values.\n */\n const mappedQueriesToHeadings = mapQueriesToHeadings(filteredQueries, sortOrder);\n\n return (\n <div className={styles.container}>\n <div className={styles.containerSlider}>\n <div className={styles.slider}>\n <div className=\"label-slider\">Filter history</div>\n <div className=\"label-slider\">{mapNumbertoTimeInSlider(timeFilter[0])}</div>\n <div className=\"slider\">\n <RangeSlider\n tooltipAlwaysVisible={false}\n min={0}\n max={retentionPeriod}\n value={timeFilter}\n orientation=\"vertical\"\n formatTooltipResult={mapNumbertoTimeInSlider}\n reverse={true}\n onAfterChange={setTimeFilter as () => number[]}\n />\n </div>\n <div className=\"label-slider\">{mapNumbertoTimeInSlider(timeFilter[1])}</div>\n </div>\n </div>\n\n <div className={styles.containerContent}>\n <div className={styles.selectors}>\n {!activeDatasourceOnly && (\n <div aria-label=\"Filter datasources\" className={styles.multiselect}>\n <MultiSelect\n menuShouldPortal\n options={listOfDatasources}\n value={datasourceFilters}\n placeholder=\"Filter queries for data sources(s)\"\n onChange={onSelectDatasourceFilters}\n />\n </div>\n )}\n <div className={styles.filterInput}>\n <FilterInput\n placeholder=\"Search queries\"\n value={searchInput}\n onChange={(value: string) => {\n setSearchInput(value);\n }}\n />\n </div>\n <div aria-label=\"Sort queries\" className={styles.sort}>\n <Select\n menuShouldPortal\n value={sortOrderOptions.filter((order) => order.value === sortOrder)}\n options={sortOrderOptions}\n placeholder=\"Sort queries by\"\n onChange={(e) => onChangeSortOrder(e.value as SortOrder)}\n />\n </div>\n </div>\n {Object.keys(mappedQueriesToHeadings).map((heading) => {\n return (\n <div key={heading}>\n <div className={styles.heading}>\n {heading} <span className={styles.queries}>{mappedQueriesToHeadings[heading].length} queries</span>\n </div>\n {mappedQueriesToHeadings[heading].map((q: RichHistoryQuery) => {\n const idx = listOfDatasources.findIndex((d) => d.label === q.datasourceName);\n return (\n <RichHistoryCard\n query={q}\n key={q.id}\n exploreId={exploreId}\n dsImg={listOfDatasources[idx].imgUrl}\n isRemoved={listOfDatasources[idx].isRemoved}\n />\n );\n })}\n </div>\n );\n })}\n <div className={styles.footer}>The history is local to your browser and is not shared with others.</div>\n </div>\n </div>\n );\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme, SelectableValue } from '@grafana/data';\nimport { stylesFactory, useTheme, Select, Button, Switch, Field } from '@grafana/ui';\nimport { notifyApp } from 'app/core/actions';\nimport appEvents from 'app/core/app_events';\nimport { createSuccessNotification } from 'app/core/copy/appNotification';\nimport { MAX_HISTORY_ITEMS } from 'app/core/history/RichHistoryLocalStorage';\nimport { dispatch } from 'app/store/store';\n\nimport { ShowConfirmModalEvent } from '../../../types/events';\n\nexport interface RichHistorySettingsProps {\n retentionPeriod: number;\n starredTabAsFirstTab: boolean;\n activeDatasourceOnly: boolean;\n onChangeRetentionPeriod: (option: SelectableValue<number>) => void;\n toggleStarredTabAsFirstTab: () => void;\n toggleactiveDatasourceOnly: () => void;\n deleteRichHistory: () => void;\n}\n\nconst getStyles = stylesFactory((theme: GrafanaTheme) => {\n return {\n container: css`\n font-size: ${theme.typography.size.sm};\n .space-between {\n margin-bottom: ${theme.spacing.lg};\n }\n `,\n input: css`\n max-width: 200px;\n `,\n switch: css`\n display: flex;\n align-items: center;\n `,\n label: css`\n margin-left: ${theme.spacing.md};\n `,\n };\n});\n\nconst retentionPeriodOptions = [\n { value: 2, label: '2 days' },\n { value: 5, label: '5 days' },\n { value: 7, label: '1 week' },\n { value: 14, label: '2 weeks' },\n];\n\nexport function RichHistorySettings(props: RichHistorySettingsProps) {\n const {\n retentionPeriod,\n starredTabAsFirstTab,\n activeDatasourceOnly,\n onChangeRetentionPeriod,\n toggleStarredTabAsFirstTab,\n toggleactiveDatasourceOnly,\n deleteRichHistory,\n } = props;\n const theme = useTheme();\n const styles = getStyles(theme);\n const selectedOption = retentionPeriodOptions.find((v) => v.value === retentionPeriod);\n\n const onDelete = () => {\n appEvents.publish(\n new ShowConfirmModalEvent({\n title: 'Delete',\n text: 'Are you sure you want to permanently delete your query history?',\n yesText: 'Delete',\n icon: 'trash-alt',\n onConfirm: () => {\n deleteRichHistory();\n dispatch(notifyApp(createSuccessNotification('Query history deleted')));\n },\n })\n );\n };\n\n return (\n <div className={styles.container}>\n <Field\n label=\"History time span\"\n description={`Select the period of time for which Grafana will save your query history. Up to ${MAX_HISTORY_ITEMS} entries will be stored.`}\n className=\"space-between\"\n >\n <div className={styles.input}>\n <Select\n menuShouldPortal\n value={selectedOption}\n options={retentionPeriodOptions}\n onChange={onChangeRetentionPeriod}\n ></Select>\n </div>\n </Field>\n <Field label=\"Default active tab\" description=\" \" className=\"space-between\">\n <div className={styles.switch}>\n <Switch value={starredTabAsFirstTab} onChange={toggleStarredTabAsFirstTab}></Switch>\n <div className={styles.label}>Change the default active tab from “Query history” to “Starred”</div>\n </div>\n </Field>\n <Field label=\"Data source behaviour\" description=\" \" className=\"space-between\">\n <div className={styles.switch}>\n <Switch value={activeDatasourceOnly} onChange={toggleactiveDatasourceOnly}></Switch>\n <div className={styles.label}>Only show queries for data source currently active in Explore</div>\n </div>\n </Field>\n <div\n className={css`\n font-weight: ${theme.typography.weight.bold};\n `}\n >\n Clear query history\n </div>\n <div\n className={css`\n margin-bottom: ${theme.spacing.sm};\n `}\n >\n Delete all of your query history, permanently.\n </div>\n <Button variant=\"destructive\" onClick={onDelete}>\n Clear query history\n </Button>\n </div>\n );\n}\n","import { css } from '@emotion/css';\nimport { uniqBy } from 'lodash';\nimport React, { useState, useEffect } from 'react';\nimport { useDebounce } from 'react-use';\n\nimport { GrafanaTheme, SelectableValue } from '@grafana/data';\nimport { stylesFactory, useTheme, Select, MultiSelect, FilterInput } from '@grafana/ui';\nimport { filterAndSortQueries, createDatasourcesList, SortOrder } from 'app/core/utils/richHistory';\nimport { RichHistoryQuery, ExploreId } from 'app/types/explore';\n\nimport { sortOrderOptions } from './RichHistory';\nimport RichHistoryCard from './RichHistoryCard';\n\nexport interface Props {\n queries: RichHistoryQuery[];\n sortOrder: SortOrder;\n activeDatasourceOnly: boolean;\n datasourceFilters: SelectableValue[];\n exploreId: ExploreId;\n onChangeSortOrder: (sortOrder: SortOrder) => void;\n onSelectDatasourceFilters: (value: SelectableValue[]) => void;\n}\n\nconst getStyles = stylesFactory((theme: GrafanaTheme) => {\n const bgColor = theme.isLight ? theme.palette.gray5 : theme.palette.dark4;\n return {\n container: css`\n display: flex;\n `,\n containerContent: css`\n width: 100%;\n `,\n selectors: css`\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n `,\n multiselect: css`\n width: 100%;\n margin-bottom: ${theme.spacing.sm};\n .gf-form-select-box__multi-value {\n background-color: ${bgColor};\n padding: ${theme.spacing.xxs} ${theme.spacing.xs} ${theme.spacing.xxs} ${theme.spacing.sm};\n border-radius: ${theme.border.radius.sm};\n }\n `,\n filterInput: css`\n margin-bottom: ${theme.spacing.sm};\n `,\n sort: css`\n width: 170px;\n `,\n footer: css`\n height: 60px;\n margin-top: ${theme.spacing.lg};\n display: flex;\n justify-content: center;\n font-weight: ${theme.typography.weight.light};\n font-size: ${theme.typography.size.sm};\n a {\n font-weight: ${theme.typography.weight.semibold};\n margin-left: ${theme.spacing.xxs};\n }\n `,\n };\n});\n\nexport function RichHistoryStarredTab(props: Props) {\n const {\n datasourceFilters,\n onSelectDatasourceFilters,\n queries,\n onChangeSortOrder,\n sortOrder,\n activeDatasourceOnly,\n exploreId,\n } = props;\n\n const [data, setData] = useState<[RichHistoryQuery[], ReturnType<typeof createDatasourcesList>]>([[], []]);\n const [searchInput, setSearchInput] = useState('');\n const [debouncedSearchInput, setDebouncedSearchInput] = useState('');\n\n const theme = useTheme();\n const styles = getStyles(theme);\n\n useDebounce(\n () => {\n setDebouncedSearchInput(searchInput);\n },\n 300,\n [searchInput]\n );\n\n useEffect(() => {\n const datasourcesRetrievedFromQueryHistory = uniqBy(queries, 'datasourceName').map((d) => d.datasourceName);\n const listOfDatasources = createDatasourcesList(datasourcesRetrievedFromQueryHistory);\n const starredQueries = queries.filter((q) => q.starred === true);\n setData([\n filterAndSortQueries(\n starredQueries,\n sortOrder,\n datasourceFilters.map((d) => d.value),\n debouncedSearchInput\n ),\n listOfDatasources,\n ]);\n }, [queries, sortOrder, datasourceFilters, debouncedSearchInput]);\n\n const [filteredQueries, listOfDatasources] = data;\n\n return (\n <div className={styles.container}>\n <div className={styles.containerContent}>\n <div className={styles.selectors}>\n {!activeDatasourceOnly && (\n <div aria-label=\"Filter datasources\" className={styles.multiselect}>\n <MultiSelect\n menuShouldPortal\n options={listOfDatasources}\n value={datasourceFilters}\n placeholder=\"Filter queries for specific data sources(s)\"\n onChange={onSelectDatasourceFilters}\n />\n </div>\n )}\n <div className={styles.filterInput}>\n <FilterInput\n placeholder=\"Search queries\"\n value={searchInput}\n onChange={(value: string) => {\n setSearchInput(value);\n }}\n />\n </div>\n <div aria-label=\"Sort queries\" className={styles.sort}>\n <Select\n menuShouldPortal\n options={sortOrderOptions}\n value={sortOrderOptions.filter((order) => order.value === sortOrder)}\n placeholder=\"Sort queries by\"\n onChange={(e) => onChangeSortOrder(e.value as SortOrder)}\n />\n </div>\n </div>\n {filteredQueries.map((q) => {\n const idx = listOfDatasources.findIndex((d) => d.label === q.datasourceName);\n return (\n <RichHistoryCard\n query={q}\n key={q.id}\n exploreId={exploreId}\n dsImg={listOfDatasources[idx].imgUrl}\n isRemoved={listOfDatasources[idx].isRemoved}\n />\n );\n })}\n <div className={styles.footer}>The history is local to your browser and is not shared with others.</div>\n </div>\n </div>\n );\n}\n","import React, { PureComponent } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Themeable, withTheme, TabbedContainer, TabConfig } from '@grafana/ui';\nimport { RICH_HISTORY_SETTING_KEYS } from 'app/core/history/richHistoryLocalStorageUtils';\nimport store from 'app/core/store';\nimport { SortOrder } from 'app/core/utils/richHistory';\nimport { RichHistoryQuery, ExploreId } from 'app/types/explore';\n\nimport { RichHistoryQueriesTab } from './RichHistoryQueriesTab';\nimport { RichHistorySettings } from './RichHistorySettings';\nimport { RichHistoryStarredTab } from './RichHistoryStarredTab';\n\nexport enum Tabs {\n RichHistory = 'Query history',\n Starred = 'Starred',\n Settings = 'Settings',\n}\n\nexport const sortOrderOptions = [\n { label: 'Newest first', value: SortOrder.Descending },\n { label: 'Oldest first', value: SortOrder.Ascending },\n { label: 'Data source A-Z', value: SortOrder.DatasourceAZ },\n { label: 'Data source Z-A', value: SortOrder.DatasourceZA },\n];\n\nexport interface RichHistoryProps extends Themeable {\n richHistory: RichHistoryQuery[];\n activeDatasourceInstance?: string;\n firstTab: Tabs;\n exploreId: ExploreId;\n height: number;\n deleteRichHistory: () => void;\n onClose: () => void;\n}\n\ninterface RichHistoryState {\n sortOrder: SortOrder;\n retentionPeriod: number;\n starredTabAsFirstTab: boolean;\n activeDatasourceOnly: boolean;\n datasourceFilters: SelectableValue[];\n}\n\nclass UnThemedRichHistory extends PureComponent<RichHistoryProps, RichHistoryState> {\n constructor(props: RichHistoryProps) {\n super(props);\n this.state = {\n sortOrder: SortOrder.Descending,\n datasourceFilters: store.getObject(RICH_HISTORY_SETTING_KEYS.datasourceFilters, []),\n retentionPeriod: store.getObject(RICH_HISTORY_SETTING_KEYS.retentionPeriod, 7),\n starredTabAsFirstTab: store.getBool(RICH_HISTORY_SETTING_KEYS.starredTabAsFirstTab, false),\n activeDatasourceOnly: store.getBool(RICH_HISTORY_SETTING_KEYS.activeDatasourceOnly, true),\n };\n }\n\n onChangeRetentionPeriod = (retentionPeriod: SelectableValue<number>) => {\n if (retentionPeriod.value !== undefined) {\n this.setState({\n retentionPeriod: retentionPeriod.value,\n });\n store.set(RICH_HISTORY_SETTING_KEYS.retentionPeriod, retentionPeriod.value);\n }\n };\n\n toggleStarredTabAsFirstTab = () => {\n const starredTabAsFirstTab = !this.state.starredTabAsFirstTab;\n this.setState({\n starredTabAsFirstTab,\n });\n store.set(RICH_HISTORY_SETTING_KEYS.starredTabAsFirstTab, starredTabAsFirstTab);\n };\n\n toggleActiveDatasourceOnly = () => {\n const activeDatasourceOnly = !this.state.activeDatasourceOnly;\n this.setState({\n activeDatasourceOnly,\n });\n store.set(RICH_HISTORY_SETTING_KEYS.activeDatasourceOnly, activeDatasourceOnly);\n };\n\n onSelectDatasourceFilters = (value: SelectableValue[]) => {\n try {\n store.setObject(RICH_HISTORY_SETTING_KEYS.datasourceFilters, value);\n } catch (error) {\n console.error(error);\n }\n /* Set data source filters to state even though they were not successfully saved in\n * localStorage to allow interaction and filtering.\n **/\n this.setState({ datasourceFilters: value });\n };\n\n onChangeSortOrder = (sortOrder: SortOrder) => this.setState({ sortOrder });\n\n /* If user selects activeDatasourceOnly === true, set datasource filter to currently active datasource.\n * Filtering based on datasource won't be available. Otherwise set to null, as filtering will be\n * available for user.\n */\n updateFilters() {\n this.state.activeDatasourceOnly && this.props.activeDatasourceInstance\n ? this.onSelectDatasourceFilters([\n { label: this.props.activeDatasourceInstance, value: this.props.activeDatasourceInstance },\n ])\n : this.onSelectDatasourceFilters(this.state.datasourceFilters);\n }\n\n componentDidMount() {\n this.updateFilters();\n }\n\n componentDidUpdate(prevProps: RichHistoryProps, prevState: RichHistoryState) {\n if (\n this.props.activeDatasourceInstance !== prevProps.activeDatasourceInstance ||\n this.state.activeDatasourceOnly !== prevState.activeDatasourceOnly\n ) {\n this.updateFilters();\n }\n }\n\n render() {\n const { datasourceFilters, sortOrder, activeDatasourceOnly, retentionPeriod } = this.state;\n const { richHistory, height, exploreId, deleteRichHistory, onClose, firstTab } = this.props;\n\n const QueriesTab: TabConfig = {\n label: 'Query history',\n value: Tabs.RichHistory,\n content: (\n <RichHistoryQueriesTab\n queries={richHistory}\n sortOrder={sortOrder}\n datasourceFilters={datasourceFilters}\n activeDatasourceOnly={activeDatasourceOnly}\n retentionPeriod={retentionPeriod}\n onChangeSortOrder={this.onChangeSortOrder}\n onSelectDatasourceFilters={this.onSelectDatasourceFilters}\n exploreId={exploreId}\n height={height}\n />\n ),\n icon: 'history',\n };\n\n const StarredTab: TabConfig = {\n label: 'Starred',\n value: Tabs.Starred,\n content: (\n <RichHistoryStarredTab\n queries={richHistory}\n sortOrder={sortOrder}\n datasourceFilters={datasourceFilters}\n activeDatasourceOnly={activeDatasourceOnly}\n onChangeSortOrder={this.onChangeSortOrder}\n onSelectDatasourceFilters={this.onSelectDatasourceFilters}\n exploreId={exploreId}\n />\n ),\n icon: 'star',\n };\n\n const SettingsTab: TabConfig = {\n label: 'Settings',\n value: Tabs.Settings,\n content: (\n <RichHistorySettings\n retentionPeriod={this.state.retentionPeriod}\n starredTabAsFirstTab={this.state.starredTabAsFirstTab}\n activeDatasourceOnly={this.state.activeDatasourceOnly}\n onChangeRetentionPeriod={this.onChangeRetentionPeriod}\n toggleStarredTabAsFirstTab={this.toggleStarredTabAsFirstTab}\n toggleactiveDatasourceOnly={this.toggleActiveDatasourceOnly}\n deleteRichHistory={deleteRichHistory}\n />\n ),\n icon: 'sliders-v-alt',\n };\n\n let tabs = [QueriesTab, StarredTab, SettingsTab];\n return (\n <TabbedContainer tabs={tabs} onClose={onClose} defaultTab={firstTab} closeIconTooltip=\"Close query history\" />\n );\n }\n}\n\nexport const RichHistory = withTheme(UnThemedRichHistory);\n","import React, { useEffect, useState } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport { RICH_HISTORY_SETTING_KEYS } from 'app/core/history/richHistoryLocalStorageUtils';\nimport store from 'app/core/store';\nimport { ExploreItemState, StoreState } from 'app/types';\nimport { ExploreId } from 'app/types/explore';\n\nimport { ExploreDrawer } from '../ExploreDrawer';\nimport { deleteRichHistory, loadRichHistory } from '../state/history';\n\nimport { RichHistory, Tabs } from './RichHistory';\n\nfunction mapStateToProps(state: StoreState, { exploreId }: { exploreId: ExploreId }) {\n const explore = state.explore;\n // @ts-ignore\n const item: ExploreItemState = explore[exploreId];\n const { datasourceInstance } = item;\n const firstTab = store.getBool(RICH_HISTORY_SETTING_KEYS.starredTabAsFirstTab, false)\n ? Tabs.Starred\n : Tabs.RichHistory;\n const { richHistory } = item;\n return {\n richHistory,\n firstTab,\n activeDatasourceInstance: datasourceInstance?.name,\n };\n}\n\nconst mapDispatchToProps = {\n loadRichHistory,\n deleteRichHistory,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface OwnProps {\n width: number;\n exploreId: ExploreId;\n onClose: () => void;\n}\nexport type Props = ConnectedProps<typeof connector> & OwnProps;\n\nexport function RichHistoryContainer(props: Props) {\n const [height, setHeight] = useState(400);\n\n const {\n richHistory,\n width,\n firstTab,\n activeDatasourceInstance,\n exploreId,\n deleteRichHistory,\n loadRichHistory,\n onClose,\n } = props;\n\n useEffect(() => {\n loadRichHistory(exploreId);\n }, [loadRichHistory, exploreId]);\n\n return (\n <ExploreDrawer\n width={width}\n onResize={(_e, _dir, ref) => {\n setHeight(Number(ref.style.height.slice(0, -2)));\n }}\n >\n <RichHistory\n richHistory={richHistory}\n firstTab={firstTab}\n activeDatasourceInstance={activeDatasourceInstance}\n exploreId={exploreId}\n deleteRichHistory={deleteRichHistory}\n onClose={onClose}\n height={height}\n />\n </ExploreDrawer>\n );\n}\n\nexport default connector(RichHistoryContainer);\n","import { css, cx } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Button, HorizontalGroup, useTheme2 } from '@grafana/ui';\n\ntype Props = {\n addQueryRowButtonDisabled?: boolean;\n addQueryRowButtonHidden?: boolean;\n richHistoryButtonActive?: boolean;\n queryInspectorButtonActive?: boolean;\n\n onClickAddQueryRowButton: () => void;\n onClickRichHistoryButton: () => void;\n onClickQueryInspectorButton: () => void;\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n containerMargin: css`\n margin-top: ${theme.spacing(2)};\n `,\n };\n};\nexport function SecondaryActions(props: Props) {\n const theme = useTheme2();\n const styles = getStyles(theme);\n return (\n <div className={styles.containerMargin}>\n <HorizontalGroup>\n {!props.addQueryRowButtonHidden && (\n <Button\n variant=\"secondary\"\n aria-label=\"Add row button\"\n onClick={props.onClickAddQueryRowButton}\n disabled={props.addQueryRowButtonDisabled}\n icon=\"plus\"\n >\n Add query\n </Button>\n )}\n <Button\n variant=\"secondary\"\n aria-label=\"Rich history button\"\n className={cx({ ['explore-active-button']: props.richHistoryButtonActive })}\n onClick={props.onClickRichHistoryButton}\n icon=\"history\"\n >\n Query history\n </Button>\n <Button\n variant=\"secondary\"\n aria-label=\"Query inspector button\"\n className={cx({ ['explore-active-button']: props.queryInspectorButtonActive })}\n onClick={props.onClickQueryInspectorButton}\n icon=\"info-circle\"\n >\n Inspector\n </Button>\n </HorizontalGroup>\n </div>\n );\n}\n","import React, { PureComponent } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport { ValueLinkConfig, applyFieldOverrides, TimeZone } from '@grafana/data';\nimport { Collapse, Table } from '@grafana/ui';\nimport { FilterItem } from '@grafana/ui/src/components/Table/types';\nimport { config } from 'app/core/config';\nimport { PANEL_BORDER } from 'app/core/constants';\nimport { StoreState } from 'app/types';\nimport { ExploreId, ExploreItemState } from 'app/types/explore';\n\nimport { MetaInfoText } from './MetaInfoText';\nimport { splitOpen } from './state/main';\nimport { getFieldLinksForExplore } from './utils/links';\n\ninterface TableContainerProps {\n ariaLabel?: string;\n exploreId: ExploreId;\n width: number;\n timeZone: TimeZone;\n onCellFilterAdded?: (filter: FilterItem) => void;\n}\n\nfunction mapStateToProps(state: StoreState, { exploreId }: TableContainerProps) {\n const explore = state.explore;\n // @ts-ignore\n const item: ExploreItemState = explore[exploreId];\n const { loading: loadingInState, tableResult, range } = item;\n const loading = tableResult && tableResult.length > 0 ? false : loadingInState;\n return { loading, tableResult, range };\n}\n\nconst mapDispatchToProps = {\n splitOpen,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype Props = TableContainerProps & ConnectedProps<typeof connector>;\n\nexport class TableContainer extends PureComponent<Props> {\n getTableHeight() {\n const { tableResult } = this.props;\n\n if (!tableResult || tableResult.length === 0) {\n return 200;\n }\n\n // tries to estimate table height\n return Math.max(Math.min(600, tableResult.length * 35) + 35);\n }\n\n render() {\n const { loading, onCellFilterAdded, tableResult, width, splitOpen, range, ariaLabel, timeZone } = this.props;\n const height = this.getTableHeight();\n const tableWidth = width - config.theme.panelPadding * 2 - PANEL_BORDER;\n\n let dataFrame = tableResult;\n\n if (dataFrame?.length) {\n dataFrame = applyFieldOverrides({\n data: [dataFrame],\n timeZone,\n theme: config.theme2,\n replaceVariables: (v: string) => v,\n fieldConfig: {\n defaults: {},\n overrides: [],\n },\n })[0];\n // Bit of code smell here. We need to add links here to the frame modifying the frame on every render.\n // Should work fine in essence but still not the ideal way to pass props. In logs container we do this\n // differently and sidestep this getLinks API on a dataframe\n for (const field of dataFrame.fields) {\n field.getLinks = (config: ValueLinkConfig) => {\n return getFieldLinksForExplore({\n field,\n rowIndex: config.valueRowIndex!,\n splitOpenFn: splitOpen,\n range,\n dataFrame: dataFrame!,\n });\n };\n }\n }\n\n return (\n <Collapse label=\"Table\" loading={loading} isOpen>\n {dataFrame?.length ? (\n <Table\n ariaLabel={ariaLabel}\n data={dataFrame}\n width={tableWidth}\n height={height}\n onCellFilterAdded={onCellFilterAdded}\n />\n ) : (\n <MetaInfoText metaItems={[{ value: '0 series returned' }]} />\n )}\n </Collapse>\n );\n }\n}\n\nexport default connector(TableContainer);\n","// Copyright (c) 2019 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\n\nimport { IconButton, Input } from '@grafana/ui';\n\nimport { TNil } from '../types/index';\n\ntype Props = {\n allowClear?: boolean;\n inputProps: Record<string, any>;\n location: Location;\n match: any;\n trackFindFunction?: (str: string | TNil) => void;\n value: string | undefined;\n onChange: (value: string) => void;\n};\n\nexport default class UiFindInput extends React.PureComponent<Props> {\n static defaultProps: Partial<Props> = {\n inputProps: {},\n trackFindFunction: undefined,\n value: undefined,\n };\n\n clearUiFind = () => {\n this.props.onChange('');\n };\n\n render() {\n const { allowClear, inputProps, value } = this.props;\n\n const suffix = (\n <>\n {inputProps.suffix}\n {allowClear && value && value.length && <IconButton name=\"times\" onClick={this.clearUiFind} />}\n </>\n );\n\n return (\n <Input\n placeholder=\"Find...\"\n {...inputProps}\n onChange={(e) => this.props.onChange(e.currentTarget.value)}\n suffix={suffix}\n value={value}\n />\n );\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport const IN_TRACE_SEARCH = 'in-trace-search';\n","// Copyright (c) 2018 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\nimport * as React from 'react';\nimport { memo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Button, useStyles2 } from '@grafana/ui';\n\nimport UiFindInput from '../common/UiFindInput';\nimport { ubFlexAuto, ubJustifyEnd } from '../uberUtilityStyles';\n\nimport * as markers from './TracePageSearchBar.markers';\n// eslint-disable-next-line no-duplicate-imports\n\nexport const getStyles = (theme: GrafanaTheme2) => {\n return {\n TracePageSearchBar: css`\n label: TracePageSearchBar;\n float: right;\n position: sticky;\n top: 8px;\n right: 0;\n z-index: ${theme.zIndex.navbarFixed};\n background: ${theme.colors.background.primary};\n margin-top: 8px;\n margin-bottom: -48px;\n padding: 8px;\n margin-right: 2px;\n border-radius: 4px;\n box-shadow: ${theme.shadows.z2};\n `,\n TracePageSearchBarBar: css`\n label: TracePageSearchBarBar;\n max-width: 20rem;\n transition: max-width 0.5s;\n &:focus-within {\n max-width: 100%;\n }\n `,\n TracePageSearchBarSuffix: css`\n label: TracePageSearchBarSuffix;\n opacity: 0.6;\n `,\n TracePageSearchBarBtn: css`\n label: TracePageSearchBarBtn;\n transition: 0.2s;\n margin-left: 8px;\n `,\n TracePageSearchBarBtnDisabled: css`\n label: TracePageSearchBarBtnDisabled;\n opacity: 0.5;\n `,\n TracePageSearchBarLocateBtn: css`\n label: TracePageSearchBarLocateBtn;\n padding: 1px 8px 4px;\n `,\n };\n};\n\ntype TracePageSearchBarProps = {\n prevResult: () => void;\n nextResult: () => void;\n navigable: boolean;\n searchValue: string;\n onSearchValueChange: (value: string) => void;\n searchBarSuffix: string;\n};\n\nexport default memo(function TracePageSearchBar(props: TracePageSearchBarProps) {\n const { navigable, nextResult, prevResult, onSearchValueChange, searchValue, searchBarSuffix } = props;\n const styles = useStyles2(getStyles);\n\n const suffix = searchValue ? (\n <span className={styles.TracePageSearchBarSuffix} data-testid=\"trace-page-search-bar-suffix\">\n {searchBarSuffix}\n </span>\n ) : null;\n\n const btnClass = cx(styles.TracePageSearchBarBtn, { [styles.TracePageSearchBarBtnDisabled]: !searchValue });\n const uiFindInputInputProps = {\n 'data-test': markers.IN_TRACE_SEARCH,\n className: cx(styles.TracePageSearchBarBar, ubFlexAuto),\n name: 'search',\n suffix,\n };\n\n return (\n <div className={styles.TracePageSearchBar}>\n <span className={ubJustifyEnd} style={{ display: 'flex' }}>\n <UiFindInput\n onChange={onSearchValueChange}\n value={searchValue}\n inputProps={uiFindInputInputProps}\n allowClear={true}\n />\n <>\n {navigable && (\n <>\n <Button\n className={btnClass}\n variant=\"secondary\"\n disabled={!searchValue}\n type=\"button\"\n icon=\"arrow-down\"\n data-testid=\"trace-page-search-bar-next-result-button\"\n onClick={nextResult}\n />\n <Button\n className={btnClass}\n variant=\"secondary\"\n disabled={!searchValue}\n type=\"button\"\n icon=\"arrow-up\"\n data-testid=\"trace-page-search-bar-prev-result-button\"\n onClick={prevResult}\n />\n </>\n )}\n </>\n </span>\n </div>\n );\n});\n","import React from 'react';\n\nimport {\n DataFrame,\n DataLink,\n DataQuery,\n DataSourceInstanceSettings,\n dateTime,\n Field,\n KeyValue,\n LinkModel,\n mapInternalLinkToExplore,\n rangeUtil,\n SplitOpen,\n TimeRange,\n} from '@grafana/data';\nimport { getTemplateSrv } from '@grafana/runtime';\nimport { Icon } from '@grafana/ui';\nimport { SpanLinkDef, SpanLinkFunc, TraceSpan } from '@jaegertracing/jaeger-ui-components';\nimport { TraceToLogsOptions } from 'app/core/components/TraceToLogs/TraceToLogsSettings';\nimport { getDatasourceSrv } from 'app/features/plugins/datasource_srv';\n\nimport { LokiQuery } from '../../../plugins/datasource/loki/types';\nimport { getFieldLinksForExplore } from '../utils/links';\n\n/**\n * This is a factory for the link creator. It returns the function mainly so it can return undefined in which case\n * the trace view won't create any links and to capture the datasource and split function making it easier to memoize\n * with useMemo.\n */\nexport function createSpanLinkFactory({\n splitOpenFn,\n traceToLogsOptions,\n dataFrame,\n}: {\n splitOpenFn: SplitOpen;\n traceToLogsOptions?: TraceToLogsOptions;\n dataFrame?: DataFrame;\n}): SpanLinkFunc | undefined {\n if (!dataFrame || dataFrame.fields.length === 1 || !dataFrame.fields.some((f) => Boolean(f.config.links?.length))) {\n // if the dataframe contains just a single blob of data (legacy format) or does not have any links configured,\n // let's try to use the old legacy path.\n return legacyCreateSpanLinkFactory(splitOpenFn, traceToLogsOptions);\n } else {\n return function SpanLink(span: TraceSpan): SpanLinkDef | undefined {\n // We should be here only if there are some links in the dataframe\n const field = dataFrame.fields.find((f) => Boolean(f.config.links?.length))!;\n try {\n const links = getFieldLinksForExplore({\n field,\n rowIndex: span.dataFrameRowIndex!,\n splitOpenFn,\n range: getTimeRangeFromSpan(span),\n dataFrame,\n });\n\n return {\n href: links[0].href,\n onClick: links[0].onClick,\n content: <Icon name=\"gf-logs\" title=\"Explore the logs for this in split view\" />,\n };\n } catch (error) {\n // It's fairly easy to crash here for example if data source defines wrong interpolation in the data link\n console.error(error);\n return undefined;\n }\n };\n }\n}\n\nfunction legacyCreateSpanLinkFactory(splitOpenFn: SplitOpen, traceToLogsOptions?: TraceToLogsOptions) {\n // We should return if dataSourceUid is undefined otherwise getInstanceSettings would return testDataSource.\n if (!traceToLogsOptions?.datasourceUid) {\n return undefined;\n }\n\n const dataSourceSettings = getDatasourceSrv().getInstanceSettings(traceToLogsOptions.datasourceUid);\n const isSplunkDS = dataSourceSettings?.type === 'grafana-splunk-datasource';\n\n if (!dataSourceSettings) {\n return undefined;\n }\n\n return function SpanLink(span: TraceSpan): SpanLinkDef | undefined {\n // This is reusing existing code from derived fields which may not be ideal match so some data is a bit faked at\n // the moment. Issue is that the trace itself isn't clearly mapped to dataFrame (right now it's just a json blob\n // inside a single field) so the dataLinks as config of that dataFrame abstraction breaks down a bit and we do\n // it manually here instead of leaving it for the data source to supply the config.\n let dataLink: DataLink<LokiQuery | DataQuery> | undefined = {} as DataLink<LokiQuery | DataQuery> | undefined;\n let link: LinkModel<Field>;\n\n switch (dataSourceSettings?.type) {\n case 'loki':\n dataLink = getLinkForLoki(span, traceToLogsOptions, dataSourceSettings);\n if (!dataLink) {\n return undefined;\n }\n break;\n case 'grafana-splunk-datasource':\n dataLink = getLinkForSplunk(span, traceToLogsOptions, dataSourceSettings);\n break;\n default:\n return undefined;\n }\n\n link = mapInternalLinkToExplore({\n link: dataLink,\n internalLink: dataLink?.internal!,\n scopedVars: {},\n range: getTimeRangeFromSpan(\n span,\n {\n startMs: traceToLogsOptions.spanStartTimeShift\n ? rangeUtil.intervalToMs(traceToLogsOptions.spanStartTimeShift)\n : 0,\n endMs: traceToLogsOptions.spanEndTimeShift ? rangeUtil.intervalToMs(traceToLogsOptions.spanEndTimeShift) : 0,\n },\n isSplunkDS\n ),\n field: {} as Field,\n onClickFn: splitOpenFn,\n replaceVariables: getTemplateSrv().replace.bind(getTemplateSrv()),\n });\n\n return {\n href: link.href,\n onClick: link.onClick,\n content: <Icon name=\"gf-logs\" title=\"Explore the logs for this in split view\" />,\n };\n };\n}\n\n/**\n * Default keys to use when there are no configured tags.\n */\nconst defaultKeys = ['cluster', 'hostname', 'namespace', 'pod'];\nfunction getLinkForLoki(span: TraceSpan, options: TraceToLogsOptions, dataSourceSettings: DataSourceInstanceSettings) {\n const { tags: keys, filterByTraceID, filterBySpanID, mapTagNamesEnabled, mappedTags } = options;\n\n // In order, try to use mapped tags -> tags -> default tags\n const keysToCheck = mapTagNamesEnabled && mappedTags?.length ? mappedTags : keys?.length ? keys : defaultKeys;\n // Build tag portion of query\n const tags = [...span.process.tags, ...span.tags].reduce((acc, tag) => {\n if (mapTagNamesEnabled) {\n const keyValue = (keysToCheck as KeyValue[]).find((keyValue: KeyValue) => keyValue.key === tag.key);\n if (keyValue) {\n acc.push(`${keyValue.value ? keyValue.value : keyValue.key}=\"${tag.value}\"`);\n }\n } else {\n if ((keysToCheck as string[]).includes(tag.key)) {\n acc.push(`${tag.key}=\"${tag.value}\"`);\n }\n }\n return acc;\n }, [] as string[]);\n\n // If no tags found, return undefined to prevent an invalid Loki query\n if (!tags.length) {\n return undefined;\n }\n let expr = `{${tags.join(', ')}}`;\n if (filterByTraceID && span.traceID) {\n expr += ` |=\"${span.traceID}\"`;\n }\n if (filterBySpanID && span.spanID) {\n expr += ` |=\"${span.spanID}\"`;\n }\n\n const dataLink: DataLink<LokiQuery> = {\n title: dataSourceSettings.name,\n url: '',\n internal: {\n datasourceUid: dataSourceSettings.uid,\n datasourceName: dataSourceSettings.name,\n query: {\n expr: expr,\n refId: '',\n },\n },\n };\n\n return dataLink;\n}\n\nfunction getLinkForSplunk(\n span: TraceSpan,\n options: TraceToLogsOptions,\n dataSourceSettings: DataSourceInstanceSettings\n) {\n const { tags: keys, filterByTraceID, filterBySpanID, mapTagNamesEnabled, mappedTags } = options;\n\n // In order, try to use mapped tags -> tags -> default tags\n const keysToCheck = mapTagNamesEnabled && mappedTags?.length ? mappedTags : keys?.length ? keys : defaultKeys;\n // Build tag portion of query\n const tags = [...span.process.tags, ...span.tags].reduce((acc, tag) => {\n if (mapTagNamesEnabled) {\n const keyValue = (keysToCheck as KeyValue[]).find((keyValue: KeyValue) => keyValue.key === tag.key);\n if (keyValue) {\n acc.push(`${keyValue.value ? keyValue.value : keyValue.key}=\"${tag.value}\"`);\n }\n } else {\n if ((keysToCheck as string[]).includes(tag.key)) {\n acc.push(`${tag.key}=\"${tag.value}\"`);\n }\n }\n return acc;\n }, [] as string[]);\n\n let query = '';\n if (tags.length > 0) {\n query += `${tags.join(' ')}`;\n }\n if (filterByTraceID && span.traceID) {\n query += ` \"${span.traceID}\"`;\n }\n if (filterBySpanID && span.spanID) {\n query += ` \"${span.spanID}\"`;\n }\n\n const dataLink: DataLink<DataQuery> = {\n title: dataSourceSettings.name,\n url: '',\n internal: {\n datasourceUid: dataSourceSettings.uid,\n datasourceName: dataSourceSettings.name,\n query: {\n query: query,\n refId: '',\n },\n },\n } as DataLink<DataQuery>;\n\n return dataLink;\n}\n\n/**\n * Gets a time range from the span.\n */\nfunction getTimeRangeFromSpan(\n span: TraceSpan,\n timeShift: { startMs: number; endMs: number } = { startMs: 0, endMs: 0 },\n isSplunkDS = false\n): TimeRange {\n const adjustedStartTime = Math.floor(span.startTime / 1000 + timeShift.startMs);\n const from = dateTime(adjustedStartTime);\n const spanEndMs = (span.startTime + span.duration) / 1000;\n let adjustedEndTime = Math.floor(spanEndMs + timeShift.endMs);\n\n // Splunk requires a time interval of >= 1s, rather than >=1ms like Loki timerange in below elseif block\n if (isSplunkDS && adjustedEndTime - adjustedStartTime < 1000) {\n adjustedEndTime = adjustedStartTime + 1000;\n } else if (adjustedStartTime === adjustedEndTime) {\n // Because we can only pass milliseconds in the url we need to check if they equal.\n // We need end time to be later than start time\n adjustedEndTime++;\n }\n\n const to = dateTime(adjustedEndTime);\n\n // Beware that public/app/features/explore/state/main.ts SplitOpen fn uses the range from here. No matter what is in the url.\n return {\n from,\n to,\n raw: {\n from,\n to,\n },\n };\n}\n","import { TraceLog, TraceSpanReference } from '@jaegertracing/jaeger-ui-components/src/types/trace';\nimport { useCallback, useState, useEffect } from 'react';\n\nimport { DataFrame } from '@grafana/data';\nimport { DetailState } from '@jaegertracing/jaeger-ui-components';\n\n/**\n * Keeps state of the span detail. This means whether span details are open but also state of each detail subitem\n * like logs or tags.\n */\nexport function useDetailState(frame: DataFrame) {\n const [detailStates, setDetailStates] = useState(new Map<string, DetailState>());\n\n // Clear detail state when new trace arrives\n useEffect(() => {\n setDetailStates(new Map<string, DetailState>());\n }, [frame, setDetailStates]);\n\n const toggleDetail = useCallback(\n function toggleDetail(spanID: string) {\n const newDetailStates = new Map(detailStates);\n if (newDetailStates.has(spanID)) {\n newDetailStates.delete(spanID);\n } else {\n newDetailStates.set(spanID, new DetailState());\n }\n setDetailStates(newDetailStates);\n },\n [detailStates]\n );\n\n const detailLogItemToggle = useCallback(\n function detailLogItemToggle(spanID: string, log: TraceLog) {\n const old = detailStates.get(spanID);\n if (!old) {\n return;\n }\n const detailState = old.toggleLogItem(log);\n const newDetailStates = new Map(detailStates);\n newDetailStates.set(spanID, detailState);\n return setDetailStates(newDetailStates);\n },\n [detailStates]\n );\n\n const detailReferenceItemToggle = useCallback(\n function detailReferenceItemToggle(spanID: string, reference: TraceSpanReference) {\n const old = detailStates.get(spanID);\n if (!old) {\n return;\n }\n const detailState = old.toggleReferenceItem(reference);\n const newDetailStates = new Map(detailStates);\n newDetailStates.set(spanID, detailState);\n return setDetailStates(newDetailStates);\n },\n [detailStates]\n );\n\n return {\n detailStates,\n toggleDetail,\n detailLogItemToggle,\n detailLogsToggle: useCallback(\n (spanID: string) => makeDetailSubsectionToggle('logs', detailStates, setDetailStates)(spanID),\n [detailStates]\n ),\n detailWarningsToggle: useCallback(\n (spanID: string) => makeDetailSubsectionToggle('warnings', detailStates, setDetailStates)(spanID),\n [detailStates]\n ),\n detailStackTracesToggle: useCallback(\n (spanID: string) => makeDetailSubsectionToggle('stackTraces', detailStates, setDetailStates)(spanID),\n [detailStates]\n ),\n detailReferenceItemToggle,\n detailReferencesToggle: useCallback(\n (spanID: string) => makeDetailSubsectionToggle('references', detailStates, setDetailStates)(spanID),\n [detailStates]\n ),\n detailProcessToggle: useCallback(\n (spanID: string) => makeDetailSubsectionToggle('process', detailStates, setDetailStates)(spanID),\n [detailStates]\n ),\n detailTagsToggle: useCallback(\n (spanID: string) => makeDetailSubsectionToggle('tags', detailStates, setDetailStates)(spanID),\n [detailStates]\n ),\n };\n}\n\nfunction makeDetailSubsectionToggle(\n subSection: 'tags' | 'process' | 'logs' | 'warnings' | 'references' | 'stackTraces',\n detailStates: Map<string, DetailState>,\n setDetailStates: (detailStates: Map<string, DetailState>) => void\n) {\n return (spanID: string) => {\n const old = detailStates.get(spanID);\n if (!old) {\n return;\n }\n let detailState;\n if (subSection === 'tags') {\n detailState = old.toggleTags();\n } else if (subSection === 'process') {\n detailState = old.toggleProcess();\n } else if (subSection === 'warnings') {\n detailState = old.toggleWarnings();\n } else if (subSection === 'references') {\n detailState = old.toggleReferences();\n } else if (subSection === 'stackTraces') {\n detailState = old.toggleStackTraces();\n } else {\n detailState = old.toggleLogs();\n }\n const newDetailStates = new Map(detailStates);\n newDetailStates.set(spanID, detailState);\n setDetailStates(newDetailStates);\n };\n}\n","import React, { RefObject, useCallback, useEffect, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport {\n DataFrame,\n DataLink,\n DataSourceApi,\n Field,\n LinkModel,\n LoadingState,\n mapInternalLinkToExplore,\n PanelData,\n SplitOpen,\n} from '@grafana/data';\nimport { getTemplateSrv } from '@grafana/runtime';\nimport {\n Trace,\n TracePageHeader,\n TraceSpan,\n TraceTimelineViewer,\n TTraceTimeline,\n} from '@jaegertracing/jaeger-ui-components';\nimport { TraceToLogsData } from 'app/core/components/TraceToLogs/TraceToLogsSettings';\nimport { getDatasourceSrv } from 'app/features/plugins/datasource_srv';\nimport { getTimeZone } from 'app/features/profile/state/selectors';\nimport { StoreState } from 'app/types';\nimport { ExploreId } from 'app/types/explore';\n\nimport { changePanelState } from '../state/explorePane';\n\nimport { createSpanLinkFactory } from './createSpanLink';\nimport { useDetailState } from './useDetailState';\nimport { useHoverIndentGuide } from './useHoverIndentGuide';\nimport { useViewRange } from './useViewRange';\n\nfunction noop(): {} {\n return {};\n}\n\ntype Props = {\n dataFrames: DataFrame[];\n splitOpenFn: SplitOpen;\n exploreId: ExploreId;\n scrollElement?: Element;\n topOfExploreViewRef?: RefObject<HTMLDivElement>;\n traceProp: Trace;\n spanFindMatches?: Set<string>;\n search: string;\n focusedSpanIdForSearch: string;\n expandOne: (spans: TraceSpan[]) => void;\n expandAll: () => void;\n collapseOne: (spans: TraceSpan[]) => void;\n collapseAll: (spans: TraceSpan[]) => void;\n childrenToggle: (spanId: string) => void;\n childrenHiddenIDs: Set<string>;\n queryResponse: PanelData;\n};\n\nexport function TraceView(props: Props) {\n const {\n expandOne,\n expandAll,\n collapseOne,\n collapseAll,\n childrenToggle,\n childrenHiddenIDs,\n spanFindMatches,\n traceProp,\n } = props;\n\n const {\n detailStates,\n toggleDetail,\n detailLogItemToggle,\n detailLogsToggle,\n detailProcessToggle,\n detailReferencesToggle,\n detailReferenceItemToggle,\n detailTagsToggle,\n detailWarningsToggle,\n detailStackTracesToggle,\n } = useDetailState(props.dataFrames[0]);\n\n const { removeHoverIndentGuideId, addHoverIndentGuideId, hoverIndentGuideIds } = useHoverIndentGuide();\n const { viewRange, updateViewRangeTime, updateNextViewRangeTime } = useViewRange();\n\n /**\n * Keeps state of resizable name column width\n */\n const [spanNameColumnWidth, setSpanNameColumnWidth] = useState(0.25);\n /**\n * State of the top minimap, slim means it is collapsed.\n */\n const [slim, setSlim] = useState(false);\n\n const datasource = useSelector(\n (state: StoreState) => state.explore[props.exploreId]?.datasourceInstance ?? undefined\n );\n\n const [focusedSpanId, createFocusSpanLink] = useFocusSpanLink({\n refId: props.dataFrames[0]?.refId,\n exploreId: props.exploreId,\n datasource,\n });\n\n const createLinkToExternalSpan = (traceId: string, spanId: string) => {\n const link = createFocusSpanLink(traceId, spanId);\n return link.href;\n };\n\n const traceTimeline: TTraceTimeline = useMemo(\n () => ({\n childrenHiddenIDs,\n detailStates,\n hoverIndentGuideIds,\n shouldScrollToFirstUiFindMatch: false,\n spanNameColumnWidth,\n traceID: props.traceProp?.traceID,\n }),\n [childrenHiddenIDs, detailStates, hoverIndentGuideIds, spanNameColumnWidth, props.traceProp?.traceID]\n );\n\n useEffect(() => {\n if (props.queryResponse.state === LoadingState.Done) {\n props.topOfExploreViewRef?.current?.scrollIntoView();\n }\n }, [props.queryResponse, props.topOfExploreViewRef]);\n\n const traceToLogsOptions = (getDatasourceSrv().getInstanceSettings(datasource?.name)?.jsonData as TraceToLogsData)\n ?.tracesToLogs;\n const createSpanLink = useMemo(\n () => createSpanLinkFactory({ splitOpenFn: props.splitOpenFn, traceToLogsOptions, dataFrame: props.dataFrames[0] }),\n [props.splitOpenFn, traceToLogsOptions, props.dataFrames]\n );\n const onSlimViewClicked = useCallback(() => setSlim(!slim), [slim]);\n const timeZone = useSelector((state: StoreState) => getTimeZone(state.user));\n\n if (!props.dataFrames?.length || !traceProp) {\n return null;\n }\n\n return (\n <>\n <TracePageHeader\n canCollapse={false}\n hideMap={false}\n hideSummary={false}\n onSlimViewClicked={onSlimViewClicked}\n onTraceGraphViewClicked={noop}\n slimView={slim}\n trace={traceProp}\n updateNextViewRangeTime={updateNextViewRangeTime}\n updateViewRangeTime={updateViewRangeTime}\n viewRange={viewRange}\n timeZone={timeZone}\n />\n <TraceTimelineViewer\n registerAccessors={noop}\n scrollToFirstVisibleSpan={noop}\n findMatchesIDs={spanFindMatches}\n trace={traceProp}\n traceTimeline={traceTimeline}\n updateNextViewRangeTime={updateNextViewRangeTime}\n updateViewRangeTime={updateViewRangeTime}\n viewRange={viewRange}\n focusSpan={noop}\n createLinkToExternalSpan={createLinkToExternalSpan}\n setSpanNameColumnWidth={setSpanNameColumnWidth}\n collapseAll={collapseAll}\n collapseOne={collapseOne}\n expandAll={expandAll}\n expandOne={expandOne}\n childrenToggle={childrenToggle}\n clearShouldScrollToFirstUiFindMatch={noop}\n detailLogItemToggle={detailLogItemToggle}\n detailLogsToggle={detailLogsToggle}\n detailWarningsToggle={detailWarningsToggle}\n detailStackTracesToggle={detailStackTracesToggle}\n detailReferencesToggle={detailReferencesToggle}\n detailReferenceItemToggle={detailReferenceItemToggle}\n detailProcessToggle={detailProcessToggle}\n detailTagsToggle={detailTagsToggle}\n detailToggle={toggleDetail}\n setTrace={noop}\n addHoverIndentGuideId={addHoverIndentGuideId}\n removeHoverIndentGuideId={removeHoverIndentGuideId}\n linksGetter={noop as any}\n uiFind={props.search}\n createSpanLink={createSpanLink}\n scrollElement={props.scrollElement}\n focusedSpanId={focusedSpanId}\n focusedSpanIdForSearch={props.focusedSpanIdForSearch}\n createFocusSpanLink={createFocusSpanLink}\n topOfExploreViewRef={props.topOfExploreViewRef}\n />\n </>\n );\n}\n\n/**\n * Handles focusing a span. Returns the span id to focus to based on what is in current explore state and also a\n * function to change the focused span id.\n * @param options\n */\nfunction useFocusSpanLink(options: {\n exploreId: ExploreId;\n refId?: string;\n datasource?: DataSourceApi;\n}): [string | undefined, (traceId: string, spanId: string) => LinkModel<Field>] {\n const panelState = useSelector((state: StoreState) => state.explore[options.exploreId]?.panelsState.trace);\n const focusedSpanId = panelState?.spanId;\n\n const dispatch = useDispatch();\n const setFocusedSpanId = (spanId?: string) =>\n dispatch(\n changePanelState(options.exploreId, 'trace', {\n ...panelState,\n spanId,\n })\n );\n\n const query = useSelector((state: StoreState) =>\n state.explore[options.exploreId]?.queries.find((query) => query.refId === options.refId)\n );\n\n const createFocusSpanLink = (traceId: string, spanId: string) => {\n const link: DataLink = {\n title: 'Deep link to this span',\n url: '',\n internal: {\n datasourceUid: options.datasource?.uid!,\n datasourceName: options.datasource?.name!,\n query: query,\n panelsState: {\n trace: {\n spanId,\n },\n },\n },\n };\n\n return mapInternalLinkToExplore({\n link,\n internalLink: link.internal!,\n scopedVars: {},\n range: {} as any,\n field: {} as Field,\n onClickFn: () => setFocusedSpanId(focusedSpanId === spanId ? undefined : spanId),\n replaceVariables: getTemplateSrv().replace.bind(getTemplateSrv()),\n });\n };\n\n return [focusedSpanId, createFocusSpanLink];\n}\n","import { useCallback, useState } from 'react';\n\n/**\n * This is used internally to handle hover state of indent guide. As indent guides are separate\n * components per each row/span and you need to highlight all in multiple rows to make the effect of single line\n * they need this kind of common imperative state changes.\n *\n * Ideally would be changed to trace view internal state.\n */\nexport function useHoverIndentGuide() {\n const [hoverIndentGuideIds, setHoverIndentGuideIds] = useState(new Set<string>());\n\n const addHoverIndentGuideId = useCallback(function addHoverIndentGuideId(spanID: string) {\n setHoverIndentGuideIds((prevState) => {\n const newHoverIndentGuideIds = new Set(prevState);\n newHoverIndentGuideIds.add(spanID);\n return newHoverIndentGuideIds;\n });\n }, []);\n\n const removeHoverIndentGuideId = useCallback(function removeHoverIndentGuideId(spanID: string) {\n setHoverIndentGuideIds((prevState) => {\n const newHoverIndentGuideIds = new Set(prevState);\n newHoverIndentGuideIds.delete(spanID);\n return newHoverIndentGuideIds;\n });\n }, []);\n\n return { hoverIndentGuideIds, addHoverIndentGuideId, removeHoverIndentGuideId };\n}\n","import { useCallback, useState } from 'react';\n\nimport { ViewRangeTimeUpdate, ViewRange } from '@jaegertracing/jaeger-ui-components';\n\n/**\n * Controls state of the zoom function that can be used through minimap in header or on the timeline. ViewRange contains\n * state not only for current range that is showing but range that is currently being selected by the user.\n */\nexport function useViewRange() {\n const [viewRange, setViewRange] = useState<ViewRange>({\n time: {\n current: [0, 1],\n },\n });\n\n const updateNextViewRangeTime = useCallback(function updateNextViewRangeTime(update: ViewRangeTimeUpdate) {\n setViewRange((prevRange): ViewRange => {\n const time = { ...prevRange.time, ...update };\n return { ...prevRange, time };\n });\n }, []);\n\n const updateViewRangeTime = useCallback(function updateViewRangeTime(start: number, end: number) {\n const current: [number, number] = [start, end];\n const time = { current };\n setViewRange((prevRange): ViewRange => {\n return { ...prevRange, time };\n });\n }, []);\n\n return { viewRange, updateViewRangeTime, updateNextViewRangeTime };\n}\n","import { useCallback, useState } from 'react';\n\nimport { TraceSpan } from '@jaegertracing/jaeger-ui-components';\n\n/**\n * Children state means whether spans are collapsed or not. Also provides some functions to manipulate that state.\n */\nexport function useChildrenState() {\n const [childrenHiddenIDs, setChildrenHiddenIDs] = useState(new Set<string>());\n\n const expandOne = useCallback(\n function expandOne(spans: TraceSpan[]) {\n if (childrenHiddenIDs.size === 0) {\n return;\n }\n let prevExpandedDepth = -1;\n let expandNextHiddenSpan = true;\n const newChildrenHiddenIDs = spans.reduce((res, s) => {\n if (s.depth <= prevExpandedDepth) {\n expandNextHiddenSpan = true;\n }\n if (expandNextHiddenSpan && res.has(s.spanID)) {\n res.delete(s.spanID);\n expandNextHiddenSpan = false;\n prevExpandedDepth = s.depth;\n }\n return res;\n }, new Set(childrenHiddenIDs));\n setChildrenHiddenIDs(newChildrenHiddenIDs);\n },\n [childrenHiddenIDs]\n );\n\n const collapseOne = useCallback(\n function collapseOne(spans: TraceSpan[]) {\n if (shouldDisableCollapse(spans, childrenHiddenIDs)) {\n return;\n }\n let nearestCollapsedAncestor: TraceSpan | undefined;\n const newChildrenHiddenIDs = spans.reduce((res, curSpan) => {\n if (nearestCollapsedAncestor && curSpan.depth <= nearestCollapsedAncestor.depth) {\n res.add(nearestCollapsedAncestor.spanID);\n if (curSpan.hasChildren) {\n nearestCollapsedAncestor = curSpan;\n }\n } else if (curSpan.hasChildren && !res.has(curSpan.spanID)) {\n nearestCollapsedAncestor = curSpan;\n }\n return res;\n }, new Set(childrenHiddenIDs));\n // The last one\n if (nearestCollapsedAncestor) {\n newChildrenHiddenIDs.add(nearestCollapsedAncestor.spanID);\n }\n setChildrenHiddenIDs(newChildrenHiddenIDs);\n },\n [childrenHiddenIDs]\n );\n\n const expandAll = useCallback(function expandAll() {\n setChildrenHiddenIDs(new Set<string>());\n }, []);\n\n const collapseAll = useCallback(\n function collapseAll(spans: TraceSpan[]) {\n if (shouldDisableCollapse(spans, childrenHiddenIDs)) {\n return;\n }\n const newChildrenHiddenIDs = spans.reduce((res, s) => {\n if (s.hasChildren) {\n res.add(s.spanID);\n }\n return res;\n }, new Set<string>());\n\n setChildrenHiddenIDs(newChildrenHiddenIDs);\n },\n [childrenHiddenIDs]\n );\n\n const childrenToggle = useCallback(\n function childrenToggle(spanID: string) {\n const newChildrenHiddenIDs = new Set(childrenHiddenIDs);\n if (childrenHiddenIDs.has(spanID)) {\n newChildrenHiddenIDs.delete(spanID);\n } else {\n newChildrenHiddenIDs.add(spanID);\n }\n setChildrenHiddenIDs(newChildrenHiddenIDs);\n },\n [childrenHiddenIDs]\n );\n\n return {\n childrenHiddenIDs,\n expandOne,\n collapseOne,\n expandAll,\n collapseAll,\n childrenToggle,\n };\n}\n\nfunction shouldDisableCollapse(allSpans: TraceSpan[], hiddenSpansIds: Set<string>) {\n const allParentSpans = allSpans.filter((s) => s.hasChildren);\n return allParentSpans.length === hiddenSpansIds.size;\n}\n","import { DataFrame, DataFrameView, TraceSpanRow } from '@grafana/data';\nimport { Trace, TraceProcess, TraceResponse, transformTraceData } from '@jaegertracing/jaeger-ui-components';\n\nexport function transformDataFrames(frame?: DataFrame): Trace | null {\n if (!frame) {\n return null;\n }\n let data: TraceResponse =\n frame.fields.length === 1\n ? // For backward compatibility when we sent whole json response in a single field/value\n frame.fields[0].values.get(0)\n : transformTraceDataFrame(frame);\n return transformTraceData(data);\n}\n\nfunction transformTraceDataFrame(frame: DataFrame): TraceResponse {\n const view = new DataFrameView<TraceSpanRow>(frame);\n const processes: Record<string, TraceProcess> = {};\n for (let i = 0; i < view.length; i++) {\n const span = view.get(i);\n if (!processes[span.spanID]) {\n processes[span.spanID] = {\n serviceName: span.serviceName,\n tags: span.serviceTags,\n };\n }\n }\n\n return {\n traceID: view.get(0).traceID,\n processes,\n spans: view.toArray().map((s, index) => {\n const references = [];\n if (s.parentSpanID) {\n references.push({ refType: 'CHILD_OF' as const, spanID: s.parentSpanID, traceID: s.traceID });\n }\n if (s.references) {\n references.push(...s.references.map((reference) => ({ refType: 'FOLLOWS_FROM' as const, ...reference })));\n }\n return {\n ...s,\n duration: s.duration * 1000,\n startTime: s.startTime * 1000,\n processID: s.spanID,\n flags: 0,\n references,\n logs: s.logs?.map((l) => ({ ...l, timestamp: l.timestamp * 1000 })) || [],\n dataFrameRowIndex: index,\n };\n }),\n };\n}\n","import TracePageSearchBar from '@jaegertracing/jaeger-ui-components/src/TracePageHeader/TracePageSearchBar';\nimport React, { RefObject, useMemo, useState } from 'react';\n\nimport { DataFrame, SplitOpen, PanelData } from '@grafana/data';\nimport { Collapse } from '@grafana/ui';\nimport { ExploreId } from 'app/types/explore';\n\nimport { TraceView } from './TraceView';\nimport { useChildrenState } from './useChildrenState';\nimport { useSearch } from './useSearch';\nimport { transformDataFrames } from './utils/transform';\ninterface Props {\n dataFrames: DataFrame[];\n splitOpenFn: SplitOpen;\n exploreId: ExploreId;\n scrollElement?: Element;\n topOfExploreViewRef?: RefObject<HTMLDivElement>;\n queryResponse: PanelData;\n}\nexport function TraceViewContainer(props: Props) {\n // At this point we only show single trace\n const frame = props.dataFrames[0];\n\n const { dataFrames, splitOpenFn, exploreId, scrollElement, topOfExploreViewRef, queryResponse } = props;\n const traceProp = useMemo(() => transformDataFrames(frame), [frame]);\n const { search, setSearch, spanFindMatches } = useSearch(traceProp?.spans);\n const { expandOne, collapseOne, childrenToggle, collapseAll, childrenHiddenIDs, expandAll } = useChildrenState();\n\n const [focusedSpanIdForSearch, setFocusedSpanIdForSearch] = useState('');\n const [searchBarSuffix, setSearchBarSuffix] = useState('');\n\n const setTraceSearch = (value: string) => {\n setFocusedSpanIdForSearch('');\n setSearchBarSuffix('');\n setSearch(value);\n };\n\n const nextResult = () => {\n expandAll();\n const spanMatches = Array.from(spanFindMatches!);\n const prevMatchedIndex = spanMatches.indexOf(focusedSpanIdForSearch)\n ? spanMatches.indexOf(focusedSpanIdForSearch)\n : 0;\n\n // new query || at end, go to start\n if (prevMatchedIndex === -1 || prevMatchedIndex === spanMatches.length - 1) {\n setFocusedSpanIdForSearch(spanMatches[0]);\n setSearchBarSuffix(getSearchBarSuffix(1));\n return;\n }\n\n // get next\n setFocusedSpanIdForSearch(spanMatches[prevMatchedIndex + 1]);\n setSearchBarSuffix(getSearchBarSuffix(prevMatchedIndex + 2));\n };\n\n const prevResult = () => {\n expandAll();\n const spanMatches = Array.from(spanFindMatches!);\n const prevMatchedIndex = spanMatches.indexOf(focusedSpanIdForSearch)\n ? spanMatches.indexOf(focusedSpanIdForSearch)\n : 0;\n\n // new query || at start, go to end\n if (prevMatchedIndex === -1 || prevMatchedIndex === 0) {\n setFocusedSpanIdForSearch(spanMatches[spanMatches.length - 1]);\n setSearchBarSuffix(getSearchBarSuffix(spanMatches.length));\n return;\n }\n\n // get prev\n setFocusedSpanIdForSearch(spanMatches[prevMatchedIndex - 1]);\n setSearchBarSuffix(getSearchBarSuffix(prevMatchedIndex));\n };\n\n const getSearchBarSuffix = (index: number): string => {\n if (spanFindMatches?.size && spanFindMatches?.size > 0) {\n return index + ' of ' + spanFindMatches?.size;\n }\n return '';\n };\n\n if (!traceProp) {\n return null;\n }\n\n return (\n <>\n <TracePageSearchBar\n nextResult={nextResult}\n prevResult={prevResult}\n navigable={true}\n searchValue={search}\n onSearchValueChange={setTraceSearch}\n searchBarSuffix={searchBarSuffix}\n />\n\n <Collapse label=\"Trace View\" isOpen>\n <TraceView\n exploreId={exploreId}\n dataFrames={dataFrames}\n splitOpenFn={splitOpenFn}\n scrollElement={scrollElement}\n topOfExploreViewRef={topOfExploreViewRef}\n traceProp={traceProp}\n spanFindMatches={spanFindMatches}\n search={search}\n focusedSpanIdForSearch={focusedSpanIdForSearch}\n expandOne={expandOne}\n collapseOne={collapseOne}\n collapseAll={collapseAll}\n expandAll={expandAll}\n childrenToggle={childrenToggle}\n childrenHiddenIDs={childrenHiddenIDs}\n queryResponse={queryResponse}\n />\n </Collapse>\n </>\n );\n}\n","import { useMemo, useState } from 'react';\n\nimport { filterSpans, TraceSpan } from '@jaegertracing/jaeger-ui-components';\n\n/**\n * Controls the state of search input that highlights spans if they match the search string.\n * @param spans\n */\nexport function useSearch(spans?: TraceSpan[]) {\n const [search, setSearch] = useState('');\n const spanFindMatches: Set<string> | undefined = useMemo(() => {\n return search && spans ? filterSpans(search, spans) : undefined;\n }, [search, spans]);\n\n return { search, setSearch, spanFindMatches };\n}\n","import { css, cx } from '@emotion/css';\nimport memoizeOne from 'memoize-one';\nimport React, { createRef } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport { compose } from 'redux';\nimport { Unsubscribable } from 'rxjs';\n\nimport { AbsoluteTimeRange, DataQuery, GrafanaTheme2, LoadingState, RawTimeRange } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Collapse, CustomScrollbar, ErrorBoundaryAlert, Themeable2, withTheme2 } from '@grafana/ui';\nimport { FILTER_FOR_OPERATOR, FILTER_OUT_OPERATOR, FilterItem } from '@grafana/ui/src/components/Table/types';\nimport appEvents from 'app/core/app_events';\nimport { getNodeGraphDataFrames } from 'app/plugins/panel/nodeGraph/utils';\nimport { StoreState } from 'app/types';\nimport { AbsoluteTimeEvent } from 'app/types/events';\nimport { ExploreGraphStyle, ExploreId, ExploreItemState } from 'app/types/explore';\n\nimport { getTimeZone } from '../profile/state/selectors';\n\nimport { ExploreGraph } from './ExploreGraph';\nimport { ExploreGraphLabel } from './ExploreGraphLabel';\nimport ExploreQueryInspector from './ExploreQueryInspector';\nimport { ExploreToolbar } from './ExploreToolbar';\nimport LogsContainer from './LogsContainer';\nimport { LogsVolumePanel } from './LogsVolumePanel';\nimport { NoDataSourceCallToAction } from './NoDataSourceCallToAction';\nimport { NodeGraphContainer } from './NodeGraphContainer';\nimport { QueryRows } from './QueryRows';\nimport { ResponseErrorContainer } from './ResponseErrorContainer';\nimport RichHistoryContainer from './RichHistory/RichHistoryContainer';\nimport { SecondaryActions } from './SecondaryActions';\nimport TableContainer from './TableContainer';\nimport { TraceViewContainer } from './TraceView/TraceViewContainer';\nimport { changeSize, changeGraphStyle } from './state/explorePane';\nimport { splitOpen } from './state/main';\nimport { addQueryRow, loadLogsVolumeData, modifyQueries, scanStart, scanStopAction, setQueries } from './state/query';\nimport { makeAbsoluteTime, updateTimeRange } from './state/time';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n exploreMain: css`\n label: exploreMain;\n // Is needed for some transition animations to work.\n position: relative;\n margin-top: 21px;\n `,\n button: css`\n label: button;\n margin: 1em 4px 0 0;\n `,\n queryContainer: css`\n label: queryContainer;\n // Need to override normal css class and don't want to count on ordering of the classes in html.\n height: auto !important;\n flex: unset !important;\n display: unset !important;\n padding: ${theme.spacing(1)};\n `,\n };\n};\n\nexport interface ExploreProps extends Themeable2 {\n exploreId: ExploreId;\n theme: GrafanaTheme2;\n}\n\nenum ExploreDrawer {\n RichHistory,\n QueryInspector,\n}\n\ninterface ExploreState {\n openDrawer?: ExploreDrawer;\n}\n\nexport type Props = ExploreProps & ConnectedProps<typeof connector>;\n\n/**\n * Explore provides an area for quick query iteration for a given datasource.\n * Once a datasource is selected it populates the query section at the top.\n * When queries are run, their results are being displayed in the main section.\n * The datasource determines what kind of query editor it brings, and what kind\n * of results viewers it supports. The state is managed entirely in Redux.\n *\n * SPLIT VIEW\n *\n * Explore can have two Explore areas side-by-side. This is handled in `Wrapper.tsx`.\n * Since there can be multiple Explores (e.g., left and right) each action needs\n * the `exploreId` as first parameter so that the reducer knows which Explore state\n * is affected.\n *\n * DATASOURCE REQUESTS\n *\n * A click on Run Query creates transactions for all DataQueries for all expanded\n * result viewers. New runs are discarding previous runs. Upon completion a transaction\n * saves the result. The result viewers construct their data from the currently existing\n * transactions.\n *\n * The result viewers determine some of the query options sent to the datasource, e.g.,\n * `format`, to indicate eventual transformations by the datasources' result transformers.\n */\nexport class Explore extends React.PureComponent<Props, ExploreState> {\n scrollElement: HTMLDivElement | undefined;\n absoluteTimeUnsubsciber: Unsubscribable | undefined;\n topOfExploreViewRef = createRef<HTMLDivElement>();\n\n constructor(props: Props) {\n super(props);\n this.state = {\n openDrawer: undefined,\n };\n }\n\n componentDidMount() {\n this.absoluteTimeUnsubsciber = appEvents.subscribe(AbsoluteTimeEvent, this.onMakeAbsoluteTime);\n }\n\n componentWillUnmount() {\n this.absoluteTimeUnsubsciber?.unsubscribe();\n }\n\n onChangeTime = (rawRange: RawTimeRange) => {\n const { updateTimeRange, exploreId } = this.props;\n updateTimeRange({ exploreId, rawRange });\n };\n\n // Use this in help pages to set page to a single query\n onClickExample = (query: DataQuery) => {\n this.props.setQueries(this.props.exploreId, [query]);\n };\n\n onCellFilterAdded = (filter: FilterItem) => {\n const { value, key, operator } = filter;\n if (operator === FILTER_FOR_OPERATOR) {\n this.onClickFilterLabel(key, value);\n }\n\n if (operator === FILTER_OUT_OPERATOR) {\n this.onClickFilterOutLabel(key, value);\n }\n };\n\n onClickFilterLabel = (key: string, value: string) => {\n this.onModifyQueries({ type: 'ADD_FILTER', key, value });\n };\n\n onClickFilterOutLabel = (key: string, value: string) => {\n this.onModifyQueries({ type: 'ADD_FILTER_OUT', key, value });\n };\n\n onClickAddQueryRowButton = () => {\n const { exploreId, queryKeys } = this.props;\n this.props.addQueryRow(exploreId, queryKeys.length);\n };\n\n onMakeAbsoluteTime = () => {\n const { makeAbsoluteTime } = this.props;\n makeAbsoluteTime();\n };\n\n onModifyQueries = (action: any, index?: number) => {\n const { datasourceInstance } = this.props;\n if (datasourceInstance?.modifyQuery) {\n const modifier = (queries: DataQuery, modification: any) =>\n datasourceInstance.modifyQuery!(queries, modification);\n this.props.modifyQueries(this.props.exploreId, action, modifier, index);\n }\n };\n\n onResize = (size: { height: number; width: number }) => {\n this.props.changeSize(this.props.exploreId, size);\n };\n\n onStartScanning = () => {\n // Scanner will trigger a query\n this.props.scanStart(this.props.exploreId);\n };\n\n onStopScanning = () => {\n this.props.scanStopAction({ exploreId: this.props.exploreId });\n };\n\n onUpdateTimeRange = (absoluteRange: AbsoluteTimeRange) => {\n const { exploreId, updateTimeRange } = this.props;\n updateTimeRange({ exploreId, absoluteRange });\n };\n\n onChangeGraphStyle = (graphStyle: ExploreGraphStyle) => {\n const { exploreId, changeGraphStyle } = this.props;\n changeGraphStyle(exploreId, graphStyle);\n };\n\n toggleShowRichHistory = () => {\n this.setState((state) => {\n return {\n openDrawer: state.openDrawer === ExploreDrawer.RichHistory ? undefined : ExploreDrawer.RichHistory,\n };\n });\n };\n\n toggleShowQueryInspector = () => {\n this.setState((state) => {\n return {\n openDrawer: state.openDrawer === ExploreDrawer.QueryInspector ? undefined : ExploreDrawer.QueryInspector,\n };\n });\n };\n\n renderEmptyState() {\n return (\n <div className=\"explore-container\">\n <NoDataSourceCallToAction />\n </div>\n );\n }\n\n renderGraphPanel(width: number) {\n const { graphResult, absoluteRange, timeZone, splitOpen, queryResponse, loading, theme, graphStyle } = this.props;\n const spacing = parseInt(theme.spacing(2).slice(0, -2), 10);\n const label = <ExploreGraphLabel graphStyle={graphStyle} onChangeGraphStyle={this.onChangeGraphStyle} />;\n return (\n <Collapse label={label} loading={loading} isOpen>\n <ExploreGraph\n graphStyle={graphStyle}\n data={graphResult!}\n height={400}\n width={width - spacing}\n absoluteRange={absoluteRange}\n onChangeTime={this.onUpdateTimeRange}\n timeZone={timeZone}\n annotations={queryResponse.annotations}\n splitOpenFn={splitOpen}\n loadingState={queryResponse.state}\n />\n </Collapse>\n );\n }\n\n renderLogsVolume(width: number) {\n const { logsVolumeData, exploreId, loadLogsVolumeData, absoluteRange, timeZone, splitOpen } = this.props;\n\n return (\n <LogsVolumePanel\n absoluteRange={absoluteRange}\n width={width}\n logsVolumeData={logsVolumeData}\n onUpdateTimeRange={this.onUpdateTimeRange}\n timeZone={timeZone}\n splitOpen={splitOpen}\n onLoadLogsVolume={() => loadLogsVolumeData(exploreId)}\n />\n );\n }\n\n renderTablePanel(width: number) {\n const { exploreId, datasourceInstance, timeZone } = this.props;\n return (\n <TableContainer\n ariaLabel={selectors.pages.Explore.General.table}\n width={width}\n exploreId={exploreId}\n onCellFilterAdded={datasourceInstance?.modifyQuery ? this.onCellFilterAdded : undefined}\n timeZone={timeZone}\n />\n );\n }\n\n renderLogsPanel(width: number) {\n const { exploreId, syncedTimes, theme, queryResponse } = this.props;\n const spacing = parseInt(theme.spacing(2).slice(0, -2), 10);\n return (\n <LogsContainer\n exploreId={exploreId}\n loadingState={queryResponse.state}\n syncedTimes={syncedTimes}\n width={width - spacing}\n onClickFilterLabel={this.onClickFilterLabel}\n onClickFilterOutLabel={this.onClickFilterOutLabel}\n onStartScanning={this.onStartScanning}\n onStopScanning={this.onStopScanning}\n />\n );\n }\n\n renderNodeGraphPanel() {\n const { exploreId, showTrace, queryResponse } = this.props;\n return (\n <NodeGraphContainer\n dataFrames={this.memoizedGetNodeGraphDataFrames(queryResponse.series)}\n exploreId={exploreId}\n withTraceView={showTrace}\n />\n );\n }\n\n memoizedGetNodeGraphDataFrames = memoizeOne(getNodeGraphDataFrames);\n\n renderTraceViewPanel() {\n const { queryResponse, splitOpen, exploreId } = this.props;\n const dataFrames = queryResponse.series.filter((series) => series.meta?.preferredVisualisationType === 'trace');\n\n return (\n // If there is no data (like 404) we show a separate error so no need to show anything here\n dataFrames.length && (\n <TraceViewContainer\n exploreId={exploreId}\n dataFrames={dataFrames}\n splitOpenFn={splitOpen}\n scrollElement={this.scrollElement}\n topOfExploreViewRef={this.topOfExploreViewRef}\n queryResponse={queryResponse}\n />\n )\n );\n }\n\n render() {\n const {\n datasourceInstance,\n datasourceMissing,\n exploreId,\n graphResult,\n queryResponse,\n isLive,\n theme,\n showMetrics,\n showTable,\n showLogs,\n showTrace,\n showNodeGraph,\n timeZone,\n } = this.props;\n const { openDrawer } = this.state;\n const styles = getStyles(theme);\n const showPanels = queryResponse && queryResponse.state !== LoadingState.NotStarted;\n const showRichHistory = openDrawer === ExploreDrawer.RichHistory;\n const showQueryInspector = openDrawer === ExploreDrawer.QueryInspector;\n\n return (\n <CustomScrollbar\n autoHeightMin={'100%'}\n scrollRefCallback={(scrollElement) => (this.scrollElement = scrollElement || undefined)}\n >\n <ExploreToolbar\n exploreId={exploreId}\n onChangeTime={this.onChangeTime}\n topOfExploreViewRef={this.topOfExploreViewRef}\n />\n {datasourceMissing ? this.renderEmptyState() : null}\n {datasourceInstance && (\n <div className=\"explore-container\">\n <div className={cx('panel-container', styles.queryContainer)}>\n <QueryRows exploreId={exploreId} />\n <SecondaryActions\n addQueryRowButtonDisabled={isLive}\n // We cannot show multiple traces at the same time right now so we do not show add query button.\n //TODO:unification\n addQueryRowButtonHidden={false}\n richHistoryButtonActive={showRichHistory}\n queryInspectorButtonActive={showQueryInspector}\n onClickAddQueryRowButton={this.onClickAddQueryRowButton}\n onClickRichHistoryButton={this.toggleShowRichHistory}\n onClickQueryInspectorButton={this.toggleShowQueryInspector}\n />\n <ResponseErrorContainer exploreId={exploreId} />\n </div>\n <AutoSizer onResize={this.onResize} disableHeight>\n {({ width }) => {\n if (width === 0) {\n return null;\n }\n\n return (\n <main className={cx(styles.exploreMain)} style={{ width }}>\n <ErrorBoundaryAlert>\n {showPanels && (\n <>\n {showMetrics && graphResult && (\n <ErrorBoundaryAlert>{this.renderGraphPanel(width)}</ErrorBoundaryAlert>\n )}\n {<ErrorBoundaryAlert>{this.renderLogsVolume(width)}</ErrorBoundaryAlert>}\n {showTable && <ErrorBoundaryAlert>{this.renderTablePanel(width)}</ErrorBoundaryAlert>}\n {showLogs && <ErrorBoundaryAlert>{this.renderLogsPanel(width)}</ErrorBoundaryAlert>}\n {showNodeGraph && <ErrorBoundaryAlert>{this.renderNodeGraphPanel()}</ErrorBoundaryAlert>}\n {showTrace && <ErrorBoundaryAlert>{this.renderTraceViewPanel()}</ErrorBoundaryAlert>}\n </>\n )}\n {showRichHistory && (\n <RichHistoryContainer\n width={width}\n exploreId={exploreId}\n onClose={this.toggleShowRichHistory}\n />\n )}\n {showQueryInspector && (\n <ExploreQueryInspector\n exploreId={exploreId}\n width={width}\n onClose={this.toggleShowQueryInspector}\n timeZone={timeZone}\n />\n )}\n </ErrorBoundaryAlert>\n </main>\n );\n }}\n </AutoSizer>\n </div>\n )}\n </CustomScrollbar>\n );\n }\n}\n\nfunction mapStateToProps(state: StoreState, { exploreId }: ExploreProps) {\n const explore = state.explore;\n const { syncedTimes } = explore;\n const item: ExploreItemState = explore[exploreId]!;\n const timeZone = getTimeZone(state.user);\n const {\n datasourceInstance,\n datasourceMissing,\n queryKeys,\n isLive,\n graphResult,\n logsVolumeData,\n logsResult,\n showLogs,\n showMetrics,\n showTable,\n showTrace,\n absoluteRange,\n queryResponse,\n showNodeGraph,\n loading,\n graphStyle,\n } = item;\n\n return {\n datasourceInstance,\n datasourceMissing,\n queryKeys,\n isLive,\n graphResult,\n logsVolumeData,\n logsResult: logsResult ?? undefined,\n absoluteRange,\n queryResponse,\n syncedTimes,\n timeZone,\n showLogs,\n showMetrics,\n showTable,\n showTrace,\n showNodeGraph,\n loading,\n graphStyle,\n };\n}\n\nconst mapDispatchToProps = {\n changeSize,\n changeGraphStyle,\n modifyQueries,\n scanStart,\n scanStopAction,\n setQueries,\n updateTimeRange,\n makeAbsoluteTime,\n loadLogsVolumeData,\n addQueryRow,\n splitOpen,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default compose(connector, withTheme2)(Explore) as React.ComponentType<{ exploreId: ExploreId }>;\n","import memoizeOne from 'memoize-one';\nimport React from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport { DataQuery, ExploreUrlState, EventBusExtended, EventBusSrv } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport store from 'app/core/store';\nimport {\n DEFAULT_RANGE,\n ensureQueries,\n getTimeRange,\n getTimeRangeFromUrl,\n lastUsedDatasourceKeyForOrgId,\n parseUrlState,\n} from 'app/core/utils/explore';\nimport { StoreState } from 'app/types';\nimport { ExploreId } from 'app/types/explore';\n\nimport { getFiscalYearStartMonth, getTimeZone } from '../profile/state/selectors';\n\nimport Explore from './Explore';\nimport { initializeExplore, refreshExplore } from './state/explorePane';\nimport { lastSavedUrl, cleanupPaneAction } from './state/main';\n\ninterface OwnProps {\n exploreId: ExploreId;\n urlQuery: string;\n split: boolean;\n}\n\ninterface Props extends OwnProps, ConnectedProps<typeof connector> {}\n\n/**\n * This component is responsible for handling initialization of an Explore pane and triggering synchronization\n * of state based on URL changes and preventing any infinite loops.\n */\nclass ExplorePaneContainerUnconnected extends React.PureComponent<Props> {\n el: any;\n exploreEvents: EventBusExtended;\n\n constructor(props: Props) {\n super(props);\n this.exploreEvents = new EventBusSrv();\n this.state = {\n openDrawer: undefined,\n };\n }\n\n componentDidMount() {\n const { initialized, exploreId, initialDatasource, initialQueries, initialRange, panelsState } = this.props;\n const width = this.el?.offsetWidth ?? 0;\n\n // initialize the whole explore first time we mount and if browser history contains a change in datasource\n if (!initialized) {\n this.props.initializeExplore(\n exploreId,\n initialDatasource,\n initialQueries,\n initialRange,\n width,\n this.exploreEvents,\n panelsState\n );\n }\n }\n\n componentWillUnmount() {\n this.exploreEvents.removeAllListeners();\n this.props.cleanupPaneAction({ exploreId: this.props.exploreId });\n }\n\n componentDidUpdate(prevProps: Props) {\n this.refreshExplore(prevProps.urlQuery);\n }\n\n refreshExplore = (prevUrlQuery: string) => {\n const { exploreId, urlQuery } = this.props;\n\n // Update state from url only if it changed and only if the change wasn't initialised by redux to prevent any loops\n if (urlQuery !== prevUrlQuery && urlQuery !== lastSavedUrl[exploreId]) {\n this.props.refreshExplore(exploreId, urlQuery);\n }\n };\n\n getRef = (el: any) => {\n this.el = el;\n };\n\n render() {\n const exploreClass = this.props.split ? 'explore explore-split' : 'explore';\n return (\n <div className={exploreClass} ref={this.getRef} data-testid={selectors.pages.Explore.General.container}>\n {this.props.initialized && <Explore exploreId={this.props.exploreId} />}\n </div>\n );\n }\n}\n\nconst ensureQueriesMemoized = memoizeOne(ensureQueries);\nconst getTimeRangeFromUrlMemoized = memoizeOne(getTimeRangeFromUrl);\n\nfunction mapStateToProps(state: StoreState, props: OwnProps) {\n const urlState = parseUrlState(props.urlQuery);\n const timeZone = getTimeZone(state.user);\n const fiscalYearStartMonth = getFiscalYearStartMonth(state.user);\n\n const { datasource, queries, range: urlRange, panelsState } = (urlState || {}) as ExploreUrlState;\n const initialDatasource = datasource || store.get(lastUsedDatasourceKeyForOrgId(state.user.orgId));\n const initialQueries: DataQuery[] = ensureQueriesMemoized(queries);\n const initialRange = urlRange\n ? getTimeRangeFromUrlMemoized(urlRange, timeZone, fiscalYearStartMonth)\n : getTimeRange(timeZone, DEFAULT_RANGE, fiscalYearStartMonth);\n\n return {\n initialized: state.explore[props.exploreId]?.initialized,\n initialDatasource,\n initialQueries,\n initialRange,\n panelsState,\n };\n}\n\nconst mapDispatchToProps = {\n initializeExplore,\n refreshExplore,\n cleanupPaneAction,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport const ExplorePaneContainer = connector(ExplorePaneContainerUnconnected);\n","import React, { PureComponent } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport { locationService } from '@grafana/runtime';\nimport { ErrorBoundaryAlert } from '@grafana/ui';\nimport { GrafanaRouteComponentProps } from 'app/core/navigation/types';\nimport { StoreState } from 'app/types';\nimport { ExploreId, ExploreQueryParams } from 'app/types/explore';\n\nimport { Branding } from '../../core/components/Branding/Branding';\nimport { getNavModel } from '../../core/selectors/navModel';\n\nimport { ExplorePaneContainer } from './ExplorePaneContainer';\nimport { lastSavedUrl, resetExploreAction, richHistoryUpdatedAction } from './state/main';\n\ninterface RouteProps extends GrafanaRouteComponentProps<{}, ExploreQueryParams> {}\ninterface OwnProps {}\n\nconst mapStateToProps = (state: StoreState) => {\n return {\n navModel: getNavModel(state.navIndex, 'explore'),\n exploreState: state.explore,\n };\n};\n\nconst mapDispatchToProps = {\n resetExploreAction,\n richHistoryUpdatedAction,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype Props = OwnProps & RouteProps & ConnectedProps<typeof connector>;\nclass WrapperUnconnected extends PureComponent<Props> {\n componentWillUnmount() {\n this.props.resetExploreAction({});\n }\n\n componentDidMount() {\n lastSavedUrl.left = undefined;\n lastSavedUrl.right = undefined;\n\n // timeSrv (which is used internally) on init reads `from` and `to` param from the URL and updates itself\n // using those value regardless of what is passed to the init method.\n // The updated value is then used by Explore to get the range for each pane.\n // This means that if `from` and `to` parameters are present in the URL,\n // it would be impossible to change the time range in Explore.\n // We are only doing this on mount for 2 reasons:\n // 1: Doing it on update means we'll enter a render loop.\n // 2: when parsing time in Explore (before feeding it to timeSrv) we make sure `from` is before `to` inside\n // each pane state in order to not trigger un URL update from timeSrv.\n const searchParams = locationService.getSearchObject();\n if (searchParams.from || searchParams.to) {\n locationService.partial({ from: undefined, to: undefined }, true);\n }\n }\n\n componentDidUpdate(prevProps: Props) {\n const { left, right } = this.props.queryParams;\n const hasSplit = Boolean(left) && Boolean(right);\n const datasourceTitle = hasSplit\n ? `${this.props.exploreState.left.datasourceInstance?.name} | ${this.props.exploreState.right?.datasourceInstance?.name}`\n : `${this.props.exploreState.left.datasourceInstance?.name}`;\n const documentTitle = `${this.props.navModel.main.text} - ${datasourceTitle} - ${Branding.AppTitle}`;\n document.title = documentTitle;\n }\n\n render() {\n const { left, right } = this.props.queryParams;\n const hasSplit = Boolean(left) && Boolean(right);\n\n return (\n <div className=\"page-scrollbar-wrapper\">\n <div className=\"explore-wrapper\">\n <ErrorBoundaryAlert style=\"page\">\n <ExplorePaneContainer split={hasSplit} exploreId={ExploreId.left} urlQuery={left} />\n </ErrorBoundaryAlert>\n {hasSplit && (\n <ErrorBoundaryAlert style=\"page\">\n <ExplorePaneContainer split={hasSplit} exploreId={ExploreId.right} urlQuery={right} />\n </ErrorBoundaryAlert>\n )}\n </div>\n </div>\n );\n }\n}\n\nconst Wrapper = connector(WrapperUnconnected);\n\nexport default Wrapper;\n","import { ExploreId, StoreState } from 'app/types';\n\nexport const isSplit = (state: StoreState) => Boolean(state.explore[ExploreId.left] && state.explore[ExploreId.right]);\n\nexport const getExploreItemSelector = (exploreId: ExploreId) => (state: StoreState) => state.explore[exploreId];\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","//\n// Main\n//\n\nfunction memoize (fn, options) {\n var cache = options && options.cache\n ? options.cache\n : cacheDefault\n\n var serializer = options && options.serializer\n ? options.serializer\n : serializerDefault\n\n var strategy = options && options.strategy\n ? options.strategy\n : strategyDefault\n\n return strategy(fn, {\n cache: cache,\n serializer: serializer\n })\n}\n\n//\n// Strategy\n//\n\nfunction isPrimitive (value) {\n return value == null || typeof value === 'number' || typeof value === 'boolean' // || typeof value === \"string\" 'unsafe' primitive for our needs\n}\n\nfunction monadic (fn, cache, serializer, arg) {\n var cacheKey = isPrimitive(arg) ? arg : serializer(arg)\n\n var computedValue = cache.get(cacheKey)\n if (typeof computedValue === 'undefined') {\n computedValue = fn.call(this, arg)\n cache.set(cacheKey, computedValue)\n }\n\n return computedValue\n}\n\nfunction variadic (fn, cache, serializer) {\n var args = Array.prototype.slice.call(arguments, 3)\n var cacheKey = serializer(args)\n\n var computedValue = cache.get(cacheKey)\n if (typeof computedValue === 'undefined') {\n computedValue = fn.apply(this, args)\n cache.set(cacheKey, computedValue)\n }\n\n return computedValue\n}\n\nfunction assemble (fn, context, strategy, cache, serialize) {\n return strategy.bind(\n context,\n fn,\n cache,\n serialize\n )\n}\n\nfunction strategyDefault (fn, options) {\n var strategy = fn.length === 1 ? monadic : variadic\n\n return assemble(\n fn,\n this,\n strategy,\n options.cache.create(),\n options.serializer\n )\n}\n\nfunction strategyVariadic (fn, options) {\n var strategy = variadic\n\n return assemble(\n fn,\n this,\n strategy,\n options.cache.create(),\n options.serializer\n )\n}\n\nfunction strategyMonadic (fn, options) {\n var strategy = monadic\n\n return assemble(\n fn,\n this,\n strategy,\n options.cache.create(),\n options.serializer\n )\n}\n\n//\n// Serializer\n//\n\nfunction serializerDefault () {\n return JSON.stringify(arguments)\n}\n\n//\n// Cache\n//\n\nfunction ObjectWithoutPrototypeCache () {\n this.cache = Object.create(null)\n}\n\nObjectWithoutPrototypeCache.prototype.has = function (key) {\n return (key in this.cache)\n}\n\nObjectWithoutPrototypeCache.prototype.get = function (key) {\n return this.cache[key]\n}\n\nObjectWithoutPrototypeCache.prototype.set = function (key, value) {\n this.cache[key] = value\n}\n\nvar cacheDefault = {\n create: function create () {\n return new ObjectWithoutPrototypeCache()\n }\n}\n\n//\n// API\n//\n\nmodule.exports = memoize\nmodule.exports.strategies = {\n variadic: strategyVariadic,\n monadic: strategyMonadic\n}\n","function n(n){for(var r=arguments.length,t=Array(r>1?r-1:0),e=1;e<r;e++)t[e-1]=arguments[e];if(\"production\"!==process.env.NODE_ENV){var i=Y[n],o=i?\"function\"==typeof i?i.apply(null,t):i:\"unknown error nr: \"+n;throw Error(\"[Immer] \"+o)}throw Error(\"[Immer] minified error nr: \"+n+(t.length?\" \"+t.map((function(n){return\"'\"+n+\"'\"})).join(\",\"):\"\")+\". Find the full error at: https://bit.ly/3cXEKWf\")}function r(n){return!!n&&!!n[Q]}function t(n){return!!n&&(function(n){if(!n||\"object\"!=typeof n)return!1;var r=Object.getPrototypeOf(n);if(null===r)return!0;var t=Object.hasOwnProperty.call(r,\"constructor\")&&r.constructor;return t===Object||\"function\"==typeof t&&Function.toString.call(t)===Z}(n)||Array.isArray(n)||!!n[L]||!!n.constructor[L]||s(n)||v(n))}function e(t){return r(t)||n(23,t),t[Q].t}function i(n,r,t){void 0===t&&(t=!1),0===o(n)?(t?Object.keys:nn)(n).forEach((function(e){t&&\"symbol\"==typeof e||r(e,n[e],n)})):n.forEach((function(t,e){return r(e,t,n)}))}function o(n){var r=n[Q];return r?r.i>3?r.i-4:r.i:Array.isArray(n)?1:s(n)?2:v(n)?3:0}function u(n,r){return 2===o(n)?n.has(r):Object.prototype.hasOwnProperty.call(n,r)}function a(n,r){return 2===o(n)?n.get(r):n[r]}function f(n,r,t){var e=o(n);2===e?n.set(r,t):3===e?(n.delete(r),n.add(t)):n[r]=t}function c(n,r){return n===r?0!==n||1/n==1/r:n!=n&&r!=r}function s(n){return X&&n instanceof Map}function v(n){return q&&n instanceof Set}function p(n){return n.o||n.t}function l(n){if(Array.isArray(n))return Array.prototype.slice.call(n);var r=rn(n);delete r[Q];for(var t=nn(r),e=0;e<t.length;e++){var i=t[e],o=r[i];!1===o.writable&&(o.writable=!0,o.configurable=!0),(o.get||o.set)&&(r[i]={configurable:!0,writable:!0,enumerable:o.enumerable,value:n[i]})}return Object.create(Object.getPrototypeOf(n),r)}function d(n,e){return void 0===e&&(e=!1),y(n)||r(n)||!t(n)?n:(o(n)>1&&(n.set=n.add=n.clear=n.delete=h),Object.freeze(n),e&&i(n,(function(n,r){return d(r,!0)}),!0),n)}function h(){n(2)}function y(n){return null==n||\"object\"!=typeof n||Object.isFrozen(n)}function b(r){var t=tn[r];return t||n(18,r),t}function m(n,r){tn[n]||(tn[n]=r)}function _(){return\"production\"===process.env.NODE_ENV||U||n(0),U}function j(n,r){r&&(b(\"Patches\"),n.u=[],n.s=[],n.v=r)}function O(n){g(n),n.p.forEach(S),n.p=null}function g(n){n===U&&(U=n.l)}function w(n){return U={p:[],l:U,h:n,m:!0,_:0}}function S(n){var r=n[Q];0===r.i||1===r.i?r.j():r.O=!0}function P(r,e){e._=e.p.length;var i=e.p[0],o=void 0!==r&&r!==i;return e.h.g||b(\"ES5\").S(e,r,o),o?(i[Q].P&&(O(e),n(4)),t(r)&&(r=M(e,r),e.l||x(e,r)),e.u&&b(\"Patches\").M(i[Q].t,r,e.u,e.s)):r=M(e,i,[]),O(e),e.u&&e.v(e.u,e.s),r!==H?r:void 0}function M(n,r,t){if(y(r))return r;var e=r[Q];if(!e)return i(r,(function(i,o){return A(n,e,r,i,o,t)}),!0),r;if(e.A!==n)return r;if(!e.P)return x(n,e.t,!0),e.t;if(!e.I){e.I=!0,e.A._--;var o=4===e.i||5===e.i?e.o=l(e.k):e.o;i(3===e.i?new Set(o):o,(function(r,i){return A(n,e,o,r,i,t)})),x(n,o,!1),t&&n.u&&b(\"Patches\").R(e,t,n.u,n.s)}return e.o}function A(e,i,o,a,c,s){if(\"production\"!==process.env.NODE_ENV&&c===o&&n(5),r(c)){var v=M(e,c,s&&i&&3!==i.i&&!u(i.D,a)?s.concat(a):void 0);if(f(o,a,v),!r(v))return;e.m=!1}if(t(c)&&!y(c)){if(!e.h.F&&e._<1)return;M(e,c),i&&i.A.l||x(e,c)}}function x(n,r,t){void 0===t&&(t=!1),n.h.F&&n.m&&d(r,t)}function z(n,r){var t=n[Q];return(t?p(t):n)[r]}function I(n,r){if(r in n)for(var t=Object.getPrototypeOf(n);t;){var e=Object.getOwnPropertyDescriptor(t,r);if(e)return e;t=Object.getPrototypeOf(t)}}function k(n){n.P||(n.P=!0,n.l&&k(n.l))}function E(n){n.o||(n.o=l(n.t))}function R(n,r,t){var e=s(r)?b(\"MapSet\").N(r,t):v(r)?b(\"MapSet\").T(r,t):n.g?function(n,r){var t=Array.isArray(n),e={i:t?1:0,A:r?r.A:_(),P:!1,I:!1,D:{},l:r,t:n,k:null,o:null,j:null,C:!1},i=e,o=en;t&&(i=[e],o=on);var u=Proxy.revocable(i,o),a=u.revoke,f=u.proxy;return e.k=f,e.j=a,f}(r,t):b(\"ES5\").J(r,t);return(t?t.A:_()).p.push(e),e}function D(e){return r(e)||n(22,e),function n(r){if(!t(r))return r;var e,u=r[Q],c=o(r);if(u){if(!u.P&&(u.i<4||!b(\"ES5\").K(u)))return u.t;u.I=!0,e=F(r,c),u.I=!1}else e=F(r,c);return i(e,(function(r,t){u&&a(u.t,r)===t||f(e,r,n(t))})),3===c?new Set(e):e}(e)}function F(n,r){switch(r){case 2:return new Map(n);case 3:return Array.from(n)}return l(n)}function N(){function t(n,r){var t=s[n];return t?t.enumerable=r:s[n]=t={configurable:!0,enumerable:r,get:function(){var r=this[Q];return\"production\"!==process.env.NODE_ENV&&f(r),en.get(r,n)},set:function(r){var t=this[Q];\"production\"!==process.env.NODE_ENV&&f(t),en.set(t,n,r)}},t}function e(n){for(var r=n.length-1;r>=0;r--){var t=n[r][Q];if(!t.P)switch(t.i){case 5:a(t)&&k(t);break;case 4:o(t)&&k(t)}}}function o(n){for(var r=n.t,t=n.k,e=nn(t),i=e.length-1;i>=0;i--){var o=e[i];if(o!==Q){var a=r[o];if(void 0===a&&!u(r,o))return!0;var f=t[o],s=f&&f[Q];if(s?s.t!==a:!c(f,a))return!0}}var v=!!r[Q];return e.length!==nn(r).length+(v?0:1)}function a(n){var r=n.k;if(r.length!==n.t.length)return!0;var t=Object.getOwnPropertyDescriptor(r,r.length-1);if(t&&!t.get)return!0;for(var e=0;e<r.length;e++)if(!r.hasOwnProperty(e))return!0;return!1}function f(r){r.O&&n(3,JSON.stringify(p(r)))}var s={};m(\"ES5\",{J:function(n,r){var e=Array.isArray(n),i=function(n,r){if(n){for(var e=Array(r.length),i=0;i<r.length;i++)Object.defineProperty(e,\"\"+i,t(i,!0));return e}var o=rn(r);delete o[Q];for(var u=nn(o),a=0;a<u.length;a++){var f=u[a];o[f]=t(f,n||!!o[f].enumerable)}return Object.create(Object.getPrototypeOf(r),o)}(e,n),o={i:e?5:4,A:r?r.A:_(),P:!1,I:!1,D:{},l:r,t:n,k:i,o:null,O:!1,C:!1};return Object.defineProperty(i,Q,{value:o,writable:!0}),i},S:function(n,t,o){o?r(t)&&t[Q].A===n&&e(n.p):(n.u&&function n(r){if(r&&\"object\"==typeof r){var t=r[Q];if(t){var e=t.t,o=t.k,f=t.D,c=t.i;if(4===c)i(o,(function(r){r!==Q&&(void 0!==e[r]||u(e,r)?f[r]||n(o[r]):(f[r]=!0,k(t)))})),i(e,(function(n){void 0!==o[n]||u(o,n)||(f[n]=!1,k(t))}));else if(5===c){if(a(t)&&(k(t),f.length=!0),o.length<e.length)for(var s=o.length;s<e.length;s++)f[s]=!1;else for(var v=e.length;v<o.length;v++)f[v]=!0;for(var p=Math.min(o.length,e.length),l=0;l<p;l++)o.hasOwnProperty(l)||(f[l]=!0),void 0===f[l]&&n(o[l])}}}}(n.p[0]),e(n.p))},K:function(n){return 4===n.i?o(n):a(n)}})}function T(){function e(n){if(!t(n))return n;if(Array.isArray(n))return n.map(e);if(s(n))return new Map(Array.from(n.entries()).map((function(n){return[n[0],e(n[1])]})));if(v(n))return new Set(Array.from(n).map(e));var r=Object.create(Object.getPrototypeOf(n));for(var i in n)r[i]=e(n[i]);return u(n,L)&&(r[L]=n[L]),r}function f(n){return r(n)?e(n):n}var c=\"add\";m(\"Patches\",{$:function(r,t){return t.forEach((function(t){for(var i=t.path,u=t.op,f=r,s=0;s<i.length-1;s++){var v=o(f),p=\"\"+i[s];0!==v&&1!==v||\"__proto__\"!==p&&\"constructor\"!==p||n(24),\"function\"==typeof f&&\"prototype\"===p&&n(24),\"object\"!=typeof(f=a(f,p))&&n(15,i.join(\"/\"))}var l=o(f),d=e(t.value),h=i[i.length-1];switch(u){case\"replace\":switch(l){case 2:return f.set(h,d);case 3:n(16);default:return f[h]=d}case c:switch(l){case 1:return\"-\"===h?f.push(d):f.splice(h,0,d);case 2:return f.set(h,d);case 3:return f.add(d);default:return f[h]=d}case\"remove\":switch(l){case 1:return f.splice(h,1);case 2:return f.delete(h);case 3:return f.delete(t.value);default:return delete f[h]}default:n(17,u)}})),r},R:function(n,r,t,e){switch(n.i){case 0:case 4:case 2:return function(n,r,t,e){var o=n.t,s=n.o;i(n.D,(function(n,i){var v=a(o,n),p=a(s,n),l=i?u(o,n)?\"replace\":c:\"remove\";if(v!==p||\"replace\"!==l){var d=r.concat(n);t.push(\"remove\"===l?{op:l,path:d}:{op:l,path:d,value:p}),e.push(l===c?{op:\"remove\",path:d}:\"remove\"===l?{op:c,path:d,value:f(v)}:{op:\"replace\",path:d,value:f(v)})}}))}(n,r,t,e);case 5:case 1:return function(n,r,t,e){var i=n.t,o=n.D,u=n.o;if(u.length<i.length){var a=[u,i];i=a[0],u=a[1];var s=[e,t];t=s[0],e=s[1]}for(var v=0;v<i.length;v++)if(o[v]&&u[v]!==i[v]){var p=r.concat([v]);t.push({op:\"replace\",path:p,value:f(u[v])}),e.push({op:\"replace\",path:p,value:f(i[v])})}for(var l=i.length;l<u.length;l++){var d=r.concat([l]);t.push({op:c,path:d,value:f(u[l])})}i.length<u.length&&e.push({op:\"replace\",path:r.concat([\"length\"]),value:i.length})}(n,r,t,e);case 3:return function(n,r,t,e){var i=n.t,o=n.o,u=0;i.forEach((function(n){if(!o.has(n)){var i=r.concat([u]);t.push({op:\"remove\",path:i,value:n}),e.unshift({op:c,path:i,value:n})}u++})),u=0,o.forEach((function(n){if(!i.has(n)){var o=r.concat([u]);t.push({op:c,path:o,value:n}),e.unshift({op:\"remove\",path:o,value:n})}u++}))}(n,r,t,e)}},M:function(n,r,t,e){t.push({op:\"replace\",path:[],value:r===H?void 0:r}),e.push({op:\"replace\",path:[],value:n})}})}function C(){function r(n,r){function t(){this.constructor=n}a(n,r),n.prototype=(t.prototype=r.prototype,new t)}function e(n){n.o||(n.D=new Map,n.o=new Map(n.t))}function o(n){n.o||(n.o=new Set,n.t.forEach((function(r){if(t(r)){var e=R(n.A.h,r,n);n.p.set(r,e),n.o.add(e)}else n.o.add(r)})))}function u(r){r.O&&n(3,JSON.stringify(p(r)))}var a=function(n,r){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var t in r)r.hasOwnProperty(t)&&(n[t]=r[t])})(n,r)},f=function(){function n(n,r){return this[Q]={i:2,l:r,A:r?r.A:_(),P:!1,I:!1,o:void 0,D:void 0,t:n,k:this,C:!1,O:!1},this}r(n,Map);var o=n.prototype;return Object.defineProperty(o,\"size\",{get:function(){return p(this[Q]).size}}),o.has=function(n){return p(this[Q]).has(n)},o.set=function(n,r){var t=this[Q];return u(t),p(t).has(n)&&p(t).get(n)===r||(e(t),k(t),t.D.set(n,!0),t.o.set(n,r),t.D.set(n,!0)),this},o.delete=function(n){if(!this.has(n))return!1;var r=this[Q];return u(r),e(r),k(r),r.t.has(n)?r.D.set(n,!1):r.D.delete(n),r.o.delete(n),!0},o.clear=function(){var n=this[Q];u(n),p(n).size&&(e(n),k(n),n.D=new Map,i(n.t,(function(r){n.D.set(r,!1)})),n.o.clear())},o.forEach=function(n,r){var t=this;p(this[Q]).forEach((function(e,i){n.call(r,t.get(i),i,t)}))},o.get=function(n){var r=this[Q];u(r);var i=p(r).get(n);if(r.I||!t(i))return i;if(i!==r.t.get(n))return i;var o=R(r.A.h,i,r);return e(r),r.o.set(n,o),o},o.keys=function(){return p(this[Q]).keys()},o.values=function(){var n,r=this,t=this.keys();return(n={})[V]=function(){return r.values()},n.next=function(){var n=t.next();return n.done?n:{done:!1,value:r.get(n.value)}},n},o.entries=function(){var n,r=this,t=this.keys();return(n={})[V]=function(){return r.entries()},n.next=function(){var n=t.next();if(n.done)return n;var e=r.get(n.value);return{done:!1,value:[n.value,e]}},n},o[V]=function(){return this.entries()},n}(),c=function(){function n(n,r){return this[Q]={i:3,l:r,A:r?r.A:_(),P:!1,I:!1,o:void 0,t:n,k:this,p:new Map,O:!1,C:!1},this}r(n,Set);var t=n.prototype;return Object.defineProperty(t,\"size\",{get:function(){return p(this[Q]).size}}),t.has=function(n){var r=this[Q];return u(r),r.o?!!r.o.has(n)||!(!r.p.has(n)||!r.o.has(r.p.get(n))):r.t.has(n)},t.add=function(n){var r=this[Q];return u(r),this.has(n)||(o(r),k(r),r.o.add(n)),this},t.delete=function(n){if(!this.has(n))return!1;var r=this[Q];return u(r),o(r),k(r),r.o.delete(n)||!!r.p.has(n)&&r.o.delete(r.p.get(n))},t.clear=function(){var n=this[Q];u(n),p(n).size&&(o(n),k(n),n.o.clear())},t.values=function(){var n=this[Q];return u(n),o(n),n.o.values()},t.entries=function(){var n=this[Q];return u(n),o(n),n.o.entries()},t.keys=function(){return this.values()},t[V]=function(){return this.values()},t.forEach=function(n,r){for(var t=this.values(),e=t.next();!e.done;)n.call(r,e.value,e.value,this),e=t.next()},n}();m(\"MapSet\",{N:function(n,r){return new f(n,r)},T:function(n,r){return new c(n,r)}})}function J(){N(),C(),T()}function K(n){return n}function $(n){return n}var G,U,W=\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol(\"x\"),X=\"undefined\"!=typeof Map,q=\"undefined\"!=typeof Set,B=\"undefined\"!=typeof Proxy&&void 0!==Proxy.revocable&&\"undefined\"!=typeof Reflect,H=W?Symbol.for(\"immer-nothing\"):((G={})[\"immer-nothing\"]=!0,G),L=W?Symbol.for(\"immer-draftable\"):\"__$immer_draftable\",Q=W?Symbol.for(\"immer-state\"):\"__$immer_state\",V=\"undefined\"!=typeof Symbol&&Symbol.iterator||\"@@iterator\",Y={0:\"Illegal state\",1:\"Immer drafts cannot have computed properties\",2:\"This object has been frozen and should not be mutated\",3:function(n){return\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \"+n},4:\"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",5:\"Immer forbids circular references\",6:\"The first or second argument to `produce` must be a function\",7:\"The third argument to `produce` must be a function or undefined\",8:\"First argument to `createDraft` must be a plain object, an array, or an immerable object\",9:\"First argument to `finishDraft` must be a draft returned by `createDraft`\",10:\"The given draft is already finalized\",11:\"Object.defineProperty() cannot be used on an Immer draft\",12:\"Object.setPrototypeOf() cannot be used on an Immer draft\",13:\"Immer only supports deleting array indices\",14:\"Immer only supports setting array indices and the 'length' property\",15:function(n){return\"Cannot apply patch, path doesn't resolve: \"+n},16:'Sets cannot have \"replace\" patches.',17:function(n){return\"Unsupported patch operation: \"+n},18:function(n){return\"The plugin for '\"+n+\"' has not been loaded into Immer. To enable the plugin, import and call `enable\"+n+\"()` when initializing your application.\"},20:\"Cannot use proxies if Proxy, Proxy.revocable or Reflect are not available\",21:function(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 '\"+n+\"'\"},22:function(n){return\"'current' expects a draft, got: \"+n},23:function(n){return\"'original' expects a draft, got: \"+n},24:\"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"},Z=\"\"+Object.prototype.constructor,nn=\"undefined\"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(n){return Object.getOwnPropertyNames(n).concat(Object.getOwnPropertySymbols(n))}:Object.getOwnPropertyNames,rn=Object.getOwnPropertyDescriptors||function(n){var r={};return nn(n).forEach((function(t){r[t]=Object.getOwnPropertyDescriptor(n,t)})),r},tn={},en={get:function(n,r){if(r===Q)return n;var e=p(n);if(!u(e,r))return function(n,r,t){var e,i=I(r,t);return i?\"value\"in i?i.value:null===(e=i.get)||void 0===e?void 0:e.call(n.k):void 0}(n,e,r);var i=e[r];return n.I||!t(i)?i:i===z(n.t,r)?(E(n),n.o[r]=R(n.A.h,i,n)):i},has:function(n,r){return r in p(n)},ownKeys:function(n){return Reflect.ownKeys(p(n))},set:function(n,r,t){var e=I(p(n),r);if(null==e?void 0:e.set)return e.set.call(n.k,t),!0;if(!n.P){var i=z(p(n),r),o=null==i?void 0:i[Q];if(o&&o.t===t)return n.o[r]=t,n.D[r]=!1,!0;if(c(t,i)&&(void 0!==t||u(n.t,r)))return!0;E(n),k(n)}return n.o[r]===t&&\"number\"!=typeof t&&(void 0!==t||r in n.o)||(n.o[r]=t,n.D[r]=!0,!0)},deleteProperty:function(n,r){return void 0!==z(n.t,r)||r in n.t?(n.D[r]=!1,E(n),k(n)):delete n.D[r],n.o&&delete n.o[r],!0},getOwnPropertyDescriptor:function(n,r){var t=p(n),e=Reflect.getOwnPropertyDescriptor(t,r);return e?{writable:!0,configurable:1!==n.i||\"length\"!==r,enumerable:e.enumerable,value:t[r]}:e},defineProperty:function(){n(11)},getPrototypeOf:function(n){return Object.getPrototypeOf(n.t)},setPrototypeOf:function(){n(12)}},on={};i(en,(function(n,r){on[n]=function(){return arguments[0]=arguments[0][0],r.apply(this,arguments)}})),on.deleteProperty=function(r,t){return\"production\"!==process.env.NODE_ENV&&isNaN(parseInt(t))&&n(13),on.set.call(this,r,t,void 0)},on.set=function(r,t,e){return\"production\"!==process.env.NODE_ENV&&\"length\"!==t&&isNaN(parseInt(t))&&n(14),en.set.call(this,r[0],t,e,r[0])};var un=function(){function e(r){var e=this;this.g=B,this.F=!0,this.produce=function(r,i,o){if(\"function\"==typeof r&&\"function\"!=typeof i){var u=i;i=r;var a=e;return function(n){var r=this;void 0===n&&(n=u);for(var t=arguments.length,e=Array(t>1?t-1:0),o=1;o<t;o++)e[o-1]=arguments[o];return a.produce(n,(function(n){var t;return(t=i).call.apply(t,[r,n].concat(e))}))}}var f;if(\"function\"!=typeof i&&n(6),void 0!==o&&\"function\"!=typeof o&&n(7),t(r)){var c=w(e),s=R(e,r,void 0),v=!0;try{f=i(s),v=!1}finally{v?O(c):g(c)}return\"undefined\"!=typeof Promise&&f instanceof Promise?f.then((function(n){return j(c,o),P(n,c)}),(function(n){throw O(c),n})):(j(c,o),P(f,c))}if(!r||\"object\"!=typeof r){if(void 0===(f=i(r))&&(f=r),f===H&&(f=void 0),e.F&&d(f,!0),o){var p=[],l=[];b(\"Patches\").M(r,f,p,l),o(p,l)}return f}n(21,r)},this.produceWithPatches=function(n,r){if(\"function\"==typeof n)return function(r){for(var t=arguments.length,i=Array(t>1?t-1:0),o=1;o<t;o++)i[o-1]=arguments[o];return e.produceWithPatches(r,(function(r){return n.apply(void 0,[r].concat(i))}))};var t,i,o=e.produce(n,r,(function(n,r){t=n,i=r}));return\"undefined\"!=typeof Promise&&o instanceof Promise?o.then((function(n){return[n,t,i]})):[o,t,i]},\"boolean\"==typeof(null==r?void 0:r.useProxies)&&this.setUseProxies(r.useProxies),\"boolean\"==typeof(null==r?void 0:r.autoFreeze)&&this.setAutoFreeze(r.autoFreeze)}var i=e.prototype;return i.createDraft=function(e){t(e)||n(8),r(e)&&(e=D(e));var i=w(this),o=R(this,e,void 0);return o[Q].C=!0,g(i),o},i.finishDraft=function(r,t){var e=r&&r[Q];\"production\"!==process.env.NODE_ENV&&(e&&e.C||n(9),e.I&&n(10));var i=e.A;return j(i,t),P(void 0,i)},i.setAutoFreeze=function(n){this.F=n},i.setUseProxies=function(r){r&&!B&&n(20),this.g=r},i.applyPatches=function(n,t){var e;for(e=t.length-1;e>=0;e--){var i=t[e];if(0===i.path.length&&\"replace\"===i.op){n=i.value;break}}e>-1&&(t=t.slice(e+1));var o=b(\"Patches\").$;return r(n)?o(n,t):this.produce(n,(function(n){return o(n,t)}))},e}(),an=new un,fn=an.produce,cn=an.produceWithPatches.bind(an),sn=an.setAutoFreeze.bind(an),vn=an.setUseProxies.bind(an),pn=an.applyPatches.bind(an),ln=an.createDraft.bind(an),dn=an.finishDraft.bind(an);export default fn;export{un as Immer,pn as applyPatches,K as castDraft,$ as castImmutable,ln as createDraft,D as current,J as enableAllPlugins,N as enableES5,C as enableMapSet,T as enablePatches,dn as finishDraft,d as freeze,L as immerable,r as isDraft,t as isDraftable,H as nothing,e as original,fn as produce,cn as produceWithPatches,sn as setAutoFreeze,vn as setUseProxies};\n//# sourceMappingURL=immer.esm.js.map\n"],"names":["displayOverrideRef","isHideSeriesOverride","isSystemOverrideWithRef","seriesVisibilityConfigFactory","label","mode","fieldConfig","data","overrides","displayName","currentIndex","findIndex","SeriesVisibilityChangeMode","override","createOverride","getDisplayNames","overridesCopy","Array","from","current","splice","existing","getExistingDisplayNames","length","createExtendedOverride","allFieldsAreExcluded","names","ByNamesMatcherMode","property","id","value","viz","legend","tooltip","__systemRef","matcher","FieldMatcherID","options","prefix","undefined","readOnly","properties","find","p","index","name","push","rule","isArray","excludeName","unique","Set","frame","field","fields","type","FieldType","getFieldDisplayName","add","ExploreGraph","height","width","timeZone","absoluteRange","onChangeTime","loadingState","annotations","onHiddenSeriesChanged","splitOpenFn","graphStyle","tooltipDisplayMode","TooltipDisplayMode","theme","useTheme2","showAllTimeSeries","setShowAllTimeSeries","useState","baseStructureRev","setBaseStructureRev","previousData","usePrevious","structureChangesRef","useRef","compareArrayValues","compareDataFrameStructures","structureRev","setFieldConfig","defaults","color","FieldColorModeId","custom","drawStyle","GraphDrawStyle","fillOpacity","pointSize","style","useStyles2","getStyles","timeRange","dateTime","to","raw","dataWithConfig","useMemo","registry","createFieldConfigRegistry","getGraphFieldConfig","defaultGraphConfig","styledFieldConfig","config","produce","draft","stacking","group","StackingMode","Error","applyGraphStyle","applyFieldOverrides","replaceVariables","fieldConfigRegistry","useEffect","hiddenFrames","forEach","map","hideFrom","every","identity","getFrameDisplayName","seriesToShow","slice","panelContext","eventBus","appEvents","onSplitOpen","onToggleSeriesVisibility","r","PanelContextProvider","className","cx","timeSeriesDisclaimer","Icon","disclaimerIcon","onClick","PanelRenderer","series","state","pluginId","title","onChangeTimeRange","sort","SortOrder","displayMode","LegendDisplayMode","placement","calcs","css","spacing","colors","background","primary","warning","main","text","link","ALL_GRAPH_STYLE_OPTIONS","EXPLORE_GRAPH_STYLES","toUpperCase","replace","display","justifyContent","ExploreGraphLabel","props","onChangeGraphStyle","RadioButtonGroup","size","onChange","extendStatics","__extends","d","b","Object","setPrototypeOf","__proto__","prototype","hasOwnProperty","call","__","this","constructor","create","__assign","assign","t","s","i","n","arguments","apply","styles","top","left","cursor","right","bottom","topRight","position","bottomRight","bottomLeft","topLeft","Resizer","_super","_this","onMouseDown","e","onResizeStart","direction","onTouchStart","render","userSelect","replaceStyles","children","DEFAULT_SIZE","clamp","min","max","Math","snap","round","hasDirection","dir","target","RegExp","test","isTouchEvent","event","Boolean","touches","findClosestSnap","snapArray","snapGap","closestGapIndex","reduce","prev","curr","abs","gap","endsWith","str","searchStr","substr","getStringSize","toString","getPixelSize","parentSize","innerWidth","innerHeight","Number","calculateNewMax","maxWidth","maxHeight","minWidth","minHeight","definedProps","baseClassName","Resizable","ratio","resizable","parentLeft","parentTop","resizableLeft","resizableRight","resizableTop","resizableBottom","targetLeft","targetTop","appendBase","window","parent","parentNode","element","document","createElement","transform","flex","classList","appendChild","removeBase","base","removeChild","ref","c","isResizing","propsSize","original","x","y","backgroundStyle","backgroundColor","opacity","zIndex","flexBasis","bind","onMouseMove","onMouseUp","defineProperty","get","enumerable","configurable","ownerDocument","defaultView","defaultSize","orgWidth","offsetWidth","orgHeight","offsetHeight","orgPosition","getSize","key","getParentSize","wrapChanged","wrap","flexWrap","bindEvents","addEventListener","capture","passive","unbindEvents","removeEventListener","componentDidMount","computedStyle","getComputedStyle","setState","componentWillUnmount","createSizeForCssProperty","newSize","kind","calculateNewMaxFromBoundary","boundWidth","boundHeight","boundsByDirection","widthByDirection","heightByDirection","bounds","parent_1","isFinite","calculateNewSizeFromDirection","clientX","clientY","scale","resizeRatio","_a","_b","lockAspectRatio","lockAspectRatioExtraHeight","lockAspectRatioExtraWidth","newWidth","newHeight","extraHeight","extraWidth","calculateNewSizeFromAspectRatio","computedMinWidth","computedMaxWidth","computedMinHeight","computedMaxHeight","extraMinWidth","extraMaxWidth","extraMinHeight","extraMaxHeight","lockedMinWidth","lockedMaxWidth","lockedMinHeight","lockedMaxHeight","setBoundingClientRect","parent_2","parentRect","getBoundingClientRect","targetRect","top_1","nativeEvent","isMouseEvent","parent_3","flexDirection","flexDir","startsWith","TouchEvent","preventDefault","stopPropagation","_c","boundaryMax","grid","newGridWidth","newGridHeight","delta","newState","onResize","onResizeStop","updateSize","renderResizer","enable","handleStyles","handleClasses","handleWrapperStyle","handleWrapperClass","handleComponent","resizers","keys","extendsProps","acc","indexOf","sizeStyle","boxSizing","flexShrink","Wrapper","as","defaultProps","drawerSlide","keyframes","stylesFactory","container","border","weak","shadows","z3","sidemenu","drawerActive","rzHandle","secondary","shade","ExploreDrawer","drawerWidth","mapDispatchToProps","runQueries","connect","exploreId","item","explore","loading","queryResponse","onClose","dataFrames","error","statsTab","icon","content","InspectStatsTab","request","timezone","jsonTab","InspectJSONTab","dataTab","InspectDataTab","isLoading","withTransforms","withFieldConfig","tabs","QueryInspector","onRefreshQuery","errorTab","InspectErrorTab","TabbedContainer","closeIconTooltip","TimeSyncButton","isSynced","Tooltip","ToolbarButton","variant","ExploreTimeControls","Component","range","getShiftedTimeRange","dateTimeForTimeZone","onMoveTimePicker","adjustedFrom","dateMath","adjustedTo","getZoomedTimeRange","fiscalYearStartMonth","splitted","syncedTimes","onChangeTimeSync","hideText","onChangeTimeZone","onChangeFiscalYearStartMonth","timeSyncButton","timePickerCommonProps","onMoveBackward","onMoveBack","onMoveForward","onZoom","TimePickerWithHistory","onChangeTimePicker","LiveTailButton","start","pause","resume","isLive","isPaused","stop","buttonVariant","onClickMain","ButtonGroup","iconOnly","CSSTransition","mountOnEnter","unmountOnExit","timeout","in","classNames","enter","stopButtonEnter","enterActive","stopButtonEnterActive","exit","stopButtonExit","exitActive","stopButtonExitActive","RunButton","isSmall","onRun","onChangeRefreshInterval","refreshInterval","showDropdown","intervals","getTimeSrv","getValidIntervals","defaultIntervals","RefreshPicker","onIntervalChanged","onRefresh","noIntervalPicker","LiveTailControls","controls","dispatch","useDispatch","useCallback","setPausedStateAction","changeRefreshInterval","useLiveTailControls","AddToDashboard","lazy","then","default","UnConnectedExploreToolbar","PureComponent","async","changeDatasource","dsSettings","uid","importQueries","cancelQueries","syncTimes","datasourceMissing","closeSplit","split","hasLiveOption","containerWidth","topOfExploreViewRef","showSmallDataSourcePicker","showSmallTimePicker","PageToolbar","ExploreId","pageIcon","leftItems","DashNavButton","createAndCopyShortLink","location","href","DataSourcePicker","onChangeDatasource","datasourceName","hideTextValue","filter","ToolbarButtonRow","disabled","Suspense","fallback","onRunQuery","SetInterval","func","interval","splitClose","splitOpen","updateTimeZoneForSession","updateFiscalYearStartMonthForSession","ExploreToolbar","exploreItem","datasourceInstance","meta","streaming","getTimeZone","user","getFiscalYearStartMonth","isSplit","connector","callback","delay","savedCallback","interval_1","setInterval","clearInterval","Time","timeInMs","humanize","formatTime","inSeconds","toFixed","duration","toDuration","hours","minutes","seconds","ElapsedTime","resetKey","elapsed","setElapsed","useInterval","LiveLogs","super","React","onPause","scrollTop","clientHeight","scrollHeight","currentTarget","logRowsToRender","rowsToRender","logRows","nextProps","onResume","logsRowsLive","typography","fontFamilyMonospace","bodySmall","fontSize","logsRowFade","tinycolor","info","transparent","setAlpha","logsRowsIndicator","h6","button","fullWidth","logsRow","logsRowLocalTime","logsRowMessage","getLogRowStyles","onScroll","scrollContainerRef","row","dateTimeFormat","timeEpochMs","hasAnsi","LogMessageAnsi","entry","liveEndDiv","scrollTo","Button","stopLive","LiveLogsWithTheme","withTheme2","metaContainer","metaItem","metaLabel","fontWeightMedium","metaValue","MetaInfoItem","memo","MetaInfoText","metaItems","LogsMetaRow","dedupStrategy","dedupCount","showDetectedFields","clearDetectedFields","hasUnescapedContent","forceEscape","onEscapeNewlines","logsMetaItem","LogsDedupStrategy","LogsMetaKind","some","MAX_CHARACTERS","renderMetaItem","LogLabels","labels","LogsNavigationPages","pages","currentPageIndex","oldestLogsFirst","changeTime","time","format","systemDateFormats","createPageContent","page","Spinner","logsRange","CustomScrollbar","autoHide","pagesWrapper","pagesContainer","queryRange","line","selectedBg","selectedText","v1","sm","LogsNavigation","logsSortOrder","scrollToTopLogs","visibleRange","queries","clearCache","addResultsToCache","setPages","setCurrentPageIndex","expectedQueriesRef","expectedRangeRef","rangeSpanRef","LogsSortOrder","onFirstPage","onLastPage","newPage","newPages","isEqual","a","sortPages","olderLogsButton","navButton","indexChange","navButtonContent","newerLogsButton","navContainer","scrollToTopButton","SETTINGS_KEYS","UnthemedLogs","createRef","showLabels","store","showTime","wrapLogMessage","prettifyLogMessage","hiddenLogLevels","isFlipping","flipOrderTimer","setTimeout","prevState","newSortOrder","cancelFlippingTimer","checked","hiddenRawLevels","level","LogLevel","onStartScanning","onStopScanning","concat","k","memoizeOne","dedupedRows","dedupLogRows","sum","duplicates","filterLogLevels","topLogsRef","scrollIntoView","clearTimeout","logsMeta","logsSeries","onClickFilterLabel","onClickFilterOutLabel","scanning","scanRange","showContextToggle","getFieldLinks","logsQueries","hasData","checkUnescapedContent","filteredLogs","filterRows","dedupRows","scanText","rangeUtil","infoText","onToggleLogLevel","logOptions","InlineFieldRow","InlineField","horizontalInlineLabel","InlineSwitch","horizontalInlineSwitch","onChangeLabels","onChangewrapLogMessage","onChangePrettifyLogMessage","values","dedupType","capitalize","description","LogsDedupDescription","onChangeDedup","radioButtons","onChangeLogsSortOrder","logsSection","LogRows","deduplicatedRows","getRowContext","enableLogDetails","onClickShowDetectedField","showDetectedField","onClickHideDetectedField","hideDetectedField","noData","fill","onClickScan","onClickStopScan","Logs","shape","borderRadius","medium","headerButton","logsEnter","logsEnterActive","logsExit","logsExitActive","LogsCrossFadeTransition","visible","transitionDuration","LogsContainer","updateTimeRange","hasLogsContextSupport","getLogRowContext","rowIndex","getFieldLinksForExplore","styleOverridesForStickyNavigation","Collapse","isOpen","logsResult","logsVolumeDataProvider","logsVolumeData","rows","ErrorAlert","setIsOpen","message","showButton","Alert","severity","LogsVolumePanel","onUpdateTimeRange","onLoadLogsVolume","parseInt","LogsVolumePanelContent","LoadingState","zoomRatio","selectedTimeRange","dataRange","logsLevelZoomRatio","zoomLevelInfo","contentContainer","zoomInfoContainer","NoDataSourceCallToAction","canCreateDataSource","contextSrv","AccessControlAction","footer","rel","ctaElement","LinkButton","cardClassName","breakpoints","lg","CallToActionCard","callToActionElement","warningText","NodeGraphContainer","withTraceView","getLinks","useLinks","frames","nodes","useCategorizeFrames","open","toggleOpen","useToggle","countWarning","Badge","collapsible","onToggle","NodeGraph","QueryRows","getQueries","getDatasourceInstanceSettings","getQueryResponse","getHistory","getEventBridge","exploreItemSelector","getExploreItemSelector","createSelector","history","eventBridge","getDatasourceSrv","getInstanceSettings","makeSelectors","useSelector","onRunQueries","newQueries","changeQueriesAction","onAddQuery","query","refId","getNextRefIdChar","QueryEditorRows","onQueriesChange","app","CoreApp","FadeIn","defaultStyle","transition","transitionStyles","exited","entering","entered","exiting","Transition","onExited","ErrorContainer","queryError","showError","alertWithTopMargin","ResponseErrorContainer","deleteHistoryItem","commentHistoryItem","starHistoryItem","setQueries","isRemoved","rigtColumnWidth","rigtColumnContentWidth","cardColor","bg2","queryCard","border1","radius","palette","orange","cardRow","xs","datasourceContainer","weight","semibold","queryActionButtons","queryContainer","queryRow","updateCommentContainer","comment","regular","commentButtonRow","textArea","runButton","md","dsImg","activeUpdateComment","setActiveUpdateComment","setComment","queryDsInstance","setQueryDsInstance","ds","getDataSourceSrv","getQueryDsInstance","useTheme","onUpdateComment","onCancelUpdateComment","updateComment","TextArea","placeholder","IconButton","queriesToCopy","q","createQueryText","join","copyStringToClipboard","notifyApp","createSuccessNotification","createUrlFromRichHistory","starred","ShowConfirmModalEvent","yesText","onConfirm","iconType","onKeyDown","keyEvent","shiftKey","ctrlKey","src","queryText","queriesToRun","bgColor","isLight","gray5","dark4","sliderHeight","containerContent","containerSlider","slider","selectors","filterInput","multiselect","xxs","sessionName","heading","h4","light","RichHistoryQueriesTab","datasourceFilters","onSelectDatasourceFilters","onChangeSortOrder","sortOrder","activeDatasourceOnly","retentionPeriod","timeFilter","setTimeFilter","setData","searchInput","setSearchInput","debouncedSearchInput","setDebouncedSearchInput","useDebounce","datasourcesRetrievedFromQueryHistory","uniqBy","listOfDatasources","createDatasourcesList","filterAndSortQueries","filteredQueries","mappedQueriesToHeadings","mapQueriesToHeadings","mapNumbertoTimeInSlider","RangeSlider","tooltipAlwaysVisible","orientation","formatTooltipResult","reverse","onAfterChange","MultiSelect","menuShouldPortal","FilterInput","Select","sortOrderOptions","order","idx","imgUrl","input","switch","retentionPeriodOptions","RichHistorySettings","starredTabAsFirstTab","onChangeRetentionPeriod","toggleStarredTabAsFirstTab","toggleactiveDatasourceOnly","deleteRichHistory","selectedOption","v","Field","MAX_HISTORY_ITEMS","Switch","bold","RichHistoryStarredTab","starredQueries","Tabs","UnThemedRichHistory","RICH_HISTORY_SETTING_KEYS","console","updateFilters","activeDatasourceInstance","componentDidUpdate","prevProps","richHistory","firstTab","RichHistory","Starred","Settings","toggleActiveDatasourceOnly","defaultTab","withTheme","loadRichHistory","setHeight","_e","_dir","SecondaryActions","containerMargin","HorizontalGroup","addQueryRowButtonHidden","onClickAddQueryRowButton","addQueryRowButtonDisabled","richHistoryButtonActive","onClickRichHistoryButton","queryInspectorButtonActive","onClickQueryInspectorButton","loadingInState","tableResult","TableContainer","getTableHeight","onCellFilterAdded","ariaLabel","tableWidth","PANEL_BORDER","dataFrame","valueRowIndex","Table","UiFindInput","allowClear","inputProps","suffix","clearUiFind","Input","trackFindFunction","TracePageSearchBar","navbarFixed","z2","TracePageSearchBarBar","TracePageSearchBarSuffix","TracePageSearchBarBtn","TracePageSearchBarBtnDisabled","TracePageSearchBarLocateBtn","navigable","nextResult","prevResult","onSearchValueChange","searchValue","searchBarSuffix","btnClass","uiFindInputInputProps","ubFlexAuto","ubJustifyEnd","createSpanLinkFactory","traceToLogsOptions","f","links","span","dataFrameRowIndex","getTimeRangeFromSpan","datasourceUid","dataSourceSettings","isSplunkDS","dataLink","tags","filterByTraceID","filterBySpanID","mapTagNamesEnabled","mappedTags","keysToCheck","defaultKeys","process","tag","keyValue","includes","expr","traceID","spanID","url","internal","getLinkForLoki","getLinkForSplunk","mapInternalLinkToExplore","internalLink","scopedVars","startMs","spanStartTimeShift","endMs","spanEndTimeShift","onClickFn","getTemplateSrv","legacyCreateSpanLinkFactory","timeShift","adjustedStartTime","floor","startTime","spanEndMs","adjustedEndTime","makeDetailSubsectionToggle","subSection","detailStates","setDetailStates","old","detailState","toggleTags","toggleProcess","toggleWarnings","toggleReferences","toggleStackTraces","toggleLogs","newDetailStates","Map","set","noop","TraceView","expandOne","expandAll","collapseOne","collapseAll","childrenToggle","childrenHiddenIDs","spanFindMatches","traceProp","toggleDetail","detailLogItemToggle","detailLogsToggle","detailProcessToggle","detailReferencesToggle","detailReferenceItemToggle","detailTagsToggle","detailWarningsToggle","detailStackTracesToggle","has","delete","DetailState","log","toggleLogItem","reference","toggleReferenceItem","useDetailState","removeHoverIndentGuideId","addHoverIndentGuideId","hoverIndentGuideIds","setHoverIndentGuideIds","newHoverIndentGuideIds","useHoverIndentGuide","viewRange","updateViewRangeTime","updateNextViewRangeTime","setViewRange","update","prevRange","end","useViewRange","spanNameColumnWidth","setSpanNameColumnWidth","slim","setSlim","datasource","focusedSpanId","createFocusSpanLink","panelState","panelsState","trace","spanId","setFocusedSpanId","changePanelState","traceId","useFocusSpanLink","traceTimeline","shouldScrollToFirstUiFindMatch","jsonData","tracesToLogs","createSpanLink","onSlimViewClicked","canCollapse","hideMap","hideSummary","onTraceGraphViewClicked","slimView","registerAccessors","scrollToFirstVisibleSpan","findMatchesIDs","focusSpan","createLinkToExternalSpan","clearShouldScrollToFirstUiFindMatch","detailToggle","setTrace","linksGetter","uiFind","search","scrollElement","focusedSpanIdForSearch","shouldDisableCollapse","allSpans","hiddenSpansIds","hasChildren","transformDataFrames","view","DataFrameView","processes","serviceName","serviceTags","spans","toArray","references","parentSpanID","refType","processID","flags","logs","l","timestamp","transformTraceDataFrame","transformTraceData","TraceViewContainer","setSearch","filterSpans","useSearch","setChildrenHiddenIDs","prevExpandedDepth","expandNextHiddenSpan","newChildrenHiddenIDs","res","depth","nearestCollapsedAncestor","curSpan","useChildrenState","setFocusedSpanIdForSearch","setSearchBarSuffix","getSearchBarSuffix","spanMatches","prevMatchedIndex","Explore","rawRange","operator","FILTER_FOR_OPERATOR","FILTER_OUT_OPERATOR","onModifyQueries","queryKeys","addQueryRow","makeAbsoluteTime","action","modifyQuery","modifier","modification","modifyQueries","changeSize","scanStart","scanStopAction","changeGraphStyle","openDrawer","getNodeGraphDataFrames","absoluteTimeUnsubsciber","AbsoluteTimeEvent","onMakeAbsoluteTime","unsubscribe","renderEmptyState","renderGraphPanel","graphResult","renderLogsVolume","loadLogsVolumeData","renderTablePanel","renderLogsPanel","renderNodeGraphPanel","showTrace","memoizedGetNodeGraphDataFrames","renderTraceViewPanel","preferredVisualisationType","showMetrics","showTable","showLogs","showNodeGraph","exploreMain","showPanels","showRichHistory","showQueryInspector","autoHeightMin","scrollRefCallback","toggleShowRichHistory","toggleShowQueryInspector","disableHeight","ErrorBoundaryAlert","compose","ExplorePaneContainerUnconnected","prevUrlQuery","urlQuery","lastSavedUrl","refreshExplore","el","exploreEvents","EventBusSrv","initialized","initialDatasource","initialQueries","initialRange","initializeExplore","removeAllListeners","cleanupPaneAction","exploreClass","getRef","ensureQueriesMemoized","ensureQueries","getTimeRangeFromUrlMemoized","getTimeRangeFromUrl","urlState","parseUrlState","urlRange","lastUsedDatasourceKeyForOrgId","orgId","getTimeRange","DEFAULT_RANGE","ExplorePaneContainer","resetExploreAction","richHistoryUpdatedAction","navModel","getNavModel","navIndex","exploreState","WrapperUnconnected","searchParams","locationService","queryParams","datasourceTitle","documentTitle","Branding","hasSplit","monadic","fn","cache","serializer","arg","cacheKey","computedValue","variadic","args","assemble","context","strategy","serialize","strategyDefault","serializerDefault","JSON","stringify","ObjectWithoutPrototypeCache","cacheDefault","module","exports","strategies","Q","getPrototypeOf","Function","Z","L","o","nn","u","X","rn","writable","clear","h","freeze","isFrozen","tn","_","U","j","O","g","S","w","m","P","M","H","A","I","R","D","F","z","getOwnPropertyDescriptor","E","N","T","C","en","on","Proxy","revocable","revoke","proxy","J","K","G","W","Symbol","B","Reflect","for","iterator","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","getOwnPropertyDescriptors","deleteProperty","un","Promise","produceWithPatches","useProxies","setUseProxies","autoFreeze","setAutoFreeze","createDraft","finishDraft","applyPatches","path","op","$","an"],"sourceRoot":""}