@grafana/plugin-ui 0.13.1 → 0.14.1-dsconfig.032cfc4

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 (440) hide show
  1. package/dist/cjs/index.cjs +2989 -372
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs/index.d.cts +695 -40
  4. package/dist/cjs/schemas.cjs +25 -0
  5. package/dist/cjs/schemas.cjs.map +1 -0
  6. package/dist/cjs/schemas.d.cts +448 -0
  7. package/dist/cjs/test-utils.cjs +2 -2
  8. package/dist/cjs/test-utils.cjs.map +1 -1
  9. package/dist/cjs/test-utils.d.cts +24 -24
  10. package/dist/cjs/useDatasourceSchema-CxPGD2-b.js +17125 -0
  11. package/dist/cjs/useDatasourceSchema-CxPGD2-b.js.map +1 -0
  12. package/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js.map +1 -1
  13. package/dist/esm/components/ConfigEditor/Auth/Auth.js.map +1 -1
  14. package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js +4 -4
  15. package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js.map +1 -1
  16. package/dist/esm/components/ConfigEditor/Auth/auth-method/BasicAuth.js.map +1 -1
  17. package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeader.js.map +1 -1
  18. package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js +1 -1
  19. package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js.map +1 -1
  20. package/dist/esm/components/ConfigEditor/Auth/styles.js.map +1 -1
  21. package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js +1 -1
  22. package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js.map +1 -1
  23. package/dist/esm/components/ConfigEditor/Auth/tls/SkipTLSVerification.js.map +1 -1
  24. package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js +3 -3
  25. package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js.map +1 -1
  26. package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettings.js.map +1 -1
  27. package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettingsSection.js.map +1 -1
  28. package/dist/esm/components/ConfigEditor/Auth/types.js.map +1 -1
  29. package/dist/esm/components/ConfigEditor/Auth/utils.js +3 -3
  30. package/dist/esm/components/ConfigEditor/Auth/utils.js.map +1 -1
  31. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js +2 -2
  32. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js.map +1 -1
  33. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js.map +1 -1
  34. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js.map +1 -1
  35. package/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js.map +1 -1
  36. package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js +1 -1
  37. package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js.map +1 -1
  38. package/dist/esm/components/ConfigEditor/DataSourceDescription.js.map +1 -1
  39. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceConfigWizard.js +234 -0
  40. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceConfigWizard.js.map +1 -0
  41. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceErrorBoundary.js +27 -0
  42. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceErrorBoundary.js.map +1 -0
  43. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SchemaField.js +71 -0
  44. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SchemaField.js.map +1 -0
  45. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SidebarNav.js +54 -0
  46. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SidebarNav.js.map +1 -0
  47. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/TabLayout.js +181 -0
  48. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/TabLayout.js.map +1 -0
  49. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/cel.js +75 -0
  50. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/cel.js.map +1 -0
  51. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/config.js +258 -0
  52. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/config.js.map +1 -0
  53. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/datasource.js +354 -0
  54. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/datasource.js.map +1 -0
  55. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/fieldUtils.js +138 -0
  56. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/fieldUtils.js.map +1 -0
  57. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.js +326 -0
  58. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.js.map +1 -0
  59. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useHealthChecks.js +106 -0
  60. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useHealthChecks.js.map +1 -0
  61. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/AuthorizationHeaderField.js +51 -0
  62. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/AuthorizationHeaderField.js.map +1 -0
  63. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ComplexFieldNote.js +26 -0
  64. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ComplexFieldNote.js.map +1 -0
  65. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FileUploadField.js +106 -0
  66. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FileUploadField.js.map +1 -0
  67. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/IndexedPairEditor.js +124 -0
  68. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/IndexedPairEditor.js.map +1 -0
  69. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ObjectArrayEditor.js +190 -0
  70. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ObjectArrayEditor.js.map +1 -0
  71. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/PdcFieldNote.js +31 -0
  72. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/PdcFieldNote.js.map +1 -0
  73. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/SecureFieldInput.js +59 -0
  74. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/SecureFieldInput.js.map +1 -0
  75. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/StringArrayInput.js +80 -0
  76. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/StringArrayInput.js.map +1 -0
  77. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/renderFieldInput.js +141 -0
  78. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/renderFieldInput.js.map +1 -0
  79. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/resolvePluginName.js +30 -0
  80. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/resolvePluginName.js.map +1 -0
  81. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/styles.js +360 -0
  82. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/styles.js.map +1 -0
  83. package/dist/esm/components/ConfigEditor/SecureSocksProxyToggle.js.map +1 -1
  84. package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js +11 -11
  85. package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js.map +1 -1
  86. package/dist/esm/components/DataLinks/DataLink.js +4 -4
  87. package/dist/esm/components/DataLinks/DataLink.js.map +1 -1
  88. package/dist/esm/components/DataLinks/DataLinks.js +3 -3
  89. package/dist/esm/components/DataLinks/DataLinks.js.map +1 -1
  90. package/dist/esm/components/DataSourcePicker/DataSourcePicker.js +8 -8
  91. package/dist/esm/components/DataSourcePicker/DataSourcePicker.js.map +1 -1
  92. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  93. package/dist/esm/components/DatePicker/styles.js +2 -2
  94. package/dist/esm/components/DatePicker/styles.js.map +1 -1
  95. package/dist/esm/components/DatePickerWithInput/DatePickerWithInput.js.map +1 -1
  96. package/dist/esm/components/DatePickerWithInput/styles.js +2 -2
  97. package/dist/esm/components/DatePickerWithInput/styles.js.map +1 -1
  98. package/dist/esm/components/DebounceInput/DebounceInput.js.map +1 -1
  99. package/dist/esm/components/Plugins/PluginSignatureBadge.js.map +1 -1
  100. package/dist/esm/components/QueryEditor/AccessoryButton.js.map +1 -1
  101. package/dist/esm/components/QueryEditor/CatalogSelector.js +1 -1
  102. package/dist/esm/components/QueryEditor/CatalogSelector.js.map +1 -1
  103. package/dist/esm/components/QueryEditor/ConfirmModal.js +1 -1
  104. package/dist/esm/components/QueryEditor/ConfirmModal.js.map +1 -1
  105. package/dist/esm/components/QueryEditor/DatasetSelector.js +1 -1
  106. package/dist/esm/components/QueryEditor/DatasetSelector.js.map +1 -1
  107. package/dist/esm/components/QueryEditor/EditorField.js +5 -5
  108. package/dist/esm/components/QueryEditor/EditorField.js.map +1 -1
  109. package/dist/esm/components/QueryEditor/EditorFieldGroup.js.map +1 -1
  110. package/dist/esm/components/QueryEditor/EditorHeader.js +2 -2
  111. package/dist/esm/components/QueryEditor/EditorHeader.js.map +1 -1
  112. package/dist/esm/components/QueryEditor/EditorList.js.map +1 -1
  113. package/dist/esm/components/QueryEditor/EditorRow.js +4 -4
  114. package/dist/esm/components/QueryEditor/EditorRow.js.map +1 -1
  115. package/dist/esm/components/QueryEditor/EditorRows.js +2 -2
  116. package/dist/esm/components/QueryEditor/EditorRows.js.map +1 -1
  117. package/dist/esm/components/QueryEditor/EditorStack.js +1 -1
  118. package/dist/esm/components/QueryEditor/EditorStack.js.map +1 -1
  119. package/dist/esm/components/QueryEditor/EditorSwitch.js +2 -2
  120. package/dist/esm/components/QueryEditor/EditorSwitch.js.map +1 -1
  121. package/dist/esm/components/QueryEditor/FlexItem.js.map +1 -1
  122. package/dist/esm/components/QueryEditor/InlineSelect.js +1 -1
  123. package/dist/esm/components/QueryEditor/InlineSelect.js.map +1 -1
  124. package/dist/esm/components/QueryEditor/InputGroup.js +2 -2
  125. package/dist/esm/components/QueryEditor/InputGroup.js.map +1 -1
  126. package/dist/esm/components/QueryEditor/QueryEditor.js +10 -8
  127. package/dist/esm/components/QueryEditor/QueryEditor.js.map +1 -1
  128. package/dist/esm/components/QueryEditor/QueryHeader.js +20 -20
  129. package/dist/esm/components/QueryEditor/QueryHeader.js.map +1 -1
  130. package/dist/esm/components/QueryEditor/RunQueryButton.js +1 -1
  131. package/dist/esm/components/QueryEditor/RunQueryButton.js.map +1 -1
  132. package/dist/esm/components/QueryEditor/Space.js +2 -2
  133. package/dist/esm/components/QueryEditor/Space.js.map +1 -1
  134. package/dist/esm/components/QueryEditor/TableSelector.js +0 -1
  135. package/dist/esm/components/QueryEditor/TableSelector.js.map +1 -1
  136. package/dist/esm/components/QueryEditor/defaults.js +7 -7
  137. package/dist/esm/components/QueryEditor/defaults.js.map +1 -1
  138. package/dist/esm/components/QueryEditor/expressions.js.map +1 -1
  139. package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js +10 -2
  140. package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js.map +1 -1
  141. package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js +7 -2
  142. package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js.map +1 -1
  143. package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js +4 -4
  144. package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js.map +1 -1
  145. package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js +14 -4
  146. package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js.map +1 -1
  147. package/dist/esm/components/QueryEditor/types.js +0 -1
  148. package/dist/esm/components/QueryEditor/types.js.map +1 -1
  149. package/dist/esm/components/QueryEditor/utils/formatSQL.js +15 -4
  150. package/dist/esm/components/QueryEditor/utils/formatSQL.js.map +1 -1
  151. package/dist/esm/components/QueryEditor/utils/sql.utils.js +8 -8
  152. package/dist/esm/components/QueryEditor/utils/sql.utils.js.map +1 -1
  153. package/dist/esm/components/QueryEditor/utils/useSqlChange.js.map +1 -1
  154. package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js +26 -27
  155. package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js.map +1 -1
  156. package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js +3 -3
  157. package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js.map +1 -1
  158. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js +2 -2
  159. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js.map +1 -1
  160. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRows.js.map +1 -1
  161. package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js +2 -2
  162. package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js.map +1 -1
  163. package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js +4 -4
  164. package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js.map +1 -1
  165. package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js +4 -4
  166. package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js.map +1 -1
  167. package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js +0 -1
  168. package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js.map +1 -1
  169. package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js +2 -3
  170. package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js.map +1 -1
  171. package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js +0 -1
  172. package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js.map +1 -1
  173. package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js +0 -1
  174. package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js.map +1 -1
  175. package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js +9 -9
  176. package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js.map +1 -1
  177. package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js +10 -2
  178. package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js.map +1 -1
  179. package/dist/esm/components/QueryEditor/visual-query-builder/WhereRow.js.map +1 -1
  180. package/dist/esm/components/QueryEditorRow/QueryEditorRow.js.map +1 -1
  181. package/dist/esm/components/SQLEditor/components/SQLEditor.js +13 -13
  182. package/dist/esm/components/SQLEditor/components/SQLEditor.js.map +1 -1
  183. package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js +1 -1
  184. package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js.map +1 -1
  185. package/dist/esm/components/SQLEditor/mocks/Monaco.js.map +1 -1
  186. package/dist/esm/components/SQLEditor/mocks/TextModel.js.map +1 -1
  187. package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQuery.js.map +1 -1
  188. package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQueryWithAggregation.js.map +1 -1
  189. package/dist/esm/components/SQLEditor/mocks/queries/multiLineMultipleColumns.js.map +1 -1
  190. package/dist/esm/components/SQLEditor/mocks/queries/singleLineEmptyQuery.js.map +1 -1
  191. package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQuery.js.map +1 -1
  192. package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQueryWithAggregation.js.map +1 -1
  193. package/dist/esm/components/SQLEditor/mocks/queries/singleLineMultipleColumns.js.map +1 -1
  194. package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueries.js.map +1 -1
  195. package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueriesWithAggregation.js.map +1 -1
  196. package/dist/esm/components/SQLEditor/standardSql/definition.js +0 -6
  197. package/dist/esm/components/SQLEditor/standardSql/definition.js.map +1 -1
  198. package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js +2 -2
  199. package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js.map +1 -1
  200. package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js +5 -4
  201. package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js.map +1 -1
  202. package/dist/esm/components/SQLEditor/standardSql/language.js.map +1 -1
  203. package/dist/esm/components/SQLEditor/standardSql/macros.js.map +1 -1
  204. package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js +2 -2
  205. package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js.map +1 -1
  206. package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js +1 -1
  207. package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js.map +1 -1
  208. package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js +27 -26
  209. package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js.map +1 -1
  210. package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js +1 -1
  211. package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js.map +1 -1
  212. package/dist/esm/components/SQLEditor/test-utils/index.js.map +1 -1
  213. package/dist/esm/components/SQLEditor/test-utils/statementPosition.js.map +1 -1
  214. package/dist/esm/components/SQLEditor/types.js +1 -17
  215. package/dist/esm/components/SQLEditor/types.js.map +1 -1
  216. package/dist/esm/components/SQLEditor/utils/LinkedToken.js +8 -8
  217. package/dist/esm/components/SQLEditor/utils/LinkedToken.js.map +1 -1
  218. package/dist/esm/components/SQLEditor/utils/commands.js.map +1 -1
  219. package/dist/esm/components/SQLEditor/utils/debugger.js +1 -1
  220. package/dist/esm/components/SQLEditor/utils/debugger.js.map +1 -1
  221. package/dist/esm/components/SQLEditor/utils/getSuggestionKind.js.map +1 -1
  222. package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js +3 -3
  223. package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js.map +1 -1
  224. package/dist/esm/components/SQLEditor/utils/toCompletionItem.js +1 -1
  225. package/dist/esm/components/SQLEditor/utils/toCompletionItem.js.map +1 -1
  226. package/dist/esm/components/SQLEditor/utils/tokenType.js +18 -0
  227. package/dist/esm/components/SQLEditor/utils/tokenType.js.map +1 -0
  228. package/dist/esm/components/SQLEditor/utils/tokenUtils.js +10 -10
  229. package/dist/esm/components/SQLEditor/utils/tokenUtils.js.map +1 -1
  230. package/dist/esm/components/Segment/Segment.js.map +1 -1
  231. package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js +2 -2
  232. package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js.map +1 -1
  233. package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js +11 -11
  234. package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js.map +1 -1
  235. package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js +1 -1
  236. package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js.map +1 -1
  237. package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js +4 -4
  238. package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js.map +1 -1
  239. package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js +3 -3
  240. package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js.map +1 -1
  241. package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js +3 -3
  242. package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js.map +1 -1
  243. package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js +2 -2
  244. package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js.map +1 -1
  245. package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js +2 -2
  246. package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js.map +1 -1
  247. package/dist/esm/components/VisualQueryBuilder/components/OperationList.js +4 -4
  248. package/dist/esm/components/VisualQueryBuilder/components/OperationList.js.map +1 -1
  249. package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js +2 -2
  250. package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js.map +1 -1
  251. package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js +6 -6
  252. package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js.map +1 -1
  253. package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js +3 -3
  254. package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js.map +1 -1
  255. package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js +8 -8
  256. package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js.map +1 -1
  257. package/dist/esm/components/VisualQueryBuilder/components/QueryEditorModeToggle.js.map +1 -1
  258. package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js +3 -3
  259. package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js.map +1 -1
  260. package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js +1 -1
  261. package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js.map +1 -1
  262. package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js +2 -2
  263. package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js.map +1 -1
  264. package/dist/esm/components/VisualQueryBuilder/types.js.map +1 -1
  265. package/dist/esm/datasource/SqlDatasource.js +14 -14
  266. package/dist/esm/datasource/SqlDatasource.js.map +1 -1
  267. package/dist/esm/datasource/constants.js.map +1 -1
  268. package/dist/esm/hooks/useDebounce.js.map +1 -1
  269. package/dist/esm/index.d.ts +695 -40
  270. package/dist/esm/index.js +13 -1
  271. package/dist/esm/index.js.map +1 -1
  272. package/dist/esm/schema/registry/alertmanager.schema.json.js +77 -0
  273. package/dist/esm/schema/registry/alertmanager.schema.json.js.map +1 -0
  274. package/dist/esm/schema/registry/cloudwatch.schema.json.js +384 -0
  275. package/dist/esm/schema/registry/cloudwatch.schema.json.js.map +1 -0
  276. package/dist/esm/schema/registry/elasticsearch.schema.json.js +597 -0
  277. package/dist/esm/schema/registry/elasticsearch.schema.json.js.map +1 -0
  278. package/dist/esm/schema/registry/grafana-adobeanalytics-datasource.schema.json.js +95 -0
  279. package/dist/esm/schema/registry/grafana-adobeanalytics-datasource.schema.json.js.map +1 -0
  280. package/dist/esm/schema/registry/grafana-amazonprometheus-datasource.schema.json.js +166 -0
  281. package/dist/esm/schema/registry/grafana-amazonprometheus-datasource.schema.json.js.map +1 -0
  282. package/dist/esm/schema/registry/grafana-appdynamics-datasource.schema.json.js +145 -0
  283. package/dist/esm/schema/registry/grafana-appdynamics-datasource.schema.json.js.map +1 -0
  284. package/dist/esm/schema/registry/grafana-astradb-datasource.schema.json.js +123 -0
  285. package/dist/esm/schema/registry/grafana-astradb-datasource.schema.json.js.map +1 -0
  286. package/dist/esm/schema/registry/grafana-athena-datasource.schema.json.js +158 -0
  287. package/dist/esm/schema/registry/grafana-athena-datasource.schema.json.js.map +1 -0
  288. package/dist/esm/schema/registry/grafana-atlassianstatuspage-datasource.schema.json.js +43 -0
  289. package/dist/esm/schema/registry/grafana-atlassianstatuspage-datasource.schema.json.js.map +1 -0
  290. package/dist/esm/schema/registry/grafana-azure-data-explorer-datasource.schema.json.js +204 -0
  291. package/dist/esm/schema/registry/grafana-azure-data-explorer-datasource.schema.json.js.map +1 -0
  292. package/dist/esm/schema/registry/grafana-azure-monitor-datasource.schema.json.js +300 -0
  293. package/dist/esm/schema/registry/grafana-azure-monitor-datasource.schema.json.js.map +1 -0
  294. package/dist/esm/schema/registry/grafana-azuredevops-datasource.schema.json.js +101 -0
  295. package/dist/esm/schema/registry/grafana-azuredevops-datasource.schema.json.js.map +1 -0
  296. package/dist/esm/schema/registry/grafana-azureprometheus-datasource.schema.json.js +125 -0
  297. package/dist/esm/schema/registry/grafana-azureprometheus-datasource.schema.json.js.map +1 -0
  298. package/dist/esm/schema/registry/grafana-bigquery-datasource.schema.json.js +508 -0
  299. package/dist/esm/schema/registry/grafana-bigquery-datasource.schema.json.js.map +1 -0
  300. package/dist/esm/schema/registry/grafana-catchpoint-datasource.schema.json.js +42 -0
  301. package/dist/esm/schema/registry/grafana-catchpoint-datasource.schema.json.js.map +1 -0
  302. package/dist/esm/schema/registry/grafana-clickhouse-datasource.schema.json.js +1400 -0
  303. package/dist/esm/schema/registry/grafana-clickhouse-datasource.schema.json.js.map +1 -0
  304. package/dist/esm/schema/registry/grafana-cloudflare-datasource.schema.json.js +42 -0
  305. package/dist/esm/schema/registry/grafana-cloudflare-datasource.schema.json.js.map +1 -0
  306. package/dist/esm/schema/registry/grafana-cockroachdb-datasource.schema.json.js +302 -0
  307. package/dist/esm/schema/registry/grafana-cockroachdb-datasource.schema.json.js.map +1 -0
  308. package/dist/esm/schema/registry/grafana-databricks-datasource.schema.json.js +291 -0
  309. package/dist/esm/schema/registry/grafana-databricks-datasource.schema.json.js.map +1 -0
  310. package/dist/esm/schema/registry/grafana-datadog-datasource.schema.json.js +155 -0
  311. package/dist/esm/schema/registry/grafana-datadog-datasource.schema.json.js.map +1 -0
  312. package/dist/esm/schema/registry/grafana-drone-datasource.schema.json.js +64 -0
  313. package/dist/esm/schema/registry/grafana-drone-datasource.schema.json.js.map +1 -0
  314. package/dist/esm/schema/registry/grafana-dynatrace-datasource.schema.json.js +179 -0
  315. package/dist/esm/schema/registry/grafana-dynatrace-datasource.schema.json.js.map +1 -0
  316. package/dist/esm/schema/registry/grafana-falconlogscale-datasource.schema.json.js +134 -0
  317. package/dist/esm/schema/registry/grafana-falconlogscale-datasource.schema.json.js.map +1 -0
  318. package/dist/esm/schema/registry/grafana-github-datasource.schema.json.js +156 -0
  319. package/dist/esm/schema/registry/grafana-github-datasource.schema.json.js.map +1 -0
  320. package/dist/esm/schema/registry/grafana-gitlab-datasource.schema.json.js +84 -0
  321. package/dist/esm/schema/registry/grafana-gitlab-datasource.schema.json.js.map +1 -0
  322. package/dist/esm/schema/registry/grafana-googlesheets-datasource.schema.json.js +231 -0
  323. package/dist/esm/schema/registry/grafana-googlesheets-datasource.schema.json.js.map +1 -0
  324. package/dist/esm/schema/registry/grafana-honeycomb-datasource.schema.json.js +87 -0
  325. package/dist/esm/schema/registry/grafana-honeycomb-datasource.schema.json.js.map +1 -0
  326. package/dist/esm/schema/registry/grafana-iot-sitewise-datasource.schema.json.js +159 -0
  327. package/dist/esm/schema/registry/grafana-iot-sitewise-datasource.schema.json.js.map +1 -0
  328. package/dist/esm/schema/registry/grafana-jira-datasource.schema.json.js +188 -0
  329. package/dist/esm/schema/registry/grafana-jira-datasource.schema.json.js.map +1 -0
  330. package/dist/esm/schema/registry/grafana-logicmonitor-datasource.schema.json.js +63 -0
  331. package/dist/esm/schema/registry/grafana-logicmonitor-datasource.schema.json.js.map +1 -0
  332. package/dist/esm/schema/registry/grafana-looker-datasource.schema.json.js +82 -0
  333. package/dist/esm/schema/registry/grafana-looker-datasource.schema.json.js.map +1 -0
  334. package/dist/esm/schema/registry/grafana-mongodb-datasource.schema.json.js +278 -0
  335. package/dist/esm/schema/registry/grafana-mongodb-datasource.schema.json.js.map +1 -0
  336. package/dist/esm/schema/registry/grafana-mqtt-datasource.schema.json.js +168 -0
  337. package/dist/esm/schema/registry/grafana-mqtt-datasource.schema.json.js.map +1 -0
  338. package/dist/esm/schema/registry/grafana-netlify-datasource.schema.json.js +42 -0
  339. package/dist/esm/schema/registry/grafana-netlify-datasource.schema.json.js.map +1 -0
  340. package/dist/esm/schema/registry/grafana-newrelic-datasource.schema.json.js +129 -0
  341. package/dist/esm/schema/registry/grafana-newrelic-datasource.schema.json.js.map +1 -0
  342. package/dist/esm/schema/registry/grafana-odbc-datasource.schema.json.js +56 -0
  343. package/dist/esm/schema/registry/grafana-odbc-datasource.schema.json.js.map +1 -0
  344. package/dist/esm/schema/registry/grafana-opensearch-datasource.schema.json.js +212 -0
  345. package/dist/esm/schema/registry/grafana-opensearch-datasource.schema.json.js.map +1 -0
  346. package/dist/esm/schema/registry/grafana-oracle-datasource.schema.json.js +186 -0
  347. package/dist/esm/schema/registry/grafana-oracle-datasource.schema.json.js.map +1 -0
  348. package/dist/esm/schema/registry/grafana-pagerduty-datasource.schema.json.js +85 -0
  349. package/dist/esm/schema/registry/grafana-pagerduty-datasource.schema.json.js.map +1 -0
  350. package/dist/esm/schema/registry/grafana-postgresql-datasource.schema.json.js +411 -0
  351. package/dist/esm/schema/registry/grafana-postgresql-datasource.schema.json.js.map +1 -0
  352. package/dist/esm/schema/registry/grafana-pyroscope-datasource.schema.json.js +41 -0
  353. package/dist/esm/schema/registry/grafana-pyroscope-datasource.schema.json.js.map +1 -0
  354. package/dist/esm/schema/registry/grafana-redshift-datasource.schema.json.js +201 -0
  355. package/dist/esm/schema/registry/grafana-redshift-datasource.schema.json.js.map +1 -0
  356. package/dist/esm/schema/registry/grafana-salesforce-datasource.schema.json.js +248 -0
  357. package/dist/esm/schema/registry/grafana-salesforce-datasource.schema.json.js.map +1 -0
  358. package/dist/esm/schema/registry/grafana-saphana-datasource.schema.json.js +208 -0
  359. package/dist/esm/schema/registry/grafana-saphana-datasource.schema.json.js.map +1 -0
  360. package/dist/esm/schema/registry/grafana-sentry-datasource.schema.json.js +94 -0
  361. package/dist/esm/schema/registry/grafana-sentry-datasource.schema.json.js.map +1 -0
  362. package/dist/esm/schema/registry/grafana-servicenow-datasource.schema.json.js +179 -0
  363. package/dist/esm/schema/registry/grafana-servicenow-datasource.schema.json.js.map +1 -0
  364. package/dist/esm/schema/registry/grafana-snowflake-datasource.schema.json.js +304 -0
  365. package/dist/esm/schema/registry/grafana-snowflake-datasource.schema.json.js.map +1 -0
  366. package/dist/esm/schema/registry/grafana-solarwinds-datasource.schema.json.js +77 -0
  367. package/dist/esm/schema/registry/grafana-solarwinds-datasource.schema.json.js.map +1 -0
  368. package/dist/esm/schema/registry/grafana-splunk-datasource.schema.json.js +690 -0
  369. package/dist/esm/schema/registry/grafana-splunk-datasource.schema.json.js.map +1 -0
  370. package/dist/esm/schema/registry/grafana-splunkobservability-datasource.schema.json.js +90 -0
  371. package/dist/esm/schema/registry/grafana-splunkobservability-datasource.schema.json.js.map +1 -0
  372. package/dist/esm/schema/registry/grafana-strava-datasource.schema.json.js +74 -0
  373. package/dist/esm/schema/registry/grafana-strava-datasource.schema.json.js.map +1 -0
  374. package/dist/esm/schema/registry/grafana-sumologic-datasource.schema.json.js +102 -0
  375. package/dist/esm/schema/registry/grafana-sumologic-datasource.schema.json.js.map +1 -0
  376. package/dist/esm/schema/registry/grafana-surrealdb-datasource.schema.json.js +92 -0
  377. package/dist/esm/schema/registry/grafana-surrealdb-datasource.schema.json.js.map +1 -0
  378. package/dist/esm/schema/registry/grafana-timestream-datasource.schema.json.js +145 -0
  379. package/dist/esm/schema/registry/grafana-timestream-datasource.schema.json.js.map +1 -0
  380. package/dist/esm/schema/registry/grafana-vercel-datasource.schema.json.js +62 -0
  381. package/dist/esm/schema/registry/grafana-vercel-datasource.schema.json.js.map +1 -0
  382. package/dist/esm/schema/registry/grafana-wavefront-datasource.schema.json.js +80 -0
  383. package/dist/esm/schema/registry/grafana-wavefront-datasource.schema.json.js.map +1 -0
  384. package/dist/esm/schema/registry/grafana-x-ray-datasource.schema.json.js +112 -0
  385. package/dist/esm/schema/registry/grafana-x-ray-datasource.schema.json.js.map +1 -0
  386. package/dist/esm/schema/registry/grafana-yugabyte-datasource.schema.json.js +114 -0
  387. package/dist/esm/schema/registry/grafana-yugabyte-datasource.schema.json.js.map +1 -0
  388. package/dist/esm/schema/registry/grafana-zendesk-datasource.schema.json.js +76 -0
  389. package/dist/esm/schema/registry/grafana-zendesk-datasource.schema.json.js.map +1 -0
  390. package/dist/esm/schema/registry/graphite.schema.json.js +104 -0
  391. package/dist/esm/schema/registry/graphite.schema.json.js.map +1 -0
  392. package/dist/esm/schema/registry/index.js +157 -0
  393. package/dist/esm/schema/registry/index.js.map +1 -0
  394. package/dist/esm/schema/registry/influxdb.schema.json.js +717 -0
  395. package/dist/esm/schema/registry/influxdb.schema.json.js.map +1 -0
  396. package/dist/esm/schema/registry/jaeger.schema.json.js +59 -0
  397. package/dist/esm/schema/registry/jaeger.schema.json.js.map +1 -0
  398. package/dist/esm/schema/registry/loki.schema.json.js +545 -0
  399. package/dist/esm/schema/registry/loki.schema.json.js.map +1 -0
  400. package/dist/esm/schema/registry/marcusolsson-csv-datasource.schema.json.js +45 -0
  401. package/dist/esm/schema/registry/marcusolsson-csv-datasource.schema.json.js.map +1 -0
  402. package/dist/esm/schema/registry/marcusolsson-json-datasource.schema.json.js +36 -0
  403. package/dist/esm/schema/registry/marcusolsson-json-datasource.schema.json.js.map +1 -0
  404. package/dist/esm/schema/registry/mssql.schema.json.js +292 -0
  405. package/dist/esm/schema/registry/mssql.schema.json.js.map +1 -0
  406. package/dist/esm/schema/registry/mysql.schema.json.js +304 -0
  407. package/dist/esm/schema/registry/mysql.schema.json.js.map +1 -0
  408. package/dist/esm/schema/registry/opentsdb.schema.json.js +113 -0
  409. package/dist/esm/schema/registry/opentsdb.schema.json.js.map +1 -0
  410. package/dist/esm/schema/registry/prometheus.schema.json.js +783 -0
  411. package/dist/esm/schema/registry/prometheus.schema.json.js.map +1 -0
  412. package/dist/esm/schema/registry/stackdriver.schema.json.js +224 -0
  413. package/dist/esm/schema/registry/stackdriver.schema.json.js.map +1 -0
  414. package/dist/esm/schema/registry/tempo.schema.json.js +664 -0
  415. package/dist/esm/schema/registry/tempo.schema.json.js.map +1 -0
  416. package/dist/esm/schema/registry/yesoreyeram-infinity-datasource.schema.json.js +1073 -0
  417. package/dist/esm/schema/registry/yesoreyeram-infinity-datasource.schema.json.js.map +1 -0
  418. package/dist/esm/schema/registry/zipkin.schema.json.js +40 -0
  419. package/dist/esm/schema/registry/zipkin.schema.json.js.map +1 -0
  420. package/dist/esm/schema/utils/dsconfig.js +97 -0
  421. package/dist/esm/schema/utils/dsconfig.js.map +1 -0
  422. package/dist/esm/schema/utils/llm.js +54 -0
  423. package/dist/esm/schema/utils/llm.js.map +1 -0
  424. package/dist/esm/schema/utils/provisioning.js +434 -0
  425. package/dist/esm/schema/utils/provisioning.js.map +1 -0
  426. package/dist/esm/schema/utils/useDatasourceSchema.js +16 -0
  427. package/dist/esm/schema/utils/useDatasourceSchema.js.map +1 -0
  428. package/dist/esm/schemas.d.ts +448 -0
  429. package/dist/esm/schemas.js +6 -0
  430. package/dist/esm/schemas.js.map +1 -0
  431. package/dist/esm/test/mocks/DataQuery.js.map +1 -1
  432. package/dist/esm/test/mocks/Datasource.js +1 -1
  433. package/dist/esm/test/mocks/Datasource.js.map +1 -1
  434. package/dist/esm/test/mocks/Plugin.js +1 -1
  435. package/dist/esm/test/mocks/Plugin.js.map +1 -1
  436. package/dist/esm/test/mocks/QueryEditorProps.js.map +1 -1
  437. package/dist/esm/test/mocks/utils.js +2 -2
  438. package/dist/esm/test/mocks/utils.js.map +1 -1
  439. package/dist/esm/test-utils.d.ts +24 -24
  440. package/package.json +40 -20
