@grafana/plugin-ui 0.13.0 → 0.14.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/dist/cjs/index.cjs +214 -224
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs/index.d.cts +2 -9
  4. package/dist/cjs/test-utils.cjs +2 -2
  5. package/dist/cjs/test-utils.cjs.map +1 -1
  6. package/dist/cjs/test-utils.d.cts +1 -1
  7. package/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js.map +1 -1
  8. package/dist/esm/components/ConfigEditor/Auth/Auth.js.map +1 -1
  9. package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js +4 -4
  10. package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js.map +1 -1
  11. package/dist/esm/components/ConfigEditor/Auth/auth-method/BasicAuth.js.map +1 -1
  12. package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeader.js.map +1 -1
  13. package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js +1 -1
  14. package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js.map +1 -1
  15. package/dist/esm/components/ConfigEditor/Auth/styles.js.map +1 -1
  16. package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js +1 -1
  17. package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js.map +1 -1
  18. package/dist/esm/components/ConfigEditor/Auth/tls/SkipTLSVerification.js.map +1 -1
  19. package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js +3 -3
  20. package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js.map +1 -1
  21. package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettings.js.map +1 -1
  22. package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettingsSection.js.map +1 -1
  23. package/dist/esm/components/ConfigEditor/Auth/types.js.map +1 -1
  24. package/dist/esm/components/ConfigEditor/Auth/utils.js +3 -3
  25. package/dist/esm/components/ConfigEditor/Auth/utils.js.map +1 -1
  26. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js +2 -2
  27. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js.map +1 -1
  28. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js.map +1 -1
  29. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js.map +1 -1
  30. package/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js.map +1 -1
  31. package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js +1 -1
  32. package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js.map +1 -1
  33. package/dist/esm/components/ConfigEditor/DataSourceDescription.js.map +1 -1
  34. package/dist/esm/components/ConfigEditor/SecureSocksProxyToggle.js.map +1 -1
  35. package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js +11 -11
  36. package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js.map +1 -1
  37. package/dist/esm/components/DataLinks/DataLink.js +4 -4
  38. package/dist/esm/components/DataLinks/DataLink.js.map +1 -1
  39. package/dist/esm/components/DataLinks/DataLinks.js +3 -3
  40. package/dist/esm/components/DataLinks/DataLinks.js.map +1 -1
  41. package/dist/esm/components/DataSourcePicker/DataSourcePicker.js +8 -8
  42. package/dist/esm/components/DataSourcePicker/DataSourcePicker.js.map +1 -1
  43. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  44. package/dist/esm/components/DatePicker/styles.js +2 -2
  45. package/dist/esm/components/DatePicker/styles.js.map +1 -1
  46. package/dist/esm/components/DatePickerWithInput/DatePickerWithInput.js.map +1 -1
  47. package/dist/esm/components/DatePickerWithInput/styles.js +2 -2
  48. package/dist/esm/components/DatePickerWithInput/styles.js.map +1 -1
  49. package/dist/esm/components/DebounceInput/DebounceInput.js.map +1 -1
  50. package/dist/esm/components/Plugins/PluginSignatureBadge.js.map +1 -1
  51. package/dist/esm/components/QueryEditor/AccessoryButton.js.map +1 -1
  52. package/dist/esm/components/QueryEditor/CatalogSelector.js +1 -1
  53. package/dist/esm/components/QueryEditor/CatalogSelector.js.map +1 -1
  54. package/dist/esm/components/QueryEditor/ConfirmModal.js +1 -1
  55. package/dist/esm/components/QueryEditor/ConfirmModal.js.map +1 -1
  56. package/dist/esm/components/QueryEditor/DatasetSelector.js +1 -1
  57. package/dist/esm/components/QueryEditor/DatasetSelector.js.map +1 -1
  58. package/dist/esm/components/QueryEditor/EditorField.js +5 -5
  59. package/dist/esm/components/QueryEditor/EditorField.js.map +1 -1
  60. package/dist/esm/components/QueryEditor/EditorFieldGroup.js.map +1 -1
  61. package/dist/esm/components/QueryEditor/EditorHeader.js +2 -2
  62. package/dist/esm/components/QueryEditor/EditorHeader.js.map +1 -1
  63. package/dist/esm/components/QueryEditor/EditorList.js.map +1 -1
  64. package/dist/esm/components/QueryEditor/EditorRow.js +4 -4
  65. package/dist/esm/components/QueryEditor/EditorRow.js.map +1 -1
  66. package/dist/esm/components/QueryEditor/EditorRows.js +2 -2
  67. package/dist/esm/components/QueryEditor/EditorRows.js.map +1 -1
  68. package/dist/esm/components/QueryEditor/EditorStack.js +1 -1
  69. package/dist/esm/components/QueryEditor/EditorStack.js.map +1 -1
  70. package/dist/esm/components/QueryEditor/EditorSwitch.js +2 -2
  71. package/dist/esm/components/QueryEditor/EditorSwitch.js.map +1 -1
  72. package/dist/esm/components/QueryEditor/FlexItem.js.map +1 -1
  73. package/dist/esm/components/QueryEditor/InlineSelect.js.map +1 -1
  74. package/dist/esm/components/QueryEditor/InputGroup.js +2 -2
  75. package/dist/esm/components/QueryEditor/InputGroup.js.map +1 -1
  76. package/dist/esm/components/QueryEditor/QueryEditor.js +7 -7
  77. package/dist/esm/components/QueryEditor/QueryEditor.js.map +1 -1
  78. package/dist/esm/components/QueryEditor/QueryHeader.js +18 -18
  79. package/dist/esm/components/QueryEditor/QueryHeader.js.map +1 -1
  80. package/dist/esm/components/QueryEditor/RunQueryButton.js +1 -1
  81. package/dist/esm/components/QueryEditor/RunQueryButton.js.map +1 -1
  82. package/dist/esm/components/QueryEditor/Space.js +17 -26
  83. package/dist/esm/components/QueryEditor/Space.js.map +1 -1
  84. package/dist/esm/components/QueryEditor/TableSelector.js.map +1 -1
  85. package/dist/esm/components/QueryEditor/defaults.js +7 -7
  86. package/dist/esm/components/QueryEditor/defaults.js.map +1 -1
  87. package/dist/esm/components/QueryEditor/expressions.js.map +1 -1
  88. package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js.map +1 -1
  89. package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js +1 -1
  90. package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js.map +1 -1
  91. package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js +4 -4
  92. package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js.map +1 -1
  93. package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js +3 -3
  94. package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js.map +1 -1
  95. package/dist/esm/components/QueryEditor/types.js.map +1 -1
  96. package/dist/esm/components/QueryEditor/utils/formatSQL.js.map +1 -1
  97. package/dist/esm/components/QueryEditor/utils/sql.utils.js +8 -8
  98. package/dist/esm/components/QueryEditor/utils/sql.utils.js.map +1 -1
  99. package/dist/esm/components/QueryEditor/utils/useSqlChange.js.map +1 -1
  100. package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js +26 -27
  101. package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js.map +1 -1
  102. package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js +3 -3
  103. package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js.map +1 -1
  104. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js +2 -2
  105. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js.map +1 -1
  106. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRows.js.map +1 -1
  107. package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js +2 -2
  108. package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js.map +1 -1
  109. package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js +4 -4
  110. package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js.map +1 -1
  111. package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js +2 -2
  112. package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js.map +1 -1
  113. package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js.map +1 -1
  114. package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js +2 -2
  115. package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js.map +1 -1
  116. package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js.map +1 -1
  117. package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js.map +1 -1
  118. package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js +9 -9
  119. package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js.map +1 -1
  120. package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js.map +1 -1
  121. package/dist/esm/components/QueryEditor/visual-query-builder/WhereRow.js.map +1 -1
  122. package/dist/esm/components/QueryEditorRow/QueryEditorRow.js.map +1 -1
  123. package/dist/esm/components/SQLEditor/components/SQLEditor.js +13 -13
  124. package/dist/esm/components/SQLEditor/components/SQLEditor.js.map +1 -1
  125. package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js +1 -1
  126. package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js.map +1 -1
  127. package/dist/esm/components/SQLEditor/mocks/Monaco.js.map +1 -1
  128. package/dist/esm/components/SQLEditor/mocks/TextModel.js.map +1 -1
  129. package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQuery.js.map +1 -1
  130. package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQueryWithAggregation.js.map +1 -1
  131. package/dist/esm/components/SQLEditor/mocks/queries/multiLineMultipleColumns.js.map +1 -1
  132. package/dist/esm/components/SQLEditor/mocks/queries/singleLineEmptyQuery.js.map +1 -1
  133. package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQuery.js.map +1 -1
  134. package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQueryWithAggregation.js.map +1 -1
  135. package/dist/esm/components/SQLEditor/mocks/queries/singleLineMultipleColumns.js.map +1 -1
  136. package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueries.js.map +1 -1
  137. package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueriesWithAggregation.js.map +1 -1
  138. package/dist/esm/components/SQLEditor/standardSql/definition.js.map +1 -1
  139. package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js +2 -2
  140. package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js.map +1 -1
  141. package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js +3 -3
  142. package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js.map +1 -1
  143. package/dist/esm/components/SQLEditor/standardSql/language.js.map +1 -1
  144. package/dist/esm/components/SQLEditor/standardSql/macros.js.map +1 -1
  145. package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js +2 -2
  146. package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js.map +1 -1
  147. package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js +1 -1
  148. package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js.map +1 -1
  149. package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js +25 -25
  150. package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js.map +1 -1
  151. package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js +1 -1
  152. package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js.map +1 -1
  153. package/dist/esm/components/SQLEditor/test-utils/index.js.map +1 -1
  154. package/dist/esm/components/SQLEditor/test-utils/statementPosition.js.map +1 -1
  155. package/dist/esm/components/SQLEditor/types.js.map +1 -1
  156. package/dist/esm/components/SQLEditor/utils/LinkedToken.js +7 -7
  157. package/dist/esm/components/SQLEditor/utils/LinkedToken.js.map +1 -1
  158. package/dist/esm/components/SQLEditor/utils/commands.js.map +1 -1
  159. package/dist/esm/components/SQLEditor/utils/debugger.js +1 -1
  160. package/dist/esm/components/SQLEditor/utils/debugger.js.map +1 -1
  161. package/dist/esm/components/SQLEditor/utils/getSuggestionKind.js.map +1 -1
  162. package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js +1 -1
  163. package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js.map +1 -1
  164. package/dist/esm/components/SQLEditor/utils/toCompletionItem.js +1 -1
  165. package/dist/esm/components/SQLEditor/utils/toCompletionItem.js.map +1 -1
  166. package/dist/esm/components/SQLEditor/utils/tokenUtils.js +9 -9
  167. package/dist/esm/components/SQLEditor/utils/tokenUtils.js.map +1 -1
  168. package/dist/esm/components/Segment/Segment.js.map +1 -1
  169. package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js +2 -2
  170. package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js.map +1 -1
  171. package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js +11 -11
  172. package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js.map +1 -1
  173. package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js +1 -1
  174. package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js.map +1 -1
  175. package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js +4 -4
  176. package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js.map +1 -1
  177. package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js +2 -3
  178. package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js.map +1 -1
  179. package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js +3 -3
  180. package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js.map +1 -1
  181. package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js +2 -2
  182. package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js.map +1 -1
  183. package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js +2 -2
  184. package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js.map +1 -1
  185. package/dist/esm/components/VisualQueryBuilder/components/OperationList.js +3 -4
  186. package/dist/esm/components/VisualQueryBuilder/components/OperationList.js.map +1 -1
  187. package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js +2 -2
  188. package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js.map +1 -1
  189. package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js +5 -6
  190. package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js.map +1 -1
  191. package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js +2 -3
  192. package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js.map +1 -1
  193. package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js +8 -8
  194. package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js.map +1 -1
  195. package/dist/esm/components/VisualQueryBuilder/components/QueryEditorModeToggle.js.map +1 -1
  196. package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js +2 -3
  197. package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js.map +1 -1
  198. package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js +0 -1
  199. package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js.map +1 -1
  200. package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js +2 -2
  201. package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js.map +1 -1
  202. package/dist/esm/components/VisualQueryBuilder/types.js.map +1 -1
  203. package/dist/esm/datasource/SqlDatasource.js +14 -14
  204. package/dist/esm/datasource/SqlDatasource.js.map +1 -1
  205. package/dist/esm/datasource/constants.js.map +1 -1
  206. package/dist/esm/hooks/useDebounce.js.map +1 -1
  207. package/dist/esm/index.d.ts +2 -9
  208. package/dist/esm/test/mocks/DataQuery.js.map +1 -1
  209. package/dist/esm/test/mocks/Datasource.js +1 -1
  210. package/dist/esm/test/mocks/Datasource.js.map +1 -1
  211. package/dist/esm/test/mocks/Plugin.js +1 -1
  212. package/dist/esm/test/mocks/Plugin.js.map +1 -1
  213. package/dist/esm/test/mocks/QueryEditorProps.js.map +1 -1
  214. package/dist/esm/test/mocks/utils.js +2 -2
  215. package/dist/esm/test/mocks/utils.js.map +1 -1
  216. package/dist/esm/test-utils.d.ts +1 -1
  217. package/package.json +13 -29
