{"version":3,"file":"explore.476912733278e2a99729.js","mappings":"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","sources":["webpack://grafana/./public/app/features/correlations/Forms/types.ts","webpack://grafana/./node_modules/react-use/esm/useBeforeUnload.js","webpack://grafana/./public/app/features/explore/CorrelationUnsavedChangesModal.tsx","webpack://grafana/./public/app/features/explore/correlationEditLogic.ts","webpack://grafana/./public/app/features/explore/CorrelationEditorModeBar.tsx","webpack://grafana/./public/app/features/explore/ExploreActions.tsx","webpack://grafana/./node_modules/react-use/esm/useScroll.js","webpack://grafana/./public/app/features/explore/ContentOutline/ContentOutlineContext.tsx","webpack://grafana/./public/app/features/explore/ContentOutline/ContentOutlineItemButton.tsx","webpack://grafana/./public/app/features/explore/ContentOutline/ContentOutline.tsx","webpack://grafana/./public/app/features/explore/ContentOutline/ContentOutlineItem.tsx","webpack://grafana/./public/app/features/explore/CorrelationTransformationAddModal.tsx","webpack://grafana/./public/app/features/explore/CorrelationHelper.tsx","webpack://grafana/./public/app/features/explore/CustomContainer.tsx","webpack://grafana/./node_modules/re-resizable/lib/resizer.js","webpack://grafana/./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/ShortLinkButtonMenu.tsx","webpack://grafana/./public/app/features/explore/extensions/ToolbarExtensionPoint.tsx","webpack://grafana/./public/app/features/explore/useLiveTailControls.ts","webpack://grafana/./public/app/features/explore/ExploreToolbar.tsx","webpack://grafana/./public/app/features/explore/FlameGraph/FlameGraphExploreContainer.tsx","webpack://grafana/./public/app/features/explore/ElapsedTime.tsx","webpack://grafana/./public/app/features/explore/Logs/LiveLogs.tsx","webpack://grafana/./public/app/features/logs/components/InfiniteScroll.tsx","webpack://grafana/./public/app/features/explore/Logs/LogsFeedback.tsx","webpack://grafana/./public/app/features/explore/MetaInfoText.tsx","webpack://grafana/./public/app/features/explore/Logs/LogsTable.tsx","webpack://grafana/./public/app/features/explore/Logs/LogsMetaRow.tsx","webpack://grafana/./public/app/features/explore/Logs/LogsNavigationPages.tsx","webpack://grafana/./public/app/features/explore/Logs/LogsNavigation.tsx","webpack://grafana/./public/app/features/explore/Logs/LogsColumnSearch.tsx","webpack://grafana/./public/app/features/explore/Logs/LogsTableEmptyFields.tsx","webpack://grafana/./public/app/features/explore/Logs/LogsTableNavField.tsx","webpack://grafana/./public/app/features/explore/Logs/LogsTableActiveFields.tsx","webpack://grafana/./public/app/features/explore/Logs/LogsTableAvailableFields.tsx","webpack://grafana/./public/app/features/explore/Logs/LogsTableMultiSelect.tsx","webpack://grafana/./public/app/features/explore/Logs/utils/uFuzzy.ts","webpack://grafana/./public/app/features/explore/Logs/LogsTableWrap.tsx","webpack://grafana/./public/app/features/explore/SupplementaryResultError.tsx","webpack://grafana/./public/app/features/explore/Logs/LogsVolumePanel.tsx","webpack://grafana/./public/app/features/explore/Logs/utils/logsVolumeResponse.ts","webpack://grafana/./public/app/features/explore/Logs/LogsVolumePanelList.tsx","webpack://grafana/./public/app/features/explore/Logs/Logs.tsx","webpack://grafana/./public/app/features/explore/Logs/utils/LogsCrossFadeTransition.tsx","webpack://grafana/./public/app/features/explore/Logs/LogsContainer.tsx","webpack://grafana/./public/app/features/explore/Logs/LogsSamplePanel.tsx","webpack://grafana/./public/app/features/explore/NoData.tsx","webpack://grafana/./public/app/features/explore/NoDataSourceCallToAction.tsx","webpack://grafana/./public/app/features/explore/NodeGraph/NodeGraphContainer.tsx","webpack://grafana/./public/app/features/explore/QueryRows.tsx","webpack://grafana/./public/app/features/explore/PrometheusListView/RawListContainer.tsx","webpack://grafana/./public/app/features/explore/RawPrometheus/RawPrometheusContainer.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/RichHistorySettingsTab.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/Table/TableContainer.tsx","webpack://grafana/./public/app/features/explore/TraceView/TraceViewContainer.tsx","webpack://grafana/./public/app/features/explore/Explore.tsx","webpack://grafana/./public/app/features/explore/ExplorePaneContainer.tsx","webpack://grafana/./public/app/features/explore/hooks/useExplorePageTitle.ts","webpack://grafana/./public/app/features/explore/hooks/useKeyboardShortcuts.ts","webpack://grafana/./public/app/features/explore/hooks/useSplitSizeUpdater.ts","webpack://grafana/./public/app/features/explore/hooks/useTimeSrvFix.ts","webpack://grafana/./public/app/features/explore/ExplorePage.tsx","webpack://grafana/./node_modules/react-use/esm/useInterval.js"],"sourcesContent":["import { SupportedTransformationType } from '@grafana/data';\nimport { t } from 'app/core/internationalization';\n\nimport { CorrelationConfig } from '../types';\n\nexport interface FormDTO {\n sourceUID: string;\n targetUID: string;\n label: string;\n description: string;\n config: CorrelationConfig;\n}\n\nexport type EditFormDTO = Omit;\n\nexport type TransformationDTO = {\n type: SupportedTransformationType;\n expression?: string;\n mapValue?: string;\n};\n\nexport interface TransformationFieldDetails {\n show: boolean;\n required?: boolean;\n helpText?: string;\n}\n\ninterface SupportedTransformationTypeDetails {\n label: string;\n value: SupportedTransformationType;\n description?: string;\n expressionDetails: TransformationFieldDetails;\n mapValueDetails: TransformationFieldDetails;\n}\n\nexport function getSupportedTransTypeDetails(\n transType: SupportedTransformationType\n): SupportedTransformationTypeDetails {\n switch (transType) {\n case SupportedTransformationType.Logfmt:\n return {\n label: t('correlations.trans-details.logfmt-label', 'Logfmt'),\n value: SupportedTransformationType.Logfmt,\n description: t(\n 'correlations.trans-details.logfmt-description',\n 'Parse provided field with logfmt to get variables'\n ),\n expressionDetails: { show: false },\n mapValueDetails: { show: false },\n };\n case SupportedTransformationType.Regex:\n return {\n label: t('correlations.trans-details.regex-label', 'Regular expression'),\n value: SupportedTransformationType.Regex,\n description: t(\n 'correlations.trans-details.regex-description',\n 'Field will be parsed with regex. Use named capture groups to return multiple variables, or a single unnamed capture group to add variable to named map value. Regex is case insensitive.'\n ),\n expressionDetails: {\n show: true,\n required: true,\n helpText: t(\n 'correlations.trans-details.regex-expression',\n 'Use capture groups to extract a portion of the field.'\n ),\n },\n mapValueDetails: {\n show: true,\n required: false,\n helpText: t(\n 'correlations.trans-details.regex-map-values',\n 'Defines the name of the variable if the capture group is not named.'\n ),\n },\n };\n default:\n return {\n label: transType,\n value: transType,\n expressionDetails: { show: false },\n mapValueDetails: { show: false },\n };\n }\n}\n\nexport const getTransformOptions = () => {\n return Object.values(SupportedTransformationType).map((transformationType) => {\n const transType = getSupportedTransTypeDetails(transformationType);\n return {\n label: transType.label,\n value: transType.value,\n description: transType.description,\n };\n });\n};\n","import { useCallback, useEffect } from 'react';\nimport { off, on } from './misc/util';\nvar useBeforeUnload = function (enabled, message) {\n if (enabled === void 0) { enabled = true; }\n var handler = useCallback(function (event) {\n var finalEnabled = typeof enabled === 'function' ? enabled() : true;\n if (!finalEnabled) {\n return;\n }\n event.preventDefault();\n if (message) {\n event.returnValue = message;\n }\n return message;\n }, [enabled, message]);\n useEffect(function () {\n if (!enabled) {\n return;\n }\n on(window, 'beforeunload', handler);\n return function () { return off(window, 'beforeunload', handler); };\n }, [enabled, handler]);\n};\nexport default useBeforeUnload;\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { Button, Modal } from '@grafana/ui';\n\ninterface UnsavedChangesModalProps {\n message: string;\n onDiscard: () => void;\n onCancel: () => void;\n onSave: () => void;\n}\n\nexport const CorrelationUnsavedChangesModal = ({ onSave, onDiscard, onCancel, message }: UnsavedChangesModalProps) => {\n return (\n \n
{message}
\n \n \n \n \n \n \n );\n};\n","import { template } from 'lodash';\n\nimport { CORRELATION_EDITOR_POST_CONFIRM_ACTION } from 'app/types';\n\nenum CONSEQUENCES {\n SOURCE_TARGET_CHANGE = 'cause the query in the right pane to be re-ran and links added to that data',\n FULL_QUERY_LOSS = 'lose the changed query',\n FULL_CORR_LOSS = 'cause the correlation in progress to be lost',\n INVALID_VAR = 'remove the variables, and your changed query may no longer be valid',\n}\n\n// returns a string if the modal should show, with what the message string should be\n// returns undefined if the modal shouldn't show\nexport const showModalMessage = (\n action: CORRELATION_EDITOR_POST_CONFIRM_ACTION,\n isActionLeft: boolean,\n dirtyCorrelation: boolean,\n dirtyQueryEditor: boolean\n) => {\n const messageTemplate = template(\n '<%= actionStr %> will <%= consequenceStr %>. Would you like to save before continuing?'\n );\n let actionStr = '';\n let consequenceStr = '';\n\n // dirty correlation message always takes priority over dirty query\n if (action === CORRELATION_EDITOR_POST_CONFIRM_ACTION.CLOSE_PANE) {\n actionStr = 'Closing the pane';\n if (isActionLeft) {\n if (dirtyCorrelation) {\n consequenceStr = CONSEQUENCES.FULL_CORR_LOSS;\n } else if (dirtyQueryEditor) {\n consequenceStr = CONSEQUENCES.SOURCE_TARGET_CHANGE;\n } else {\n return undefined;\n }\n } else {\n // right pane close\n if (dirtyCorrelation) {\n consequenceStr = CONSEQUENCES.FULL_CORR_LOSS;\n } else if (dirtyQueryEditor) {\n consequenceStr = CONSEQUENCES.FULL_QUERY_LOSS;\n } else {\n return undefined;\n }\n }\n } else if (action === CORRELATION_EDITOR_POST_CONFIRM_ACTION.CHANGE_DATASOURCE) {\n actionStr = 'Changing the datasource';\n if (isActionLeft) {\n if (dirtyCorrelation) {\n consequenceStr = CONSEQUENCES.FULL_CORR_LOSS;\n } else {\n return undefined;\n }\n } else {\n // right datasource change\n if (dirtyQueryEditor) {\n consequenceStr = CONSEQUENCES.FULL_QUERY_LOSS;\n } else {\n return undefined;\n }\n }\n } else if (action === CORRELATION_EDITOR_POST_CONFIRM_ACTION.CLOSE_EDITOR) {\n actionStr = 'Closing the editor';\n if (dirtyCorrelation) {\n consequenceStr = CONSEQUENCES.FULL_CORR_LOSS;\n } else if (dirtyQueryEditor) {\n consequenceStr = CONSEQUENCES.INVALID_VAR;\n } else {\n return undefined;\n }\n }\n return messageTemplate({ actionStr, consequenceStr });\n};\n","import { css } from '@emotion/css';\nimport React, { useEffect, useState } from 'react';\nimport { Prompt } from 'react-router-dom';\nimport { useBeforeUnload, useUnmount } from 'react-use';\n\nimport { GrafanaTheme2, colorManipulator } from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Button, HorizontalGroup, Icon, Tooltip, useStyles2 } from '@grafana/ui';\nimport { CORRELATION_EDITOR_POST_CONFIRM_ACTION, ExploreItemState, useDispatch, useSelector } from 'app/types';\n\nimport { CorrelationUnsavedChangesModal } from './CorrelationUnsavedChangesModal';\nimport { showModalMessage } from './correlationEditLogic';\nimport { saveCurrentCorrelation } from './state/correlations';\nimport { changeDatasource } from './state/datasource';\nimport { changeCorrelationHelperData } from './state/explorePane';\nimport { changeCorrelationEditorDetails, splitClose } from './state/main';\nimport { runQueries } from './state/query';\nimport { selectCorrelationDetails, selectIsHelperShowing } from './state/selectors';\n\nexport const CorrelationEditorModeBar = ({ panes }: { panes: Array<[string, ExploreItemState]> }) => {\n const dispatch = useDispatch();\n const styles = useStyles2(getStyles);\n const correlationDetails = useSelector(selectCorrelationDetails);\n const isHelperShowing = useSelector(selectIsHelperShowing);\n const [saveMessage, setSaveMessage] = useState(undefined); // undefined means do not show\n\n // handle refreshing and closing the tab\n useBeforeUnload(correlationDetails?.correlationDirty || false, 'Save correlation?');\n useBeforeUnload(\n (!correlationDetails?.correlationDirty && correlationDetails?.queryEditorDirty) || false,\n 'The query editor was changed. Save correlation before continuing?'\n );\n\n // decide if we are displaying prompt, perform action if not\n useEffect(() => {\n if (correlationDetails?.isExiting) {\n const { correlationDirty, queryEditorDirty } = correlationDetails;\n let isActionLeft = undefined;\n let action = undefined;\n if (correlationDetails.postConfirmAction) {\n isActionLeft = correlationDetails.postConfirmAction.isActionLeft;\n action = correlationDetails.postConfirmAction.action;\n } else {\n // closing the editor only\n action = CORRELATION_EDITOR_POST_CONFIRM_ACTION.CLOSE_EDITOR;\n isActionLeft = false;\n }\n\n const modalMessage = showModalMessage(action, isActionLeft, correlationDirty, queryEditorDirty);\n if (modalMessage !== undefined) {\n setSaveMessage(modalMessage);\n } else {\n // if no prompt, perform action\n if (\n action === CORRELATION_EDITOR_POST_CONFIRM_ACTION.CHANGE_DATASOURCE &&\n correlationDetails.postConfirmAction\n ) {\n const { exploreId, changeDatasourceUid } = correlationDetails?.postConfirmAction;\n if (exploreId && changeDatasourceUid) {\n dispatch(\n changeDatasource({ exploreId, datasource: changeDatasourceUid, options: { importQueries: true } })\n );\n dispatch(\n changeCorrelationEditorDetails({\n isExiting: false,\n })\n );\n }\n } else if (\n action === CORRELATION_EDITOR_POST_CONFIRM_ACTION.CLOSE_PANE &&\n correlationDetails.postConfirmAction\n ) {\n const { exploreId } = correlationDetails?.postConfirmAction;\n if (exploreId !== undefined) {\n dispatch(splitClose(exploreId));\n dispatch(\n changeCorrelationEditorDetails({\n isExiting: false,\n })\n );\n }\n } else if (action === CORRELATION_EDITOR_POST_CONFIRM_ACTION.CLOSE_EDITOR) {\n dispatch(\n changeCorrelationEditorDetails({\n editorMode: false,\n })\n );\n }\n }\n }\n }, [correlationDetails, dispatch, isHelperShowing]);\n\n // clear data when unmounted\n useUnmount(() => {\n dispatch(\n changeCorrelationEditorDetails({\n editorMode: false,\n isExiting: false,\n correlationDirty: false,\n label: undefined,\n description: undefined,\n canSave: false,\n })\n );\n\n panes.forEach((pane) => {\n dispatch(\n changeCorrelationHelperData({\n exploreId: pane[0],\n correlationEditorHelperData: undefined,\n })\n );\n dispatch(runQueries({ exploreId: pane[0] }));\n });\n });\n\n const resetEditor = () => {\n dispatch(\n changeCorrelationEditorDetails({\n editorMode: true,\n isExiting: false,\n correlationDirty: false,\n label: undefined,\n description: undefined,\n canSave: false,\n })\n );\n\n panes.forEach((pane) => {\n dispatch(\n changeCorrelationHelperData({\n exploreId: pane[0],\n correlationEditorHelperData: undefined,\n })\n );\n dispatch(runQueries({ exploreId: pane[0] }));\n });\n };\n\n const closePane = (exploreId: string) => {\n setSaveMessage(undefined);\n dispatch(splitClose(exploreId));\n reportInteraction('grafana_explore_split_view_closed');\n };\n\n const changeDatasourcePostAction = (exploreId: string, datasourceUid: string) => {\n setSaveMessage(undefined);\n dispatch(changeDatasource({ exploreId, datasource: datasourceUid, options: { importQueries: true } }));\n };\n\n const saveCorrelationPostAction = (skipPostConfirmAction: boolean) => {\n dispatch(\n saveCurrentCorrelation(\n correlationDetails?.label,\n correlationDetails?.description,\n correlationDetails?.transformations\n )\n );\n if (!skipPostConfirmAction && correlationDetails?.postConfirmAction !== undefined) {\n const { exploreId, action, changeDatasourceUid } = correlationDetails?.postConfirmAction;\n if (action === CORRELATION_EDITOR_POST_CONFIRM_ACTION.CLOSE_PANE) {\n closePane(exploreId);\n resetEditor();\n } else if (\n action === CORRELATION_EDITOR_POST_CONFIRM_ACTION.CHANGE_DATASOURCE &&\n changeDatasourceUid !== undefined\n ) {\n changeDatasource({ exploreId, datasource: changeDatasourceUid });\n resetEditor();\n }\n } else {\n dispatch(changeCorrelationEditorDetails({ editorMode: false, correlationDirty: false, isExiting: false }));\n }\n };\n\n return (\n <>\n {/* Handle navigating outside of Explore */}\n {\n if (\n location.pathname !== '/explore' &&\n (correlationDetails?.editorMode || false) &&\n (correlationDetails?.correlationDirty || false)\n ) {\n return 'You have unsaved correlation data. Continue?';\n } else {\n return true;\n }\n }}\n />\n\n {saveMessage !== undefined && (\n {\n if (correlationDetails?.postConfirmAction !== undefined) {\n const { exploreId, action, changeDatasourceUid } = correlationDetails?.postConfirmAction;\n if (action === CORRELATION_EDITOR_POST_CONFIRM_ACTION.CLOSE_PANE) {\n closePane(exploreId);\n } else if (\n action === CORRELATION_EDITOR_POST_CONFIRM_ACTION.CHANGE_DATASOURCE &&\n changeDatasourceUid !== undefined\n ) {\n changeDatasourcePostAction(exploreId, changeDatasourceUid);\n }\n dispatch(changeCorrelationEditorDetails({ isExiting: false }));\n } else {\n // exit correlations mode\n // if we are discarding the in progress correlation, reset everything\n // this modal only shows if the editorMode is false, so we just need to update the dirty state\n dispatch(\n changeCorrelationEditorDetails({\n editorMode: false,\n correlationDirty: false,\n isExiting: false,\n })\n );\n }\n }}\n onCancel={() => {\n // if we are cancelling the exit, set the editor mode back to true and hide the prompt\n dispatch(changeCorrelationEditorDetails({ isExiting: false }));\n setSaveMessage(undefined);\n }}\n onSave={() => {\n saveCorrelationPostAction(false);\n }}\n message={saveMessage}\n />\n )}\n
\n \n \n \n \n {\n saveCorrelationPostAction(true);\n }}\n >\n Save\n \n {\n dispatch(changeCorrelationEditorDetails({ isExiting: true }));\n reportInteraction('grafana_explore_correlation_editor_exit_pressed');\n }}\n >\n Exit correlation editor\n \n \n
\n \n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const contrastColor = theme.colors.getContrastText(theme.colors.primary.main);\n const lighterBackgroundColor = colorManipulator.lighten(theme.colors.primary.main, 0.1);\n const darkerBackgroundColor = colorManipulator.darken(theme.colors.primary.main, 0.2);\n\n const disabledColor = colorManipulator.darken(contrastColor, 0.2);\n\n return {\n correlationEditorTop: css({\n backgroundColor: theme.colors.primary.main,\n marginTop: '3px',\n padding: theme.spacing(1),\n }),\n iconColor: css({\n color: contrastColor,\n }),\n buttonColor: css({\n color: contrastColor,\n borderColor: contrastColor,\n '&:hover': {\n color: contrastColor,\n borderColor: contrastColor,\n backgroundColor: lighterBackgroundColor,\n },\n }),\n // important needed to override disabled state styling\n disabledButtonColor: css({\n color: `${disabledColor} !important`,\n backgroundColor: `${darkerBackgroundColor} !important`,\n }),\n };\n};\n","import { useRegisterActions, useKBar, Action, Priority } from 'kbar';\nimport { useEffect, useState } from 'react';\n\nimport { config } from '@grafana/runtime';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource';\nimport { AccessControlAction, useDispatch, useSelector } from 'app/types';\n\nimport { splitOpen, splitClose, changeCorrelationEditorDetails } from './state/main';\nimport { runQueries } from './state/query';\nimport { isSplit, selectPanes } from './state/selectors';\n\n// FIXME: this should use the new IDs\nexport const ExploreActions = () => {\n const [actions, setActions] = useState([]);\n const { query } = useKBar();\n const dispatch = useDispatch();\n const panes = useSelector(selectPanes);\n const splitted = useSelector(isSplit);\n\n const canWriteCorrelations = contextSrv.hasPermission(AccessControlAction.DataSourcesWrite);\n\n useEffect(() => {\n const keys = Object.keys(panes);\n const exploreSection = {\n name: 'Explore',\n priority: Priority.HIGH + 1,\n };\n\n const actionsArr: Action[] = [];\n\n if (splitted) {\n actionsArr.push({\n id: 'explore/run-query-left',\n name: 'Run query (left)',\n keywords: 'query left',\n perform: () => {\n dispatch(runQueries({ exploreId: keys[0] }));\n },\n section: exploreSection,\n });\n if ([panes[1]]) {\n // we should always have the right exploreId if split\n actionsArr.push({\n id: 'explore/run-query-right',\n name: 'Run query (right)',\n keywords: 'query right',\n perform: () => {\n dispatch(runQueries({ exploreId: keys[1] }));\n },\n section: exploreSection,\n });\n actionsArr.push({\n id: 'explore/split-view-close-left',\n name: 'Close split view left',\n keywords: 'split',\n perform: () => {\n dispatch(splitClose(keys[0]));\n },\n section: exploreSection,\n });\n actionsArr.push({\n id: 'explore/split-view-close-right',\n name: 'Close split view right',\n keywords: 'split',\n perform: () => {\n dispatch(splitClose(keys[1]));\n },\n section: exploreSection,\n });\n }\n } else {\n // command palette doesn't know what pane we're in, only show option if not split and no datasource is mixed\n const hasMixed = Object.values(panes).some((pane) => {\n return pane?.datasourceInstance?.uid === MIXED_DATASOURCE_NAME;\n });\n\n if (config.featureToggles.correlations && canWriteCorrelations && !hasMixed) {\n actionsArr.push({\n id: 'explore/correlations-editor',\n name: 'Correlations editor',\n perform: () => {\n dispatch(changeCorrelationEditorDetails({ editorMode: true }));\n dispatch(runQueries({ exploreId: keys[0] }));\n },\n section: exploreSection,\n });\n }\n\n actionsArr.push({\n id: 'explore/run-query',\n name: 'Run query',\n keywords: 'query',\n perform: () => {\n dispatch(runQueries({ exploreId: keys[0] }));\n },\n section: exploreSection,\n });\n actionsArr.push({\n id: 'explore/split-view-open',\n name: 'Open split view',\n keywords: 'split',\n perform: () => {\n dispatch(splitOpen());\n },\n section: exploreSection,\n });\n }\n setActions(actionsArr);\n }, [panes, splitted, query, dispatch, canWriteCorrelations]);\n\n useRegisterActions(!query ? [] : actions, [actions, query]);\n\n return null;\n};\n","import { useEffect } from 'react';\nimport useRafState from './useRafState';\nimport { off, on } from './misc/util';\nvar useScroll = function (ref) {\n if (process.env.NODE_ENV === 'development') {\n if (typeof ref !== 'object' || typeof ref.current === 'undefined') {\n console.error('`useScroll` expects a single ref argument.');\n }\n }\n var _a = useRafState({\n x: 0,\n y: 0,\n }), state = _a[0], setState = _a[1];\n useEffect(function () {\n var handler = function () {\n if (ref.current) {\n setState({\n x: ref.current.scrollLeft,\n y: ref.current.scrollTop,\n });\n }\n };\n if (ref.current) {\n on(ref.current, 'scroll', handler, {\n capture: false,\n passive: true,\n });\n }\n return function () {\n if (ref.current) {\n off(ref.current, 'scroll', handler);\n }\n };\n }, [ref]);\n return state;\n};\nexport default useScroll;\n","import { uniqueId } from 'lodash';\nimport React, { useState, useContext, createContext, ReactNode, useCallback } from 'react';\n\nimport { ContentOutlineItemBaseProps } from './ContentOutlineItem';\n\nexport interface ContentOutlineItemContextProps extends ContentOutlineItemBaseProps {\n id: string;\n ref: HTMLElement | null;\n}\n\ntype RegisterFunction = ({ title, icon, ref }: Omit) => string;\n\nexport interface ContentOutlineContextProps {\n outlineItems: ContentOutlineItemContextProps[];\n register: RegisterFunction;\n unregister: (id: string) => void;\n}\n\nconst ContentOutlineContext = createContext(undefined);\n\nexport const ContentOutlineContextProvider = ({ children }: { children: ReactNode }) => {\n const [outlineItems, setOutlineItems] = useState([]);\n\n const register: RegisterFunction = useCallback(({ title, icon, ref }) => {\n const id = uniqueId(`${title}-${icon}_`);\n\n setOutlineItems((prevItems) => {\n const updatedItems = [...prevItems, { id, title, icon, ref }];\n\n return updatedItems.sort((a, b) => {\n if (a.ref && b.ref) {\n const diff = a.ref.compareDocumentPosition(b.ref);\n if (diff === Node.DOCUMENT_POSITION_PRECEDING) {\n return 1;\n } else if (diff === Node.DOCUMENT_POSITION_FOLLOWING) {\n return -1;\n }\n }\n return 0;\n });\n });\n\n return id;\n }, []);\n\n const unregister = useCallback((id: string) => {\n setOutlineItems((prevItems) => prevItems.filter((item) => item.id !== id));\n }, []);\n\n return (\n \n {children}\n \n );\n};\n\nexport function useContentOutlineContext() {\n const ctx = useContext(ContentOutlineContext);\n\n if (!ctx) {\n throw new Error('useContentOutlineContext must be used within a ContentOutlineContextProvider');\n }\n return ctx;\n}\n","import { cx, css } from '@emotion/css';\nimport React, { ButtonHTMLAttributes } from 'react';\n\nimport { IconName, isIconName, GrafanaTheme2 } from '@grafana/data';\nimport { Icon, useStyles2, Tooltip } from '@grafana/ui';\n\ntype CommonProps = {\n title?: string;\n icon: string;\n tooltip?: string;\n className?: string;\n isActive?: boolean;\n};\n\nexport type ContentOutlineItemButtonProps = CommonProps & ButtonHTMLAttributes;\n\nexport function ContentOutlineItemButton({\n title,\n icon,\n tooltip,\n className,\n isActive,\n ...rest\n}: ContentOutlineItemButtonProps) {\n const styles = useStyles2(getStyles);\n\n const buttonStyles = cx(styles.button, className);\n\n const body = (\n \n {renderIcon(icon)}\n {title}\n \n );\n\n return tooltip ? (\n \n {body}\n \n ) : (\n body\n );\n}\n\nfunction renderIcon(icon: IconName | React.ReactNode) {\n if (!icon) {\n return null;\n }\n\n if (isIconName(icon)) {\n return ;\n }\n\n return icon;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n button: css({\n label: 'content-outline-item-button',\n display: 'flex',\n flexGrow: 1,\n alignItems: 'center',\n height: theme.spacing(theme.components.height.md),\n padding: theme.spacing(0, 1),\n gap: theme.spacing(1),\n color: theme.colors.text.secondary,\n background: 'transparent',\n border: 'none',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n '&:hover': {\n color: theme.colors.text.primary,\n background: theme.colors.background.secondary,\n textDecoration: 'underline',\n },\n }),\n active: css({\n backgroundColor: theme.colors.background.secondary,\n borderTopRightRadius: theme.shape.radius.default,\n borderBottomRightRadius: theme.shape.radius.default,\n position: 'relative',\n\n '&::before': {\n backgroundImage: theme.colors.gradients.brandVertical,\n borderRadius: theme.shape.radius.default,\n content: '\" \"',\n display: 'block',\n height: '100%',\n position: 'absolute',\n transform: 'translateX(-50%)',\n width: theme.spacing(0.5),\n left: '2px',\n },\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useToggle, useScroll } from 'react-use';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime';\nimport { useStyles2, PanelContainer, CustomScrollbar } from '@grafana/ui';\n\nimport { useContentOutlineContext } from './ContentOutlineContext';\nimport { ContentOutlineItemButton } from './ContentOutlineItemButton';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n wrapper: css({\n label: 'wrapper',\n position: 'relative',\n display: 'flex',\n justifyContent: 'center',\n marginRight: theme.spacing(1),\n height: '100%',\n backgroundColor: theme.colors.background.primary,\n }),\n content: css({\n label: 'content',\n top: 0,\n }),\n buttonStyles: css({\n textAlign: 'left',\n width: '100%',\n padding: theme.spacing(0, 1.5),\n }),\n };\n};\n\nexport function ContentOutline({ scroller, panelId }: { scroller: HTMLElement | undefined; panelId: string }) {\n const { outlineItems } = useContentOutlineContext();\n const [expanded, toggleExpanded] = useToggle(false);\n const [activeItemId, setActiveItemId] = useState(outlineItems[0]?.id);\n const styles = useStyles2((theme) => getStyles(theme));\n const scrollerRef = useRef(scroller || null);\n const { y: verticalScroll } = useScroll(scrollerRef);\n\n const scrollIntoView = (ref: HTMLElement | null, buttonTitle: string) => {\n let scrollValue = 0;\n let el: HTMLElement | null | undefined = ref;\n\n do {\n scrollValue += el?.offsetTop || 0;\n el = el?.offsetParent as HTMLElement;\n } while (el && el !== scroller);\n\n scroller?.scroll({\n top: scrollValue,\n behavior: 'smooth',\n });\n\n reportInteraction('explore_toolbar_contentoutline_clicked', {\n item: 'select_section',\n type: buttonTitle,\n });\n };\n\n const toggle = () => {\n toggleExpanded();\n reportInteraction('explore_toolbar_contentoutline_clicked', {\n item: 'outline',\n type: expanded ? 'minimize' : 'expand',\n });\n };\n\n useEffect(() => {\n const activeItem = outlineItems.find((item) => {\n const top = item?.ref?.getBoundingClientRect().top;\n\n if (!top) {\n return false;\n }\n\n return top >= 0;\n });\n\n if (!activeItem) {\n return;\n }\n\n setActiveItemId(activeItem.id);\n }, [outlineItems, verticalScroll]);\n\n return (\n \n \n
\n \n\n {outlineItems.map((item) => {\n return (\n scrollIntoView(item.ref, item.title)}\n tooltip={!expanded ? item.title : undefined}\n isActive={activeItemId === item.id}\n />\n );\n })}\n
\n
\n
\n );\n}\n","import React, { useEffect, useRef, ReactNode } from 'react';\n\nimport { useContentOutlineContext } from './ContentOutlineContext';\n\nexport interface ContentOutlineItemBaseProps {\n title: string;\n icon: string;\n}\n\ninterface ContentOutlineItemProps extends ContentOutlineItemBaseProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function ContentOutlineItem({ title, icon, children, className }: ContentOutlineItemProps) {\n const { register, unregister } = useContentOutlineContext();\n const ref = useRef(null);\n\n useEffect(() => {\n // When the component mounts, register it and get its unique ID.\n const id = register({ title: title, icon: icon, ref: ref.current });\n\n // When the component unmounts, unregister it using its unique ID.\n return () => unregister(id);\n }, [title, icon, register, unregister]);\n\n return (\n
\n {children}\n
\n );\n}\n","import { css } from '@emotion/css';\nimport React, { useId, useState, useMemo, useEffect } from 'react';\nimport Highlighter from 'react-highlight-words';\nimport { useForm } from 'react-hook-form';\n\nimport { DataLinkTransformationConfig, ScopedVars } from '@grafana/data';\nimport { Button, Field, Icon, Input, InputControl, Label, Modal, Select, Tooltip, Stack } from '@grafana/ui';\n\nimport {\n getSupportedTransTypeDetails,\n getTransformOptions,\n TransformationFieldDetails,\n} from '../correlations/Forms/types';\nimport { getTransformationVars } from '../correlations/transformations';\n\ninterface CorrelationTransformationAddModalProps {\n onCancel: () => void;\n onSave: (transformation: DataLinkTransformationConfig) => void;\n fieldList: Record;\n transformationToEdit?: DataLinkTransformationConfig;\n}\n\ninterface ShowFormFields {\n expressionDetails: TransformationFieldDetails;\n mapValueDetails: TransformationFieldDetails;\n}\n\nconst LabelWithTooltip = ({ label, tooltipText }: { label: string; tooltipText: string }) => (\n \n \n \n \n \n \n);\n\nexport const CorrelationTransformationAddModal = ({\n onSave,\n onCancel,\n fieldList,\n transformationToEdit,\n}: CorrelationTransformationAddModalProps) => {\n const [exampleValue, setExampleValue] = useState(undefined);\n const [transformationVars, setTransformationVars] = useState({});\n const [formFieldsVis, setFormFieldsVis] = useState({\n mapValueDetails: { show: false },\n expressionDetails: { show: false },\n });\n const [isExpValid, setIsExpValid] = useState(false); // keep the highlighter from erroring on bad expressions\n const [validToSave, setValidToSave] = useState(false);\n const { getValues, control, register, watch } = useForm({\n defaultValues: useMemo(() => {\n if (transformationToEdit) {\n const exampleVal = fieldList[transformationToEdit?.field!];\n setExampleValue(exampleVal);\n if (transformationToEdit?.expression) {\n setIsExpValid(true);\n }\n const transformationTypeDetails = getSupportedTransTypeDetails(transformationToEdit?.type!);\n setFormFieldsVis({\n mapValueDetails: transformationTypeDetails.mapValueDetails,\n expressionDetails: transformationTypeDetails.expressionDetails,\n });\n\n const transformationVars = getTransformationVars(\n {\n type: transformationToEdit?.type!,\n expression: transformationToEdit?.expression,\n mapValue: transformationToEdit?.mapValue,\n },\n exampleVal || '',\n transformationToEdit?.field!\n );\n setTransformationVars({ ...transformationVars });\n setValidToSave(true);\n return {\n type: transformationToEdit?.type,\n field: transformationToEdit?.field,\n mapValue: transformationToEdit?.mapValue,\n expression: transformationToEdit?.expression,\n };\n } else {\n return undefined;\n }\n }, [fieldList, transformationToEdit]),\n });\n const id = useId();\n\n useEffect(() => {\n const subscription = watch((formValues) => {\n const expression = formValues.expression;\n let isExpressionValid = false;\n if (expression !== undefined) {\n isExpressionValid = true;\n try {\n new RegExp(expression);\n } catch (e) {\n isExpressionValid = false;\n }\n } else {\n isExpressionValid = !formFieldsVis.expressionDetails.show;\n }\n setIsExpValid(isExpressionValid);\n let transKeys = [];\n if (formValues.type) {\n const transformationVars = getTransformationVars(\n {\n type: formValues.type,\n expression: isExpressionValid ? expression : '',\n mapValue: formValues.mapValue,\n },\n fieldList[formValues.field!] || '',\n formValues.field!\n );\n\n transKeys = Object.keys(transformationVars);\n setTransformationVars(transKeys.length > 0 ? { ...transformationVars } : {});\n }\n\n if (transKeys.length === 0 || !isExpressionValid) {\n setValidToSave(false);\n } else {\n setValidToSave(true);\n }\n });\n return () => subscription.unsubscribe();\n }, [fieldList, formFieldsVis.expressionDetails.show, watch]);\n\n return (\n \n

\n A transformation extracts variables out of a single field. These variables will be available along with your\n field variables.\n

\n \n (\n {\n if (value.value) {\n onChange(value.value);\n setExampleValue(fieldList[value.value]);\n }\n }}\n options={Object.entries(fieldList).map((entry) => {\n return { label: entry[0], value: entry[0] };\n })}\n aria-label=\"field\"\n />\n )}\n name={`field` as const}\n />\n \n\n {exampleValue && (\n <>\n
\n            \n          
\n \n (\n {\n onChange(value.value);\n const transformationTypeDetails = getSupportedTransTypeDetails(value.value!);\n setFormFieldsVis({\n mapValueDetails: transformationTypeDetails.mapValueDetails,\n expressionDetails: transformationTypeDetails.expressionDetails,\n });\n }}\n options={getTransformOptions()}\n aria-label=\"type\"\n />\n )}\n name={`type` as const}\n />\n \n {formFieldsVis.expressionDetails.show && (\n \n ) : (\n 'Expression'\n )\n }\n htmlFor={`${id}-expression`}\n required={formFieldsVis.expressionDetails.required}\n >\n \n \n )}\n {formFieldsVis.mapValueDetails.show && (\n \n ) : (\n 'Variable Name'\n )\n }\n htmlFor={`${id}-mapValue`}\n >\n \n \n )}\n {Object.entries(transformationVars).length > 0 && (\n <>\n This transformation will add the following variables:\n
\n                {Object.entries(transformationVars).map((entry) => {\n                  return `\\$\\{${entry[0]}\\} = ${entry[1]?.value}\\n`;\n                })}\n              
\n \n )}\n \n )}\n \n \n \n \n \n );\n};\n","import { css } from '@emotion/css';\nimport React, { useState, useEffect, useId } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useAsync } from 'react-use';\n\nimport { DataLinkTransformationConfig, ExploreCorrelationHelperData, GrafanaTheme2 } from '@grafana/data';\nimport {\n Collapse,\n Alert,\n Field,\n Input,\n Button,\n Card,\n IconButton,\n useStyles2,\n DeleteButton,\n Tooltip,\n Icon,\n Stack,\n} from '@grafana/ui';\nimport { useDispatch, useSelector } from 'app/types';\n\nimport { getTransformationVars } from '../correlations/transformations';\nimport { generateDefaultLabel } from '../correlations/utils';\n\nimport { CorrelationTransformationAddModal } from './CorrelationTransformationAddModal';\nimport { changeCorrelationHelperData } from './state/explorePane';\nimport { changeCorrelationEditorDetails } from './state/main';\nimport { selectCorrelationDetails, selectPanes } from './state/selectors';\n\ninterface Props {\n exploreId: string;\n correlations: ExploreCorrelationHelperData;\n}\n\ninterface FormValues {\n label: string;\n description: string;\n}\n\nexport const CorrelationHelper = ({ exploreId, correlations }: Props) => {\n const dispatch = useDispatch();\n const styles = useStyles2(getStyles);\n const panes = useSelector(selectPanes);\n const panesVals = Object.values(panes);\n const { value: defaultLabel, loading: loadingLabel } = useAsync(\n async () => await generateDefaultLabel(panesVals[0]!, panesVals[1]!),\n [\n panesVals[0]?.datasourceInstance,\n panesVals[0]?.queries[0].datasource,\n panesVals[1]?.datasourceInstance,\n panesVals[1]?.queries[0].datasource,\n ]\n );\n\n const { register, watch, getValues, setValue } = useForm();\n const [isLabelDescOpen, setIsLabelDescOpen] = useState(false);\n const [isTransformOpen, setIsTransformOpen] = useState(false);\n const [showTransformationAddModal, setShowTransformationAddModal] = useState(false);\n const [transformations, setTransformations] = useState([]);\n const [transformationIdxToEdit, setTransformationIdxToEdit] = useState(undefined);\n const correlationDetails = useSelector(selectCorrelationDetails);\n const id = useId();\n\n // only fire once on mount to allow save button to enable / disable when unmounted\n useEffect(() => {\n dispatch(changeCorrelationEditorDetails({ canSave: true }));\n return () => {\n dispatch(changeCorrelationEditorDetails({ canSave: false }));\n };\n }, [dispatch]);\n\n useEffect(() => {\n if (\n !loadingLabel &&\n defaultLabel !== undefined &&\n !correlationDetails?.correlationDirty &&\n getValues('label') !== ''\n ) {\n setValue('label', defaultLabel);\n }\n }, [correlationDetails?.correlationDirty, defaultLabel, getValues, loadingLabel, setValue]);\n\n useEffect(() => {\n const subscription = watch((value) => {\n let dirty = correlationDetails?.correlationDirty || false;\n let description = value.description || '';\n if (!dirty && (value.label !== defaultLabel || description !== '')) {\n dirty = true;\n } else if (dirty && value.label === defaultLabel && description.trim() === '') {\n dirty = false;\n }\n dispatch(\n changeCorrelationEditorDetails({ label: value.label, description: value.description, correlationDirty: dirty })\n );\n });\n return () => subscription.unsubscribe();\n }, [correlationDetails?.correlationDirty, defaultLabel, dispatch, watch]);\n\n useEffect(() => {\n const dirty =\n !correlationDetails?.correlationDirty && transformations.length > 0 ? true : correlationDetails?.correlationDirty;\n dispatch(changeCorrelationEditorDetails({ transformations: transformations, correlationDirty: dirty }));\n let transVarRecords: Record = {};\n transformations.forEach((transformation) => {\n const transformationVars = getTransformationVars(\n {\n type: transformation.type,\n expression: transformation.expression,\n mapValue: transformation.mapValue,\n },\n correlations.vars[transformation.field!],\n transformation.field!\n );\n\n Object.keys(transformationVars).forEach((key) => {\n transVarRecords[key] = transformationVars[key]?.value;\n });\n });\n\n dispatch(\n changeCorrelationHelperData({\n exploreId: exploreId,\n correlationEditorHelperData: {\n resultField: correlations.resultField,\n origVars: correlations.origVars,\n vars: { ...correlations.origVars, ...transVarRecords },\n },\n })\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch, transformations]);\n\n return (\n <>\n {showTransformationAddModal && (\n {\n setTransformationIdxToEdit(undefined);\n setShowTransformationAddModal(false);\n }}\n onSave={(transformation: DataLinkTransformationConfig) => {\n if (transformationIdxToEdit !== undefined) {\n const editTransformations = [...transformations];\n editTransformations[transformationIdxToEdit] = transformation;\n setTransformations(editTransformations);\n setTransformationIdxToEdit(undefined);\n } else {\n setTransformations([...transformations, transformation]);\n }\n setShowTransformationAddModal(false);\n }}\n fieldList={correlations.origVars}\n transformationToEdit={\n transformationIdxToEdit !== undefined ? transformations[transformationIdxToEdit] : undefined\n }\n />\n )}\n \n The correlation link will appear by the {correlations.resultField} field. You can use the following\n variables to set up your correlations:\n
\n          {Object.entries(correlations.vars).map((entry) => {\n            return `\\$\\{${entry[0]}\\} = ${entry[1]}\\n`;\n          })}\n        
\n {\n setIsLabelDescOpen(!isLabelDescOpen);\n }}\n label={\n \n Label / Description\n {!isLabelDescOpen && !loadingLabel && (\n {`Label: ${getValues('label') || defaultLabel}`}\n )}\n \n }\n >\n \n {\n if (getValues('label') === '' && defaultLabel !== undefined) {\n setValue('label', defaultLabel);\n }\n }}\n />\n \n \n \n \n \n {\n setIsTransformOpen(!isTransformOpen);\n }}\n label={\n \n Transformations\n \n \n \n \n }\n >\n {\n setShowTransformationAddModal(true);\n }}\n className={styles.transformationAction}\n >\n Add transformation\n \n {transformations.map((transformation, i) => {\n const { type, field, expression, mapValue } = transformation;\n const detailsString = [\n (mapValue ?? '').length > 0 ? `Variable name: ${mapValue}` : undefined,\n (expression ?? '').length > 0 ? (\n <>\n Expression: {expression}\n \n ) : undefined,\n ].filter((val) => val);\n return (\n \n \n {field}: {type}\n \n {detailsString.length > 0 && (\n {detailsString}\n )}\n \n {\n setTransformationIdxToEdit(i);\n setShowTransformationAddModal(true);\n }}\n />\n setTransformations(transformations.filter((_, idx) => i !== idx))}\n closeOnConfirm\n />\n \n \n );\n })}\n \n
\n \n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n labelCollapseDetails: css({\n marginLeft: theme.spacing(2),\n ...theme.typography['bodySmall'],\n fontStyle: 'italic',\n }),\n transformationAction: css({\n marginBottom: theme.spacing(2),\n }),\n transformationMeta: css({\n alignItems: 'baseline',\n }),\n };\n};\n","import React, { useMemo } from 'react';\n\nimport { AbsoluteTimeRange, DataFrame, dateTime, EventBus, LoadingState, SplitOpen } from '@grafana/data';\nimport { PanelRenderer } from '@grafana/runtime';\nimport { PanelChrome, PanelContext, PanelContextProvider } from '@grafana/ui';\n\nimport { getPanelPluginMeta } from '../plugins/importPanelPlugin';\n\nimport { useExploreDataLinkPostProcessor } from './hooks/useExploreDataLinkPostProcessor';\n\nexport interface Props {\n width: number;\n height: number;\n timeZone: string;\n pluginId: string;\n frames: DataFrame[];\n absoluteRange: AbsoluteTimeRange;\n state: LoadingState;\n splitOpenFn: SplitOpen;\n eventBus: EventBus;\n}\n\nexport function CustomContainer({\n width,\n height,\n timeZone,\n state,\n pluginId,\n frames,\n absoluteRange,\n splitOpenFn,\n eventBus,\n}: Props) {\n const timeRange = useMemo(\n () => ({\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 [absoluteRange.from, absoluteRange.to]\n );\n\n const plugin = getPanelPluginMeta(pluginId);\n\n const dataLinkPostProcessor = useExploreDataLinkPostProcessor(splitOpenFn, timeRange);\n\n const panelContext: PanelContext = {\n dataLinkPostProcessor,\n eventBus,\n eventsScope: 'explore',\n };\n\n return (\n \n \n {(innerWidth, innerHeight) => (\n \n )}\n \n \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 rowSizeBase = {\n width: '100%',\n height: '10px',\n top: '0px',\n left: '0px',\n cursor: 'row-resize',\n};\nvar colSizeBase = {\n width: '10px',\n height: '100%',\n top: '0px',\n left: '0px',\n cursor: 'col-resize',\n};\nvar edgeBase = {\n width: '20px',\n height: '20px',\n position: 'absolute',\n};\nvar styles = {\n top: __assign(__assign({}, rowSizeBase), { top: '-5px' }),\n right: __assign(__assign({}, colSizeBase), { left: undefined, right: '-5px' }),\n bottom: __assign(__assign({}, rowSizeBase), { top: undefined, bottom: '-5px' }),\n left: __assign(__assign({}, colSizeBase), { left: '-5px' }),\n topRight: __assign(__assign({}, edgeBase), { right: '-10px', top: '-10px', cursor: 'ne-resize' }),\n bottomRight: __assign(__assign({}, edgeBase), { right: '-10px', bottom: '-10px', cursor: 'se-resize' }),\n bottomLeft: __assign(__assign({}, edgeBase), { left: '-10px', bottom: '-10px', cursor: 'sw-resize' }),\n topLeft: __assign(__assign({}, edgeBase), { left: '-10px', top: '-10px', cursor: 'nw-resize' }),\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 { flushSync } from 'react-dom';\nimport { Resizer } from './resizer';\nvar DEFAULT_SIZE = {\n width: 'auto',\n height: 'auto',\n};\nvar clamp = function (n, min, max) { return Math.max(Math.min(n, max), min); };\nvar snap = function (n, size) { return Math.round(n / size) * size; };\nvar hasDirection = 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 = 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 getStringSize = function (n) {\n n = n.toString();\n if (n === 'auto') {\n return n;\n }\n if (n.endsWith('px')) {\n return n;\n }\n if (n.endsWith('%')) {\n return n;\n }\n if (n.endsWith('vh')) {\n return n;\n }\n if (n.endsWith('vw')) {\n return n;\n }\n if (n.endsWith('vmax')) {\n return n;\n }\n if (n.endsWith('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 (size.endsWith('px')) {\n return Number(size.replace('px', ''));\n }\n if (size.endsWith('%')) {\n var ratio = Number(size.replace('%', '')) / 100;\n return parentSize * ratio;\n }\n if (size.endsWith('vw')) {\n var ratio = Number(size.replace('vw', '')) / 100;\n return innerWidth * ratio;\n }\n if (size.endsWith('vh')) {\n var ratio = Number(size.replace('vh', '')) / 100;\n return innerHeight * ratio;\n }\n }\n return size;\n};\nvar calculateNewMax = 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] && _this.propsSize[key].toString().endsWith('%')) {\n if (_this.state[key].toString().endsWith('%')) {\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 var _this = this;\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 (width.endsWith('%')) {\n var percent = (newWidth / parentSize.width) * 100;\n newWidth = percent + \"%\";\n }\n else if (width.endsWith('vw')) {\n var vw = (newWidth / this.window.innerWidth) * 100;\n newWidth = vw + \"vw\";\n }\n else if (width.endsWith('vh')) {\n var vh = (newWidth / this.window.innerHeight) * 100;\n newWidth = vh + \"vh\";\n }\n }\n if (height && typeof height === 'string') {\n if (height.endsWith('%')) {\n var percent = (newHeight / parentSize.height) * 100;\n newHeight = percent + \"%\";\n }\n else if (height.endsWith('vw')) {\n var vw = (newHeight / this.window.innerWidth) * 100;\n newHeight = vw + \"vw\";\n }\n else if (height.endsWith('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 // For v18, update state sync\n flushSync(function () {\n _this.setState(newState);\n });\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 { getDragStyles, useStyles2, useTheme2 } from '@grafana/ui';\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 = useStyles2(getStyles);\n const dragStyles = getDragStyles(theme);\n const drawerWidth = `${width + 31.5}px`;\n\n return (\n \n {children}\n \n );\n}\n\nconst drawerSlide = (theme: GrafanaTheme2) => keyframes`\n 0% {\n transform: translateY(${theme.components.horizontalDrawer.defaultHeight}px);\n }\n\n 100% {\n transform: translateY(0px);\n }\n`;\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n // @ts-expect-error csstype doesn't allow !important. see https://github.com/frenic/csstype/issues/114\n fixed: css({\n position: 'fixed !important',\n }),\n container: css({\n bottom: 0,\n background: theme.colors.background.primary,\n borderTop: `1px solid ${theme.colors.border.weak}`,\n margin: theme.spacing(0, -2, 0, -2),\n boxShadow: theme.shadows.z3,\n zIndex: theme.zIndex.navbarFixed,\n }),\n drawerActive: css({\n opacity: 1,\n animation: `0.5s ease-out ${drawerSlide(theme)}`,\n }),\n});\n","import React, { useEffect, useState } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport { CoreApp, LoadingState } from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime/src';\nimport { defaultTimeZone, TimeZone } from '@grafana/schema';\nimport { TabbedContainer, TabConfig } from '@grafana/ui';\nimport { requestIdGenerator } from 'app/core/utils/explore';\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 { mixedRequestId } from 'app/plugins/datasource/mixed/MixedDataSource';\nimport { StoreState, ExploreItemState } from 'app/types';\n\nimport { GetDataOptions } from '../query/state/PanelQueryRunner';\n\nimport { runQueries } from './state/query';\n\ninterface DispatchProps {\n width: number;\n exploreId: string;\n timeZone: TimeZone;\n onClose: () => void;\n isMixed: boolean;\n}\n\ntype Props = DispatchProps & ConnectedProps;\n\nexport function ExploreQueryInspector(props: Props) {\n const { width, onClose, queryResponse, timeZone, isMixed, exploreId } = props;\n const [dataOptions, setDataOptions] = useState({\n withTransforms: false,\n withFieldConfig: true,\n });\n const dataFrames = queryResponse?.series || [];\n let errors = queryResponse?.errors;\n if (!errors?.length && queryResponse?.error) {\n errors = [queryResponse.error];\n }\n\n useEffect(() => {\n reportInteraction('grafana_explore_query_inspector_opened');\n }, []);\n\n const statsTab: TabConfig = {\n label: 'Stats',\n value: 'stats',\n icon: 'chart-line',\n content: ,\n };\n\n const jsonTab: TabConfig = {\n label: 'JSON',\n value: 'json',\n icon: 'brackets-curly',\n content: ,\n };\n\n const dataTab: TabConfig = {\n label: 'Data',\n value: 'data',\n icon: 'database',\n content: (\n \n ),\n };\n\n const queryTab: TabConfig = {\n label: 'Query',\n value: 'query',\n icon: 'info-circle',\n content: (\n props.runQueries({ exploreId })}\n />\n ),\n };\n\n const tabs = [statsTab, queryTab, jsonTab, dataTab];\n if (errors?.length) {\n const errorTab: TabConfig = {\n label: 'Error',\n value: 'error',\n icon: 'exclamation-triangle',\n content: ,\n };\n tabs.push(errorTab);\n }\n return (\n \n \n \n );\n}\n\nfunction mapStateToProps(state: StoreState, { exploreId }: { exploreId: string }) {\n const explore = state.explore;\n const item: ExploreItemState = explore.panes[exploreId]!;\n const { queryResponse } = item;\n\n return {\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 \n \n \n );\n}\n","import React, { Component } from 'react';\n\nimport { TimeRange, RawTimeRange, dateTimeForTimeZone, dateMath } from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime';\nimport { TimeZone } from '@grafana/schema';\nimport { TimePickerWithHistory } from 'app/core/components/TimePicker/TimePickerWithHistory';\nimport { getShiftedTimeRange, getZoomedTimeRange } from 'app/core/utils/timePicker';\n\nimport { TimeSyncButton } from './TimeSyncButton';\n\nexport interface Props {\n exploreId: string;\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 {\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 reportInteraction('grafana_explore_time_picker_time_range_changed', {\n timeRangeFrom: adjustedFrom,\n timeRangeTo: 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 ? : 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 \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' : 'canvas';\n const onClickMain = isLive ? (isPaused ? resume : pause) : start;\n\n return (\n \n Pause the live stream : <>Start live stream your logs}\n placement=\"bottom\"\n >\n \n {isLive && isPaused ? 'Paused' : 'Live'}\n \n \n\n \n Stop and exit the live stream} placement=\"bottom\">\n \n \n \n \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, { useState } from 'react';\n\nimport { IconName } from '@grafana/data';\nimport { reportInteraction, config } from '@grafana/runtime';\nimport { ToolbarButton, Dropdown, Menu, Stack, ToolbarButtonRow, MenuGroup } from '@grafana/ui';\nimport { t } from 'app/core/internationalization';\nimport { copyStringToClipboard } from 'app/core/utils/explore';\nimport { createAndCopyShortLink } from 'app/core/utils/shortLinks';\nimport { useSelector } from 'app/types';\n\nimport { selectPanes } from './state/selectors';\nimport { constructAbsoluteUrl } from './utils/links';\n\ninterface ShortLinkGroupData {\n key: string;\n label: string;\n items: ShortLinkMenuItemData[];\n}\n\ninterface ShortLinkMenuItemData {\n key: string;\n label: string;\n icon: IconName;\n getUrl: Function;\n shorten: boolean;\n absTime: boolean;\n}\n\nconst defaultMode: ShortLinkMenuItemData = {\n key: 'copy-link',\n label: t('explore.toolbar.copy-shortened-link', 'Copy shortened URL'),\n icon: 'share-alt',\n getUrl: () => undefined,\n shorten: true,\n absTime: false,\n};\n\nexport function ShortLinkButtonMenu() {\n const panes = useSelector(selectPanes);\n const [isOpen, setIsOpen] = useState(false);\n const [lastSelected, setLastSelected] = useState(defaultMode);\n const onCopyLink = (shorten: boolean, absTime: boolean, url?: string) => {\n if (shorten) {\n createAndCopyShortLink(url || global.location.href);\n reportInteraction('grafana_explore_shortened_link_clicked', { isAbsoluteTime: absTime });\n } else {\n copyStringToClipboard(\n url !== undefined\n ? `${window.location.protocol}//${window.location.host}${config.appSubUrl}${url}`\n : global.location.href\n );\n reportInteraction('grafana_explore_copy_link_clicked', { isAbsoluteTime: absTime });\n }\n };\n\n const menuOptions: ShortLinkGroupData[] = [\n {\n key: 'normal',\n label: t('explore.toolbar.copy-links-normal-category', 'Normal URL links'),\n items: [\n {\n key: 'copy-shortened-link',\n icon: 'link',\n label: t('explore.toolbar.copy-shortened-link', 'Copy shortened URL'),\n getUrl: () => undefined,\n shorten: true,\n absTime: false,\n },\n {\n key: 'copy-link',\n icon: 'link',\n label: t('explore.toolbar.copy-link', 'Copy URL'),\n getUrl: () => undefined,\n shorten: false,\n absTime: false,\n },\n ],\n },\n {\n key: 'timesync',\n label: t('explore.toolbar.copy-links-absolute-category', 'Time-sync URL links (share with time range intact)'),\n items: [\n {\n key: 'copy-short-link-abs-time',\n icon: 'clock-nine',\n label: t('explore.toolbar.copy-shortened-link-abs-time', 'Copy Absolute Shortened URL'),\n shorten: true,\n getUrl: () => {\n return constructAbsoluteUrl(panes);\n },\n absTime: true,\n },\n {\n key: 'copy-link-abs-time',\n icon: 'clock-nine',\n label: t('explore.toolbar.copy-link-abs-time', 'Copy Absolute Shortened URL'),\n shorten: false,\n getUrl: () => {\n return constructAbsoluteUrl(panes);\n },\n absTime: true,\n },\n ],\n },\n ];\n\n const MenuActions = (\n \n {menuOptions.map((groupOption) => {\n return (\n \n {groupOption.items.map((option) => {\n return (\n {\n const url = option.getUrl();\n onCopyLink(option.shorten, option.absTime, url);\n setLastSelected(option);\n }}\n />\n );\n })}\n \n );\n })}\n \n );\n\n // we need the Toolbar button click to be an action separate from opening/closing the menu\n return (\n \n \n {\n const url = lastSelected.getUrl();\n onCopyLink(lastSelected.shorten, lastSelected.absTime, url);\n }}\n aria-label={t('explore.toolbar.copy-shortened-link', 'Copy shortened URL')}\n />\n \n \n \n \n \n );\n}\n","import React, { lazy, ReactElement, Suspense, useMemo, useState } from 'react';\n\nimport { type PluginExtensionLink, PluginExtensionPoints, RawTimeRange, getTimeZone } from '@grafana/data';\nimport { getPluginLinkExtensions, config } from '@grafana/runtime';\nimport { DataQuery, TimeZone } from '@grafana/schema';\nimport { Dropdown, ToolbarButton } from '@grafana/ui';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { AccessControlAction, ExplorePanelData, useSelector } from 'app/types';\n\nimport { getExploreItemSelector, isLeftPaneSelector, selectCorrelationDetails } from '../state/selectors';\n\nimport { ConfirmNavigationModal } from './ConfirmNavigationModal';\nimport { ToolbarExtensionPointMenu } from './ToolbarExtensionPointMenu';\n\nconst AddToDashboard = lazy(() =>\n import('./AddToDashboard').then(({ AddToDashboard }) => ({ default: AddToDashboard }))\n);\n\ntype Props = {\n exploreId: string;\n timeZone: TimeZone;\n splitted: boolean;\n};\n\nexport function ToolbarExtensionPoint(props: Props): ReactElement | null {\n const { exploreId, splitted } = props;\n const [selectedExtension, setSelectedExtension] = useState();\n const [isOpen, setIsOpen] = useState(false);\n const context = useExtensionPointContext(props);\n const extensions = useExtensionLinks(context);\n const selectExploreItem = getExploreItemSelector(exploreId);\n const noQueriesInPane = useSelector(selectExploreItem)?.queries?.length;\n\n // If we only have the explore core extension point registered we show the old way of\n // adding a query to a dashboard.\n if (extensions.length <= 1) {\n const canAddPanelToDashboard =\n contextSrv.hasPermission(AccessControlAction.DashboardsCreate) ||\n contextSrv.hasPermission(AccessControlAction.DashboardsWrite);\n\n if (!canAddPanelToDashboard) {\n return null;\n }\n\n return (\n \n \n \n );\n }\n\n const menu = ;\n\n return (\n <>\n \n \n {splitted ? ' ' : 'Add'}\n \n \n {!!selectedExtension && !!selectedExtension.path && (\n setSelectedExtension(undefined)}\n />\n )}\n \n );\n}\n\nexport type PluginExtensionExploreContext = {\n exploreId: string;\n targets: DataQuery[];\n data: ExplorePanelData;\n timeRange: RawTimeRange;\n timeZone: TimeZone;\n shouldShowAddCorrelation: boolean;\n};\n\nfunction useExtensionPointContext(props: Props): PluginExtensionExploreContext {\n const { exploreId, timeZone } = props;\n const isCorrelationDetails = useSelector(selectCorrelationDetails);\n const isCorrelationsEditorMode = isCorrelationDetails?.editorMode || false;\n const { queries, queryResponse, range } = useSelector(getExploreItemSelector(exploreId))!;\n const isLeftPane = useSelector(isLeftPaneSelector(exploreId));\n\n const datasourceUids = queries.map((query) => query?.datasource?.uid).filter((uid) => uid !== undefined);\n const numUniqueIds = [...new Set(datasourceUids)].length;\n const canWriteCorrelations = contextSrv.hasPermission(AccessControlAction.DataSourcesWrite);\n\n return useMemo(() => {\n return {\n exploreId,\n targets: queries,\n data: queryResponse,\n timeRange: range.raw,\n timeZone: getTimeZone({ timeZone }),\n shouldShowAddCorrelation:\n config.featureToggles.correlations === true &&\n canWriteCorrelations &&\n !isCorrelationsEditorMode &&\n isLeftPane &&\n numUniqueIds === 1,\n };\n }, [\n exploreId,\n queries,\n queryResponse,\n range.raw,\n timeZone,\n canWriteCorrelations,\n isCorrelationsEditorMode,\n isLeftPane,\n numUniqueIds,\n ]);\n}\n\nfunction useExtensionLinks(context: PluginExtensionExploreContext): PluginExtensionLink[] {\n return useMemo(() => {\n const { extensions } = getPluginLinkExtensions({\n extensionPointId: PluginExtensionPoints.ExploreToolbarAction,\n context: context,\n limitPerPlugin: 3,\n });\n\n return extensions;\n }, [context]);\n}\n","import React, { useCallback } from 'react';\n\nimport { RefreshPicker } from '@grafana/ui';\nimport { useDispatch } from 'app/types';\n\nimport { setPausedStateAction, runQueries, clearLogs } 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: string) {\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, refreshInterval: RefreshPicker.offOption.value }));\n dispatch(runQueries({ exploreId }));\n }, [exploreId, dispatch, pause]);\n\n const start = useCallback(() => {\n dispatch(changeRefreshInterval({ exploreId, refreshInterval: RefreshPicker.liveOption.value }));\n }, [exploreId, dispatch]);\n\n const clear = useCallback(() => {\n dispatch(clearLogs({ exploreId }));\n }, [exploreId, dispatch]);\n\n return {\n pause,\n resume,\n stop,\n start,\n clear,\n };\n}\n\ntype Props = {\n exploreId: string;\n children: (controls: ReturnType) => 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 { css, cx } from '@emotion/css';\nimport { pick } from 'lodash';\nimport React, { useMemo } from 'react';\nimport { shallowEqual } from 'react-redux';\n\nimport { DataSourceInstanceSettings, RawTimeRange, GrafanaTheme2 } from '@grafana/data';\nimport { reportInteraction, config } from '@grafana/runtime';\nimport {\n defaultIntervals,\n PageToolbar,\n RefreshPicker,\n SetInterval,\n ToolbarButton,\n ButtonGroup,\n useStyles2,\n} from '@grafana/ui';\nimport { AppChromeUpdate } from 'app/core/components/AppChrome/AppChromeUpdate';\nimport { t, Trans } from 'app/core/internationalization';\nimport { DataSourcePicker } from 'app/features/datasources/components/picker/DataSourcePicker';\nimport { CORRELATION_EDITOR_POST_CONFIRM_ACTION } from 'app/types/explore';\nimport { StoreState, useDispatch, useSelector } from 'app/types/store';\n\nimport { contextSrv } from '../../core/core';\nimport { updateFiscalYearStartMonthForSession, updateTimeZoneForSession } from '../profile/state/reducers';\nimport { getFiscalYearStartMonth, getTimeZone } from '../profile/state/selectors';\n\nimport { ExploreTimeControls } from './ExploreTimeControls';\nimport { LiveTailButton } from './LiveTailButton';\nimport { ShortLinkButtonMenu } from './ShortLinkButtonMenu';\nimport { ToolbarExtensionPoint } from './extensions/ToolbarExtensionPoint';\nimport { changeDatasource } from './state/datasource';\nimport { changeCorrelationHelperData } from './state/explorePane';\nimport {\n splitClose,\n splitOpen,\n maximizePaneAction,\n evenPaneResizeAction,\n changeCorrelationEditorDetails,\n} from './state/main';\nimport { cancelQueries, runQueries, selectIsWaitingForData } from './state/query';\nimport { isLeftPaneSelector, isSplit, selectCorrelationDetails, selectPanesEntries } from './state/selectors';\nimport { syncTimes, changeRefreshInterval } from './state/time';\nimport { LiveTailControls } from './useLiveTailControls';\n\nconst getStyles = (theme: GrafanaTheme2, splitted: Boolean) => ({\n rotateIcon: css({\n '> div > svg': {\n transform: 'rotate(180deg)',\n },\n }),\n toolbarButton: css({\n display: 'flex',\n justifyContent: 'center',\n marginRight: theme.spacing(0.5),\n width: splitted && theme.spacing(6),\n }),\n});\n\ninterface Props {\n exploreId: string;\n onChangeTime: (range: RawTimeRange, changedByScanner?: boolean) => void;\n onContentOutlineToogle: () => void;\n isContentOutlineOpen: boolean;\n}\n\nexport function ExploreToolbar({ exploreId, onChangeTime, onContentOutlineToogle, isContentOutlineOpen }: Props) {\n const dispatch = useDispatch();\n const splitted = useSelector(isSplit);\n const styles = useStyles2(getStyles, splitted);\n\n const timeZone = useSelector((state: StoreState) => getTimeZone(state.user));\n const fiscalYearStartMonth = useSelector((state: StoreState) => getFiscalYearStartMonth(state.user));\n const { refreshInterval, datasourceInstance, range, isLive, isPaused, syncedTimes } = useSelector(\n (state: StoreState) => ({\n ...pick(state.explore.panes[exploreId]!, 'refreshInterval', 'datasourceInstance', 'range', 'isLive', 'isPaused'),\n syncedTimes: state.explore.syncedTimes,\n }),\n shallowEqual\n );\n const loading = useSelector(selectIsWaitingForData(exploreId));\n const isLargerPane = useSelector((state: StoreState) => state.explore.largerExploreId === exploreId);\n const showSmallTimePicker = useSelector((state) => splitted || state.explore.panes[exploreId]!.containerWidth < 1210);\n const showSmallDataSourcePicker = useSelector(\n (state) => state.explore.panes[exploreId]!.containerWidth < (splitted ? 700 : 800)\n );\n\n const panes = useSelector(selectPanesEntries);\n const correlationDetails = useSelector(selectCorrelationDetails);\n const isCorrelationsEditorMode = correlationDetails?.editorMode || false;\n const isLeftPane = useSelector(isLeftPaneSelector(exploreId));\n\n const shouldRotateSplitIcon = useMemo(\n () => (isLeftPane && isLargerPane) || (!isLeftPane && !isLargerPane),\n [isLeftPane, isLargerPane]\n );\n\n const refreshPickerLabel = loading\n ? t('explore.toolbar.refresh-picker-cancel', 'Cancel')\n : t('explore.toolbar.refresh-picker-run', 'Run query');\n\n const onChangeDatasource = async (dsSettings: DataSourceInstanceSettings) => {\n if (!isCorrelationsEditorMode) {\n dispatch(changeDatasource({ exploreId, datasource: dsSettings.uid, options: { importQueries: true } }));\n } else {\n if (correlationDetails?.correlationDirty || correlationDetails?.queryEditorDirty) {\n // prompt will handle datasource change if needed\n dispatch(\n changeCorrelationEditorDetails({\n isExiting: true,\n postConfirmAction: {\n exploreId: exploreId,\n action: CORRELATION_EDITOR_POST_CONFIRM_ACTION.CHANGE_DATASOURCE,\n changeDatasourceUid: dsSettings.uid,\n isActionLeft: isLeftPane,\n },\n })\n );\n } else {\n // if the left pane is changing, clear helper data for right pane\n if (isLeftPane) {\n panes.forEach((pane) => {\n dispatch(\n changeCorrelationHelperData({\n exploreId: pane[0],\n correlationEditorHelperData: undefined,\n })\n );\n });\n }\n\n dispatch(changeDatasource({ exploreId, datasource: dsSettings.uid, options: { importQueries: true } }));\n }\n }\n };\n\n const onRunQuery = (loading = false) => {\n if (loading) {\n return dispatch(cancelQueries(exploreId));\n } else {\n return dispatch(runQueries({ exploreId }));\n }\n };\n\n const onChangeTimeZone = (timezone: string) => dispatch(updateTimeZoneForSession(timezone));\n\n const onOpenSplitView = () => {\n dispatch(splitOpen());\n reportInteraction('grafana_explore_split_view_opened', { origin: 'menu' });\n };\n\n const onCloseSplitView = () => {\n if (isCorrelationsEditorMode) {\n if (correlationDetails?.correlationDirty || correlationDetails?.queryEditorDirty) {\n // if dirty, prompt\n dispatch(\n changeCorrelationEditorDetails({\n isExiting: true,\n postConfirmAction: {\n exploreId: exploreId,\n action: CORRELATION_EDITOR_POST_CONFIRM_ACTION.CLOSE_PANE,\n isActionLeft: isLeftPane,\n },\n })\n );\n } else {\n // otherwise, clear helper data and close\n panes.forEach((pane) => {\n dispatch(\n changeCorrelationHelperData({\n exploreId: pane[0],\n correlationEditorHelperData: undefined,\n })\n );\n });\n dispatch(splitClose(exploreId));\n reportInteraction('grafana_explore_split_view_closed');\n }\n } else {\n dispatch(splitClose(exploreId));\n reportInteraction('grafana_explore_split_view_closed');\n }\n };\n\n const onClickResize = () => {\n if (isLargerPane) {\n dispatch(evenPaneResizeAction());\n } else {\n dispatch(maximizePaneAction({ exploreId }));\n }\n };\n\n const onChangeTimeSync = () => {\n dispatch(syncTimes(exploreId));\n };\n\n const onChangeFiscalYearStartMonth = (fiscalyearStartMonth: number) =>\n dispatch(updateFiscalYearStartMonthForSession(fiscalyearStartMonth));\n\n const onChangeRefreshInterval = (refreshInterval: string) => {\n dispatch(changeRefreshInterval({ exploreId, refreshInterval }));\n };\n\n const navBarActions = [,
];\n\n return (\n
\n {refreshInterval && }\n
\n \n
\n \n Outline\n \n ),\n ,\n ].filter(Boolean)}\n forceShowLeftItems\n >\n {[\n !splitted ? (\n \n Split\n \n ) : (\n \n \n \n Close \n \n \n ),\n ,\n !isLive && (\n \n ),\n onRunQuery(loading)}\n noIntervalPicker={isLive}\n primary={true}\n width={(showSmallTimePicker ? 35 : 108) + 'px'}\n />,\n datasourceInstance?.meta.streaming && (\n \n {(c) => {\n const controls = {\n ...c,\n start: () => {\n reportInteraction('grafana_explore_logs_live_tailing_clicked', {\n datasourceType: datasourceInstance?.type,\n });\n c.start();\n },\n };\n return (\n \n );\n }}\n \n ),\n ].filter(Boolean)}\n \n
\n );\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { DataFrame, GrafanaTheme2, CoreApp } from '@grafana/data';\nimport { FlameGraph } from '@grafana/flamegraph';\nimport { reportInteraction, config } from '@grafana/runtime';\nimport { useStyles2 } from '@grafana/ui';\n\ninterface Props {\n dataFrames: DataFrame[];\n}\n\nfunction interaction(name: string, context: Record = {}) {\n reportInteraction(`grafana_flamegraph_${name}`, {\n app: CoreApp.Unknown,\n grafana_version: config.buildInfo.version,\n ...context,\n });\n}\n\nexport const FlameGraphExploreContainer = (props: Props) => {\n const styles = useStyles2((theme) => getStyles(theme));\n\n return (\n
\n config.theme2}\n onTableSymbolClick={() => interaction('table_item_selected')}\n onViewSelected={(view: string) => interaction('view_selected', { view })}\n onTextAlignSelected={(align: string) => interaction('text_align_selected', { align })}\n onTableSort={(sort: string) => interaction('table_sort_selected', { sort })}\n disableCollapsing={!config.featureToggles.flameGraphItemCollapsing}\n />\n
\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n background: theme.colors.background.primary,\n display: 'flow-root',\n padding: theme.spacing(0, 1, 1, 1),\n border: `1px solid ${theme.components.panel.borderColor}`,\n borderRadius: theme.shape.radius.default,\n }),\n});\n","import React, { 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 {\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?: unknown;\n}\n\nexport const ElapsedTime = ({ resetKey, humanize, className }: ElapsedTimeProps) => {\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
\n );\n }\n\n return ;\n};\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data/src';\nimport { useTheme2 } from '@grafana/ui/src';\n\nimport { LogsTableActiveFields } from './LogsTableActiveFields';\nimport { LogsTableAvailableFields } from './LogsTableAvailableFields';\nimport { FieldNameMeta } from './LogsTableWrap';\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n sidebarWrap: css({\n overflowY: 'scroll',\n height: 'calc(100% - 50px)',\n /* Hide scrollbar for Chrome, Safari, and Opera */\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n /* Hide scrollbar for Firefox */\n scrollbarWidth: 'none',\n }),\n columnHeaderButton: css({\n appearance: 'none',\n background: 'none',\n border: 'none',\n fontSize: theme.typography.pxToRem(11),\n }),\n columnHeader: css({\n display: 'flex',\n justifyContent: 'space-between',\n fontSize: theme.typography.h6.fontSize,\n background: theme.colors.background.secondary,\n position: 'sticky',\n top: 0,\n left: 0,\n paddingTop: theme.spacing(0.75),\n paddingRight: theme.spacing(0.75),\n paddingBottom: theme.spacing(0.75),\n paddingLeft: theme.spacing(1.5),\n zIndex: 3,\n marginBottom: theme.spacing(2),\n }),\n };\n}\n\nexport const LogsTableMultiSelect = (props: {\n toggleColumn: (columnName: string) => void;\n filteredColumnsWithMeta: Record | undefined;\n columnsWithMeta: Record;\n clear: () => void;\n reorderColumn: (oldIndex: number, newIndex: number) => void;\n}) => {\n const theme = useTheme2();\n const styles = getStyles(theme);\n\n return (\n
\n {/* Sidebar columns */}\n <>\n
\n Selected fields\n \n
\n props.columnsWithMeta[value]?.active ?? false}\n id={'selected-fields'}\n />\n\n
Fields
\n !props.columnsWithMeta[value]?.active}\n />\n \n
\n );\n};\n","import uFuzzy from '@leeoniya/ufuzzy';\nimport { debounce as debounceLodash } from 'lodash';\n\nconst uf = new uFuzzy({\n intraMode: 1,\n intraIns: 1,\n intraSub: 1,\n intraTrn: 1,\n intraDel: 1,\n});\n\nexport function fuzzySearch(haystack: string[], query: string, dispatcher: (data: string[][]) => void) {\n const [idxs, info, order] = uf.search(haystack, query, 0, 1e5);\n\n let haystackOrder: string[] = [];\n let matchesSet: Set = new Set();\n if (idxs && order) {\n /**\n * get the fuzzy matches for hilighting\n * @param part\n * @param matched\n */\n const mark = (part: string, matched: boolean) => {\n if (matched) {\n matchesSet.add(part);\n }\n };\n\n // Iterate to create the order of needles(queries) and the matches\n for (let i = 0; i < order.length; i++) {\n let infoIdx = order[i];\n\n /** Evaluate the match, get the matches for highlighting */\n uFuzzy.highlight(haystack[info.idx[infoIdx]], info.ranges[infoIdx], mark);\n /** Get the order */\n haystackOrder.push(haystack[info.idx[infoIdx]]);\n }\n\n dispatcher([haystackOrder, [...matchesSet]]);\n } else if (!query) {\n dispatcher([[], []]);\n }\n}\n\nexport const debouncedFuzzySearch = debounceLodash(fuzzySearch, 300);\n","import { css } from '@emotion/css';\nimport { Resizable, ResizeCallback } from 're-resizable';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport {\n DataFrame,\n ExploreLogsPanelState,\n GrafanaTheme2,\n Labels,\n LogsSortOrder,\n SelectableValue,\n SplitOpen,\n TimeRange,\n} from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime/src';\nimport { InlineField, Select, Themeable2 } from '@grafana/ui/';\n\nimport { parseLogsFrame } from '../../logs/logsFrame';\n\nimport { LogsColumnSearch } from './LogsColumnSearch';\nimport { LogsTable } from './LogsTable';\nimport { LogsTableMultiSelect } from './LogsTableMultiSelect';\nimport { fuzzySearch } from './utils/uFuzzy';\n\ninterface Props extends Themeable2 {\n logsFrames: DataFrame[];\n width: number;\n timeZone: string;\n splitOpen: SplitOpen;\n range: TimeRange;\n logsSortOrder: LogsSortOrder;\n panelState: ExploreLogsPanelState | undefined;\n updatePanelState: (panelState: Partial) => void;\n onClickFilterLabel?: (key: string, value: string, frame?: DataFrame) => void;\n onClickFilterOutLabel?: (key: string, value: string, frame?: DataFrame) => void;\n datasourceType?: string;\n}\n\ntype ActiveFieldMeta = {\n active: false;\n index: undefined; // if undefined the column is not selected\n};\n\ntype InactiveFieldMeta = {\n active: true;\n index: number; // if undefined the column is not selected\n};\n\ntype GenericMeta = {\n percentOfLinesWithLabel: number;\n type?: 'BODY_FIELD' | 'TIME_FIELD';\n};\n\nexport type FieldNameMeta = (InactiveFieldMeta | ActiveFieldMeta) & GenericMeta;\n\ntype FieldName = string;\ntype FieldNameMetaStore = Record;\n\nexport function LogsTableWrap(props: Props) {\n const { logsFrames, updatePanelState, panelState } = props;\n const propsColumns = panelState?.columns;\n // Save the normalized cardinality of each label\n const [columnsWithMeta, setColumnsWithMeta] = useState(undefined);\n\n // Filtered copy of columnsWithMeta that only includes matching results\n const [filteredColumnsWithMeta, setFilteredColumnsWithMeta] = useState(undefined);\n const [searchValue, setSearchValue] = useState('');\n\n const height = getLogsTableHeight();\n const panelStateRefId = props?.panelState?.refId;\n\n // The current dataFrame containing the refId of the current query\n const [currentDataFrame, setCurrentDataFrame] = useState(\n logsFrames.find((f) => f.refId === panelStateRefId) ?? logsFrames[0]\n );\n\n const getColumnsFromProps = useCallback(\n (fieldNames: FieldNameMetaStore) => {\n const previouslySelected = props.panelState?.columns;\n if (previouslySelected) {\n Object.values(previouslySelected).forEach((key, index) => {\n if (fieldNames[key]) {\n fieldNames[key].active = true;\n fieldNames[key].index = index;\n }\n });\n }\n return fieldNames;\n },\n [props.panelState?.columns]\n );\n const logsFrame = parseLogsFrame(currentDataFrame);\n\n useEffect(() => {\n if (logsFrame?.timeField.name && logsFrame?.bodyField.name && !propsColumns) {\n const defaultColumns = { 0: logsFrame?.timeField.name ?? '', 1: logsFrame?.bodyField.name ?? '' };\n updatePanelState({\n columns: Object.values(defaultColumns),\n visualisationType: 'table',\n labelFieldName: logsFrame?.getLabelFieldName() ?? undefined,\n });\n }\n }, [logsFrame, propsColumns, updatePanelState]);\n\n /**\n * When logs frame updates (e.g. query|range changes), we need to set the selected frame to state\n */\n useEffect(() => {\n const newFrame = logsFrames.find((f) => f.refId === panelStateRefId) ?? logsFrames[0];\n if (newFrame) {\n setCurrentDataFrame(newFrame);\n }\n }, [logsFrames, panelStateRefId]);\n\n /**\n * Keeps the filteredColumnsWithMeta state in sync with the columnsWithMeta state,\n * which can be updated by explore browser history state changes\n * This prevents an edge case bug where the user is navigating while a search is open.\n */\n useEffect(() => {\n if (!columnsWithMeta || !filteredColumnsWithMeta) {\n return;\n }\n let newFiltered = { ...filteredColumnsWithMeta };\n let flag = false;\n Object.keys(columnsWithMeta).forEach((key) => {\n if (newFiltered[key] && newFiltered[key].active !== columnsWithMeta[key].active) {\n newFiltered[key] = columnsWithMeta[key];\n flag = true;\n }\n });\n if (flag) {\n setFilteredColumnsWithMeta(newFiltered);\n }\n }, [columnsWithMeta, filteredColumnsWithMeta]);\n\n /**\n * when the query results change, we need to update the columnsWithMeta state\n * and reset any local search state\n *\n * This will also find all the unique labels, and calculate how many log lines have each label into the labelCardinality Map\n * Then it normalizes the counts\n *\n */\n useEffect(() => {\n // If the data frame is empty, there's nothing to viz, it could mean the user has unselected all columns\n if (!currentDataFrame.length) {\n return;\n }\n const numberOfLogLines = currentDataFrame ? currentDataFrame.length : 0;\n const logsFrame = parseLogsFrame(currentDataFrame);\n const labels = logsFrame?.getLogFrameLabelsAsLabels();\n\n const otherFields = [];\n\n if (logsFrame) {\n otherFields.push(...logsFrame.extraFields.filter((field) => !field?.config?.custom?.hidden));\n }\n if (logsFrame?.severityField) {\n otherFields.push(logsFrame?.severityField);\n }\n if (logsFrame?.bodyField) {\n otherFields.push(logsFrame?.bodyField);\n }\n if (logsFrame?.timeField) {\n otherFields.push(logsFrame?.timeField);\n }\n\n // Use a map to dedupe labels and count their occurrences in the logs\n const labelCardinality = new Map();\n\n // What the label state will look like\n let pendingLabelState: FieldNameMetaStore = {};\n\n // If we have labels and log lines\n if (labels?.length && numberOfLogLines) {\n // Iterate through all of Labels\n labels.forEach((labels: Labels) => {\n const labelsArray = Object.keys(labels);\n // Iterate through the label values\n labelsArray.forEach((label) => {\n // If it's already in our map, increment the count\n if (labelCardinality.has(label)) {\n const value = labelCardinality.get(label);\n if (value) {\n if (value?.active) {\n labelCardinality.set(label, {\n percentOfLinesWithLabel: value.percentOfLinesWithLabel + 1,\n active: true,\n index: value.index,\n });\n } else {\n labelCardinality.set(label, {\n percentOfLinesWithLabel: value.percentOfLinesWithLabel + 1,\n active: false,\n index: undefined,\n });\n }\n }\n // Otherwise add it\n } else {\n labelCardinality.set(label, { percentOfLinesWithLabel: 1, active: false, index: undefined });\n }\n });\n });\n\n // Converting the map to an object\n pendingLabelState = Object.fromEntries(labelCardinality);\n\n // Convert count to percent of log lines\n Object.keys(pendingLabelState).forEach((key) => {\n pendingLabelState[key].percentOfLinesWithLabel = normalize(\n pendingLabelState[key].percentOfLinesWithLabel,\n numberOfLogLines\n );\n });\n }\n\n // Normalize the other fields\n otherFields.forEach((field) => {\n const isActive = pendingLabelState[field.name]?.active;\n const index = pendingLabelState[field.name]?.index;\n if (isActive && index !== undefined) {\n pendingLabelState[field.name] = {\n percentOfLinesWithLabel: normalize(\n field.values.filter((value) => value !== null && value !== undefined).length,\n numberOfLogLines\n ),\n active: true,\n index: index,\n };\n } else {\n pendingLabelState[field.name] = {\n percentOfLinesWithLabel: normalize(\n field.values.filter((value) => value !== null && value !== undefined).length,\n numberOfLogLines\n ),\n active: false,\n index: undefined,\n };\n }\n });\n\n pendingLabelState = getColumnsFromProps(pendingLabelState);\n\n // Get all active columns\n const active = Object.keys(pendingLabelState).filter((key) => pendingLabelState[key].active);\n\n // If nothing is selected, then select the default columns\n if (active.length === 0) {\n if (logsFrame?.bodyField?.name) {\n pendingLabelState[logsFrame.bodyField.name].active = true;\n }\n if (logsFrame?.timeField?.name) {\n pendingLabelState[logsFrame.timeField.name].active = true;\n }\n }\n\n if (logsFrame?.bodyField?.name && logsFrame?.timeField?.name) {\n pendingLabelState[logsFrame.bodyField.name].type = 'BODY_FIELD';\n pendingLabelState[logsFrame.timeField.name].type = 'TIME_FIELD';\n }\n\n setColumnsWithMeta(pendingLabelState);\n\n // The panel state is updated when the user interacts with the multi-select sidebar\n }, [currentDataFrame, getColumnsFromProps]);\n\n const [sidebarWidth, setSidebarWidth] = useState(220);\n const tableWidth = props.width - sidebarWidth;\n\n if (!columnsWithMeta) {\n return null;\n }\n\n function columnFilterEvent(columnName: string) {\n if (columnsWithMeta) {\n const newState = !columnsWithMeta[columnName]?.active;\n const priorActiveCount = Object.keys(columnsWithMeta).filter((column) => columnsWithMeta[column]?.active)?.length;\n const event = {\n columnAction: newState ? 'add' : 'remove',\n columnCount: newState ? priorActiveCount + 1 : priorActiveCount - 1,\n datasourceType: props.datasourceType,\n };\n reportInteraction('grafana_explore_logs_table_column_filter_clicked', event);\n }\n }\n\n function searchFilterEvent(searchResultCount: number) {\n reportInteraction('grafana_explore_logs_table_text_search_result_count', {\n resultCount: searchResultCount,\n datasourceType: props.datasourceType ?? 'unknown',\n });\n }\n\n const clearSelection = () => {\n const pendingLabelState = { ...columnsWithMeta };\n let index = 0;\n Object.keys(pendingLabelState).forEach((key) => {\n const isDefaultField = !!pendingLabelState[key].type;\n // after reset the only active fields are the special time and body fields\n pendingLabelState[key].active = isDefaultField;\n // reset the index\n pendingLabelState[key].index = isDefaultField ? index++ : undefined;\n });\n setColumnsWithMeta(pendingLabelState);\n };\n\n const reorderColumn = (sourceIndex: number, destinationIndex: number) => {\n if (sourceIndex === destinationIndex) {\n return;\n }\n\n const pendingLabelState = { ...columnsWithMeta };\n\n const keys = Object.keys(pendingLabelState)\n .filter((key) => pendingLabelState[key].active)\n .map((key) => ({\n fieldName: key,\n index: pendingLabelState[key].index ?? 0,\n }))\n .sort((a, b) => a.index - b.index);\n\n const [source] = keys.splice(sourceIndex, 1);\n keys.splice(destinationIndex, 0, source);\n\n keys.forEach((key, index) => {\n pendingLabelState[key.fieldName].index = index;\n });\n\n // Set local state\n setColumnsWithMeta(pendingLabelState);\n\n // Sync the explore state\n updateExploreState(pendingLabelState);\n };\n\n function updateExploreState(pendingLabelState: FieldNameMetaStore) {\n // Get all active columns and sort by index\n const newColumnsArray = Object.keys(pendingLabelState)\n // Only include active filters\n .filter((key) => pendingLabelState[key]?.active)\n .sort((a, b) => {\n const pa = pendingLabelState[a];\n const pb = pendingLabelState[b];\n if (pa.index !== undefined && pb.index !== undefined) {\n return pa.index - pb.index; // sort by index\n }\n return 0;\n });\n\n const newColumns: Record = Object.assign(\n {},\n // Get the keys of the object as an array\n newColumnsArray\n );\n\n const defaultColumns = { 0: logsFrame?.timeField.name ?? '', 1: logsFrame?.bodyField.name ?? '' };\n const newPanelState: ExploreLogsPanelState = {\n ...props.panelState,\n // URL format requires our array of values be an object, so we convert it using object.assign\n columns: Object.keys(newColumns).length ? newColumns : defaultColumns,\n refId: currentDataFrame.refId,\n visualisationType: 'table',\n labelFieldName: logsFrame?.getLabelFieldName() ?? undefined,\n };\n\n // Update url state\n updatePanelState(newPanelState);\n }\n\n // Toggle a column on or off when the user interacts with an element in the multi-select sidebar\n const toggleColumn = (columnName: FieldName) => {\n if (!columnsWithMeta || !(columnName in columnsWithMeta)) {\n console.warn('failed to get column', columnsWithMeta);\n return;\n }\n\n const length = Object.keys(columnsWithMeta).filter((c) => columnsWithMeta[c].active).length;\n const isActive = !columnsWithMeta[columnName].active ? true : undefined;\n\n let pendingLabelState: FieldNameMetaStore;\n if (isActive) {\n pendingLabelState = {\n ...columnsWithMeta,\n [columnName]: {\n ...columnsWithMeta[columnName],\n active: isActive,\n index: length,\n },\n };\n } else {\n pendingLabelState = {\n ...columnsWithMeta,\n [columnName]: {\n ...columnsWithMeta[columnName],\n active: false,\n index: undefined,\n },\n };\n }\n\n // Analytics\n columnFilterEvent(columnName);\n\n // Set local state\n setColumnsWithMeta(pendingLabelState);\n\n // If user is currently filtering, update filtered state\n if (filteredColumnsWithMeta) {\n const active = !filteredColumnsWithMeta[columnName]?.active;\n let pendingFilteredLabelState: FieldNameMetaStore;\n if (active) {\n pendingFilteredLabelState = {\n ...filteredColumnsWithMeta,\n [columnName]: {\n ...filteredColumnsWithMeta[columnName],\n active: active,\n index: length,\n },\n };\n } else {\n pendingFilteredLabelState = {\n ...filteredColumnsWithMeta,\n [columnName]: {\n ...filteredColumnsWithMeta[columnName],\n active: false,\n index: undefined,\n },\n };\n }\n\n setFilteredColumnsWithMeta(pendingFilteredLabelState);\n }\n\n updateExploreState(pendingLabelState);\n };\n\n // uFuzzy search dispatcher, adds any matches to the local state\n const dispatcher = (data: string[][]) => {\n const matches = data[0];\n let newColumnsWithMeta: FieldNameMetaStore = {};\n let numberOfResults = 0;\n matches.forEach((match) => {\n if (match in columnsWithMeta) {\n newColumnsWithMeta[match] = columnsWithMeta[match];\n numberOfResults++;\n }\n });\n setFilteredColumnsWithMeta(newColumnsWithMeta);\n searchFilterEvent(numberOfResults);\n };\n\n // uFuzzy search\n const search = (needle: string) => {\n fuzzySearch(Object.keys(columnsWithMeta), needle, dispatcher);\n };\n\n // onChange handler for search input\n const onSearchInputChange = (e: React.FormEvent) => {\n const value = e.currentTarget?.value;\n setSearchValue(value);\n if (value) {\n search(value);\n } else {\n // If the search input is empty, reset the local search state.\n setFilteredColumnsWithMeta(undefined);\n }\n };\n\n const onFrameSelectorChange = (value: SelectableValue) => {\n const matchingDataFrame = logsFrames.find((frame) => frame.refId === value.value);\n if (matchingDataFrame) {\n setCurrentDataFrame(logsFrames.find((frame) => frame.refId === value.value) ?? logsFrames[0]);\n }\n props.updatePanelState({ refId: value.value, labelFieldName: logsFrame?.getLabelFieldName() ?? undefined });\n };\n\n const styles = getStyles(props.theme, height, sidebarWidth);\n\n const getOnResize: ResizeCallback = (event, direction, ref) => {\n const newSidebarWidth = Number(ref.style.width.slice(0, -2));\n if (!isNaN(newSidebarWidth)) {\n setSidebarWidth(newSidebarWidth);\n }\n };\n\n return (\n <>\n
\n {logsFrames.length > 1 && (\n
\n \n {\n return {\n label: frame.refId,\n value: frame.refId,\n };\n })}\n onChange={onFrameSelectorChange}\n />\n \n
\n )}\n
\n
\n \n
\n \n \n
\n \n \n
\n \n );\n}\n\nconst normalize = (value: number, total: number): number => {\n return Math.ceil((100 * value) / total);\n};\n\nfunction getStyles(theme: GrafanaTheme2, height: number, width: number) {\n return {\n wrapper: css({\n display: 'flex',\n }),\n sidebar: css({\n height: height,\n fontSize: theme.typography.pxToRem(11),\n overflowY: 'hidden',\n width: width,\n paddingRight: theme.spacing(3),\n }),\n rzHandle: css({\n background: theme.colors.secondary.main,\n transition: '0.3s background ease-in-out',\n position: 'relative',\n height: '50% !important',\n width: `${theme.spacing(1)} !important`,\n top: '25% !important',\n right: `${theme.spacing(1)} !important`,\n cursor: 'grab',\n borderRadius: theme.shape.radius.pill,\n ['&:hover']: {\n background: theme.colors.secondary.shade,\n },\n }),\n };\n}\n\nexport const getLogsTableHeight = () => {\n // Instead of making the height of the table based on the content (like in the table panel itself), let's try to use the vertical space that is available.\n // Since this table is in explore, we can expect the user to be running multiple queries that return disparate numbers of rows and labels in the same session\n // Also changing the height of the table between queries can be and cause content to jump, so we'll set a minimum height of 500px, and a max based on the innerHeight\n // Ideally the table container should always be able to fit in the users viewport without needing to scroll\n return Math.max(window.innerHeight - 500, 500);\n};\n","import { css } from '@emotion/css';\nimport React, { useState } from 'react';\n\nimport { DataQueryError, GrafanaTheme2 } from '@grafana/data';\nimport { Alert, AlertVariant, Button, useTheme2 } from '@grafana/ui';\n\ntype Props = {\n error?: DataQueryError;\n title: string;\n severity?: AlertVariant;\n suggestedAction?: string;\n onSuggestedAction?(): void;\n onRemove?(): void;\n};\nexport function SupplementaryResultError(props: Props) {\n const [isOpen, setIsOpen] = useState(false);\n const SHORT_ERROR_MESSAGE_LIMIT = 100;\n const { error, title, suggestedAction, onSuggestedAction, onRemove, severity = 'warning' } = props;\n // generic get-error-message-logic, taken from\n // /public/app/features/explore/ErrorContainer.tsx\n const message = error?.message || error?.data?.message || '';\n const showButton = !isOpen && message.length > SHORT_ERROR_MESSAGE_LIMIT;\n const theme = useTheme2();\n const styles = getStyles(theme);\n\n return (\n
\n \n
\n {showButton ? (\n {\n setIsOpen(true);\n }}\n >\n Show details\n \n ) : (\n message\n )}\n {suggestedAction && onSuggestedAction && (\n
\n \n
\n )}\n
\n
\n
\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n supplementaryErrorContainer: css({\n width: '50%',\n minWidth: `${theme.breakpoints.values.sm}px`,\n margin: '0 auto',\n }),\n suggestedActionWrapper: css({\n height: theme.spacing(6),\n ['button']: {\n position: 'absolute',\n right: theme.spacing(2),\n top: theme.spacing(7),\n },\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { identity } from 'lodash';\nimport React from 'react';\n\nimport {\n AbsoluteTimeRange,\n DataQueryResponse,\n LoadingState,\n SplitOpen,\n EventBus,\n GrafanaTheme2,\n DataFrame,\n} from '@grafana/data';\nimport { TimeZone } from '@grafana/schema';\nimport { Icon, Tooltip, TooltipDisplayMode, useStyles2, useTheme2 } from '@grafana/ui';\n\nimport { getLogsVolumeDataSourceInfo, isLogsVolumeLimited } from '../../logs/utils';\nimport { ExploreGraph } from '../Graph/ExploreGraph';\n\ntype Props = {\n logsVolumeData: DataQueryResponse;\n allLogsVolumeMaximum: number;\n absoluteRange: AbsoluteTimeRange;\n timeZone: TimeZone;\n splitOpen: SplitOpen;\n width: number;\n onUpdateTimeRange: (timeRange: AbsoluteTimeRange) => void;\n onLoadLogsVolume: () => void;\n onHiddenSeriesChanged: (hiddenSeries: string[]) => void;\n eventBus: EventBus;\n annotations: DataFrame[];\n};\n\nexport function LogsVolumePanel(props: Props) {\n const { width, timeZone, splitOpen, onUpdateTimeRange, onHiddenSeriesChanged, allLogsVolumeMaximum } = 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 const logsVolumeData = props.logsVolumeData;\n\n const logsVolumeInfo = getLogsVolumeDataSourceInfo(logsVolumeData?.data);\n let extraInfo = logsVolumeInfo ? `${logsVolumeInfo.name}` : '';\n\n if (isLogsVolumeLimited(logsVolumeData.data)) {\n extraInfo = [\n extraInfo,\n 'This datasource does not support full-range histograms. The graph below is based on the logs seen in the response.',\n ]\n .filter(identity)\n .join('. ');\n }\n\n let extraInfoComponent = {extraInfo};\n\n if (logsVolumeData.state === LoadingState.Streaming) {\n extraInfoComponent = (\n <>\n {extraInfoComponent}\n \n \n \n \n );\n }\n\n return (\n
\n \n {extraInfoComponent &&
{extraInfoComponent}
}\n
\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n extraInfoContainer: css`\n display: flex;\n justify-content: end;\n position: absolute;\n right: 5px;\n top: -10px;\n font-size: ${theme.typography.bodySmall.fontSize};\n color: ${theme.colors.text.secondary};\n `,\n contentContainer: css`\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n `,\n streaming: css`\n color: ${theme.colors.success.text};\n `,\n };\n};\n","import { DataQueryError, DataQueryResponse } from '@grafana/data';\n\n// Currently we can only infer if an error response is a timeout or not.\nexport function isTimeoutErrorResponse(response: DataQueryResponse | undefined): boolean {\n if (!response) {\n return false;\n }\n if (!response.error && !response.errors) {\n return false;\n }\n\n const errors = response.error ? [response.error] : response.errors || [];\n\n return errors.some((error: DataQueryError) => {\n const message = `${error.message || error.data?.message}`?.toLowerCase();\n return message.includes('timeout');\n });\n}\n","import { css } from '@emotion/css';\nimport { flatten, groupBy, mapValues, sortBy } from 'lodash';\nimport React, { useMemo } from 'react';\n\nimport {\n AbsoluteTimeRange,\n DataFrame,\n DataQueryResponse,\n DataTopic,\n EventBus,\n GrafanaTheme2,\n LoadingState,\n SplitOpen,\n TimeZone,\n} from '@grafana/data';\nimport { Button, InlineField, Alert, useStyles2 } from '@grafana/ui';\n\nimport { mergeLogsVolumeDataFrames, isLogsVolumeLimited, getLogsVolumeMaximumRange } from '../../logs/utils';\nimport { SupplementaryResultError } from '../SupplementaryResultError';\n\nimport { LogsVolumePanel } from './LogsVolumePanel';\nimport { isTimeoutErrorResponse } from './utils/logsVolumeResponse';\n\ntype Props = {\n logsVolumeData: DataQueryResponse | undefined;\n absoluteRange: AbsoluteTimeRange;\n timeZone: TimeZone;\n splitOpen: SplitOpen;\n width: number;\n onUpdateTimeRange: (timeRange: AbsoluteTimeRange) => void;\n onLoadLogsVolume: () => void;\n onHiddenSeriesChanged: (hiddenSeries: string[]) => void;\n eventBus: EventBus;\n onClose?(): void;\n};\n\nexport const LogsVolumePanelList = ({\n logsVolumeData,\n absoluteRange,\n onUpdateTimeRange,\n width,\n onLoadLogsVolume,\n onHiddenSeriesChanged,\n eventBus,\n splitOpen,\n timeZone,\n onClose,\n}: Props) => {\n const {\n logVolumes,\n maximumValue: allLogsVolumeMaximumValue,\n maximumRange: allLogsVolumeMaximumRange,\n annotations,\n } = useMemo(() => {\n let maximumValue = -Infinity;\n const data = logsVolumeData?.data.filter((frame: DataFrame) => frame.meta?.dataTopic !== DataTopic.Annotations);\n const annotations =\n logsVolumeData?.data.filter((frame: DataFrame) => frame.meta?.dataTopic === DataTopic.Annotations) || [];\n const sorted = sortBy(data || [], 'meta.custom.datasourceName');\n const grouped = groupBy(sorted, 'meta.custom.datasourceName');\n const logVolumes = mapValues(grouped, (value) => {\n const mergedData = mergeLogsVolumeDataFrames(value);\n maximumValue = Math.max(maximumValue, mergedData.maximum);\n return mergedData.dataFrames;\n });\n const maximumRange = getLogsVolumeMaximumRange(flatten(Object.values(logVolumes)));\n return {\n maximumValue,\n maximumRange,\n logVolumes,\n annotations,\n };\n }, [logsVolumeData]);\n\n const styles = useStyles2(getStyles);\n\n const numberOfLogVolumes = Object.keys(logVolumes).length;\n\n const containsZoomed = Object.values(logVolumes).some((data: DataFrame[]) => {\n const zoomRatio = logsLevelZoomRatio(data, absoluteRange);\n return !isLogsVolumeLimited(data) && zoomRatio && zoomRatio < 1;\n });\n\n const timeoutError = isTimeoutErrorResponse(logsVolumeData);\n\n const visibleRange = {\n from: Math.max(absoluteRange.from, allLogsVolumeMaximumRange.from),\n to: Math.min(absoluteRange.to, allLogsVolumeMaximumRange.to),\n };\n\n if (logsVolumeData?.state === LoadingState.Loading) {\n return Loading...;\n } else if (timeoutError) {\n return (\n \n );\n } else if (logsVolumeData?.error !== undefined) {\n return ;\n }\n\n if (numberOfLogVolumes === 0) {\n return (\n
\n \n No volume information available for the current queries and time range.\n \n
\n );\n }\n\n return (\n
\n {Object.keys(logVolumes).map((name, index) => {\n const logsVolumeData = { data: logVolumes[name] };\n return (\n 1 ? () => {} : onHiddenSeriesChanged}\n eventBus={eventBus}\n annotations={annotations}\n />\n );\n })}\n {containsZoomed && (\n
\n \n
\n )}\n
\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n listContainer: css`\n padding-top: 10px;\n `,\n extraInfoContainer: css`\n display: flex;\n justify-content: end;\n position: absolute;\n right: 5px;\n top: 5px;\n `,\n oldInfoText: css`\n font-size: ${theme.typography.bodySmall.fontSize};\n color: ${theme.colors.text.secondary};\n `,\n alertContainer: css`\n width: 50%;\n min-width: ${theme.breakpoints.values.sm}px;\n margin: 0 auto;\n `,\n };\n};\n\nfunction logsLevelZoomRatio(\n logsVolumeData: DataFrame[] | undefined,\n selectedTimeRange: AbsoluteTimeRange\n): number | undefined {\n const dataRange = logsVolumeData && logsVolumeData[0] && logsVolumeData[0].meta?.custom?.absoluteRange;\n return dataRange ? (selectedTimeRange.from - selectedTimeRange.to) / (dataRange.from - dataRange.to) : undefined;\n}\n","import { css, cx } from '@emotion/css';\nimport { capitalize } from 'lodash';\nimport memoizeOne from 'memoize-one';\nimport React, { createRef, PureComponent } from 'react';\n\nimport {\n AbsoluteTimeRange,\n CoreApp,\n DataFrame,\n DataHoverClearEvent,\n DataHoverEvent,\n DataQueryResponse,\n EventBus,\n ExploreLogsPanelState,\n ExplorePanelsState,\n Field,\n GrafanaTheme2,\n LinkModel,\n LoadingState,\n LogLevel,\n LogRowContextOptions,\n LogRowModel,\n LogsDedupDescription,\n LogsDedupStrategy,\n LogsMetaItem,\n LogsSortOrder,\n rangeUtil,\n RawTimeRange,\n serializeStateToUrlParam,\n SplitOpen,\n TimeRange,\n urlUtil,\n} from '@grafana/data';\nimport { config, reportInteraction } from '@grafana/runtime';\nimport { DataQuery, TimeZone } from '@grafana/schema';\nimport {\n Button,\n InlineField,\n InlineFieldRow,\n InlineSwitch,\n PanelChrome,\n RadioButtonGroup,\n Themeable2,\n withTheme2,\n} from '@grafana/ui';\nimport store from 'app/core/store';\nimport { createAndCopyShortLink } from 'app/core/utils/shortLinks';\nimport { InfiniteScroll } from 'app/features/logs/components/InfiniteScroll';\nimport { getLogLevelFromKey } from 'app/features/logs/utils';\nimport { dispatch, getState } from 'app/store/store';\n\nimport { ExploreItemState } from '../../../types';\nimport { LogRows } from '../../logs/components/LogRows';\nimport { LogRowContextModal } from '../../logs/components/log-context/LogRowContextModal';\nimport { dedupLogRows, filterLogLevels } from '../../logs/logsModel';\nimport { getUrlStateFromPaneState } from '../hooks/useStateSync';\nimport { changePanelState } from '../state/explorePane';\n\nimport { LogsFeedback } from './LogsFeedback';\nimport { LogsMetaRow } from './LogsMetaRow';\nimport LogsNavigation from './LogsNavigation';\nimport { getLogsTableHeight, LogsTableWrap } from './LogsTableWrap';\nimport { LogsVolumePanelList } from './LogsVolumePanelList';\nimport { SETTINGS_KEYS, visualisationTypeKey } from './utils/logs';\n\ninterface Props extends Themeable2 {\n width: number;\n splitOpen: SplitOpen;\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: string;\n datasourceType?: string;\n logsVolumeEnabled: boolean;\n logsVolumeData: DataQueryResponse | undefined;\n onSetLogsVolumeEnabled: (enabled: boolean) => void;\n loadLogsVolumeData: () => void;\n showContextToggle?: (row: LogRowModel) => boolean;\n onChangeTime: (range: AbsoluteTimeRange) => void;\n onClickFilterLabel?: (key: string, value: string, frame?: DataFrame) => void;\n onClickFilterOutLabel?: (key: string, value: string, frame?: DataFrame) => void;\n onStartScanning?: () => void;\n onStopScanning?: () => void;\n getRowContext?: (row: LogRowModel, origRow: LogRowModel, options: LogRowContextOptions) => Promise;\n getRowContextQuery?: (\n row: LogRowModel,\n options?: LogRowContextOptions,\n cacheFilters?: boolean\n ) => Promise;\n getLogRowContextUi?: (row: LogRowModel, runContextQuery?: () => void) => React.ReactNode;\n getFieldLinks: (field: Field, rowIndex: number, dataFrame: DataFrame) => Array>;\n addResultsToCache: () => void;\n clearCache: () => void;\n eventBus: EventBus;\n panelState?: ExplorePanelsState;\n scrollElement?: HTMLDivElement;\n isFilterLabelActive?: (key: string, value: string, refId?: string) => Promise;\n logsFrames?: DataFrame[];\n range: TimeRange;\n onClickFilterValue?: (value: string, refId?: string) => void;\n onClickFilterOutValue?: (value: string, refId?: string) => void;\n loadMoreLogs?(range: AbsoluteTimeRange): void;\n}\n\nexport type LogsVisualisationType = 'table' | 'logs';\n\ninterface State {\n showLabels: boolean;\n showTime: boolean;\n wrapLogMessage: boolean;\n prettifyLogMessage: boolean;\n dedupStrategy: LogsDedupStrategy;\n hiddenLogLevels: LogLevel[];\n logsSortOrder: LogsSortOrder;\n isFlipping: boolean;\n displayedFields: string[];\n forceEscape: boolean;\n contextOpen: boolean;\n contextRow?: LogRowModel;\n tableFrame?: DataFrame;\n visualisationType?: LogsVisualisationType;\n logsContainer?: HTMLDivElement;\n}\n\n// we need to define the order of these explicitly\nconst DEDUP_OPTIONS = [\n LogsDedupStrategy.none,\n LogsDedupStrategy.exact,\n LogsDedupStrategy.numbers,\n LogsDedupStrategy.signature,\n];\n\nconst getDefaultVisualisationType = (): LogsVisualisationType => {\n const visualisationType = store.get(visualisationTypeKey);\n if (visualisationType === 'table') {\n return 'table';\n }\n return 'logs';\n};\n\nclass UnthemedLogs extends PureComponent {\n flipOrderTimer?: number;\n cancelFlippingTimer?: number;\n topLogsRef = createRef();\n logsVolumeEventBus: EventBus;\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 displayedFields: [],\n forceEscape: false,\n contextOpen: false,\n contextRow: undefined,\n tableFrame: undefined,\n visualisationType: this.props.panelState?.logs?.visualisationType ?? getDefaultVisualisationType(),\n logsContainer: undefined,\n };\n\n constructor(props: Props) {\n super(props);\n this.logsVolumeEventBus = props.eventBus.newScopedBus('logsvolume', { onlyLocal: 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 // If we're unmounting logs (e.g. switching to another datasource), we need to remove the table specific panel state, otherwise it will persist in the explore url\n if (\n this.props?.panelState?.logs?.columns ||\n this.props?.panelState?.logs?.refId ||\n this.props?.panelState?.logs?.labelFieldName\n ) {\n dispatch(\n changePanelState(this.props.exploreId, 'logs', {\n ...this.props.panelState?.logs,\n columns: undefined,\n visualisationType: this.state.visualisationType,\n labelFieldName: undefined,\n refId: undefined,\n })\n );\n }\n }\n\n updatePanelState = (logsPanelState: Partial) => {\n const state: ExploreItemState | undefined = getState().explore.panes[this.props.exploreId];\n if (state?.panelsState) {\n dispatch(\n changePanelState(this.props.exploreId, 'logs', {\n ...state.panelsState.logs,\n columns: logsPanelState.columns ?? this.props.panelState?.logs?.columns,\n visualisationType: logsPanelState.visualisationType ?? this.state.visualisationType,\n labelFieldName: logsPanelState.labelFieldName,\n refId: logsPanelState.refId ?? this.props.panelState?.logs?.refId,\n })\n );\n }\n };\n\n componentDidUpdate(prevProps: Readonly): void {\n if (this.props.loading && !prevProps.loading && this.props.panelState?.logs?.id) {\n // loading stopped, so we need to remove any permalinked log lines\n delete this.props.panelState.logs.id;\n\n dispatch(\n changePanelState(this.props.exploreId, 'logs', {\n ...this.props.panelState,\n })\n );\n }\n if (this.props.panelState?.logs?.visualisationType !== prevProps.panelState?.logs?.visualisationType) {\n const visualisationType = this.props.panelState?.logs?.visualisationType ?? getDefaultVisualisationType();\n\n this.setState({\n visualisationType: visualisationType,\n });\n store.set(visualisationTypeKey, visualisationType);\n }\n }\n\n onLogRowHover = (row?: LogRowModel) => {\n if (!row) {\n this.props.eventBus.publish(new DataHoverClearEvent());\n } else {\n this.props.eventBus.publish(\n new DataHoverEvent({\n point: {\n time: row.timeEpochMs,\n },\n })\n );\n }\n };\n\n onLogsContainerRef = (node: HTMLDivElement) => {\n this.setState({ logsContainer: node });\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 onChangeVisualisation = (visualisation: LogsVisualisationType) => {\n this.setState(() => ({\n visualisationType: visualisation,\n }));\n const payload = {\n ...this.props.panelState?.logs,\n visualisationType: visualisation,\n };\n this.updatePanelState(payload);\n\n reportInteraction('grafana_explore_logs_visualisation_changed', {\n newVisualizationType: visualisation,\n datasourceType: this.props.datasourceType ?? 'unknown',\n });\n };\n\n onChangeDedup = (dedupStrategy: LogsDedupStrategy) => {\n reportInteraction('grafana_explore_logs_deduplication_clicked', {\n deduplicationType: dedupStrategy,\n datasourceType: this.props.datasourceType,\n });\n this.setState({ dedupStrategy });\n };\n\n onChangeLabels = (event: React.ChangeEvent) => {\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) => {\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) => {\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) => {\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) => getLogLevelFromKey(level));\n this.setState({ hiddenLogLevels });\n };\n\n onToggleLogsVolumeCollapse = (collapsed: boolean) => {\n this.props.onSetLogsVolumeEnabled(!collapsed);\n reportInteraction('grafana_explore_logs_histogram_toggle_clicked', {\n datasourceType: this.props.datasourceType,\n type: !collapsed ? 'open' : 'close',\n });\n };\n\n onClickScan = (event: React.SyntheticEvent) => {\n event.preventDefault();\n if (this.props.onStartScanning) {\n this.props.onStartScanning();\n reportInteraction('grafana_explore_logs_scanning_button_clicked', {\n type: 'start',\n datasourceType: this.props.datasourceType,\n });\n }\n };\n\n onClickStopScan = (event: React.SyntheticEvent) => {\n event.preventDefault();\n if (this.props.onStopScanning) {\n this.props.onStopScanning();\n }\n };\n\n showField = (key: string) => {\n const index = this.state.displayedFields.indexOf(key);\n\n if (index === -1) {\n this.setState((state) => {\n return {\n displayedFields: state.displayedFields.concat(key),\n };\n });\n }\n };\n\n hideField = (key: string) => {\n const index = this.state.displayedFields.indexOf(key);\n if (index > -1) {\n this.setState((state) => {\n return {\n displayedFields: state.displayedFields.filter((k) => key !== k),\n };\n });\n }\n };\n\n clearDetectedFields = () => {\n this.setState((state) => {\n return {\n displayedFields: [],\n };\n });\n };\n\n onCloseContext = () => {\n this.setState({\n contextOpen: false,\n contextRow: undefined,\n });\n };\n\n onOpenContext = (row: LogRowModel, onClose: () => void) => {\n // we are setting the `contextOpen` open state and passing it down to the `LogRow` in order to highlight the row when a LogContext is open\n this.setState({\n contextOpen: true,\n contextRow: row,\n });\n reportInteraction('grafana_explore_logs_log_context_opened', {\n datasourceType: row.datasourceType,\n logRowUid: row.uid,\n });\n this.onCloseContext = () => {\n this.setState({\n contextOpen: false,\n contextRow: undefined,\n });\n reportInteraction('grafana_explore_logs_log_context_closed', {\n datasourceType: row.datasourceType,\n logRowUid: row.uid,\n });\n onClose();\n };\n };\n\n getPermalinkRange(row: LogRowModel) {\n const range = {\n from: new Date(this.props.absoluteRange.from).toISOString(),\n to: new Date(this.props.absoluteRange.to).toISOString(),\n };\n if (!config.featureToggles.logsInfiniteScrolling) {\n return range;\n }\n\n // With infinite scrolling, the time range of the log line can be after the absolute range or beyond the request line limit, so we need to adjust\n // Look for the previous sibling log, and use its timestamp\n const allLogs = this.props.logRows.filter((logRow) => logRow.dataFrame.refId === row.dataFrame.refId);\n const prevLog = allLogs[allLogs.indexOf(row) - 1];\n\n if (row.timeEpochMs > this.props.absoluteRange.to && !prevLog) {\n // Because there's no sibling and the current `to` is oldest than the log, we have no reference we can use for the interval\n // This only happens when you scroll into the future and you want to share the first log of the list\n return {\n from: new Date(this.props.absoluteRange.from).toISOString(),\n // Slide 1ms otherwise it's very likely to be omitted in the results\n to: new Date(row.timeEpochMs + 1).toISOString(),\n };\n }\n\n return {\n from: new Date(this.props.absoluteRange.from).toISOString(),\n to: new Date(prevLog ? prevLog.timeEpochMs : this.props.absoluteRange.to).toISOString(),\n };\n }\n\n onPermalinkClick = async (row: LogRowModel) => {\n // this is an extra check, to be sure that we are not\n // creating permalinks for logs without an id-field.\n // normally it should never happen, because we do not\n // display the permalink button in such cases.\n if (row.rowId === undefined) {\n return;\n }\n\n // get explore state, add log-row-id and make timerange absolute\n const urlState = getUrlStateFromPaneState(getState().explore.panes[this.props.exploreId]!);\n urlState.panelsState = {\n ...this.props.panelState,\n logs: { id: row.uid, visualisationType: this.state.visualisationType ?? getDefaultVisualisationType() },\n };\n urlState.range = this.getPermalinkRange(row);\n\n // append changed urlState to baseUrl\n const serializedState = serializeStateToUrlParam(urlState);\n const baseUrl = /.*(?=\\/explore)/.exec(`${window.location.href}`)![0];\n const url = urlUtil.renderUrl(`${baseUrl}/explore`, { left: serializedState });\n await createAndCopyShortLink(url);\n\n reportInteraction('grafana_explore_logs_permalink_clicked', {\n datasourceType: row.datasourceType ?? 'unknown',\n logRowUid: row.uid,\n logRowLevel: row.logLevel,\n });\n };\n\n scrollIntoView = (element: HTMLElement) => {\n if (config.featureToggles.logsInfiniteScrolling) {\n if (this.state.logsContainer) {\n this.topLogsRef.current?.scrollIntoView();\n this.state.logsContainer.scroll({\n behavior: 'smooth',\n top: this.state.logsContainer.scrollTop + element.getBoundingClientRect().top - window.innerHeight / 2,\n });\n }\n\n return;\n }\n const { scrollElement } = this.props;\n\n if (scrollElement) {\n scrollElement.scroll({\n behavior: 'smooth',\n top: scrollElement.scrollTop + element.getBoundingClientRect().top - window.innerHeight / 2,\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 createNavigationRange = memoizeOne((logRows: LogRowModel[]): { from: number; to: number } | undefined => {\n if (!logRows || logRows.length === 0) {\n return undefined;\n }\n const firstTimeStamp = logRows[0].timeEpochMs;\n const lastTimeStamp = logRows[logRows.length - 1].timeEpochMs;\n\n if (lastTimeStamp < firstTimeStamp) {\n return { from: lastTimeStamp, to: firstTimeStamp };\n }\n\n return { from: firstTimeStamp, to: lastTimeStamp };\n });\n\n scrollToTopLogs = () => {\n if (config.featureToggles.logsInfiniteScrolling) {\n if (this.state.logsContainer) {\n this.state.logsContainer.scroll({\n behavior: 'auto',\n top: 0,\n });\n }\n }\n this.topLogsRef.current?.scrollIntoView();\n };\n\n render() {\n const {\n width,\n splitOpen,\n logRows,\n logsMeta,\n logsVolumeEnabled,\n logsVolumeData,\n loadLogsVolumeData,\n loading = false,\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 getRowContext,\n getLogRowContextUi,\n getRowContextQuery,\n loadMoreLogs,\n } = this.props;\n\n const {\n showLabels,\n showTime,\n wrapLogMessage,\n prettifyLogMessage,\n dedupStrategy,\n hiddenLogLevels,\n logsSortOrder,\n isFlipping,\n displayedFields,\n forceEscape,\n contextOpen,\n contextRow,\n } = this.state;\n\n const tableHeight = getLogsTableHeight();\n const styles = getStyles(theme, wrapLogMessage, tableHeight);\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 const navigationRange = this.createNavigationRange(logRows);\n\n const scanText = scanRange ? `Scanning ${rangeUtil.describeTimeRange(scanRange)}` : 'Scanning...';\n\n return (\n <>\n {getRowContext && contextRow && (\n getRowContext(row, contextRow, options)}\n getRowContextQuery={getRowContextQuery}\n getLogRowContextUi={getLogRowContextUi}\n logsSortOrder={logsSortOrder}\n timeZone={timeZone}\n />\n )}\n \n {logsVolumeEnabled && (\n this.onToggleLogsVolumeCollapse(true)}\n />\n )}\n \n \n \n \n )\n ) : null,\n ]}\n title={'Logs'}\n actions={\n <>\n {config.featureToggles.logsExploreTableVisualisation && (\n
\n \n
\n )}\n \n }\n loadingState={loading ? LoadingState.Loading : LoadingState.Done}\n >\n
\n {this.state.visualisationType !== 'table' && (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ({\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 \n \n\n
\n \n \n \n
\n
\n )}\n
\n \n
\n \n {this.state.visualisationType === 'table' && hasData && (\n
\n {/* Width should be full width minus logs navigation and padding */}\n \n
\n )}\n {this.state.visualisationType === 'logs' && hasData && (\n \n \n \n \n
\n )}\n {!loading && !hasData && !scanning && (\n
\n
\n No logs found.\n \n
\n
\n )}\n {scanning && (\n
\n
\n {scanText}\n \n
\n
\n )}\n \n \n \n \n );\n }\n}\n\nexport const Logs = withTheme2(UnthemedLogs);\n\nconst getStyles = (theme: GrafanaTheme2, wrapLogMessage: boolean, tableHeight: number) => {\n return {\n noData: css({\n '& > *': {\n marginLeft: '0.5em',\n },\n }),\n logOptions: css({\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n flexWrap: 'wrap',\n backgroundColor: theme.colors.background.primary,\n padding: `${theme.spacing(1)} ${theme.spacing(2)}`,\n borderRadius: theme.shape.radius.default,\n margin: `${theme.spacing(0, 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 marginRight: '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 flexDirection: 'row',\n justifyContent: 'space-between',\n }),\n logsTable: css({\n maxHeight: `${tableHeight}px`,\n }),\n scrollableLogRows: css({\n overflowY: 'scroll',\n width: '100%',\n maxHeight: '75vh',\n }),\n logRows: css({\n overflowX: `${wrapLogMessage ? 'unset' : 'scroll'}`,\n overflowY: 'visible',\n width: '100%',\n }),\n visualisationType: css({\n display: 'flex',\n flex: '1',\n justifyContent: 'space-between',\n }),\n visualisationTypeRadio: css({\n margin: `0 0 0 ${theme.spacing(1)}`,\n }),\n stickyNavigation: css({\n overflow: 'visible',\n ...(config.featureToggles.logsInfiniteScrolling && { marginBottom: '0px' }),\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 \n {children}\n \n );\n}\n","import React, { PureComponent } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport {\n AbsoluteTimeRange,\n Field,\n hasLogsContextSupport,\n hasLogsContextUiSupport,\n LoadingState,\n LogRowModel,\n RawTimeRange,\n EventBus,\n SplitOpen,\n DataFrame,\n SupplementaryQueryType,\n DataQueryResponse,\n LogRowContextOptions,\n DataSourceWithLogsContextSupport,\n DataSourceApi,\n hasToggleableQueryFiltersSupport,\n DataSourceWithQueryModificationSupport,\n hasQueryModificationSupport,\n} from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { DataQuery } from '@grafana/schema';\nimport { Collapse } from '@grafana/ui';\nimport { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource';\nimport { StoreState } from 'app/types';\nimport { ExploreItemState } from 'app/types/explore';\n\nimport { getTimeZone } from '../../profile/state/selectors';\nimport {\n addResultsToCache,\n clearCache,\n loadSupplementaryQueryData,\n selectIsWaitingForData,\n setSupplementaryQueryEnabled,\n} from '../state/query';\nimport { updateTimeRange, loadMoreLogs } from '../state/time';\nimport { LiveTailControls } from '../useLiveTailControls';\nimport { getFieldLinksForExplore } from '../utils/links';\n\nimport { LiveLogsWithTheme } from './LiveLogs';\nimport { Logs } from './Logs';\nimport { LogsCrossFadeTransition } from './utils/LogsCrossFadeTransition';\n\ninterface LogsContainerProps extends PropsFromRedux {\n width: number;\n exploreId: string;\n scanRange?: RawTimeRange;\n syncedTimes: boolean;\n loadingState: LoadingState;\n onClickFilterLabel: (key: string, value: string, frame?: DataFrame) => void;\n onClickFilterOutLabel: (key: string, value: string, frame?: DataFrame) => void;\n onStartScanning: () => void;\n onStopScanning: () => void;\n eventBus: EventBus;\n splitOpenFn: SplitOpen;\n scrollElement?: HTMLDivElement;\n isFilterLabelActive: (key: string, value: string, refId?: string) => Promise;\n onClickFilterValue: (value: string, refId?: string) => void;\n onClickFilterOutValue: (value: string, refId?: string) => void;\n}\n\ntype DataSourceInstance =\n | DataSourceApi\n | (DataSourceApi & DataSourceWithLogsContextSupport)\n | (DataSourceApi & DataSourceWithQueryModificationSupport);\n\ninterface LogsContainerState {\n dsInstances: Record;\n}\n\nclass LogsContainer extends PureComponent {\n state: LogsContainerState = {\n dsInstances: {},\n };\n\n componentDidMount() {\n this.updateDataSourceInstances();\n }\n\n componentDidUpdate(prevProps: LogsContainerProps) {\n if (prevProps.logsQueries !== this.props.logsQueries) {\n this.updateDataSourceInstances();\n }\n }\n\n private updateDataSourceInstances() {\n const { logsQueries, datasourceInstance } = this.props;\n if (!logsQueries || !datasourceInstance) {\n return;\n }\n\n const dsInstances: Record = {};\n\n // Not in mixed mode.\n if (datasourceInstance.uid !== MIXED_DATASOURCE_NAME) {\n logsQueries.forEach(({ refId }) => {\n dsInstances[refId] = datasourceInstance;\n });\n this.setState({ dsInstances });\n return;\n }\n\n // Mixed mode.\n const dsPromises: Array> = [];\n for (const query of logsQueries) {\n if (!query.datasource) {\n continue;\n }\n const mustCheck = !dsInstances[query.refId] || dsInstances[query.refId].uid !== query.datasource.uid;\n if (mustCheck) {\n dsPromises.push(\n new Promise((resolve) => {\n getDataSourceSrv()\n .get(query.datasource)\n .then((ds) => {\n resolve({ ds, refId: query.refId });\n });\n })\n );\n }\n }\n\n if (!dsPromises.length) {\n return;\n }\n\n Promise.all(dsPromises).then((instances) => {\n instances.forEach(({ ds, refId }) => {\n dsInstances[refId] = ds;\n });\n this.setState({ dsInstances });\n });\n }\n\n onChangeTime = (absoluteRange: AbsoluteTimeRange) => {\n const { exploreId, updateTimeRange } = this.props;\n updateTimeRange({ exploreId, absoluteRange });\n };\n\n loadMoreLogs = (absoluteRange: AbsoluteTimeRange) => {\n const { exploreId, loadMoreLogs } = this.props;\n loadMoreLogs({ exploreId, absoluteRange });\n };\n\n private getQuery(\n logsQueries: DataQuery[] | undefined,\n row: LogRowModel,\n datasourceInstance: DataSourceApi & DataSourceWithLogsContextSupport\n ) {\n // we need to find the query, and we need to be very sure that it's a query\n // from this datasource\n return (logsQueries ?? []).find(\n (q) => q.refId === row.dataFrame.refId && q.datasource != null && q.datasource.type === datasourceInstance.type\n );\n }\n\n getLogRowContext = async (\n row: LogRowModel,\n origRow: LogRowModel,\n options: LogRowContextOptions\n ): Promise => {\n const { logsQueries } = this.props;\n\n if (!origRow.dataFrame.refId || !this.state.dsInstances[origRow.dataFrame.refId]) {\n return Promise.resolve([]);\n }\n\n const ds = this.state.dsInstances[origRow.dataFrame.refId];\n if (!hasLogsContextSupport(ds)) {\n return Promise.resolve([]);\n }\n\n const query = this.getQuery(logsQueries, origRow, ds);\n return query ? ds.getLogRowContext(row, options, query) : Promise.resolve([]);\n };\n\n getLogRowContextQuery = async (\n row: LogRowModel,\n options?: LogRowContextOptions,\n cacheFilters = true\n ): Promise => {\n const { logsQueries } = this.props;\n\n if (!row.dataFrame.refId || !this.state.dsInstances[row.dataFrame.refId]) {\n return Promise.resolve(null);\n }\n\n const ds = this.state.dsInstances[row.dataFrame.refId];\n if (!hasLogsContextSupport(ds)) {\n return Promise.resolve(null);\n }\n\n const query = this.getQuery(logsQueries, row, ds);\n return query && ds.getLogRowContextQuery\n ? ds.getLogRowContextQuery(row, options, query, cacheFilters)\n : Promise.resolve(null);\n };\n\n getLogRowContextUi = (row: LogRowModel, runContextQuery?: () => void): React.ReactNode => {\n const { logsQueries } = this.props;\n\n if (!row.dataFrame.refId || !this.state.dsInstances[row.dataFrame.refId]) {\n return <>;\n }\n\n const ds = this.state.dsInstances[row.dataFrame.refId];\n if (!hasLogsContextSupport(ds)) {\n return <>;\n }\n\n const query = this.getQuery(logsQueries, row, ds);\n return query && hasLogsContextUiSupport(ds) && ds.getLogRowContextUi ? (\n ds.getLogRowContextUi(row, runContextQuery, query)\n ) : (\n <>\n );\n };\n\n showContextToggle = (row?: LogRowModel): boolean => {\n if (!row?.dataFrame.refId || !this.state.dsInstances[row.dataFrame.refId]) {\n return false;\n }\n return hasLogsContextSupport(this.state.dsInstances[row.dataFrame.refId]);\n };\n\n getFieldLinks = (field: Field, rowIndex: number, dataFrame: DataFrame) => {\n const { splitOpenFn, range } = this.props;\n return getFieldLinksForExplore({ field, rowIndex, splitOpenFn, range, dataFrame });\n };\n\n logDetailsFilterAvailable = () => {\n return Object.values(this.state.dsInstances).some(\n (ds) => ds?.modifyQuery || hasQueryModificationSupport(ds) || hasToggleableQueryFiltersSupport(ds)\n );\n };\n\n filterValueAvailable = () => {\n return Object.values(this.state.dsInstances).some(\n (ds) => hasQueryModificationSupport(ds) && ds?.getSupportedQueryModifications().includes('ADD_STRING_FILTER')\n );\n };\n\n filterOutValueAvailable = () => {\n return Object.values(this.state.dsInstances).some(\n (ds) => hasQueryModificationSupport(ds) && ds?.getSupportedQueryModifications().includes('ADD_STRING_FILTER_OUT')\n );\n };\n\n addResultsToCache = () => {\n this.props.addResultsToCache(this.props.exploreId);\n };\n\n clearCache = () => {\n this.props.clearCache(this.props.exploreId);\n };\n\n render() {\n const {\n loading,\n loadingState,\n logRows,\n logsMeta,\n logsSeries,\n logsQueries,\n loadSupplementaryQueryData,\n setSupplementaryQueryEnabled,\n onClickFilterLabel,\n onClickFilterOutLabel,\n onStartScanning,\n onStopScanning,\n absoluteRange,\n timeZone,\n visibleRange,\n scanning,\n range,\n width,\n splitOpenFn,\n isLive,\n exploreId,\n logsVolume,\n scrollElement,\n } = this.props;\n\n if (!logRows) {\n return null;\n }\n\n return (\n <>\n \n \n \n {(controls) => (\n \n )}\n \n \n \n \n \n setSupplementaryQueryEnabled(exploreId, enabled, SupplementaryQueryType.LogsVolume)\n }\n logsVolumeData={logsVolume.data}\n logsQueries={logsQueries}\n width={width}\n splitOpen={splitOpenFn}\n loading={loading}\n loadingState={loadingState}\n loadLogsVolumeData={() => loadSupplementaryQueryData(exploreId, SupplementaryQueryType.LogsVolume)}\n onChangeTime={this.onChangeTime}\n loadMoreLogs={this.loadMoreLogs}\n onClickFilterLabel={this.logDetailsFilterAvailable() ? onClickFilterLabel : undefined}\n onClickFilterOutLabel={this.logDetailsFilterAvailable() ? onClickFilterOutLabel : undefined}\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 getRowContextQuery={this.getLogRowContextQuery}\n getLogRowContextUi={this.getLogRowContextUi}\n getFieldLinks={this.getFieldLinks}\n addResultsToCache={this.addResultsToCache}\n clearCache={this.clearCache}\n eventBus={this.props.eventBus}\n panelState={this.props.panelState}\n logsFrames={this.props.logsFrames}\n scrollElement={scrollElement}\n isFilterLabelActive={this.logDetailsFilterAvailable() ? this.props.isFilterLabelActive : undefined}\n range={range}\n onClickFilterValue={this.filterValueAvailable() ? this.props.onClickFilterValue : undefined}\n onClickFilterOutValue={this.filterOutValueAvailable() ? this.props.onClickFilterOutValue : undefined}\n />\n \n \n );\n }\n}\n\nfunction mapStateToProps(state: StoreState, { exploreId }: { exploreId: string }) {\n const explore = state.explore;\n const item: ExploreItemState = explore.panes[exploreId]!;\n const {\n logsResult,\n scanning,\n datasourceInstance,\n isLive,\n isPaused,\n clearedAtIndex,\n range,\n absoluteRange,\n supplementaryQueries,\n } = item;\n const loading = selectIsWaitingForData(exploreId)(state);\n const panelState = item.panelsState;\n const timeZone = getTimeZone(state.user);\n const logsVolume = supplementaryQueries[SupplementaryQueryType.LogsVolume];\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 clearedAtIndex,\n range,\n absoluteRange,\n logsVolume,\n panelState,\n logsFrames: item.queryResponse.logsFrames,\n };\n}\n\nconst mapDispatchToProps = {\n updateTimeRange,\n loadMoreLogs,\n addResultsToCache,\n clearCache,\n loadSupplementaryQueryData,\n setSupplementaryQueryEnabled,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps;\n\nexport default connector(LogsContainer);\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport {\n DataQueryResponse,\n DataSourceApi,\n GrafanaTheme2,\n hasSupplementaryQuerySupport,\n LoadingState,\n LogsDedupStrategy,\n SplitOpen,\n SupplementaryQueryType,\n} from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime';\nimport { DataQuery, TimeZone } from '@grafana/schema';\nimport { Button, Collapse, Icon, Tooltip, useStyles2 } from '@grafana/ui';\nimport store from 'app/core/store';\n\nimport { LogRows } from '../../logs/components/LogRows';\nimport { dataFrameToLogsModel } from '../../logs/logsModel';\nimport { SupplementaryResultError } from '../SupplementaryResultError';\n\nimport { SETTINGS_KEYS } from './utils/logs';\n\ntype Props = {\n queryResponse: DataQueryResponse | undefined;\n enabled: boolean;\n timeZone: TimeZone;\n queries: DataQuery[];\n datasourceInstance: DataSourceApi | null | undefined;\n splitOpen: SplitOpen;\n setLogsSampleEnabled: (enabled: boolean) => void;\n};\n\nexport function LogsSamplePanel(props: Props) {\n const { queryResponse, timeZone, enabled, setLogsSampleEnabled, datasourceInstance, queries, splitOpen } = props;\n\n const styles = useStyles2(getStyles);\n const onToggleLogsSampleCollapse = (isOpen: boolean) => {\n setLogsSampleEnabled(isOpen);\n reportInteraction('grafana_explore_logs_sample_toggle_clicked', {\n datasourceType: datasourceInstance?.type ?? 'unknown',\n type: isOpen ? 'open' : 'close',\n });\n };\n\n const OpenInSplitViewButton = () => {\n if (!datasourceInstance) {\n return null;\n }\n if (!hasSupplementaryQuerySupport(datasourceInstance, SupplementaryQueryType.LogsSample)) {\n return null;\n }\n\n const logSampleQueries = queries\n .map((query) => datasourceInstance.getSupplementaryQuery({ type: SupplementaryQueryType.LogsSample }, query))\n .filter((query): query is DataQuery => !!query);\n\n if (!logSampleQueries.length) {\n return null;\n }\n\n const onSplitOpen = () => {\n splitOpen({ queries: logSampleQueries, datasourceUid: datasourceInstance.uid });\n reportInteraction('grafana_explore_logs_sample_split_button_clicked', {\n datasourceType: datasourceInstance?.type ?? 'unknown',\n queriesCount: logSampleQueries.length,\n });\n };\n\n return (\n \n );\n };\n\n let LogsSamplePanelContent: JSX.Element | null;\n\n if (queryResponse === undefined) {\n LogsSamplePanelContent = null;\n } else if (queryResponse.error !== undefined) {\n LogsSamplePanelContent = (\n \n );\n } else if (queryResponse.state === LoadingState.Loading) {\n LogsSamplePanelContent = Logs sample is loading...;\n } else if (queryResponse.data.length === 0 || queryResponse.data.every((frame) => frame.length === 0)) {\n LogsSamplePanelContent = No logs sample data.;\n } else {\n const logs = dataFrameToLogsModel(queryResponse.data);\n LogsSamplePanelContent = (\n <>\n \n
\n \n
\n \n );\n }\n\n return queryResponse?.state !== LoadingState.NotStarted ? (\n \n Logs sample\n \n \n \n \n }\n isOpen={enabled}\n collapsible={true}\n onToggle={onToggleLogsSampleCollapse}\n >\n {LogsSamplePanelContent}\n \n ) : null;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n logSamplesButton: css`\n position: absolute;\n top: ${theme.spacing(1)};\n right: ${theme.spacing(1)};\n `,\n logContainer: css`\n overflow: scroll;\n `,\n infoTooltip: css`\n margin-left: ${theme.spacing(1)};\n `,\n };\n};\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data/src';\nimport { useStyles2, PanelContainer } from '@grafana/ui';\n\nexport const NoData = () => {\n const css = useStyles2(getStyles);\n return (\n <>\n \n {'No data'}\n \n \n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n label: 'no-data-card',\n padding: theme.spacing(3),\n background: theme.colors.background.primary,\n borderRadius: theme.shape.radius.default,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n flexGrow: 1,\n }),\n message: css({\n fontSize: theme.typography.h2.fontSize,\n padding: theme.spacing(4),\n color: theme.colors.text.disabled,\n }),\n});\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { LinkButton, CallToActionCard, Icon, useStyles2 } from '@grafana/ui';\nimport { contextSrv } from 'app/core/core';\nimport { AccessControlAction } from 'app/types';\n\nfunction getCardStyles(theme: GrafanaTheme2) {\n return css({\n maxWidth: `${theme.breakpoints.values.lg}px`,\n marginTop: theme.spacing(2),\n alignSelf: 'center',\n });\n}\n\nexport const NoDataSourceCallToAction = () => {\n const cardStyles = useStyles2(getCardStyles);\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 \n <> ProTip: You can also define data sources through configuration files. \n \n Learn more\n \n \n );\n\n const ctaElement = (\n \n Add data source\n \n );\n\n return ;\n};\n","import { css } from '@emotion/css';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport { useToggle, useWindowSize } from 'react-use';\n\nimport { applyFieldOverrides, DataFrame, GrafanaTheme2, SplitOpen } from '@grafana/data';\nimport { config, reportInteraction } from '@grafana/runtime';\nimport { useStyles2, useTheme2, PanelChrome } from '@grafana/ui';\n\nimport { NodeGraph } from '../../../plugins/panel/nodeGraph';\nimport { useCategorizeFrames } from '../../../plugins/panel/nodeGraph/useCategorizeFrames';\nimport { StoreState } from '../../../types';\nimport { useLinks } from '../utils/links';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n warningText: css`\n label: warningText;\n display: flex;\n align-items: center;\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: string;\n // When showing the node graph together with trace view we do some changes so it works better.\n withTraceView?: boolean;\n datasourceType: string;\n splitOpenFn: SplitOpen;\n}\n\ntype Props = OwnProps & ConnectedProps;\n\nexport function UnconnectedNodeGraphContainer(props: Props) {\n const { dataFrames, range, splitOpenFn, withTraceView, datasourceType } = props;\n const getLinks = useLinks(range, splitOpenFn);\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 [collapsed, toggleCollapsed] = useToggle(true);\n\n const toggled = () => {\n toggleCollapsed();\n reportInteraction('grafana_traces_node_graph_panel_clicked', {\n datasourceType: datasourceType,\n grafana_version: config.buildInfo.version,\n isExpanded: !open,\n });\n };\n\n // Calculate node graph height based on window and top position, with some padding\n const { height: windowHeight } = useWindowSize();\n const containerRef = useRef(null);\n const [top, setTop] = useState(250);\n useEffect(() => {\n if (containerRef.current) {\n const { top } = containerRef.current.getBoundingClientRect();\n setTop(top);\n }\n }, [containerRef]);\n const height = windowHeight - top - 32;\n\n const countWarning =\n withTraceView && nodes[0]?.length > 1000 ? (\n ({nodes[0].length} nodes, can be slow to load)\n ) : null;\n\n return (\n \n \n \n \n \n );\n}\n\nfunction mapStateToProps(state: StoreState, { exploreId }: OwnProps) {\n return {\n range: state.explore.panes[exploreId]!.range,\n };\n}\n\nconst connector = connect(mapStateToProps, {});\nexport const NodeGraphContainer = connector(UnconnectedNodeGraphContainer);\n","import { createSelector } from '@reduxjs/toolkit';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { CoreApp } from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime';\nimport { DataQuery } from '@grafana/schema';\nimport { getNextRefIdChar } from 'app/core/utils/query';\nimport { useDispatch, useSelector } from 'app/types';\n\nimport { getDatasourceSrv } from '../plugins/datasource_srv';\nimport { QueryEditorRows } from '../query/components/QueryEditorRows';\n\nimport { changeQueries, runQueries } from './state/query';\nimport { getExploreItemSelector } from './state/selectors';\n\ninterface Props {\n exploreId: string;\n}\n\nconst makeSelectors = (exploreId: string) => {\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(changeQueries({ exploreId, queries: newQueries }));\n },\n [dispatch, exploreId]\n );\n\n const onAddQuery = useCallback(\n (query: DataQuery) => {\n onChange([...queries, { ...query, refId: getNextRefIdChar(queries) }]);\n },\n [onChange, queries]\n );\n\n const onQueryCopied = () => {\n reportInteraction('grafana_explore_query_row_copy');\n };\n\n const onQueryRemoved = () => {\n reportInteraction('grafana_explore_query_row_remove');\n };\n\n const onQueryToggled = (queryStatus?: boolean) => {\n reportInteraction('grafana_query_row_toggle', queryStatus === undefined ? {} : { queryEnabled: queryStatus });\n };\n\n return (\n \n );\n};\n","import { css } from '@emotion/css';\nimport { cloneDeep } from 'lodash';\nimport React, { useEffect, useId, useRef, useState } from 'react';\nimport { useWindowSize } from 'react-use';\nimport { VariableSizeList as List } from 'react-window';\n\nimport { DataFrame, Field as DataFrameField } from '@grafana/data/';\nimport { reportInteraction } from '@grafana/runtime/src';\nimport { Field, Switch } from '@grafana/ui/';\n\nimport { ItemLabels } from './ItemLabels';\nimport RawListItem from './RawListItem';\nimport {\n getRawPrometheusListItemsFromDataFrame,\n RawPrometheusListItemEmptyValue,\n} from './utils/getRawPrometheusListItemsFromDataFrame';\n\nexport type instantQueryRawVirtualizedListData = { Value: string; __name__: string; [index: string]: string };\n\nexport interface RawListContainerProps {\n tableResult: DataFrame;\n}\n\nconst styles = {\n wrapper: css`\n height: 100%;\n overflow: scroll;\n `,\n switchWrapper: css`\n display: flex;\n flex-direction: row;\n margin-bottom: 0;\n `,\n switchLabel: css`\n margin-left: 15px;\n margin-bottom: 0;\n `,\n switch: css`\n margin-left: 10px;\n `,\n resultCount: css`\n margin-bottom: 4px;\n `,\n header: css`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 0;\n font-size: 12px;\n line-height: 1.25;\n `,\n};\n\nconst mobileWidthThreshold = 480;\nconst numberOfColumnsBeforeExpandedViewIsDefault = 2;\n\n/**\n * The container that provides the virtualized list to the child components\n * @param props\n * @constructor\n */\nconst RawListContainer = (props: RawListContainerProps) => {\n const { tableResult } = props;\n const dataFrame = cloneDeep(tableResult);\n const listRef = useRef(null);\n\n const valueLabels = dataFrame.fields.filter((field) => field.name.includes('Value'));\n const items = getRawPrometheusListItemsFromDataFrame(dataFrame);\n const { width } = useWindowSize();\n const [isExpandedView, setIsExpandedView] = useState(\n width <= mobileWidthThreshold || valueLabels.length > numberOfColumnsBeforeExpandedViewIsDefault\n );\n\n const onContentClick = () => {\n setIsExpandedView(!isExpandedView);\n const props = {\n isExpanded: !isExpandedView,\n };\n reportInteraction('grafana_explore_prometheus_instant_query_ui_raw_toggle_expand', props);\n };\n\n useEffect(() => {\n // After the expanded view has updated, tell the list to re-render\n listRef.current?.resetAfterIndex(0, true);\n }, [isExpandedView]);\n\n const calculateInitialHeight = (length: number): number => {\n const maxListHeight = 600;\n const shortListLength = 10;\n\n if (length < shortListLength) {\n let sum = 0;\n for (let i = 0; i < length; i++) {\n sum += getListItemHeight(i, true);\n }\n\n return Math.min(maxListHeight, sum);\n }\n\n return maxListHeight;\n };\n\n const getListItemHeight = (itemIndex: number, isExpandedView: boolean) => {\n const singleLineHeight = 32;\n const additionalLineHeight = 22;\n if (!isExpandedView) {\n return singleLineHeight;\n }\n const item = items[itemIndex];\n\n // Height of 1.5 lines, plus the number of non-value attributes times the height of additional lines\n return 1.5 * singleLineHeight + (Object.keys(item).length - valueLabels.length) * additionalLineHeight;\n };\n\n const switchId = `isExpandedView ${useId()}`;\n\n return (\n
\n
\n \n
\n \n
\n
\n\n
Result series: {items.length}
\n
\n\n
\n {\n <>\n {/* Show the value headings above all the values, but only if we're in the contracted view */}\n {valueLabels.length > 1 && !isExpandedView && (\n \n )}\n getListItemHeight(index, isExpandedView)}\n height={calculateInitialHeight(items.length)}\n width=\"100%\"\n >\n {({ index, style }) => {\n let filteredValueLabels: DataFrameField[] | undefined;\n if (isExpandedView) {\n filteredValueLabels = valueLabels.filter((valueLabel) => {\n const itemWithValue = items[index][valueLabel.name];\n return itemWithValue && itemWithValue !== RawPrometheusListItemEmptyValue;\n });\n }\n\n return (\n
\n \n
\n );\n }}\n \n \n }\n
\n
\n );\n};\n\nexport default RawListContainer;\n","import { css } from '@emotion/css';\nimport React, { PureComponent } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport { applyFieldOverrides, DataFrame, SelectableValue, SplitOpen } from '@grafana/data';\nimport { getTemplateSrv, reportInteraction } from '@grafana/runtime';\nimport { TimeZone } from '@grafana/schema';\nimport { RadioButtonGroup, Table, AdHocFilterItem, PanelChrome } from '@grafana/ui';\nimport { config } from 'app/core/config';\nimport { PANEL_BORDER } from 'app/core/constants';\nimport { StoreState, TABLE_RESULTS_STYLE } from 'app/types';\nimport { ExploreItemState, TABLE_RESULTS_STYLES, TableResultsStyle } from 'app/types/explore';\n\nimport { MetaInfoText } from '../MetaInfoText';\nimport RawListContainer from '../PrometheusListView/RawListContainer';\nimport { exploreDataLinkPostProcessorFactory } from '../utils/links';\n\ninterface RawPrometheusContainerProps {\n ariaLabel?: string;\n exploreId: string;\n width: number;\n timeZone: TimeZone;\n onCellFilterAdded?: (filter: AdHocFilterItem) => void;\n showRawPrometheus?: boolean;\n splitOpenFn: SplitOpen;\n}\n\ninterface PrometheusContainerState {\n resultsStyle: TableResultsStyle;\n}\n\nfunction mapStateToProps(state: StoreState, { exploreId }: RawPrometheusContainerProps) {\n const explore = state.explore;\n const item: ExploreItemState = explore.panes[exploreId]!;\n const { tableResult, rawPrometheusResult, range, queryResponse } = item;\n const rawPrometheusFrame: DataFrame[] = rawPrometheusResult ? [rawPrometheusResult] : [];\n const result = (tableResult?.length ?? 0) > 0 && rawPrometheusResult ? tableResult : rawPrometheusFrame;\n const loading = queryResponse.state;\n\n return { loading, tableResult: result, range };\n}\n\nconst connector = connect(mapStateToProps, {});\n\ntype Props = RawPrometheusContainerProps & ConnectedProps;\n\nexport class RawPrometheusContainer extends PureComponent {\n constructor(props: Props) {\n super(props);\n\n // If resultsStyle is undefined we won't render the toggle, and the default table will be rendered\n if (props.showRawPrometheus) {\n this.state = {\n resultsStyle: TABLE_RESULTS_STYLE.raw,\n };\n }\n }\n\n onChangeResultsStyle = (resultsStyle: TableResultsStyle) => {\n this.setState({ resultsStyle });\n };\n\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[0].length * 35) + 35);\n }\n\n renderLabel = () => {\n const spacing = css({\n display: 'flex',\n justifyContent: 'space-between',\n flex: '1',\n });\n const ALL_GRAPH_STYLE_OPTIONS: Array> = TABLE_RESULTS_STYLES.map((style) => ({\n value: style,\n // capital-case it and switch `_` to ` `\n label: style[0].toUpperCase() + style.slice(1).replace(/_/, ' '),\n }));\n\n return (\n
\n {\n const props = {\n state:\n this.state.resultsStyle === TABLE_RESULTS_STYLE.table\n ? TABLE_RESULTS_STYLE.raw\n : TABLE_RESULTS_STYLE.table,\n };\n reportInteraction('grafana_explore_prometheus_instant_query_ui_toggle_clicked', props);\n }}\n size=\"sm\"\n options={ALL_GRAPH_STYLE_OPTIONS}\n value={this.state?.resultsStyle}\n onChange={this.onChangeResultsStyle}\n />\n
\n );\n };\n\n render() {\n const { loading, onCellFilterAdded, tableResult, width, splitOpenFn, range, ariaLabel, timeZone } = this.props;\n const height = this.getTableHeight();\n const tableWidth = width - config.theme.panelPadding * 2 - PANEL_BORDER;\n\n let dataFrames = tableResult;\n\n const dataLinkPostProcessor = exploreDataLinkPostProcessorFactory(splitOpenFn, range);\n\n if (dataFrames?.length) {\n dataFrames = applyFieldOverrides({\n data: dataFrames,\n timeZone,\n theme: config.theme2,\n replaceVariables: getTemplateSrv().replace.bind(getTemplateSrv()),\n fieldConfig: {\n defaults: {},\n overrides: [],\n },\n dataLinkPostProcessor,\n });\n }\n\n const frames = dataFrames?.filter(\n (frame: DataFrame | undefined): frame is DataFrame => !!frame && frame.length !== 0\n );\n\n const title = this.state.resultsStyle === TABLE_RESULTS_STYLE.raw ? 'Raw' : 'Table';\n const label = this.state?.resultsStyle !== undefined ? this.renderLabel() : 'Table';\n\n // Render table as default if resultsStyle is not set.\n const renderTable = !this.state?.resultsStyle || this.state?.resultsStyle === TABLE_RESULTS_STYLE.table;\n\n return (\n \n {frames?.length && (\n <>\n {renderTable && (\n \n )}\n {this.state?.resultsStyle === TABLE_RESULTS_STYLE.raw && }\n \n )}\n {!frames?.length && }\n \n );\n }\n}\n\nexport default connector(RawPrometheusContainer);\n","import React, { 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;\n}\n\nexport const FadeIn = (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 \n {(state) => (\n \n {props.children}\n \n )}\n \n );\n};\n","import React from 'react';\n\nimport { DataQueryError } from '@grafana/data';\nimport { Alert } from '@grafana/ui';\nimport { FadeIn } from 'app/core/components/Animations/FadeIn';\n\nexport interface ErrorContainerProps {\n queryError?: DataQueryError;\n}\n\nexport const ErrorContainer = (props: ErrorContainerProps) => {\n const { queryError } = props;\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\n return (\n \n \n {message}\n \n \n );\n};\n","import React from 'react';\n\nimport { LoadingState } from '@grafana/data';\nimport { useSelector } from 'app/types';\n\nimport { ErrorContainer } from './ErrorContainer';\n\ninterface Props {\n exploreId: string;\n}\nexport function ResponseErrorContainer(props: Props) {\n const queryResponse = useSelector((state) => state.explore.panes[props.exploreId]!.queryResponse);\n const queryError = queryResponse?.state === LoadingState.Error ? queryResponse?.error : undefined;\n\n // Errors with ref ids are shown below the corresponding query\n if (queryError?.refId) {\n return null;\n }\n\n return ;\n}\n","import { css, cx } from '@emotion/css';\nimport React, { useCallback, useState } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport { useAsync } from 'react-use';\n\nimport { GrafanaTheme2, DataSourceApi } from '@grafana/data';\nimport { config, getDataSourceSrv, reportInteraction, getAppEvents } from '@grafana/runtime';\nimport { DataQuery } from '@grafana/schema';\nimport { TextArea, Button, IconButton, useStyles2, LoadingPlaceholder } from '@grafana/ui';\nimport { notifyApp } from 'app/core/actions';\nimport { createSuccessNotification } from 'app/core/copy/appNotification';\nimport { Trans, t } from 'app/core/internationalization';\nimport { copyStringToClipboard } from 'app/core/utils/explore';\nimport { createUrlFromRichHistory, createQueryText } from 'app/core/utils/richHistory';\nimport { createAndCopyShortLink } from 'app/core/utils/shortLinks';\nimport { changeDatasource } from 'app/features/explore/state/datasource';\nimport { starHistoryItem, commentHistoryItem, deleteHistoryItem } from 'app/features/explore/state/history';\nimport { setQueries } from 'app/features/explore/state/query';\nimport { dispatch } from 'app/store/store';\nimport { StoreState } from 'app/types';\nimport { ShowConfirmModalEvent } from 'app/types/events';\nimport { RichHistoryQuery } from 'app/types/explore';\n\nfunction mapStateToProps(state: StoreState, { exploreId }: { exploreId: string }) {\n const explore = state.explore;\n const { datasourceInstance } = explore.panes[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 {\n queryHistoryItem: RichHistoryQuery;\n}\n\nexport type Props = ConnectedProps & OwnProps;\n\nconst getStyles = (theme: GrafanaTheme2) => {\n /* Hard-coded value so all buttons and icons on right side of card are aligned */\n const rightColumnWidth = '240px';\n const rightColumnContentWidth = '170px';\n\n /* If datasource was removed, card will have inactive color */\n const cardColor = theme.colors.background.secondary;\n\n return {\n queryCard: css`\n position: relative;\n display: flex;\n flex-direction: column;\n border: 1px solid ${theme.colors.border.weak};\n margin: ${theme.spacing(1)} 0;\n background-color: ${cardColor};\n border-radius: ${theme.shape.radius.default};\n .starred {\n color: ${theme.v1.palette.orange};\n }\n `,\n cardRow: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: ${theme.spacing(1)};\n border-bottom: none;\n :first-of-type {\n border-bottom: 1px solid ${theme.colors.border.weak};\n padding: ${theme.spacing(0.5, 1)};\n }\n img {\n height: ${theme.typography.fontSize}px;\n max-width: ${theme.typography.fontSize}px;\n margin-right: ${theme.spacing(1)};\n }\n `,\n queryActionButtons: css`\n max-width: ${rightColumnContentWidth};\n display: flex;\n justify-content: flex-end;\n font-size: ${theme.typography.size.base};\n button {\n margin-left: ${theme.spacing(1)};\n }\n `,\n queryContainer: css`\n font-weight: ${theme.typography.fontWeightMedium};\n width: calc(100% - ${rightColumnWidth});\n `,\n updateCommentContainer: css`\n width: calc(100% + ${rightColumnWidth});\n margin-top: ${theme.spacing(1)};\n `,\n comment: css`\n overflow-wrap: break-word;\n font-size: ${theme.typography.bodySmall.fontSize};\n font-weight: ${theme.typography.fontWeightRegular};\n margin-top: ${theme.spacing(0.5)};\n `,\n commentButtonRow: css`\n > * {\n margin-top: ${theme.spacing(1)};\n margin-right: ${theme.spacing(1)};\n }\n `,\n textArea: css`\n width: 100%;\n `,\n runButton: css`\n max-width: ${rightColumnContentWidth};\n display: flex;\n justify-content: flex-end;\n button {\n height: auto;\n padding: ${theme.spacing(0.5, 2)};\n line-height: 1.4;\n span {\n white-space: normal !important;\n }\n }\n `,\n loader: css`\n position: absolute;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: ${theme.colors.background.secondary};\n `,\n };\n};\n\nexport function RichHistoryCard(props: Props) {\n const {\n queryHistoryItem,\n commentHistoryItem,\n starHistoryItem,\n deleteHistoryItem,\n changeDatasource,\n exploreId,\n datasourceInstance,\n setQueries,\n } = props;\n\n const [activeUpdateComment, setActiveUpdateComment] = useState(false);\n const [comment, setComment] = useState(queryHistoryItem.comment);\n const { value: historyCardData, loading } = useAsync(async () => {\n let datasourceInstance: DataSourceApi | undefined;\n try {\n datasourceInstance = await getDataSourceSrv().get(queryHistoryItem.datasourceUid);\n } catch (e) {}\n\n return {\n datasourceInstance,\n queries: await Promise.all(\n queryHistoryItem.queries.map(async (query) => {\n let datasource;\n if (datasourceInstance?.meta.mixed) {\n try {\n datasource = await getDataSourceSrv().get(query.datasource);\n } catch (e) {}\n } else {\n datasource = datasourceInstance;\n }\n\n return {\n query,\n datasource,\n };\n })\n ),\n };\n }, [queryHistoryItem.datasourceUid, queryHistoryItem.queries]);\n\n const styles = useStyles2(getStyles);\n\n const onRunQuery = async () => {\n const queriesToRun = queryHistoryItem.queries;\n const differentDataSource = queryHistoryItem.datasourceUid !== datasourceInstance?.uid;\n if (differentDataSource) {\n await changeDatasource({ exploreId, datasource: queryHistoryItem.datasourceUid });\n }\n setQueries(exploreId, queriesToRun);\n\n reportInteraction('grafana_explore_query_history_run', {\n queryHistoryEnabled: config.queryHistoryEnabled,\n differentDataSource,\n });\n };\n\n const onCopyQuery = async () => {\n const datasources = [...queryHistoryItem.queries.map((query) => query.datasource?.type || 'unknown')];\n reportInteraction('grafana_explore_query_history_copy_query', {\n datasources,\n mixed: Boolean(historyCardData?.datasourceInstance?.meta.mixed),\n });\n\n if (loading || !historyCardData) {\n return;\n }\n\n const queriesText = historyCardData.queries\n .map((query) => {\n return createQueryText(query.query, query.datasource);\n })\n .join('\\n');\n\n copyStringToClipboard(queriesText);\n dispatch(\n notifyApp(\n createSuccessNotification(t('explore.rich-history-notification.query-copied', 'Query copied to clipboard'))\n )\n );\n };\n\n const onCreateShortLink = async () => {\n const link = createUrlFromRichHistory(queryHistoryItem);\n await createAndCopyShortLink(link);\n };\n\n const onDeleteQuery = () => {\n const performDelete = (queryId: string) => {\n deleteHistoryItem(queryId);\n dispatch(\n notifyApp(createSuccessNotification(t('explore.rich-history-notification.query-deleted', 'Query deleted')))\n );\n reportInteraction('grafana_explore_query_history_deleted', {\n queryHistoryEnabled: config.queryHistoryEnabled,\n });\n };\n\n // For starred queries, we want confirmation. For non-starred, we don't.\n if (queryHistoryItem.starred) {\n getAppEvents().publish(\n new ShowConfirmModalEvent({\n title: t('explore.rich-history-card.delete-query-confirmation-title', 'Delete'),\n text: t(\n 'explore.rich-history-card.delete-starred-query-confirmation-text',\n 'Are you sure you want to permanently delete your starred query?'\n ),\n yesText: t('explore.rich-history-card.confirm-delete', 'Delete'),\n icon: 'trash-alt',\n onConfirm: () => performDelete(queryHistoryItem.id),\n })\n );\n } else {\n performDelete(queryHistoryItem.id);\n }\n };\n\n const onStarrQuery = () => {\n starHistoryItem(queryHistoryItem.id, !queryHistoryItem.starred);\n reportInteraction('grafana_explore_query_history_starred', {\n queryHistoryEnabled: config.queryHistoryEnabled,\n newValue: !queryHistoryItem.starred,\n });\n };\n\n const toggleActiveUpdateComment = () => setActiveUpdateComment(!activeUpdateComment);\n\n const onUpdateComment = () => {\n commentHistoryItem(queryHistoryItem.id, comment);\n setActiveUpdateComment(false);\n reportInteraction('grafana_explore_query_history_commented', {\n queryHistoryEnabled: config.queryHistoryEnabled,\n });\n };\n\n const onCancelUpdateComment = () => {\n setActiveUpdateComment(false);\n setComment(queryHistoryItem.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 \n setComment(e.currentTarget.value)}\n className={styles.textArea}\n />\n
\n \n \n
\n \n );\n\n const queryActionButtons = (\n
\n 0\n ? t('explore.rich-history-card.edit-comment-tooltip', 'Edit comment')\n : t('explore.rich-history-card.add-comment-tooltip', 'Add comment')\n }\n />\n \n {historyCardData?.datasourceInstance && (\n \n Copy shortened link to clipboard\n \n }\n />\n )}\n \n \n
\n );\n\n return (\n
\n
\n \n\n {queryActionButtons}\n
\n
\n
\n {historyCardData?.queries.map((q, i) => {\n return ;\n })}\n {!activeUpdateComment && queryHistoryItem.comment && (\n \n {queryHistoryItem.comment}\n
\n )}\n {activeUpdateComment && updateComment}\n
\n {!activeUpdateComment && (\n
\n !query.datasource)\n }\n >\n {datasourceInstance?.uid === queryHistoryItem.datasourceUid ? (\n Run query\n ) : (\n \n Switch data source and run query\n \n )}\n \n
\n )}\n
\n {loading && (\n \n )}\n \n );\n}\n\nconst getQueryStyles = (theme: GrafanaTheme2) => ({\n queryRow: css`\n border-top: 1px solid ${theme.colors.border.weak};\n display: flex;\n flex-direction: row;\n padding: 4px 0px;\n gap: 4px;\n :first-child {\n border-top: none;\n }\n `,\n dsInfoContainer: css`\n display: flex;\n align-items: center;\n `,\n queryText: css`\n word-break: break-all;\n `,\n});\n\ninterface QueryProps {\n query: {\n query: DataQuery;\n datasource?: DataSourceApi;\n };\n /** Show datasource info (icon+name) alongside the query text */\n showDsInfo?: boolean;\n}\n\nconst Query = ({ query, showDsInfo = false }: QueryProps) => {\n const styles = useStyles2(getQueryStyles);\n\n return (\n
\n {showDsInfo && (\n
\n \n {': '}\n
\n )}\n \n {createQueryText(query.query, query.datasource)}\n \n
\n );\n};\n\nconst getDsInfoStyles = (size: 'sm' | 'md') => (theme: GrafanaTheme2) => css`\n display: flex;\n align-items: center;\n font-size: ${theme.typography[size === 'sm' ? 'bodySmall' : 'body'].fontSize};\n font-weight: ${theme.typography.fontWeightMedium};\n white-space: nowrap;\n`;\n\nfunction DatasourceInfo({ dsApi, size }: { dsApi?: DataSourceApi; size: 'sm' | 'md' }) {\n const getStyles = useCallback((theme: GrafanaTheme2) => getDsInfoStyles(size)(theme), [size]);\n const styles = useStyles2(getStyles);\n\n return (\n
\n \n
\n {dsApi?.name || t('explore.rich-history-card.datasource-not-exist', 'Data source does not exist anymore')}\n
\n
\n );\n}\n\nexport default connector(RichHistoryCard);\n","import { css } from '@emotion/css';\nimport React, { useEffect } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { Button, FilterInput, MultiSelect, RangeSlider, Select, useStyles2 } from '@grafana/ui';\nimport { Trans, t } from 'app/core/internationalization';\nimport {\n createDatasourcesList,\n mapNumbertoTimeInSlider,\n mapQueriesToHeadings,\n SortOrder,\n RichHistorySearchFilters,\n RichHistorySettings,\n} from 'app/core/utils/richHistory';\nimport { RichHistoryQuery } from 'app/types/explore';\n\nimport { getSortOrderOptions } from './RichHistory';\nimport RichHistoryCard from './RichHistoryCard';\n\nexport interface RichHistoryQueriesTabProps {\n queries: RichHistoryQuery[];\n totalQueries: number;\n loading: boolean;\n activeDatasourceInstance: string;\n updateFilters: (filtersToUpdate?: Partial) => void;\n clearRichHistoryResults: () => void;\n loadMoreRichHistory: () => void;\n richHistorySettings: RichHistorySettings;\n richHistorySearchFilters?: RichHistorySearchFilters;\n exploreId: string;\n height: number;\n}\n\nconst getStyles = (theme: GrafanaTheme2, height: number) => {\n return {\n container: css`\n display: flex;\n `,\n labelSlider: css`\n font-size: ${theme.typography.bodySmall.fontSize};\n &:last-of-type {\n margin-top: ${theme.spacing(3)};\n }\n &:first-of-type {\n font-weight: ${theme.typography.fontWeightMedium};\n margin-bottom: ${theme.spacing(2)};\n }\n `,\n containerContent: css`\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 width: calc(100% - 134px);\n `,\n containerSlider: css`\n width: 129px;\n margin-right: ${theme.spacing(1)};\n `,\n fixedSlider: css`\n position: fixed;\n `,\n slider: css`\n bottom: 10px;\n height: ${height - 180}px;\n width: 129px;\n padding: ${theme.spacing(1)} 0;\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(1)};\n `,\n multiselect: css`\n width: 100%;\n margin-bottom: ${theme.spacing(1)};\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(3)};\n h4 {\n margin: 0 10px 0 0;\n }\n `,\n heading: css`\n font-size: ${theme.typography.h4.fontSize};\n margin: ${theme.spacing(2, 0.25, 1, 0.25)};\n `,\n footer: css`\n height: 60px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-weight: ${theme.typography.fontWeightLight};\n font-size: ${theme.typography.bodySmall.fontSize};\n a {\n font-weight: ${theme.typography.fontWeightMedium};\n margin-left: ${theme.spacing(0.25)};\n }\n `,\n queries: css`\n font-size: ${theme.typography.bodySmall.fontSize};\n font-weight: ${theme.typography.fontWeightRegular};\n margin-left: ${theme.spacing(0.5)};\n `,\n };\n};\n\nexport function RichHistoryQueriesTab(props: RichHistoryQueriesTabProps) {\n const {\n queries,\n totalQueries,\n loading,\n richHistorySearchFilters,\n updateFilters,\n clearRichHistoryResults,\n loadMoreRichHistory,\n richHistorySettings,\n exploreId,\n height,\n activeDatasourceInstance,\n } = props;\n\n const styles = useStyles2(getStyles, height);\n\n const listOfDatasources = createDatasourcesList();\n\n useEffect(() => {\n const datasourceFilters =\n !richHistorySettings.activeDatasourceOnly && richHistorySettings.lastUsedDatasourceFilters\n ? richHistorySettings.lastUsedDatasourceFilters\n : [activeDatasourceInstance];\n const filters: RichHistorySearchFilters = {\n search: '',\n sortOrder: SortOrder.Descending,\n datasourceFilters,\n from: 0,\n to: richHistorySettings.retentionPeriod,\n starred: false,\n };\n updateFilters(filters);\n\n return () => {\n clearRichHistoryResults();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!richHistorySearchFilters) {\n return (\n \n Loading...;\n \n );\n }\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(queries, richHistorySearchFilters.sortOrder);\n const sortOrderOptions = getSortOrderOptions();\n const partialResults = queries.length && queries.length !== totalQueries;\n\n return (\n
\n
\n
\n
\n Filter history\n
\n
{mapNumbertoTimeInSlider(richHistorySearchFilters.from)}
\n
\n {\n updateFilters({ from: value![0], to: value![1] });\n }}\n />\n
\n
{mapNumbertoTimeInSlider(richHistorySearchFilters.to)}
\n
\n
\n\n
\n
\n {!richHistorySettings.activeDatasourceOnly && (\n {\n return { value: ds.name, label: ds.name };\n })}\n value={richHistorySearchFilters.datasourceFilters}\n placeholder={t(\n 'explore.rich-history-queries-tab.filter-placeholder',\n 'Filter queries for data sources(s)'\n )}\n aria-label={t('explore.rich-history-queries-tab.filter-aria-label', 'Filter queries for data sources(s)')}\n onChange={(options: SelectableValue[]) => {\n updateFilters({ datasourceFilters: options.map((option) => option.value) });\n }}\n />\n )}\n
\n updateFilters({ search })}\n />\n
\n \n order.value === richHistorySearchFilters.sortOrder)}\n options={sortOrderOptions}\n placeholder={t('explore.rich-history-queries-tab.sort-placeholder', 'Sort queries by')}\n onChange={(e: SelectableValue) => updateFilters({ sortOrder: e.value })}\n />\n
\n
\n\n {loading && (\n \n Loading results...\n \n )}\n\n {!loading &&\n Object.keys(mappedQueriesToHeadings).map((heading) => {\n return (\n
\n
\n {heading}{' '}\n \n {partialResults ? (\n \n ) : (\n \n )}\n \n
\n {mappedQueriesToHeadings[heading].map((q) => {\n return ;\n })}\n
\n );\n })}\n {partialResults ? (\n
\n Load more\"\n values={{ shown: queries.length, total: totalQueries }}\n components={[\n ,\n ]}\n />\n
\n ) : null}\n
\n {!config.queryHistoryEnabled\n ? t(\n 'explore.rich-history-queries-tab.history-local',\n 'The history is local to your browser and is not shared with others.'\n )\n : ''}\n
\n
\n \n );\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { getAppEvents } from '@grafana/runtime';\nimport { useStyles2, Select, Button, Field, InlineField, InlineSwitch, Alert } from '@grafana/ui';\nimport { notifyApp } from 'app/core/actions';\nimport { createSuccessNotification } from 'app/core/copy/appNotification';\nimport { MAX_HISTORY_ITEMS } from 'app/core/history/RichHistoryLocalStorage';\nimport { Trans, t } from 'app/core/internationalization';\nimport { dispatch } from 'app/store/store';\n\nimport { supportedFeatures } from '../../../core/history/richHistoryStorageProvider';\nimport { ShowConfirmModalEvent } from '../../../types/events';\n\nexport interface RichHistorySettingsProps {\n retentionPeriod: number;\n starredTabAsFirstTab: boolean;\n activeDatasourceOnly: boolean;\n onChangeRetentionPeriod: (option: SelectableValue) => void;\n toggleStarredTabAsFirstTab: () => void;\n toggleactiveDatasourceOnly: () => void;\n deleteRichHistory: () => void;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css`\n font-size: ${theme.typography.bodySmall.fontSize};\n `,\n spaceBetween: css`\n margin-bottom: ${theme.spacing(3)};\n `,\n input: css`\n max-width: 200px;\n `,\n bold: css`\n font-weight: ${theme.typography.fontWeightBold};\n `,\n bottomMargin: css`\n margin-bottom: ${theme.spacing(1)};\n `,\n };\n};\n\nconst retentionPeriodOptions = [\n { value: 2, label: t('explore.rich-history-settings-tab.retention-period.2-days', '2 days') },\n { value: 5, label: t('explore.rich-history-settings-tab.retention-period.5-days', '5 days') },\n { value: 7, label: t('explore.rich-history-settings-tab.retention-period.1-week', '1 week') },\n { value: 14, label: t('explore.rich-history-settings-tab.retention-period.2-weeks', '2 weeks') },\n];\n\nexport function RichHistorySettingsTab(props: RichHistorySettingsProps) {\n const {\n retentionPeriod,\n starredTabAsFirstTab,\n activeDatasourceOnly,\n onChangeRetentionPeriod,\n toggleStarredTabAsFirstTab,\n toggleactiveDatasourceOnly,\n deleteRichHistory,\n } = props;\n const styles = useStyles2(getStyles);\n const selectedOption = retentionPeriodOptions.find((v) => v.value === retentionPeriod);\n\n const onDelete = () => {\n getAppEvents().publish(\n new ShowConfirmModalEvent({\n title: t('explore.rich-history-settings-tab.delete-title', 'Delete'),\n text: t(\n 'explore.rich-history-settings-tab.delete-confirm-text',\n 'Are you sure you want to permanently delete your query history?'\n ),\n yesText: t('explore.rich-history-settings-tab.delete-confirm', 'Delete'),\n icon: 'trash-alt',\n onConfirm: () => {\n deleteRichHistory();\n dispatch(\n notifyApp(\n createSuccessNotification(\n t('explore.rich-history-settings-tab.query-history-deleted', 'Query history deleted')\n )\n )\n );\n },\n })\n );\n };\n\n return (\n
\n {supportedFeatures().changeRetention ? (\n \n
\n \n
\n \n ) : (\n \n {t(\n 'explore.rich-history-settings-tab.alert-info',\n \"Grafana will keep entries up to {{optionLabel}}.Starred entries won't be deleted.\",\n {\n optionLabel: selectedOption?.label,\n }\n )}\n \n )}\n \n \n \n {supportedFeatures().onlyActiveDataSource && (\n \n \n \n )}\n {supportedFeatures().clearHistory && (\n
\n
\n Clear query history\n
\n
\n \n Delete all of your query history, permanently.\n \n
\n \n
\n )}\n
\n );\n}\n","import { css } from '@emotion/css';\nimport React, { useEffect } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { useStyles2, Select, MultiSelect, FilterInput, Button } from '@grafana/ui';\nimport { Trans, t } from 'app/core/internationalization';\nimport {\n createDatasourcesList,\n SortOrder,\n RichHistorySearchFilters,\n RichHistorySettings,\n} from 'app/core/utils/richHistory';\nimport { RichHistoryQuery } from 'app/types/explore';\n\nimport { getSortOrderOptions } from './RichHistory';\nimport RichHistoryCard from './RichHistoryCard';\n\nexport interface RichHistoryStarredTabProps {\n queries: RichHistoryQuery[];\n totalQueries: number;\n loading: boolean;\n activeDatasourceInstance: string;\n updateFilters: (filtersToUpdate: Partial) => void;\n clearRichHistoryResults: () => void;\n loadMoreRichHistory: () => void;\n richHistorySearchFilters?: RichHistorySearchFilters;\n richHistorySettings: RichHistorySettings;\n exploreId: string;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\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(1)};\n `,\n filterInput: css`\n margin-bottom: ${theme.spacing(1)};\n `,\n sort: css`\n width: 170px;\n `,\n footer: css`\n height: 60px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-weight: ${theme.typography.fontWeightLight};\n font-size: ${theme.typography.bodySmall.fontSize};\n a {\n font-weight: ${theme.typography.fontWeightMedium};\n margin-left: ${theme.spacing(0.25)};\n }\n `,\n };\n};\n\nexport function RichHistoryStarredTab(props: RichHistoryStarredTabProps) {\n const {\n updateFilters,\n clearRichHistoryResults,\n loadMoreRichHistory,\n activeDatasourceInstance,\n richHistorySettings,\n queries,\n totalQueries,\n loading,\n richHistorySearchFilters,\n exploreId,\n } = props;\n\n const styles = useStyles2(getStyles);\n\n const listOfDatasources = createDatasourcesList();\n\n useEffect(() => {\n const datasourceFilters =\n richHistorySettings.activeDatasourceOnly && richHistorySettings.lastUsedDatasourceFilters\n ? richHistorySettings.lastUsedDatasourceFilters\n : [activeDatasourceInstance];\n const filters: RichHistorySearchFilters = {\n search: '',\n sortOrder: SortOrder.Descending,\n datasourceFilters,\n from: 0,\n to: richHistorySettings.retentionPeriod,\n starred: true,\n };\n updateFilters(filters);\n return () => {\n clearRichHistoryResults();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!richHistorySearchFilters) {\n return (\n \n Loading...;\n \n );\n }\n\n const sortOrderOptions = getSortOrderOptions();\n\n return (\n
\n
\n
\n {!richHistorySettings.activeDatasourceOnly && (\n {\n return { value: ds.name, label: ds.name };\n })}\n value={richHistorySearchFilters.datasourceFilters}\n placeholder={t(\n 'explore.rich-history-starred-tab.filter-queries-placeholder',\n 'Filter queries for data sources(s)'\n )}\n aria-label={t(\n 'explore.rich-history-starred-tab.filter-queries-aria-label',\n 'Filter queries for data sources(s)'\n )}\n onChange={(options: SelectableValue[]) => {\n updateFilters({ datasourceFilters: options.map((option) => option.value) });\n }}\n />\n )}\n
\n updateFilters({ search })}\n />\n
\n \n order.value === richHistorySearchFilters.sortOrder)}\n options={sortOrderOptions}\n placeholder={t('explore.rich-history-starred-tab.sort-queries-placeholder', 'Sort queries by')}\n onChange={(e: SelectableValue) => updateFilters({ sortOrder: e.value })}\n />\n
\n
\n {loading && (\n \n Loading results...\n \n )}\n {!loading &&\n queries.map((q) => {\n return ;\n })}\n {queries.length && queries.length !== totalQueries ? (\n
\n Load more\"\n values={{ shown: queries.length, total: totalQueries }}\n components={[\n ,\n ]}\n />\n
\n ) : null}\n
\n {!config.queryHistoryEnabled\n ? t(\n 'explore.rich-history-starred-tab.local-history-message',\n 'The history is local to your browser and is not shared with others.'\n )\n : ''}\n
\n
\n \n );\n}\n","import { debounce } from 'lodash';\nimport React, { useState, useEffect } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { TabbedContainer, TabConfig } from '@grafana/ui';\nimport { t } from 'app/core/internationalization';\nimport { SortOrder, RichHistorySearchFilters, RichHistorySettings } from 'app/core/utils/richHistory';\nimport { RichHistoryQuery } from 'app/types/explore';\n\nimport { supportedFeatures } from '../../../core/history/richHistoryStorageProvider';\n\nimport { RichHistoryQueriesTab } from './RichHistoryQueriesTab';\nimport { RichHistorySettingsTab } from './RichHistorySettingsTab';\nimport { RichHistoryStarredTab } from './RichHistoryStarredTab';\n\nexport enum Tabs {\n RichHistory = 'Query history',\n Starred = 'Starred',\n Settings = 'Settings',\n}\n\nexport const getSortOrderOptions = () =>\n [\n { label: t('explore.rich-history.newest-first', 'Newest first'), value: SortOrder.Descending },\n { label: t('explore.rich-history.oldest-first', 'Oldest first'), value: SortOrder.Ascending },\n { label: t('explore.rich-history.datasource-a-z', 'Data source A-Z'), value: SortOrder.DatasourceAZ },\n { label: t('explore.rich-history.datasource-z-a', 'Data source Z-A'), value: SortOrder.DatasourceZA },\n ].filter((option) => supportedFeatures().availableFilters.includes(option.value));\n\nexport interface RichHistoryProps {\n richHistory: RichHistoryQuery[];\n richHistoryTotal?: number;\n richHistorySettings: RichHistorySettings;\n richHistorySearchFilters?: RichHistorySearchFilters;\n updateHistorySettings: (settings: RichHistorySettings) => void;\n updateHistorySearchFilters: (exploreId: string, filters: RichHistorySearchFilters) => void;\n loadRichHistory: (exploreId: string) => void;\n loadMoreRichHistory: (exploreId: string) => void;\n clearRichHistoryResults: (exploreId: string) => void;\n deleteRichHistory: () => void;\n activeDatasourceInstance: string;\n firstTab: Tabs;\n exploreId: string;\n height: number;\n onClose: () => void;\n}\n\nexport function RichHistory(props: RichHistoryProps) {\n const {\n richHistory,\n richHistoryTotal,\n height,\n exploreId,\n deleteRichHistory,\n onClose,\n firstTab,\n activeDatasourceInstance,\n } = props;\n\n const [loading, setLoading] = useState(false);\n\n const updateSettings = (settingsToUpdate: Partial) => {\n props.updateHistorySettings({ ...props.richHistorySettings, ...settingsToUpdate });\n };\n\n const updateFilters = (filtersToUpdate?: Partial) => {\n const filters = {\n ...props.richHistorySearchFilters!,\n ...filtersToUpdate,\n page: 1, // always load fresh results when updating filters\n };\n props.updateHistorySearchFilters(props.exploreId, filters);\n loadRichHistory();\n };\n\n const loadRichHistory = debounce(() => {\n props.loadRichHistory(props.exploreId);\n setLoading(true);\n }, 300);\n\n const onChangeRetentionPeriod = (retentionPeriod: SelectableValue) => {\n if (retentionPeriod.value !== undefined) {\n updateSettings({ retentionPeriod: retentionPeriod.value });\n }\n };\n\n const toggleStarredTabAsFirstTab = () =>\n updateSettings({ starredTabAsFirstTab: !props.richHistorySettings.starredTabAsFirstTab });\n\n const toggleActiveDatasourceOnly = () =>\n updateSettings({ activeDatasourceOnly: !props.richHistorySettings.activeDatasourceOnly });\n\n useEffect(() => {\n setLoading(false);\n }, [richHistory]);\n\n const QueriesTab: TabConfig = {\n label: t('explore.rich-history.query-history', 'Query history'),\n value: Tabs.RichHistory,\n content: (\n props.clearRichHistoryResults(props.exploreId)}\n loadMoreRichHistory={() => props.loadMoreRichHistory(props.exploreId)}\n activeDatasourceInstance={activeDatasourceInstance}\n richHistorySettings={props.richHistorySettings}\n richHistorySearchFilters={props.richHistorySearchFilters}\n exploreId={exploreId}\n height={height}\n />\n ),\n icon: 'history',\n };\n\n const StarredTab: TabConfig = {\n label: t('explore.rich-history.starred', 'Starred'),\n value: Tabs.Starred,\n content: (\n props.clearRichHistoryResults(props.exploreId)}\n loadMoreRichHistory={() => props.loadMoreRichHistory(props.exploreId)}\n richHistorySettings={props.richHistorySettings}\n richHistorySearchFilters={props.richHistorySearchFilters}\n exploreId={exploreId}\n />\n ),\n icon: 'star',\n };\n\n const SettingsTab: TabConfig = {\n label: t('explore.rich-history.settings', 'Settings'),\n value: Tabs.Settings,\n content: (\n \n ),\n icon: 'sliders-v-alt',\n };\n\n let tabs = [QueriesTab, StarredTab, SettingsTab];\n return (\n \n );\n}\n","// Libraries\nimport React, { useEffect, useState } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport { config, reportInteraction } from '@grafana/runtime';\nimport { useTheme2 } from '@grafana/ui';\nimport { Trans } from 'app/core/internationalization';\n// Types\nimport { ExploreItemState, StoreState } from 'app/types';\n\n// Components, enums\nimport { ExploreDrawer } from '../ExploreDrawer';\nimport {\n deleteRichHistory,\n initRichHistory,\n loadRichHistory,\n loadMoreRichHistory,\n clearRichHistoryResults,\n updateHistorySettings,\n updateHistorySearchFilters,\n} from '../state/history';\n\nimport { RichHistory, Tabs } from './RichHistory';\n\n//Actions\n\nfunction mapStateToProps(state: StoreState, { exploreId }: { exploreId: string }) {\n const explore = state.explore;\n const item: ExploreItemState = explore.panes[exploreId]!;\n const richHistorySearchFilters = item.richHistorySearchFilters;\n const richHistorySettings = explore.richHistorySettings;\n const { datasourceInstance } = item;\n const firstTab = richHistorySettings?.starredTabAsFirstTab ? Tabs.Starred : Tabs.RichHistory;\n const { richHistory, richHistoryTotal } = item;\n return {\n richHistory,\n richHistoryTotal,\n firstTab,\n activeDatasourceInstance: datasourceInstance!.name,\n richHistorySettings,\n richHistorySearchFilters,\n };\n}\n\nconst mapDispatchToProps = {\n initRichHistory,\n loadRichHistory,\n loadMoreRichHistory,\n clearRichHistoryResults,\n updateHistorySettings,\n updateHistorySearchFilters,\n deleteRichHistory,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface OwnProps {\n width: number;\n exploreId: string;\n onClose: () => void;\n}\nexport type Props = ConnectedProps & OwnProps;\n\nexport function RichHistoryContainer(props: Props) {\n const theme = useTheme2();\n const [height, setHeight] = useState(theme.components.horizontalDrawer.defaultHeight);\n\n const {\n richHistory,\n richHistoryTotal,\n width,\n firstTab,\n activeDatasourceInstance,\n exploreId,\n deleteRichHistory,\n initRichHistory,\n loadRichHistory,\n loadMoreRichHistory,\n clearRichHistoryResults,\n richHistorySettings,\n updateHistorySettings,\n richHistorySearchFilters,\n updateHistorySearchFilters,\n onClose,\n } = props;\n\n useEffect(() => {\n initRichHistory();\n reportInteraction('grafana_explore_query_history_opened', {\n queryHistoryEnabled: config.queryHistoryEnabled,\n });\n }, [initRichHistory]);\n\n if (!richHistorySettings) {\n return (\n \n Loading...\n \n );\n }\n\n return (\n {\n setHeight(Number(ref.style.height.slice(0, -2)));\n }}\n >\n \n \n );\n}\n\nexport default connector(RichHistoryContainer);\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Components } from '@grafana/e2e-selectors';\nimport { ToolbarButton, useTheme2 } from '@grafana/ui';\nimport { t, Trans } from 'app/core/internationalization';\n\ntype Props = {\n addQueryRowButtonDisabled?: boolean;\n addQueryRowButtonHidden?: boolean;\n richHistoryRowButtonHidden?: 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 display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(1),\n marginTop: theme.spacing(2),\n }),\n };\n};\n\nexport function SecondaryActions(props: Props) {\n const theme = useTheme2();\n const styles = getStyles(theme);\n return (\n
\n {!props.addQueryRowButtonHidden && (\n \n Add query\n \n )}\n {!props.richHistoryRowButtonHidden && (\n \n Query history\n \n )}\n \n Query inspector\n \n
\n );\n}\n","import { css } from '@emotion/css';\nimport React, { PureComponent } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport { applyFieldOverrides, SplitOpen, DataFrame, LoadingState, FieldType } from '@grafana/data';\nimport { getTemplateSrv } from '@grafana/runtime';\nimport { TimeZone } from '@grafana/schema';\nimport { Table, AdHocFilterItem, PanelChrome, withTheme2, Themeable2 } from '@grafana/ui';\nimport { config } from 'app/core/config';\nimport { t, Trans } from 'app/core/internationalization';\nimport {\n hasDeprecatedParentRowIndex,\n migrateFromParentRowIndexToNestedFrames,\n} from 'app/plugins/panel/table/migrations';\nimport { StoreState } from 'app/types';\nimport { ExploreItemState } from 'app/types/explore';\n\nimport { MetaInfoText } from '../MetaInfoText';\nimport { selectIsWaitingForData } from '../state/query';\nimport { exploreDataLinkPostProcessorFactory } from '../utils/links';\n\ninterface TableContainerProps extends Themeable2 {\n ariaLabel?: string;\n exploreId: string;\n width: number;\n timeZone: TimeZone;\n onCellFilterAdded?: (filter: AdHocFilterItem) => void;\n splitOpenFn: SplitOpen;\n}\n\nfunction mapStateToProps(state: StoreState, { exploreId }: TableContainerProps) {\n const explore = state.explore;\n const item: ExploreItemState = explore.panes[exploreId]!;\n const { tableResult, range } = item;\n const loadingInState = selectIsWaitingForData(exploreId);\n const loading = tableResult && tableResult.length > 0 ? false : loadingInState;\n return { loading, tableResult, range };\n}\n\nconst connector = connect(mapStateToProps, {});\n\ntype Props = TableContainerProps & ConnectedProps;\n\nexport class TableContainer extends PureComponent {\n hasSubFrames = (data: DataFrame) => data.fields.some((f) => f.type === FieldType.nestedFrames);\n\n getTableHeight(rowCount: number, hasSubFrames: boolean) {\n if (rowCount === 0) {\n return 200;\n }\n // tries to estimate table height, with a min of 300 and a max of 600\n // if there are multiple tables, there is no min\n return Math.min(600, Math.max(rowCount * 36, hasSubFrames ? 300 : 0) + 40 + 46);\n }\n\n getTableTitle(dataFrames: DataFrame[] | null, data: DataFrame, i: number) {\n let name = data.name;\n if (!name && (dataFrames?.length ?? 0) > 1) {\n name = data.refId || `${i}`;\n }\n\n return name ? (\n Table - {{ name }}\n ) : (\n t('explore.table.title', 'Table')\n );\n }\n\n render() {\n const { loading, onCellFilterAdded, tableResult, width, splitOpenFn, range, ariaLabel, timeZone, theme } =\n this.props;\n\n let dataFrames = hasDeprecatedParentRowIndex(tableResult)\n ? migrateFromParentRowIndexToNestedFrames(tableResult)\n : tableResult;\n const dataLinkPostProcessor = exploreDataLinkPostProcessorFactory(splitOpenFn, range);\n\n if (dataFrames?.length) {\n dataFrames = applyFieldOverrides({\n data: dataFrames,\n timeZone,\n theme: config.theme2,\n replaceVariables: getTemplateSrv().replace.bind(getTemplateSrv()),\n fieldConfig: {\n defaults: {},\n overrides: [],\n },\n dataLinkPostProcessor,\n });\n }\n\n const frames = dataFrames?.filter(\n (frame: DataFrame | undefined): frame is DataFrame => !!frame && frame.length !== 0\n );\n\n return (\n <>\n {frames && frames.length === 0 && (\n \n {() => }\n \n )}\n {frames && frames.length > 0 && (\n
\n {frames.map((data, i) => (\n \n {(innerWidth, innerHeight) => (\n \n )}\n \n ))}\n
\n )}\n \n );\n }\n}\n\nexport const TableContainerWithTheme = withTheme2(TableContainer);\n\nexport default withTheme2(connector(TableContainer));\n","import React, { useMemo } from 'react';\n\nimport { DataFrame, SplitOpen } from '@grafana/data';\nimport { PanelChrome } from '@grafana/ui';\nimport { StoreState, useSelector } from 'app/types';\n\nimport { TraceView } from './TraceView';\nimport { transformDataFrames } from './utils/transform';\n\ninterface Props {\n dataFrames: DataFrame[];\n splitOpenFn: SplitOpen;\n exploreId: string;\n scrollElement?: Element;\n}\n\nexport function TraceViewContainer(props: Props) {\n // At this point we only show single trace\n const frame = props.dataFrames[0];\n const { dataFrames, splitOpenFn, exploreId, scrollElement } = props;\n const traceProp = useMemo(() => transformDataFrames(frame), [frame]);\n const datasource = useSelector(\n (state: StoreState) => state.explore.panes[props.exploreId]?.datasourceInstance ?? undefined\n );\n\n if (!traceProp) {\n return null;\n }\n\n return (\n \n \n \n );\n}\n","import { css, cx } from '@emotion/css';\nimport { get, groupBy } from 'lodash';\nimport memoizeOne from 'memoize-one';\nimport React from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport AutoSizer, { HorizontalSize } from 'react-virtualized-auto-sizer';\n\nimport {\n AbsoluteTimeRange,\n DataFrame,\n EventBus,\n GrafanaTheme2,\n hasToggleableQueryFiltersSupport,\n LoadingState,\n QueryFixAction,\n RawTimeRange,\n SplitOpenOptions,\n SupplementaryQueryType,\n} from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { getDataSourceSrv, reportInteraction } from '@grafana/runtime';\nimport { DataQuery } from '@grafana/schema';\nimport {\n AdHocFilterItem,\n CustomScrollbar,\n ErrorBoundaryAlert,\n PanelContainer,\n Themeable2,\n withTheme2,\n} from '@grafana/ui';\nimport { FILTER_FOR_OPERATOR, FILTER_OUT_OPERATOR } from '@grafana/ui/src/components/Table/types';\nimport { supportedFeatures } from 'app/core/history/richHistoryStorageProvider';\nimport { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource';\nimport { getNodeGraphDataFrames } from 'app/plugins/panel/nodeGraph/utils';\nimport { StoreState } from 'app/types';\n\nimport { getTimeZone } from '../profile/state/selectors';\n\nimport { ContentOutline } from './ContentOutline/ContentOutline';\nimport { ContentOutlineContextProvider } from './ContentOutline/ContentOutlineContext';\nimport { ContentOutlineItem } from './ContentOutline/ContentOutlineItem';\nimport { CorrelationHelper } from './CorrelationHelper';\nimport { CustomContainer } from './CustomContainer';\nimport ExploreQueryInspector from './ExploreQueryInspector';\nimport { ExploreToolbar } from './ExploreToolbar';\nimport { FlameGraphExploreContainer } from './FlameGraph/FlameGraphExploreContainer';\nimport { GraphContainer } from './Graph/GraphContainer';\nimport LogsContainer from './Logs/LogsContainer';\nimport { LogsSamplePanel } from './Logs/LogsSamplePanel';\nimport { NoData } from './NoData';\nimport { NoDataSourceCallToAction } from './NoDataSourceCallToAction';\nimport { NodeGraphContainer } from './NodeGraph/NodeGraphContainer';\nimport { QueryRows } from './QueryRows';\nimport RawPrometheusContainer from './RawPrometheus/RawPrometheusContainer';\nimport { ResponseErrorContainer } from './ResponseErrorContainer';\nimport RichHistoryContainer from './RichHistory/RichHistoryContainer';\nimport { SecondaryActions } from './SecondaryActions';\nimport TableContainer from './Table/TableContainer';\nimport { TraceViewContainer } from './TraceView/TraceViewContainer';\nimport { changeSize } from './state/explorePane';\nimport { splitOpen } from './state/main';\nimport {\n addQueryRow,\n modifyQueries,\n scanStart,\n scanStopAction,\n selectIsWaitingForData,\n setQueries,\n setSupplementaryQueryEnabled,\n} from './state/query';\nimport { isSplit } from './state/selectors';\nimport { 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 marginTop: '21px',\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n }),\n queryContainer: css({\n label: 'queryContainer',\n padding: theme.spacing(1),\n }),\n exploreContainer: css({\n label: 'exploreContainer',\n display: 'flex',\n flexDirection: 'column',\n paddingRight: theme.spacing(2),\n marginBottom: theme.spacing(2),\n }),\n left: css({\n marginBottom: theme.spacing(2),\n }),\n wrapper: css({\n position: 'absolute',\n top: 0,\n left: theme.spacing(2),\n right: 0,\n bottom: 0,\n display: 'flex',\n }),\n };\n};\n\nexport interface ExploreProps extends Themeable2 {\n exploreId: string;\n theme: GrafanaTheme2;\n eventBus: EventBus;\n}\n\nenum ExploreDrawer {\n RichHistory,\n QueryInspector,\n}\n\ninterface ExploreState {\n openDrawer?: ExploreDrawer;\n contentOutlineVisible: boolean;\n}\n\nexport type Props = ExploreProps & ConnectedProps;\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 */\n\nexport class Explore extends React.PureComponent {\n scrollElement: HTMLDivElement | undefined;\n graphEventBus: EventBus;\n logsEventBus: EventBus;\n memoizedGetNodeGraphDataFrames = memoizeOne(getNodeGraphDataFrames);\n\n constructor(props: Props) {\n super(props);\n this.state = {\n openDrawer: undefined,\n contentOutlineVisible: false,\n };\n this.graphEventBus = props.eventBus.newScopedBus('graph', { onlyLocal: false });\n this.logsEventBus = props.eventBus.newScopedBus('logs', { onlyLocal: false });\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: AdHocFilterItem) => {\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 onContentOutlineToogle = () => {\n this.setState((state) => {\n reportInteraction('explore_toolbar_contentoutline_clicked', {\n item: 'outline',\n type: state.contentOutlineVisible ? 'close' : 'open',\n });\n return {\n contentOutlineVisible: !state.contentOutlineVisible,\n };\n });\n };\n\n /**\n * Used by Logs details.\n * Returns true if all queries have the filter, otherwise false.\n * TODO: In the future, we would like to return active filters based the query that produced the log line.\n * @alpha\n */\n isFilterLabelActive = async (key: string, value: string | number, refId?: string) => {\n const query = this.props.queries.find((q) => q.refId === refId);\n if (!query) {\n return false;\n }\n const ds = await getDataSourceSrv().get(query.datasource);\n if (hasToggleableQueryFiltersSupport(ds) && ds.queryHasFilter(query, { key, value: value.toString() })) {\n return true;\n }\n return false;\n };\n\n /**\n * Used by Logs details.\n */\n onClickFilterLabel = (key: string, value: string | number, frame?: DataFrame) => {\n this.onModifyQueries(\n {\n type: 'ADD_FILTER',\n options: { key, value: value.toString() },\n frame,\n },\n frame?.refId\n );\n };\n\n /**\n * Used by Logs details.\n */\n onClickFilterOutLabel = (key: string, value: string | number, frame?: DataFrame) => {\n this.onModifyQueries(\n {\n type: 'ADD_FILTER_OUT',\n options: { key, value: value.toString() },\n frame,\n },\n frame?.refId\n );\n };\n\n /**\n * Used by Logs Popover Menu.\n */\n onClickFilterValue = (value: string | number, refId?: string) => {\n this.onModifyQueries({ type: 'ADD_STRING_FILTER', options: { value: value.toString() } }, refId);\n };\n\n /**\n * Used by Logs Popover Menu.\n */\n onClickFilterOutValue = (value: string | number, refId?: string) => {\n this.onModifyQueries({ type: 'ADD_STRING_FILTER_OUT', options: { value: value.toString() } }, refId);\n };\n\n onClickAddQueryRowButton = () => {\n const { exploreId, queryKeys } = this.props;\n this.props.addQueryRow(exploreId, queryKeys.length);\n };\n\n /**\n * Used by Logs details.\n */\n onModifyQueries = (action: QueryFixAction, refId?: string) => {\n const modifier = async (query: DataQuery, modification: QueryFixAction) => {\n // This gives Logs Details support to modify the query that produced the log line.\n // If not present, all queries are modified.\n if (refId && refId !== query.refId) {\n return query;\n }\n const { datasource } = query;\n if (datasource == null) {\n return query;\n }\n const ds = await getDataSourceSrv().get(datasource);\n const toggleableFilters = ['ADD_FILTER', 'ADD_FILTER_OUT'];\n if (hasToggleableQueryFiltersSupport(ds) && toggleableFilters.includes(modification.type)) {\n return ds.toggleQueryFilter(query, {\n type: modification.type === 'ADD_FILTER' ? 'FILTER_FOR' : 'FILTER_OUT',\n options: modification.options ?? {},\n frame: modification.frame,\n });\n }\n if (ds.modifyQuery) {\n return ds.modifyQuery(query, modification);\n } else {\n return query;\n }\n };\n this.props.modifyQueries(this.props.exploreId, action, modifier);\n };\n\n onResize = (size: HorizontalSize) => {\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 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 onSplitOpen = (panelType: string) => {\n return async (options?: SplitOpenOptions) => {\n this.props.splitOpen(options);\n if (options && this.props.datasourceInstance) {\n const target = (await getDataSourceSrv().get(options.datasourceUid)).type;\n const source =\n this.props.datasourceInstance.uid === MIXED_DATASOURCE_NAME\n ? get(this.props.queries, '0.datasource.type')\n : this.props.datasourceInstance.type;\n const tracking = {\n origin: 'panel',\n panelType,\n source,\n target,\n exploreId: this.props.exploreId,\n };\n reportInteraction('grafana_explore_split_view_opened', tracking);\n }\n };\n };\n\n renderEmptyState(exploreContainerStyles: string) {\n return (\n
\n \n
\n );\n }\n\n renderNoData() {\n return ;\n }\n\n renderCustom(width: number) {\n const { timeZone, queryResponse, absoluteRange, eventBus } = this.props;\n\n const groupedByPlugin = groupBy(queryResponse?.customFrames, 'meta.preferredVisualisationPluginId');\n\n return Object.entries(groupedByPlugin).map(([pluginId, frames], index) => {\n return (\n \n \n \n );\n });\n }\n\n renderGraphPanel(width: number) {\n const { graphResult, absoluteRange, timeZone, queryResponse, showFlameGraph } = this.props;\n\n return (\n \n \n \n );\n }\n\n renderTablePanel(width: number) {\n const { exploreId, timeZone } = this.props;\n return (\n \n \n \n );\n }\n\n renderRawPrometheus(width: number) {\n const { exploreId, datasourceInstance, timeZone } = this.props;\n return (\n \n \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 // Need to make ContentOutlineItem a flex container so the gap works\n const logsContentOutlineWrapper = css({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n });\n return (\n \n \n \n );\n }\n\n renderLogsSamplePanel() {\n const { logsSample, timeZone, setSupplementaryQueryEnabled, exploreId, datasourceInstance, queries } = this.props;\n\n return (\n \n \n setSupplementaryQueryEnabled(exploreId, enabled, SupplementaryQueryType.LogsSample)\n }\n />\n \n );\n }\n\n renderNodeGraphPanel() {\n const { exploreId, showTrace, queryResponse, datasourceInstance } = this.props;\n const datasourceType = datasourceInstance ? datasourceInstance?.type : 'unknown';\n\n return (\n \n \n \n );\n }\n\n renderFlameGraphPanel() {\n const { queryResponse } = this.props;\n return (\n \n \n \n );\n }\n\n renderTraceViewPanel() {\n const { queryResponse, 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 \n \n \n )\n );\n }\n\n render() {\n const {\n datasourceInstance,\n exploreId,\n graphResult,\n queryResponse,\n isLive,\n theme,\n showMetrics,\n showTable,\n showRawPrometheus,\n showLogs,\n showTrace,\n showCustom,\n showNodeGraph,\n showFlameGraph,\n timeZone,\n showLogsSample,\n correlationEditorDetails,\n correlationEditorHelperData,\n } = this.props;\n const { openDrawer, contentOutlineVisible } = this.state;\n const styles = getStyles(theme);\n const showPanels = queryResponse && queryResponse.state !== LoadingState.NotStarted;\n const showRichHistory = openDrawer === ExploreDrawer.RichHistory;\n const richHistoryRowButtonHidden = !supportedFeatures().queryHistoryAvailable;\n const showQueryInspector = openDrawer === ExploreDrawer.QueryInspector;\n const showNoData =\n queryResponse.state === LoadingState.Done &&\n [\n queryResponse.logsFrames,\n queryResponse.graphFrames,\n queryResponse.nodeGraphFrames,\n queryResponse.flameGraphFrames,\n queryResponse.tableFrames,\n queryResponse.rawPrometheusFrames,\n queryResponse.traceFrames,\n queryResponse.customFrames,\n ].every((e) => e.length === 0);\n\n let correlationsBox = undefined;\n const isCorrelationsEditorMode = correlationEditorDetails?.editorMode;\n const showCorrelationHelper = Boolean(isCorrelationsEditorMode || correlationEditorDetails?.correlationDirty);\n if (showCorrelationHelper && correlationEditorHelperData !== undefined) {\n correlationsBox = ;\n }\n\n return (\n \n \n \n
\n {contentOutlineVisible && (\n
\n \n
\n )}\n (this.scrollElement = scrollElement || undefined)}\n hideHorizontalTrack\n >\n
\n {datasourceInstance ? (\n <>\n \n \n {correlationsBox}\n \n \n \n \n \n \n {({ width }) => {\n if (width === 0) {\n return null;\n }\n\n return (\n
\n \n {showPanels && (\n <>\n {showMetrics && graphResult && (\n {this.renderGraphPanel(width)}\n )}\n {showRawPrometheus && (\n {this.renderRawPrometheus(width)}\n )}\n {showTable && {this.renderTablePanel(width)}}\n {showLogs && {this.renderLogsPanel(width)}}\n {showNodeGraph && (\n {this.renderNodeGraphPanel()}\n )}\n {showFlameGraph && (\n {this.renderFlameGraphPanel()}\n )}\n {showTrace && {this.renderTraceViewPanel()}}\n {showLogsSample && (\n {this.renderLogsSamplePanel()}\n )}\n {showCustom && {this.renderCustom(width)}}\n {showNoData && {this.renderNoData()}}\n \n )}\n {showRichHistory && (\n \n )}\n {showQueryInspector && (\n \n )}\n \n
\n );\n }}\n
\n \n ) : (\n this.renderEmptyState(styles.exploreContainer)\n )}\n
\n \n
\n \n
\n );\n }\n}\n\nfunction mapStateToProps(state: StoreState, { exploreId }: ExploreProps) {\n const explore = state.explore;\n const { syncedTimes } = explore;\n const item = explore.panes[exploreId]!;\n\n const timeZone = getTimeZone(state.user);\n const {\n datasourceInstance,\n queryKeys,\n queries,\n isLive,\n graphResult,\n tableResult,\n logsResult,\n showLogs,\n showMetrics,\n showTable,\n showTrace,\n showCustom,\n absoluteRange,\n queryResponse,\n showNodeGraph,\n showFlameGraph,\n showRawPrometheus,\n supplementaryQueries,\n correlationEditorHelperData,\n } = item;\n\n const loading = selectIsWaitingForData(exploreId)(state);\n const logsSample = supplementaryQueries[SupplementaryQueryType.LogsSample];\n // We want to show logs sample only if there are no log results and if there is already graph or table result\n const showLogsSample = !!(logsSample.dataProvider !== undefined && !logsResult && (graphResult || tableResult));\n\n return {\n datasourceInstance,\n queryKeys,\n queries,\n isLive,\n graphResult,\n logsResult: logsResult ?? undefined,\n absoluteRange,\n queryResponse,\n syncedTimes,\n timeZone,\n showLogs,\n showMetrics,\n showTable,\n showTrace,\n showCustom,\n showNodeGraph,\n showRawPrometheus,\n showFlameGraph,\n splitted: isSplit(state),\n loading,\n logsSample,\n showLogsSample,\n correlationEditorHelperData,\n correlationEditorDetails: explore.correlationEditorDetails,\n };\n}\n\nconst mapDispatchToProps = {\n changeSize,\n modifyQueries,\n scanStart,\n scanStopAction,\n setQueries,\n updateTimeRange,\n addQueryRow,\n splitOpen,\n setSupplementaryQueryEnabled,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default withTheme2(connector(Explore));\n","import { css } from '@emotion/css';\nimport React, { useEffect, useMemo, useRef } from 'react';\nimport { connect } from 'react-redux';\n\nimport { EventBusSrv } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { CustomScrollbar } from '@grafana/ui';\nimport { stopQueryState } from 'app/core/utils/explore';\nimport { StoreState, useSelector } from 'app/types';\n\nimport Explore from './Explore';\nimport { getExploreItemSelector } from './state/selectors';\n\nconst containerStyles = css({\n label: 'explorePaneContainer',\n display: 'flex',\n flexDirection: 'column',\n minWidth: '600px',\n height: '100%',\n});\n\ninterface Props {\n exploreId: string;\n}\n\n/*\n Connected components subscribe to the store before function components (using hooks) and can react to store changes. Thus, this connector function is called before the parent component (ExplorePage) is rerendered.\n This means that child components' mapStateToProps will be executed with a zombie `exploreId` that is not present anymore in the store if the pane gets closed.\n By connecting this component and returning the pane we workaround the zombie children issue here instead of modifying every children.\n This is definitely not the ideal solution and we should in the future invest more time in exploring other approaches to better handle this scenario, potentially by refactoring panels to be function components \n (therefore immune to this behaviour), or by forbidding them to access the store directly and instead pass them all the data they need via props or context.\n\n You can read more about this issue here: https://react-redux.js.org/api/hooks#stale-props-and-zombie-children\n*/\nfunction ExplorePaneContainerUnconnected({ exploreId }: Props) {\n useStopQueries(exploreId);\n const eventBus = useRef(new EventBusSrv());\n const ref = useRef(null);\n\n useEffect(() => {\n const bus = eventBus.current;\n return () => bus.removeAllListeners();\n }, []);\n\n return (\n \n
\n \n
\n
\n );\n}\n\nfunction mapStateToProps(state: StoreState, props: Props) {\n const pane = state.explore.panes[props.exploreId];\n\n return { pane };\n}\n\nconst connector = connect(mapStateToProps);\n\nexport const ExplorePaneContainer = connector(ExplorePaneContainerUnconnected);\n\nfunction useStopQueries(exploreId: string) {\n const paneSelector = useMemo(() => getExploreItemSelector(exploreId), [exploreId]);\n const paneRef = useRef>();\n paneRef.current = useSelector(paneSelector);\n\n useEffect(() => {\n return () => {\n stopQueryState(paneRef.current?.querySubscription);\n };\n }, []);\n}\n","import { useEffect, useRef } from 'react';\n\nimport { NavModel } from '@grafana/data';\nimport { Branding } from 'app/core/components/Branding/Branding';\nimport { useNavModel } from 'app/core/hooks/useNavModel';\nimport { getDatasourceSrv } from 'app/features/plugins/datasource_srv';\nimport { ExploreQueryParams } from 'app/types';\n\nimport { isFulfilled, hasKey } from './utils';\n\nexport function useExplorePageTitle(params: ExploreQueryParams) {\n const navModel = useRef();\n navModel.current = useNavModel('explore');\n const dsService = useRef(getDatasourceSrv());\n\n useEffect(() => {\n if (!params.panes || typeof params.panes !== 'string') {\n return;\n }\n\n let panesObject: unknown;\n try {\n panesObject = JSON.parse(params.panes);\n } catch {\n return;\n }\n\n if (typeof panesObject !== 'object' || panesObject === null) {\n return;\n }\n\n Promise.allSettled(\n Object.values(panesObject).map((pane) => {\n if (\n !pane ||\n typeof pane !== 'object' ||\n !hasKey('datasource', pane) ||\n !pane.datasource ||\n typeof pane.datasource !== 'string'\n ) {\n return Promise.reject();\n }\n\n return dsService.current.get(pane.datasource);\n })\n )\n .then((results) => results.filter(isFulfilled).map((result) => result.value))\n .then((datasources) => {\n if (!navModel.current) {\n return;\n }\n\n const names = datasources.map((ds) => ds.name);\n\n if (names.length === 0) {\n global.document.title = `${navModel.current.main.text} - ${Branding.AppTitle}`;\n return;\n }\n\n global.document.title = `${navModel.current.main.text} - ${names.join(' | ')} - ${Branding.AppTitle}`;\n });\n }, [params.panes]);\n}\n","import { useEffect } from 'react';\nimport { Unsubscribable } from 'rxjs';\n\nimport { getAppEvents } from '@grafana/runtime';\nimport { useGrafana } from 'app/core/context/GrafanaContext';\nimport { useDispatch } from 'app/types';\nimport { AbsoluteTimeEvent, CopyTimeEvent, PasteTimeEvent, ShiftTimeEvent, ZoomOutEvent } from 'app/types/events';\n\nimport {\n copyTimeRangeToClipboard,\n makeAbsoluteTime,\n pasteTimeRangeFromClipboard,\n shiftTime,\n zoomOut,\n} from '../state/time';\n\nexport function useKeyboardShortcuts() {\n const { keybindings } = useGrafana();\n const dispatch = useDispatch();\n\n useEffect(() => {\n keybindings.setupTimeRangeBindings(false);\n\n const tearDown: Unsubscribable[] = [];\n\n tearDown.push(\n getAppEvents().subscribe(AbsoluteTimeEvent, () => {\n dispatch(makeAbsoluteTime());\n })\n );\n\n tearDown.push(\n getAppEvents().subscribe(ShiftTimeEvent, (event) => {\n dispatch(shiftTime(event.payload.direction));\n })\n );\n\n tearDown.push(\n getAppEvents().subscribe(ZoomOutEvent, (event) => {\n dispatch(zoomOut(event.payload.scale));\n })\n );\n\n tearDown.push(\n getAppEvents().subscribe(CopyTimeEvent, () => {\n dispatch(copyTimeRangeToClipboard());\n })\n );\n\n tearDown.push(\n getAppEvents().subscribe(PasteTimeEvent, () => {\n dispatch(pasteTimeRangeFromClipboard());\n })\n );\n\n return () => {\n tearDown.forEach((u) => u.unsubscribe());\n };\n }, [dispatch, keybindings]);\n}\n","import { inRange } from 'lodash';\nimport { useState } from 'react';\nimport { useWindowSize } from 'react-use';\n\nimport { useDispatch, useSelector } from 'app/types';\n\nimport { splitSizeUpdateAction } from '../state/main';\nimport { isSplit, selectPanesEntries } from '../state/selectors';\n\nexport const useSplitSizeUpdater = (minWidth: number) => {\n const dispatch = useDispatch();\n const { width: windowWidth } = useWindowSize();\n const panes = useSelector(selectPanesEntries);\n const hasSplit = useSelector(isSplit);\n const [rightPaneWidthRatio, setRightPaneWidthRatio] = useState(0.5);\n\n const exploreState = useSelector((state) => state.explore);\n\n const updateSplitSize = (size: number) => {\n const evenSplitWidth = windowWidth / 2;\n const areBothSimilar = inRange(size, evenSplitWidth - 100, evenSplitWidth + 100);\n if (areBothSimilar) {\n dispatch(splitSizeUpdateAction({ largerExploreId: undefined }));\n } else {\n dispatch(\n splitSizeUpdateAction({\n largerExploreId: size > evenSplitWidth ? panes[1][0] : panes[0][0],\n })\n );\n }\n\n setRightPaneWidthRatio(size / windowWidth);\n };\n\n let widthCalc = 0;\n if (hasSplit) {\n if (!exploreState.evenSplitPanes && exploreState.maxedExploreId) {\n widthCalc = exploreState.maxedExploreId === panes[1][0] ? windowWidth - minWidth : minWidth;\n } else if (exploreState.evenSplitPanes) {\n widthCalc = Math.floor(windowWidth / 2);\n } else if (rightPaneWidthRatio !== undefined) {\n widthCalc = windowWidth * rightPaneWidthRatio;\n }\n }\n\n return { updateSplitSize, widthCalc };\n};\n","import { useEffect } from 'react';\n\nimport { useGrafana } from 'app/core/context/GrafanaContext';\n\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 */\nexport function useTimeSrvFix() {\n const { location } = useGrafana();\n\n useEffect(() => {\n const searchParams = location.getSearchObject();\n if (searchParams.from || searchParams.to) {\n location.partial({ from: undefined, to: undefined }, true);\n }\n }, [location]);\n}\n","import { css, cx } from '@emotion/css';\nimport React, { useEffect } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { ErrorBoundaryAlert, useStyles2, useTheme2 } from '@grafana/ui';\nimport { SplitPaneWrapper } from 'app/core/components/SplitPaneWrapper/SplitPaneWrapper';\nimport { useGrafana } from 'app/core/context/GrafanaContext';\nimport { useNavModel } from 'app/core/hooks/useNavModel';\nimport { GrafanaRouteComponentProps } from 'app/core/navigation/types';\nimport { useSelector } from 'app/types';\nimport { ExploreQueryParams } from 'app/types/explore';\n\nimport { CorrelationEditorModeBar } from './CorrelationEditorModeBar';\nimport { ExploreActions } from './ExploreActions';\nimport { ExplorePaneContainer } from './ExplorePaneContainer';\nimport { useExplorePageTitle } from './hooks/useExplorePageTitle';\nimport { useKeyboardShortcuts } from './hooks/useKeyboardShortcuts';\nimport { useSplitSizeUpdater } from './hooks/useSplitSizeUpdater';\nimport { useStateSync } from './hooks/useStateSync';\nimport { useTimeSrvFix } from './hooks/useTimeSrvFix';\nimport { isSplit, selectCorrelationDetails, selectPanesEntries } from './state/selectors';\n\nconst MIN_PANE_WIDTH = 200;\n\nexport default function ExplorePage(props: GrafanaRouteComponentProps<{}, ExploreQueryParams>) {\n const styles = useStyles2(getStyles);\n const theme = useTheme2();\n useTimeSrvFix();\n useStateSync(props.queryParams);\n // We want to set the title according to the URL and not to the state because the URL itself may lag\n // (due to how useStateSync above works) by a few milliseconds.\n // When a URL is pushed to the history, the browser also saves the title of the page and\n // if we were to update the URL on state change, the title would not match the URL.\n // Ultimately the URL is the single source of truth from which state is derived, the page title is not different\n useExplorePageTitle(props.queryParams);\n const { chrome } = useGrafana();\n const navModel = useNavModel('explore');\n const { updateSplitSize, widthCalc } = useSplitSizeUpdater(MIN_PANE_WIDTH);\n\n const panes = useSelector(selectPanesEntries);\n const hasSplit = useSelector(isSplit);\n const correlationDetails = useSelector(selectCorrelationDetails);\n const showCorrelationEditorBar = config.featureToggles.correlations && (correlationDetails?.editorMode || false);\n\n useEffect(() => {\n //This is needed for breadcrumbs and topnav.\n //We should probably abstract this out at some point\n chrome.update({ sectionNav: navModel });\n }, [chrome, navModel]);\n\n useKeyboardShortcuts();\n\n return (\n \n \n {showCorrelationEditorBar && }\n size && updateSplitSize(size)}\n >\n {panes.map(([exploreId]) => {\n return (\n \n \n \n );\n })}\n \n \n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n pageScrollbarWrapper: css({\n width: '100%',\n flexGrow: 1,\n minHeight: 0,\n height: '100%',\n position: 'relative',\n }),\n correlationsEditorIndicator: css({\n borderLeft: `4px solid ${theme.colors.primary.main}`,\n borderRight: `4px solid ${theme.colors.primary.main}`,\n borderBottom: `4px solid ${theme.colors.primary.main}`,\n overflow: 'scroll',\n }),\n };\n};\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"],"names":["getSupportedTransTypeDetails","transType","getTransformOptions","transformationType","useBeforeUnload","enabled","message","handler","event","finalEnabled","CorrelationUnsavedChangesModal","onSave","onDiscard","onCancel","Modal","Button","CONSEQUENCES","showModalMessage","action","isActionLeft","dirtyCorrelation","dirtyQueryEditor","messageTemplate","actionStr","consequenceStr","CorrelationEditorModeBar","panes","dispatch","styles","getStyles","correlationDetails","isHelperShowing","saveMessage","setSaveMessage","correlationDirty","queryEditorDirty","modalMessage","exploreId","changeDatasourceUid","useUnmount","pane","resetEditor","closePane","changeDatasourcePostAction","datasourceUid","saveCorrelationPostAction","skipPostConfirmAction","location","Tooltip","Icon","theme","contrastColor","lighterBackgroundColor","colorManipulator","darkerBackgroundColor","disabledColor","ExploreActions","actions","setActions","query","splitted","canWriteCorrelations","keys","exploreSection","actionsArr","hasMixed","config","useScroll","ref","_a","useRafState","state","setState","ContentOutlineContext","ContentOutlineContextProvider","children","outlineItems","setOutlineItems","register","title","icon","id","prevItems","a","b","diff","unregister","item","useContentOutlineContext","ctx","ContentOutlineItemButton","tooltip","className","isActive","rest","buttonStyles","body","renderIcon","ContentOutline","scroller","panelId","expanded","toggleExpanded","useToggle","activeItemId","setActiveItemId","scrollerRef","verticalScroll","scrollIntoView","buttonTitle","scrollValue","el","toggle","activeItem","top","PanelContainer","CustomScrollbar","ContentOutlineItem","LabelWithTooltip","label","tooltipText","Stack","Label","CorrelationTransformationAddModal","fieldList","transformationToEdit","exampleValue","setExampleValue","transformationVars","setTransformationVars","formFieldsVis","setFormFieldsVis","isExpValid","setIsExpValid","validToSave","setValidToSave","getValues","control","watch","exampleVal","transformationTypeDetails","subscription","formValues","expression","isExpressionValid","transKeys","Field","InputControl","onChange","field","Select","value","entry","Input","CorrelationHelper","correlations","panesVals","defaultLabel","loadingLabel","useAsync","setValue","isLabelDescOpen","setIsLabelDescOpen","isTransformOpen","setIsTransformOpen","showTransformationAddModal","setShowTransformationAddModal","transformations","setTransformations","transformationIdxToEdit","setTransformationIdxToEdit","dirty","description","transVarRecords","transformation","key","editTransformations","Alert","Collapse","i","type","mapValue","detailsString","val","Card","IconButton","DeleteButton","_","idx","CustomContainer","width","height","timeZone","pluginId","frames","absoluteRange","splitOpenFn","eventBus","timeRange","plugin","panelContext","useExploreDataLinkPostProcessor","PanelContext","PanelChrome","innerWidth","innerHeight","PanelRenderer","__extends","extendStatics","d","p","__","__assign","t","s","n","rowSizeBase","colSizeBase","edgeBase","Resizer","_super","_this","e","DEFAULT_SIZE","clamp","min","max","snap","size","hasDirection","dir","target","isTouchEvent","isMouseEvent","findClosestSnap","snapArray","snapGap","closestGapIndex","prev","curr","index","gap","getStringSize","getPixelSize","parentSize","ratio","calculateNewMax","maxWidth","maxHeight","minWidth","minHeight","definedProps","baseClassName","Resizable","props","parent","element","base","c","orgWidth","orgHeight","orgPosition","getSize","percent","wrapChanged","wrap","computedStyle","newSize","kind","propsSize","boundsByDirection","direction","widthByDirection","heightByDirection","boundWidth","boundHeight","parent_1","clientX","clientY","scale","resizeRatio","original","_b","lockAspectRatio","lockAspectRatioExtraHeight","lockAspectRatioExtraWidth","newWidth","newHeight","extraHeight","extraWidth","computedMinWidth","computedMaxWidth","computedMinHeight","computedMaxHeight","extraMinWidth","extraMaxWidth","extraMinHeight","extraMaxHeight","lockedMinWidth","lockedMaxWidth","lockedMinHeight","lockedMaxHeight","parent_2","parentRect","targetRect","left","top_1","right","bottom","startResize","flexBasis","parent_3","_c","boundaryMax","newGridWidth","newGridHeight","delta","vw","vh","newState","isResizing","enable","handleStyles","handleClasses","handleWrapperStyle","handleWrapperClass","handleComponent","resizers","extendsProps","acc","style","Wrapper","ExploreDrawer","onResize","dragStyles","drawerWidth","drawerSlide","ExploreQueryInspector","onClose","queryResponse","isMixed","dataOptions","setDataOptions","dataFrames","errors","statsTab","InspectStatsTab","jsonTab","InspectJSONTab","dataTab","InspectDataTab","queryTab","QueryInspector","tabs","errorTab","InspectErrorTab","TabbedContainer","mapStateToProps","mapDispatchToProps","TimeSyncButton","onClick","isSynced","syncTimesTooltip","ToolbarButton","ExploreTimeControls","range","onChangeTime","from","to","nextTimeRange","adjustedFrom","adjustedTo","fiscalYearStartMonth","syncedTimes","onChangeTimeSync","hideText","onChangeTimeZone","onChangeFiscalYearStartMonth","timeSyncButton","timePickerCommonProps","TimePickerWithHistory","LiveTailButton","start","pause","resume","isLive","isPaused","stop","buttonVariant","onClickMain","ButtonGroup","CSSTransition","defaultMode","ShortLinkButtonMenu","isOpen","setIsOpen","lastSelected","setLastSelected","onCopyLink","shorten","absTime","url","menuOptions","MenuActions","Menu","groupOption","MenuGroup","option","ToolbarButtonRow","Dropdown","AddToDashboard","ToolbarExtensionPoint","selectedExtension","setSelectedExtension","context","useExtensionPointContext","extensions","useExtensionLinks","selectExploreItem","noQueriesInPane","menu","ToolbarExtensionPointMenu","ConfirmNavigationModal","isCorrelationsEditorMode","queries","isLeftPane","datasourceUids","uid","numUniqueIds","useLiveTailControls","RefreshPicker","clear","LiveTailControls","controls","ExploreToolbar","onContentOutlineToogle","isContentOutlineOpen","refreshInterval","datasourceInstance","loading","isLargerPane","showSmallTimePicker","showSmallDataSourcePicker","shouldRotateSplitIcon","refreshPickerLabel","onChangeDatasource","dsSettings","onRunQuery","timezone","onOpenSplitView","onCloseSplitView","onClickResize","fiscalyearStartMonth","onChangeRefreshInterval","navBarActions","SetInterval","AppChromeUpdate","PageToolbar","DataSourcePicker","interaction","name","FlameGraphExploreContainer","view","align","sort","INTERVAL","ElapsedTime","resetKey","humanize","elapsed","setElapsed","useInterval","Time","tinycolor","LiveLogs","onPause","scrollTop","clientHeight","scrollHeight","rowsToRender","nextProps","onResume","onClear","logsRow","logsRowLocalTime","logsRowMessage","getLogRowStyles","row","LogMessageAnsi","LiveLogsWithTheme","InfiniteScroll","loadMoreLogs","rows","scrollElement","sortOrder","upperOutOfRange","setUpperOutOfRange","lowerOutOfRange","setLowerOutOfRange","upperLoading","setUpperLoading","lowerLoading","setLowerLoading","rowsRef","lastScroll","handleScroll","scrollDirection","shouldLoadMore","scrollBottom","newRange","canScrollTop","getVisibleRange","canScrollBottom","hideTopMessage","hideBottomMessage","LoadingIndicator","outOfRangeMessage","ScrollDirection","firstTimeStamp","lastTimeStamp","getPrevRange","visibleRange","currentRange","getNextRange","updateCurrentRange","SCROLLING_THRESHOLD","LogsFeedback","feedbackUrl","MetaInfoItem","MetaInfoText","metaItems","LogsTable","splitOpen","logsSortOrder","dataFrame","columnsWithMeta","logsFrame","tableFrame","setTableFrame","timeIndex","prepareTableFrame","frame","sortedFrame","frameWithOverrides","v","getInitialFieldWidth","isFieldFilterable","getLogsExtractFields","labelFilters","buildLabelFilters","transform","getLabelFiltersTransform","transformedDataFrame","lastValueFrom","transformDataFrame","onCellFilterAdded","filter","operator","onClickFilterLabel","onClickFilterOutLabel","Table","bodyName","timeName","isFieldLokiLabels","isFieldDataplaneLabels","labelFiltersInclude","DownloadFormat","LogsMetaRow","meta","dedupStrategy","dedupCount","displayedFields","clearDetectedFields","hasUnescapedContent","forceEscape","onEscapeNewlines","logRows","downloadLogs","format","download","jsonLogs","blob","fileName","dataFrameMap","transforms","logsMetaItem","r","renderMetaItem","downloadMenu","LogLabels","LogsNavigationPages","pages","currentPageIndex","oldestLogsFirst","formatTime","time","createPageContent","page","Spinner","topContent","bottomContent","LogsNavigation","scrollToTopLogs","clearCache","addResultsToCache","setPages","expectedQueriesRef","expectedRangeRef","rangeSpanRef","onFirstPage","onLastPage","newPage","newPages","sortPages","changeTime","olderLogsButton","indexChange","newerLogsButton","onPageClick","pageNumber","navContainerHeight","LogsColumnSearch","LogsTableEmptyFields","LogsTableNavField","Checkbox","getLogsFieldsStyles","sortLabels","labels","la","lb","LogsTableActiveFields","reorderColumn","valueFilter","toggleColumn","labelKeys","labelName","onDragEnd","result","renderTitle","provided","snapshot","collator","LogsTableAvailableFields","LogsTableMultiSelect","uf","fuzzySearch","haystack","dispatcher","idxs","info","order","haystackOrder","matchesSet","mark","part","matched","infoIdx","debouncedFuzzySearch","LogsTableWrap","logsFrames","updatePanelState","panelState","propsColumns","setColumnsWithMeta","filteredColumnsWithMeta","setFilteredColumnsWithMeta","searchValue","setSearchValue","getLogsTableHeight","panelStateRefId","currentDataFrame","setCurrentDataFrame","f","getColumnsFromProps","fieldNames","previouslySelected","defaultColumns","newFrame","newFiltered","flag","numberOfLogLines","otherFields","labelCardinality","pendingLabelState","normalize","sidebarWidth","setSidebarWidth","tableWidth","columnFilterEvent","columnName","priorActiveCount","column","searchFilterEvent","searchResultCount","clearSelection","isDefaultField","sourceIndex","destinationIndex","source","updateExploreState","newColumnsArray","pa","pb","newColumns","newPanelState","length","active","pendingFilteredLabelState","data","matches","newColumnsWithMeta","numberOfResults","match","search","needle","onSearchInputChange","onFrameSelectorChange","getOnResize","newSidebarWidth","InlineField","total","SupplementaryResultError","SHORT_ERROR_MESSAGE_LIMIT","error","suggestedAction","onSuggestedAction","onRemove","severity","showButton","LogsVolumePanel","onUpdateTimeRange","onHiddenSeriesChanged","allLogsVolumeMaximum","spacing","logsVolumeData","logsVolumeInfo","extraInfo","extraInfoComponent","ExploreGraph","isTimeoutErrorResponse","response","LogsVolumePanelList","onLoadLogsVolume","logVolumes","allLogsVolumeMaximumValue","allLogsVolumeMaximumRange","annotations","maximumValue","sorted","grouped","mergedData","maximumRange","numberOfLogVolumes","containsZoomed","zoomRatio","logsLevelZoomRatio","timeoutError","selectedTimeRange","dataRange","DEDUP_OPTIONS","getDefaultVisualisationType","UnthemedLogs","logsPanelState","node","prevState","newSortOrder","visualisation","payload","showLabels","showTime","wrapLogMessage","prettifyLogMessage","hiddenRawLevels","hiddenLogLevels","level","collapsed","k","urlState","serializedState","baseUrl","dedupedRows","sum","prevProps","visualisationType","allLogs","logRow","prevLog","logsMeta","logsVolumeEnabled","loadLogsVolumeData","scanning","scanRange","showContextToggle","getFieldLinks","logsQueries","getRowContext","getLogRowContextUi","getRowContextQuery","isFlipping","contextOpen","contextRow","tableHeight","hasData","filteredLogs","navigationRange","scanText","LogRowContextModal","options","RadioButtonGroup","InlineFieldRow","dedupType","LogRows","Logs","transitionDuration","transitionDelay","LogsCrossFadeTransition","visible","LogsContainer","updateTimeRange","origRow","ds","cacheFilters","runContextQuery","rowIndex","dsInstances","refId","dsPromises","resolve","instances","q","loadingState","logsSeries","loadSupplementaryQueryData","setSupplementaryQueryEnabled","onStartScanning","onStopScanning","logsVolume","logsResult","clearedAtIndex","supplementaryQueries","LogsSamplePanel","setLogsSampleEnabled","onToggleLogsSampleCollapse","OpenInSplitViewButton","logSampleQueries","onSplitOpen","LogsSamplePanelContent","logs","NoData","css","getCardStyles","NoDataSourceCallToAction","cardStyles","canCreateDataSource","footer","ctaElement","CallToActionCard","UnconnectedNodeGraphContainer","withTraceView","datasourceType","getLinks","nodes","useCategorizeFrames","toggleCollapsed","toggled","windowHeight","useWindowSize","containerRef","setTop","countWarning","NodeGraph","NodeGraphContainer","makeSelectors","exploreItemSelector","QueryRows","getQueries","getDatasourceInstanceSettings","getQueryResponse","getHistory","getEventBridge","history","eventBridge","onRunQueries","newQueries","onAddQuery","onQueryCopied","onQueryRemoved","onQueryToggled","queryStatus","QueryEditorRows","mobileWidthThreshold","numberOfColumnsBeforeExpandedViewIsDefault","tableResult","listRef","valueLabels","items","getRawPrometheusListItemsFromDataFrame","isExpandedView","setIsExpandedView","onContentClick","calculateInitialHeight","getListItemHeight","itemIndex","switchId","Switch","ItemLabels","filteredValueLabels","valueLabel","itemWithValue","RawListItem","rawPrometheusResult","rawPrometheusFrame","RawPrometheusContainer","resultsStyle","ALL_GRAPH_STYLE_OPTIONS","ariaLabel","dataLinkPostProcessor","renderTable","FadeIn","defaultStyle","transitionStyles","Transition","ErrorContainer","queryError","showError","duration","ResponseErrorContainer","explore","rightColumnWidth","rightColumnContentWidth","cardColor","RichHistoryCard","queryHistoryItem","commentHistoryItem","starHistoryItem","deleteHistoryItem","changeDatasource","setQueries","activeUpdateComment","setActiveUpdateComment","comment","setComment","historyCardData","datasource","queriesToRun","differentDataSource","onCopyQuery","datasources","queriesText","onCreateShortLink","link","onDeleteQuery","performDelete","queryId","onStarrQuery","toggleActiveUpdateComment","onUpdateComment","onCancelUpdateComment","onKeyDown","keyEvent","updateComment","TextArea","queryActionButtons","DatasourceInfo","Query","LoadingPlaceholder","getQueryStyles","showDsInfo","getDsInfoStyles","dsApi","RichHistoryQueriesTab","totalQueries","richHistorySearchFilters","updateFilters","clearRichHistoryResults","loadMoreRichHistory","richHistorySettings","activeDatasourceInstance","listOfDatasources","datasourceFilters","filters","mappedQueriesToHeadings","sortOrderOptions","getSortOrderOptions","partialResults","RangeSlider","FilterInput","heading","retentionPeriodOptions","RichHistorySettingsTab","retentionPeriod","starredTabAsFirstTab","activeDatasourceOnly","onChangeRetentionPeriod","toggleStarredTabAsFirstTab","toggleactiveDatasourceOnly","deleteRichHistory","selectedOption","onDelete","RichHistoryStarredTab","Tabs","RichHistory","richHistory","richHistoryTotal","firstTab","setLoading","updateSettings","settingsToUpdate","filtersToUpdate","loadRichHistory","toggleActiveDatasourceOnly","QueriesTab","StarredTab","SettingsTab","RichHistoryContainer","setHeight","initRichHistory","updateHistorySettings","updateHistorySearchFilters","_e","_dir","SecondaryActions","loadingInState","TableContainer","rowCount","hasSubFrames","TableContainerWithTheme","TraceViewContainer","traceProp","TraceView","Explore","rawRange","queryKeys","modifier","modification","toggleableFilters","panelType","tracking","exploreContainerStyles","groupedByPlugin","graphResult","showFlameGraph","GraphContainer","logsContentOutlineWrapper","logsSample","showTrace","series","showMetrics","showTable","showRawPrometheus","showLogs","showCustom","showNodeGraph","showLogsSample","correlationEditorDetails","correlationEditorHelperData","openDrawer","contentOutlineVisible","showPanels","showRichHistory","richHistoryRowButtonHidden","showQueryInspector","showNoData","correlationsBox","ErrorBoundary","containerStyles","ExplorePaneContainerUnconnected","useStopQueries","EventBus","bus","ExplorePaneContainer","paneSelector","paneRef","useExplorePageTitle","params","navModel","useNavModel","dsService","panesObject","results","names","Branding","useKeyboardShortcuts","keybindings","tearDown","u","useSplitSizeUpdater","windowWidth","hasSplit","rightPaneWidthRatio","setRightPaneWidthRatio","exploreState","updateSplitSize","evenSplitWidth","areBothSimilar","widthCalc","useTimeSrvFix","searchParams","MIN_PANE_WIDTH","ExplorePage","useStateSync","chrome","showCorrelationEditorBar","SplitPaneWrapper","callback","delay","savedCallback","interval_1"],"sourceRoot":""}