@@ -7,7 +7,15 @@ import '@grafana/data';
7
7
  import '../../SQLEditor/standardSql/language.js';
8
8
  import '../../SQLEditor/standardSql/macros.js';
9
9
 
10
- function QueryEditorRaw({ children, onChange, query, width, height, completionProvider }) {
10
+ function QueryEditorRaw({
11
+ children,
12
+ onChange,
13
+ query,
14
+ width,
15
+ height,
16
+ completionProvider,
17
+ language = "sql"
18
+ }) {
11
19
  const queryRef = useRef(query);
12
20
  useEffect(() => {
13
21
  queryRef.current = query;
@@ -30,7 +38,7 @@ function QueryEditorRaw({ children, onChange, query, width, height, completionPr
30
38
  height,
31
39
  query: query.rawSql,
32
40
  onChange: onRawQueryChange,
33
- language: { id: "sql", completionProvider, formatter: formatSQL }
41
+ language: { id: "sql", completionProvider, formatter: (q) => formatSQL(q, language) }
34
42
  },
35
43
  children
36
44
  );
@@ -1 +1 @@
1
- {"version":3,"file":"QueryEditorRaw.js","sources":["../../../../../src/components/QueryEditor/query-editor-raw/QueryEditorRaw.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from 'react';\n\nimport { type SQLQuery } from '../types';\n\nimport { formatSQL } from '../utils/formatSQL';\nimport { type LanguageCompletionProvider, SQLEditor } from '../../SQLEditor';\n\ntype Props = {\n query: SQLQuery;\n onChange: (value: SQLQuery, processQuery: boolean) => void;\n children?: (props: { formatQuery: () => void }) => React.ReactNode;\n width?: number;\n height?: number;\n completionProvider: LanguageCompletionProvider;\n};\n\nexport function QueryEditorRaw({ children, onChange, query, width, height, completionProvider }: Props) {\n // We need to pass query via ref to SQLEditor as onChange is executed via monacoEditor.onDidChangeModelContent callback, not onChange property\n const queryRef = useRef<SQLQuery>(query);\n useEffect(() => {\n queryRef.current = query;\n }, [query]);\n\n const onRawQueryChange = useCallback(\n (rawSql: string, processQuery: boolean) => {\n const newQuery = {\n ...queryRef.current,\n rawQuery: true,\n rawSql,\n };\n onChange(newQuery, processQuery);\n },\n [onChange]\n );\n\n return (\n <SQLEditor\n width={width}\n height={height}\n query={query.rawSql!}\n onChange={onRawQueryChange}\n language={{ id: 'sql', completionProvider, formatter: formatSQL }}\n >\n {children}\n </SQLEditor>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;AAgBgB,SAAA,cAAA,CAAe,EAAE,QAAU,EAAA,QAAA,EAAU,OAAO,KAAO,EAAA,MAAA,EAAQ,oBAA6B,EAAA;AAEtG,EAAM,MAAA,QAAA,GAAW,OAAiB,KAAK,CAAA;AACvC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,OAAU,GAAA,KAAA;AAAA,GACrB,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,gBAAmB,GAAA,WAAA;AAAA,IACvB,CAAC,QAAgB,YAA0B,KAAA;AACzC,MAAA,MAAM,QAAW,GAAA;AAAA,QACf,GAAG,QAAS,CAAA,OAAA;AAAA,QACZ,QAAU,EAAA,IAAA;AAAA,QACV;AAAA,OACF;AACA,MAAA,QAAA,CAAS,UAAU,YAAY,CAAA;AAAA,KACjC;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAO,KAAM,CAAA,MAAA;AAAA,MACb,QAAU,EAAA,gBAAA;AAAA,MACV,UAAU,EAAE,EAAA,EAAI,KAAO,EAAA,kBAAA,EAAoB,WAAW,SAAU;AAAA,KAAA;AAAA,IAE/D;AAAA,GACH;AAEJ;;;;"}
1
+ {"version":3,"file":"QueryEditorRaw.js","sources":["../../../../../src/components/QueryEditor/query-editor-raw/QueryEditorRaw.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from 'react';\n\nimport { type SQLQuery } from '../types';\n\nimport { formatSQL } from '../utils/formatSQL';\nimport { type LanguageCompletionProvider, SQLEditor } from '../../SQLEditor';\nimport type { SqlLanguage } from 'sql-formatter';\n\ntype Props = {\n query: SQLQuery;\n onChange: (value: SQLQuery, processQuery: boolean) => void;\n children?: (props: { formatQuery: () => void }) => React.ReactNode;\n width?: number;\n height?: number;\n completionProvider: LanguageCompletionProvider;\n language?: SqlLanguage;\n};\n\nexport function QueryEditorRaw({\n children,\n onChange,\n query,\n width,\n height,\n completionProvider,\n language = 'sql',\n}: Props) {\n // We need to pass query via ref to SQLEditor as onChange is executed via monacoEditor.onDidChangeModelContent callback, not onChange property\n const queryRef = useRef<SQLQuery>(query);\n useEffect(() => {\n queryRef.current = query;\n }, [query]);\n\n const onRawQueryChange = useCallback(\n (rawSql: string, processQuery: boolean) => {\n const newQuery = {\n ...queryRef.current,\n rawQuery: true,\n rawSql,\n };\n onChange(newQuery, processQuery);\n },\n [onChange]\n );\n\n return (\n <SQLEditor\n width={width}\n height={height}\n query={query.rawSql!}\n onChange={onRawQueryChange}\n language={{ id: 'sql', completionProvider, formatter: (q) => formatSQL(q, language) }}\n >\n {children}\n </SQLEditor>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;AAkBO,SAAS,cAAA,CAAe;AAAA,EAC7B,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,EAAU;AAER,EAAA,MAAM,QAAA,GAAW,OAAiB,KAAK,CAAA;AACvC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AAAA,EACrB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,gBAAA,GAAmB,WAAA;AAAA,IACvB,CAAC,QAAgB,YAAA,KAA0B;AACzC,MAAA,MAAM,QAAA,GAAW;AAAA,QACf,GAAG,QAAA,CAAS,OAAA;AAAA,QACZ,QAAA,EAAU,IAAA;AAAA,QACV;AAAA,OACF;AACA,MAAA,QAAA,CAAS,UAAU,YAAY,CAAA;AAAA,IACjC,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAO,KAAA,CAAM,MAAA;AAAA,MACb,QAAA,EAAU,gBAAA;AAAA,MACV,QAAA,EAAU,EAAE,EAAA,EAAI,KAAA,EAAO,kBAAA,EAAoB,SAAA,EAAW,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,EAAG,QAAQ,CAAA;AAAE,KAAA;AAAA,IAEnF;AAAA,GACH;AAEJ;;;;"}
@@ -2,6 +2,7 @@ import { css } from '@emotion/css';
2
2
  import React, { useState, useMemo } from 'react';
3
3
  import { useTheme2, HorizontalGroup, IconButton, Tooltip, Icon } from '@grafana/ui';
4
4
  import { QueryValidator } from './QueryValidator.js';
5
+ import { reportInteraction } from '@grafana/runtime';
5
6
 
6
7
  function QueryToolbox({ showTools, onFormatCode, onExpand, isExpanded, ...validatorProps }) {
7
8
  const theme = useTheme2();
@@ -36,9 +37,13 @@ function QueryToolbox({ showTools, onFormatCode, onExpand, isExpanded, ...valida
36
37
  };
37
38
  }, [theme]);
38
39
  let style = {};
39
- if (!showTools && validationResult === undefined) {
40
+ if (!showTools && validationResult === void 0) {
40
41
  style = { height: 0, padding: 0, visibility: "hidden" };
41
42
  }
43
+ const onFormatClick = () => {
44
+ reportInteraction("grafana_sql_query_editor_format_click");
45
+ onFormatCode == null ? void 0 : onFormatCode();
46
+ };
42
47
  return /* @__PURE__ */ React.createElement("div", { className: styles.container, style }, /* @__PURE__ */ React.createElement("div", null, validatorProps.onValidate && /* @__PURE__ */ React.createElement(
43
48
  QueryValidator,
44
49
  {
@@ -48,7 +53,7 @@ function QueryToolbox({ showTools, onFormatCode, onExpand, isExpanded, ...valida
48
53
  validatorProps.onValidate(result);
49
54
  }
50
55
  }
51
- )), showTools && /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(HorizontalGroup, { spacing: "sm" }, onFormatCode && /* @__PURE__ */ React.createElement(IconButton, { onClick: onFormatCode, name: "brackets-curly", size: "xs", tooltip: "Format query" }), onExpand && /* @__PURE__ */ React.createElement(
56
+ )), showTools && /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(HorizontalGroup, { spacing: "sm" }, onFormatCode && /* @__PURE__ */ React.createElement(IconButton, { onClick: onFormatClick, name: "brackets-curly", size: "xs", tooltip: "Format query" }), onExpand && /* @__PURE__ */ React.createElement(
52
57
  IconButton,
53
58
  {
54
59
  onClick: () => onExpand(!isExpanded),
@@ -1 +1 @@
1
- {"version":3,"file":"QueryToolbox.js","sources":["../../../../../src/components/QueryEditor/query-editor-raw/QueryToolbox.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport React, { useMemo, useState } from 'react';\n\nimport { HorizontalGroup, Icon, IconButton, Tooltip, useTheme2 } from '@grafana/ui';\n\nimport { QueryValidator, type QueryValidatorProps } from './QueryValidator';\n\ninterface QueryToolboxProps extends Omit<QueryValidatorProps, 'onValidate'> {\n showTools?: boolean;\n isExpanded?: boolean;\n onFormatCode?: () => void;\n onExpand?: (expand: boolean) => void;\n onValidate?: (isValid: boolean) => void;\n}\n\nexport function QueryToolbox({ showTools, onFormatCode, onExpand, isExpanded, ...validatorProps }: QueryToolboxProps) {\n const theme = useTheme2();\n const [validationResult, setValidationResult] = useState<boolean>();\n\n const styles = useMemo(() => {\n return {\n container: css`\n border: 1px solid ${theme.colors.border.medium};\n border-top: none;\n padding: ${theme.spacing(0.5, 0.5, 0.5, 0.5)};\n display: flex;\n flex-grow: 1;\n justify-content: space-between;\n font-size: ${theme.typography.bodySmall.fontSize};\n `,\n error: css`\n color: ${theme.colors.error.text};\n font-size: ${theme.typography.bodySmall.fontSize};\n font-family: ${theme.typography.fontFamilyMonospace};\n `,\n valid: css`\n color: ${theme.colors.success.text};\n `,\n info: css`\n color: ${theme.colors.text.secondary};\n `,\n hint: css`\n color: ${theme.colors.text.disabled};\n white-space: nowrap;\n cursor: help;\n `,\n };\n }, [theme]);\n\n let style = {};\n\n if (!showTools && validationResult === undefined) {\n style = { height: 0, padding: 0, visibility: 'hidden' };\n }\n\n return (\n <div className={styles.container} style={style}>\n <div>\n {validatorProps.onValidate && (\n <QueryValidator\n {...validatorProps}\n onValidate={(result: boolean) => {\n setValidationResult(result);\n validatorProps.onValidate!(result);\n }}\n />\n )}\n </div>\n {showTools && (\n <div>\n <HorizontalGroup spacing=\"sm\">\n {onFormatCode && (\n <IconButton onClick={onFormatCode} name=\"brackets-curly\" size=\"xs\" tooltip=\"Format query\" />\n )}\n {onExpand && (\n <IconButton\n onClick={() => onExpand(!isExpanded)}\n name={isExpanded ? 'angle-up' : 'angle-down'}\n size=\"xs\"\n tooltip={isExpanded ? 'Collapse editor' : 'Expand editor'}\n />\n )}\n <Tooltip content=\"Hit CTRL/CMD+Return to run query\">\n <Icon className={styles.hint} name=\"keyboard\" />\n </Tooltip>\n </HorizontalGroup>\n </div>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryToolbox.js","sources":["../../../../../src/components/QueryEditor/query-editor-raw/QueryToolbox.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport React, { useMemo, useState } from 'react';\n\nimport { HorizontalGroup, Icon, IconButton, Tooltip, useTheme2 } from '@grafana/ui';\n\nimport { QueryValidator, type QueryValidatorProps } from './QueryValidator';\nimport { reportInteraction } from '@grafana/runtime';\n\ninterface QueryToolboxProps extends Omit<QueryValidatorProps, 'onValidate'> {\n showTools?: boolean;\n isExpanded?: boolean;\n onFormatCode?: () => void;\n onExpand?: (expand: boolean) => void;\n onValidate?: (isValid: boolean) => void;\n}\n\nexport function QueryToolbox({ showTools, onFormatCode, onExpand, isExpanded, ...validatorProps }: QueryToolboxProps) {\n const theme = useTheme2();\n const [validationResult, setValidationResult] = useState<boolean>();\n\n const styles = useMemo(() => {\n return {\n container: css`\n border: 1px solid ${theme.colors.border.medium};\n border-top: none;\n padding: ${theme.spacing(0.5, 0.5, 0.5, 0.5)};\n display: flex;\n flex-grow: 1;\n justify-content: space-between;\n font-size: ${theme.typography.bodySmall.fontSize};\n `,\n error: css`\n color: ${theme.colors.error.text};\n font-size: ${theme.typography.bodySmall.fontSize};\n font-family: ${theme.typography.fontFamilyMonospace};\n `,\n valid: css`\n color: ${theme.colors.success.text};\n `,\n info: css`\n color: ${theme.colors.text.secondary};\n `,\n hint: css`\n color: ${theme.colors.text.disabled};\n white-space: nowrap;\n cursor: help;\n `,\n };\n }, [theme]);\n\n let style = {};\n\n if (!showTools && validationResult === undefined) {\n style = { height: 0, padding: 0, visibility: 'hidden' };\n }\n const onFormatClick = () => {\n reportInteraction('grafana_sql_query_editor_format_click');\n onFormatCode?.();\n };\n\n return (\n <div className={styles.container} style={style}>\n <div>\n {validatorProps.onValidate && (\n <QueryValidator\n {...validatorProps}\n onValidate={(result: boolean) => {\n setValidationResult(result);\n validatorProps.onValidate!(result);\n }}\n />\n )}\n </div>\n {showTools && (\n <div>\n <HorizontalGroup spacing=\"sm\">\n {onFormatCode && (\n <IconButton onClick={onFormatClick} name=\"brackets-curly\" size=\"xs\" tooltip=\"Format query\" />\n )}\n {onExpand && (\n <IconButton\n onClick={() => onExpand(!isExpanded)}\n name={isExpanded ? 'angle-up' : 'angle-down'}\n size=\"xs\"\n tooltip={isExpanded ? 'Collapse editor' : 'Expand editor'}\n />\n )}\n <Tooltip content=\"Hit CTRL/CMD+Return to run query\">\n <Icon className={styles.hint} name=\"keyboard\" />\n </Tooltip>\n </HorizontalGroup>\n </div>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -28,7 +28,7 @@ function QueryValidator({ db, query, onValidate, range }) {
28
28
  const [state, validateQuery] = useAsyncFn(
29
29
  async (q) => {
30
30
  var _a2;
31
- if (((_a2 = q.rawSql) == null ? undefined : _a2.trim()) === "") {
31
+ if (((_a2 = q.rawSql) == null ? void 0 : _a2.trim()) === "") {
32
32
  return null;
33
33
  }
34
34
  return await db.validateQuery(q, range);
@@ -47,17 +47,17 @@ function QueryValidator({ db, query, onValidate, range }) {
47
47
  [query, validateQuery]
48
48
  );
49
49
  useEffect(() => {
50
- if (validationResult == null ? undefined : validationResult.isError) {
50
+ if (validationResult == null ? void 0 : validationResult.isError) {
51
51
  onValidate(false);
52
52
  }
53
- if (validationResult == null ? undefined : validationResult.isValid) {
53
+ if (validationResult == null ? void 0 : validationResult.isValid) {
54
54
  onValidate(true);
55
55
  }
56
56
  }, [validationResult, onValidate]);
57
57
  if (!state.value && !state.loading) {
58
58
  return null;
59
59
  }
60
- const error = ((_a = state.value) == null ? undefined : _a.error) ? processErrorMessage(state.value.error) : "";
60
+ const error = ((_a = state.value) == null ? void 0 : _a.error) ? processErrorMessage(state.value.error) : "";
61
61
  return /* @__PURE__ */ React.createElement(React.Fragment, null, state.loading && /* @__PURE__ */ React.createElement("div", { className: styles.info }, /* @__PURE__ */ React.createElement(Spinner, { inline: true, size: 12 }), " Validating query..."), !state.loading && state.value && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(React.Fragment, null, state.value.isValid && state.value.statistics && /* @__PURE__ */ React.createElement("div", { className: styles.valid }, /* @__PURE__ */ React.createElement(Icon, { name: "check" }), " This query will process", " ", /* @__PURE__ */ React.createElement("strong", null, formattedValueToString(valueFormatter(state.value.statistics.TotalBytesProcessed))), " ", "when run.")), /* @__PURE__ */ React.createElement(React.Fragment, null, state.value.isError && /* @__PURE__ */ React.createElement("div", { className: styles.error }, error))));
62
62
  }
63
63
  function processErrorMessage(error) {
@@ -1 +1 @@
1
- {"version":3,"file":"QueryValidator.js","sources":["../../../../../src/components/QueryEditor/query-editor-raw/QueryValidator.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport React, { useState, useMemo, useEffect } from 'react';\nimport { useAsyncFn, useDebounce } from 'react-use';\nimport { formattedValueToString, getValueFormat, type TimeRange } from '@grafana/data';\nimport { Icon, Spinner, useTheme2 } from '@grafana/ui';\nimport { type DB, type SQLQuery, type ValidationResults } from '../types';\n\nexport interface QueryValidatorProps {\n db: DB;\n query: SQLQuery;\n range?: TimeRange;\n onValidate: (isValid: boolean) => void;\n}\n\nexport function QueryValidator({ db, query, onValidate, range }: QueryValidatorProps) {\n const [validationResult, setValidationResult] = useState<ValidationResults | null>();\n const theme = useTheme2();\n const valueFormatter = useMemo(() => getValueFormat('bytes'), []);\n\n const styles = useMemo(() => {\n return {\n error: css`\n color: ${theme.colors.error.text};\n font-size: ${theme.typography.bodySmall.fontSize};\n font-family: ${theme.typography.fontFamilyMonospace};\n `,\n valid: css`\n color: ${theme.colors.success.text};\n `,\n info: css`\n color: ${theme.colors.text.secondary};\n `,\n };\n }, [theme]);\n\n const [state, validateQuery] = useAsyncFn(\n async (q: SQLQuery) => {\n if (q.rawSql?.trim() === '') {\n return null;\n }\n\n return await db.validateQuery(q, range);\n },\n [db]\n );\n\n const [,] = useDebounce(\n async () => {\n const result = await validateQuery(query);\n if (result) {\n setValidationResult(result);\n }\n\n return null;\n },\n 1000,\n [query, validateQuery]\n );\n\n useEffect(() => {\n if (validationResult?.isError) {\n onValidate(false);\n }\n if (validationResult?.isValid) {\n onValidate(true);\n }\n }, [validationResult, onValidate]);\n\n if (!state.value && !state.loading) {\n return null;\n }\n\n const error = state.value?.error ? processErrorMessage(state.value.error) : '';\n\n return (\n <>\n {state.loading && (\n <div className={styles.info}>\n <Spinner inline={true} size={12} /> Validating query...\n </div>\n )}\n {!state.loading && state.value && (\n <>\n <>\n {state.value.isValid && state.value.statistics && (\n <div className={styles.valid}>\n <Icon name=\"check\" /> This query will process{' '}\n <strong>{formattedValueToString(valueFormatter(state.value.statistics.TotalBytesProcessed))}</strong>{' '}\n when run.\n </div>\n )}\n </>\n\n <>{state.value.isError && <div className={styles.error}>{error}</div>}</>\n </>\n )}\n </>\n );\n}\n\nfunction processErrorMessage(error: string) {\n const splat = error.split(':');\n if (splat.length > 2) {\n return splat.slice(2).join(':');\n }\n return error;\n}\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"QueryValidator.js","sources":["../../../../../src/components/QueryEditor/query-editor-raw/QueryValidator.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport React, { useState, useMemo, useEffect } from 'react';\nimport { useAsyncFn, useDebounce } from 'react-use';\nimport { formattedValueToString, getValueFormat, type TimeRange } from '@grafana/data';\nimport { Icon, Spinner, useTheme2 } from '@grafana/ui';\nimport { type DB, type SQLQuery, type ValidationResults } from '../types';\n\nexport interface QueryValidatorProps {\n db: DB;\n query: SQLQuery;\n range?: TimeRange;\n onValidate: (isValid: boolean) => void;\n}\n\nexport function QueryValidator({ db, query, onValidate, range }: QueryValidatorProps) {\n const [validationResult, setValidationResult] = useState<ValidationResults | null>();\n const theme = useTheme2();\n const valueFormatter = useMemo(() => getValueFormat('bytes'), []);\n\n const styles = useMemo(() => {\n return {\n error: css`\n color: ${theme.colors.error.text};\n font-size: ${theme.typography.bodySmall.fontSize};\n font-family: ${theme.typography.fontFamilyMonospace};\n `,\n valid: css`\n color: ${theme.colors.success.text};\n `,\n info: css`\n color: ${theme.colors.text.secondary};\n `,\n };\n }, [theme]);\n\n const [state, validateQuery] = useAsyncFn(\n async (q: SQLQuery) => {\n if (q.rawSql?.trim() === '') {\n return null;\n }\n\n return await db.validateQuery(q, range);\n },\n [db]\n );\n\n const [,] = useDebounce(\n async () => {\n const result = await validateQuery(query);\n if (result) {\n setValidationResult(result);\n }\n\n return null;\n },\n 1000,\n [query, validateQuery]\n );\n\n useEffect(() => {\n if (validationResult?.isError) {\n onValidate(false);\n }\n if (validationResult?.isValid) {\n onValidate(true);\n }\n }, [validationResult, onValidate]);\n\n if (!state.value && !state.loading) {\n return null;\n }\n\n const error = state.value?.error ? processErrorMessage(state.value.error) : '';\n\n return (\n <>\n {state.loading && (\n <div className={styles.info}>\n <Spinner inline={true} size={12} /> Validating query...\n </div>\n )}\n {!state.loading && state.value && (\n <>\n <>\n {state.value.isValid && state.value.statistics && (\n <div className={styles.valid}>\n <Icon name=\"check\" /> This query will process{' '}\n <strong>{formattedValueToString(valueFormatter(state.value.statistics.TotalBytesProcessed))}</strong>{' '}\n when run.\n </div>\n )}\n </>\n\n <>{state.value.isError && <div className={styles.error}>{error}</div>}</>\n </>\n )}\n </>\n );\n}\n\nfunction processErrorMessage(error: string) {\n const splat = error.split(':');\n if (splat.length > 2) {\n return splat.slice(2).join(':');\n }\n return error;\n}\n"],"names":["_a"],"mappings":"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"}
@@ -8,9 +8,18 @@ import { QueryEditorRaw } from './QueryEditorRaw.js';
8
8
  import { QueryToolbox } from './QueryToolbox.js';
9
9
  import '../types.js';
10
10
 
11
- function RawEditor({ db, query, onChange, onRunQuery, onValidate, queryToValidate, range }) {
11
+ function RawEditor({
12
+ db,
13
+ query,
14
+ onChange,
15
+ onRunQuery,
16
+ onValidate,
17
+ queryToValidate,
18
+ range,
19
+ language = "sql"
20
+ }) {
12
21
  const theme = useTheme2();
13
- const styles = useStyles2(getStyles);
22
+ const styles = useStyles2(getStyles$n);
14
23
  const [isExpanded, setIsExpanded] = useState(false);
15
24
  const [toolboxRef, toolboxMeasure] = useMeasure();
16
25
  const [editorRef, editorMeasure] = useMeasure();
@@ -22,7 +31,8 @@ function RawEditor({ db, query, onChange, onRunQuery, onValidate, queryToValidat
22
31
  completionProvider,
23
32
  query,
24
33
  width,
25
- height: height ? height - toolboxMeasure.height : undefined,
34
+ language,
35
+ height: height ? height - toolboxMeasure.height : void 0,
26
36
  onChange
27
37
  },
28
38
  ({ formatQuery }) => {
@@ -79,7 +89,7 @@ function RawEditor({ db, query, onChange, onRunQuery, onValidate, queryToValidat
79
89
  renderEditor(true)
80
90
  ));
81
91
  }
82
- function getStyles(theme) {
92
+ function getStyles$n(theme) {
83
93
  return {
84
94
  modal: css`
85
95
  width: 95vw;
@@ -1 +1 @@
1
- {"version":3,"file":"RawEditor.js","sources":["../../../../../src/components/QueryEditor/query-editor-raw/RawEditor.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport { css } from '@emotion/css';\nimport { useMeasure } from 'react-use';\n// @ts-ignore\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Modal, useStyles2, useTheme2 } from '@grafana/ui';\nimport { QueryEditorRaw } from './QueryEditorRaw';\nimport { QueryToolbox } from './QueryToolbox';\nimport { type QueryEditorProps, type SQLQuery } from '../types';\n\ninterface RawEditorProps extends Omit<QueryEditorProps, 'onChange'> {\n onRunQuery: () => void;\n onChange: (q: SQLQuery, processQuery: boolean) => void;\n onValidate: (isValid: boolean) => void;\n queryToValidate: SQLQuery;\n}\n\nexport function RawEditor({ db, query, onChange, onRunQuery, onValidate, queryToValidate, range }: RawEditorProps) {\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n const [isExpanded, setIsExpanded] = useState(false);\n const [toolboxRef, toolboxMeasure] = useMeasure<HTMLDivElement>();\n const [editorRef, editorMeasure] = useMeasure<HTMLDivElement>();\n\n const completionProvider = useMemo(() => db.getSqlCompletionProvider(), [db]);\n\n const renderQueryEditor = (width?: number, height?: number) => {\n return (\n <QueryEditorRaw\n completionProvider={completionProvider}\n query={query}\n width={width}\n height={height ? height - toolboxMeasure.height : undefined}\n onChange={onChange}\n >\n {({ formatQuery }) => {\n return (\n <div ref={toolboxRef}>\n <QueryToolbox\n db={db}\n query={queryToValidate}\n onValidate={onValidate}\n onFormatCode={formatQuery}\n showTools\n range={range}\n onExpand={setIsExpanded}\n isExpanded={isExpanded}\n />\n </div>\n );\n }}\n </QueryEditorRaw>\n );\n };\n\n interface AutoSizerProps {\n width: number;\n height: number;\n }\n\n const renderEditor = (standalone = false) => {\n return standalone ? (\n <AutoSizer>\n {({ width, height }: AutoSizerProps) => {\n return renderQueryEditor(width, height);\n }}\n </AutoSizer>\n ) : (\n <div ref={editorRef}>{renderQueryEditor()}</div>\n );\n };\n\n const renderPlaceholder = () => {\n return (\n <div\n style={{\n width: editorMeasure.width,\n height: editorMeasure.height,\n background: theme.colors.background.primary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n Editing in expanded code editor\n </div>\n );\n };\n\n return (\n <>\n {isExpanded ? renderPlaceholder() : renderEditor()}\n {isExpanded && (\n <Modal\n title={`Query ${query.refId}`}\n closeOnBackdropClick={false}\n closeOnEscape={false}\n className={styles.modal}\n contentClassName={styles.modalContent}\n isOpen={isExpanded}\n onDismiss={() => {\n setIsExpanded(false);\n }}\n >\n {renderEditor(true)}\n </Modal>\n )}\n </>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n modal: css`\n width: 95vw;\n height: 95vh;\n `,\n modalContent: css`\n height: 100%;\n padding-top: 0;\n `,\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RawEditor.js","sources":["../../../../../src/components/QueryEditor/query-editor-raw/RawEditor.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport { css } from '@emotion/css';\nimport { useMeasure } from 'react-use';\n// @ts-ignore\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Modal, useStyles2, useTheme2 } from '@grafana/ui';\nimport { QueryEditorRaw } from './QueryEditorRaw';\nimport { QueryToolbox } from './QueryToolbox';\nimport { type QueryEditorProps, type SQLQuery } from '../types';\nimport type { SqlLanguage } from 'sql-formatter';\n\ninterface RawEditorProps extends Omit<QueryEditorProps, 'onChange'> {\n onRunQuery: () => void;\n onChange: (q: SQLQuery, processQuery: boolean) => void;\n onValidate: (isValid: boolean) => void;\n queryToValidate: SQLQuery;\n language?: SqlLanguage;\n}\n\nexport function RawEditor({\n db,\n query,\n onChange,\n onRunQuery,\n onValidate,\n queryToValidate,\n range,\n language = 'sql',\n}: RawEditorProps) {\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n const [isExpanded, setIsExpanded] = useState(false);\n const [toolboxRef, toolboxMeasure] = useMeasure<HTMLDivElement>();\n const [editorRef, editorMeasure] = useMeasure<HTMLDivElement>();\n\n const completionProvider = useMemo(() => db.getSqlCompletionProvider(), [db]);\n\n const renderQueryEditor = (width?: number, height?: number) => {\n return (\n <QueryEditorRaw\n completionProvider={completionProvider}\n query={query}\n width={width}\n language={language}\n height={height ? height - toolboxMeasure.height : undefined}\n onChange={onChange}\n >\n {({ formatQuery }) => {\n return (\n <div ref={toolboxRef}>\n <QueryToolbox\n db={db}\n query={queryToValidate}\n onValidate={onValidate}\n onFormatCode={formatQuery}\n showTools\n range={range}\n onExpand={setIsExpanded}\n isExpanded={isExpanded}\n />\n </div>\n );\n }}\n </QueryEditorRaw>\n );\n };\n\n interface AutoSizerProps {\n width: number;\n height: number;\n }\n\n const renderEditor = (standalone = false) => {\n return standalone ? (\n <AutoSizer>\n {({ width, height }: AutoSizerProps) => {\n return renderQueryEditor(width, height);\n }}\n </AutoSizer>\n ) : (\n <div ref={editorRef}>{renderQueryEditor()}</div>\n );\n };\n\n const renderPlaceholder = () => {\n return (\n <div\n style={{\n width: editorMeasure.width,\n height: editorMeasure.height,\n background: theme.colors.background.primary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n Editing in expanded code editor\n </div>\n );\n };\n\n return (\n <>\n {isExpanded ? renderPlaceholder() : renderEditor()}\n {isExpanded && (\n <Modal\n title={`Query ${query.refId}`}\n closeOnBackdropClick={false}\n closeOnEscape={false}\n className={styles.modal}\n contentClassName={styles.modalContent}\n isOpen={isExpanded}\n onDismiss={() => {\n setIsExpanded(false);\n }}\n >\n {renderEditor(true)}\n </Modal>\n )}\n </>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n modal: css`\n width: 95vw;\n height: 95vh;\n `,\n modalContent: css`\n height: 100%;\n padding-top: 0;\n `,\n };\n}\n"],"names":["getStyles"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import '@react-awesome-query-builder/ui';
2
2
  import { toOption as toOption$1 } from '@grafana/data';
3
- import 'lodash';
4
3
  import '@grafana/ui';
5
4
  import 'react';
6
5
  import '../SQLEditor/standardSql/language.js';
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../../src/components/QueryEditor/types.ts"],"sourcesContent":["import { type JsonTree } from '@react-awesome-query-builder/ui';\n\nimport {\n type DataFrame,\n type DataSourceJsonData,\n type MetricFindValue,\n type SelectableValue,\n type TimeRange,\n toOption as toOptionFromData,\n} from '@grafana/data';\n\nimport { type DataQuery } from '@grafana/schema';\n\nimport { type QueryWithDefaults } from './defaults';\nimport {\n type QueryEditorFunctionExpression,\n type QueryEditorGroupByExpression,\n type QueryEditorPropertyExpression,\n} from './expressions';\nimport { type CompletionItemKind, type LanguageCompletionProvider } from '../SQLEditor';\n\nexport interface SqlQueryForInterpolation {\n dataset?: string;\n alias?: string;\n format?: QueryFormat;\n rawSql?: string;\n refId: string;\n hide?: boolean;\n}\n\nexport interface SQLConnectionLimits {\n maxOpenConns: number;\n maxIdleConns: number;\n connMaxLifetime: number;\n}\n\nexport interface SQLOptions extends SQLConnectionLimits, DataSourceJsonData {\n tlsAuth: boolean;\n tlsAuthWithCACert: boolean;\n timezone: string;\n tlsSkipVerify: boolean;\n user: string;\n database: string;\n url: string;\n timeInterval: string;\n}\n\n// Match the Enums Expected in SqlUtil and SqlDS\n// https://github.com/grafana/grafana-plugin-sdk-go/blob/main/data/sqlutil/query.go#L18-L29\nexport enum QueryFormat {\n Timeseries,\n Table,\n Logs,\n Trace,\n OptionMulti,\n}\n\nexport enum EditorMode {\n Builder = 'builder',\n Code = 'code',\n}\n\nexport interface SQLQuery extends DataQuery {\n alias?: string;\n format?: QueryFormat;\n rawSql?: string;\n dataset?: string; // When catalog is present, dataset represents the schema. Otherwise, it's the dataset.\n catalog?: string;\n table?: string;\n sql?: SQLExpression;\n editorMode?: EditorMode;\n rawQuery?: boolean;\n}\n\nexport interface NameValue {\n name: string;\n value: string;\n}\n\nexport type SQLFilters = NameValue[];\n\nexport interface SQLExpression {\n columns?: QueryEditorFunctionExpression[];\n whereJsonTree?: JsonTree;\n whereString?: string;\n filters?: SQLFilters;\n groupBy?: QueryEditorGroupByExpression[];\n orderBy?: QueryEditorPropertyExpression;\n orderByDirection?: 'ASC' | 'DESC';\n limit?: number;\n offset?: number;\n}\n\nexport interface TableSchema {\n name?: string;\n schema?: TableFieldSchema[];\n}\n\nexport interface TableFieldSchema {\n name: string;\n description?: string;\n type: string;\n repeated: boolean;\n schema: TableFieldSchema[];\n}\n\nexport interface QueryRowFilter {\n filter: boolean;\n group: boolean;\n order: boolean;\n preview: boolean;\n}\n\nexport const QUERY_FORMAT_OPTIONS = [\n { label: 'Time series', value: QueryFormat.Timeseries },\n { label: 'Table', value: QueryFormat.Table },\n];\n\nconst backWardToOption = (value: string) => ({ label: value, value });\n\nexport const toOption = toOptionFromData ?? backWardToOption;\n\nexport interface ResourceSelectorProps {\n disabled?: boolean;\n className?: string;\n applyDefault?: boolean;\n}\n// React Awesome Query builder field types.\n// These are responsible for rendering the correct UI for the field.\nexport type RAQBFieldTypes = 'text' | 'number' | 'boolean' | 'datetime' | 'date' | 'time';\n\nexport interface SQLSelectableValue extends SelectableValue {\n type?: string;\n raqbFieldType?: RAQBFieldTypes;\n}\n\nexport interface Aggregate {\n id: string;\n name: string;\n description?: string;\n}\n\nexport interface DB {\n init?: (datasourceId?: string) => Promise<boolean>;\n datasets: (catalog?: string) => Promise<string[]>; // When catalog is provided, returns schemas for that catalog\n catalogs?: () => Promise<string[]>;\n tables: (dataset?: string, catalog?: string, schema?: string) => Promise<string[]>;\n fields: (query: SQLQuery, order?: boolean) => Promise<SQLSelectableValue[]>;\n validateQuery: (query: SQLQuery, range?: TimeRange) => Promise<ValidationResults>;\n dsID: () => number;\n dispose?: (dsID?: string) => void;\n lookup: (path?: string) => Promise<Array<{ name: string; completion: string }>>;\n getSqlCompletionProvider: () => LanguageCompletionProvider;\n toRawSql?: (query: SQLQuery) => string;\n functions: () => Promise<Aggregate[]>;\n labels?: Map<'dataset', string>;\n disableDatasets?: boolean;\n disableCatalogs?: boolean;\n}\n\nexport interface QueryEditorProps {\n db: DB;\n query: QueryWithDefaults;\n onChange: (query: SQLQuery) => void;\n range?: TimeRange;\n}\n\nexport interface ValidationResults {\n query: SQLQuery;\n rawSql?: string;\n error: string;\n isError: boolean;\n isValid: boolean;\n statistics?: {\n TotalBytesProcessed: number;\n } | null;\n}\n\nexport interface SqlQueryModel {\n interpolate: () => string;\n quoteLiteral: (v: string) => string;\n}\n\nexport interface ResponseParser {\n transformMetricFindResponse: (frame: DataFrame) => MetricFindValue[];\n}\n\nexport interface MetaDefinition {\n name: string;\n completion?: string;\n kind: CompletionItemKind;\n}\n"],"names":["QueryFormat","EditorMode","toOptionFromData"],"mappings":";;;;;;;;;;;AAAA,IAAA,EAAA;AAiDY,IAAA,WAAA,qBAAAA,YAAL,KAAA;AACL,EAAAA,YAAA,CAAA,YAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAA;AACA,EAAAA,YAAA,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAA;AACA,EAAAA,YAAA,CAAA,YAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;AACA,EAAAA,YAAA,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAA;AACA,EAAAA,YAAA,CAAA,YAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAA;AALU,EAAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AAQA,IAAA,UAAA,qBAAAC,WAAL,KAAA;AACL,EAAAA,YAAA,SAAU,CAAA,GAAA,SAAA;AACV,EAAAA,YAAA,MAAO,CAAA,GAAA,MAAA;AAFG,EAAAA,OAAAA,WAAAA;AAAA,CAAA,EAAA,UAAA,IAAA,EAAA;AAwDL,MAAM,oBAAuB,GAAA;AAAA,EAClC,EAAE,KAAA,EAAO,aAAe,EAAA,KAAA,EAAO,CAAuB,mBAAA;AAAA,EACtD,EAAE,KAAA,EAAO,OAAS,EAAA,KAAA,EAAO,CAAkB;AAC7C;AAEA,MAAM,mBAAmB,CAAC,KAAA,MAAmB,EAAE,KAAA,EAAO,OAAO,KAAM,EAAA,CAAA;AAE5D,MAAM,YAAW,EAAoB,GAAAC,UAAA,KAAA,IAAA,GAAA,EAAA,GAAA;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../../../../src/components/QueryEditor/types.ts"],"sourcesContent":["import { type JsonTree } from '@react-awesome-query-builder/ui';\n\nimport {\n type DataFrame,\n type DataSourceJsonData,\n type MetricFindValue,\n type SelectableValue,\n type TimeRange,\n toOption as toOptionFromData,\n} from '@grafana/data';\n\nimport { type DataQuery } from '@grafana/schema';\n\nimport {\n type QueryEditorFunctionExpression,\n type QueryEditorGroupByExpression,\n type QueryEditorPropertyExpression,\n} from './expressions';\nimport { type CompletionItemKind, type LanguageCompletionProvider } from '../SQLEditor';\n\nexport interface SqlQueryForInterpolation {\n dataset?: string;\n alias?: string;\n format?: QueryFormat;\n rawSql?: string;\n refId: string;\n hide?: boolean;\n}\n\nexport interface SQLConnectionLimits {\n maxOpenConns: number;\n maxIdleConns: number;\n connMaxLifetime: number;\n}\n\nexport interface SQLOptions extends SQLConnectionLimits, DataSourceJsonData {\n tlsAuth: boolean;\n tlsAuthWithCACert: boolean;\n timezone: string;\n tlsSkipVerify: boolean;\n user: string;\n database: string;\n url: string;\n timeInterval: string;\n}\n\n// Match the Enums Expected in SqlUtil and SqlDS\n// https://github.com/grafana/grafana-plugin-sdk-go/blob/main/data/sqlutil/query.go#L18-L29\nexport enum QueryFormat {\n Timeseries,\n Table,\n Logs,\n Trace,\n OptionMulti,\n}\n\nexport enum EditorMode {\n Builder = 'builder',\n Code = 'code',\n}\n\nexport interface SQLQuery extends DataQuery {\n alias?: string;\n format?: QueryFormat;\n rawSql?: string;\n dataset?: string; // When catalog is present, dataset represents the schema. Otherwise, it's the dataset.\n catalog?: string;\n table?: string;\n sql?: SQLExpression;\n editorMode?: EditorMode;\n rawQuery?: boolean;\n}\n\nexport interface NameValue {\n name: string;\n value: string;\n}\n\nexport type SQLFilters = NameValue[];\n\nexport interface SQLExpression {\n columns?: QueryEditorFunctionExpression[];\n whereJsonTree?: JsonTree;\n whereString?: string;\n filters?: SQLFilters;\n groupBy?: QueryEditorGroupByExpression[];\n orderBy?: QueryEditorPropertyExpression;\n orderByDirection?: 'ASC' | 'DESC';\n limit?: number;\n offset?: number;\n}\n\nexport interface TableSchema {\n name?: string;\n schema?: TableFieldSchema[];\n}\n\nexport interface TableFieldSchema {\n name: string;\n description?: string;\n type: string;\n repeated: boolean;\n schema: TableFieldSchema[];\n}\n\nexport interface QueryRowFilter {\n filter: boolean;\n group: boolean;\n order: boolean;\n preview: boolean;\n}\n\nexport const QUERY_FORMAT_OPTIONS = [\n { label: 'Time series', value: QueryFormat.Timeseries },\n { label: 'Table', value: QueryFormat.Table },\n];\n\nconst backWardToOption = (value: string) => ({ label: value, value });\n\nexport const toOption = toOptionFromData ?? backWardToOption;\n\nexport interface ResourceSelectorProps {\n disabled?: boolean;\n className?: string;\n applyDefault?: boolean;\n}\n// React Awesome Query builder field types.\n// These are responsible for rendering the correct UI for the field.\nexport type RAQBFieldTypes = 'text' | 'number' | 'boolean' | 'datetime' | 'date' | 'time';\n\nexport interface SQLSelectableValue extends SelectableValue {\n type?: string;\n raqbFieldType?: RAQBFieldTypes;\n}\n\nexport interface Aggregate {\n id: string;\n name: string;\n description?: string;\n}\n\nexport interface DB {\n init?: (datasourceId?: string) => Promise<boolean>;\n datasets: (catalog?: string) => Promise<string[]>; // When catalog is provided, returns schemas for that catalog\n catalogs?: () => Promise<string[]>;\n tables: (dataset?: string, catalog?: string, schema?: string) => Promise<string[]>;\n fields: (query: SQLQuery, order?: boolean) => Promise<SQLSelectableValue[]>;\n validateQuery: (query: SQLQuery, range?: TimeRange) => Promise<ValidationResults>;\n dsID: () => number;\n dispose?: (dsID?: string) => void;\n lookup: (path?: string) => Promise<Array<{ name: string; completion: string }>>;\n getSqlCompletionProvider: () => LanguageCompletionProvider;\n toRawSql?: (query: SQLQuery) => string;\n functions: () => Promise<Aggregate[]>;\n labels?: Map<'dataset', string>;\n disableDatasets?: boolean;\n disableCatalogs?: boolean;\n}\n\nexport interface QueryEditorProps {\n db: DB;\n query: QueryWithDefaults;\n onChange: (query: SQLQuery) => void;\n range?: TimeRange;\n}\n\nexport interface ValidationResults {\n query: SQLQuery;\n rawSql?: string;\n error: string;\n isError: boolean;\n isValid: boolean;\n statistics?: {\n TotalBytesProcessed: number;\n } | null;\n}\n\nexport interface SqlQueryModel {\n interpolate: () => string;\n quoteLiteral: (v: string) => string;\n}\n\nexport interface ResponseParser {\n transformMetricFindResponse: (frame: DataFrame) => MetricFindValue[];\n}\n\nexport interface MetaDefinition {\n name: string;\n completion?: string;\n kind: CompletionItemKind;\n}\n\n/**\n * Represents a query with all default values applied.\n * This is equivalent to SQLQuery since applyQueryDefaults returns SQLQuery.\n */\nexport type QueryWithDefaults = SQLQuery;\n"],"names":["QueryFormat","EditorMode","toOptionFromData"],"mappings":";;;;;;;;;;AAAA,IAAA,EAAA;AAgDO,IAAK,WAAA,qBAAAA,YAAAA,KAAL;AACL,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAA;AACA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAA;AACA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;AACA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAA;AACA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAA;AALU,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AAQL,IAAK,UAAA,qBAAAC,WAAAA,KAAL;AACL,EAAAA,YAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,YAAA,MAAA,CAAA,GAAO,MAAA;AAFG,EAAA,OAAAA,WAAAA;AAAA,CAAA,EAAA,UAAA,IAAA,EAAA;AAwDL,MAAM,oBAAA,GAAuB;AAAA,EAClC,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,CAAA,mBAAuB;AAAA,EACtD,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,CAAA;AAC3B;AAEA,MAAM,mBAAmB,CAAC,KAAA,MAAmB,EAAE,KAAA,EAAO,OAAO,KAAA,EAAM,CAAA;AAE5D,MAAM,YAAW,EAAA,GAAAC,UAAA,KAAA,IAAA,GAAA,EAAA,GAAoB;;;;"}
@@ -1,9 +1,20 @@
1
- import sqlFormatter from 'sql-formatter-plus';
1
+ import { format } from 'sql-formatter';
2
2
 
3
- function formatSQL(q) {
4
- return sqlFormatter.format(q).replace(/(\$ \{ .* \})|(\$ __)|(\$ \w+)/g, (m) => {
5
- return m.replace(/\s/g, "");
3
+ function formatSQL(q, language = "sql") {
4
+ const formatted = format(q, {
5
+ language,
6
+ paramTypes: {
7
+ custom: [
8
+ {
9
+ regex: "\\$\\s*\\{[^}]*\\}|\\$\\s*__\\w+(?:\\([^)]*\\))?|\\$\\s*\\w+"
10
+ }
11
+ ]
12
+ }
6
13
  });
14
+ return formatted.replace(
15
+ /(\$\s*\{[^}]*\})|(\$\s*__\w+(?:\([^)]*\))?)|(\$\s*\w+)/g,
16
+ (m) => m.replace(/\s/g, "")
17
+ );
7
18
  }
8
19
 
9
20
  export { formatSQL };
@@ -1 +1 @@
1
- {"version":3,"file":"formatSQL.js","sources":["../../../../../src/components/QueryEditor/utils/formatSQL.ts"],"sourcesContent":["// @ts-ignore\nimport sqlFormatter from 'sql-formatter-plus';\n\nexport function formatSQL(q: string) {\n return sqlFormatter.format(q).replace(/(\\$ \\{ .* \\})|(\\$ __)|(\\$ \\w+)/g, (m: string) => {\n return m.replace(/\\s/g, '');\n });\n}\n"],"names":[],"mappings":";;AAGO,SAAS,UAAU,CAAW,EAAA;AACnC,EAAA,OAAO,aAAa,MAAO,CAAA,CAAC,EAAE,OAAQ,CAAA,iCAAA,EAAmC,CAAC,CAAc,KAAA;AACtF,IAAO,OAAA,CAAA,CAAE,OAAQ,CAAA,KAAA,EAAO,EAAE,CAAA;AAAA,GAC3B,CAAA;AACH;;;;"}
1
+ {"version":3,"file":"formatSQL.js","sources":["../../../../../src/components/QueryEditor/utils/formatSQL.ts"],"sourcesContent":["import { format, type SqlLanguage } from 'sql-formatter';\n\n/**\n * Format SQL while preserving Grafana template variable tokens.\n * Treats `${...}`, `$__...`, and `$var` as parameters so the\n * formatter does not split or reflow them, then normalizes any\n * whitespace inside those tokens.\n */\nexport function formatSQL(q: string, language: SqlLanguage = 'sql') {\n const formatted = format(q, {\n language,\n paramTypes: {\n custom: [\n {\n regex: '\\\\$\\\\s*\\\\{[^}]*\\\\}|\\\\$\\\\s*__\\\\w+(?:\\\\([^)]*\\\\))?|\\\\$\\\\s*\\\\w+',\n },\n ],\n },\n });\n return formatted.replace(/(\\$\\s*\\{[^}]*\\})|(\\$\\s*__\\w+(?:\\([^)]*\\))?)|(\\$\\s*\\w+)/g, (m: string) =>\n m.replace(/\\s/g, '')\n );\n}\n"],"names":[],"mappings":";;AAQO,SAAS,SAAA,CAAU,CAAA,EAAW,QAAA,GAAwB,KAAA,EAAO;AAClE,EAAA,MAAM,SAAA,GAAY,OAAO,CAAA,EAAG;AAAA,IAC1B,QAAA;AAAA,IACA,UAAA,EAAY;AAAA,MACV,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,KAAA,EAAO;AAAA;AACT;AACF;AACF,GACD,CAAA;AACD,EAAA,OAAO,SAAA,CAAU,OAAA;AAAA,IAAQ,yDAAA;AAAA,IAA2D,CAAC,CAAA,KACnF,CAAA,CAAE,OAAA,CAAQ,OAAO,EAAE;AAAA,GACrB;AACF;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { isEmpty } from 'lodash';
2
- import { QueryEditorExpressionType, QueryEditorPropertyType } from '../expressions.js';
2
+ import { QueryEditorPropertyType, QueryEditorExpressionType } from '../expressions.js';
3
3
  import '../types.js';
4
4
 
5
5
  function getRawSqlFn(db) {
@@ -22,17 +22,17 @@ function toRawSql({ sql, dataset, catalog, table }, disableDatasets) {
22
22
  if (sql.whereString) {
23
23
  rawQuery += `WHERE ${sql.whereString} `;
24
24
  }
25
- if ((_b = (_a = sql.groupBy) == null ? undefined : _a[0]) == null ? undefined : _b.property.name) {
25
+ if ((_b = (_a = sql.groupBy) == null ? void 0 : _a[0]) == null ? void 0 : _b.property.name) {
26
26
  const groupBy = sql.groupBy.map((g) => g.property.name).filter((g) => !isEmpty(g));
27
27
  rawQuery += `GROUP BY ${groupBy.join(", ")} `;
28
28
  }
29
- if ((_c = sql.orderBy) == null ? undefined : _c.property.name) {
29
+ if ((_c = sql.orderBy) == null ? void 0 : _c.property.name) {
30
30
  rawQuery += `ORDER BY ${sql.orderBy.property.name} `;
31
31
  }
32
- if (((_d = sql.orderBy) == null ? undefined : _d.property.name) && sql.orderByDirection) {
32
+ if (((_d = sql.orderBy) == null ? void 0 : _d.property.name) && sql.orderByDirection) {
33
33
  rawQuery += `${sql.orderByDirection} `;
34
34
  }
35
- if (sql.limit !== undefined && sql.limit >= 0) {
35
+ if (sql.limit !== void 0 && sql.limit >= 0) {
36
36
  rawQuery += `LIMIT ${sql.limit} `;
37
37
  }
38
38
  return rawQuery;
@@ -42,9 +42,9 @@ function createSelectClause(sqlColumns) {
42
42
  var _a, _b;
43
43
  let rawColumn = "";
44
44
  if (c.name) {
45
- rawColumn += `${c.name}(${(_a = c.parameters) == null ? undefined : _a.map((p) => `${p.name}`)})`;
45
+ rawColumn += `${c.name}(${(_a = c.parameters) == null ? void 0 : _a.map((p) => `${p.name}`)})`;
46
46
  } else {
47
- rawColumn += `${(_b = c.parameters) == null ? undefined : _b.map((p) => `${p.name}`)}`;
47
+ rawColumn += `${(_b = c.parameters) == null ? void 0 : _b.map((p) => `${p.name}`)}`;
48
48
  }
49
49
  return rawColumn;
50
50
  });
@@ -56,7 +56,7 @@ function haveColumns(columns) {
56
56
  }
57
57
  const haveColumn = columns.some((c) => {
58
58
  var _a, _b;
59
- return ((_a = c.parameters) == null ? undefined : _a.length) || ((_b = c.parameters) == null ? undefined : _b.some((p) => p.name));
59
+ return ((_a = c.parameters) == null ? void 0 : _a.length) || ((_b = c.parameters) == null ? void 0 : _b.some((p) => p.name));
60
60
  });
61
61
  const haveFunction = columns.some((c) => c.name);
62
62
  return haveColumn || haveFunction;
@@ -1 +1 @@
1
- {"version":3,"file":"sql.utils.js","sources":["../../../../../src/components/QueryEditor/utils/sql.utils.ts"],"sourcesContent":["import { isEmpty } from 'lodash';\n\nimport {\n QueryEditorExpressionType,\n type QueryEditorFunctionExpression,\n type QueryEditorGroupByExpression,\n type QueryEditorPropertyExpression,\n QueryEditorPropertyType,\n} from '../expressions';\nimport { type SQLQuery, type SQLExpression, type DB } from '../types';\n\nexport function getRawSqlFn(db: DB) {\n return db.toRawSql ? db.toRawSql : (query: SQLQuery) => toRawSql(query, Boolean(db.disableDatasets));\n}\n\n/**\n * Converts a SQLQuery object into a raw SQL string.\n *\n * Table reference naming:\n * - When catalog is present: catalog.dataset.table (dataset acts as schema)\n * - When catalog is absent: dataset.table (dataset acts as dataset/schema)\n * - When both are disabled: just table\n *\n * Note: Semantically, the dataset field has dual meaning:\n * - With catalog: dataset = schema (Unity Catalog: catalog.schema.table)\n * - Without catalog: dataset = dataset (Legacy: dataset.table)\n */\nexport function toRawSql({ sql, dataset, catalog, table }: SQLQuery, disableDatasets: boolean): string {\n let rawQuery = '';\n\n if (!sql || !haveColumns(sql.columns)) {\n return rawQuery;\n }\n\n rawQuery += createSelectClause(sql.columns);\n\n // Three-part naming: catalog.dataset.table (dataset acts as schema when catalog is present)\n if (catalog && dataset && table) {\n rawQuery += `FROM ${catalog}.${dataset}.${table} `;\n }\n // Two-part naming: dataset.table (legacy style, only if catalogs not used)\n else if (!disableDatasets && dataset && table) {\n rawQuery += `FROM ${dataset}.${table} `;\n }\n // Just table name (when datasets are disabled or neither catalog nor dataset is present)\n else if (table) {\n rawQuery += `FROM ${table} `;\n }\n\n if (sql.whereString) {\n rawQuery += `WHERE ${sql.whereString} `;\n }\n\n if (sql.groupBy?.[0]?.property.name) {\n const groupBy = sql.groupBy.map((g) => g.property.name).filter((g) => !isEmpty(g));\n rawQuery += `GROUP BY ${groupBy.join(', ')} `;\n }\n\n if (sql.orderBy?.property.name) {\n rawQuery += `ORDER BY ${sql.orderBy.property.name} `;\n }\n\n if (sql.orderBy?.property.name && sql.orderByDirection) {\n rawQuery += `${sql.orderByDirection} `;\n }\n\n if (sql.limit !== undefined && sql.limit >= 0) {\n rawQuery += `LIMIT ${sql.limit} `;\n }\n\n return rawQuery;\n}\n\nfunction createSelectClause(sqlColumns: NonNullable<SQLExpression['columns']>): string {\n const columns = sqlColumns.map((c) => {\n let rawColumn = '';\n if (c.name) {\n rawColumn += `${c.name}(${c.parameters?.map((p) => `${p.name}`)})`;\n } else {\n rawColumn += `${c.parameters?.map((p) => `${p.name}`)}`;\n }\n return rawColumn;\n });\n return `SELECT ${columns.join(', ')} `;\n}\n\nexport function haveColumns(columns: SQLExpression['columns']): columns is NonNullable<SQLExpression['columns']> {\n if (!columns) {\n return false;\n }\n\n const haveColumn = columns.some((c) => c.parameters?.length || c.parameters?.some((p) => p.name));\n const haveFunction = columns.some((c) => c.name);\n return haveColumn || haveFunction;\n}\n\n/**\n * Creates a GroupByExpression for a specified field\n */\nexport function setGroupByField(field?: string): QueryEditorGroupByExpression {\n return {\n type: QueryEditorExpressionType.GroupBy,\n property: {\n type: QueryEditorPropertyType.String,\n name: field,\n },\n };\n}\n\n/**\n * Creates a PropertyExpression for a specified field\n */\nexport function setPropertyField(field?: string): QueryEditorPropertyExpression {\n return {\n type: QueryEditorExpressionType.Property,\n property: {\n type: QueryEditorPropertyType.String,\n name: field,\n },\n };\n}\n\nexport function createFunctionField(functionName?: string): QueryEditorFunctionExpression {\n return {\n type: QueryEditorExpressionType.Function,\n name: functionName,\n parameters: [],\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sql.utils.js","sources":["../../../../../src/components/QueryEditor/utils/sql.utils.ts"],"sourcesContent":["import { isEmpty } from 'lodash';\n\nimport {\n QueryEditorExpressionType,\n type QueryEditorFunctionExpression,\n type QueryEditorGroupByExpression,\n type QueryEditorPropertyExpression,\n QueryEditorPropertyType,\n} from '../expressions';\nimport { type SQLQuery, type SQLExpression, type DB } from '../types';\n\nexport function getRawSqlFn(db: DB) {\n return db.toRawSql ? db.toRawSql : (query: SQLQuery) => toRawSql(query, Boolean(db.disableDatasets));\n}\n\n/**\n * Converts a SQLQuery object into a raw SQL string.\n *\n * Table reference naming:\n * - When catalog is present: catalog.dataset.table (dataset acts as schema)\n * - When catalog is absent: dataset.table (dataset acts as dataset/schema)\n * - When both are disabled: just table\n *\n * Note: Semantically, the dataset field has dual meaning:\n * - With catalog: dataset = schema (Unity Catalog: catalog.schema.table)\n * - Without catalog: dataset = dataset (Legacy: dataset.table)\n */\nexport function toRawSql({ sql, dataset, catalog, table }: SQLQuery, disableDatasets: boolean): string {\n let rawQuery = '';\n\n if (!sql || !haveColumns(sql.columns)) {\n return rawQuery;\n }\n\n rawQuery += createSelectClause(sql.columns);\n\n // Three-part naming: catalog.dataset.table (dataset acts as schema when catalog is present)\n if (catalog && dataset && table) {\n rawQuery += `FROM ${catalog}.${dataset}.${table} `;\n }\n // Two-part naming: dataset.table (legacy style, only if catalogs not used)\n else if (!disableDatasets && dataset && table) {\n rawQuery += `FROM ${dataset}.${table} `;\n }\n // Just table name (when datasets are disabled or neither catalog nor dataset is present)\n else if (table) {\n rawQuery += `FROM ${table} `;\n }\n\n if (sql.whereString) {\n rawQuery += `WHERE ${sql.whereString} `;\n }\n\n if (sql.groupBy?.[0]?.property.name) {\n const groupBy = sql.groupBy.map((g) => g.property.name).filter((g) => !isEmpty(g));\n rawQuery += `GROUP BY ${groupBy.join(', ')} `;\n }\n\n if (sql.orderBy?.property.name) {\n rawQuery += `ORDER BY ${sql.orderBy.property.name} `;\n }\n\n if (sql.orderBy?.property.name && sql.orderByDirection) {\n rawQuery += `${sql.orderByDirection} `;\n }\n\n if (sql.limit !== undefined && sql.limit >= 0) {\n rawQuery += `LIMIT ${sql.limit} `;\n }\n\n return rawQuery;\n}\n\nfunction createSelectClause(sqlColumns: NonNullable<SQLExpression['columns']>): string {\n const columns = sqlColumns.map((c) => {\n let rawColumn = '';\n if (c.name) {\n rawColumn += `${c.name}(${c.parameters?.map((p) => `${p.name}`)})`;\n } else {\n rawColumn += `${c.parameters?.map((p) => `${p.name}`)}`;\n }\n return rawColumn;\n });\n return `SELECT ${columns.join(', ')} `;\n}\n\nexport function haveColumns(columns: SQLExpression['columns']): columns is NonNullable<SQLExpression['columns']> {\n if (!columns) {\n return false;\n }\n\n const haveColumn = columns.some((c) => c.parameters?.length || c.parameters?.some((p) => p.name));\n const haveFunction = columns.some((c) => c.name);\n return haveColumn || haveFunction;\n}\n\n/**\n * Creates a GroupByExpression for a specified field\n */\nexport function setGroupByField(field?: string): QueryEditorGroupByExpression {\n return {\n type: QueryEditorExpressionType.GroupBy,\n property: {\n type: QueryEditorPropertyType.String,\n name: field,\n },\n };\n}\n\n/**\n * Creates a PropertyExpression for a specified field\n */\nexport function setPropertyField(field?: string): QueryEditorPropertyExpression {\n return {\n type: QueryEditorExpressionType.Property,\n property: {\n type: QueryEditorPropertyType.String,\n name: field,\n },\n };\n}\n\nexport function createFunctionField(functionName?: string): QueryEditorFunctionExpression {\n return {\n type: QueryEditorExpressionType.Function,\n name: functionName,\n parameters: [],\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useSqlChange.js","sources":["../../../../../src/components/QueryEditor/utils/useSqlChange.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { type DB, type SQLExpression, type SQLQuery } from '../types';\n\nimport { getRawSqlFn } from './sql.utils';\n\ninterface UseSqlChange {\n db: DB;\n query: SQLQuery;\n onQueryChange: (query: SQLQuery) => void;\n}\n\nexport function useSqlChange({ query, onQueryChange, db }: UseSqlChange) {\n const onSqlChange = useCallback(\n (sql: SQLExpression) => {\n const toRawSql = getRawSqlFn(db);\n const rawSql = toRawSql({\n sql,\n catalog: query.catalog,\n dataset: query.dataset,\n table: query.table,\n refId: query.refId,\n });\n const newQuery: SQLQuery = { ...query, sql, rawSql };\n onQueryChange(newQuery);\n },\n [db, onQueryChange, query]\n );\n\n return { onSqlChange };\n}\n"],"names":[],"mappings":";;;;AAYO,SAAS,YAAa,CAAA,EAAE,KAAO,EAAA,aAAA,EAAe,IAAoB,EAAA;AACvE,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,GAAuB,KAAA;AACtB,MAAM,MAAA,QAAA,GAAW,YAAY,EAAE,CAAA;AAC/B,MAAA,MAAM,SAAS,QAAS,CAAA;AAAA,QACtB,GAAA;AAAA,QACA,SAAS,KAAM,CAAA,OAAA;AAAA,QACf,SAAS,KAAM,CAAA,OAAA;AAAA,QACf,OAAO,KAAM,CAAA,KAAA;AAAA,QACb,OAAO,KAAM,CAAA;AAAA,OACd,CAAA;AACD,MAAA,MAAM,QAAqB,GAAA,EAAE,GAAG,KAAA,EAAO,KAAK,MAAO,EAAA;AACnD,MAAA,aAAA,CAAc,QAAQ,CAAA;AAAA,KACxB;AAAA,IACA,CAAC,EAAI,EAAA,aAAA,EAAe,KAAK;AAAA,GAC3B;AAEA,EAAA,OAAO,EAAE,WAAY,EAAA;AACvB;;;;"}
1
+ {"version":3,"file":"useSqlChange.js","sources":["../../../../../src/components/QueryEditor/utils/useSqlChange.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { type DB, type SQLExpression, type SQLQuery } from '../types';\n\nimport { getRawSqlFn } from './sql.utils';\n\ninterface UseSqlChange {\n db: DB;\n query: SQLQuery;\n onQueryChange: (query: SQLQuery) => void;\n}\n\nexport function useSqlChange({ query, onQueryChange, db }: UseSqlChange) {\n const onSqlChange = useCallback(\n (sql: SQLExpression) => {\n const toRawSql = getRawSqlFn(db);\n const rawSql = toRawSql({\n sql,\n catalog: query.catalog,\n dataset: query.dataset,\n table: query.table,\n refId: query.refId,\n });\n const newQuery: SQLQuery = { ...query, sql, rawSql };\n onQueryChange(newQuery);\n },\n [db, onQueryChange, query]\n );\n\n return { onSqlChange };\n}\n"],"names":[],"mappings":";;;;AAYO,SAAS,YAAA,CAAa,EAAE,KAAA,EAAO,aAAA,EAAe,IAAG,EAAiB;AACvE,EAAA,MAAM,WAAA,GAAc,WAAA;AAAA,IAClB,CAAC,GAAA,KAAuB;AACtB,MAAA,MAAM,QAAA,GAAW,YAAY,EAAE,CAAA;AAC/B,MAAA,MAAM,SAAS,QAAA,CAAS;AAAA,QACtB,GAAA;AAAA,QACA,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,OAAO,KAAA,CAAM;AAAA,OACd,CAAA;AACD,MAAA,MAAM,QAAA,GAAqB,EAAE,GAAG,KAAA,EAAO,KAAK,MAAA,EAAO;AACnD,MAAA,aAAA,CAAc,QAAQ,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,CAAC,EAAA,EAAI,aAAA,EAAe,KAAK;AAAA,GAC3B;AAEA,EAAA,OAAO,EAAE,WAAA,EAAY;AACvB;;;;"}
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import { isString } from 'lodash';
3
3
  import { Utils, BasicConfig } from '@react-awesome-query-builder/ui';
4
- import { dateTime, toOption } from '@grafana/data';
5
- import { Input, DateTimePicker, Select, Button } from '@grafana/ui';
4
+ import { toOption, dateTime } from '@grafana/data';
5
+ import { Select, Button, DateTimePicker, Input } from '@grafana/ui';
6
6
 
7
7
  const buttonLabels = {
8
8
  add: "Add",
@@ -10,7 +10,6 @@ const buttonLabels = {
10
10
  };
11
11
  ({
12
12
  id: Utils.uuid(),
13
- type: "group",
14
13
  children1: [
15
14
  {
16
15
  id: Utils.uuid(),
@@ -48,9 +47,9 @@ const widgets = {
48
47
  return /* @__PURE__ */ React.createElement(
49
48
  Input,
50
49
  {
51
- value: (props == null ? undefined : props.value) || "",
52
- placeholder: props == null ? undefined : props.placeholder,
53
- onChange: (e) => props == null ? undefined : props.setValue(e.currentTarget.value)
50
+ value: (props == null ? void 0 : props.value) || "",
51
+ placeholder: props == null ? void 0 : props.placeholder,
52
+ onChange: (e) => props == null ? void 0 : props.setValue(e.currentTarget.value)
54
53
  }
55
54
  );
56
55
  }
@@ -61,10 +60,10 @@ const widgets = {
61
60
  return /* @__PURE__ */ React.createElement(
62
61
  Input,
63
62
  {
64
- value: props == null ? undefined : props.value,
65
- placeholder: props == null ? undefined : props.placeholder,
63
+ value: props == null ? void 0 : props.value,
64
+ placeholder: props == null ? void 0 : props.placeholder,
66
65
  type: "number",
67
- onChange: (e) => props == null ? undefined : props.setValue(Number.parseInt(e.currentTarget.value, 10))
66
+ onChange: (e) => props == null ? void 0 : props.setValue(Number.parseInt(e.currentTarget.value, 10))
68
67
  }
69
68
  );
70
69
  }
@@ -76,9 +75,9 @@ const widgets = {
76
75
  DateTimePicker,
77
76
  {
78
77
  onChange: (e) => {
79
- props == null ? undefined : props.setValue(e == null ? undefined : e.format(BasicConfig.widgets.datetime.valueFormat));
78
+ props == null ? void 0 : props.setValue(e == null ? void 0 : e.format(BasicConfig.widgets.datetime.valueFormat));
80
79
  },
81
- date: dateTime(props == null ? undefined : props.value).utc()
80
+ date: dateTime(props == null ? void 0 : props.value).utc()
82
81
  }
83
82
  );
84
83
  }
@@ -96,37 +95,37 @@ const settings = {
96
95
  return /* @__PURE__ */ React.createElement(
97
96
  Select,
98
97
  {
99
- id: conjProps == null ? undefined : conjProps.id,
98
+ id: conjProps == null ? void 0 : conjProps.id,
100
99
  "aria-label": "Conjunction",
101
100
  menuShouldPortal: true,
102
- options: (conjProps == null ? undefined : conjProps.conjunctionOptions) ? Object.keys(conjProps == null ? undefined : conjProps.conjunctionOptions).map(toOption) : undefined,
103
- value: conjProps == null ? undefined : conjProps.selectedConjunction,
104
- onChange: (val) => conjProps == null ? undefined : conjProps.setConjunction(val.value)
101
+ options: (conjProps == null ? void 0 : conjProps.conjunctionOptions) ? Object.keys(conjProps == null ? void 0 : conjProps.conjunctionOptions).map(toOption) : void 0,
102
+ value: conjProps == null ? void 0 : conjProps.selectedConjunction,
103
+ onChange: (val) => conjProps == null ? void 0 : conjProps.setConjunction(val.value)
105
104
  }
106
105
  );
107
106
  },
108
107
  renderField: function Field(fieldProps) {
109
108
  var _a;
110
- const fields = ((_a = fieldProps == null ? undefined : fieldProps.config) == null ? undefined : _a.fields) || {};
109
+ const fields = ((_a = fieldProps == null ? void 0 : fieldProps.config) == null ? void 0 : _a.fields) || {};
111
110
  return /* @__PURE__ */ React.createElement(
112
111
  Select,
113
112
  {
114
- id: fieldProps == null ? undefined : fieldProps.id,
113
+ id: fieldProps == null ? void 0 : fieldProps.id,
115
114
  width: 25,
116
115
  "aria-label": "Field",
117
116
  menuShouldPortal: true,
118
- options: fieldProps == null ? undefined : fieldProps.items.map((f) => {
117
+ options: fieldProps == null ? void 0 : fieldProps.items.map((f) => {
119
118
  var _a2, _b;
120
- const icon = (_b = (_a2 = fields[f.key].mainWidgetProps) == null ? undefined : _a2.customProps) == null ? undefined : _b.icon;
119
+ const icon = (_b = (_a2 = fields[f.key].mainWidgetProps) == null ? void 0 : _a2.customProps) == null ? void 0 : _b.icon;
121
120
  return {
122
121
  label: f.label,
123
122
  value: f.key,
124
123
  icon
125
124
  };
126
125
  }),
127
- value: fieldProps == null ? undefined : fieldProps.selectedKey,
126
+ value: fieldProps == null ? void 0 : fieldProps.selectedKey,
128
127
  onChange: (val) => {
129
- fieldProps == null ? undefined : fieldProps.setField(val.label);
128
+ fieldProps == null ? void 0 : fieldProps.setField(val.label);
130
129
  }
131
130
  }
132
131
  );
@@ -136,11 +135,11 @@ const settings = {
136
135
  Button,
137
136
  {
138
137
  type: "button",
139
- title: `${buttonProps == null ? undefined : buttonProps.label} filter`,
140
- onClick: buttonProps == null ? undefined : buttonProps.onClick,
138
+ title: `${buttonProps == null ? void 0 : buttonProps.label} filter`,
139
+ onClick: buttonProps == null ? void 0 : buttonProps.onClick,
141
140
  variant: "secondary",
142
141
  size: "md",
143
- icon: (buttonProps == null ? undefined : buttonProps.label) === buttonLabels.add ? "plus" : "times"
142
+ icon: (buttonProps == null ? void 0 : buttonProps.label) === buttonLabels.add ? "plus" : "times"
144
143
  }
145
144
  );
146
145
  },
@@ -148,12 +147,12 @@ const settings = {
148
147
  return /* @__PURE__ */ React.createElement(
149
148
  Select,
150
149
  {
151
- options: operatorProps == null ? undefined : operatorProps.items.map((op) => ({ label: op.label, value: op.key })),
150
+ options: operatorProps == null ? void 0 : operatorProps.items.map((op) => ({ label: op.label, value: op.key })),
152
151
  "aria-label": "Operator",
153
152
  menuShouldPortal: true,
154
- value: operatorProps == null ? undefined : operatorProps.selectedKey,
153
+ value: operatorProps == null ? void 0 : operatorProps.selectedKey,
155
154
  onChange: (val) => {
156
- operatorProps == null ? undefined : operatorProps.setField(val.value || "");
155
+ operatorProps == null ? void 0 : operatorProps.setField(val.value || "");
157
156
  }
158
157
  }
159
158
  );