@@ -1 +1 @@
1
- {"version":3,"file":"OperationParamEditor.js","sources":["../../../../../src/components/VisualQueryBuilder/components/OperationParamEditor.tsx"],"sourcesContent":["import React, { type FunctionComponent } from 'react';\nimport { css } from '@emotion/css';\n\nimport { type GrafanaTheme2, type SelectableValue, toOption } from '@grafana/data';\nimport { AutoSizeInput, Button, Checkbox, Select, useStyles2 } from '@grafana/ui';\n\nimport { type QueryBuilderOperationParamDef, type QueryBuilderOperationParamEditorProps } from '../types';\n\nimport { EditorStack } from '../../QueryEditor';\n\nexport function getOperationParamEditor(\n paramDef: QueryBuilderOperationParamDef\n): FunctionComponent<QueryBuilderOperationParamEditorProps> {\n if (paramDef.editor) {\n return paramDef.editor;\n }\n\n if (paramDef.options) {\n return SelectInputParamEditor;\n }\n\n switch (paramDef.type) {\n case 'boolean':\n return BoolInputParamEditor;\n case 'number':\n case 'string':\n default:\n return SimpleInputParamEditor;\n }\n}\n\nfunction SimpleInputParamEditor(props: QueryBuilderOperationParamEditorProps) {\n return (\n <AutoSizeInput\n id={getOperationParamId(props.operationId, props.index)}\n defaultValue={props.value?.toString()}\n minWidth={props.paramDef.minWidth}\n placeholder={props.paramDef.placeholder}\n title={props.paramDef.description}\n maxWidth={(props.paramDef.minWidth || 20) * 3}\n onCommitChange={(evt) => {\n props.onChange(props.index, evt.currentTarget.value);\n if (props.paramDef.runQueryOnEnter && evt.type === 'keydown') {\n props.onRunQuery();\n }\n }}\n />\n );\n}\n\nfunction BoolInputParamEditor(props: QueryBuilderOperationParamEditorProps) {\n return (\n <Checkbox\n id={getOperationParamId(props.operationId, props.index)}\n value={Boolean(props.value)}\n onChange={(evt) => props.onChange(props.index, evt.currentTarget.checked)}\n />\n );\n}\n\nfunction SelectInputParamEditor({\n paramDef,\n value,\n index,\n operationId,\n onChange,\n}: QueryBuilderOperationParamEditorProps) {\n const styles = useStyles2(getStyles);\n let selectOptions = paramDef.options as SelectableValue[];\n\n if (!selectOptions[0]?.label) {\n selectOptions = paramDef.options!.map((option) => ({\n label: option.toString(),\n value: option,\n }));\n }\n\n let valueOption = selectOptions.find((x) => x.value === value) ?? toOption(value as string);\n\n // If we have optional options param and don't have value, we want to render button with which we add optional options.\n // This makes it easier to understand what needs to be selected and what is optional.\n if (!value && paramDef.optional) {\n return (\n <div className={styles.optionalParam}>\n <Button\n size=\"sm\"\n variant=\"secondary\"\n title={`Add ${paramDef.name}`}\n icon=\"plus\"\n onClick={() => onChange(index, selectOptions[0].value)}\n >\n {paramDef.name}\n </Button>\n </div>\n );\n }\n\n return (\n <EditorStack gap={0.5} direction=\"row\" alignItems=\"center\">\n <Select\n id={getOperationParamId(operationId, index)}\n value={valueOption}\n options={selectOptions}\n placeholder={paramDef.placeholder}\n allowCustomValue={true}\n onChange={(value) => onChange(index, value.value!)}\n width={paramDef.minWidth || 'auto'}\n />\n {paramDef.optional && (\n <Button\n data-testid={`operations.${index}.remove-param`}\n size=\"sm\"\n fill=\"text\"\n icon=\"times\"\n variant=\"secondary\"\n title={`Remove ${paramDef.name}`}\n onClick={() => onChange(index, '')}\n />\n )}\n </EditorStack>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n optionalParam: css({\n marginTop: theme.spacing(1),\n }),\n };\n};\n\nexport function getOperationParamId(operationId: string, paramIndex: number) {\n return `operations.${operationId}.param.${paramIndex}`;\n}\n"],"names":["value"],"mappings":"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"}
1
+ {"version":3,"file":"OperationParamEditor.js","sources":["../../../../../src/components/VisualQueryBuilder/components/OperationParamEditor.tsx"],"sourcesContent":["import React, { type FunctionComponent } from 'react';\nimport { css } from '@emotion/css';\n\nimport { type GrafanaTheme2, type SelectableValue, toOption } from '@grafana/data';\nimport { AutoSizeInput, Button, Checkbox, Select, useStyles2 } from '@grafana/ui';\n\nimport { type QueryBuilderOperationParamDef, type QueryBuilderOperationParamEditorProps } from '../types';\n\nimport { EditorStack } from '../../QueryEditor';\n\nexport function getOperationParamEditor(\n paramDef: QueryBuilderOperationParamDef\n): FunctionComponent<QueryBuilderOperationParamEditorProps> {\n if (paramDef.editor) {\n return paramDef.editor;\n }\n\n if (paramDef.options) {\n return SelectInputParamEditor;\n }\n\n switch (paramDef.type) {\n case 'boolean':\n return BoolInputParamEditor;\n case 'number':\n case 'string':\n default:\n return SimpleInputParamEditor;\n }\n}\n\nfunction SimpleInputParamEditor(props: QueryBuilderOperationParamEditorProps) {\n return (\n <AutoSizeInput\n id={getOperationParamId(props.operationId, props.index)}\n defaultValue={props.value?.toString()}\n minWidth={props.paramDef.minWidth}\n placeholder={props.paramDef.placeholder}\n title={props.paramDef.description}\n maxWidth={(props.paramDef.minWidth || 20) * 3}\n onCommitChange={(evt) => {\n props.onChange(props.index, evt.currentTarget.value);\n if (props.paramDef.runQueryOnEnter && evt.type === 'keydown') {\n props.onRunQuery();\n }\n }}\n />\n );\n}\n\nfunction BoolInputParamEditor(props: QueryBuilderOperationParamEditorProps) {\n return (\n <Checkbox\n id={getOperationParamId(props.operationId, props.index)}\n value={Boolean(props.value)}\n onChange={(evt) => props.onChange(props.index, evt.currentTarget.checked)}\n />\n );\n}\n\nfunction SelectInputParamEditor({\n paramDef,\n value,\n index,\n operationId,\n onChange,\n}: QueryBuilderOperationParamEditorProps) {\n const styles = useStyles2(getStyles);\n let selectOptions = paramDef.options as SelectableValue[];\n\n if (!selectOptions[0]?.label) {\n selectOptions = paramDef.options!.map((option) => ({\n label: option.toString(),\n value: option,\n }));\n }\n\n let valueOption = selectOptions.find((x) => x.value === value) ?? toOption(value as string);\n\n // If we have optional options param and don't have value, we want to render button with which we add optional options.\n // This makes it easier to understand what needs to be selected and what is optional.\n if (!value && paramDef.optional) {\n return (\n <div className={styles.optionalParam}>\n <Button\n size=\"sm\"\n variant=\"secondary\"\n title={`Add ${paramDef.name}`}\n icon=\"plus\"\n onClick={() => onChange(index, selectOptions[0].value)}\n >\n {paramDef.name}\n </Button>\n </div>\n );\n }\n\n return (\n <EditorStack gap={0.5} direction=\"row\" alignItems=\"center\">\n <Select\n id={getOperationParamId(operationId, index)}\n value={valueOption}\n options={selectOptions}\n placeholder={paramDef.placeholder}\n allowCustomValue={true}\n onChange={(value) => onChange(index, value.value!)}\n width={paramDef.minWidth || 'auto'}\n />\n {paramDef.optional && (\n <Button\n data-testid={`operations.${index}.remove-param`}\n size=\"sm\"\n fill=\"text\"\n icon=\"times\"\n variant=\"secondary\"\n title={`Remove ${paramDef.name}`}\n onClick={() => onChange(index, '')}\n />\n )}\n </EditorStack>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n optionalParam: css({\n marginTop: theme.spacing(1),\n }),\n };\n};\n\nexport function getOperationParamId(operationId: string, paramIndex: number) {\n return `operations.${operationId}.param.${paramIndex}`;\n}\n"],"names":["getStyles","value"],"mappings":"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"}
@@ -6,7 +6,6 @@ import '../../QueryEditor/types.js';
6
6
  import 'lodash';
7
7
  import '../../QueryEditor/EditorList.js';
8
8
  import { EditorStack } from '../../QueryEditor/EditorStack.js';
9
- import '../../QueryEditor/Space.js';
10
9
  import 'react-use';
11
10
  import '../../QueryEditor/QueryHeader.js';
12
11
  import 'react-virtualized-auto-sizer';
@@ -23,10 +22,10 @@ import 'rxjs';
23
22
  import 'rxjs/operators';
24
23
 
25
24
  function OperationsEditorRow({ children }) {
26
- const styles = useStyles2(getStyles);
25
+ const styles = useStyles2(getStyles$3);
27
26
  return /* @__PURE__ */ React.createElement("div", { className: styles.root }, /* @__PURE__ */ React.createElement(EditorStack, { gap: 1 }, children));
28
27
  }
