/usr/share/grafana/public/app/plugins/datasource/grafana-postgresql-datasource/dist
{"version":3,"file":"sql-query-editor.js","mappings":"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","sources":["webpack://grafana-postgresql-datasource/../../../../../packages/grafana-e2e-selectors/src/resolver.ts","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-e2e-selectors/src/selectors/constants.ts","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-e2e-selectors/src/selectors/components.ts","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-e2e-selectors/src/selectors/index.ts","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-e2e-selectors/src/selectors/pages.ts","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/ConfirmModal.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/DatasetSelector.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/TableSelector.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/QueryHeader.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/query-editor-raw/QueryEditorRaw.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/query-editor-raw/QueryValidator.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/query-editor-raw/QueryToolbox.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/query-editor-raw/RawEditor.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/visual-query-builder/Preview.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/utils/getColumnsWithIndices.ts","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/utils/useSqlChange.ts","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/visual-query-builder/GroupByRow.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/visual-query-builder/SQLGroupByRow.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/visual-query-builder/OrderByRow.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/visual-query-builder/SQLOrderByRow.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/visual-query-builder/AwesomeQueryBuilder.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/visual-query-builder/WhereRow.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/visual-query-builder/SQLWhereRow.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/visual-query-builder/SelectColumn.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/visual-query-builder/SelectCustomFunctionParameters.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/visual-query-builder/SelectFunctionParameters.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/visual-query-builder/SelectRow.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/visual-query-builder/VisualEditor.tsx","webpack://grafana-postgresql-datasource/../../../../../packages/grafana-sql/src/components/QueryEditor.tsx"],"sourcesContent":["import { gte, compare, valid } from 'semver';\n\nimport {\n FunctionSelector,\n Selectors,\n SelectorsOf,\n StringSelector,\n VersionedSelectorGroup,\n VersionedSelectors,\n CssSelector,\n UrlSelector,\n FunctionSelectorTwoArgs,\n} from './types';\n\n/**\n * Resolves selectors based on the Grafana version\n */\nexport function resolveSelectors<T extends VersionedSelectorGroup>(\n versionedSelectors: T,\n grafanaVersion = 'latest'\n): SelectorsOf<T> {\n const version = grafanaVersion.replace(/\\-.*/, '');\n\n return resolveSelectorGroup(versionedSelectors, version);\n}\n\nfunction resolveSelectorGroup<T extends VersionedSelectorGroup>(group: T, grafanaVersion: string): SelectorsOf<T> {\n const result: Selectors = {};\n\n for (const [key, value] of Object.entries(group)) {\n if (isVersionedSelectorGroup(value)) {\n result[key] = resolveSelectorGroup(value, grafanaVersion);\n } else {\n assertIsSemverValid(value, key);\n result[key] = resolveSelector(value, grafanaVersion);\n }\n }\n\n return result as SelectorsOf<T>;\n}\n\nfunction isVersionedSelectorGroup(\n target: VersionedSelectors | VersionedSelectorGroup\n): target is VersionedSelectorGroup {\n if (typeof target === 'object') {\n const [first] = Object.keys(target);\n return !valid(first);\n }\n\n return false;\n}\n\nfunction resolveSelector(\n versionedSelector: VersionedSelectors,\n grafanaVersion: string\n): StringSelector | FunctionSelector | FunctionSelectorTwoArgs | CssSelector | UrlSelector {\n let versionToUse;\n let versions = Object.keys(versionedSelector).sort(compare);\n\n if (grafanaVersion === 'latest') {\n return versionedSelector[versions[versions.length - 1]];\n }\n\n for (const version of versions) {\n if (gte(grafanaVersion, version)) {\n versionToUse = version;\n }\n }\n\n if (!versionToUse) {\n versionToUse = versions[versions.length - 1];\n }\n\n return versionedSelector[versionToUse];\n}\n\nfunction assertIsSemverValid(versionedSelector: VersionedSelectors, selectorName: string) {\n if (!Object.keys(versionedSelector).every((version) => valid(version))) {\n throw new Error(`Invalid semver version: '${selectorName}'`);\n }\n}\n","export const MIN_GRAFANA_VERSION = '8.5.0';\n","// NOTE: by default Component string selectors are set up to be aria-labels,\n// however there are many cases where your component may not need an aria-label\n// (a <button> with clear text, for example, does not need an aria-label as it's already labeled)\n// but you still might need to select it for testing,\n// in that case please add the attribute data-testid={selector} in the component and\n// prefix your selector string with 'data-testid' so that when create the selectors we know to search for it on the right attribute\n\nimport { VersionedSelectorGroup } from '../types';\n\nimport { MIN_GRAFANA_VERSION } from './constants';\n\n/**\n * Selectors grouped/defined in Components\n */\nexport const versionedComponents = {\n RadioButton: {\n container: {\n '10.2.3': 'data-testid radio-button',\n },\n },\n Breadcrumbs: {\n breadcrumb: {\n '9.4.0': (title: string) => `data-testid ${title} breadcrumb`,\n },\n },\n CanvasGridAddActions: {\n addPanel: {\n '12.1.0': 'data-testid CanvasGridAddActions add-panel',\n },\n groupPanels: {\n '12.1.0': 'data-testid CanvasGridAddActions group-panels',\n },\n ungroup: {\n '12.1.0': 'data-testid CanvasGridAddActions ungroup',\n },\n ungroupRows: {\n '12.1.0': 'data-testid CanvasGridAddActions ungroup-rows',\n },\n addRow: {\n '12.1.0': 'data-testid CanvasGridAddActions add-row',\n },\n pasteRow: {\n '12.1.0': 'data-testid CanvasGridAddActions paste-row',\n },\n addTab: {\n '12.1.0': 'data-testid CanvasGridAddActions add-tab',\n },\n pasteTab: {\n '12.1.0': 'data-testid CanvasGridAddActions paste-tab',\n },\n pastePanel: {\n '12.1.0': 'data-testid CanvasGridAddActions paste-panel',\n },\n },\n DashboardEditPaneSplitter: {\n primaryBody: {\n '12.1.0': 'data-testid DashboardEditPaneSplitter primary body',\n },\n },\n EditPaneHeader: {\n deleteButton: {\n '12.1.0': 'data-testid EditPaneHeader delete panel',\n },\n copyDropdown: {\n '12.1.0': 'data-testid EditPaneHeader copy dropdown',\n },\n copy: {\n '12.1.0': 'data-testid EditPaneHeader copy',\n },\n duplicate: {\n '12.1.0': 'data-testid EditPaneHeader duplicate',\n },\n backButton: {\n '12.1.0': 'data-testid EditPaneHeader back',\n },\n },\n TimePicker: {\n openButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid TimePicker Open Button',\n },\n overlayContent: {\n '10.2.3': 'data-testid TimePicker Overlay Content',\n },\n fromField: {\n '10.2.3': 'data-testid Time Range from field',\n [MIN_GRAFANA_VERSION]: 'Time Range from field',\n },\n toField: {\n '10.2.3': 'data-testid Time Range to field',\n [MIN_GRAFANA_VERSION]: 'Time Range to field',\n },\n applyTimeRange: {\n [MIN_GRAFANA_VERSION]: 'data-testid TimePicker submit button',\n },\n copyTimeRange: {\n '10.4.0': 'data-testid TimePicker copy button',\n },\n pasteTimeRange: {\n '10.4.0': 'data-testid TimePicker paste button',\n },\n calendar: {\n label: {\n '10.2.3': 'data-testid Time Range calendar',\n [MIN_GRAFANA_VERSION]: 'Time Range calendar',\n },\n openButton: {\n '10.2.3': 'data-testid Open time range calendar',\n [MIN_GRAFANA_VERSION]: 'Open time range calendar',\n },\n closeButton: {\n '10.2.3': 'data-testid Close time range Calendar',\n [MIN_GRAFANA_VERSION]: 'Close time range Calendar',\n },\n },\n absoluteTimeRangeTitle: {\n [MIN_GRAFANA_VERSION]: 'data-testid-absolute-time-range-narrow',\n },\n },\n DataSourcePermissions: {\n form: { '9.5.0': () => 'form[name=\"addPermission\"]' },\n roleType: {\n '9.5.0': 'Role to add new permission to',\n },\n rolePicker: {\n '9.5.0': 'Built-in role picker',\n },\n permissionLevel: {\n '12.0.0': 'Permission level',\n '9.5.0': 'Permission Level',\n },\n },\n DateTimePicker: {\n input: {\n '10.2.3': 'data-testid date-time-input',\n },\n },\n DataSource: {\n TestData: {\n QueryTab: {\n scenarioSelectContainer: {\n [MIN_GRAFANA_VERSION]: 'Test Data Query scenario select container',\n },\n scenarioSelect: {\n [MIN_GRAFANA_VERSION]: 'Test Data Query scenario select',\n },\n max: {\n [MIN_GRAFANA_VERSION]: 'TestData max',\n },\n min: {\n [MIN_GRAFANA_VERSION]: 'TestData min',\n },\n noise: {\n [MIN_GRAFANA_VERSION]: 'TestData noise',\n },\n seriesCount: {\n [MIN_GRAFANA_VERSION]: 'TestData series count',\n },\n spread: {\n [MIN_GRAFANA_VERSION]: 'TestData spread',\n },\n startValue: {\n [MIN_GRAFANA_VERSION]: 'TestData start value',\n },\n drop: {\n [MIN_GRAFANA_VERSION]: 'TestData drop values',\n },\n },\n },\n DataSourceHttpSettings: {\n urlInput: {\n '10.4.0': 'data-testid Datasource HTTP settings url',\n [MIN_GRAFANA_VERSION]: 'Datasource HTTP settings url',\n },\n },\n Jaeger: {\n traceIDInput: {\n [MIN_GRAFANA_VERSION]: 'Trace ID',\n },\n },\n Prometheus: {\n configPage: {\n connectionSettings: {\n [MIN_GRAFANA_VERSION]: 'Data source connection URL', // aria-label in grafana experimental\n },\n manageAlerts: {\n '10.4.0': 'prometheus-alerts-manager', // id for switch component\n },\n allowAsRecordingRulesTarget: {\n '12.1.0': 'prometheus-recording-rules-target',\n },\n scrapeInterval: {\n '10.4.0': 'data-testid scrape interval',\n },\n queryTimeout: {\n '10.4.0': 'data-testid query timeout',\n },\n defaultEditor: {\n '10.4.0': 'data-testid default editor',\n },\n disableMetricLookup: {\n '10.4.0': 'disable-metric-lookup', // id for switch component\n },\n prometheusType: {\n '10.4.0': 'data-testid prometheus type',\n },\n prometheusVersion: {\n '10.4.0': 'data-testid prometheus version',\n },\n cacheLevel: {\n '10.4.0': 'data-testid cache level',\n },\n incrementalQuerying: {\n '10.4.0': 'prometheus-incremental-querying', // id for switch component\n },\n queryOverlapWindow: {\n '10.4.0': 'data-testid query overlap window',\n },\n disableRecordingRules: {\n '10.4.0': 'disable-recording-rules', // id for switch component\n },\n customQueryParameters: {\n '10.4.0': 'data-testid custom query parameters',\n },\n httpMethod: {\n '10.4.0': 'data-testid http method',\n },\n exemplarsAddButton: {\n '10.3.0': 'data-testid Add exemplar config button',\n [MIN_GRAFANA_VERSION]: 'Add exemplar config button',\n },\n internalLinkSwitch: {\n '10.3.0': 'data-testid Internal link switch',\n [MIN_GRAFANA_VERSION]: 'Internal link switch',\n },\n codeModeMetricNamesSuggestionLimit: {\n '11.1.0': 'data-testid code mode metric names suggestion limit',\n },\n seriesLimit: {\n '12.0.2': 'data-testid maximum series limit',\n },\n },\n queryEditor: {\n explain: {\n '10.4.0': 'data-testid prometheus explain switch wrapper',\n },\n editorToggle: {\n '10.4.0': 'data-testid QueryEditorModeToggle', // wrapper for toggle\n },\n options: {\n '10.4.0': 'data-testid prometheus options', // wrapper for options group\n },\n legend: {\n '10.4.0': 'data-testid prometheus legend wrapper', // wrapper for multiple compomnents\n },\n format: {\n '10.4.0': 'data-testid prometheus format',\n },\n step: {\n '10.4.0': 'data-testid prometheus-step', // id for autosize component\n },\n type: {\n '10.4.0': 'data-testid prometheus type', //wrapper for radio button group\n },\n exemplars: {\n '10.4.0': 'data-testid prometheus-exemplars', // id for editor switch component\n },\n builder: {\n // see QueryBuilder below for commented selectors\n metricSelect: {\n '10.4.0': 'data-testid metric select',\n },\n hints: {\n '10.4.0': 'data-testid prometheus hints', // wrapper for hints component\n },\n metricsExplorer: {\n '10.4.0': 'data-testid metrics explorer',\n },\n queryAdvisor: {\n '10.4.0': 'data-testid query advisor',\n },\n },\n code: {\n queryField: {\n '10.4.0': 'data-testid prometheus query field',\n },\n metricsCountInfo: {\n '11.1.0': 'data-testid metrics count disclaimer',\n },\n metricsBrowser: {\n openButton: {\n '10.4.0': 'data-testid open metrics browser',\n },\n selectMetric: {\n '10.4.0': 'data-testid select a metric',\n },\n seriesLimit: {\n '10.3.1': 'data-testid series limit',\n },\n metricList: {\n '10.4.0': 'data-testid metric list',\n },\n labelNamesFilter: {\n '10.4.0': 'data-testid label names filter',\n },\n labelValuesFilter: {\n '10.4.0': 'data-testid label values filter',\n },\n useQuery: {\n '10.4.0': 'data-testid use query',\n },\n useAsRateQuery: {\n '10.4.0': 'data-testid use as rate query',\n },\n validateSelector: {\n '10.4.0': 'data-testid validate selector',\n },\n clear: {\n '10.4.0': 'data-testid clear',\n },\n },\n },\n },\n exemplarMarker: {\n '10.3.0': 'data-testid Exemplar marker',\n [MIN_GRAFANA_VERSION]: 'Exemplar marker',\n },\n variableQueryEditor: {\n queryType: {\n '10.4.0': 'data-testid query type',\n },\n labelnames: {\n metricRegex: {\n '10.4.0': 'data-testid label names metric regex',\n },\n },\n labelValues: {\n labelSelect: {\n '10.4.0': 'data-testid label values label select',\n },\n },\n metricNames: {\n metricRegex: {\n '10.4.0': 'data-testid metric names metric regex',\n },\n },\n varQueryResult: {\n '10.4.0': 'data-testid variable query result',\n },\n seriesQuery: {\n '10.4.0': 'data-testid prometheus series query',\n },\n classicQuery: {\n '10.4.0': 'data-testid prometheus classic query',\n },\n },\n annotations: {\n minStep: {\n '10.4.0': 'data-testid prometheus-annotation-min-step', // id for autosize input\n },\n title: {\n '10.4.0': 'data-testid prometheus annotation title',\n },\n tags: {\n '10.4.0': 'data-testid prometheus annotation tags',\n },\n text: {\n '10.4.0': 'data-testid prometheus annotation text',\n },\n seriesValueAsTimestamp: {\n '10.4.0': 'data-testid prometheus annotation series value as timestamp',\n },\n },\n },\n },\n Menu: {\n MenuComponent: {\n [MIN_GRAFANA_VERSION]: (title: string) => `${title} menu`,\n },\n MenuGroup: {\n [MIN_GRAFANA_VERSION]: (title: string) => `${title} menu group`,\n },\n MenuItem: {\n [MIN_GRAFANA_VERSION]: (title: string) => `${title} menu item`,\n },\n SubMenu: {\n container: {\n '10.3.0': 'data-testid SubMenu container',\n [MIN_GRAFANA_VERSION]: 'SubMenu container',\n },\n icon: {\n '10.3.0': 'data-testid SubMenu icon',\n [MIN_GRAFANA_VERSION]: 'SubMenu icon',\n },\n },\n },\n Panels: {\n Panel: {\n title: {\n [MIN_GRAFANA_VERSION]: (title: string) => `data-testid Panel header ${title}`,\n },\n content: {\n '11.1.0': 'data-testid panel content',\n },\n headerContainer: {\n '9.5.0': 'data-testid header-container',\n },\n headerItems: {\n '10.2.0': (item: string) => `data-testid Panel header item ${item}`,\n },\n menuItems: {\n '9.5.0': (item: string) => `data-testid Panel menu item ${item}`,\n },\n menu: {\n '9.5.0': (title: string) => `data-testid Panel menu ${title}`,\n },\n containerByTitle: {\n [MIN_GRAFANA_VERSION]: (title: string) => `${title} panel`,\n },\n headerCornerInfo: {\n [MIN_GRAFANA_VERSION]: (mode: string) => `Panel header ${mode}`,\n },\n status: {\n '10.2.0': (status: string) => `data-testid Panel status ${status}`,\n [MIN_GRAFANA_VERSION]: (_: string) => 'Panel status',\n },\n loadingBar: {\n '10.0.0': () => `Panel loading bar`,\n },\n HoverWidget: {\n container: {\n '10.1.0': 'data-testid hover-header-container',\n [MIN_GRAFANA_VERSION]: 'hover-header-container',\n },\n dragIcon: {\n '10.0.0': 'data-testid drag-icon',\n },\n },\n PanelDataErrorMessage: {\n '10.4.0': 'data-testid Panel data error message',\n },\n },\n Visualization: {\n Graph: {\n container: {\n '9.5.0': 'Graph container',\n },\n VisualizationTab: {\n legendSection: {\n [MIN_GRAFANA_VERSION]: 'Legend section',\n },\n },\n Legend: {\n legendItemAlias: {\n [MIN_GRAFANA_VERSION]: (name: string) => `gpl alias ${name}`,\n },\n showLegendSwitch: {\n [MIN_GRAFANA_VERSION]: 'gpl show legend',\n },\n },\n xAxis: {\n labels: {\n [MIN_GRAFANA_VERSION]: () => 'div.flot-x-axis > div.flot-tick-label',\n },\n },\n },\n BarGauge: {\n valueV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Bar gauge value',\n },\n },\n PieChart: {\n svgSlice: {\n '10.3.0': 'data testid Pie Chart Slice',\n },\n },\n Text: {\n container: { [MIN_GRAFANA_VERSION]: () => '.markdown-html' },\n },\n Table: {\n header: {\n [MIN_GRAFANA_VERSION]: 'table header',\n },\n footer: {\n [MIN_GRAFANA_VERSION]: 'table-footer',\n },\n body: {\n '10.2.0': 'data-testid table body',\n },\n },\n TableNG: {\n Filters: {\n HeaderButton: {\n '12.1.0': 'data-testid tableng header filter',\n },\n Container: {\n '12.1.0': 'data-testid tablenf filter container',\n },\n SelectAll: {\n '12.1.0': 'data-testid tableng filter select-all',\n },\n },\n Tooltip: {\n Wrapper: {\n '12.2.0': 'data-testid tableng tooltip wrapper',\n },\n Caret: {\n '12.2.0': 'data-testid tableng tooltip caret',\n },\n },\n Footer: {\n ReducerLabel: {\n '12.2.0': 'data-testid tableng footer reducer-label',\n },\n Value: {\n '12.2.0': 'data-testid tableng footer value',\n },\n },\n },\n Tooltip: {\n Wrapper: {\n '12.3.0': 'data-testid viz-tooltip-wrapper',\n },\n },\n },\n },\n VizLegend: {\n seriesName: {\n '10.3.0': (name: string) => `data-testid VizLegend series ${name}`,\n },\n },\n Drawer: {\n General: {\n title: {\n [MIN_GRAFANA_VERSION]: (title: string) => `Drawer title ${title}`,\n },\n expand: {\n [MIN_GRAFANA_VERSION]: 'Drawer expand',\n },\n contract: {\n [MIN_GRAFANA_VERSION]: 'Drawer contract',\n },\n close: {\n '10.3.0': 'data-testid Drawer close',\n [MIN_GRAFANA_VERSION]: 'Drawer close',\n },\n rcContentWrapper: { '9.4.0': () => '.rc-drawer-content-wrapper' },\n subtitle: {\n '10.4.0': 'data-testid drawer subtitle',\n },\n },\n DashboardSaveDrawer: {\n saveButton: {\n '11.1.0': 'data-testid Save dashboard drawer button',\n },\n saveAsButton: {\n '11.1.0': 'data-testid Save as dashboard drawer button',\n },\n saveAsTitleInput: {\n '11.1.0': 'Save dashboard title field',\n },\n },\n },\n PanelEditor: {\n General: {\n content: {\n '11.1.0': 'data-testid Panel editor content',\n '8.0.0': 'Panel editor content',\n },\n },\n OptionsPane: {\n content: {\n '11.1.0': 'data-testid Panel editor option pane content',\n [MIN_GRAFANA_VERSION]: 'Panel editor option pane content',\n },\n select: {\n [MIN_GRAFANA_VERSION]: 'Panel editor option pane select',\n },\n fieldLabel: {\n [MIN_GRAFANA_VERSION]: (type: string) => `${type} field property editor`,\n },\n fieldInput: {\n '11.0.0': (title: string) => `data-testid Panel editor option pane field input ${title}`,\n },\n },\n DataPane: {\n content: {\n '11.1.0': 'data-testid Panel editor data pane content',\n [MIN_GRAFANA_VERSION]: 'Panel editor data pane content',\n },\n },\n applyButton: {\n '9.2.0': 'data-testid Apply changes and go back to dashboard',\n '9.1.0': 'Apply changes and go back to dashboard',\n '8.0.0': 'panel editor apply',\n },\n toggleVizPicker: {\n '10.0.0': 'data-testid toggle-viz-picker',\n '8.0.0': 'toggle-viz-picker',\n },\n toggleVizOptions: {\n '10.1.0': 'data-testid toggle-viz-options',\n [MIN_GRAFANA_VERSION]: 'toggle-viz-options',\n },\n toggleTableView: {\n '11.1.0': 'data-testid toggle-table-view',\n [MIN_GRAFANA_VERSION]: 'toggle-table-view',\n },\n\n // [Geomap] Map controls\n showZoomField: {\n '10.2.0': 'Map controls Show zoom control field property editor',\n },\n showAttributionField: {\n '10.2.0': 'Map controls Show attribution field property editor',\n },\n showScaleField: {\n '10.2.0': 'Map controls Show scale field property editor',\n },\n showMeasureField: {\n '10.2.0': 'Map controls Show measure tools field property editor',\n },\n showDebugField: {\n '10.2.0': 'Map controls Show debug field property editor',\n },\n\n measureButton: {\n '12.1.0': 'data-testid panel-editor-measure-button',\n '9.2.0': 'show measure tools',\n },\n\n Outline: {\n section: {\n '12.0.0': 'data-testid Outline section',\n },\n node: {\n '12.0.0': (type: string) => `data-testid outline node ${type}`,\n },\n item: {\n '12.0.0': (type: string) => `data-testid outline item ${type}`,\n },\n },\n ElementEditPane: {\n variableType: {\n '12.0.0': (type?: string) => `data-testid variable type ${type}`,\n },\n addVariableButton: {\n '12.0.0': 'data-testid add variable button',\n },\n variableNameInput: {\n '12.0.0': 'data-testid variable name input',\n },\n variableLabelInput: {\n '12.0.0': 'data-testid variable label input',\n },\n AutoGridLayout: {\n minColumnWidth: {\n '12.1.0': 'data-testid min column width selector',\n },\n customMinColumnWidth: {\n '12.1.0': 'data-testid custom min column width input',\n },\n clearCustomMinColumnWidth: {\n '12.1.0': 'data-testid clear custom min column width input',\n },\n maxColumns: {\n '12.1.0': 'data-testid max columns selector',\n },\n rowHeight: {\n '12.1.0': 'data-testid row height selector',\n },\n customRowHeight: {\n '12.1.0': 'data-testid custom row height input',\n },\n clearCustomRowHeight: {\n '12.1.0': 'data-testid clear custom row height input',\n },\n fillScreen: {\n '12.1.0': 'data-testid fill screen switch',\n },\n },\n TabsLayout: {\n titleInput: {\n '12.2.0': 'data-testid tab title input',\n },\n },\n },\n },\n PanelInspector: {\n Data: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Panel inspector Data content',\n },\n },\n Stats: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Panel inspector Stats content',\n },\n },\n Json: {\n content: {\n '11.1.0': 'data-testid Panel inspector Json content',\n [MIN_GRAFANA_VERSION]: 'Panel inspector Json content',\n },\n },\n Query: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Panel inspector Query content',\n },\n refreshButton: {\n [MIN_GRAFANA_VERSION]: 'Panel inspector Query refresh button',\n },\n jsonObjectKeys: {\n [MIN_GRAFANA_VERSION]: () => '.json-formatter-key',\n },\n },\n },\n Tab: {\n title: {\n '11.2.0': (title: string) => `data-testid Tab ${title}`,\n },\n active: { [MIN_GRAFANA_VERSION]: () => '[class*=\"-activeTabStyle\"]' },\n },\n RefreshPicker: {\n runButtonV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid RefreshPicker run button',\n },\n intervalButtonV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid RefreshPicker interval button',\n },\n },\n QueryTab: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Query editor tab content',\n },\n queryInspectorButton: {\n [MIN_GRAFANA_VERSION]: 'Query inspector button',\n },\n queryHistoryButton: {\n '10.2.0': 'data-testid query-history-button',\n [MIN_GRAFANA_VERSION]: 'query-history-button',\n },\n addQuery: {\n '10.2.0': 'data-testid query-tab-add-query',\n [MIN_GRAFANA_VERSION]: 'Query editor add query button',\n },\n addQueryFromLibrary: {\n '11.5.0': 'data-testid query-tab-add-query-from-library',\n },\n queryGroupTopSection: {\n '11.2.0': 'data-testid query group top section',\n },\n addExpression: {\n '11.2.0': 'data-testid query-tab-add-expression',\n },\n },\n QueryHistory: {\n queryText: {\n '9.0.0': 'Query text',\n },\n },\n QueryEditorRows: {\n rows: {\n [MIN_GRAFANA_VERSION]: 'Query editor row',\n },\n },\n QueryEditorRow: {\n actionButton: {\n '10.4.0': (title: string) => `data-testid ${title}`,\n },\n title: {\n [MIN_GRAFANA_VERSION]: (refId: string) => `Query editor row title ${refId}`,\n },\n container: {\n [MIN_GRAFANA_VERSION]: (refId: string) => `Query editor row ${refId}`,\n },\n },\n AlertTab: {\n content: {\n '10.2.3': 'data-testid Alert editor tab content',\n [MIN_GRAFANA_VERSION]: 'Alert editor tab content',\n },\n },\n AlertRules: {\n groupToggle: {\n '11.0.0': 'data-testid group-collapse-toggle',\n },\n toggle: {\n '11.0.0': 'data-testid collapse-toggle',\n },\n expandedContent: {\n '11.0.0': 'data-testid expanded-content',\n },\n previewButton: {\n '11.1.0': 'data-testid alert-rule preview-button',\n },\n ruleNameField: {\n '11.1.0': 'data-testid alert-rule name-field',\n },\n newFolderButton: {\n '11.1.0': 'data-testid alert-rule new-folder-button',\n },\n newFolderNameField: {\n '11.1.0': 'data-testid alert-rule name-folder-name-field',\n },\n newFolderNameCreateButton: {\n '11.1.0': 'data-testid alert-rule name-folder-name-create-button',\n },\n newEvaluationGroupButton: {\n '11.1.0': 'data-testid alert-rule new-evaluation-group-button',\n },\n newEvaluationGroupName: {\n '11.1.0': 'data-testid alert-rule new-evaluation-group-name',\n },\n newEvaluationGroupInterval: {\n '11.1.0': 'data-testid alert-rule new-evaluation-group-interval',\n },\n newEvaluationGroupCreate: {\n '11.1.0': 'data-testid alert-rule new-evaluation-group-create-button',\n },\n step: {\n '11.5.0': (stepNo: string) => `data-testid alert-rule step-${stepNo}`,\n },\n stepAdvancedModeSwitch: {\n '11.5.0': (stepNo: string) => `data-testid advanced-mode-switch step-${stepNo}`,\n },\n },\n Alert: {\n alertV2: {\n [MIN_GRAFANA_VERSION]: (severity: string) => `data-testid Alert ${severity}`,\n },\n },\n TransformTab: {\n content: {\n '10.1.0': 'data-testid Transform editor tab content',\n [MIN_GRAFANA_VERSION]: 'Transform editor tab content',\n },\n newTransform: {\n '10.1.0': (name: string) => `data-testid New transform ${name}`,\n },\n transformationEditor: {\n '10.1.0': (name: string) => `data-testid Transformation editor ${name}`,\n },\n transformationEditorDebugger: {\n '10.1.0': (name: string) => `data-testid Transformation editor debugger ${name}`,\n },\n },\n Transforms: {\n card: {\n '10.1.0': (name: string) => `data-testid New transform ${name}`,\n },\n disableTransformationButton: {\n '10.4.0': 'data-testid Disable transformation button',\n },\n Reduce: {\n modeLabel: {\n '10.2.3': 'data-testid Transform mode label',\n [MIN_GRAFANA_VERSION]: 'Transform mode label',\n },\n calculationsLabel: {\n '10.2.3': 'data-testid Transform calculations label',\n [MIN_GRAFANA_VERSION]: 'Transform calculations label',\n },\n },\n SpatialOperations: {\n actionLabel: {\n '9.1.2': 'root Action field property editor',\n },\n locationLabel: {\n '10.2.0': 'root Location Mode field property editor',\n },\n location: {\n autoOption: {\n '9.1.2': 'Auto location option',\n },\n coords: {\n option: {\n '9.1.2': 'Coords location option',\n },\n latitudeFieldLabel: {\n '9.1.2': 'root Latitude field field property editor',\n },\n longitudeFieldLabel: {\n '9.1.2': 'root Longitude field field property editor',\n },\n },\n geohash: {\n option: {\n '9.1.2': 'Geohash location option',\n },\n geohashFieldLabel: {\n '9.1.2': 'root Geohash field field property editor',\n },\n },\n lookup: {\n option: {\n '9.1.2': 'Lookup location option',\n },\n lookupFieldLabel: {\n '9.1.2': 'root Lookup field field property editor',\n },\n gazetteerFieldLabel: {\n '9.1.2': 'root Gazetteer field property editor',\n },\n },\n },\n },\n searchInput: {\n '10.2.3': 'data-testid search transformations',\n [MIN_GRAFANA_VERSION]: 'search transformations',\n },\n noTransformationsMessage: {\n '10.2.3': 'data-testid no transformations message',\n },\n addTransformationButton: {\n '10.1.0': 'data-testid add transformation button',\n [MIN_GRAFANA_VERSION]: 'add transformation button',\n },\n removeAllTransformationsButton: {\n '10.4.0': 'data-testid remove all transformations button',\n },\n },\n NavBar: {\n Configuration: {\n button: {\n '9.5.0': 'Configuration',\n },\n },\n Toggle: {\n button: {\n '10.2.3': 'data-testid Toggle menu',\n [MIN_GRAFANA_VERSION]: 'Toggle menu',\n },\n },\n Reporting: {\n button: {\n '9.5.0': 'Reporting',\n },\n },\n },\n NavMenu: {\n Menu: {\n '10.2.3': 'data-testid navigation mega-menu',\n },\n item: {\n '9.5.0': 'data-testid Nav menu item',\n },\n },\n NavToolbar: {\n container: {\n '9.4.0': 'data-testid Nav toolbar',\n },\n commandPaletteTrigger: {\n '11.5.0': 'data-testid Command palette trigger',\n },\n shareDashboard: {\n '11.1.0': 'data-testid Share dashboard',\n },\n markAsFavorite: {\n '11.1.0': 'data-testid Mark as favorite',\n },\n editDashboard: {\n editButton: {\n '11.1.0': 'data-testid Edit dashboard button',\n },\n saveButton: {\n '11.1.0': 'data-testid Save dashboard button',\n },\n exitButton: {\n '11.1.0': 'data-testid Exit edit mode button',\n },\n settingsButton: {\n '11.1.0': 'data-testid Dashboard settings',\n },\n addRowButton: {\n '11.1.0': 'data-testid Add row button',\n },\n addLibraryPanelButton: {\n '11.1.0': 'data-testid Add a panel from the panel library button',\n },\n addVisualizationButton: {\n '11.1.0': 'data-testid Add new visualization menu item',\n },\n pastePanelButton: {\n '11.1.0': 'data-testid Paste panel button',\n },\n discardChangesButton: {\n '11.1.0': 'data-testid Discard changes button',\n },\n discardLibraryPanelButton: {\n '11.1.0': 'data-testid Discard library panel button',\n },\n unlinkLibraryPanelButton: {\n '11.1.0': 'data-testid Unlink library panel button',\n },\n saveLibraryPanelButton: {\n '11.1.0': 'data-testid Save library panel button',\n },\n backToDashboardButton: {\n '11.1.0': 'data-testid Back to dashboard button',\n },\n },\n },\n\n PageToolbar: {\n container: { [MIN_GRAFANA_VERSION]: () => '.page-toolbar' },\n item: {\n [MIN_GRAFANA_VERSION]: (tooltip: string) => `${tooltip}`,\n },\n itemButton: {\n '9.5.0': (title: string) => `data-testid ${title}`,\n },\n },\n QueryEditorToolbarItem: {\n button: {\n [MIN_GRAFANA_VERSION]: (title: string) => `QueryEditor toolbar item button ${title}`,\n },\n },\n BackButton: {\n backArrow: {\n '10.3.0': 'data-testid Go Back',\n [MIN_GRAFANA_VERSION]: 'Go Back',\n },\n },\n OptionsGroup: {\n group: {\n '11.1.0': (title?: string) => (title ? `data-testid Options group ${title}` : 'data-testid Options group'),\n [MIN_GRAFANA_VERSION]: (title?: string) => (title ? `Options group ${title}` : 'Options group'),\n },\n toggle: {\n '11.1.0': (title?: string) =>\n title ? `data-testid Options group ${title} toggle` : 'data-testid Options group toggle',\n [MIN_GRAFANA_VERSION]: (title?: string) => (title ? `Options group ${title} toggle` : 'Options group toggle'),\n },\n },\n PluginVisualization: {\n item: {\n [MIN_GRAFANA_VERSION]: (title: string) => `Plugin visualization item ${title}`,\n },\n current: {\n [MIN_GRAFANA_VERSION]: () => '[class*=\"-currentVisualizationItem\"]',\n },\n },\n Select: {\n menu: {\n '11.5.0': 'data-testid Select menu',\n [MIN_GRAFANA_VERSION]: 'Select options menu',\n },\n option: {\n '11.1.0': 'data-testid Select option',\n [MIN_GRAFANA_VERSION]: 'Select option',\n },\n toggleAllOptions: {\n '11.3.0': 'data-testid toggle all options',\n },\n input: {\n [MIN_GRAFANA_VERSION]: () => 'input[id*=\"time-options-input\"]',\n },\n singleValue: {\n [MIN_GRAFANA_VERSION]: () => 'div[class*=\"-singleValue\"]',\n },\n },\n FieldConfigEditor: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Field config editor content',\n },\n },\n OverridesConfigEditor: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Field overrides editor content',\n },\n },\n FolderPicker: {\n containerV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Folder picker select container',\n },\n input: {\n '10.4.0': 'data-testid folder-picker-input',\n },\n },\n ReadonlyFolderPicker: {\n container: {\n [MIN_GRAFANA_VERSION]: 'data-testid Readonly folder picker select container',\n },\n },\n DataSourcePicker: {\n container: {\n '10.0.0': 'data-testid Data source picker select container',\n '8.0.0': 'Data source picker select container',\n },\n inputV2: {\n '10.1.0': 'data-testid Select a data source',\n [MIN_GRAFANA_VERSION]: 'Select a data source',\n },\n dataSourceList: {\n '10.4.0': 'data-testid Data source list dropdown',\n },\n advancedModal: {\n dataSourceList: {\n '10.4.0': 'data-testid Data source list',\n },\n builtInDataSourceList: {\n '10.4.0': 'data-testid Built in data source list',\n },\n },\n },\n TimeZonePicker: {\n containerV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Time zone picker select container',\n },\n changeTimeSettingsButton: {\n '11.0.0': 'data-testid Time zone picker Change time settings button',\n },\n },\n WeekStartPicker: {\n containerV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Choose starting day of the week',\n },\n placeholder: {\n [MIN_GRAFANA_VERSION]: 'Choose starting day of the week',\n },\n },\n TraceViewer: {\n spanBar: {\n '9.0.0': 'data-testid SpanBar--wrapper',\n },\n },\n QueryField: {\n container: {\n '10.3.0': 'data-testid Query field',\n [MIN_GRAFANA_VERSION]: 'Query field',\n },\n },\n QueryBuilder: {\n queryPatterns: {\n '10.3.0': 'data-testid Query patterns',\n [MIN_GRAFANA_VERSION]: 'Query patterns',\n },\n labelSelect: {\n '10.3.0': 'data-testid Select label',\n [MIN_GRAFANA_VERSION]: 'Select label',\n },\n inputSelect: {\n '11.1.0': 'data-testid Select label-input',\n },\n valueSelect: {\n '10.3.0': 'data-testid Select value',\n [MIN_GRAFANA_VERSION]: 'Select value',\n },\n matchOperatorSelect: {\n '10.3.0': 'data-testid Select match operator',\n [MIN_GRAFANA_VERSION]: 'Select match operator',\n },\n },\n ValuePicker: {\n button: {\n '10.3.0': (name: string) => `data-testid Value picker button ${name}`,\n },\n select: {\n '10.3.0': (name: string) => `data-testid Value picker select ${name}`,\n },\n },\n Search: {\n sectionV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Search section',\n },\n itemsV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Search items',\n },\n cards: {\n [MIN_GRAFANA_VERSION]: 'data-testid Search cards',\n },\n collapseFolder: {\n [MIN_GRAFANA_VERSION]: (sectionId: string) => `data-testid Collapse folder ${sectionId}`,\n },\n expandFolder: {\n [MIN_GRAFANA_VERSION]: (sectionId: string) => `data-testid Expand folder ${sectionId}`,\n },\n dashboardItem: {\n [MIN_GRAFANA_VERSION]: (item: string) => `data-testid Dashboard search item ${item}`,\n },\n dashboardCard: {\n [MIN_GRAFANA_VERSION]: (item: string) => `data-testid Search card ${item}`,\n },\n folderHeader: {\n '9.3.0': (folderName: string) => `data-testid Folder header ${folderName}`,\n },\n folderContent: {\n '9.3.0': (folderName: string) => `data-testid Folder content ${folderName}`,\n },\n dashboardItems: {\n [MIN_GRAFANA_VERSION]: 'data-testid Dashboard search item',\n },\n },\n DashboardLinks: {\n container: {\n [MIN_GRAFANA_VERSION]: 'data-testid Dashboard link container',\n },\n dropDown: {\n [MIN_GRAFANA_VERSION]: 'data-testid Dashboard link dropdown',\n },\n link: {\n [MIN_GRAFANA_VERSION]: 'data-testid Dashboard link',\n },\n },\n LoadingIndicator: {\n icon: {\n '10.4.0': 'data-testid Loading indicator',\n [MIN_GRAFANA_VERSION]: 'Loading indicator',\n },\n },\n CallToActionCard: {\n buttonV2: {\n [MIN_GRAFANA_VERSION]: (name: string) => `data-testid Call to action button ${name}`,\n },\n },\n DataLinksContextMenu: {\n singleLink: {\n '10.3.0': 'data-testid Data link',\n [MIN_GRAFANA_VERSION]: 'Data link',\n },\n },\n DataLinksActionsTooltip: {\n tooltipWrapper: {\n '12.1.0': 'data-testid Data links actions tooltip wrapper',\n },\n },\n CodeEditor: {\n container: {\n '10.2.3': 'data-testid Code editor container',\n [MIN_GRAFANA_VERSION]: 'Code editor container',\n },\n },\n ReactMonacoEditor: {\n editorLazy: {\n '11.1.0': 'data-testid ReactMonacoEditor editorLazy',\n },\n },\n DashboardImportPage: {\n textarea: {\n [MIN_GRAFANA_VERSION]: 'data-testid-import-dashboard-textarea',\n },\n submit: {\n [MIN_GRAFANA_VERSION]: 'data-testid-load-dashboard',\n },\n },\n ImportDashboardForm: {\n name: {\n [MIN_GRAFANA_VERSION]: 'data-testid-import-dashboard-title',\n },\n submit: {\n [MIN_GRAFANA_VERSION]: 'data-testid-import-dashboard-submit',\n },\n },\n PanelAlertTabContent: {\n content: {\n '10.2.3': 'data-testid Unified alert editor tab content',\n [MIN_GRAFANA_VERSION]: 'Unified alert editor tab content',\n },\n },\n VisualizationPreview: {\n card: {\n [MIN_GRAFANA_VERSION]: (name: string) => `data-testid suggestion-${name}`,\n },\n },\n ColorSwatch: {\n name: {\n [MIN_GRAFANA_VERSION]: 'data-testid-colorswatch',\n },\n },\n DashboardRow: {\n title: {\n [MIN_GRAFANA_VERSION]: (title: string) => `data-testid dashboard-row-title-${title}`,\n },\n wrapper: {\n '12.1.0': (title: string) => `data-testid dashboard-row-wrapper-for-${title}`,\n },\n },\n UserProfile: {\n profileSaveButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid-user-profile-save',\n },\n preferencesSaveButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid-shared-prefs-save',\n },\n orgsTable: {\n [MIN_GRAFANA_VERSION]: 'data-testid-user-orgs-table',\n },\n sessionsTable: {\n [MIN_GRAFANA_VERSION]: 'data-testid-user-sessions-table',\n },\n extensionPointTabs: {\n '10.2.3': 'data-testid-extension-point-tabs',\n },\n extensionPointTab: {\n '10.2.3': (tabId: string) => `data-testid-extension-point-tab-${tabId}`,\n },\n },\n FileUpload: {\n inputField: {\n '9.0.0': 'data-testid-file-upload-input-field',\n },\n fileNameSpan: {\n '9.0.0': 'data-testid-file-upload-file-name',\n },\n },\n DebugOverlay: {\n wrapper: {\n '9.2.0': 'debug-overlay',\n },\n },\n OrgRolePicker: {\n input: {\n '9.5.0': 'Role',\n },\n },\n AnalyticsToolbarButton: {\n button: {\n '9.5.0': 'Dashboard insights',\n },\n },\n Variables: {\n variableOption: {\n '9.5.0': 'data-testid variable-option',\n },\n variableLinkWrapper: {\n '11.1.1': 'data-testid variable-link-wrapper',\n },\n },\n Annotations: {\n annotationsTypeInput: {\n '11.1.0': 'data-testid annotations-type-input',\n [MIN_GRAFANA_VERSION]: 'annotations-type-input',\n },\n annotationsChoosePanelInput: {\n '11.1.0': 'data-testid choose-panels-input',\n [MIN_GRAFANA_VERSION]: 'choose-panels-input',\n },\n editor: {\n testButton: {\n '11.0.0': 'data-testid annotations-test-button',\n },\n resultContainer: {\n '11.0.0': 'data-testid annotations-query-result-container',\n },\n },\n },\n Tooltip: {\n container: {\n '10.2.0': 'data-testid tooltip',\n },\n },\n ReturnToPrevious: {\n buttonGroup: {\n '11.0.0': 'data-testid dismissable button group',\n },\n backButton: {\n '11.0.0': 'data-testid back',\n },\n dismissButton: {\n '11.0.0': 'data-testid dismiss',\n },\n },\n SQLQueryEditor: {\n selectColumn: {\n '11.0.0': 'data-testid select-column',\n },\n selectColumnInput: { '11.0.0': 'data-testid select-column-input' },\n selectFunctionParameter: { '11.0.0': (name: string) => `data-testid select-function-parameter-${name}` },\n selectAggregation: {\n '11.0.0': 'data-testid select-aggregation',\n },\n selectAggregationInput: { '11.0.0': 'data-testid select-aggregation-input' },\n selectAlias: {\n '11.0.0': 'data-testid select-alias',\n },\n selectAliasInput: { '11.0.0': 'data-testid select-alias-input' },\n selectInputParameter: { '11.0.0': 'data-testid select-input-parameter' },\n filterConjunction: {\n '11.0.0': 'data-testid filter-conjunction',\n },\n filterField: {\n '11.0.0': 'data-testid filter-field',\n },\n filterOperator: {\n '11.0.0': 'data-testid filter-operator',\n },\n headerTableSelector: {\n '11.0.0': 'data-testid header-table-selector',\n },\n headerFilterSwitch: {\n '11.0.0': 'data-testid header-filter-switch',\n },\n headerGroupSwitch: {\n '11.0.0': 'data-testid header-group-switch',\n },\n headerOrderSwitch: {\n '11.0.0': 'data-testid header-order-switch',\n },\n headerPreviewSwitch: {\n '11.0.0': 'data-testid header-preview-switch',\n },\n },\n EntityNotFound: {\n container: {\n '11.2.0': 'data-testid entity-not-found',\n },\n },\n Portal: {\n container: {\n '11.5.0': 'data-testid portal-container',\n },\n },\n ExportImage: {\n formatOptions: {\n container: {\n ['12.1.0']: 'data-testid export-image-format-options',\n },\n png: {\n ['12.1.0']: 'data-testid export-image-format-png',\n },\n jpg: {\n ['12.1.0']: 'data-testid export-image-format-jpg',\n },\n },\n rendererAlert: {\n container: {\n ['12.1.0']: 'data-testid export-image-renderer-alert',\n },\n title: {\n ['12.1.0']: 'data-testid export-image-renderer-alert-title',\n },\n description: {\n ['12.1.0']: 'data-testid export-image-renderer-alert-description',\n },\n },\n buttons: {\n generate: {\n ['12.1.0']: 'data-testid export-image-generate-button',\n },\n download: {\n ['12.1.0']: 'data-testid export-image-download-button',\n },\n cancel: {\n ['12.1.0']: 'data-testid export-image-cancel-button',\n },\n },\n preview: {\n container: {\n ['12.1.0']: 'data-testid export-image-preview-container',\n },\n loading: {\n ['12.1.0']: 'data-testid export-image-preview-loading',\n },\n image: {\n ['12.1.0']: 'data-testid export-image-preview',\n },\n error: {\n container: {\n ['12.1.0']: 'data-testid export-image-error',\n },\n title: {\n ['12.1.0']: 'data-testid export-image-error-title',\n },\n message: {\n ['12.1.0']: 'data-testid export-image-error-message',\n },\n },\n },\n },\n} satisfies VersionedSelectorGroup;\n\nexport type VersionedComponents = typeof versionedComponents;\n","import { resolveSelectors } from '../resolver';\nimport { E2ESelectors } from '../types';\n\nimport { versionedComponents, VersionedComponents } from './components';\nimport { versionedPages, VersionedPages } from './pages';\n\nconst Pages = resolveSelectors(versionedPages);\nconst Components = resolveSelectors(versionedComponents);\nconst selectors = { pages: Pages, components: Components };\n\n/**\n * Exposes Pages, Component selectors and E2ESelectors type in package for easy use in e2e tests and in production code\n */\nexport {\n Pages,\n Components,\n selectors,\n versionedComponents,\n versionedPages,\n resolveSelectors,\n type VersionedPages,\n type VersionedComponents,\n type E2ESelectors,\n};\n","import { VersionedSelectorGroup } from '../types';\n\nimport { MIN_GRAFANA_VERSION } from './constants';\n\n/**\n * Selectors grouped/defined in Pages\n */\nexport const versionedPages = {\n Alerting: {\n AddAlertRule: {\n url: {\n '10.1.0': '/alerting/new/alerting',\n [MIN_GRAFANA_VERSION]: '/alerting/new',\n },\n },\n EditAlertRule: {\n url: {\n [MIN_GRAFANA_VERSION]: (alertRuleUid: string) => `alerting/${alertRuleUid}/edit`,\n },\n },\n },\n Login: {\n url: {\n [MIN_GRAFANA_VERSION]: '/login',\n },\n username: {\n '10.2.3': 'data-testid Username input field',\n [MIN_GRAFANA_VERSION]: 'Username input field',\n },\n password: {\n '10.2.3': 'data-testid Password input field',\n [MIN_GRAFANA_VERSION]: 'Password input field',\n },\n submit: {\n '10.2.3': 'data-testid Login button',\n [MIN_GRAFANA_VERSION]: 'Login button',\n },\n skip: {\n '10.2.3': 'data-testid Skip change password button',\n },\n },\n PasswordlessLogin: {\n url: {\n [MIN_GRAFANA_VERSION]: '/login/passwordless/authenticate',\n },\n email: {\n '10.2.3': 'data-testid Email input field',\n [MIN_GRAFANA_VERSION]: 'Email input field',\n },\n submit: {\n '10.2.3': 'data-testid PasswordlessLogin button',\n [MIN_GRAFANA_VERSION]: 'PasswordlessLogin button',\n },\n },\n Home: {\n url: {\n [MIN_GRAFANA_VERSION]: '/',\n },\n },\n DataSource: {\n name: {\n '10.3.0': 'data-testid Data source settings page name input field',\n [MIN_GRAFANA_VERSION]: 'Data source settings page name input field',\n },\n delete: {\n [MIN_GRAFANA_VERSION]: 'Data source settings page Delete button',\n },\n readOnly: {\n '10.3.0': 'data-testid Data source settings page read only message',\n [MIN_GRAFANA_VERSION]: 'Data source settings page read only message',\n },\n saveAndTest: {\n '10.0.0': 'data-testid Data source settings page Save and Test button',\n [MIN_GRAFANA_VERSION]: 'Data source settings page Save and Test button',\n },\n alert: {\n '10.3.0': 'data-testid Data source settings page Alert',\n [MIN_GRAFANA_VERSION]: 'Data source settings page Alert',\n },\n },\n DataSources: {\n url: {\n [MIN_GRAFANA_VERSION]: '/datasources',\n },\n dataSources: {\n [MIN_GRAFANA_VERSION]: (dataSourceName: string) => `Data source list item ${dataSourceName}`,\n },\n },\n EditDataSource: {\n url: {\n '9.5.0': (dataSourceUid: string) => `/datasources/edit/${dataSourceUid}`,\n },\n settings: {\n '9.5.0': 'Datasource settings page basic settings',\n },\n },\n AddDataSource: {\n url: {\n [MIN_GRAFANA_VERSION]: '/datasources/new',\n },\n dataSourcePluginsV2: {\n '9.3.1': (pluginName: string) => `Add new data source ${pluginName}`,\n [MIN_GRAFANA_VERSION]: (pluginName: string) => `Data source plugin item ${pluginName}`,\n },\n },\n ConfirmModal: {\n delete: {\n '10.0.0': 'data-testid Confirm Modal Danger Button',\n [MIN_GRAFANA_VERSION]: 'Confirm Modal Danger Button',\n },\n input: {\n '12.2.0': 'data-testid Confirm Modal Input',\n },\n },\n SecretsManagement: {\n SecretForm: {\n '12.2.0': 'data-testid Secret Form',\n },\n },\n AddDashboard: {\n url: {\n [MIN_GRAFANA_VERSION]: '/dashboard/new',\n },\n itemButton: {\n '9.5.0': (title: string) => `data-testid ${title}`,\n },\n addNewPanel: {\n '11.1.0': 'data-testid Add new panel',\n '8.0.0': 'Add new panel',\n [MIN_GRAFANA_VERSION]: 'Add new panel',\n },\n itemButtonAddViz: {\n [MIN_GRAFANA_VERSION]: 'Add new visualization menu item',\n },\n addNewRow: {\n '11.1.0': 'data-testid Add new row',\n [MIN_GRAFANA_VERSION]: 'Add new row',\n },\n addNewPanelLibrary: {\n '11.1.0': 'data-testid Add new panel from panel library',\n [MIN_GRAFANA_VERSION]: 'Add new panel from panel library',\n },\n Settings: {\n Annotations: {\n List: {\n url: {\n [MIN_GRAFANA_VERSION]: '/dashboard/new?orgId=1&editview=annotations',\n },\n },\n Edit: {\n url: {\n [MIN_GRAFANA_VERSION]: (annotationIndex: string) =>\n `/dashboard/new?editview=annotations&editIndex=${annotationIndex}`,\n },\n },\n },\n Variables: {\n List: {\n url: {\n '11.3.0': '/dashboard/new?orgId=1&editview=variables',\n [MIN_GRAFANA_VERSION]: '/dashboard/new?orgId=1&editview=templating',\n },\n },\n Edit: {\n url: {\n '11.3.0': (editIndex: string) => `/dashboard/new?orgId=1&editview=variables&editIndex=${editIndex}`,\n [MIN_GRAFANA_VERSION]: (editIndex: string) =>\n `/dashboard/new?orgId=1&editview=templating&editIndex=${editIndex}`,\n },\n },\n },\n },\n },\n ImportDashboard: {\n url: {\n [MIN_GRAFANA_VERSION]: '/dashboard/import',\n },\n },\n Dashboard: {\n url: {\n [MIN_GRAFANA_VERSION]: (uid: string) => `/d/${uid}`,\n },\n DashNav: {\n nav: {\n [MIN_GRAFANA_VERSION]: 'Dashboard navigation',\n },\n navV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Dashboard navigation',\n },\n publicDashboardTag: {\n '9.1.0': 'data-testid public dashboard tag',\n },\n shareButton: {\n '10.4.0': 'data-testid share-button',\n },\n scrollContainer: {\n '11.1.0': 'data-testid Dashboard canvas scroll container',\n },\n newShareButton: {\n container: {\n '11.1.0': 'data-testid new share button',\n },\n shareLink: {\n '11.1.0': 'data-testid new share link-button',\n },\n arrowMenu: {\n '11.1.0': 'data-testid new share button arrow menu',\n },\n menu: {\n container: {\n '11.1.0': 'data-testid new share button menu',\n },\n shareInternally: {\n '11.1.0': 'data-testid new share button share internally',\n },\n shareExternally: {\n '11.1.1': 'data-testid new share button share externally',\n },\n shareSnapshot: {\n '11.2.0': 'data-testid new share button share snapshot',\n },\n },\n },\n NewExportButton: {\n container: {\n '11.2.0': 'data-testid new export button',\n },\n arrowMenu: {\n '11.2.0': 'data-testid new export button arrow menu',\n },\n Menu: {\n container: {\n '11.2.0': 'data-testid new export button menu',\n },\n exportAsJson: {\n '11.2.0': 'data-testid new export button export as json',\n },\n exportAsImage: {\n '12.1.0': 'data-testid new export button export as image',\n },\n },\n },\n playlistControls: {\n prev: {\n '11.0.0': 'data-testid playlist previous dashboard button',\n },\n stop: {\n '11.0.0': 'data-testid playlist stop dashboard button',\n },\n next: {\n '11.0.0': 'data-testid playlist next dashboard button',\n },\n },\n },\n Controls: {\n '11.1.0': 'data-testid dashboard controls',\n },\n SubMenu: {\n submenu: {\n [MIN_GRAFANA_VERSION]: 'Dashboard submenu',\n },\n submenuItem: {\n [MIN_GRAFANA_VERSION]: 'data-testid template variable',\n },\n submenuItemLabels: {\n [MIN_GRAFANA_VERSION]: (item: string) => `data-testid Dashboard template variables submenu Label ${item}`,\n },\n submenuItemValueDropDownValueLinkTexts: {\n [MIN_GRAFANA_VERSION]: (item: string) =>\n `data-testid Dashboard template variables Variable Value DropDown value link text ${item}`,\n },\n submenuItemValueDropDownDropDown: {\n [MIN_GRAFANA_VERSION]: 'Variable options',\n },\n submenuItemValueDropDownOptionTexts: {\n [MIN_GRAFANA_VERSION]: (item: string) =>\n `data-testid Dashboard template variables Variable Value DropDown option text ${item}`,\n },\n Annotations: {\n annotationsWrapper: {\n '10.0.0': 'data-testid annotation-wrapper',\n },\n annotationLabel: {\n '10.0.0': (label: string) => `data-testid Dashboard annotations submenu Label ${label}`,\n },\n annotationToggle: {\n '10.0.0': (label: string) => `data-testid Dashboard annotations submenu Toggle ${label}`,\n },\n },\n },\n Settings: {\n Actions: {\n close: {\n '9.5.0': 'data-testid dashboard-settings-close',\n },\n },\n General: {\n deleteDashBoard: {\n '11.1.0': 'data-testid Dashboard settings page delete dashboard button',\n },\n sectionItems: {\n [MIN_GRAFANA_VERSION]: (item: string) => `Dashboard settings section item ${item}`,\n },\n saveDashBoard: {\n [MIN_GRAFANA_VERSION]: 'Dashboard settings aside actions Save button',\n },\n saveAsDashBoard: {\n [MIN_GRAFANA_VERSION]: 'Dashboard settings aside actions Save As button',\n },\n title: {\n '11.2.0': 'General',\n },\n },\n Annotations: {\n Edit: {\n urlParams: {\n [MIN_GRAFANA_VERSION]: (annotationIndex: string) => `editview=annotations&editIndex=${annotationIndex}`,\n },\n },\n List: {\n url: {\n [MIN_GRAFANA_VERSION]: (dashboardUid: string) => `/d/${dashboardUid}?editview=annotations`,\n },\n addAnnotationCTAV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Call to action button Add annotation query',\n },\n annotations: {\n '10.4.0': 'data-testid list-annotations',\n },\n },\n Settings: {\n name: {\n '11.1.0': 'data-testid Annotations settings name input',\n [MIN_GRAFANA_VERSION]: 'Annotations settings name input',\n },\n },\n NewAnnotation: {\n panelFilterSelect: {\n '10.0.0': 'data-testid annotations-panel-filter',\n },\n showInLabel: {\n '11.1.0': 'data-testid show-in-label',\n },\n previewInDashboard: {\n '10.0.0': 'data-testid annotations-preview',\n },\n delete: {\n '10.4.0': 'data-testid annotations-delete',\n },\n apply: {\n '10.4.0': 'data-testid annotations-apply',\n },\n enable: {\n '10.4.0': 'data-testid annotation-enable',\n },\n hide: {\n '10.4.0': 'data-testid annotation-hide',\n },\n },\n },\n Variables: {\n List: {\n url: {\n '11.3.0': (dashboardUid: string) => `/d/${dashboardUid}?editview=variables`,\n [MIN_GRAFANA_VERSION]: (dashboardUid: string) => `/d/${dashboardUid}?editview=templating`,\n },\n addVariableCTAV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Call to action button Add variable',\n },\n newButton: {\n [MIN_GRAFANA_VERSION]: 'Variable editor New variable button',\n },\n table: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Table',\n },\n tableRowNameFields: {\n [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table Name field ${variableName}`,\n },\n tableRowDefinitionFields: {\n '10.1.0': (variableName: string) => `Variable editor Table Definition field ${variableName}`,\n },\n tableRowArrowUpButtons: {\n [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table ArrowUp button ${variableName}`,\n },\n tableRowArrowDownButtons: {\n [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table ArrowDown button ${variableName}`,\n },\n tableRowDuplicateButtons: {\n [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table Duplicate button ${variableName}`,\n },\n tableRowRemoveButtons: {\n [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table Remove button ${variableName}`,\n },\n },\n Edit: {\n urlParams: {\n '11.3.0': (editIndex: string) => `editview=variables&editIndex=${editIndex}`,\n [MIN_GRAFANA_VERSION]: (editIndex: string) => `editview=templating&editIndex=${editIndex}`,\n },\n General: {\n headerLink: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Header link',\n },\n modeLabelNew: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Header mode New',\n },\n /**\n * @deprecated\n */\n modeLabelEdit: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Header mode Edit',\n },\n generalNameInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Name field',\n },\n generalNameInputV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Name field',\n },\n generalTypeSelect: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Type select',\n },\n generalTypeSelectV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Type select',\n },\n generalLabelInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Label field',\n },\n generalLabelInputV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Label field',\n },\n generalHideSelect: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Hide select',\n },\n generalHideSelectV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Hide select',\n },\n selectionOptionsAllowCustomValueSwitch: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Allow Custom Value switch',\n },\n selectionOptionsMultiSwitch: {\n '10.4.0': 'data-testid Variable editor Form Multi switch',\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Multi switch',\n },\n selectionOptionsIncludeAllSwitch: {\n '10.4.0': 'data-testid Variable editor Form IncludeAll switch',\n [MIN_GRAFANA_VERSION]: 'Variable editor Form IncludeAll switch',\n },\n selectionOptionsCustomAllInput: {\n '10.4.0': 'data-testid Variable editor Form IncludeAll field',\n [MIN_GRAFANA_VERSION]: 'Variable editor Form IncludeAll field',\n },\n previewOfValuesOption: {\n '10.4.0': 'data-testid Variable editor Preview of Values option',\n [MIN_GRAFANA_VERSION]: 'Variable editor Preview of Values option',\n },\n submitButton: {\n '10.4.0': 'data-testid Variable editor Run Query button',\n [MIN_GRAFANA_VERSION]: 'Variable editor Submit button',\n },\n applyButton: {\n '9.3.0': 'data-testid Variable editor Apply button',\n },\n },\n QueryVariable: {\n closeButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Query Variable editor close button',\n },\n editor: {\n [MIN_GRAFANA_VERSION]: 'data-testid Query Variable editor',\n },\n previewButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Query Variable editor preview button',\n },\n queryOptionsDataSourceSelect: {\n '10.4.0': 'data-testid Select a data source',\n '10.0.0': 'data-testid Data source picker select container',\n [MIN_GRAFANA_VERSION]: 'Data source picker select container',\n },\n queryOptionsOpenButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Query Variable editor open button',\n },\n queryOptionsRefreshSelect: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query Refresh select',\n },\n queryOptionsRefreshSelectV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Query Refresh select',\n },\n queryOptionsRegExInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query RegEx field',\n },\n queryOptionsRegExInputV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Query RegEx field',\n },\n queryOptionsSortSelect: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query Sort select',\n },\n queryOptionsSortSelectV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Query Sort select',\n },\n queryOptionsQueryInput: {\n '10.4.0': 'data-testid Variable editor Form Default Variable Query Editor textarea',\n },\n queryOptionsStaticOptionsToggle: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query Static Options toggle',\n },\n queryOptionsStaticOptionsOrderDropdown: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query Static Options Order dropdown',\n },\n valueGroupsTagsEnabledSwitch: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query UseTags switch',\n },\n valueGroupsTagsTagsQueryInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query TagsQuery field',\n },\n valueGroupsTagsTagsValuesQueryInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query TagsValuesQuery field',\n },\n },\n ConstantVariable: {\n constantOptionsQueryInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Constant Query field',\n },\n constantOptionsQueryInputV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Constant Query field',\n },\n },\n DatasourceVariable: {\n datasourceSelect: {\n [MIN_GRAFANA_VERSION]: 'data-testid datasource variable datasource type',\n },\n nameFilter: {\n [MIN_GRAFANA_VERSION]: 'data-testid datasource variable datasource name filter',\n },\n },\n TextBoxVariable: {\n textBoxOptionsQueryInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form TextBox Query field',\n },\n textBoxOptionsQueryInputV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form TextBox Query field',\n },\n },\n CustomVariable: {\n customValueInput: {\n [MIN_GRAFANA_VERSION]: 'data-testid custom-variable-input',\n },\n optionsOpenButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid custom-variable-options-open-button',\n },\n closeButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid custom-variable-close-button',\n },\n },\n IntervalVariable: {\n intervalsValueInput: {\n [MIN_GRAFANA_VERSION]: 'data-testid interval variable intervals input',\n },\n autoEnabledCheckbox: {\n '10.4.0': 'data-testid interval variable auto value checkbox',\n },\n stepCountIntervalSelect: {\n '10.4.0': 'data-testid interval variable step count input',\n },\n minIntervalInput: {\n '10.4.0': 'data-testid interval variable mininum interval input',\n },\n },\n GroupByVariable: {\n dataSourceSelect: {\n '10.4.0': 'data-testid Select a data source',\n },\n infoText: {\n '10.4.0': 'data-testid group by variable info text',\n },\n modeToggle: {\n '10.4.0': 'data-testid group by variable mode toggle',\n },\n },\n AdHocFiltersVariable: {\n datasourceSelect: {\n '10.4.0': 'data-testid Select a data source',\n },\n infoText: {\n '10.4.0': 'data-testid ad-hoc filters variable info text',\n },\n modeToggle: {\n '11.0.0': 'data-testid ad-hoc filters variable mode toggle',\n },\n },\n SwitchVariable: {\n valuePairTypeSelect: {\n ['12.3.0']: 'data-testid switch variable value pair type select',\n },\n enabledValueInput: {\n ['12.3.0']: 'data-testid switch variable enabled value input',\n },\n disabledValueInput: {\n ['12.3.0']: 'data-testid switch variable disabled value input',\n },\n },\n StaticOptionsEditor: {\n addButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Add button',\n },\n labelInput: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Label input',\n },\n valueInput: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Value input',\n },\n moveButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Move button',\n },\n deleteButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Delete button',\n },\n row: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Row',\n },\n },\n },\n },\n },\n Annotations: {\n marker: {\n '10.0.0': 'data-testid annotation-marker',\n },\n },\n Rows: {\n Repeated: {\n ConfigSection: {\n warningMessage: {\n '10.2.0': 'data-testid Repeated rows warning message',\n },\n },\n },\n },\n },\n Dashboards: {\n url: {\n [MIN_GRAFANA_VERSION]: '/dashboards',\n },\n dashboards: {\n '10.2.0': (title: string) => `Dashboard search item ${title}`,\n },\n toggleView: {\n [MIN_GRAFANA_VERSION]: 'data-testid radio-button',\n },\n },\n SaveDashboardAsModal: {\n newName: {\n '10.2.0': 'Save dashboard title field',\n },\n save: {\n '10.2.0': 'Save dashboard button',\n },\n },\n SaveDashboardModal: {\n save: {\n '10.2.0': 'Dashboard settings Save Dashboard Modal Save button',\n },\n saveVariables: {\n '10.2.0': 'Dashboard settings Save Dashboard Modal Save variables checkbox',\n },\n saveTimerange: {\n '10.2.0': 'Dashboard settings Save Dashboard Modal Save timerange checkbox',\n },\n saveRefresh: {\n '11.1.0': 'Dashboard settings Save Dashboard Modal Save refresh checkbox',\n },\n variablesWarningAlert: {\n '12.2.0': 'Dashboard settings Save Dashboard Modal Save variables Variables With Errors Warning Alert',\n },\n },\n SharePanelModal: {\n linkToRenderedImage: {\n [MIN_GRAFANA_VERSION]: 'Link to rendered image',\n },\n },\n ShareDashboardModal: {\n PublicDashboard: {\n WillBePublicCheckbox: {\n '9.1.0': 'data-testid public dashboard will be public checkbox',\n },\n LimitedDSCheckbox: {\n '9.1.0': 'data-testid public dashboard limited datasources checkbox',\n },\n CostIncreaseCheckbox: {\n '9.1.0': 'data-testid public dashboard cost may increase checkbox',\n },\n PauseSwitch: {\n '9.5.0': 'data-testid public dashboard pause switch',\n },\n EnableAnnotationsSwitch: {\n '9.3.0': 'data-testid public dashboard on off switch for annotations',\n },\n CreateButton: {\n '9.5.0': 'data-testid public dashboard create button',\n },\n DeleteButton: {\n '9.3.0': 'data-testid public dashboard delete button',\n },\n CopyUrlInput: {\n '9.1.0': 'data-testid public dashboard copy url input',\n },\n CopyUrlButton: {\n '9.1.0': 'data-testid public dashboard copy url button',\n },\n SettingsDropdown: {\n '10.1.0': 'data-testid public dashboard settings dropdown',\n },\n TemplateVariablesWarningAlert: {\n '9.1.0': 'data-testid public dashboard disabled template variables alert',\n },\n UnsupportedDataSourcesWarningAlert: {\n '9.5.0': 'data-testid public dashboard unsupported data sources alert',\n },\n NoUpsertPermissionsWarningAlert: {\n '9.5.0': 'data-testid public dashboard no upsert permissions alert',\n },\n EnableTimeRangeSwitch: {\n '9.4.0': 'data-testid public dashboard on off switch for time range',\n },\n EmailSharingConfiguration: {\n Container: {\n '9.5.0': 'data-testid email sharing config container',\n },\n ShareType: {\n '9.5.0': 'data-testid public dashboard share type',\n },\n EmailSharingInput: {\n '9.5.0': 'data-testid public dashboard email sharing input',\n },\n EmailSharingInviteButton: {\n '9.5.0': 'data-testid public dashboard email sharing invite button',\n },\n EmailSharingList: {\n '9.5.0': 'data-testid public dashboard email sharing list',\n },\n DeleteEmail: {\n '9.5.0': 'data-testid public dashboard delete email button',\n },\n ReshareLink: {\n '9.5.0': 'data-testid public dashboard reshare link button',\n },\n },\n },\n SnapshotScene: {\n url: {\n '11.1.0': (key: string) => `/dashboard/snapshot/${key}`,\n },\n PublishSnapshot: {\n '11.1.0': 'data-testid publish snapshot button',\n },\n CopyUrlButton: {\n '11.1.0': 'data-testid snapshot copy url button',\n },\n CopyUrlInput: {\n '11.1.0': 'data-testid snapshot copy url input',\n },\n },\n },\n ShareDashboardDrawer: {\n ShareInternally: {\n container: {\n '11.3.0': 'data-testid share internally drawer container',\n },\n lockTimeRangeSwitch: {\n '11.3.0': 'data-testid share internally lock time range switch',\n },\n shortenUrlSwitch: {\n '11.3.0': 'data-testid share internally shorten url switch',\n },\n copyUrlButton: {\n '11.3.0': 'data-testid share internally copy url button',\n },\n SharePanel: {\n preview: {\n '11.5.0': 'data-testid share panel internally image generation preview',\n },\n widthInput: {\n '11.5.0': 'data-testid share panel internally width input',\n },\n heightInput: {\n '11.5.0': 'data-testid share panel internally height input',\n },\n scaleFactorInput: {\n '11.5.0': 'data-testid share panel internally scale factor input',\n },\n generateImageButton: {\n '11.5.0': 'data-testid share panel internally generate image button',\n },\n downloadImageButton: {\n '11.5.0': 'data-testid share panel internally download image button',\n },\n },\n },\n ShareExternally: {\n container: {\n '11.3.0': 'data-testid share externally drawer container',\n },\n publicAlert: {\n '11.3.0': 'data-testid public share alert',\n },\n emailSharingAlert: {\n '11.3.0': 'data-testid email share alert',\n },\n shareTypeSelect: {\n '11.3.0': 'data-testid share externally share type select',\n },\n Creation: {\n PublicShare: {\n createButton: {\n '11.3.0': 'data-testid public share dashboard create button',\n },\n cancelButton: {\n '11.3.0': 'data-testid public share dashboard cancel button',\n },\n },\n EmailShare: {\n createButton: {\n '11.3.0': 'data-testid email share dashboard create button',\n },\n cancelButton: {\n '11.3.0': 'data-testid email share dashboard cancel button',\n },\n },\n willBePublicCheckbox: {\n '11.3.0': 'data-testid share dashboard will be public checkbox',\n },\n },\n Configuration: {\n enableTimeRangeSwitch: {\n '11.3.0': 'data-testid share externally enable time range switch',\n },\n enableAnnotationsSwitch: {\n '11.3.0': 'data-testid share externally enable annotations switch',\n },\n copyUrlButton: {\n '11.3.0': 'data-testid share externally copy url button',\n },\n revokeAccessButton: {\n '11.3.0': 'data-testid share externally revoke access button',\n },\n toggleAccessButton: {\n '11.3.0': 'data-testid share externally pause or resume access button',\n },\n },\n },\n ShareSnapshot: {\n url: {\n '11.3.0': (key: string) => `/dashboard/snapshot/${key}`,\n },\n container: {\n '11.3.0': 'data-testid share snapshot drawer container',\n },\n publishSnapshot: {\n '11.3.0': 'data-testid share snapshot publish button',\n },\n copyUrlButton: {\n '11.3.0': 'data-testid share snapshot copy url button',\n },\n },\n },\n ExportDashboardDrawer: {\n ExportAsJson: {\n container: {\n '11.3.0': 'data-testid export as json drawer container',\n },\n codeEditor: {\n '11.3.0': 'data-testid export as json code editor',\n },\n exportExternallyToggle: {\n '11.3.0': 'data-testid export as json externally switch',\n },\n saveToFileButton: {\n '11.3.0': 'data-testid export as json save to file button',\n },\n copyToClipboardButton: {\n '11.3.0': 'data-testid export as json copy to clipboard button',\n },\n cancelButton: {\n '11.3.0': 'data-testid export as json cancel button',\n },\n },\n },\n PublicDashboard: {\n page: {\n '9.5.0': 'public-dashboard-page',\n },\n NotAvailable: {\n container: {\n '9.5.0': 'public-dashboard-not-available',\n },\n title: {\n '9.5.0': 'public-dashboard-title',\n },\n pausedDescription: {\n '9.5.0': 'public-dashboard-paused-description',\n },\n },\n footer: {\n '11.0.0': 'public-dashboard-footer',\n },\n },\n PublicDashboardScene: {\n loadingPage: {\n '11.0.0': 'public-dashboard-scene-loading-page',\n },\n page: {\n '11.0.0': 'public-dashboard-scene-page',\n },\n controls: {\n '11.0.0': 'public-dashboard-controls',\n },\n },\n RequestViewAccess: {\n form: {\n '9.5.0': 'request-view-access-form',\n },\n recipientInput: {\n '9.5.0': 'request-view-access-recipient-input',\n },\n submitButton: {\n '9.5.0': 'request-view-access-submit-button',\n },\n },\n PublicDashboardConfirmAccess: {\n submitButton: {\n '10.2.0': 'data-testid confirm-access-submit-button',\n },\n },\n Explore: {\n url: {\n [MIN_GRAFANA_VERSION]: '/explore',\n },\n General: {\n container: {\n [MIN_GRAFANA_VERSION]: 'data-testid Explore',\n },\n graph: {\n [MIN_GRAFANA_VERSION]: 'Explore Graph',\n },\n table: {\n [MIN_GRAFANA_VERSION]: 'Explore Table',\n },\n scrollView: {\n '9.0.0': 'data-testid explorer scroll view',\n },\n addFromQueryLibrary: {\n '11.5.0': 'data-testid explore add from query library button',\n },\n },\n QueryHistory: {\n container: {\n '11.1.0': 'data-testid QueryHistory',\n },\n },\n },\n SoloPanel: {\n url: {\n [MIN_GRAFANA_VERSION]: (page: string) => `/d-solo/${page}`,\n },\n },\n PluginsList: {\n page: {\n [MIN_GRAFANA_VERSION]: 'Plugins list page',\n },\n list: {\n [MIN_GRAFANA_VERSION]: 'Plugins list',\n },\n listItem: {\n [MIN_GRAFANA_VERSION]: 'Plugins list item',\n },\n signatureErrorNotice: {\n '10.3.0': 'data-testid Unsigned plugins notice',\n [MIN_GRAFANA_VERSION]: 'Unsigned plugins notice',\n },\n },\n PluginPage: {\n page: {\n [MIN_GRAFANA_VERSION]: 'Plugin page',\n },\n signatureInfo: {\n '10.3.0': 'data-testid Plugin signature info',\n [MIN_GRAFANA_VERSION]: 'Plugin signature info',\n },\n disabledInfo: {\n '10.3.0': 'data-testid Plugin disabled info',\n [MIN_GRAFANA_VERSION]: 'Plugin disabled info',\n },\n },\n PlaylistForm: {\n name: {\n [MIN_GRAFANA_VERSION]: 'Playlist name',\n },\n interval: {\n [MIN_GRAFANA_VERSION]: 'Playlist interval',\n },\n itemDelete: {\n '10.2.0': 'data-testid playlist-form-delete-item',\n },\n },\n BrowseDashboards: {\n table: {\n body: {\n '10.2.0': 'data-testid browse-dashboards-table',\n },\n row: {\n '10.2.0': (name: string) => `data-testid browse dashboards row ${name}`,\n },\n checkbox: {\n '10.0.0': (uid: string) => `data-testid ${uid} checkbox`,\n },\n },\n NewFolderForm: {\n form: {\n '10.2.0': 'data-testid new folder form',\n },\n nameInput: {\n '10.2.0': 'data-testid new-folder-name-input',\n },\n createButton: {\n '10.2.0': 'data-testid new-folder-create-button',\n },\n },\n },\n SearchDashboards: {\n table: {\n '10.2.0': 'Search results table',\n },\n },\n Search: {\n url: {\n '9.3.0': '/?search=openn',\n },\n FolderView: {\n url: {\n '9.3.0': '/?search=open&layout=folders',\n },\n },\n },\n PublicDashboards: {\n ListItem: {\n linkButton: {\n '9.3.0': 'public-dashboard-link-button',\n },\n configButton: {\n '9.3.0': 'public-dashboard-configuration-button',\n },\n trashcanButton: {\n '9.3.0': 'public-dashboard-remove-button',\n },\n pauseSwitch: {\n '10.1.0': 'data-testid public dashboard pause switch',\n },\n },\n },\n UserListPage: {\n tabs: {\n allUsers: {\n '10.0.0': 'data-testid all-users-tab',\n },\n orgUsers: {\n '10.0.0': 'data-testid org-users-tab',\n },\n anonUserDevices: {\n '10.2.3': 'data-testid anon-user-devices-tab',\n },\n publicDashboardsUsers: {\n '10.0.0': 'data-testid public-dashboards-users-tab',\n },\n users: {\n '10.0.0': 'data-testid users-tab',\n },\n },\n org: {\n url: {\n '10.2.0': '/admin/users',\n '9.5.0': '/org/users',\n },\n },\n admin: {\n url: {\n '9.5.0': '/admin/users',\n },\n },\n publicDashboards: {\n container: {\n '11.1.0': 'data-testid public-dashboards-users-list',\n },\n },\n UserListAdminPage: {\n container: {\n '10.0.0': 'data-testid user-list-admin-page',\n },\n },\n UsersListPage: {\n container: {\n '10.0.0': 'data-testid users-list-page',\n },\n },\n UserAnonListPage: {\n container: {\n '10.4.0': 'data-testid user-anon-list-page',\n },\n },\n UsersListPublicDashboardsPage: {\n container: {\n '10.0.0': 'data-testid users-list-public-dashboards-page',\n },\n DashboardsListModal: {\n listItem: {\n '10.0.0': (uid: string) => `data-testid dashboards-list-item-${uid}`,\n },\n },\n },\n },\n ProfilePage: {\n url: {\n '10.2.0': '/profile',\n },\n },\n Plugin: {\n url: {\n [MIN_GRAFANA_VERSION]: (pluginId: string) => `/plugins/${pluginId}`,\n },\n },\n MigrateToCloud: {\n url: {\n '11.2.0': '/admin/migrate-to-cloud',\n },\n },\n} satisfies VersionedSelectorGroup;\n\nexport type VersionedPages = typeof versionedPages;\n","import { css } from '@emotion/css';\nimport { useRef, useEffect } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\nimport { Button, Icon, Modal, useStyles2 } from '@grafana/ui';\n\ntype ConfirmModalProps = {\n isOpen: boolean;\n onCancel?: () => void;\n onDiscard?: () => void;\n onCopy?: () => void;\n};\nexport function ConfirmModal({ isOpen, onCancel, onDiscard, onCopy }: ConfirmModalProps) {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const styles = useStyles2(getStyles);\n\n // Moved from grafana/ui\n useEffect(() => {\n // for some reason autoFocus property did no work on this button, but this does\n if (isOpen) {\n buttonRef.current?.focus();\n }\n }, [isOpen]);\n\n return (\n <Modal\n title={\n <div className={styles.modalHeaderTitle}>\n <Icon name=\"exclamation-triangle\" size=\"lg\" />\n <span className={styles.titleText}>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.warning\">Warning</Trans>\n </span>\n </div>\n }\n ariaLabel={t('grafana-sql.components.confirm-modal.warning', 'Warning')}\n onDismiss={onCancel}\n isOpen={isOpen}\n >\n <p>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.builder-mode\">\n Builder mode does not display changes made in code. The query builder will display the last changes you made\n in builder mode.\n </Trans>\n </p>\n <p>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.clipboard\">\n Do you want to copy your code to the clipboard?\n </Trans>\n </p>\n <Modal.ButtonRow>\n <Button type=\"button\" variant=\"secondary\" onClick={onCancel} fill=\"outline\">\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.cancel\">Cancel</Trans>\n </Button>\n <Button variant=\"destructive\" type=\"button\" onClick={onDiscard} ref={buttonRef}>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.discard-code-and-switch\">Discard code and switch</Trans>\n </Button>\n <Button variant=\"primary\" onClick={onCopy}>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.copy-code-and-switch\">Copy code and switch</Trans>\n </Button>\n </Modal.ButtonRow>\n </Modal>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n titleText: css({\n paddingLeft: theme.spacing(2),\n }),\n modalHeaderTitle: css({\n fontSize: theme.typography.size.lg,\n float: 'left',\n paddingTop: theme.spacing(1),\n margin: theme.spacing(0, 2),\n }),\n});\n","import { useAsync } from 'react-use';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Select } from '@grafana/ui';\n\nimport { DB, ResourceSelectorProps, SQLDialect, toOption } from '../types';\n\nexport interface DatasetSelectorProps extends ResourceSelectorProps {\n db: DB;\n dataset: string | undefined;\n preconfiguredDataset: string;\n dialect: SQLDialect;\n onChange: (v: SelectableValue) => void;\n inputId?: string | undefined;\n}\n\nexport const DatasetSelector = ({\n dataset,\n db,\n dialect,\n onChange,\n inputId,\n preconfiguredDataset,\n}: DatasetSelectorProps) => {\n /*\n The behavior of this component - for MSSQL and MySQL datasources - is based on whether the user chose to create a datasource\n with or without a default database (preconfiguredDataset). If the user configured a default database, this selector\n should only allow that single preconfigured database option to be selected. If the user chose to NOT assign/configure a default database,\n then the user should be able to use this component to choose between multiple databases available to the datasource.\n */\n // `hasPreconfigCondition` is true if either 1) the sql datasource has a preconfigured default database,\n // OR if 2) the datasource is Postgres. In either case the only option available to the user is the preconfigured database.\n const hasPreconfigCondition = !!preconfiguredDataset || dialect === 'postgres';\n\n const state = useAsync(async () => {\n // If a default database is already configured for a MSSQL or MySQL data source, OR the data source is Postgres, no need to fetch other databases.\n if (hasPreconfigCondition) {\n // Set the current database to the preconfigured database.\n onChange(toOption(preconfiguredDataset));\n return [toOption(preconfiguredDataset)];\n }\n\n // If there is no preconfigured database, but there is a selected dataset, set the current database to the selected dataset.\n if (dataset) {\n onChange(toOption(dataset));\n }\n\n // Otherwise, fetch all databases available to the datasource.\n const datasets = await db.datasets();\n return datasets.map(toOption);\n }, []);\n\n return (\n <Select\n aria-label={t('grafana-sql.components.dataset-selector.aria-label-dataset-selector', 'Dataset selector')}\n inputId={inputId}\n value={dataset}\n options={state.value}\n onChange={onChange}\n disabled={state.loading}\n isLoading={state.loading}\n menuShouldPortal={true}\n />\n );\n};\n","import { useAsync } from 'react-use';\n\nimport { SelectableValue, toOption } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { Select } from '@grafana/ui';\n\nimport { DB, ResourceSelectorProps } from '../types';\n\nexport interface TableSelectorProps extends ResourceSelectorProps {\n db: DB;\n table: string | undefined;\n dataset: string | undefined;\n onChange: (v: SelectableValue) => void;\n inputId?: string | undefined;\n}\n\nexport const TableSelector = ({ db, dataset, table, className, onChange, inputId }: TableSelectorProps) => {\n const state = useAsync(async () => {\n // No need to attempt to fetch tables for an unknown dataset.\n if (!dataset) {\n return [];\n }\n\n const tables = await db.tables(dataset);\n return tables.map(toOption);\n }, [dataset]);\n\n return (\n <Select\n className={className}\n disabled={state.loading}\n aria-label={t('grafana-sql.components.table-selector.aria-label-table-selector', 'Table selector')}\n inputId={inputId}\n data-testid={selectors.components.SQLQueryEditor.headerTableSelector}\n value={table}\n options={state.value}\n onChange={onChange}\n isLoading={state.loading}\n menuShouldPortal={true}\n placeholder={\n state.loading\n ? t('grafana-sql.components.table-selector.placeholder-loading', 'Loading tables')\n : t('grafana-sql.components.table-selector.placeholder-select-table', 'Select table')\n }\n allowCustomValue={true}\n />\n );\n};\n","import { useCallback, useId, useState } from 'react';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\nimport { EditorField, EditorHeader, EditorMode, EditorRow, FlexItem, InlineSelect } from '@grafana/plugin-ui';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Button, InlineSwitch, RadioButtonGroup, Tooltip, Space } from '@grafana/ui';\n\nimport { QueryWithDefaults } from '../defaults';\nimport { SQLQuery, QueryFormat, QueryRowFilter, QUERY_FORMAT_OPTIONS, DB, SQLDialect } from '../types';\n\nimport { ConfirmModal } from './ConfirmModal';\nimport { DatasetSelector } from './DatasetSelector';\nimport { TableSelector } from './TableSelector';\n\nexport interface QueryHeaderProps {\n db: DB;\n dialect: SQLDialect;\n isQueryRunnable: boolean;\n onChange: (query: SQLQuery) => void;\n onQueryRowChange: (queryRowFilter: QueryRowFilter) => void;\n onRunQuery: () => void;\n preconfiguredDataset: string;\n query: QueryWithDefaults;\n queryRowFilter: QueryRowFilter;\n}\n\nexport function QueryHeader({\n db,\n dialect,\n isQueryRunnable,\n onChange,\n onQueryRowChange,\n onRunQuery,\n preconfiguredDataset,\n query,\n queryRowFilter,\n}: QueryHeaderProps) {\n const { editorMode } = query;\n const [_, copyToClipboard] = useCopyToClipboard();\n const [showConfirm, setShowConfirm] = useState(false);\n const toRawSql = db.toRawSql;\n\n const htmlId = useId();\n\n const editorModes = [\n {\n label: t('grafana-sql.components.query-header.editor-modes.label-builder', 'Builder'),\n value: EditorMode.Builder,\n },\n { label: t('grafana-sql.components.query-header.editor-modes.label-code', 'Code'), value: EditorMode.Code },\n ];\n\n const onEditorModeChange = useCallback(\n (newEditorMode: EditorMode) => {\n if (newEditorMode === EditorMode.Code) {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Code,\n });\n }\n\n if (editorMode === EditorMode.Code) {\n setShowConfirm(true);\n return;\n }\n onChange({ ...query, editorMode: newEditorMode });\n },\n [editorMode, onChange, query]\n );\n\n const onFormatChange = (e: SelectableValue) => {\n const next = { ...query, format: e.value !== undefined ? e.value : QueryFormat.Table };\n\n reportInteraction('grafana_sql_format_changed', {\n datasource: query.datasource?.type,\n selectedFormat: next.format,\n });\n onChange(next);\n };\n\n const onDatasetChange = (e: SelectableValue) => {\n if (e.value === query.dataset) {\n return;\n }\n\n const next = {\n ...query,\n dataset: e.value,\n table: undefined,\n sql: undefined,\n rawSql: '',\n };\n\n onChange(next);\n };\n\n const onTableChange = (e: SelectableValue) => {\n if (e.value === query.table) {\n return;\n }\n\n const next: SQLQuery = {\n ...query,\n table: e.value,\n sql: undefined,\n rawSql: '',\n };\n\n onChange(next);\n };\n\n const datasetDropdownIsAvailable = () => {\n if (dialect === 'influx') {\n return false;\n }\n\n return true;\n };\n\n return (\n <>\n <EditorHeader>\n <InlineSelect\n label={t('grafana-sql.components.query-header.label-format', 'Format')}\n value={query.format}\n placeholder={t('grafana-sql.components.query-header.placeholder-select-format', 'Select format')}\n menuShouldPortal\n onChange={onFormatChange}\n options={QUERY_FORMAT_OPTIONS}\n />\n\n {editorMode === EditorMode.Builder && (\n <>\n <InlineSwitch\n id={`sql-filter-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-filter', 'Filter')}\n data-testid={selectors.components.SQLQueryEditor.headerFilterSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.filter}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_filter_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, filter: ev.target.checked });\n }}\n />\n\n <InlineSwitch\n id={`sql-group-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-group', 'Group')}\n data-testid={selectors.components.SQLQueryEditor.headerGroupSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.group}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_group_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, group: ev.target.checked });\n }}\n />\n\n <InlineSwitch\n id={`sql-order-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-order', 'Order')}\n data-testid={selectors.components.SQLQueryEditor.headerOrderSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.order}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_order_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, order: ev.target.checked });\n }}\n />\n\n <InlineSwitch\n id={`sql-preview-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-preview', 'Preview')}\n data-testid={selectors.components.SQLQueryEditor.headerPreviewSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.preview}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_preview_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, preview: ev.target.checked });\n }}\n />\n </>\n )}\n\n <FlexItem grow={1} />\n\n {isQueryRunnable ? (\n <Button icon=\"play\" variant=\"primary\" size=\"sm\" onClick={() => onRunQuery()}>\n <Trans i18nKey=\"grafana-sql.components.query-header.run-query\">Run query</Trans>\n </Button>\n ) : (\n <Tooltip\n theme=\"error\"\n content={\n <Trans i18nKey=\"grafana-sql.components.query-header.content-invalid-query\">\n Your query is invalid. Check below for details. <br />\n However, you can still run this query.\n </Trans>\n }\n placement=\"top\"\n >\n <Button icon=\"exclamation-triangle\" variant=\"secondary\" size=\"sm\" onClick={() => onRunQuery()}>\n <Trans i18nKey=\"grafana-sql.components.query-header.run-query\">Run query</Trans>\n </Button>\n </Tooltip>\n )}\n\n <RadioButtonGroup options={editorModes} size=\"sm\" value={editorMode} onChange={onEditorModeChange} />\n\n <ConfirmModal\n isOpen={showConfirm}\n onCopy={() => {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Builder,\n type: 'copy',\n });\n\n setShowConfirm(false);\n copyToClipboard(query.rawSql!);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onDiscard={() => {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Builder,\n type: 'discard',\n });\n\n setShowConfirm(false);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onCancel={() => {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Builder,\n type: 'cancel',\n });\n\n setShowConfirm(false);\n }}\n />\n </EditorHeader>\n\n {editorMode === EditorMode.Builder && (\n <>\n <Space v={0.5} />\n <EditorRow>\n {datasetDropdownIsAvailable() && (\n <EditorField label={t('grafana-sql.components.query-header.label-dataset', 'Dataset')} width={25}>\n <DatasetSelector\n db={db}\n inputId={`sql-dataset-${htmlId}`}\n dataset={query.dataset}\n dialect={dialect}\n preconfiguredDataset={preconfiguredDataset}\n onChange={onDatasetChange}\n />\n </EditorField>\n )}\n <EditorField label={t('grafana-sql.components.query-header.label-table', 'Table')} width={25}>\n <TableSelector\n db={db}\n inputId={`sql-tableselect-${htmlId}`}\n dataset={query.dataset || preconfiguredDataset}\n table={query.table}\n onChange={onTableChange}\n />\n </EditorField>\n </EditorRow>\n </>\n )}\n </>\n );\n}\n","import { useCallback, useEffect, useRef } from 'react';\nimport * as React from 'react';\n\nimport { LanguageDefinition, SQLEditor } from '@grafana/plugin-ui';\n\nimport { SQLQuery } from '../../types';\n\ntype Props = {\n query: SQLQuery;\n onChange: (value: SQLQuery, processQuery: boolean) => void;\n children?: (props: { formatQuery: () => void }) => React.ReactNode;\n width?: number;\n height?: number;\n editorLanguageDefinition: LanguageDefinition;\n};\n\nexport function QueryEditorRaw({ children, onChange, query, width, height, editorLanguageDefinition }: Props) {\n // We need to pass query via ref to SQLEditor as onChange is executed via monacoEditor.onDidChangeModelContent callback, not onChange property\n const queryRef = useRef<SQLQuery>(query);\n useEffect(() => {\n queryRef.current = query;\n }, [query]);\n\n const onRawQueryChange = useCallback(\n (rawSql: string, processQuery: boolean) => {\n const newQuery = {\n ...queryRef.current,\n rawQuery: true,\n rawSql,\n };\n onChange(newQuery, processQuery);\n },\n [onChange]\n );\n\n return (\n <SQLEditor\n width={width}\n height={height}\n query={query.rawSql!}\n onChange={onRawQueryChange}\n language={editorLanguageDefinition}\n >\n {children}\n </SQLEditor>\n );\n}\n","import { css } from '@emotion/css';\nimport { useState, useMemo, useEffect } from 'react';\nimport { useAsyncFn, useDebounce } from 'react-use';\n\nimport { formattedValueToString, getValueFormat, TimeRange } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { Icon, Spinner, useTheme2 } from '@grafana/ui';\n\nimport { DB, SQLQuery, ValidationResults } from '../../types';\n\nexport interface QueryValidatorProps {\n db: DB;\n query: SQLQuery;\n range?: TimeRange;\n onValidate: (isValid: boolean) => void;\n}\n\nexport function QueryValidator({ db, query, onValidate, range }: QueryValidatorProps) {\n const [validationResult, setValidationResult] = useState<ValidationResults | null>();\n const theme = useTheme2();\n const valueFormatter = useMemo(() => getValueFormat('bytes'), []);\n\n const styles = useMemo(() => {\n return {\n error: css({\n color: theme.colors.error.text,\n fontSize: theme.typography.bodySmall.fontSize,\n fontFamily: theme.typography.fontFamilyMonospace,\n }),\n valid: css({\n color: theme.colors.success.text,\n }),\n info: css({\n color: theme.colors.text.secondary,\n }),\n };\n }, [theme]);\n\n const [state, validateQuery] = useAsyncFn(\n async (q: SQLQuery) => {\n if (q.rawSql?.trim() === '') {\n return null;\n }\n\n return await db.validateQuery(q, range);\n },\n [db]\n );\n\n const [,] = useDebounce(\n async () => {\n const result = await validateQuery(query);\n if (result) {\n setValidationResult(result);\n }\n\n return null;\n },\n 1000,\n [query, validateQuery]\n );\n\n useEffect(() => {\n if (validationResult?.isError) {\n onValidate(false);\n }\n if (validationResult?.isValid) {\n onValidate(true);\n }\n }, [validationResult, onValidate]);\n\n if (!state.value && !state.loading) {\n return null;\n }\n\n const error = state.value?.error ? processErrorMessage(state.value.error) : '';\n\n return (\n <>\n {state.loading && (\n <div className={styles.info}>\n <Spinner inline={true} size=\"xs\" />{' '}\n <Trans i18nKey=\"grafana-sql.components.query-validator.validating-query\">Validating query...</Trans>\n </div>\n )}\n {!state.loading && state.value && (\n <>\n <>\n {state.value.isValid && state.value.statistics && (\n <div className={styles.valid}>\n <Trans\n i18nKey=\"grafana-sql.components.query-validator.query-will-process\"\n values={{ bytes: formattedValueToString(valueFormatter(state.value.statistics.TotalBytesProcessed)) }}\n >\n <Icon name=\"check\" /> This query will process <strong>{'{{bytes}}'}</strong> when run.\n </Trans>\n </div>\n )}\n </>\n\n <>{state.value.isError && <div className={styles.error}>{error}</div>}</>\n </>\n )}\n </>\n );\n}\n\nfunction processErrorMessage(error: string) {\n const splat = error.split(':');\n if (splat.length > 2) {\n return splat.slice(2).join(':');\n }\n return error;\n}\n","import { css } from '@emotion/css';\nimport { useMemo, useState } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Stack, Icon, IconButton, Tooltip, useTheme2 } from '@grafana/ui';\n\nimport { QueryValidator, QueryValidatorProps } from './QueryValidator';\n\ninterface QueryToolboxProps extends Omit<QueryValidatorProps, 'onValidate'> {\n showTools?: boolean;\n isExpanded?: boolean;\n onFormatCode?: () => void;\n onExpand?: (expand: boolean) => void;\n onValidate?: (isValid: boolean) => void;\n}\n\nexport function QueryToolbox({ showTools, onFormatCode, onExpand, isExpanded, ...validatorProps }: QueryToolboxProps) {\n const theme = useTheme2();\n const [validationResult, setValidationResult] = useState<boolean>();\n\n const styles = useMemo(() => {\n return {\n container: css({\n border: `1px solid ${theme.colors.border.medium}`,\n borderTop: 'none',\n padding: theme.spacing(0.5, 0.5, 0.5, 0.5),\n display: 'flex',\n flexGrow: 1,\n justifyContent: 'space-between',\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n error: css({\n color: theme.colors.error.text,\n fontSize: theme.typography.bodySmall.fontSize,\n fontFamily: theme.typography.fontFamilyMonospace,\n }),\n valid: css({\n color: theme.colors.success.text,\n }),\n info: css({\n color: theme.colors.text.secondary,\n }),\n hint: css({\n color: theme.colors.text.disabled,\n whiteSpace: 'nowrap',\n cursor: 'help',\n }),\n };\n }, [theme]);\n\n let style = {};\n\n if (!showTools && validationResult === undefined) {\n style = { height: 0, padding: 0, visibility: 'hidden' };\n }\n\n return (\n <div className={styles.container} style={style}>\n <div>\n {validatorProps.onValidate && (\n <QueryValidator\n {...validatorProps}\n onValidate={(result: boolean) => {\n setValidationResult(result);\n validatorProps.onValidate!(result);\n }}\n />\n )}\n </div>\n {showTools && (\n <div>\n <Stack gap={1}>\n {onFormatCode && (\n <IconButton\n onClick={() => {\n reportInteraction('grafana_sql_query_formatted', {\n datasource: validatorProps.query.datasource?.type,\n });\n onFormatCode();\n }}\n name=\"brackets-curly\"\n size=\"xs\"\n tooltip={t('grafana-sql.components.query-toolbox.tooltip-format-query', 'Format query')}\n />\n )}\n {onExpand && (\n <IconButton\n onClick={() => {\n reportInteraction('grafana_sql_editor_expand', {\n datasource: validatorProps.query.datasource?.type,\n expanded: !isExpanded,\n });\n\n onExpand(!isExpanded);\n }}\n name={isExpanded ? 'angle-up' : 'angle-down'}\n size=\"xs\"\n tooltip={\n isExpanded\n ? t('grafana-sql.components.query-toolbox.tooltip-collapse', 'Collapse editor')\n : t('grafana-sql.components.query-toolbox.tooltip-expand', 'Expand editor')\n }\n />\n )}\n <Tooltip\n content={t(\n 'grafana-sql.components.query-toolbox.content-hit-ctrlcmdreturn-to-run-query',\n 'Hit CTRL/CMD+Return to run query'\n )}\n >\n <Icon className={styles.hint} name=\"keyboard\" />\n </Tooltip>\n </Stack>\n </div>\n )}\n </div>\n );\n}\n","import { css } from '@emotion/css';\nimport { useMemo, useState } from 'react';\nimport { useMeasure } from 'react-use';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Modal, useStyles2, useTheme2 } from '@grafana/ui';\n\nimport { SQLQuery, QueryEditorProps } from '../../types';\n\nimport { QueryEditorRaw } from './QueryEditorRaw';\nimport { QueryToolbox } from './QueryToolbox';\n\ninterface RawEditorProps extends Omit<QueryEditorProps, 'onChange'> {\n onRunQuery: () => void;\n onChange: (q: SQLQuery, processQuery: boolean) => void;\n onValidate: (isValid: boolean) => void;\n queryToValidate: SQLQuery;\n}\n\nexport function RawEditor({ db, query, onChange, onRunQuery, onValidate, queryToValidate, range }: RawEditorProps) {\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n const [isExpanded, setIsExpanded] = useState(false);\n const [toolboxRef, toolboxMeasure] = useMeasure<HTMLDivElement>();\n const [editorRef, editorMeasure] = useMeasure<HTMLDivElement>();\n\n const editorLanguageDefinition = useMemo(() => db.getEditorLanguageDefinition(), [db]);\n\n const renderQueryEditor = (width?: number, height?: number) => {\n return (\n <QueryEditorRaw\n editorLanguageDefinition={editorLanguageDefinition}\n query={query}\n width={width}\n height={height ? height - toolboxMeasure.height : undefined}\n onChange={onChange}\n >\n {({ formatQuery }) => {\n return (\n <div ref={toolboxRef}>\n <QueryToolbox\n db={db}\n query={queryToValidate}\n onValidate={onValidate}\n onFormatCode={formatQuery}\n showTools\n range={range}\n onExpand={setIsExpanded}\n isExpanded={isExpanded}\n />\n </div>\n );\n }}\n </QueryEditorRaw>\n );\n };\n\n const renderEditor = (standalone = false) => {\n return standalone ? (\n <AutoSizer>\n {({ width, height }) => {\n return renderQueryEditor(width, height);\n }}\n </AutoSizer>\n ) : (\n <div ref={editorRef}>{renderQueryEditor()}</div>\n );\n };\n\n const renderPlaceholder = () => {\n return (\n <div\n style={{\n width: editorMeasure.width,\n height: editorMeasure.height,\n background: theme.colors.background.primary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Trans i18nKey=\"grafana-sql.components.raw-editor.render-placeholder.editing-in-expanded-code-editor\">\n Editing in expanded code editor\n </Trans>\n </div>\n );\n };\n\n return (\n <>\n {isExpanded ? renderPlaceholder() : renderEditor()}\n {isExpanded && (\n <Modal\n title={t('grafana-sql.components.raw-editor.title-query-num', 'Query {{queryNum}}', {\n queryNum: query.refId,\n })}\n closeOnBackdropClick={false}\n closeOnEscape={false}\n className={styles.modal}\n contentClassName={styles.modalContent}\n isOpen={isExpanded}\n onDismiss={() => {\n reportInteraction('grafana_sql_editor_expand', {\n datasource: query.datasource?.type,\n expanded: false,\n });\n setIsExpanded(false);\n }}\n >\n {renderEditor(true)}\n </Modal>\n )}\n </>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n modal: css({\n width: '95vw',\n height: '95vh',\n }),\n modalContent: css({\n height: '100%',\n paddingTop: 0,\n }),\n };\n}\n","import { css } from '@emotion/css';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { CodeEditor, Field, IconButton, useStyles2 } from '@grafana/ui';\n\nimport { formatSQL } from '../../utils/formatSQL';\n\ntype PreviewProps = {\n rawSql: string;\n datasourceType?: string;\n};\n\nexport function Preview({ rawSql, datasourceType }: PreviewProps) {\n // TODO: use zero index to give feedback about copy success\n const [_, copyToClipboard] = useCopyToClipboard();\n const styles = useStyles2(getStyles);\n\n const copyPreview = (rawSql: string) => {\n copyToClipboard(rawSql);\n reportInteraction('grafana_sql_preview_copied', {\n datasource: datasourceType,\n });\n };\n\n const labelElement = (\n <div className={styles.labelWrapper}>\n <span className={styles.label}>\n <Trans i18nKey=\"grafana-sql.components.preview.label-element.preview\">Preview</Trans>\n </span>\n <IconButton\n tooltip={t('grafana-sql.components.preview.label-element.tooltip-copy-to-clipboard', 'Copy to clipboard')}\n onClick={() => copyPreview(rawSql)}\n name=\"copy\"\n />\n </div>\n );\n\n return (\n <Field label={labelElement} className={styles.grow}>\n <CodeEditor\n language=\"sql\"\n height={80}\n value={formatSQL(rawSql)}\n monacoOptions={{ scrollbar: { vertical: 'hidden' }, scrollBeyondLastLine: false }}\n readOnly={true}\n showMiniMap={false}\n />\n </Field>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n grow: css({ flexGrow: 1 }),\n label: css({ fontSize: 12, fontWeight: theme.typography.fontWeightMedium }),\n labelWrapper: css({ display: 'flex', justifyContent: 'space-between', paddingBottom: theme.spacing(0.5) }),\n };\n}\n","import { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { SQLQuery } from '../types';\n\nexport function getColumnsWithIndices(query: SQLQuery, fields: SelectableValue[]): SelectableValue[] {\n if (!fields || !query.sql?.columns) {\n return fields;\n }\n\n const options = query.sql.columns.map((c, i) => {\n const value = c.name\n ? `${c.name}(${c.parameters?.map((p) => p.name).join(', ')})`\n : c.parameters?.map((p) => p.name).join(', ');\n return {\n value,\n label: `${i + 1} - ${value}`,\n };\n });\n\n return [\n {\n value: '',\n label: t('grafana-sql.utils.get-columns-width-indices.label-selected-columns', 'Selected columns'),\n options,\n expanded: true,\n },\n ...fields,\n ];\n}\n","import { useCallback } from 'react';\n\nimport { DB, SQLExpression, SQLQuery } from '../types';\n\ninterface UseSqlChange {\n db: DB;\n query: SQLQuery;\n onQueryChange: (query: SQLQuery) => void;\n}\n\nexport function useSqlChange({ query, onQueryChange, db }: UseSqlChange) {\n const onSqlChange = useCallback(\n (sql: SQLExpression) => {\n const toRawSql = db.toRawSql;\n const rawSql = toRawSql({ sql, dataset: query.dataset, table: query.table, refId: query.refId });\n const newQuery: SQLQuery = { ...query, sql, rawSql };\n onQueryChange(newQuery);\n },\n [db, onQueryChange, query]\n );\n\n return { onSqlChange };\n}\n","import { useCallback } from 'react';\n\nimport { SelectableValue, toOption } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { AccessoryButton, EditorList, InputGroup } from '@grafana/plugin-ui';\nimport { Select } from '@grafana/ui';\n\nimport { QueryEditorGroupByExpression } from '../../expressions';\nimport { SQLExpression } from '../../types';\nimport { setGroupByField } from '../../utils/sql.utils';\n\ninterface GroupByRowProps {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n columns?: Array<SelectableValue<string>>;\n}\n\nexport function GroupByRow({ sql, columns, onSqlChange }: GroupByRowProps) {\n const onGroupByChange = useCallback(\n (item: Array<Partial<QueryEditorGroupByExpression>>) => {\n // As new (empty object) items come in, we need to make sure they have the correct type\n const cleaned = item.map((v) => setGroupByField(v.property?.name));\n const newSql = { ...sql, groupBy: cleaned };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n return (\n <EditorList\n items={sql.groupBy!}\n onChange={onGroupByChange}\n renderItem={makeRenderColumn({\n options: columns,\n })}\n />\n );\n}\n\nfunction makeRenderColumn({ options }: { options?: Array<SelectableValue<string>> }) {\n const renderColumn = function (\n item: Partial<QueryEditorGroupByExpression>,\n onChangeItem: (item: QueryEditorGroupByExpression) => void,\n onDeleteItem: () => void\n ) {\n return (\n <InputGroup>\n <Select\n value={item.property?.name ? toOption(item.property.name) : null}\n aria-label={t('grafana-sql.components.make-render-column.render-column.aria-label-group-by', 'Group by')}\n options={options}\n menuShouldPortal\n onChange={({ value }) => value && onChangeItem(setGroupByField(value))}\n />\n <AccessoryButton\n aria-label={t(\n 'grafana-sql.components.make-render-column.render-column.title-remove-group-by-column',\n 'Remove group by column'\n )}\n icon=\"times\"\n variant=\"secondary\"\n onClick={onDeleteItem}\n />\n </InputGroup>\n );\n };\n return renderColumn;\n}\n","import { SelectableValue } from '@grafana/data';\n\nimport { QueryWithDefaults } from '../../defaults';\nimport { DB, SQLQuery } from '../../types';\nimport { getColumnsWithIndices } from '../../utils/getColumnsWithIndices';\nimport { useSqlChange } from '../../utils/useSqlChange';\n\nimport { GroupByRow } from './GroupByRow';\n\ninterface SQLGroupByRowProps {\n fields: SelectableValue[];\n query: QueryWithDefaults;\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n}\n\nexport function SQLGroupByRow({ fields, query, onQueryChange, db }: SQLGroupByRowProps) {\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n let columnsWithIndices: SelectableValue[] = getColumnsWithIndices(query, fields);\n return <GroupByRow columns={columnsWithIndices} sql={query.sql!} onSqlChange={onSqlChange} />;\n}\n","import { uniqueId } from 'lodash';\nimport { useCallback } from 'react';\nimport * as React from 'react';\n\nimport { SelectableValue, toOption } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { EditorField, InputGroup } from '@grafana/plugin-ui';\nimport { Input, RadioButtonGroup, Select, Space } from '@grafana/ui';\n\nimport { SQLExpression } from '../../types';\nimport { setPropertyField } from '../../utils/sql.utils';\n\ntype OrderByRowProps = {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n columns?: Array<SelectableValue<string>>;\n showOffset?: boolean;\n};\n\nconst sortOrderOptions = [\n { description: 'Sort by ascending', value: 'ASC', icon: 'sort-amount-up' } as const,\n { description: 'Sort by descending', value: 'DESC', icon: 'sort-amount-down' } as const,\n];\n\nexport function OrderByRow({ sql, onSqlChange, columns, showOffset }: OrderByRowProps) {\n const onSortOrderChange = useCallback(\n (item: 'ASC' | 'DESC') => {\n const newSql: SQLExpression = { ...sql, orderByDirection: item };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onLimitChange = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n const newSql: SQLExpression = { ...sql, limit: Number.parseInt(event.currentTarget.value, 10) };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onOffsetChange = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n const newSql: SQLExpression = { ...sql, offset: Number.parseInt(event.currentTarget.value, 10) };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onOrderByChange = useCallback(\n (item: SelectableValue<string>) => {\n const newSql: SQLExpression = { ...sql, orderBy: setPropertyField(item?.value) };\n if (item === null) {\n newSql.orderByDirection = undefined;\n }\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n return (\n <>\n <EditorField label={t('grafana-sql.components.order-by-row.label-order-by', 'Order by')} width={25}>\n <InputGroup>\n <Select\n aria-label={t('grafana-sql.components.order-by-row.aria-label-order-by', 'Order by')}\n options={columns}\n value={sql.orderBy?.property.name ? toOption(sql.orderBy.property.name) : null}\n isClearable\n menuShouldPortal\n onChange={onOrderByChange}\n />\n\n <Space h={1.5} />\n\n <RadioButtonGroup\n options={sortOrderOptions}\n disabled={!sql?.orderBy?.property.name}\n value={sql.orderByDirection}\n onChange={onSortOrderChange}\n />\n </InputGroup>\n </EditorField>\n <EditorField label={t('grafana-sql.components.order-by-row.label-limit', 'Limit')} optional width={25}>\n <Input type=\"number\" min={0} id={uniqueId('limit-')} value={sql.limit || ''} onChange={onLimitChange} />\n </EditorField>\n {showOffset && (\n <EditorField label={t('grafana-sql.components.order-by-row.label-offset', 'Offset')} optional width={25}>\n <Input type=\"number\" id={uniqueId('offset-')} value={sql.offset || ''} onChange={onOffsetChange} />\n </EditorField>\n )}\n </>\n );\n}\n","import { SelectableValue } from '@grafana/data';\n\nimport { QueryWithDefaults } from '../../defaults';\nimport { DB, SQLQuery } from '../../types';\nimport { getColumnsWithIndices } from '../../utils/getColumnsWithIndices';\nimport { useSqlChange } from '../../utils/useSqlChange';\n\nimport { OrderByRow } from './OrderByRow';\n\ntype SQLOrderByRowProps = {\n fields: SelectableValue[];\n query: QueryWithDefaults;\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n};\n\nexport function SQLOrderByRow({ fields, query, onQueryChange, db }: SQLOrderByRowProps) {\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n let columnsWithIndices: SelectableValue[] = getColumnsWithIndices(query, fields);\n return <OrderByRow sql={query.sql!} onSqlChange={onSqlChange} columns={columnsWithIndices} />;\n}\n","import {\n BaseOperator,\n BasicConfig,\n Config,\n Field,\n ImmutableList,\n JsonTree,\n Operator,\n OperatorOptionsI,\n Settings,\n Utils,\n ValueSource,\n WidgetProps,\n Widgets,\n} from '@react-awesome-query-builder/ui';\nimport { isString } from 'lodash';\n\nimport { dateTime, toOption } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { Button, DateTimePicker, Input, Select } from '@grafana/ui';\n\nconst buttonLabels = {\n add: 'Add',\n remove: 'Remove',\n};\n\nexport const emptyInitTree: JsonTree = {\n id: Utils.uuid(),\n type: 'group',\n};\n\nconst TIME_FILTER = 'timeFilter';\nconst macros = [TIME_FILTER];\n\n// Widgets are the components rendered for each field type see the docs for more info\n// https://github.com/ukrbublik/react-awesome-query-builder/blob/master/CONFIG.adoc#configwidgets\nexport const widgets: Widgets = {\n ...BasicConfig.widgets,\n text: {\n ...BasicConfig.widgets.text,\n factory: function TextInput(props: WidgetProps) {\n return (\n <Input\n value={props?.value || ''}\n placeholder={props?.placeholder}\n onChange={(e) => props?.setValue(e.currentTarget.value)}\n />\n );\n },\n },\n number: {\n ...BasicConfig.widgets.number,\n factory: function NumberInput(props: WidgetProps) {\n return (\n <Input\n value={props?.value}\n placeholder={props?.placeholder}\n type=\"number\"\n onChange={(e) => props?.setValue(Number.parseInt(e.currentTarget.value, 10))}\n />\n );\n },\n },\n datetime: {\n ...BasicConfig.widgets.datetime,\n factory: function DateTimeInput(props: WidgetProps) {\n if (props?.operator === Op.MACROS) {\n return (\n <Select\n id={props.id}\n aria-label={t('grafana-sql.components.widgets.aria-label-macros-value-selector', 'Macros value selector')}\n menuShouldPortal\n options={macros.map(toOption)}\n value={props?.value}\n onChange={(val) => props.setValue(val.value)}\n />\n );\n }\n const dateValue = dateTime(props?.value).isValid() ? dateTime(props?.value).utc() : undefined;\n return (\n <DateTimePicker\n onChange={(e) => {\n props?.setValue(e?.format(BasicConfig.widgets.datetime.valueFormat));\n }}\n date={dateValue}\n />\n );\n },\n // Function for formatting widget’s value in SQL WHERE query.\n sqlFormatValue: (val, field, widget, operator, operatorDefinition, rightFieldDef) => {\n if (operator === Op.MACROS) {\n if (macros.includes(val)) {\n return val;\n }\n return undefined;\n }\n\n // This is just satisfying the type checker, this should never happen\n if (\n typeof BasicConfig.widgets.datetime.sqlFormatValue === 'string' ||\n typeof BasicConfig.widgets.datetime.sqlFormatValue === 'object'\n ) {\n return undefined;\n }\n const func = BasicConfig.widgets.datetime.sqlFormatValue;\n // We need to pass the ctx to this function this way so *this* is correct\n return func?.call(BasicConfig.ctx, val, field, widget, operator, operatorDefinition, rightFieldDef) || '';\n },\n },\n};\n\n// Settings are the configuration options for the query builder see the docs for more info\n// https://github.com/ukrbublik/react-awesome-query-builder/blob/master/CONFIG.adoc#configsettings\nexport const settings: Settings = {\n ...BasicConfig.settings,\n canRegroup: false,\n maxNesting: 1,\n canReorder: false,\n showNot: false,\n addRuleLabel: buttonLabels.add,\n deleteLabel: buttonLabels.remove,\n // This is the component that renders conjunctions (logical operators)\n renderConjs: function Conjunctions(conjProps) {\n return (\n <Select\n id={conjProps?.id}\n aria-label={t('grafana-sql.components.settings.aria-label-conjunction', 'Conjunction')}\n data-testid={selectors.components.SQLQueryEditor.filterConjunction}\n menuShouldPortal\n options={conjProps?.conjunctionOptions ? Object.keys(conjProps?.conjunctionOptions).map(toOption) : undefined}\n value={conjProps?.selectedConjunction}\n onChange={(val) => conjProps?.setConjunction(val.value!)}\n />\n );\n },\n // This is the component that renders fields\n renderField: function Field(fieldProps) {\n const fields = fieldProps?.config?.fields || {};\n return (\n <Select\n id={fieldProps?.id}\n width={25}\n aria-label={t('grafana-sql.components.settings.aria-label-field', 'Field')}\n data-testid={selectors.components.SQLQueryEditor.filterField}\n menuShouldPortal\n options={fieldProps?.items.map((f) => {\n // @ts-ignore\n const icon = fields[f.key].mainWidgetProps?.customProps?.icon;\n return {\n label: f.label,\n value: f.key,\n icon,\n };\n })}\n value={fieldProps?.selectedKey}\n onChange={(val) => {\n fieldProps?.setField(val.label!);\n }}\n />\n );\n },\n // This is the component used for the Add/Remove buttons\n renderButton: function RAQBButton(buttonProps) {\n return (\n <Button\n type=\"button\"\n aria-label={t('grafana-sql.components.settings.title-button-filter', '{{ buttonLabel }} filter', {\n buttonLabel: buttonProps?.label,\n })}\n onClick={buttonProps?.onClick}\n variant=\"secondary\"\n size=\"md\"\n icon={buttonProps?.label === buttonLabels.add ? 'plus' : 'times'}\n />\n );\n },\n // This is the component used for the fields operator selector\n renderOperator: function Operator(operatorProps) {\n return (\n <Select\n options={operatorProps?.items.map((op) => ({ label: op.label, value: op.key }))}\n aria-label={t('grafana-sql.components.settings.aria-label-operator', 'Operator')}\n data-testid={selectors.components.SQLQueryEditor.filterOperator}\n menuShouldPortal\n value={operatorProps?.selectedKey}\n onChange={(val) => {\n operatorProps?.setField(val.value || '');\n }}\n />\n );\n },\n};\n\n// add IN / NOT IN operators to text to support multi-value variables\nconst enum Op {\n IN = 'select_any_in',\n NOT_IN = 'select_not_any_in',\n MACROS = 'macros',\n}\nconst customOperators = getCustomOperators(BasicConfig);\nconst textWidget = BasicConfig.types.text.widgets.text;\nconst opers = [...(textWidget.operators || []), Op.IN, Op.NOT_IN];\nconst customTextWidget = {\n ...textWidget,\n operators: opers,\n};\n\nconst customTypes = {\n ...BasicConfig.types,\n text: {\n ...BasicConfig.types.text,\n widgets: {\n ...BasicConfig.types.text.widgets,\n text: customTextWidget,\n },\n },\n datetime: {\n ...BasicConfig.types.datetime,\n widgets: {\n ...BasicConfig.types.datetime.widgets,\n datetime: {\n ...BasicConfig.types.datetime.widgets.datetime,\n operators: [Op.MACROS, ...(BasicConfig.types.datetime.widgets.datetime.operators || [])],\n },\n },\n },\n};\n\n// This is the configuration for the query builder that doesn't include the fields but all the other configuration for the UI\n// Fields should be added dynamically based on returned data\n// See the doc for more info https://github.com/ukrbublik/react-awesome-query-builder/blob/master/CONFIG.adoc\nexport const raqbConfig: Config = {\n ...BasicConfig,\n widgets,\n settings,\n operators: customOperators,\n types: customTypes,\n};\n\nexport type { Config };\n\nconst noop = () => '';\n\nfunction getCustomOperators(config: BasicConfig) {\n const { ...supportedOperators } = config.operators;\n\n // IN operator expects array, override IN formatter for multi-value variables\n const sqlFormatInOp = supportedOperators[Op.IN].sqlFormatOp?.bind(config.ctx) || noop;\n const formatInOp = supportedOperators[Op.IN].formatOp?.bind(config.ctx) || noop;\n const customSqlInFormatter = (\n field: string,\n op: string,\n value: string | string[] | ImmutableList<string>,\n valueSrc: ValueSource | undefined,\n valueType: string | undefined,\n opDef: Operator | undefined,\n operatorOptions: OperatorOptionsI | undefined,\n fieldDef: Field | undefined\n ) => {\n return sqlFormatInOp(field, op, splitIfString(value), valueSrc, valueType, opDef, operatorOptions, fieldDef);\n };\n\n // NOT IN operator expects array, override NOT IN formatter for multi-value variables\n const sqlFormatNotInOp = supportedOperators[Op.NOT_IN].sqlFormatOp?.bind(config.ctx) || noop;\n const formatNotInOp = supportedOperators[Op.NOT_IN].formatOp?.bind(config.ctx) || noop;\n const customSqlNotInFormatter = (\n field: string,\n op: string,\n value: string | string[] | ImmutableList<string>,\n valueSrc: ValueSource | undefined,\n valueType: string | undefined,\n opDef: Operator | undefined,\n operatorOptions: OperatorOptionsI | undefined,\n fieldDef: Field | undefined\n ) => {\n return sqlFormatNotInOp(field, op, splitIfString(value), valueSrc, valueType, opDef, operatorOptions, fieldDef);\n };\n\n const customOperators: Record<string, BaseOperator> = {\n ...supportedOperators,\n [Op.IN]: {\n ...supportedOperators[Op.IN],\n formatOp: (\n field: string,\n op: string,\n value: string | string[] | ImmutableList<string>,\n valueSrc?: ValueSource\n ) => {\n return formatInOp(field, op, splitIfString(value), valueSrc);\n },\n sqlFormatOp: customSqlInFormatter,\n },\n [Op.NOT_IN]: {\n ...supportedOperators[Op.NOT_IN],\n formatOp: (\n field: string,\n op: string,\n value: string | string[] | ImmutableList<string>,\n valueSrc?: ValueSource\n ) => {\n return formatNotInOp(field, op, splitIfString(value), valueSrc);\n },\n sqlFormatOp: customSqlNotInFormatter,\n },\n [Op.MACROS]: {\n label: t('grafana-sql.components.get-custom-operators.custom-operators.label.macros', 'Macros'),\n sqlFormatOp: (field: string, _operator: string, value: string | string[] | ImmutableList<string>) => {\n if (value === TIME_FILTER) {\n return `$__timeFilter(${field})`;\n }\n throw new Error('Invalid macro');\n },\n },\n };\n\n return customOperators;\n}\n\n// value: string | List<string> but AQB uses a different version of Immutable\nfunction splitIfString(value: string | string[] | ImmutableList<string>) {\n if (isString(value)) {\n return value.split(',');\n }\n return value;\n}\n","import { injectGlobal } from '@emotion/css';\nimport { Builder, Config, ImmutableTree, Query, Utils } from '@react-awesome-query-builder/ui';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { SQLExpression } from '../../types';\n\nimport { emptyInitTree, raqbConfig } from './AwesomeQueryBuilder';\n\ninterface SQLBuilderWhereRowProps {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n config?: Partial<Config>;\n}\n\nexport function WhereRow({ sql, config, onSqlChange }: SQLBuilderWhereRowProps) {\n const [tree, setTree] = useState<ImmutableTree>();\n const configWithDefaults = useMemo(() => ({ ...raqbConfig, ...config }), [config]);\n\n useEffect(() => {\n // Set the initial tree\n if (!tree) {\n const initTree = Utils.checkTree(Utils.loadTree(sql.whereJsonTree ?? emptyInitTree), configWithDefaults);\n setTree(initTree);\n }\n }, [configWithDefaults, sql.whereJsonTree, tree]);\n\n useEffect(() => {\n if (!sql.whereJsonTree) {\n setTree(Utils.checkTree(Utils.loadTree(emptyInitTree), configWithDefaults));\n }\n }, [configWithDefaults, sql.whereJsonTree]);\n\n const onTreeChange = useCallback(\n (changedTree: ImmutableTree, config: Config) => {\n setTree(changedTree);\n const newSql = {\n ...sql,\n whereJsonTree: Utils.getTree(changedTree),\n whereString: Utils.sqlFormat(changedTree, config),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n if (!tree) {\n return null;\n }\n\n return (\n <Query\n {...configWithDefaults}\n value={tree}\n onChange={onTreeChange}\n renderBuilder={(props) => <Builder {...props} />}\n />\n );\n}\n\nfunction flex(direction: string) {\n return `\n display: flex;\n gap: 8px;\n flex-direction: ${direction};`;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-expressions\ninjectGlobal`\n .group--header {\n ${flex('row')}\n }\n\n .group-or-rule {\n ${flex('column')}\n .rule {\n flex-direction: row;\n }\n }\n\n .rule--body {\n ${flex('row')}\n }\n\n .group--children {\n ${flex('column')}\n }\n\n .group--conjunctions:empty {\n display: none;\n }\n`;\n","import { useAsync } from 'react-use';\n\nimport { SelectableValue, TypedVariableModel } from '@grafana/data';\nimport { getTemplateSrv } from '@grafana/runtime';\n\nimport { QueryWithDefaults } from '../../defaults';\nimport { DB, SQLExpression, SQLQuery, SQLSelectableValue } from '../../types';\nimport { useSqlChange } from '../../utils/useSqlChange';\n\nimport { Config } from './AwesomeQueryBuilder';\nimport { WhereRow } from './WhereRow';\n\ninterface WhereRowProps {\n query: QueryWithDefaults;\n fields: SelectableValue[];\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n}\n\nexport function SQLWhereRow({ query, fields, onQueryChange, db }: WhereRowProps) {\n const state = useAsync(async () => {\n return mapFieldsToTypes(fields);\n }, [fields]);\n\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n\n return (\n <WhereRow\n // TODO: fix key that's used to force clean render or SQLWhereRow - otherwise it doesn't render operators correctly\n key={JSON.stringify(state.value)}\n config={{ fields: state.value || {} }}\n sql={query.sql!}\n onSqlChange={(val: SQLExpression) => {\n const templateVars = getTemplateSrv().getVariables();\n\n removeQuotesForMultiVariables(val, templateVars);\n\n onSqlChange(val);\n }}\n />\n );\n}\n\n// needed for awesome query builder\nfunction mapFieldsToTypes(columns: SQLSelectableValue[]) {\n const fields: Config['fields'] = {};\n for (const col of columns) {\n fields[col.value] = {\n type: col.raqbFieldType || 'text',\n valueSources: ['value'],\n mainWidgetProps: { customProps: { icon: col.icon } },\n };\n }\n return fields;\n}\n\nexport function removeQuotesForMultiVariables(val: SQLExpression, templateVars: TypedVariableModel[]) {\n const multiVariableInWhereString = (tv: TypedVariableModel) =>\n 'multi' in tv &&\n tv.multi &&\n (val.whereString?.includes(`\\${${tv.name}}`) || val.whereString?.includes(`$${tv.name}`));\n\n if (templateVars.some((tv) => multiVariableInWhereString(tv))) {\n val.whereString = val.whereString?.replaceAll(\"')\", ')');\n val.whereString = val.whereString?.replaceAll(\"('\", '(');\n }\n}\n","import { useId } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { EditorField } from '@grafana/plugin-ui';\nimport { Select } from '@grafana/ui';\n\ninterface Props {\n columns: Array<SelectableValue<string>>;\n onParameterChange: (value?: string) => void;\n value: SelectableValue<string> | null;\n}\n\nexport function SelectColumn({ columns, onParameterChange, value }: Props) {\n const selectInputId = useId();\n\n return (\n <EditorField label={t('grafana-sql.components.select-column.label-column', 'Column')} width={25}>\n <Select\n value={value}\n data-testid={selectors.components.SQLQueryEditor.selectColumn}\n inputId={selectInputId}\n menuShouldPortal\n options={[{ label: '*', value: '*' }, ...columns]}\n allowCustomValue\n onChange={(s) => onParameterChange(s.value)}\n />\n </EditorField>\n );\n}\n","import { css } from '@emotion/css';\nimport { useCallback } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { Button, InlineLabel, Input, Stack, useStyles2 } from '@grafana/ui';\n\nimport { QueryEditorExpressionType } from '../../expressions';\nimport { SQLExpression, SQLQuery } from '../../types';\nimport { getColumnValue } from '../../utils/sql.utils';\n\nimport { SelectColumn } from './SelectColumn';\n\ninterface Props {\n columns: Array<SelectableValue<string>>;\n query: SQLQuery;\n onSqlChange: (sql: SQLExpression) => void;\n onParameterChange: (index: number) => (value?: string) => void;\n currentColumnIndex: number;\n}\n\nexport function SelectCustomFunctionParameters({\n columns,\n query,\n onSqlChange,\n onParameterChange,\n currentColumnIndex,\n}: Props) {\n const styles = useStyles2(getStyles);\n const macroOrFunction = query.sql?.columns?.[currentColumnIndex];\n\n const addParameter = useCallback(\n (index: number) => {\n const item = query.sql?.columns?.[index];\n if (!item) {\n return;\n }\n\n item.parameters = item.parameters\n ? [...item.parameters, { type: QueryEditorExpressionType.FunctionParameter, name: '' }]\n : [];\n\n const newSql: SQLExpression = {\n ...query.sql,\n columns: query.sql?.columns?.map((c, i) => (i === index ? item : c)),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, query.sql]\n );\n\n const removeParameter = useCallback(\n (columnIndex: number, index: number) => {\n const item = query.sql?.columns?.[columnIndex];\n if (!item?.parameters) {\n return;\n }\n item.parameters = item.parameters?.filter((_, i) => i !== index);\n\n const newSql: SQLExpression = {\n ...query.sql,\n columns: query.sql?.columns?.map((c, i) => (i === columnIndex ? item : c)),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, query.sql]\n );\n\n function renderParameters(columnIndex: number) {\n if (!macroOrFunction?.parameters || macroOrFunction.parameters.length <= 1) {\n return null;\n }\n\n const paramComponents = macroOrFunction.parameters.map((param, index) => {\n // Skip the first parameter as it is the column name\n if (index === 0) {\n return null;\n }\n\n return (\n <Stack key={index} gap={2}>\n <InlineLabel className={styles.label}>,</InlineLabel>\n <Input\n onChange={(e) => onParameterChange(index)(e.currentTarget.value)}\n value={param.name}\n aria-label={t(\n 'grafana-sql.components.select-custom-function-parameters.aria-label-parameter',\n 'Parameter {{index}} for column {{columnIndex}}',\n { index, columnIndex }\n )}\n data-testid={selectors.components.SQLQueryEditor.selectInputParameter}\n addonAfter={\n <Button\n aria-label={t(\n 'grafana-sql.components.select-custom-function-parameters.render-parameters.params.title-remove-parameter',\n 'Remove parameter'\n )}\n type=\"button\"\n icon=\"times\"\n variant=\"secondary\"\n size=\"md\"\n onClick={() => removeParameter(columnIndex, index)}\n />\n }\n />\n </Stack>\n );\n });\n return paramComponents;\n }\n\n return (\n <>\n <InlineLabel className={styles.label}>(</InlineLabel>\n <SelectColumn\n columns={columns}\n onParameterChange={(s) => onParameterChange(0)(s)}\n value={getColumnValue(macroOrFunction?.parameters?.[0])}\n />\n {renderParameters(currentColumnIndex)}\n <Button\n type=\"button\"\n onClick={() => addParameter(currentColumnIndex)}\n variant=\"secondary\"\n size=\"md\"\n icon=\"plus\"\n aria-label={t('grafana-sql.components.select-custom-function-parameters.title-add-parameter', 'Add parameter')}\n />\n <InlineLabel className={styles.label}>)</InlineLabel>\n </>\n );\n}\n\nconst getStyles = () => {\n return {\n label: css({\n padding: 0,\n margin: 0,\n width: 'unset',\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { useCallback, useEffect, useId, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { EditorField } from '@grafana/plugin-ui';\nimport { InlineLabel, Input, Select, Stack, useStyles2 } from '@grafana/ui';\n\nimport { QueryEditorExpressionType } from '../../expressions';\nimport { DB, SQLExpression, SQLQuery } from '../../types';\nimport { getColumnValue } from '../../utils/sql.utils';\n\nimport { SelectColumn } from './SelectColumn';\nimport { SelectCustomFunctionParameters } from './SelectCustomFunctionParameters';\n\ninterface Props {\n query: SQLQuery;\n onSqlChange: (sql: SQLExpression) => void;\n currentColumnIndex: number;\n db: DB;\n columns: Array<SelectableValue<string>>;\n}\n\nexport function SelectFunctionParameters({ query, onSqlChange, currentColumnIndex, db, columns }: Props) {\n const selectInputId = useId();\n const macroOrFunction = query.sql?.columns?.[currentColumnIndex];\n const styles = useStyles2(getStyles);\n const func = db.functions().find((f) => f.name === macroOrFunction?.name);\n\n const [fieldsFromFunction, setFieldsFromFunction] = useState<Array<Array<SelectableValue<string>>>>([]);\n\n useEffect(() => {\n const getFieldsFromFunction = async () => {\n if (!func) {\n return;\n }\n const options: Array<Array<SelectableValue<string>>> = [];\n for (const param of func.parameters ?? []) {\n if (param.options) {\n options.push(await param.options(query));\n } else {\n options.push([]);\n }\n }\n setFieldsFromFunction(options);\n };\n getFieldsFromFunction();\n\n // It is fine to ignore the warning here and omit the query object\n // only table property is used in the query object and whenever table changes the component is re-rendered\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [macroOrFunction?.name]);\n\n const onParameterChange = useCallback(\n (index: number, keepIndex?: boolean) => (s: string | undefined) => {\n const item = query.sql?.columns?.[currentColumnIndex];\n if (!item) {\n return;\n }\n if (!item.parameters) {\n item.parameters = [];\n }\n if (item.parameters[index] === undefined) {\n item.parameters[index] = { type: QueryEditorExpressionType.FunctionParameter, name: s };\n } else if (s == null && keepIndex) {\n // Remove value from index\n item.parameters = item.parameters.map((p, i) => (i === index ? { ...p, name: '' } : p));\n // Remove the last empty parameter\n if (item.parameters[item.parameters.length - 1]?.name === '') {\n item.parameters = item.parameters.filter((p) => p.name !== '');\n }\n } else if (s == null) {\n item.parameters = item.parameters.filter((_, i) => i !== index);\n } else {\n item.parameters = item.parameters.map((p, i) => (i === index ? { ...p, name: s } : p));\n }\n\n const newSql: SQLExpression = {\n ...query.sql,\n columns: query.sql?.columns?.map((c, i) => (i === currentColumnIndex ? item : c)),\n };\n\n onSqlChange(newSql);\n },\n [currentColumnIndex, onSqlChange, query.sql]\n );\n\n function renderParametersWithFunctions() {\n if (!func?.parameters) {\n return null;\n }\n\n return func?.parameters.map((funcParam, index) => {\n return (\n <Stack key={index} alignItems=\"flex-end\" gap={2}>\n <EditorField label={funcParam.name} width={25} optional={!funcParam.required}>\n <>\n {funcParam.options ? (\n <Select\n value={getColumnValue(macroOrFunction?.parameters![index])}\n options={fieldsFromFunction?.[index]}\n data-testid={selectors.components.SQLQueryEditor.selectFunctionParameter(funcParam.name)}\n inputId={selectInputId}\n menuShouldPortal\n allowCustomValue\n isClearable\n onChange={(s) => onParameterChange(index, true)(s?.value)}\n />\n ) : (\n <Input\n onChange={(e) => onParameterChange(index, true)(e.currentTarget.value)}\n value={macroOrFunction?.parameters![index]?.name}\n data-testid={selectors.components.SQLQueryEditor.selectInputParameter}\n />\n )}\n </>\n </EditorField>\n {func.parameters!.length !== index + 1 && <InlineLabel className={styles.label}>,</InlineLabel>}\n </Stack>\n );\n });\n }\n\n // This means that no function is selected, we render a column selector\n if (macroOrFunction?.name === undefined) {\n return (\n <SelectColumn\n columns={columns}\n onParameterChange={(s) => onParameterChange(0)(s)}\n value={getColumnValue(macroOrFunction?.parameters?.[0])}\n />\n );\n }\n\n // If the function is not found, that means that it might be a custom value\n // we let the user add any number of parameters\n if (!func) {\n return (\n <SelectCustomFunctionParameters\n query={query}\n onSqlChange={onSqlChange}\n currentColumnIndex={currentColumnIndex}\n columns={columns}\n onParameterChange={onParameterChange}\n />\n );\n }\n\n // Else we render the function parameters based on the provided settings\n return (\n <>\n <InlineLabel className={styles.label}>(</InlineLabel>\n {renderParametersWithFunctions()}\n <InlineLabel className={styles.label}>)</InlineLabel>\n </>\n );\n}\n\nconst getStyles = () => {\n return {\n label: css({\n padding: 0,\n margin: 0,\n width: 'unset',\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport { useCallback } from 'react';\n\nimport { SelectableValue, toOption } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { EditorField } from '@grafana/plugin-ui';\nimport { Button, Select, Stack, useStyles2 } from '@grafana/ui';\n\nimport { QueryEditorExpressionType, QueryEditorFunctionExpression } from '../../expressions';\nimport { DB, QueryFormat, SQLExpression, SQLQuery } from '../../types';\nimport { createFunctionField } from '../../utils/sql.utils';\nimport { useSqlChange } from '../../utils/useSqlChange';\n\nimport { SelectFunctionParameters } from './SelectFunctionParameters';\n\ninterface SelectRowProps {\n query: SQLQuery;\n onQueryChange: (sql: SQLQuery) => void;\n db: DB;\n columns: Array<SelectableValue<string>>;\n}\n\nexport function SelectRow({ query, onQueryChange, db, columns }: SelectRowProps) {\n const styles = useStyles2(getStyles);\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n const timeSeriesAliasOpts: Array<SelectableValue<string>> = [];\n\n // Add necessary alias options for time series format\n // when that format has been selected\n if (query.format === QueryFormat.Timeseries) {\n timeSeriesAliasOpts.push({ label: t('grafana-sql.components.select-row.label.time', 'time'), value: 'time' });\n timeSeriesAliasOpts.push({ label: t('grafana-sql.components.select-row.label.value', 'value'), value: 'value' });\n }\n\n const onAggregationChange = useCallback(\n (item: QueryEditorFunctionExpression, index: number) => (aggregation: SelectableValue<string>) => {\n const newItem = {\n ...item,\n name: aggregation?.value,\n parameters: [\n { type: QueryEditorExpressionType.FunctionParameter as const, name: item.parameters?.[0]?.name || '' },\n ],\n };\n const newSql: SQLExpression = {\n ...query.sql,\n columns: query.sql?.columns?.map((c, i) => (i === index ? newItem : c)),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, query.sql]\n );\n\n const onAliasChange = useCallback(\n (item: QueryEditorFunctionExpression, index: number) => (alias: SelectableValue<string>) => {\n let newItem = { ...item };\n\n if (alias !== null) {\n newItem = { ...item, alias: `\"${alias?.value?.trim()}\"` };\n } else {\n delete newItem.alias;\n }\n\n const newSql: SQLExpression = {\n ...query.sql,\n columns: query.sql?.columns?.map((c, i) => (i === index ? newItem : c)),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, query.sql]\n );\n\n const removeColumn = useCallback(\n (index: number) => () => {\n const clone = [...(query.sql?.columns || [])];\n clone.splice(index, 1);\n const newSql: SQLExpression = {\n ...query.sql,\n columns: clone,\n };\n onSqlChange(newSql);\n },\n [onSqlChange, query.sql]\n );\n\n const addColumn = useCallback(() => {\n const newSql: SQLExpression = { ...query.sql, columns: [...(query.sql?.columns || []), createFunctionField()] };\n onSqlChange(newSql);\n }, [onSqlChange, query.sql]);\n\n const aggregateOptions = () => {\n const options: Array<SelectableValue<string>> = [\n {\n label: t('grafana-sql.components.select-row.aggregate-options.options.label.aggregations', 'Aggregations'),\n options: [],\n },\n { label: t('grafana-sql.components.select-row.aggregate-options.options.label.macros', 'Macros'), options: [] },\n ];\n for (const func of db.functions()) {\n // Create groups for macros\n if (func.name.startsWith('$__')) {\n options[1].options.push({ label: func.name, value: func.name });\n } else {\n options[0].options.push({ label: func.name, value: func.name });\n }\n }\n return options;\n };\n\n return (\n <Stack gap={2} wrap=\"wrap\" direction=\"column\">\n {query.sql?.columns?.map((item, index) => (\n <div key={index}>\n <Stack gap={2} alignItems=\"end\">\n <EditorField\n label={t('grafana-sql.components.select-row.label-data-operations', 'Data operations')}\n optional\n width={25}\n >\n <Select\n value={item.name ? toOption(item.name) : null}\n inputId={`select-aggregation-${index}-${uniqueId()}`}\n data-testid={selectors.components.SQLQueryEditor.selectAggregation}\n isClearable\n menuShouldPortal\n allowCustomValue\n options={aggregateOptions()}\n onChange={onAggregationChange(item, index)}\n />\n </EditorField>\n\n <SelectFunctionParameters\n currentColumnIndex={index}\n columns={columns}\n onSqlChange={onSqlChange}\n query={query}\n db={db}\n />\n\n <EditorField label={t('grafana-sql.components.select-row.label-alias', 'Alias')} optional width={15}>\n <Select\n value={item.alias ? toOption(item.alias) : null}\n inputId={`select-alias-${index}-${uniqueId()}`}\n data-testid={selectors.components.SQLQueryEditor.selectAlias}\n options={timeSeriesAliasOpts}\n onChange={onAliasChange(item, index)}\n isClearable\n menuShouldPortal\n allowCustomValue\n />\n </EditorField>\n <Button\n aria-label={t('grafana-sql.components.select-row.title-remove-column', 'Remove column')}\n type=\"button\"\n icon=\"trash-alt\"\n variant=\"secondary\"\n size=\"md\"\n onClick={removeColumn(index)}\n />\n </Stack>\n </div>\n ))}\n <Button\n type=\"button\"\n onClick={addColumn}\n variant=\"secondary\"\n aria-label={t('grafana-sql.components.select-row.title-add-column', 'Add column')}\n size=\"md\"\n icon=\"plus\"\n className={styles.addButton}\n />\n </Stack>\n );\n}\n\nconst getStyles = () => {\n return {\n addButton: css({ alignSelf: 'flex-start' }),\n label: css({\n padding: 0,\n margin: 0,\n width: 'unset',\n }),\n };\n};\n","import { useAsync } from 'react-use';\n\nimport { t } from '@grafana/i18n';\nimport { EditorRows, EditorRow, EditorField } from '@grafana/plugin-ui';\n\nimport { DB, QueryEditorProps, QueryRowFilter } from '../../types';\nimport { QueryToolbox } from '../query-editor-raw/QueryToolbox';\n\nimport { Preview } from './Preview';\nimport { SQLGroupByRow } from './SQLGroupByRow';\nimport { SQLOrderByRow } from './SQLOrderByRow';\nimport { SQLWhereRow } from './SQLWhereRow';\nimport { SelectRow } from './SelectRow';\n\ninterface VisualEditorProps extends QueryEditorProps {\n db: DB;\n queryRowFilter: QueryRowFilter;\n onValidate: (isValid: boolean) => void;\n}\n\nexport const VisualEditor = ({ query, db, queryRowFilter, onChange, onValidate, range }: VisualEditorProps) => {\n const state = useAsync(async () => {\n const fields = await db.fields(query);\n return fields;\n }, [db, query.dataset, query.table]);\n\n return (\n <>\n <EditorRows>\n <EditorRow>\n <SelectRow columns={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorRow>\n {queryRowFilter.filter && (\n <EditorRow>\n <EditorField\n label={t('grafana-sql.components.visual-editor.label-filter-by-column-value', 'Filter by column value')}\n optional\n >\n <SQLWhereRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorField>\n </EditorRow>\n )}\n {queryRowFilter.group && (\n <EditorRow>\n <EditorField label={t('grafana-sql.components.visual-editor.label-group-by-column', 'Group by column')}>\n <SQLGroupByRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorField>\n </EditorRow>\n )}\n {queryRowFilter.order && (\n <EditorRow>\n <SQLOrderByRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorRow>\n )}\n {queryRowFilter.preview && query.rawSql && (\n <EditorRow>\n <Preview rawSql={query.rawSql} datasourceType={query.datasource?.type} />\n </EditorRow>\n )}\n </EditorRows>\n <QueryToolbox db={db} query={query} onValidate={onValidate} range={range} />\n </>\n );\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { QueryEditorProps } from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\nimport { Space } from '@grafana/ui';\n\nimport { SqlDatasource } from '../datasource/SqlDatasource';\nimport { applyQueryDefaults } from '../defaults';\nimport { SQLQuery, QueryRowFilter, SQLOptions } from '../types';\nimport { haveColumns } from '../utils/sql.utils';\n\nimport { QueryHeader, QueryHeaderProps } from './QueryHeader';\nimport { RawEditor } from './query-editor-raw/RawEditor';\nimport { VisualEditor } from './visual-query-builder/VisualEditor';\n\nexport interface SqlQueryEditorProps extends QueryEditorProps<SqlDatasource, SQLQuery, SQLOptions> {\n queryHeaderProps?: Pick<QueryHeaderProps, 'dialect'>;\n}\n\nexport default function SqlQueryEditor({\n datasource,\n query,\n onChange,\n onRunQuery,\n range,\n queryHeaderProps,\n}: SqlQueryEditorProps) {\n const [isQueryRunnable, setIsQueryRunnable] = useState(true);\n const db = datasource.getDB();\n\n const { preconfiguredDatabase } = datasource;\n const dialect = queryHeaderProps?.dialect ?? 'other';\n const { loading, error } = useAsync(async () => {\n return () => {\n if (datasource.getDB(datasource.id).init !== undefined) {\n datasource.getDB(datasource.id).init!();\n }\n };\n }, [datasource]);\n\n const queryWithDefaults = applyQueryDefaults(query);\n const [queryRowFilter, setQueryRowFilter] = useState<QueryRowFilter>({\n filter: !!queryWithDefaults.sql?.whereString,\n group: !!queryWithDefaults.sql?.groupBy?.[0]?.property.name,\n order: !!queryWithDefaults.sql?.orderBy?.property.name,\n preview: true,\n });\n const [queryToValidate, setQueryToValidate] = useState(queryWithDefaults);\n\n useEffect(() => {\n return () => {\n if (datasource.getDB(datasource.id).dispose !== undefined) {\n datasource.getDB(datasource.id).dispose!();\n }\n };\n }, [datasource]);\n\n const processQuery = useCallback(\n (q: SQLQuery) => {\n if (isQueryValid(q) && onRunQuery) {\n onRunQuery();\n }\n },\n [onRunQuery]\n );\n\n const onQueryChange = (q: SQLQuery, process = true) => {\n setQueryToValidate(q);\n onChange(q);\n\n if (haveColumns(q.sql?.columns) && q.sql?.columns.some((c) => c.name) && !queryRowFilter.group) {\n setQueryRowFilter({ ...queryRowFilter, group: true });\n }\n\n if (process) {\n processQuery(q);\n }\n };\n\n const onQueryHeaderChange = (q: SQLQuery) => {\n setQueryToValidate(q);\n onChange(q);\n };\n\n if (loading || error) {\n return null;\n }\n\n return (\n <>\n <QueryHeader\n db={db}\n preconfiguredDataset={preconfiguredDatabase}\n onChange={onQueryHeaderChange}\n onRunQuery={onRunQuery}\n onQueryRowChange={setQueryRowFilter}\n queryRowFilter={queryRowFilter}\n query={queryWithDefaults}\n isQueryRunnable={isQueryRunnable}\n dialect={dialect}\n />\n\n <Space v={0.5} />\n\n {queryWithDefaults.editorMode !== EditorMode.Code && (\n <VisualEditor\n db={db}\n query={queryWithDefaults}\n onChange={(q: SQLQuery) => onQueryChange(q, false)}\n queryRowFilter={queryRowFilter}\n onValidate={setIsQueryRunnable}\n range={range}\n />\n )}\n\n {queryWithDefaults.editorMode === EditorMode.Code && (\n <RawEditor\n db={db}\n query={queryWithDefaults}\n queryToValidate={queryToValidate}\n onChange={onQueryChange}\n onRunQuery={onRunQuery}\n onValidate={setIsQueryRunnable}\n range={range}\n />\n )}\n </>\n );\n}\n\nconst isQueryValid = (q: SQLQuery) => {\n return Boolean(q.rawSql);\n};\n"],"names":["resolveSelectors","versionedSelectors","grafanaVersion","resolveSelectorGroup","replace","group","result","key","value","Object","entries","isVersionedSelectorGroup","assertIsSemverValid","resolveSelector","target","first","keys","valid","versionedSelector","versionToUse","versions","sort","compare","length","version","gte","selectorName","every","Error","MIN_GRAFANA_VERSION","versionedComponents","RadioButton","container","Breadcrumbs","breadcrumb","title","CanvasGridAddActions","addPanel","groupPanels","ungroup","ungroupRows","addRow","pasteRow","addTab","pasteTab","pastePanel","DashboardEditPaneSplitter","primaryBody","EditPaneHeader","deleteButton","copyDropdown","copy","duplicate","backButton","TimePicker","openButton","overlayContent","fromField","toField","applyTimeRange","copyTimeRange","pasteTimeRange","calendar","label","closeButton","absoluteTimeRangeTitle","DataSourcePermissions","form","roleType","rolePicker","permissionLevel","DateTimePicker","input","DataSource","TestData","QueryTab","scenarioSelectContainer","scenarioSelect","max","min","noise","seriesCount","spread","startValue","drop","DataSourceHttpSettings","urlInput","Jaeger","traceIDInput","Prometheus","configPage","connectionSettings","manageAlerts","allowAsRecordingRulesTarget","scrapeInterval","queryTimeout","defaultEditor","disableMetricLookup","prometheusType","prometheusVersion","cacheLevel","incrementalQuerying","queryOverlapWindow","disableRecordingRules","customQueryParameters","httpMethod","exemplarsAddButton","internalLinkSwitch","codeModeMetricNamesSuggestionLimit","seriesLimit","queryEditor","explain","editorToggle","options","legend","format","step","type","exemplars","builder","metricSelect","hints","metricsExplorer","queryAdvisor","code","queryField","metricsCountInfo","metricsBrowser","selectMetric","metricList","labelNamesFilter","labelValuesFilter","useQuery","useAsRateQuery","validateSelector","clear","exemplarMarker","variableQueryEditor","queryType","labelnames","metricRegex","labelValues","labelSelect","metricNames","varQueryResult","seriesQuery","classicQuery","annotations","minStep","tags","text","seriesValueAsTimestamp","Menu","MenuComponent","MenuGroup","MenuItem","SubMenu","icon","Panels","Panel","content","headerContainer","headerItems","item","menuItems","menu","containerByTitle","headerCornerInfo","mode","status","_","loadingBar","HoverWidget","dragIcon","PanelDataErrorMessage","Visualization","Graph","VisualizationTab","legendSection","Legend","legendItemAlias","name","showLegendSwitch","xAxis","labels","BarGauge","valueV2","PieChart","svgSlice","Text","Table","header","footer","body","TableNG","Filters","HeaderButton","Container","SelectAll","Tooltip","Wrapper","Caret","Footer","ReducerLabel","Value","VizLegend","seriesName","Drawer","General","expand","contract","close","rcContentWrapper","subtitle","DashboardSaveDrawer","saveButton","saveAsButton","saveAsTitleInput","PanelEditor","OptionsPane","select","fieldLabel","fieldInput","DataPane","applyButton","toggleVizPicker","toggleVizOptions","toggleTableView","showZoomField","showAttributionField","showScaleField","showMeasureField","showDebugField","measureButton","Outline","section","node","ElementEditPane","variableType","addVariableButton","variableNameInput","variableLabelInput","AutoGridLayout","minColumnWidth","customMinColumnWidth","clearCustomMinColumnWidth","maxColumns","rowHeight","customRowHeight","clearCustomRowHeight","fillScreen","TabsLayout","titleInput","PanelInspector","Data","Stats","Json","Query","refreshButton","jsonObjectKeys","Tab","active","RefreshPicker","runButtonV2","intervalButtonV2","queryInspectorButton","queryHistoryButton","addQuery","addQueryFromLibrary","queryGroupTopSection","addExpression","QueryHistory","queryText","QueryEditorRows","rows","QueryEditorRow","actionButton","refId","AlertTab","AlertRules","groupToggle","toggle","expandedContent","previewButton","ruleNameField","newFolderButton","newFolderNameField","newFolderNameCreateButton","newEvaluationGroupButton","newEvaluationGroupName","newEvaluationGroupInterval","newEvaluationGroupCreate","stepNo","stepAdvancedModeSwitch","Alert","alertV2","severity","TransformTab","newTransform","transformationEditor","transformationEditorDebugger","Transforms","card","disableTransformationButton","Reduce","modeLabel","calculationsLabel","SpatialOperations","actionLabel","locationLabel","location","autoOption","coords","option","latitudeFieldLabel","longitudeFieldLabel","geohash","geohashFieldLabel","lookup","lookupFieldLabel","gazetteerFieldLabel","searchInput","noTransformationsMessage","addTransformationButton","removeAllTransformationsButton","NavBar","Configuration","button","Toggle","Reporting","NavMenu","NavToolbar","commandPaletteTrigger","shareDashboard","markAsFavorite","editDashboard","editButton","exitButton","settingsButton","addRowButton","addLibraryPanelButton","addVisualizationButton","pastePanelButton","discardChangesButton","discardLibraryPanelButton","unlinkLibraryPanelButton","saveLibraryPanelButton","backToDashboardButton","PageToolbar","tooltip","itemButton","QueryEditorToolbarItem","BackButton","backArrow","OptionsGroup","PluginVisualization","current","Select","toggleAllOptions","singleValue","FieldConfigEditor","OverridesConfigEditor","FolderPicker","containerV2","ReadonlyFolderPicker","DataSourcePicker","inputV2","dataSourceList","advancedModal","builtInDataSourceList","TimeZonePicker","changeTimeSettingsButton","WeekStartPicker","placeholder","TraceViewer","spanBar","QueryField","QueryBuilder","queryPatterns","inputSelect","valueSelect","matchOperatorSelect","ValuePicker","Search","sectionV2","itemsV2","cards","collapseFolder","sectionId","expandFolder","dashboardItem","dashboardCard","folderHeader","folderName","folderContent","dashboardItems","DashboardLinks","dropDown","link","LoadingIndicator","CallToActionCard","buttonV2","DataLinksContextMenu","singleLink","DataLinksActionsTooltip","tooltipWrapper","CodeEditor","ReactMonacoEditor","editorLazy","DashboardImportPage","textarea","submit","ImportDashboardForm","PanelAlertTabContent","VisualizationPreview","ColorSwatch","DashboardRow","wrapper","UserProfile","profileSaveButton","preferencesSaveButton","orgsTable","sessionsTable","extensionPointTabs","extensionPointTab","tabId","FileUpload","inputField","fileNameSpan","DebugOverlay","OrgRolePicker","AnalyticsToolbarButton","Variables","variableOption","variableLinkWrapper","Annotations","annotationsTypeInput","annotationsChoosePanelInput","editor","testButton","resultContainer","ReturnToPrevious","buttonGroup","dismissButton","SQLQueryEditor","selectColumn","selectColumnInput","selectFunctionParameter","selectAggregation","selectAggregationInput","selectAlias","selectAliasInput","selectInputParameter","filterConjunction","filterField","filterOperator","headerTableSelector","headerFilterSwitch","headerGroupSwitch","headerOrderSwitch","headerPreviewSwitch","EntityNotFound","Portal","ExportImage","formatOptions","png","jpg","rendererAlert","description","buttons","generate","download","cancel","preview","loading","image","error","message","selectors","pages","Alerting","AddAlertRule","url","EditAlertRule","alertRuleUid","Login","username","password","skip","PasswordlessLogin","email","Home","delete","readOnly","saveAndTest","alert","DataSources","dataSources","dataSourceName","EditDataSource","dataSourceUid","settings","AddDataSource","dataSourcePluginsV2","pluginName","ConfirmModal","SecretsManagement","SecretForm","AddDashboard","addNewPanel","itemButtonAddViz","addNewRow","addNewPanelLibrary","Settings","List","Edit","annotationIndex","editIndex","ImportDashboard","Dashboard","uid","DashNav","nav","navV2","publicDashboardTag","shareButton","scrollContainer","newShareButton","shareLink","arrowMenu","shareInternally","shareExternally","shareSnapshot","NewExportButton","exportAsJson","exportAsImage","playlistControls","prev","stop","next","Controls","submenu","submenuItem","submenuItemLabels","submenuItemValueDropDownValueLinkTexts","submenuItemValueDropDownDropDown","submenuItemValueDropDownOptionTexts","annotationsWrapper","annotationLabel","annotationToggle","Actions","deleteDashBoard","sectionItems","saveDashBoard","saveAsDashBoard","urlParams","dashboardUid","addAnnotationCTAV2","NewAnnotation","panelFilterSelect","showInLabel","previewInDashboard","apply","enable","hide","addVariableCTAV2","newButton","table","tableRowNameFields","variableName","tableRowDefinitionFields","tableRowArrowUpButtons","tableRowArrowDownButtons","tableRowDuplicateButtons","tableRowRemoveButtons","headerLink","modeLabelNew","modeLabelEdit","generalNameInput","generalNameInputV2","generalTypeSelect","generalTypeSelectV2","generalLabelInput","generalLabelInputV2","generalHideSelect","generalHideSelectV2","selectionOptionsAllowCustomValueSwitch","selectionOptionsMultiSwitch","selectionOptionsIncludeAllSwitch","selectionOptionsCustomAllInput","previewOfValuesOption","submitButton","QueryVariable","queryOptionsDataSourceSelect","queryOptionsOpenButton","queryOptionsRefreshSelect","queryOptionsRefreshSelectV2","queryOptionsRegExInput","queryOptionsRegExInputV2","queryOptionsSortSelect","queryOptionsSortSelectV2","queryOptionsQueryInput","queryOptionsStaticOptionsToggle","queryOptionsStaticOptionsOrderDropdown","valueGroupsTagsEnabledSwitch","valueGroupsTagsTagsQueryInput","valueGroupsTagsTagsValuesQueryInput","ConstantVariable","constantOptionsQueryInput","constantOptionsQueryInputV2","DatasourceVariable","datasourceSelect","nameFilter","TextBoxVariable","textBoxOptionsQueryInput","textBoxOptionsQueryInputV2","CustomVariable","customValueInput","optionsOpenButton","IntervalVariable","intervalsValueInput","autoEnabledCheckbox","stepCountIntervalSelect","minIntervalInput","GroupByVariable","dataSourceSelect","infoText","modeToggle","AdHocFiltersVariable","SwitchVariable","valuePairTypeSelect","enabledValueInput","disabledValueInput","StaticOptionsEditor","addButton","labelInput","valueInput","moveButton","row","marker","Rows","Repeated","ConfigSection","warningMessage","Dashboards","dashboards","toggleView","SaveDashboardAsModal","newName","save","SaveDashboardModal","saveVariables","saveTimerange","saveRefresh","variablesWarningAlert","SharePanelModal","linkToRenderedImage","ShareDashboardModal","PublicDashboard","WillBePublicCheckbox","LimitedDSCheckbox","CostIncreaseCheckbox","PauseSwitch","EnableAnnotationsSwitch","CreateButton","DeleteButton","CopyUrlInput","CopyUrlButton","SettingsDropdown","TemplateVariablesWarningAlert","UnsupportedDataSourcesWarningAlert","NoUpsertPermissionsWarningAlert","EnableTimeRangeSwitch","EmailSharingConfiguration","ShareType","EmailSharingInput","EmailSharingInviteButton","EmailSharingList","DeleteEmail","ReshareLink","SnapshotScene","PublishSnapshot","ShareDashboardDrawer","ShareInternally","lockTimeRangeSwitch","shortenUrlSwitch","copyUrlButton","SharePanel","widthInput","heightInput","scaleFactorInput","generateImageButton","downloadImageButton","ShareExternally","publicAlert","emailSharingAlert","shareTypeSelect","Creation","PublicShare","createButton","cancelButton","EmailShare","willBePublicCheckbox","enableTimeRangeSwitch","enableAnnotationsSwitch","revokeAccessButton","toggleAccessButton","ShareSnapshot","publishSnapshot","ExportDashboardDrawer","ExportAsJson","codeEditor","exportExternallyToggle","saveToFileButton","copyToClipboardButton","page","NotAvailable","pausedDescription","PublicDashboardScene","loadingPage","controls","RequestViewAccess","recipientInput","PublicDashboardConfirmAccess","Explore","graph","scrollView","addFromQueryLibrary","SoloPanel","PluginsList","list","listItem","signatureErrorNotice","PluginPage","signatureInfo","disabledInfo","PlaylistForm","interval","itemDelete","BrowseDashboards","checkbox","NewFolderForm","nameInput","SearchDashboards","FolderView","PublicDashboards","ListItem","linkButton","configButton","trashcanButton","pauseSwitch","UserListPage","tabs","allUsers","orgUsers","anonUserDevices","publicDashboardsUsers","users","org","admin","publicDashboards","UserListAdminPage","UsersListPage","UserAnonListPage","UsersListPublicDashboardsPage","DashboardsListModal","ProfilePage","Plugin","pluginId","MigrateToCloud","components","isOpen","onCancel","onDiscard","onCopy","buttonRef","useRef","styles","useStyles2","getStyles","useEffect","focus","Modal","div","className","modalHeaderTitle","Icon","size","span","titleText","Trans","i18nKey","ariaLabel","t","onDismiss","p","ButtonRow","Button","variant","onClick","fill","ref","theme","css","paddingLeft","spacing","fontSize","typography","lg","float","paddingTop","margin","DatasetSelector","dataset","db","dialect","onChange","inputId","preconfiguredDataset","hasPreconfigCondition","state","useAsync","toOption","datasets","map","aria-label","disabled","isLoading","menuShouldPortal","TableSelector","tables","data-testid","allowCustomValue","QueryHeader","isQueryRunnable","onQueryRowChange","onRunQuery","query","queryRowFilter","editorMode","copyToClipboard","useCopyToClipboard","showConfirm","setShowConfirm","useState","toRawSql","htmlId","useId","editorModes","EditorMode","Builder","Code","onEditorModeChange","useCallback","newEditorMode","reportInteraction","datasource","selectedEditorMode","EditorHeader","InlineSelect","e","undefined","QueryFormat","selectedFormat","QUERY_FORMAT_OPTIONS","InlineSwitch","id","transparent","showLabel","filter","ev","HTMLInputElement","displayed","checked","order","FlexItem","grow","br","placement","RadioButtonGroup","rawSql","Space","v","EditorRow","EditorField","width","sql","QueryEditorRaw","children","height","editorLanguageDefinition","queryRef","onRawQueryChange","processQuery","newQuery","rawQuery","SQLEditor","language","QueryValidator","onValidate","range","validationResult","setValidationResult","useTheme2","valueFormatter","useMemo","getValueFormat","color","colors","bodySmall","fontFamily","fontFamilyMonospace","success","info","secondary","validateQuery","useAsyncFn","q","trim","useDebounce","isError","isValid","splat","split","slice","join","processErrorMessage","Spinner","inline","statistics","values","bytes","formattedValueToString","TotalBytesProcessed","strong","QueryToolbox","showTools","onFormatCode","onExpand","isExpanded","validatorProps","border","medium","borderTop","padding","display","flexGrow","justifyContent","hint","whiteSpace","cursor","style","visibility","Stack","gap","IconButton","expanded","RawEditor","queryToValidate","setIsExpanded","toolboxRef","toolboxMeasure","useMeasure","editorRef","editorMeasure","getEditorLanguageDefinition","renderQueryEditor","formatQuery","renderEditor","standalone","AutoSizer","background","primary","alignItems","queryNum","closeOnBackdropClick","closeOnEscape","modal","contentClassName","modalContent","Preview","datasourceType","labelElement","labelWrapper","copyPreview","Field","formatSQL","monacoOptions","scrollbar","vertical","scrollBeyondLastLine","showMiniMap","fontWeight","fontWeightMedium","paddingBottom","getColumnsWithIndices","fields","columns","c","i","parameters","useSqlChange","onQueryChange","onSqlChange","GroupByRow","onGroupByChange","cleaned","setGroupByField","property","newSql","groupBy","EditorList","items","renderItem","makeRenderColumn","onChangeItem","onDeleteItem","InputGroup","AccessoryButton","SQLGroupByRow","columnsWithIndices","sortOrderOptions","OrderByRow","showOffset","onSortOrderChange","orderByDirection","onLimitChange","event","limit","Number","parseInt","currentTarget","onOffsetChange","offset","onOrderByChange","orderBy","setPropertyField","isClearable","h","optional","Input","uniqueId","SQLOrderByRow","buttonLabels","emptyInitTree","Utils","uuid","TIME_FILTER","macros","widgets","BasicConfig","factory","props","setValue","number","datetime","operator","val","dateValue","dateTime","utc","valueFormat","date","sqlFormatValue","field","widget","operatorDefinition","rightFieldDef","includes","func","call","ctx","canRegroup","maxNesting","canReorder","showNot","addRuleLabel","deleteLabel","renderConjs","conjProps","conjunctionOptions","selectedConjunction","setConjunction","renderField","fieldProps","config","f","mainWidgetProps","customProps","selectedKey","setField","renderButton","buttonProps","buttonLabel","renderOperator","operatorProps","op","customOperators","supportedOperators","operators","sqlFormatInOp","sqlFormatOp","bind","noop","formatInOp","formatOp","sqlFormatNotInOp","formatNotInOp","valueSrc","splitIfString","valueType","opDef","operatorOptions","fieldDef","_operator","getCustomOperators","textWidget","types","opers","customTextWidget","customTypes","raqbConfig","isString","WhereRow","tree","setTree","configWithDefaults","initTree","checkTree","loadTree","whereJsonTree","onTreeChange","changedTree","getTree","whereString","sqlFormat","renderBuilder","flex","direction","SQLWhereRow","col","raqbFieldType","valueSources","mapFieldsToTypes","templateVars","multiVariableInWhereString","tv","multi","some","replaceAll","removeQuotesForMultiVariables","getTemplateSrv","getVariables","JSON","stringify","injectGlobal","SelectColumn","onParameterChange","selectInputId","s","SelectCustomFunctionParameters","currentColumnIndex","macroOrFunction","addParameter","index","QueryEditorExpressionType","FunctionParameter","removeParameter","columnIndex","InlineLabel","getColumnValue","param","addonAfter","SelectFunctionParameters","functions","find","fieldsFromFunction","setFieldsFromFunction","push","keepIndex","funcParam","required","SelectRow","timeSeriesAliasOpts","Timeseries","onAggregationChange","aggregation","newItem","onAliasChange","alias","removeColumn","clone","splice","addColumn","createFunctionField","aggregateOptions","startsWith","wrap","alignSelf","VisualEditor","EditorRows","SqlQueryEditor","queryHeaderProps","queryWithDefaults","setIsQueryRunnable","getDB","preconfiguredDatabase","init","applyQueryDefaults","setQueryRowFilter","setQueryToValidate","dispose","isQueryValid","process","haveColumns","Boolean"],"sourceRoot":""}
.
Edit
..
Edit
166.js
Edit
172.js
Edit
236.js
Edit
290.js
Edit
30.js
Edit
343.js
Edit
360.js
Edit
360.js.map
Edit
447.js
Edit
450.js
Edit
454.js
Edit
493.js
Edit
493.js.map
Edit
501.js
Edit
540.js
Edit
630.js
Edit
654.js
Edit
685.js
Edit
809.js
Edit
852.js
Edit
855.js
Edit
880.js
Edit
961.js
Edit
CHANGELOG.md
Edit
LICENSE
Edit
README.md
Edit
img
Edit
module.js
Edit
module.js.LICENSE.txt
Edit
module.js.map
Edit
plugin.json
Edit
sql-query-editor.js
Edit
sql-query-editor.js.map
Edit