29
- const getStyles = (theme) => {
28
+ const getStyles$3 = (theme) => {
30
29
  return {
31
30
  root: css({
32
31
  padding: theme.spacing(1, 1, 0, 1),
@@ -1 +1 @@
1
- {"version":3,"file":"OperationsEditorRow.js","sources":["../../../../../src/components/VisualQueryBuilder/components/OperationsEditorRow.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from '@emotion/css';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { EditorStack } from '../../QueryEditor';\n\nexport function OperationsEditorRow({ children }: React.PropsWithChildren<{}>) {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.root}>\n <EditorStack gap={1}>{children}</EditorStack>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n root: css({\n padding: theme.spacing(1, 1, 0, 1),\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default,\n }),\n };\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAQgB,SAAA,mBAAA,CAAoB,EAAE,QAAA,EAAyC,EAAA;AAC7E,EAAM,MAAA,MAAA,GAAS,WAAW,SAAS,CAAA;AAEnC,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,MAAO,CAAA,IAAA,EAAA,sCACpB,WAAY,EAAA,EAAA,GAAA,EAAK,CAAI,EAAA,EAAA,QAAS,CACjC,CAAA;AAEJ;AAEA,MAAM,SAAA,GAAY,CAAC,KAAyB,KAAA;AAC1C,EAAO,OAAA;AAAA,IACL,MAAM,GAAI,CAAA;AAAA,MACR,SAAS,KAAM,CAAA,OAAA,CAAQ,CAAG,EAAA,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,MACjC,eAAA,EAAiB,KAAM,CAAA,MAAA,CAAO,UAAW,CAAA,SAAA;AAAA,MACzC,YAAA,EAAc,KAAM,CAAA,KAAA,CAAM,MAAO,CAAA;AAAA,KAClC;AAAA,GACH;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"OperationsEditorRow.js","sources":["../../../../../src/components/VisualQueryBuilder/components/OperationsEditorRow.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from '@emotion/css';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { EditorStack } from '../../QueryEditor';\n\nexport function OperationsEditorRow({ children }: React.PropsWithChildren<{}>) {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.root}>\n <EditorStack gap={1}>{children}</EditorStack>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n root: css({\n padding: theme.spacing(1, 1, 0, 1),\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default,\n }),\n };\n};\n"],"names":["getStyles"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAQO,SAAS,mBAAA,CAAoB,EAAE,QAAA,EAAS,EAAgC;AAC7E,EAAA,MAAM,MAAA,GAAS,WAAWA,WAAS,CAAA;AAEnC,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,IAAA,EAAA,sCACpB,WAAA,EAAA,EAAY,GAAA,EAAK,CAAA,EAAA,EAAI,QAAS,CACjC,CAAA;AAEJ;AAEA,MAAMA,WAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,EAAA,OAAO;AAAA,IACL,MAAM,GAAA,CAAI;AAAA,MACR,SAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,MACjC,eAAA,EAAiB,KAAA,CAAM,MAAA,CAAO,UAAA,CAAW,SAAA;AAAA,MACzC,YAAA,EAAc,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO;AAAA,KAClC;AAAA,GACH;AACF,CAAA;;;;"}
@@ -14,19 +14,19 @@ const QueryBuilderHints = ({
14
14
  buildDataQueryFromQueryString,
15
15
  buildQueryStringFromDataQuery
16
16
  }) => {
17
- const styles = useStyles2(getStyles);
17
+ const styles = useStyles2(getStyles$2);
18
18
  const hints = useMemo(() => {
19
19
  var _a;
20
20
  const dataQuery = buildDataQueryFromQueryString(queryModeller.renderQuery(visualQuery));
21
- const hints2 = (_a = datasource.getQueryHints) == null ? undefined : _a.call(datasource, dataQuery, (data == null ? undefined : data.series) || []).filter((hint) => {
21
+ const hints2 = (_a = datasource.getQueryHints) == null ? void 0 : _a.call(datasource, dataQuery, (data == null ? void 0 : data.series) || []).filter((hint) => {
22
22
  var _a2;
23
- return (_a2 = hint.fix) == null ? undefined : _a2.action;
23
+ return (_a2 = hint.fix) == null ? void 0 : _a2.action;
24
24
  });
25
25
  return hints2 != null ? hints2 : [];
26
26
  }, [datasource, visualQuery, data, queryModeller, buildDataQueryFromQueryString]);
27
27
  return /* @__PURE__ */ React.createElement(React.Fragment, null, hints.length > 0 && /* @__PURE__ */ React.createElement("div", { className: styles.container }, hints.map((hint) => {
28
28
  var _a, _b, _c, _d;
29
- return /* @__PURE__ */ React.createElement(Tooltip, { content: `${hint.label} ${(_a = hint.fix) == null ? undefined : _a.label}`, key: hint.type }, /* @__PURE__ */ React.createElement(
29
+ return /* @__PURE__ */ React.createElement(Tooltip, { content: `${hint.label} ${(_a = hint.fix) == null ? void 0 : _a.label}`, key: hint.type }, /* @__PURE__ */ React.createElement(
30
30
  Button,
31
31
  {
32
32
  onClick: () => {
@@ -35,9 +35,9 @@ const QueryBuilderHints = ({
35
35
  hint: hint.type,
36
36
  datasourceType: datasource.type
37
37
  });
38
- if ((_a2 = hint == null ? undefined : hint.fix) == null ? undefined : _a2.action) {
38
+ if ((_a2 = hint == null ? void 0 : hint.fix) == null ? void 0 : _a2.action) {
39
39
  const dataQuery = buildDataQueryFromQueryString(queryModeller.renderQuery(visualQuery));
40
- const newQuery = (_b2 = datasource.modifyQuery) == null ? undefined : _b2.call(datasource, dataQuery, hint.fix.action);
40
+ const newQuery = (_b2 = datasource.modifyQuery) == null ? void 0 : _b2.call(datasource, dataQuery, hint.fix.action);
41
41
  if (newQuery) {
42
42
  const newVisualQuery = buildVisualQueryFromString(
43
43
  (_c2 = buildQueryStringFromDataQuery(newQuery)) != null ? _c2 : ""
@@ -51,12 +51,12 @@ const QueryBuilderHints = ({
51
51
  className: styles.hint
52
52
  },
53
53
  "hint: ",
54
- ((_b = hint.fix) == null ? undefined : _b.title) || ((_d = (_c = hint.fix) == null ? undefined : _c.action) == null ? undefined : _d.type.toLowerCase().replace("_", " "))
54
+ ((_b = hint.fix) == null ? void 0 : _b.title) || ((_d = (_c = hint.fix) == null ? void 0 : _c.action) == null ? void 0 : _d.type.toLowerCase().replace("_", " "))
55
55
  ));
56
56
  })));
57
57
  };
58
58
  QueryBuilderHints.displayName = "QueryBuilderHints";
59
- const getStyles = (theme) => {
59
+ const getStyles$2 = (theme) => {
60
60
  return {
61
61
  container: css`
62
62
  display: flex;
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilderHints.js","sources":["../../../../../src/components/VisualQueryBuilder/components/QueryBuilderHints.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport React, { useMemo } from 'react';\n\nimport { type DataSourceApi, type GrafanaTheme2, type PanelData, type DataQuery } from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Button, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { type VisualQuery, type VisualQueryModeller } from '../types';\n\ninterface Props<TVisualQuery extends VisualQuery, TDataQuery extends DataQuery> {\n query: TVisualQuery;\n datasource: DataSourceApi<TDataQuery>;\n queryModeller: VisualQueryModeller;\n buildVisualQueryFromString: (queryString: string) => { query: TVisualQuery };\n buildDataQueryFromQueryString: (queryString: string) => TDataQuery;\n buildQueryStringFromDataQuery: (dataQuery: TDataQuery) => string;\n onChange: (update: TVisualQuery) => void;\n data?: PanelData;\n}\n\nexport const QueryBuilderHints = <TVisualQuery extends VisualQuery, TDataQuery extends DataQuery>({\n datasource,\n query: visualQuery,\n onChange,\n data,\n queryModeller,\n buildVisualQueryFromString,\n buildDataQueryFromQueryString,\n buildQueryStringFromDataQuery,\n}: Props<TVisualQuery, TDataQuery>) => {\n const styles = useStyles2(getStyles);\n\n const hints = useMemo(() => {\n const dataQuery = buildDataQueryFromQueryString(queryModeller.renderQuery(visualQuery));\n // For now show only actionable hints\n const hints = datasource.getQueryHints?.(dataQuery, data?.series || []).filter((hint) => hint.fix?.action);\n return hints ?? [];\n }, [datasource, visualQuery, data, queryModeller, buildDataQueryFromQueryString]);\n\n return (\n <>\n {hints.length > 0 && (\n <div className={styles.container}>\n {hints.map((hint) => {\n return (\n <Tooltip content={`${hint.label} ${hint.fix?.label}`} key={hint.type}>\n <Button\n onClick={() => {\n reportInteraction('grafana_query_builder_hints_clicked', {\n hint: hint.type,\n datasourceType: datasource.type,\n });\n\n if (hint?.fix?.action) {\n const dataQuery = buildDataQueryFromQueryString(queryModeller.renderQuery(visualQuery));\n const newQuery = datasource.modifyQuery?.(dataQuery, hint.fix.action);\n if (newQuery) {\n const newVisualQuery = buildVisualQueryFromString(\n buildQueryStringFromDataQuery(newQuery) ?? ''\n );\n return onChange(newVisualQuery.query);\n }\n }\n }}\n fill=\"outline\"\n size=\"sm\"\n className={styles.hint}\n >\n hint: {hint.fix?.title || hint.fix?.action?.type.toLowerCase().replace('_', ' ')}\n </Button>\n </Tooltip>\n );\n })}\n </div>\n )}\n </>\n );\n};\n\nQueryBuilderHints.displayName = 'QueryBuilderHints';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css`\n display: flex;\n align-items: start;\n `,\n hint: css`\n margin-right: ${theme.spacing(1)};\n `,\n };\n};\n"],"names":["hints","_a","_b","_c"],"mappings":"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"}
1
+ {"version":3,"file":"QueryBuilderHints.js","sources":["../../../../../src/components/VisualQueryBuilder/components/QueryBuilderHints.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport React, { useMemo } from 'react';\n\nimport { type DataSourceApi, type GrafanaTheme2, type PanelData, type DataQuery } from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Button, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { type VisualQuery, type VisualQueryModeller } from '../types';\n\ninterface Props<TVisualQuery extends VisualQuery, TDataQuery extends DataQuery> {\n query: TVisualQuery;\n datasource: DataSourceApi<TDataQuery>;\n queryModeller: VisualQueryModeller;\n buildVisualQueryFromString: (queryString: string) => { query: TVisualQuery };\n buildDataQueryFromQueryString: (queryString: string) => TDataQuery;\n buildQueryStringFromDataQuery: (dataQuery: TDataQuery) => string;\n onChange: (update: TVisualQuery) => void;\n data?: PanelData;\n}\n\nexport const QueryBuilderHints = <TVisualQuery extends VisualQuery, TDataQuery extends DataQuery>({\n datasource,\n query: visualQuery,\n onChange,\n data,\n queryModeller,\n buildVisualQueryFromString,\n buildDataQueryFromQueryString,\n buildQueryStringFromDataQuery,\n}: Props<TVisualQuery, TDataQuery>) => {\n const styles = useStyles2(getStyles);\n\n const hints = useMemo(() => {\n const dataQuery = buildDataQueryFromQueryString(queryModeller.renderQuery(visualQuery));\n // For now show only actionable hints\n const hints = datasource.getQueryHints?.(dataQuery, data?.series || []).filter((hint) => hint.fix?.action);\n return hints ?? [];\n }, [datasource, visualQuery, data, queryModeller, buildDataQueryFromQueryString]);\n\n return (\n <>\n {hints.length > 0 && (\n <div className={styles.container}>\n {hints.map((hint) => {\n return (\n <Tooltip content={`${hint.label} ${hint.fix?.label}`} key={hint.type}>\n <Button\n onClick={() => {\n reportInteraction('grafana_query_builder_hints_clicked', {\n hint: hint.type,\n datasourceType: datasource.type,\n });\n\n if (hint?.fix?.action) {\n const dataQuery = buildDataQueryFromQueryString(queryModeller.renderQuery(visualQuery));\n const newQuery = datasource.modifyQuery?.(dataQuery, hint.fix.action);\n if (newQuery) {\n const newVisualQuery = buildVisualQueryFromString(\n buildQueryStringFromDataQuery(newQuery) ?? ''\n );\n return onChange(newVisualQuery.query);\n }\n }\n }}\n fill=\"outline\"\n size=\"sm\"\n className={styles.hint}\n >\n hint: {hint.fix?.title || hint.fix?.action?.type.toLowerCase().replace('_', ' ')}\n </Button>\n </Tooltip>\n );\n })}\n </div>\n )}\n </>\n );\n};\n\nQueryBuilderHints.displayName = 'QueryBuilderHints';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css`\n display: flex;\n align-items: start;\n `,\n hint: css`\n margin-right: ${theme.spacing(1)};\n `,\n };\n};\n"],"names":["getStyles","hints","_a","_b","_c"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"QueryEditorModeToggle.js","sources":["../../../../../src/components/VisualQueryBuilder/components/QueryEditorModeToggle.tsx"],"sourcesContent":["import React from 'react';\nimport { RadioButtonGroup } from '@grafana/ui';\nimport { QueryEditorMode } from '../types';\n\ninterface Props {\n mode: QueryEditorMode;\n onChange: (mode: QueryEditorMode) => void;\n}\n\nconst editorModes = [\n { label: 'Builder', value: QueryEditorMode.Builder },\n { label: 'Code', value: QueryEditorMode.Code },\n];\n\nexport function QueryEditorModeToggle({ mode, onChange }: Props) {\n return (\n <div data-testid={'QueryEditorModeToggle'}>\n <RadioButtonGroup options={editorModes} size=\"sm\" value={mode} onChange={onChange} />\n </div>\n );\n}\n"],"names":[],"mappings":";;;;AASA,MAAM,WAAc,GAAA;AAAA,EAClB,EAAE,KAAA,EAAO,SAAW,EAAA,KAAA,EAAO,gBAAgB,OAAQ,EAAA;AAAA,EACnD,EAAE,KAAA,EAAO,MAAQ,EAAA,KAAA,EAAO,gBAAgB,IAAK;AAC/C,CAAA;AAEO,SAAS,qBAAsB,CAAA,EAAE,IAAM,EAAA,QAAA,EAAmB,EAAA;AAC/D,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,aAAa,EAAA,uBAAA,EAAA,kBACf,KAAA,CAAA,aAAA,CAAA,gBAAA,EAAA,EAAiB,OAAS,EAAA,WAAA,EAAa,IAAK,EAAA,IAAA,EAAK,KAAO,EAAA,IAAA,EAAM,UAAoB,CACrF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"QueryEditorModeToggle.js","sources":["../../../../../src/components/VisualQueryBuilder/components/QueryEditorModeToggle.tsx"],"sourcesContent":["import React from 'react';\nimport { RadioButtonGroup } from '@grafana/ui';\nimport { QueryEditorMode } from '../types';\n\ninterface Props {\n mode: QueryEditorMode;\n onChange: (mode: QueryEditorMode) => void;\n}\n\nconst editorModes = [\n { label: 'Builder', value: QueryEditorMode.Builder },\n { label: 'Code', value: QueryEditorMode.Code },\n];\n\nexport function QueryEditorModeToggle({ mode, onChange }: Props) {\n return (\n <div data-testid={'QueryEditorModeToggle'}>\n <RadioButtonGroup options={editorModes} size=\"sm\" value={mode} onChange={onChange} />\n </div>\n );\n}\n"],"names":[],"mappings":";;;;AASA,MAAM,WAAA,GAAc;AAAA,EAClB,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,gBAAgB,OAAA,EAAQ;AAAA,EACnD,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,gBAAgB,IAAA;AAC1C,CAAA;AAEO,SAAS,qBAAA,CAAsB,EAAE,IAAA,EAAM,QAAA,EAAS,EAAU;AAC/D,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAa,uBAAA,EAAA,kBAChB,KAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAS,WAAA,EAAa,IAAA,EAAK,IAAA,EAAK,KAAA,EAAO,IAAA,EAAM,UAAoB,CACrF,CAAA;AAEJ;;;;"}
@@ -6,7 +6,6 @@ import { useStyles2, Switch } from '@grafana/ui';
6
6
  import '../../QueryEditor/types.js';
7
7
  import '../../QueryEditor/EditorList.js';
8
8
  import { EditorStack } from '../../QueryEditor/EditorStack.js';
9
- import '../../QueryEditor/Space.js';
10
9
  import 'react-use';
11
10
  import '../../QueryEditor/QueryHeader.js';
12
11
  import 'react-virtualized-auto-sizer';
@@ -25,10 +24,10 @@ import 'rxjs/operators';
25
24
  function QueryHeaderSwitch({ label, ...inputProps }) {
26
25
  const dashedLabel = label.replace(" ", "-");
27
26
  const switchIdRef = useRef(uniqueId(`switch-${dashedLabel}`));
28
- const styles = useStyles2(getStyles);
27
+ const styles = useStyles2(getStyles$1);
29
28
  return /* @__PURE__ */ React.createElement(EditorStack, { gap: 1 }, /* @__PURE__ */ React.createElement("label", { htmlFor: switchIdRef.current, className: styles.switchLabel }, label), /* @__PURE__ */ React.createElement(Switch, { ...inputProps, id: switchIdRef.current }));
30
29
  }
31
- const getStyles = (theme) => {
30
+ const getStyles$1 = (theme) => {
32
31
  return {
33
32
  switchLabel: css({
34
33
  color: theme.colors.text.secondary,
@@ -1 +1 @@
1
- {"version":3,"file":"QueryHeaderSwitch.js","sources":["../../../../../src/components/VisualQueryBuilder/components/QueryHeaderSwitch.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport React, { type HTMLProps, useRef } from 'react';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Switch, useStyles2 } from '@grafana/ui';\n\nimport { EditorStack } from '../../QueryEditor';\n\ninterface Props extends Omit<HTMLProps<HTMLInputElement>, 'value' | 'ref'> {\n value?: boolean;\n label: string;\n}\n\nexport function QueryHeaderSwitch({ label, ...inputProps }: Props) {\n const dashedLabel = label.replace(' ', '-');\n const switchIdRef = useRef(uniqueId(`switch-${dashedLabel}`));\n const styles = useStyles2(getStyles);\n\n return (\n <EditorStack gap={1}>\n <label htmlFor={switchIdRef.current} className={styles.switchLabel}>\n {label}\n </label>\n <Switch {...inputProps} id={switchIdRef.current} />\n </EditorStack>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n switchLabel: css({\n color: theme.colors.text.secondary,\n cursor: 'pointer',\n fontSize: theme.typography.bodySmall.fontSize,\n '&:hover': {\n color: theme.colors.text.primary,\n },\n }),\n };\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAcO,SAAS,iBAAkB,CAAA,EAAE,KAAO,EAAA,GAAG,YAAqB,EAAA;AACjE,EAAA,MAAM,WAAc,GAAA,KAAA,CAAM,OAAQ,CAAA,GAAA,EAAK,GAAG,CAAA;AAC1C,EAAA,MAAM,cAAc,MAAO,CAAA,QAAA,CAAS,CAAU,OAAA,EAAA,WAAW,EAAE,CAAC,CAAA;AAC5D,EAAM,MAAA,MAAA,GAAS,WAAW,SAAS,CAAA;AAEnC,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,eAAY,GAAK,EAAA,CAAA,EAAA,sCACf,OAAM,EAAA,EAAA,OAAA,EAAS,YAAY,OAAS,EAAA,SAAA,EAAW,OAAO,WACpD,EAAA,EAAA,KACH,mBACC,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAQ,GAAG,UAAY,EAAA,EAAA,EAAI,WAAY,CAAA,OAAA,EAAS,CACnD,CAAA;AAEJ;AAEA,MAAM,SAAA,GAAY,CAAC,KAAyB,KAAA;AAC1C,EAAO,OAAA;AAAA,IACL,aAAa,GAAI,CAAA;AAAA,MACf,KAAA,EAAO,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA,SAAA;AAAA,MACzB,MAAQ,EAAA,SAAA;AAAA,MACR,QAAA,EAAU,KAAM,CAAA,UAAA,CAAW,SAAU,CAAA,QAAA;AAAA,MACrC,SAAW,EAAA;AAAA,QACT,KAAA,EAAO,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA;AAAA;AAC3B,KACD;AAAA,GACH;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"QueryHeaderSwitch.js","sources":["../../../../../src/components/VisualQueryBuilder/components/QueryHeaderSwitch.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport React, { type HTMLProps, useRef } from 'react';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Switch, useStyles2 } from '@grafana/ui';\n\nimport { EditorStack } from '../../QueryEditor';\n\ninterface Props extends Omit<HTMLProps<HTMLInputElement>, 'value' | 'ref'> {\n value?: boolean;\n label: string;\n}\n\nexport function QueryHeaderSwitch({ label, ...inputProps }: Props) {\n const dashedLabel = label.replace(' ', '-');\n const switchIdRef = useRef(uniqueId(`switch-${dashedLabel}`));\n const styles = useStyles2(getStyles);\n\n return (\n <EditorStack gap={1}>\n <label htmlFor={switchIdRef.current} className={styles.switchLabel}>\n {label}\n </label>\n <Switch {...inputProps} id={switchIdRef.current} />\n </EditorStack>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n switchLabel: css({\n color: theme.colors.text.secondary,\n cursor: 'pointer',\n fontSize: theme.typography.bodySmall.fontSize,\n '&:hover': {\n color: theme.colors.text.primary,\n },\n }),\n };\n};\n"],"names":["getStyles"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAcO,SAAS,iBAAA,CAAkB,EAAE,KAAA,EAAO,GAAG,YAAW,EAAU;AACjE,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AAC1C,EAAA,MAAM,cAAc,MAAA,CAAO,QAAA,CAAS,CAAA,OAAA,EAAU,WAAW,EAAE,CAAC,CAAA;AAC5D,EAAA,MAAM,MAAA,GAAS,WAAWA,WAAS,CAAA;AAEnC,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,eAAY,GAAA,EAAK,CAAA,EAAA,sCACf,OAAA,EAAA,EAAM,OAAA,EAAS,YAAY,OAAA,EAAS,SAAA,EAAW,OAAO,WAAA,EAAA,EACpD,KACH,mBACA,KAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAQ,GAAG,UAAA,EAAY,EAAA,EAAI,WAAA,CAAY,OAAA,EAAS,CACnD,CAAA;AAEJ;AAEA,MAAMA,WAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,EAAA,OAAO;AAAA,IACL,aAAa,GAAA,CAAI;AAAA,MACf,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,SAAA;AAAA,MACzB,MAAA,EAAQ,SAAA;AAAA,MACR,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,SAAA,CAAU,QAAA;AAAA,MACrC,SAAA,EAAW;AAAA,QACT,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK;AAAA;AAC3B,KACD;AAAA,GACH;AACF,CAAA;;;;"}
@@ -8,7 +8,6 @@ import '../../QueryEditor/types.js';
8
8
  import 'lodash';
9
9
  import '../../QueryEditor/EditorList.js';
10
10
  import { EditorStack } from '../../QueryEditor/EditorStack.js';
11
- import '../../QueryEditor/Space.js';
12
11
  import '../../QueryEditor/QueryHeader.js';
13
12
  import 'react-virtualized-auto-sizer';
14
13
  import 'sql-formatter-plus';
@@ -1 +1 @@
1
- {"version":3,"file":"QueryOptionGroup.js","sources":["../../../../../src/components/VisualQueryBuilder/components/QueryOptionGroup.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from '@emotion/css';\nimport { useToggle } from 'react-use';\n\nimport { getValueFormat, type GrafanaTheme2 } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { Collapse, Icon, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { type QueryStats } from '../types';\nimport { EditorStack } from '../../QueryEditor';\n\ninterface Props {\n title: string;\n collapsedInfo: string[];\n queryStats?: QueryStats | null;\n}\n\nexport function QueryOptionGroup({ title, children, collapsedInfo, queryStats }: React.PropsWithChildren<Props>) {\n const [isOpen, toggleOpen] = useToggle(false);\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.wrapper}>\n <Collapse\n className={styles.collapse}\n collapsible\n isOpen={isOpen}\n onToggle={toggleOpen}\n label={\n <EditorStack gap={0}>\n <h6 className={styles.title}>{title}</h6>\n {!isOpen && (\n <div className={styles.description}>\n {collapsedInfo.map((x, i) => (\n <span key={i}>{x}</span>\n ))}\n </div>\n )}\n </EditorStack>\n }\n >\n <div className={styles.body}>{children}</div>\n </Collapse>\n <div className={styles.queryStatsWrap}>\n {/**TODO: This is Loki logic that should eventually be moved to Loki */}\n {queryStats && config.featureToggles.lokiQuerySplitting && (\n <Tooltip content=\"Note: the query will be split into multiple parts and executed in sequence. Query limits will only apply each individual part.\">\n <Icon tabIndex={0} name=\"info-circle\" className={styles.tooltip} size=\"sm\" />\n </Tooltip>\n )}\n\n {queryStats && <p className={styles.stats}>{generateQueryStats(queryStats)}</p>}\n </div>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n collapse: css({\n backgroundColor: 'unset',\n border: 'unset',\n marginBottom: 0,\n\n ['> button']: {\n padding: theme.spacing(0, 1),\n },\n }),\n wrapper: css({\n width: '100%',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n }),\n title: css({\n flexGrow: 1,\n overflow: 'hidden',\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n margin: 0,\n }),\n description: css({\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.bodySmall.fontWeight,\n paddingLeft: theme.spacing(2),\n gap: theme.spacing(2),\n display: 'flex',\n }),\n body: css({\n display: 'flex',\n gap: theme.spacing(2),\n flexWrap: 'wrap',\n }),\n queryStatsWrap: css({\n display: 'flex',\n alignItems: 'center',\n alignSelf: 'flex-start',\n label: 'query-stats-wrap',\n padding: theme.spacing(1),\n }),\n stats: css({\n margin: '0px',\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n tooltip: css({\n marginRight: theme.spacing(0.25),\n }),\n };\n};\n\nconst generateQueryStats = (queryStats: QueryStats) => {\n if (queryStats.message) {\n return queryStats.message;\n }\n\n return `This query will process approximately ${convertUnits(queryStats)}.`;\n};\n\nconst convertUnits = (queryStats: QueryStats): string => {\n const { text, suffix } = getValueFormat('bytes')(queryStats.bytes, 1);\n return text + suffix;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryOptionGroup.js","sources":["../../../../../src/components/VisualQueryBuilder/components/QueryOptionGroup.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from '@emotion/css';\nimport { useToggle } from 'react-use';\n\nimport { getValueFormat, type GrafanaTheme2 } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { Collapse, Icon, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { type QueryStats } from '../types';\nimport { EditorStack } from '../../QueryEditor';\n\ninterface Props {\n title: string;\n collapsedInfo: string[];\n queryStats?: QueryStats | null;\n}\n\nexport function QueryOptionGroup({ title, children, collapsedInfo, queryStats }: React.PropsWithChildren<Props>) {\n const [isOpen, toggleOpen] = useToggle(false);\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.wrapper}>\n <Collapse\n className={styles.collapse}\n collapsible\n isOpen={isOpen}\n onToggle={toggleOpen}\n label={\n <EditorStack gap={0}>\n <h6 className={styles.title}>{title}</h6>\n {!isOpen && (\n <div className={styles.description}>\n {collapsedInfo.map((x, i) => (\n <span key={i}>{x}</span>\n ))}\n </div>\n )}\n </EditorStack>\n }\n >\n <div className={styles.body}>{children}</div>\n </Collapse>\n <div className={styles.queryStatsWrap}>\n {/**TODO: This is Loki logic that should eventually be moved to Loki */}\n {queryStats && config.featureToggles.lokiQuerySplitting && (\n <Tooltip content=\"Note: the query will be split into multiple parts and executed in sequence. Query limits will only apply each individual part.\">\n <Icon tabIndex={0} name=\"info-circle\" className={styles.tooltip} size=\"sm\" />\n </Tooltip>\n )}\n\n {queryStats && <p className={styles.stats}>{generateQueryStats(queryStats)}</p>}\n </div>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n collapse: css({\n backgroundColor: 'unset',\n border: 'unset',\n marginBottom: 0,\n\n ['> button']: {\n padding: theme.spacing(0, 1),\n },\n }),\n wrapper: css({\n width: '100%',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n }),\n title: css({\n flexGrow: 1,\n overflow: 'hidden',\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n margin: 0,\n }),\n description: css({\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.bodySmall.fontWeight,\n paddingLeft: theme.spacing(2),\n gap: theme.spacing(2),\n display: 'flex',\n }),\n body: css({\n display: 'flex',\n gap: theme.spacing(2),\n flexWrap: 'wrap',\n }),\n queryStatsWrap: css({\n display: 'flex',\n alignItems: 'center',\n alignSelf: 'flex-start',\n label: 'query-stats-wrap',\n padding: theme.spacing(1),\n }),\n stats: css({\n margin: '0px',\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n tooltip: css({\n marginRight: theme.spacing(0.25),\n }),\n };\n};\n\nconst generateQueryStats = (queryStats: QueryStats) => {\n if (queryStats.message) {\n return queryStats.message;\n }\n\n return `This query will process approximately ${convertUnits(queryStats)}.`;\n};\n\nconst convertUnits = (queryStats: QueryStats): string => {\n const { text, suffix } = getValueFormat('bytes')(queryStats.bytes, 1);\n return text + suffix;\n};\n"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import { useTheme2 } from '@grafana/ui';
6
6
 
7
7
  function RawQuery({ query, language, className }) {
8
8
  const theme = useTheme2();
9
- const styles = getStyles(theme);
9
+ const styles = getStyles$4(theme);
10
10
  const highlighted = Prism.highlight(query, language.grammar, language.name);
11
11
  return /* @__PURE__ */ React.createElement(
12
12
  "div",
@@ -17,7 +17,7 @@ function RawQuery({ query, language, className }) {
17
17
  }
18
18
  );
19
19
  }
20
- const getStyles = (theme) => {
20
+ const getStyles$4 = (theme) => {
21
21
  return {
22
22
  editorField: css({
23
23
  fontFamily: theme.typography.fontFamilyMonospace,
@@ -1 +1 @@
1
- {"version":3,"file":"RawQuery.js","sources":["../../../../../src/components/VisualQueryBuilder/components/RawQuery.tsx"],"sourcesContent":["import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport Prism, { type Grammar } from 'prismjs';\n\nimport { type GrafanaTheme2, textUtil } from '@grafana/data';\nimport { useTheme2 } from '@grafana/ui';\n\ninterface Props {\n query: string;\n language: {\n grammar: Grammar;\n name: string;\n };\n className?: string;\n}\nexport function RawQuery({ query, language, className }: Props) {\n const theme = useTheme2();\n const styles = getStyles(theme);\n const highlighted = Prism.highlight(query, language.grammar, language.name);\n\n return (\n <div\n className={cx(styles.editorField, 'prism-syntax-highlight', className)}\n aria-label=\"selector\"\n dangerouslySetInnerHTML={{ __html: textUtil.sanitize(highlighted) }}\n />\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n editorField: css({\n fontFamily: theme.typography.fontFamilyMonospace,\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n };\n};\n"],"names":[],"mappings":";;;;;;AAeO,SAAS,QAAS,CAAA,EAAE,KAAO,EAAA,QAAA,EAAU,WAAoB,EAAA;AAC9D,EAAA,MAAM,QAAQ,SAAU,EAAA;AACxB,EAAM,MAAA,MAAA,GAAS,UAAU,KAAK,CAAA;AAC9B,EAAA,MAAM,cAAc,KAAM,CAAA,SAAA,CAAU,OAAO,QAAS,CAAA,OAAA,EAAS,SAAS,IAAI,CAAA;AAE1E,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAW,EAAA,EAAA,CAAG,MAAO,CAAA,WAAA,EAAa,0BAA0B,SAAS,CAAA;AAAA,MACrE,YAAW,EAAA,UAAA;AAAA,MACX,yBAAyB,EAAE,MAAA,EAAQ,QAAS,CAAA,QAAA,CAAS,WAAW,CAAE;AAAA;AAAA,GACpE;AAEJ;AAEA,MAAM,SAAA,GAAY,CAAC,KAAyB,KAAA;AAC1C,EAAO,OAAA;AAAA,IACL,aAAa,GAAI,CAAA;AAAA,MACf,UAAA,EAAY,MAAM,UAAW,CAAA,mBAAA;AAAA,MAC7B,QAAA,EAAU,KAAM,CAAA,UAAA,CAAW,SAAU,CAAA;AAAA,KACtC;AAAA,GACH;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"RawQuery.js","sources":["../../../../../src/components/VisualQueryBuilder/components/RawQuery.tsx"],"sourcesContent":["import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport Prism, { type Grammar } from 'prismjs';\n\nimport { type GrafanaTheme2, textUtil } from '@grafana/data';\nimport { useTheme2 } from '@grafana/ui';\n\ninterface Props {\n query: string;\n language: {\n grammar: Grammar;\n name: string;\n };\n className?: string;\n}\nexport function RawQuery({ query, language, className }: Props) {\n const theme = useTheme2();\n const styles = getStyles(theme);\n const highlighted = Prism.highlight(query, language.grammar, language.name);\n\n return (\n <div\n className={cx(styles.editorField, 'prism-syntax-highlight', className)}\n aria-label=\"selector\"\n dangerouslySetInnerHTML={{ __html: textUtil.sanitize(highlighted) }}\n />\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n editorField: css({\n fontFamily: theme.typography.fontFamilyMonospace,\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n };\n};\n"],"names":["getStyles"],"mappings":";;;;;;AAeO,SAAS,QAAA,CAAS,EAAE,KAAA,EAAO,QAAA,EAAU,WAAU,EAAU;AAC9D,EAAA,MAAM,QAAQ,SAAA,EAAU;AACxB,EAAA,MAAM,MAAA,GAASA,YAAU,KAAK,CAAA;AAC9B,EAAA,MAAM,cAAc,KAAA,CAAM,SAAA,CAAU,OAAO,QAAA,CAAS,OAAA,EAAS,SAAS,IAAI,CAAA;AAE1E,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,MAAA,CAAO,WAAA,EAAa,0BAA0B,SAAS,CAAA;AAAA,MACrE,YAAA,EAAW,UAAA;AAAA,MACX,yBAAyB,EAAE,MAAA,EAAQ,QAAA,CAAS,QAAA,CAAS,WAAW,CAAA;AAAE;AAAA,GACpE;AAEJ;AAEA,MAAMA,WAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,EAAA,OAAO;AAAA,IACL,aAAa,GAAA,CAAI;AAAA,MACf,UAAA,EAAY,MAAM,UAAA,CAAW,mBAAA;AAAA,MAC7B,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,SAAA,CAAU;AAAA,KACtC;AAAA,GACH;AACF,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../../src/components/VisualQueryBuilder/types.ts"],"sourcesContent":["import { type FunctionComponent } from 'react';\n\nimport { type DataSourceApi, type RegistryItem, type SelectableValue, type TimeRange } from '@grafana/data';\n\nexport interface QueryBuilderLabelFilter {\n label: string;\n op: string;\n value: string;\n}\n\nexport interface QueryBuilderOperation {\n id: string;\n params: QueryBuilderOperationParamValue[];\n disabled?: boolean;\n}\n\nexport interface QueryBuilderOperationDefinition<T = any> extends RegistryItem {\n documentation?: string;\n params: QueryBuilderOperationParamDef[];\n defaultParams: QueryBuilderOperationParamValue[];\n category: string;\n hideFromList?: boolean;\n alternativesKey?: string;\n /** Can be used to control operation placement when adding a new operations, lower are placed first */\n orderRank?: number;\n renderer: QueryBuilderOperationRenderer;\n addOperationHandler: QueryBuilderAddOperationHandler<T>;\n paramChangedHandler?: QueryBuilderOnParamChangedHandler;\n explainHandler?: QueryBuilderExplainOperationHandler;\n changeTypeHandler?: (op: QueryBuilderOperation, newDef: QueryBuilderOperationDefinition<T>) => QueryBuilderOperation;\n toggleable?: boolean;\n}\n\ntype QueryBuilderAddOperationHandler<T> = (\n def: QueryBuilderOperationDefinition,\n query: T,\n modeller: VisualQueryModeller\n) => T;\n\ntype QueryBuilderExplainOperationHandler = (op: QueryBuilderOperation, def?: QueryBuilderOperationDefinition) => string;\n\ntype QueryBuilderOnParamChangedHandler = (\n index: number,\n operation: QueryBuilderOperation,\n operationDef: QueryBuilderOperationDefinition\n) => QueryBuilderOperation;\n\ntype QueryBuilderOperationRenderer = (\n model: QueryBuilderOperation,\n def: QueryBuilderOperationDefinition,\n innerQuery: string\n) => string;\n\nexport type QueryBuilderOperationParamValue = string | number | boolean;\n\nexport interface QueryBuilderOperationParamDef {\n name: string;\n type: 'string' | 'number' | 'boolean';\n options?: string[] | number[] | Array<SelectableValue<string>>;\n hideName?: boolean;\n restParam?: boolean;\n optional?: boolean;\n placeholder?: string;\n description?: string;\n minWidth?: number;\n editor?: FunctionComponent<QueryBuilderOperationParamEditorProps>;\n runQueryOnEnter?: boolean;\n}\n\nexport interface QueryBuilderOperationParamEditorProps {\n value?: QueryBuilderOperationParamValue;\n paramDef: QueryBuilderOperationParamDef;\n /** Parameter index */\n index: number;\n operation: QueryBuilderOperation;\n operationId: string;\n query: any;\n datasource: DataSourceApi;\n timeRange?: TimeRange;\n onChange: (index: number, value: QueryBuilderOperationParamValue) => void;\n onRunQuery: () => void;\n queryModeller: VisualQueryModeller;\n}\n\nexport enum QueryEditorMode {\n Code = 'code',\n Builder = 'builder',\n}\n\nexport type QueryStats = {\n bytes: number;\n // The error message displayed in the UI when we cant estimate the size of the query.\n message?: string;\n};\n\nexport interface VisualQueryModeller {\n getOperationsForCategory(category: string): QueryBuilderOperationDefinition[];\n getAlternativeOperations(key: string): QueryBuilderOperationDefinition[];\n getCategories(): string[];\n getOperationDefinition(id: string): QueryBuilderOperationDefinition | undefined;\n renderQuery(query: VisualQuery, nested?: boolean): string;\n renderLabels(labels: QueryBuilderLabelFilter[]): string;\n innerQueryPlaceholder: string;\n}\n\nexport interface VisualQueryBinary<T> {\n operator: string;\n vectorMatchesType?: 'on' | 'ignoring';\n vectorMatches?: string;\n query: T;\n}\n\nexport const BINARY_OPERATIONS_KEY = 'Binary operations';\n\nexport interface VisualQuery {\n metric?: string;\n labels: QueryBuilderLabelFilter[];\n operations: QueryBuilderOperation[];\n binaryQueries?: Array<VisualQueryBinary<VisualQuery>>;\n}\n"],"names":["QueryEditorMode"],"mappings":";;;AAoFY,IAAA,eAAA,qBAAAA,gBAAL,KAAA;AACL,EAAAA,iBAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,iBAAA,SAAU,CAAA,GAAA,SAAA;AAFA,EAAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AA4BL,MAAM,qBAAwB,GAAA;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../../../../src/components/VisualQueryBuilder/types.ts"],"sourcesContent":["import { type FunctionComponent } from 'react';\n\nimport { type DataSourceApi, type RegistryItem, type SelectableValue, type TimeRange } from '@grafana/data';\n\nexport interface QueryBuilderLabelFilter {\n label: string;\n op: string;\n value: string;\n}\n\nexport interface QueryBuilderOperation {\n id: string;\n params: QueryBuilderOperationParamValue[];\n disabled?: boolean;\n}\n\nexport interface QueryBuilderOperationDefinition<T = any> extends RegistryItem {\n documentation?: string;\n params: QueryBuilderOperationParamDef[];\n defaultParams: QueryBuilderOperationParamValue[];\n category: string;\n hideFromList?: boolean;\n alternativesKey?: string;\n /** Can be used to control operation placement when adding a new operations, lower are placed first */\n orderRank?: number;\n renderer: QueryBuilderOperationRenderer;\n addOperationHandler: QueryBuilderAddOperationHandler<T>;\n paramChangedHandler?: QueryBuilderOnParamChangedHandler;\n explainHandler?: QueryBuilderExplainOperationHandler;\n changeTypeHandler?: (op: QueryBuilderOperation, newDef: QueryBuilderOperationDefinition<T>) => QueryBuilderOperation;\n toggleable?: boolean;\n}\n\ntype QueryBuilderAddOperationHandler<T> = (\n def: QueryBuilderOperationDefinition,\n query: T,\n modeller: VisualQueryModeller\n) => T;\n\ntype QueryBuilderExplainOperationHandler = (op: QueryBuilderOperation, def?: QueryBuilderOperationDefinition) => string;\n\ntype QueryBuilderOnParamChangedHandler = (\n index: number,\n operation: QueryBuilderOperation,\n operationDef: QueryBuilderOperationDefinition\n) => QueryBuilderOperation;\n\ntype QueryBuilderOperationRenderer = (\n model: QueryBuilderOperation,\n def: QueryBuilderOperationDefinition,\n innerQuery: string\n) => string;\n\nexport type QueryBuilderOperationParamValue = string | number | boolean;\n\nexport interface QueryBuilderOperationParamDef {\n name: string;\n type: 'string' | 'number' | 'boolean';\n options?: string[] | number[] | Array<SelectableValue<string>>;\n hideName?: boolean;\n restParam?: boolean;\n optional?: boolean;\n placeholder?: string;\n description?: string;\n minWidth?: number;\n editor?: FunctionComponent<QueryBuilderOperationParamEditorProps>;\n runQueryOnEnter?: boolean;\n}\n\nexport interface QueryBuilderOperationParamEditorProps {\n value?: QueryBuilderOperationParamValue;\n paramDef: QueryBuilderOperationParamDef;\n /** Parameter index */\n index: number;\n operation: QueryBuilderOperation;\n operationId: string;\n query: any;\n datasource: DataSourceApi;\n timeRange?: TimeRange;\n onChange: (index: number, value: QueryBuilderOperationParamValue) => void;\n onRunQuery: () => void;\n queryModeller: VisualQueryModeller;\n}\n\nexport enum QueryEditorMode {\n Code = 'code',\n Builder = 'builder',\n}\n\nexport type QueryStats = {\n bytes: number;\n // The error message displayed in the UI when we cant estimate the size of the query.\n message?: string;\n};\n\nexport interface VisualQueryModeller {\n getOperationsForCategory(category: string): QueryBuilderOperationDefinition[];\n getAlternativeOperations(key: string): QueryBuilderOperationDefinition[];\n getCategories(): string[];\n getOperationDefinition(id: string): QueryBuilderOperationDefinition | undefined;\n renderQuery(query: VisualQuery, nested?: boolean): string;\n renderLabels(labels: QueryBuilderLabelFilter[]): string;\n innerQueryPlaceholder: string;\n}\n\nexport interface VisualQueryBinary<T> {\n operator: string;\n vectorMatchesType?: 'on' | 'ignoring';\n vectorMatches?: string;\n query: T;\n}\n\nexport const BINARY_OPERATIONS_KEY = 'Binary operations';\n\nexport interface VisualQuery {\n metric?: string;\n labels: QueryBuilderLabelFilter[];\n operations: QueryBuilderOperation[];\n binaryQueries?: Array<VisualQueryBinary<VisualQuery>>;\n}\n"],"names":["QueryEditorMode"],"mappings":";;;AAoFO,IAAK,eAAA,qBAAAA,gBAAAA,KAAL;AACL,EAAAA,iBAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,iBAAA,SAAA,CAAA,GAAU,SAAA;AAFA,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AA4BL,MAAM,qBAAA,GAAwB;;;;"}
@@ -5,20 +5,20 @@ import { DataSourceWithBackend, getTemplateSrv, getBackendSrv, toDataQueryRespon
5
5
  import { MACRO_NAMES } from './constants.js';
6
6
  import { QueryFormat } from '../components/QueryEditor/types.js';
7
7
 
8
- var __defProp = Object.defineProperty;
9
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
8
+ var __defProp$2 = Object.defineProperty;
9
+ var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
+ var __publicField$2 = (obj, key, value) => __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
11
11
  class SqlDatasource extends DataSourceWithBackend {
12
12
  constructor(instanceSettings, templateSrv = getTemplateSrv()) {
13
13
  super(instanceSettings);
14
14
  this.templateSrv = templateSrv;
15
- __publicField(this, "id");
16
- __publicField(this, "name");
17
- __publicField(this, "interval");
18
- __publicField(this, "db");
19
- __publicField(this, "dataset");
20
- __publicField(this, "annotations", {});
21
- __publicField(this, "interpolateVariable", (value, variable) => {
15
+ __publicField$2(this, "id");
16
+ __publicField$2(this, "name");
17
+ __publicField$2(this, "interval");
18
+ __publicField$2(this, "db");
19
+ __publicField$2(this, "dataset");
20
+ __publicField$2(this, "annotations", {});
21
+ __publicField$2(this, "interpolateVariable", (value, variable) => {
22
22
  if (typeof value === "string") {
23
23
  if (variable.multi || variable.includeAll) {
24
24
  const result = this.getQueryModel().quoteLiteral(value);
@@ -89,7 +89,7 @@ class SqlDatasource extends DataSourceWithBackend {
89
89
  return this.getResponseParser().transformMetricFindResponse(response);
90
90
  }
91
91
  async runSql(query, options) {
92
- const frame = await this.runMetaQuery({ rawSql: query, format: QueryFormat.Table, refId: options == null ? undefined : options.refId }, options);
92
+ const frame = await this.runMetaQuery({ rawSql: query, format: QueryFormat.Table, refId: options == null ? void 0 : options.refId }, options);
93
93
  return new DataFrameView(frame);
94
94
  }
95
95
  runMetaQuery(request, options) {
@@ -101,8 +101,8 @@ class SqlDatasource extends DataSourceWithBackend {
101
101
  url: "/api/ds/query",
102
102
  method: "POST",
103
103
  data: {
104
- from: (_a = options == null ? undefined : options.range) == null ? undefined : _a.from.valueOf().toString(),
105
- to: (_b = options == null ? undefined : options.range) == null ? undefined : _b.to.valueOf().toString(),
104
+ from: (_a = options == null ? void 0 : options.range) == null ? void 0 : _a.from.valueOf().toString(),
105
+ to: (_b = options == null ? void 0 : options.range) == null ? void 0 : _b.to.valueOf().toString(),
106
106
  queries
107
107
  },
108
108
  requestId: refId
@@ -145,7 +145,7 @@ class SqlDatasource extends DataSourceWithBackend {
145
145
  targetContainsTemplate(target) {
146
146
  let queryWithoutMacros = target.rawSql;
147
147
  MACRO_NAMES.forEach((value) => {
148
- queryWithoutMacros = (queryWithoutMacros == null ? undefined : queryWithoutMacros.replace(value, "")) || "";
148
+ queryWithoutMacros = (queryWithoutMacros == null ? void 0 : queryWithoutMacros.replace(value, "")) || "";
149
149
  });
150
150
  return this.templateSrv.containsTemplate(queryWithoutMacros);
151
151
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SqlDatasource.js","sources":["../../../src/datasource/SqlDatasource.ts"],"sourcesContent":["import { lastValueFrom, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport {\n type DataFrame,\n DataFrameView,\n type DataSourceInstanceSettings,\n type MetricFindValue,\n type ScopedVars,\n type TimeRange,\n type VariableModel,\n} from '@grafana/data';\nimport {\n type BackendDataSourceResponse,\n DataSourceWithBackend,\n type FetchResponse,\n getBackendSrv,\n getTemplateSrv,\n type TemplateSrv,\n toDataQueryResponse,\n} from '@grafana/runtime';\nimport { type DataQuery } from '@grafana/schema';\n\nimport { MACRO_NAMES } from './constants';\n// import { toTestingStatus } from '@grafana/runtime/utils/queryResponse';\nimport {\n type SQLQuery,\n type SQLOptions,\n type DB,\n type SqlQueryModel,\n type ResponseParser,\n QueryFormat,\n} from '../components/QueryEditor/types';\n\nexport interface SearchFilterOptions {\n searchFilter?: string;\n}\n\nexport interface VariableWithMultiSupport extends VariableWithOptions {\n multi: boolean;\n includeAll: boolean;\n allValue?: string | null;\n}\n\nexport interface VariableWithOptions extends VariableModel {\n current: VariableOption;\n options: VariableOption[];\n query: string;\n}\n\nexport interface VariableOption {\n selected: boolean;\n text: string | string[];\n value: string | string[];\n isNone?: boolean;\n}\n\nexport abstract class SqlDatasource extends DataSourceWithBackend<SQLQuery, SQLOptions> {\n id: number;\n name: string;\n interval: string;\n db: DB;\n dataset?: string;\n annotations = {};\n\n constructor(\n instanceSettings: DataSourceInstanceSettings<SQLOptions>,\n protected readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n this.name = instanceSettings.name;\n this.id = instanceSettings.id;\n const settingsData = instanceSettings.jsonData || {};\n this.interval = settingsData.timeInterval || '1m';\n this.db = this.getDB();\n }\n\n abstract getDB(dsID?: number): DB;\n\n abstract getQueryModel(target?: SQLQuery, templateSrv?: TemplateSrv, scopedVars?: ScopedVars): SqlQueryModel;\n\n abstract getResponseParser(): ResponseParser;\n\n interpolateVariable = (value: string | string[] | number, variable: VariableWithMultiSupport) => {\n if (typeof value === 'string') {\n if (variable.multi || variable.includeAll) {\n const result = this.getQueryModel().quoteLiteral(value);\n return result;\n } else {\n return value;\n }\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n if (Array.isArray(value)) {\n const quotedValues = value.map((v) => this.getQueryModel().quoteLiteral(v));\n return quotedValues.join(',');\n }\n\n return value;\n };\n\n interpolateVariablesInQueries(queries: SQLQuery[], scopedVars: ScopedVars): SQLQuery[] {\n let expandedQueries = queries;\n if (queries && queries.length > 0) {\n expandedQueries = queries.map((query) => {\n const expandedQuery = {\n ...query,\n datasource: this.getRef(),\n rawSql: this.templateSrv.replace(query.rawSql, scopedVars, this.interpolateVariable),\n rawQuery: true,\n };\n return expandedQuery;\n });\n }\n return expandedQueries;\n }\n\n filterQuery(query: SQLQuery): boolean {\n return !query.hide;\n }\n\n applyTemplateVariables(target: SQLQuery, scopedVars: ScopedVars): SQLQuery {\n const queryModel = this.getQueryModel(target, this.templateSrv, scopedVars);\n const rawSql = this.clean(queryModel.interpolate());\n return {\n refId: target.refId,\n datasource: this.getRef(),\n rawSql,\n format: target.format,\n };\n }\n\n clean(value: string) {\n return value.replace(/''/g, \"'\");\n }\n\n async metricFindQuery(query: string, optionalOptions?: MetricFindQueryOptions): Promise<MetricFindValue[]> {\n const rawSql = this.templateSrv.replace(\n query,\n getSearchFilterScopedVar({ query, wildcardChar: '%', options: optionalOptions }),\n this.interpolateVariable\n );\n\n const interpolatedQuery: SQLQuery = {\n refId: 'tempvar',\n datasource: this.getRef(),\n rawSql,\n format: QueryFormat.Table,\n };\n\n const response = await this.runMetaQuery(interpolatedQuery, optionalOptions);\n return this.getResponseParser().transformMetricFindResponse(response);\n }\n\n async runSql<T extends object>(query: string, options?: RunSQLOptions) {\n const frame = await this.runMetaQuery({ rawSql: query, format: QueryFormat.Table, refId: options?.refId }, options);\n return new DataFrameView<T>(frame);\n }\n\n private runMetaQuery(request: Partial<SQLQuery>, options?: MetricFindQueryOptions): Promise<DataFrame> {\n const refId = request.refId || 'meta';\n const queries: DataQuery[] = [{ ...request, datasource: request.datasource || this.getRef(), refId }];\n\n return lastValueFrom(\n getBackendSrv()\n .fetch<BackendDataSourceResponse>({\n url: '/api/ds/query',\n method: 'POST',\n data: {\n from: options?.range?.from.valueOf().toString(),\n to: options?.range?.to.valueOf().toString(),\n queries,\n },\n requestId: refId,\n })\n .pipe(\n map((res: FetchResponse<BackendDataSourceResponse>) => {\n const rsp = toDataQueryResponse(res, queries);\n return rsp.data[0];\n })\n )\n );\n }\n\n testDatasource(): Promise<{ status: string; message: string }> {\n return lastValueFrom(\n getBackendSrv()\n .fetch({\n url: '/api/ds/query',\n method: 'POST',\n data: {\n from: '5m',\n to: 'now',\n queries: [\n {\n refId: 'A',\n intervalMs: 1,\n maxDataPoints: 1,\n datasource: this.getRef(),\n datasourceId: this.id,\n rawSql: 'SELECT 1',\n format: 'table',\n },\n ],\n },\n })\n .pipe(\n map(() => ({ status: 'success', message: 'Database Connection OK' })),\n catchError((err) => {\n // return of(toTestingStatus(err));\n return of(err);\n })\n )\n );\n }\n\n targetContainsTemplate(target: SQLQuery) {\n let queryWithoutMacros = target.rawSql;\n MACRO_NAMES.forEach((value) => {\n queryWithoutMacros = queryWithoutMacros?.replace(value, '') || '';\n });\n return this.templateSrv.containsTemplate(queryWithoutMacros);\n }\n}\n\ninterface RunSQLOptions extends MetricFindQueryOptions {\n refId?: string;\n}\n\ninterface MetricFindQueryOptions extends SearchFilterOptions {\n range?: TimeRange;\n}\n\nexport const SEARCH_FILTER_VARIABLE = '__searchFilter';\n\nexport const containsSearchFilter = (query: string | unknown): boolean =>\n query && typeof query === 'string' ? query.indexOf(SEARCH_FILTER_VARIABLE) !== -1 : false;\n\nexport const getSearchFilterScopedVar = (args: {\n query: string;\n wildcardChar: string;\n options?: SearchFilterOptions;\n}): ScopedVars => {\n const { query, wildcardChar } = args;\n if (!containsSearchFilter(query)) {\n return {};\n }\n\n let { options } = args;\n\n options = options || { searchFilter: '' };\n const value = options.searchFilter ? `${options.searchFilter}${wildcardChar}` : `${wildcardChar}`;\n\n return {\n __searchFilter: {\n value,\n text: '',\n },\n };\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SqlDatasource.js","sources":["../../../src/datasource/SqlDatasource.ts"],"sourcesContent":["import { lastValueFrom, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport {\n type DataFrame,\n DataFrameView,\n type DataSourceInstanceSettings,\n type MetricFindValue,\n type ScopedVars,\n type TimeRange,\n type VariableModel,\n} from '@grafana/data';\nimport {\n type BackendDataSourceResponse,\n DataSourceWithBackend,\n type FetchResponse,\n getBackendSrv,\n getTemplateSrv,\n type TemplateSrv,\n toDataQueryResponse,\n} from '@grafana/runtime';\nimport { type DataQuery } from '@grafana/schema';\n\nimport { MACRO_NAMES } from './constants';\n// import { toTestingStatus } from '@grafana/runtime/utils/queryResponse';\nimport {\n type SQLQuery,\n type SQLOptions,\n type DB,\n type SqlQueryModel,\n type ResponseParser,\n QueryFormat,\n} from '../components/QueryEditor/types';\n\nexport interface SearchFilterOptions {\n searchFilter?: string;\n}\n\nexport interface VariableWithMultiSupport extends VariableWithOptions {\n multi: boolean;\n includeAll: boolean;\n allValue?: string | null;\n}\n\nexport interface VariableWithOptions extends VariableModel {\n current: VariableOption;\n options: VariableOption[];\n query: string;\n}\n\nexport interface VariableOption {\n selected: boolean;\n text: string | string[];\n value: string | string[];\n isNone?: boolean;\n}\n\nexport abstract class SqlDatasource extends DataSourceWithBackend<SQLQuery, SQLOptions> {\n id: number;\n name: string;\n interval: string;\n db: DB;\n dataset?: string;\n annotations = {};\n\n constructor(\n instanceSettings: DataSourceInstanceSettings<SQLOptions>,\n protected readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n this.name = instanceSettings.name;\n this.id = instanceSettings.id;\n const settingsData = instanceSettings.jsonData || {};\n this.interval = settingsData.timeInterval || '1m';\n this.db = this.getDB();\n }\n\n abstract getDB(dsID?: number): DB;\n\n abstract getQueryModel(target?: SQLQuery, templateSrv?: TemplateSrv, scopedVars?: ScopedVars): SqlQueryModel;\n\n abstract getResponseParser(): ResponseParser;\n\n interpolateVariable = (value: string | string[] | number, variable: VariableWithMultiSupport) => {\n if (typeof value === 'string') {\n if (variable.multi || variable.includeAll) {\n const result = this.getQueryModel().quoteLiteral(value);\n return result;\n } else {\n return value;\n }\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n if (Array.isArray(value)) {\n const quotedValues = value.map((v) => this.getQueryModel().quoteLiteral(v));\n return quotedValues.join(',');\n }\n\n return value;\n };\n\n interpolateVariablesInQueries(queries: SQLQuery[], scopedVars: ScopedVars): SQLQuery[] {\n let expandedQueries = queries;\n if (queries && queries.length > 0) {\n expandedQueries = queries.map((query) => {\n const expandedQuery = {\n ...query,\n datasource: this.getRef(),\n rawSql: this.templateSrv.replace(query.rawSql, scopedVars, this.interpolateVariable),\n rawQuery: true,\n };\n return expandedQuery;\n });\n }\n return expandedQueries;\n }\n\n filterQuery(query: SQLQuery): boolean {\n return !query.hide;\n }\n\n applyTemplateVariables(target: SQLQuery, scopedVars: ScopedVars): SQLQuery {\n const queryModel = this.getQueryModel(target, this.templateSrv, scopedVars);\n const rawSql = this.clean(queryModel.interpolate());\n return {\n refId: target.refId,\n datasource: this.getRef(),\n rawSql,\n format: target.format,\n };\n }\n\n clean(value: string) {\n return value.replace(/''/g, \"'\");\n }\n\n async metricFindQuery(query: string, optionalOptions?: MetricFindQueryOptions): Promise<MetricFindValue[]> {\n const rawSql = this.templateSrv.replace(\n query,\n getSearchFilterScopedVar({ query, wildcardChar: '%', options: optionalOptions }),\n this.interpolateVariable\n );\n\n const interpolatedQuery: SQLQuery = {\n refId: 'tempvar',\n datasource: this.getRef(),\n rawSql,\n format: QueryFormat.Table,\n };\n\n const response = await this.runMetaQuery(interpolatedQuery, optionalOptions);\n return this.getResponseParser().transformMetricFindResponse(response);\n }\n\n async runSql<T extends object>(query: string, options?: RunSQLOptions) {\n const frame = await this.runMetaQuery({ rawSql: query, format: QueryFormat.Table, refId: options?.refId }, options);\n return new DataFrameView<T>(frame);\n }\n\n private runMetaQuery(request: Partial<SQLQuery>, options?: MetricFindQueryOptions): Promise<DataFrame> {\n const refId = request.refId || 'meta';\n const queries: DataQuery[] = [{ ...request, datasource: request.datasource || this.getRef(), refId }];\n\n return lastValueFrom(\n getBackendSrv()\n .fetch<BackendDataSourceResponse>({\n url: '/api/ds/query',\n method: 'POST',\n data: {\n from: options?.range?.from.valueOf().toString(),\n to: options?.range?.to.valueOf().toString(),\n queries,\n },\n requestId: refId,\n })\n .pipe(\n map((res: FetchResponse<BackendDataSourceResponse>) => {\n const rsp = toDataQueryResponse(res, queries);\n return rsp.data[0];\n })\n )\n );\n }\n\n testDatasource(): Promise<{ status: string; message: string }> {\n return lastValueFrom(\n getBackendSrv()\n .fetch({\n url: '/api/ds/query',\n method: 'POST',\n data: {\n from: '5m',\n to: 'now',\n queries: [\n {\n refId: 'A',\n intervalMs: 1,\n maxDataPoints: 1,\n datasource: this.getRef(),\n datasourceId: this.id,\n rawSql: 'SELECT 1',\n format: 'table',\n },\n ],\n },\n })\n .pipe(\n map(() => ({ status: 'success', message: 'Database Connection OK' })),\n catchError((err) => {\n // return of(toTestingStatus(err));\n return of(err);\n })\n )\n );\n }\n\n targetContainsTemplate(target: SQLQuery) {\n let queryWithoutMacros = target.rawSql;\n MACRO_NAMES.forEach((value) => {\n queryWithoutMacros = queryWithoutMacros?.replace(value, '') || '';\n });\n return this.templateSrv.containsTemplate(queryWithoutMacros);\n }\n}\n\ninterface RunSQLOptions extends MetricFindQueryOptions {\n refId?: string;\n}\n\ninterface MetricFindQueryOptions extends SearchFilterOptions {\n range?: TimeRange;\n}\n\nexport const SEARCH_FILTER_VARIABLE = '__searchFilter';\n\nexport const containsSearchFilter = (query: string | unknown): boolean =>\n query && typeof query === 'string' ? query.indexOf(SEARCH_FILTER_VARIABLE) !== -1 : false;\n\nexport const getSearchFilterScopedVar = (args: {\n query: string;\n wildcardChar: string;\n options?: SearchFilterOptions;\n}): ScopedVars => {\n const { query, wildcardChar } = args;\n if (!containsSearchFilter(query)) {\n return {};\n }\n\n let { options } = args;\n\n options = options || { searchFilter: '' };\n const value = options.searchFilter ? `${options.searchFilter}${wildcardChar}` : `${wildcardChar}`;\n\n return {\n __searchFilter: {\n value,\n text: '',\n },\n };\n};\n"],"names":["__publicField"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../src/datasource/constants.ts"],"sourcesContent":["export const MACRO_NAMES = [\n '$__time',\n '$__timeEpoch',\n '$__timeFilter',\n '$__timeFrom',\n '$__timeTo',\n '$__timeGroup',\n '$__timeGroupAlias',\n '$__unixEpochFilter',\n '$__unixEpochNanoFilter',\n '$__unixEpochNanoFrom',\n '$__unixEpochNanoTo',\n '$__unixEpochGroup',\n '$__unixEpochGroupAlias',\n];\n"],"names":[],"mappings":"AAAO,MAAM,WAAc,GAAA;AAAA,EACzB,SAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,wBAAA;AAAA,EACA,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF;;;;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../src/datasource/constants.ts"],"sourcesContent":["export const MACRO_NAMES = [\n '$__time',\n '$__timeEpoch',\n '$__timeFilter',\n '$__timeFrom',\n '$__timeTo',\n '$__timeGroup',\n '$__timeGroupAlias',\n '$__unixEpochFilter',\n '$__unixEpochNanoFilter',\n '$__unixEpochNanoFrom',\n '$__unixEpochNanoTo',\n '$__unixEpochGroup',\n '$__unixEpochGroupAlias',\n];\n"],"names":[],"mappings":"AAAO,MAAM,WAAA,GAAc;AAAA,EACzB,SAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,wBAAA;AAAA,EACA,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDebounce.js","sources":["../../../src/hooks/useDebounce.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\n\nexport const DEFAULT_DELAY = 275;\n\nexport const useDebounce = <T>(value: T, delay: number = DEFAULT_DELAY) => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n // TODO: We should fix this\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n return debouncedValue;\n};\n"],"names":[],"mappings":";;AAEO,MAAM,aAAgB,GAAA;AAEtB,MAAM,WAAc,GAAA,CAAI,KAAU,EAAA,KAAA,GAAgB,aAAkB,KAAA;AACzE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,KAAK,CAAA;AAE1D,EAAA,SAAA,CAAU,MAAM;AACd,IAAM,MAAA,OAAA,GAAU,WAAW,MAAM;AAC/B,MAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,OACtB,KAAK,CAAA;AAER,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAO,CAAA;AAAA,KACtB;AAAA,GAGF,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAO,OAAA,cAAA;AACT;;;;"}
1
+ {"version":3,"file":"useDebounce.js","sources":["../../../src/hooks/useDebounce.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\n\nexport const DEFAULT_DELAY = 275;\n\nexport const useDebounce = <T>(value: T, delay: number = DEFAULT_DELAY) => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n // TODO: We should fix this\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n return debouncedValue;\n};\n"],"names":[],"mappings":";;AAEO,MAAM,aAAA,GAAgB;AAEtB,MAAM,WAAA,GAAc,CAAI,KAAA,EAAU,KAAA,GAAgB,aAAA,KAAkB;AACzE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,KAAK,CAAA;AAE1D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,OAAA,GAAU,WAAW,MAAM;AAC/B,MAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,IACzB,GAAG,KAAK,CAAA;AAER,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAO,CAAA;AAAA,IACtB,CAAA;AAAA,EAGF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,cAAA;AACT;;;;"}
@@ -1,6 +1,6 @@
1
1
  import React, { ComponentProps, PureComponent, ReactElement, ReactNode, FunctionComponent, HTMLProps } from 'react';
2
2
  import { Input, Segment as Segment$1, monacoTypes, Monaco, ButtonProps, Field, PopoverContent, Switch, SelectCommonProps, InlineLabel } from '@grafana/ui';
3
- import { DataSourceInstanceSettings, SelectableValue, DataSourceJsonData, VariableSuggestion, TimeRange, DataFrame, MetricFindValue, ThemeSpacingTokens, ScopedVars, DataFrameView, VariableModel, QueryEditorProps as QueryEditorProps$1, DataSourceSettings, RegistryItem, DataSourceApi, Registry, DataQuery as DataQuery$1, PanelData } from '@grafana/data';
3
+ import { DataSourceInstanceSettings, SelectableValue, DataSourceJsonData, VariableSuggestion, TimeRange, DataFrame, MetricFindValue, ThemeSpacingTokens, ScopedVars, VariableModel, DataFrameView, QueryEditorProps as QueryEditorProps$1, DataSourceSettings, RegistryItem, DataSourceApi, Registry, DataQuery as DataQuery$1, PanelData } from '@grafana/data';
4
4
  import { DataSourceSrv, DataSourceWithBackend, TemplateSrv } from '@grafana/runtime';
5
5
  import { JsonTree } from '@react-awesome-query-builder/ui';
6
6
  import { DataQuery } from '@grafana/schema';
@@ -726,14 +726,7 @@ interface SpaceProps {
726
726
  h?: number;
727
727
  layout?: 'block' | 'inline';
728
728
  }
729
- declare const Space: {
730
- (props: SpaceProps): React.JSX.Element;
731
- defaultProps: {
732
- v: number;
733
- h: number;
734
- layout: string;
735
- };
736
- };
729
+ declare const Space: ({ v, h, layout }: SpaceProps) => React.JSX.Element;
737
730
 
738
731
  interface SearchFilterOptions {
739
732
  searchFilter?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"DataQuery.js","sources":["../../../../src/test/mocks/DataQuery.ts"],"sourcesContent":["import { type DataQuery } from '@grafana/data';\nimport { Chance } from 'chance';\nimport { undefinedOr } from './utils';\n\nexport const mockDataQuery = (): DataQuery => ({\n refId: Chance().word(),\n hide: false,\n key: Chance().guid(),\n queryType: Chance().word(),\n datasource: undefinedOr(() => Chance().word()),\n});\n"],"names":[],"mappings":";;;;AAIO,MAAM,gBAAgB,OAAkB;AAAA,EAC7C,KAAA,EAAO,MAAO,EAAA,CAAE,IAAK,EAAA;AAAA,EACrB,IAAM,EAAA,KAAA;AAAA,EACN,GAAA,EAAK,MAAO,EAAA,CAAE,IAAK,EAAA;AAAA,EACnB,SAAA,EAAW,MAAO,EAAA,CAAE,IAAK,EAAA;AAAA,EACzB,YAAY,WAAY,CAAA,MAAM,MAAO,EAAA,CAAE,MAAM;AAC/C,CAAA;;;;"}
1
+ {"version":3,"file":"DataQuery.js","sources":["../../../../src/test/mocks/DataQuery.ts"],"sourcesContent":["import { type DataQuery } from '@grafana/data';\nimport { Chance } from 'chance';\nimport { undefinedOr } from './utils';\n\nexport const mockDataQuery = (): DataQuery => ({\n refId: Chance().word(),\n hide: false,\n key: Chance().guid(),\n queryType: Chance().word(),\n datasource: undefinedOr(() => Chance().word()),\n});\n"],"names":[],"mappings":";;;;AAIO,MAAM,gBAAgB,OAAkB;AAAA,EAC7C,KAAA,EAAO,MAAA,EAAO,CAAE,IAAA,EAAK;AAAA,EACrB,IAAA,EAAM,KAAA;AAAA,EACN,GAAA,EAAK,MAAA,EAAO,CAAE,IAAA,EAAK;AAAA,EACnB,SAAA,EAAW,MAAA,EAAO,CAAE,IAAA,EAAK;AAAA,EACzB,YAAY,WAAA,CAAY,MAAM,MAAA,EAAO,CAAE,MAAM;AAC/C,CAAA;;;;"}
@@ -2,7 +2,7 @@ import '@grafana/data';
2
2
  import { DataSourceWithBackend } from '@grafana/runtime';
3
3
  import { Chance } from 'chance';
4
4
  import { mockDataSourcePluginMeta } from './Plugin.js';
5
- import { generateBoolean, undefinedOr } from './utils.js';
5
+ import { undefinedOr, generateBoolean } from './utils.js';
6
6
 
7
7
  var __defProp = Object.defineProperty;
8
8
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -1 +1 @@
1
- {"version":3,"file":"Datasource.js","sources":["../../../../src/test/mocks/Datasource.ts"],"sourcesContent":["import { type DataSourceInstanceSettings, type QueryHint } from '@grafana/data';\nimport { DataSourceWithBackend } from '@grafana/runtime';\nimport { Chance } from 'chance';\nimport { mockDataSourcePluginMeta } from './Plugin';\nimport { generateBoolean, undefinedOr } from './utils';\n\nclass DatasourceMock extends DataSourceWithBackend {\n // DataSourceWithBackend\n query = jest.fn();\n filterQuery = undefinedOr(generateBoolean);\n applyTemplateVariables = jest.fn();\n getResource = jest.fn();\n postResource = jest.fn();\n callHealthCheck = jest.fn();\n testDatasource = jest.fn();\n // DataSourceApi\n uid = Chance().guid();\n name = Chance().word();\n id = 1;\n type = Chance().word();\n interval = Chance().word();\n importQueries = jest.fn();\n init = jest.fn();\n getQueryHints = jest.fn().mockReturnValue([mockQueryHint()]);\n getQueryDisplayText = jest.fn().mockReturnValue(Chance().word());\n metricFindQuery = jest.fn();\n getTagKeys = jest.fn();\n getTagValues = jest.fn();\n components = {};\n meta = mockDataSourcePluginMeta();\n targetContainsTemplate = jest.fn();\n modifyQuery = jest.fn();\n getHighlighterExpression = jest.fn();\n languageProvider = jest.fn();\n getVersion = jest.fn();\n interpolateVariablesInQueries = jest.fn();\n annotations = {};\n annotationQuery = jest.fn();\n streamOptionsProvider = jest.fn();\n getRef = jest.fn();\n protected getRequestHeaders = jest.fn();\n}\n\nexport const mockDatasource = () => new DatasourceMock(mockDatasourceInstanceSettings());\n\nconst mockQueryHint = (): QueryHint => ({\n type: Chance().word(),\n label: Chance().word(),\n fix: {\n label: Chance().word(),\n action: {\n type: Chance().word(),\n query: Chance().word(),\n preventSubmit: generateBoolean(),\n },\n },\n});\n\nexport const mockDatasourceInstanceSettings = (): DataSourceInstanceSettings => ({\n id: Chance().integer(),\n uid: Chance().word(),\n type: Chance().word(),\n name: Chance().word(),\n meta: mockDataSourcePluginMeta(),\n url: Chance().word(),\n jsonData: {},\n username: Chance().word(),\n password: Chance().word(),\n database: Chance().word(),\n basicAuth: Chance().word(),\n withCredentials: generateBoolean(),\n access: Chance().pickone(['direct', 'proxy']),\n readOnly: false,\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Datasource.js","sources":["../../../../src/test/mocks/Datasource.ts"],"sourcesContent":["import { type DataSourceInstanceSettings, type QueryHint } from '@grafana/data';\nimport { DataSourceWithBackend } from '@grafana/runtime';\nimport { Chance } from 'chance';\nimport { mockDataSourcePluginMeta } from './Plugin';\nimport { generateBoolean, undefinedOr } from './utils';\n\nclass DatasourceMock extends DataSourceWithBackend {\n // DataSourceWithBackend\n query = jest.fn();\n filterQuery = undefinedOr(generateBoolean);\n applyTemplateVariables = jest.fn();\n getResource = jest.fn();\n postResource = jest.fn();\n callHealthCheck = jest.fn();\n testDatasource = jest.fn();\n // DataSourceApi\n uid = Chance().guid();\n name = Chance().word();\n id = 1;\n type = Chance().word();\n interval = Chance().word();\n importQueries = jest.fn();\n init = jest.fn();\n getQueryHints = jest.fn().mockReturnValue([mockQueryHint()]);\n getQueryDisplayText = jest.fn().mockReturnValue(Chance().word());\n metricFindQuery = jest.fn();\n getTagKeys = jest.fn();\n getTagValues = jest.fn();\n components = {};\n meta = mockDataSourcePluginMeta();\n targetContainsTemplate = jest.fn();\n modifyQuery = jest.fn();\n getHighlighterExpression = jest.fn();\n languageProvider = jest.fn();\n getVersion = jest.fn();\n interpolateVariablesInQueries = jest.fn();\n annotations = {};\n annotationQuery = jest.fn();\n streamOptionsProvider = jest.fn();\n getRef = jest.fn();\n protected getRequestHeaders = jest.fn();\n}\n\nexport const mockDatasource = () => new DatasourceMock(mockDatasourceInstanceSettings());\n\nconst mockQueryHint = (): QueryHint => ({\n type: Chance().word(),\n label: Chance().word(),\n fix: {\n label: Chance().word(),\n action: {\n type: Chance().word(),\n query: Chance().word(),\n preventSubmit: generateBoolean(),\n },\n },\n});\n\nexport const mockDatasourceInstanceSettings = (): DataSourceInstanceSettings => ({\n id: Chance().integer(),\n uid: Chance().word(),\n type: Chance().word(),\n name: Chance().word(),\n meta: mockDataSourcePluginMeta(),\n url: Chance().word(),\n jsonData: {},\n username: Chance().word(),\n password: Chance().word(),\n database: Chance().word(),\n basicAuth: Chance().word(),\n withCredentials: generateBoolean(),\n access: Chance().pickone(['direct', 'proxy']),\n readOnly: false,\n});\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Chance } from 'chance';
2
- import { PluginType, PluginIncludeType, PluginState, PluginSignatureStatus } from '@grafana/data';
2
+ import { PluginIncludeType, PluginSignatureStatus, PluginState, PluginType } from '@grafana/data';
3
3
  import { generateBoolean } from './utils.js';
4
4
 
5
5
  const mockDataSourcePluginMeta = () => ({