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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/dist/cjs/index.cjs +199 -200
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs/index.d.cts +1 -1
  4. package/dist/cjs/test-utils.cjs +2 -2
  5. package/dist/cjs/test-utils.cjs.map +1 -1
  6. package/dist/cjs/test-utils.d.cts +1 -1
  7. package/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js.map +1 -1
  8. package/dist/esm/components/ConfigEditor/Auth/Auth.js.map +1 -1
  9. package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js +4 -4
  10. package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js.map +1 -1
  11. package/dist/esm/components/ConfigEditor/Auth/auth-method/BasicAuth.js.map +1 -1
  12. package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeader.js.map +1 -1
  13. package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js +1 -1
  14. package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js.map +1 -1
  15. package/dist/esm/components/ConfigEditor/Auth/styles.js.map +1 -1
  16. package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js +1 -1
  17. package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js.map +1 -1
  18. package/dist/esm/components/ConfigEditor/Auth/tls/SkipTLSVerification.js.map +1 -1
  19. package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js +3 -3
  20. package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js.map +1 -1
  21. package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettings.js.map +1 -1
  22. package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettingsSection.js.map +1 -1
  23. package/dist/esm/components/ConfigEditor/Auth/types.js.map +1 -1
  24. package/dist/esm/components/ConfigEditor/Auth/utils.js +3 -3
  25. package/dist/esm/components/ConfigEditor/Auth/utils.js.map +1 -1
  26. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js +2 -2
  27. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js.map +1 -1
  28. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js.map +1 -1
  29. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js.map +1 -1
  30. package/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js.map +1 -1
  31. package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js +1 -1
  32. package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js.map +1 -1
  33. package/dist/esm/components/ConfigEditor/DataSourceDescription.js.map +1 -1
  34. package/dist/esm/components/ConfigEditor/SecureSocksProxyToggle.js.map +1 -1
  35. package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js +11 -11
  36. package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js.map +1 -1
  37. package/dist/esm/components/DataLinks/DataLink.js +4 -4
  38. package/dist/esm/components/DataLinks/DataLink.js.map +1 -1
  39. package/dist/esm/components/DataLinks/DataLinks.js +3 -3
  40. package/dist/esm/components/DataLinks/DataLinks.js.map +1 -1
  41. package/dist/esm/components/DataSourcePicker/DataSourcePicker.js +8 -8
  42. package/dist/esm/components/DataSourcePicker/DataSourcePicker.js.map +1 -1
  43. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  44. package/dist/esm/components/DatePicker/styles.js +2 -2
  45. package/dist/esm/components/DatePicker/styles.js.map +1 -1
  46. package/dist/esm/components/DatePickerWithInput/DatePickerWithInput.js.map +1 -1
  47. package/dist/esm/components/DatePickerWithInput/styles.js +2 -2
  48. package/dist/esm/components/DatePickerWithInput/styles.js.map +1 -1
  49. package/dist/esm/components/DebounceInput/DebounceInput.js.map +1 -1
  50. package/dist/esm/components/Plugins/PluginSignatureBadge.js.map +1 -1
  51. package/dist/esm/components/QueryEditor/AccessoryButton.js.map +1 -1
  52. package/dist/esm/components/QueryEditor/CatalogSelector.js +1 -1
  53. package/dist/esm/components/QueryEditor/CatalogSelector.js.map +1 -1
  54. package/dist/esm/components/QueryEditor/ConfirmModal.js +1 -1
  55. package/dist/esm/components/QueryEditor/ConfirmModal.js.map +1 -1
  56. package/dist/esm/components/QueryEditor/DatasetSelector.js +1 -1
  57. package/dist/esm/components/QueryEditor/DatasetSelector.js.map +1 -1
  58. package/dist/esm/components/QueryEditor/EditorField.js +5 -5
  59. package/dist/esm/components/QueryEditor/EditorField.js.map +1 -1
  60. package/dist/esm/components/QueryEditor/EditorFieldGroup.js.map +1 -1
  61. package/dist/esm/components/QueryEditor/EditorHeader.js +2 -2
  62. package/dist/esm/components/QueryEditor/EditorHeader.js.map +1 -1
  63. package/dist/esm/components/QueryEditor/EditorList.js.map +1 -1
  64. package/dist/esm/components/QueryEditor/EditorRow.js +4 -4
  65. package/dist/esm/components/QueryEditor/EditorRow.js.map +1 -1
  66. package/dist/esm/components/QueryEditor/EditorRows.js +2 -2
  67. package/dist/esm/components/QueryEditor/EditorRows.js.map +1 -1
  68. package/dist/esm/components/QueryEditor/EditorStack.js +1 -1
  69. package/dist/esm/components/QueryEditor/EditorStack.js.map +1 -1
  70. package/dist/esm/components/QueryEditor/EditorSwitch.js +2 -2
  71. package/dist/esm/components/QueryEditor/EditorSwitch.js.map +1 -1
  72. package/dist/esm/components/QueryEditor/FlexItem.js.map +1 -1
  73. package/dist/esm/components/QueryEditor/InlineSelect.js.map +1 -1
  74. package/dist/esm/components/QueryEditor/InputGroup.js +2 -2
  75. package/dist/esm/components/QueryEditor/InputGroup.js.map +1 -1
  76. package/dist/esm/components/QueryEditor/QueryEditor.js +7 -7
  77. package/dist/esm/components/QueryEditor/QueryEditor.js.map +1 -1
  78. package/dist/esm/components/QueryEditor/QueryHeader.js +18 -18
  79. package/dist/esm/components/QueryEditor/QueryHeader.js.map +1 -1
  80. package/dist/esm/components/QueryEditor/RunQueryButton.js +1 -1
  81. package/dist/esm/components/QueryEditor/RunQueryButton.js.map +1 -1
  82. package/dist/esm/components/QueryEditor/Space.js +2 -2
  83. package/dist/esm/components/QueryEditor/Space.js.map +1 -1
  84. package/dist/esm/components/QueryEditor/TableSelector.js.map +1 -1
  85. package/dist/esm/components/QueryEditor/defaults.js +7 -7
  86. package/dist/esm/components/QueryEditor/defaults.js.map +1 -1
  87. package/dist/esm/components/QueryEditor/expressions.js.map +1 -1
  88. package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js.map +1 -1
  89. package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js +1 -1
  90. package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js.map +1 -1
  91. package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js +4 -4
  92. package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js.map +1 -1
  93. package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js +3 -3
  94. package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js.map +1 -1
  95. package/dist/esm/components/QueryEditor/types.js.map +1 -1
  96. package/dist/esm/components/QueryEditor/utils/formatSQL.js.map +1 -1
  97. package/dist/esm/components/QueryEditor/utils/sql.utils.js +8 -8
  98. package/dist/esm/components/QueryEditor/utils/sql.utils.js.map +1 -1
  99. package/dist/esm/components/QueryEditor/utils/useSqlChange.js.map +1 -1
  100. package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js +26 -27
  101. package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js.map +1 -1
  102. package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js +3 -3
  103. package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js.map +1 -1
  104. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js +2 -2
  105. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js.map +1 -1
  106. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRows.js.map +1 -1
  107. package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js +2 -2
  108. package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js.map +1 -1
  109. package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js +4 -4
  110. package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js.map +1 -1
  111. package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js +2 -2
  112. package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js.map +1 -1
  113. package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js.map +1 -1
  114. package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js +2 -2
  115. package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js.map +1 -1
  116. package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js.map +1 -1
  117. package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js.map +1 -1
  118. package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js +9 -9
  119. package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js.map +1 -1
  120. package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js.map +1 -1
  121. package/dist/esm/components/QueryEditor/visual-query-builder/WhereRow.js.map +1 -1
  122. package/dist/esm/components/QueryEditorRow/QueryEditorRow.js.map +1 -1
  123. package/dist/esm/components/SQLEditor/components/SQLEditor.js +13 -13
  124. package/dist/esm/components/SQLEditor/components/SQLEditor.js.map +1 -1
  125. package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js +1 -1
  126. package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js.map +1 -1
  127. package/dist/esm/components/SQLEditor/mocks/Monaco.js.map +1 -1
  128. package/dist/esm/components/SQLEditor/mocks/TextModel.js.map +1 -1
  129. package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQuery.js.map +1 -1
  130. package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQueryWithAggregation.js.map +1 -1
  131. package/dist/esm/components/SQLEditor/mocks/queries/multiLineMultipleColumns.js.map +1 -1
  132. package/dist/esm/components/SQLEditor/mocks/queries/singleLineEmptyQuery.js.map +1 -1
  133. package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQuery.js.map +1 -1
  134. package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQueryWithAggregation.js.map +1 -1
  135. package/dist/esm/components/SQLEditor/mocks/queries/singleLineMultipleColumns.js.map +1 -1
  136. package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueries.js.map +1 -1
  137. package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueriesWithAggregation.js.map +1 -1
  138. package/dist/esm/components/SQLEditor/standardSql/definition.js.map +1 -1
  139. package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js +2 -2
  140. package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js.map +1 -1
  141. package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js +3 -3
  142. package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js.map +1 -1
  143. package/dist/esm/components/SQLEditor/standardSql/language.js.map +1 -1
  144. package/dist/esm/components/SQLEditor/standardSql/macros.js.map +1 -1
  145. package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js +2 -2
  146. package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js.map +1 -1
  147. package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js +1 -1
  148. package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js.map +1 -1
  149. package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js +25 -25
  150. package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js.map +1 -1
  151. package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js +1 -1
  152. package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js.map +1 -1
  153. package/dist/esm/components/SQLEditor/test-utils/index.js.map +1 -1
  154. package/dist/esm/components/SQLEditor/test-utils/statementPosition.js.map +1 -1
  155. package/dist/esm/components/SQLEditor/types.js.map +1 -1
  156. package/dist/esm/components/SQLEditor/utils/LinkedToken.js +7 -7
  157. package/dist/esm/components/SQLEditor/utils/LinkedToken.js.map +1 -1
  158. package/dist/esm/components/SQLEditor/utils/commands.js.map +1 -1
  159. package/dist/esm/components/SQLEditor/utils/debugger.js +1 -1
  160. package/dist/esm/components/SQLEditor/utils/debugger.js.map +1 -1
  161. package/dist/esm/components/SQLEditor/utils/getSuggestionKind.js.map +1 -1
  162. package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js +1 -1
  163. package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js.map +1 -1
  164. package/dist/esm/components/SQLEditor/utils/toCompletionItem.js +1 -1
  165. package/dist/esm/components/SQLEditor/utils/toCompletionItem.js.map +1 -1
  166. package/dist/esm/components/SQLEditor/utils/tokenUtils.js +9 -9
  167. package/dist/esm/components/SQLEditor/utils/tokenUtils.js.map +1 -1
  168. package/dist/esm/components/Segment/Segment.js.map +1 -1
  169. package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js +2 -2
  170. package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js.map +1 -1
  171. package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js +11 -11
  172. package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js.map +1 -1
  173. package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js +1 -1
  174. package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js.map +1 -1
  175. package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js +4 -4
  176. package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js.map +1 -1
  177. package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js +2 -2
  178. package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js.map +1 -1
  179. package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js +3 -3
  180. package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js.map +1 -1
  181. package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js +2 -2
  182. package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js.map +1 -1
  183. package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js +2 -2
  184. package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js.map +1 -1
  185. package/dist/esm/components/VisualQueryBuilder/components/OperationList.js +3 -3
  186. package/dist/esm/components/VisualQueryBuilder/components/OperationList.js.map +1 -1
  187. package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js +2 -2
  188. package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js.map +1 -1
  189. package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js +5 -5
  190. package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js.map +1 -1
  191. package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js +2 -2
  192. package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js.map +1 -1
  193. package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js +8 -8
  194. package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js.map +1 -1
  195. package/dist/esm/components/VisualQueryBuilder/components/QueryEditorModeToggle.js.map +1 -1
  196. package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js +2 -2
  197. package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js.map +1 -1
  198. package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js.map +1 -1
  199. package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js +2 -2
  200. package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js.map +1 -1
  201. package/dist/esm/components/VisualQueryBuilder/types.js.map +1 -1
  202. package/dist/esm/datasource/SqlDatasource.js +14 -14
  203. package/dist/esm/datasource/SqlDatasource.js.map +1 -1
  204. package/dist/esm/datasource/constants.js.map +1 -1
  205. package/dist/esm/hooks/useDebounce.js.map +1 -1
  206. package/dist/esm/index.d.ts +1 -1
  207. package/dist/esm/test/mocks/DataQuery.js.map +1 -1
  208. package/dist/esm/test/mocks/Datasource.js +1 -1
  209. package/dist/esm/test/mocks/Datasource.js.map +1 -1
  210. package/dist/esm/test/mocks/Plugin.js +1 -1
  211. package/dist/esm/test/mocks/Plugin.js.map +1 -1
  212. package/dist/esm/test/mocks/QueryEditorProps.js.map +1 -1
  213. package/dist/esm/test/mocks/utils.js +2 -2
  214. package/dist/esm/test/mocks/utils.js.map +1 -1
  215. package/dist/esm/test-utils.d.ts +1 -1
  216. package/package.json +10 -26
@@ -1 +1 @@
1
- {"version":3,"file":"LinkedToken.js","sources":["../../../../../src/components/SQLEditor/utils/LinkedToken.ts"],"sourcesContent":["import { type monacoTypes } from '@grafana/ui';\nimport { TokenType } from '../types';\n\nexport class LinkedToken {\n constructor(\n public type: string,\n public value: string,\n public range: monacoTypes.IRange,\n public previous: LinkedToken | null,\n public next: LinkedToken | null\n ) {}\n\n isKeyword(): boolean {\n return this.type === TokenType.Keyword;\n }\n\n isWhiteSpace(): boolean {\n return this.type === TokenType.Whitespace;\n }\n\n isParenthesis(): boolean {\n return this.type === TokenType.Parenthesis;\n }\n\n isIdentifier(): boolean {\n return this.type === TokenType.Identifier;\n }\n\n isString(): boolean {\n return this.type === TokenType.String;\n }\n\n isNumber(): boolean {\n return this.type === TokenType.Number;\n }\n\n isDoubleQuotedString(): boolean {\n return this.type === TokenType.Type;\n }\n\n isVariable(): boolean {\n return this.type === TokenType.Variable;\n }\n\n isFunction(): boolean {\n return this.type === TokenType.Function;\n }\n\n isOperator(): boolean {\n return this.type === TokenType.Operator;\n }\n\n isTemplateVariable(): boolean {\n return this.type === TokenType.Variable;\n }\n\n is(type: TokenType, value?: string | number | boolean): boolean {\n const isType = this.type === type;\n\n return value !== undefined ? isType && compareTokenWithValue(type, this, value) : isType;\n }\n\n getPreviousNonWhiteSpaceToken(): LinkedToken | null {\n let curr = this.previous;\n while (curr != null) {\n if (!curr.isWhiteSpace()) {\n return curr;\n }\n curr = curr.previous;\n }\n return null;\n }\n\n getPreviousOfType(type: TokenType, value?: string): LinkedToken | null {\n let curr = this.previous;\n while (curr != null) {\n const isType = curr.type === type;\n\n if (value !== undefined ? isType && compareTokenWithValue(type, curr, value) : isType) {\n return curr;\n }\n curr = curr.previous;\n }\n return null;\n }\n\n getPreviousUntil(type: TokenType, ignoreTypes: TokenType[], value?: string): LinkedToken[] | null {\n let tokens: LinkedToken[] = [];\n let curr = this.previous;\n while (curr != null) {\n if (ignoreTypes.some((t) => t === curr?.type)) {\n curr = curr.previous;\n continue;\n }\n\n const isType = curr.type === type;\n\n if (value !== undefined ? isType && compareTokenWithValue(type, curr, value) : isType) {\n return tokens;\n }\n if (!curr.isWhiteSpace()) {\n tokens.push(curr);\n }\n curr = curr.previous;\n }\n\n return tokens;\n }\n\n getNextUntil(type: TokenType, ignoreTypes: TokenType[], value?: string): LinkedToken[] | null {\n let tokens: LinkedToken[] = [];\n let curr = this.next;\n while (curr != null) {\n if (ignoreTypes.some((t) => t === curr?.type)) {\n curr = curr.next;\n continue;\n }\n\n const isType = curr.type === type;\n\n if (value !== undefined ? isType && compareTokenWithValue(type, curr, value) : isType) {\n return tokens;\n }\n if (!curr.isWhiteSpace()) {\n tokens.push(curr);\n }\n curr = curr.next;\n }\n\n return tokens;\n }\n\n getPreviousKeyword(): LinkedToken | null {\n let curr = this.previous;\n while (curr != null) {\n if (curr.isKeyword()) {\n return curr;\n }\n curr = curr.previous;\n }\n return null;\n }\n\n getNextNonWhiteSpaceToken(): LinkedToken | null {\n let curr = this.next;\n while (curr != null) {\n if (!curr.isWhiteSpace()) {\n return curr;\n }\n curr = curr.next;\n }\n return null;\n }\n\n getNextOfType(type: TokenType, value?: string): LinkedToken | null {\n let curr = this.next;\n while (curr != null) {\n const isType = curr.type === type;\n\n if (value !== undefined ? isType && compareTokenWithValue(type, curr, value) : isType) {\n return curr;\n }\n curr = curr.next;\n }\n return null;\n }\n}\n\nfunction compareTokenWithValue(type: TokenType, token: LinkedToken, value: string | number | boolean) {\n return type === TokenType.Keyword || type === TokenType.Operator\n ? token.value.toLowerCase() === value.toString().toLowerCase()\n : token.value === value;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LinkedToken.js","sources":["../../../../../src/components/SQLEditor/utils/LinkedToken.ts"],"sourcesContent":["import { type monacoTypes } from '@grafana/ui';\nimport { TokenType } from '../types';\n\nexport class LinkedToken {\n constructor(\n public type: string,\n public value: string,\n public range: monacoTypes.IRange,\n public previous: LinkedToken | null,\n public next: LinkedToken | null\n ) {}\n\n isKeyword(): boolean {\n return this.type === TokenType.Keyword;\n }\n\n isWhiteSpace(): boolean {\n return this.type === TokenType.Whitespace;\n }\n\n isParenthesis(): boolean {\n return this.type === TokenType.Parenthesis;\n }\n\n isIdentifier(): boolean {\n return this.type === TokenType.Identifier;\n }\n\n isString(): boolean {\n return this.type === TokenType.String;\n }\n\n isNumber(): boolean {\n return this.type === TokenType.Number;\n }\n\n isDoubleQuotedString(): boolean {\n return this.type === TokenType.Type;\n }\n\n isVariable(): boolean {\n return this.type === TokenType.Variable;\n }\n\n isFunction(): boolean {\n return this.type === TokenType.Function;\n }\n\n isOperator(): boolean {\n return this.type === TokenType.Operator;\n }\n\n isTemplateVariable(): boolean {\n return this.type === TokenType.Variable;\n }\n\n is(type: TokenType, value?: string | number | boolean): boolean {\n const isType = this.type === type;\n\n return value !== undefined ? isType && compareTokenWithValue(type, this, value) : isType;\n }\n\n getPreviousNonWhiteSpaceToken(): LinkedToken | null {\n let curr = this.previous;\n while (curr != null) {\n if (!curr.isWhiteSpace()) {\n return curr;\n }\n curr = curr.previous;\n }\n return null;\n }\n\n getPreviousOfType(type: TokenType, value?: string): LinkedToken | null {\n let curr = this.previous;\n while (curr != null) {\n const isType = curr.type === type;\n\n if (value !== undefined ? isType && compareTokenWithValue(type, curr, value) : isType) {\n return curr;\n }\n curr = curr.previous;\n }\n return null;\n }\n\n getPreviousUntil(type: TokenType, ignoreTypes: TokenType[], value?: string): LinkedToken[] | null {\n let tokens: LinkedToken[] = [];\n let curr = this.previous;\n while (curr != null) {\n if (ignoreTypes.some((t) => t === curr?.type)) {\n curr = curr.previous;\n continue;\n }\n\n const isType = curr.type === type;\n\n if (value !== undefined ? isType && compareTokenWithValue(type, curr, value) : isType) {\n return tokens;\n }\n if (!curr.isWhiteSpace()) {\n tokens.push(curr);\n }\n curr = curr.previous;\n }\n\n return tokens;\n }\n\n getNextUntil(type: TokenType, ignoreTypes: TokenType[], value?: string): LinkedToken[] | null {\n let tokens: LinkedToken[] = [];\n let curr = this.next;\n while (curr != null) {\n if (ignoreTypes.some((t) => t === curr?.type)) {\n curr = curr.next;\n continue;\n }\n\n const isType = curr.type === type;\n\n if (value !== undefined ? isType && compareTokenWithValue(type, curr, value) : isType) {\n return tokens;\n }\n if (!curr.isWhiteSpace()) {\n tokens.push(curr);\n }\n curr = curr.next;\n }\n\n return tokens;\n }\n\n getPreviousKeyword(): LinkedToken | null {\n let curr = this.previous;\n while (curr != null) {\n if (curr.isKeyword()) {\n return curr;\n }\n curr = curr.previous;\n }\n return null;\n }\n\n getNextNonWhiteSpaceToken(): LinkedToken | null {\n let curr = this.next;\n while (curr != null) {\n if (!curr.isWhiteSpace()) {\n return curr;\n }\n curr = curr.next;\n }\n return null;\n }\n\n getNextOfType(type: TokenType, value?: string): LinkedToken | null {\n let curr = this.next;\n while (curr != null) {\n const isType = curr.type === type;\n\n if (value !== undefined ? isType && compareTokenWithValue(type, curr, value) : isType) {\n return curr;\n }\n curr = curr.next;\n }\n return null;\n }\n}\n\nfunction compareTokenWithValue(type: TokenType, token: LinkedToken, value: string | number | boolean) {\n return type === TokenType.Keyword || type === TokenType.Operator\n ? token.value.toLowerCase() === value.toString().toLowerCase()\n : token.value === value;\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sources":["../../../../../src/components/SQLEditor/utils/commands.ts"],"sourcesContent":["export const TRIGGER_SUGGEST = {\n id: 'editor.action.triggerSuggest',\n title: '',\n};\n"],"names":[],"mappings":"AAAO,MAAM,eAAkB,GAAA;AAAA,EAC7B,EAAI,EAAA,8BAAA;AAAA,EACJ,KAAO,EAAA;AACT;;;;"}
1
+ {"version":3,"file":"commands.js","sources":["../../../../../src/components/SQLEditor/utils/commands.ts"],"sourcesContent":["export const TRIGGER_SUGGEST = {\n id: 'editor.action.triggerSuggest',\n title: '',\n};\n"],"names":[],"mappings":"AAAO,MAAM,eAAA,GAAkB;AAAA,EAC7B,EAAA,EAAI,8BAAA;AAAA,EACJ,KAAA,EAAO;AACT;;;;"}
@@ -7,7 +7,7 @@ let sqlEditorLog = () => {
7
7
  if (attachDebugger && createLogger) {
8
8
  sqlEditorLogger = createLogger("SQLEditor");
9
9
  sqlEditorLog = sqlEditorLogger.logger;
10
- attachDebugger("sqleditor", undefined, sqlEditorLogger);
10
+ attachDebugger("sqleditor", void 0, sqlEditorLogger);
11
11
  }
12
12
 
13
13
  export { sqlEditorLog, sqlEditorLogger };
@@ -1 +1 @@
1
- {"version":3,"file":"debugger.js","sources":["../../../../../src/components/SQLEditor/utils/debugger.ts"],"sourcesContent":["import { attachDebugger, createLogger } from '@grafana/ui';\n\nlet sqlEditorLogger = { logger: () => {} };\nlet sqlEditorLog: (...t: any[]) => void = () => {};\n\nif (attachDebugger && createLogger) {\n sqlEditorLogger = createLogger('SQLEditor');\n sqlEditorLog = sqlEditorLogger.logger;\n attachDebugger('sqleditor', undefined, sqlEditorLogger as any);\n}\n\nexport { sqlEditorLog, sqlEditorLogger };\n"],"names":[],"mappings":";;AAEI,IAAA,eAAA,GAAkB,EAAE,MAAA,EAAQ,MAAM;AAAC,CAAE;AACzC,IAAI,eAAsC,MAAM;AAAC;AAEjD,IAAI,kBAAkB,YAAc,EAAA;AAClC,EAAA,eAAA,GAAkB,aAAa,WAAW,CAAA;AAC1C,EAAA,YAAA,GAAe,eAAgB,CAAA,MAAA;AAC/B,EAAe,cAAA,CAAA,WAAA,EAAa,WAAW,eAAsB,CAAA;AAC/D;;;;"}
1
+ {"version":3,"file":"debugger.js","sources":["../../../../../src/components/SQLEditor/utils/debugger.ts"],"sourcesContent":["import { attachDebugger, createLogger } from '@grafana/ui';\n\nlet sqlEditorLogger = { logger: () => {} };\nlet sqlEditorLog: (...t: any[]) => void = () => {};\n\nif (attachDebugger && createLogger) {\n sqlEditorLogger = createLogger('SQLEditor');\n sqlEditorLog = sqlEditorLogger.logger;\n attachDebugger('sqleditor', undefined, sqlEditorLogger as any);\n}\n\nexport { sqlEditorLog, sqlEditorLogger };\n"],"names":[],"mappings":";;AAEA,IAAI,eAAA,GAAkB,EAAE,MAAA,EAAQ,MAAM;AAAC,CAAA;AACvC,IAAI,eAAsC,MAAM;AAAC;AAEjD,IAAI,kBAAkB,YAAA,EAAc;AAClC,EAAA,eAAA,GAAkB,aAAa,WAAW,CAAA;AAC1C,EAAA,YAAA,GAAe,eAAA,CAAgB,MAAA;AAC/B,EAAA,cAAA,CAAe,WAAA,EAAa,QAAW,eAAsB,CAAA;AAC/D;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"getSuggestionKind.js","sources":["../../../../../src/components/SQLEditor/utils/getSuggestionKind.ts"],"sourcesContent":["import { type Registry } from '@grafana/data';\nimport { type SuggestionKindRegistryItem } from '../standardSql/suggestionsKindRegistry';\nimport { type StatementPosition, type SuggestionKind } from '../types';\n\n/**\n * Given statement positions, returns list of suggestion kinds that apply to those positions.\n */\nexport function getSuggestionKinds(\n statementPosition: StatementPosition[],\n suggestionsKindRegistry: Registry<SuggestionKindRegistryItem>\n): SuggestionKind[] {\n let result: SuggestionKind[] = [];\n for (let i = 0; i < statementPosition.length; i++) {\n const exists = suggestionsKindRegistry.getIfExists(statementPosition[i]);\n if (exists) {\n result = result.concat(exists.kind);\n }\n }\n\n return result;\n}\n"],"names":[],"mappings":";;;AAOgB,SAAA,kBAAA,CACd,mBACA,uBACkB,EAAA;AAClB,EAAA,IAAI,SAA2B,EAAC;AAChC,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,iBAAA,CAAkB,QAAQ,CAAK,EAAA,EAAA;AACjD,IAAA,MAAM,MAAS,GAAA,uBAAA,CAAwB,WAAY,CAAA,iBAAA,CAAkB,CAAC,CAAC,CAAA;AACvE,IAAA,IAAI,MAAQ,EAAA;AACV,MAAS,MAAA,GAAA,MAAA,CAAO,MAAO,CAAA,MAAA,CAAO,IAAI,CAAA;AAAA;AACpC;AAGF,EAAO,OAAA,MAAA;AACT;;;;"}
1
+ {"version":3,"file":"getSuggestionKind.js","sources":["../../../../../src/components/SQLEditor/utils/getSuggestionKind.ts"],"sourcesContent":["import { type Registry } from '@grafana/data';\nimport { type SuggestionKindRegistryItem } from '../standardSql/suggestionsKindRegistry';\nimport { type StatementPosition, type SuggestionKind } from '../types';\n\n/**\n * Given statement positions, returns list of suggestion kinds that apply to those positions.\n */\nexport function getSuggestionKinds(\n statementPosition: StatementPosition[],\n suggestionsKindRegistry: Registry<SuggestionKindRegistryItem>\n): SuggestionKind[] {\n let result: SuggestionKind[] = [];\n for (let i = 0; i < statementPosition.length; i++) {\n const exists = suggestionsKindRegistry.getIfExists(statementPosition[i]);\n if (exists) {\n result = result.concat(exists.kind);\n }\n }\n\n return result;\n}\n"],"names":[],"mappings":";;;AAOO,SAAS,kBAAA,CACd,mBACA,uBAAA,EACkB;AAClB,EAAA,IAAI,SAA2B,EAAC;AAChC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,iBAAA,CAAkB,QAAQ,CAAA,EAAA,EAAK;AACjD,IAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,WAAA,CAAY,iBAAA,CAAkB,CAAC,CAAC,CAAA;AACvE,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAAA,IACpC;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;;;;"}
@@ -14,7 +14,7 @@ function linkedTokenBuilder(monaco, model, position, languageId = "sql") {
14
14
  offset: 0,
15
15
  type: TokenType.Whitespace,
16
16
  language: languageId,
17
- _tokenBrand: undefined
17
+ _tokenBrand: void 0
18
18
  };
19
19
  tokens.push(token);
20
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"linkedTokenBuilder.js","sources":["../../../../../src/components/SQLEditor/utils/linkedTokenBuilder.ts"],"sourcesContent":["import type { monacoTypes } from '@grafana/ui';\nimport { TokenType } from '../types';\nimport { LinkedToken } from './LinkedToken';\nimport { type Monaco } from './types';\n\nexport function linkedTokenBuilder(\n monaco: Monaco,\n model: monacoTypes.editor.ITextModel,\n position: monacoTypes.IPosition,\n languageId = 'sql'\n) {\n let current: LinkedToken | null = null;\n let previous: LinkedToken | null = null;\n const tokensPerLine = monaco.editor.tokenize(model.getValue() ?? '', languageId);\n for (let lineIndex = 0; lineIndex < tokensPerLine.length; lineIndex++) {\n const tokens = tokensPerLine[lineIndex];\n // In case position is first column in new line, add empty whitespace token so that links are not broken\n if (!tokens.length && previous) {\n const token: monacoTypes.Token = {\n offset: 0,\n type: TokenType.Whitespace,\n language: languageId,\n _tokenBrand: undefined,\n };\n tokens.push(token);\n }\n\n for (let columnIndex = 0; columnIndex < tokens.length; columnIndex++) {\n const token = tokens[columnIndex];\n let endColumn =\n tokens.length > columnIndex + 1 ? tokens[columnIndex + 1].offset + 1 : model.getLineLength(lineIndex + 1) + 1;\n\n const range: monacoTypes.IRange = {\n startLineNumber: lineIndex + 1,\n startColumn: token.offset === 0 ? 0 : token.offset + 1,\n endLineNumber: lineIndex + 1,\n endColumn,\n };\n\n const value = model.getValueInRange(range);\n const sqlToken: LinkedToken = new LinkedToken(token.type, value, range, previous, null);\n\n if (monaco.Range.containsPosition(range, position)) {\n current = sqlToken;\n }\n\n if (previous) {\n previous.next = sqlToken;\n }\n previous = sqlToken;\n }\n }\n return current;\n}\n"],"names":[],"mappings":";;;;AAKO,SAAS,kBACd,CAAA,MAAA,EACA,KACA,EAAA,QAAA,EACA,aAAa,KACb,EAAA;AAVF,EAAA,IAAA,EAAA;AAWE,EAAA,IAAI,OAA8B,GAAA,IAAA;AAClC,EAAA,IAAI,QAA+B,GAAA,IAAA;AACnC,EAAM,MAAA,aAAA,GAAgB,OAAO,MAAO,CAAA,QAAA,CAAA,CAAS,WAAM,QAAS,EAAA,KAAf,IAAoB,GAAA,EAAA,GAAA,EAAA,EAAI,UAAU,CAAA;AAC/E,EAAA,KAAA,IAAS,SAAY,GAAA,CAAA,EAAG,SAAY,GAAA,aAAA,CAAc,QAAQ,SAAa,EAAA,EAAA;AACrE,IAAM,MAAA,MAAA,GAAS,cAAc,SAAS,CAAA;AAEtC,IAAI,IAAA,CAAC,MAAO,CAAA,MAAA,IAAU,QAAU,EAAA;AAC9B,MAAA,MAAM,KAA2B,GAAA;AAAA,QAC/B,MAAQ,EAAA,CAAA;AAAA,QACR,MAAM,SAAU,CAAA,UAAA;AAAA,QAChB,QAAU,EAAA,UAAA;AAAA,QACV,WAAa,EAAA;AAAA,OACf;AACA,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA;AAGnB,IAAA,KAAA,IAAS,WAAc,GAAA,CAAA,EAAG,WAAc,GAAA,MAAA,CAAO,QAAQ,WAAe,EAAA,EAAA;AACpE,MAAM,MAAA,KAAA,GAAQ,OAAO,WAAW,CAAA;AAChC,MAAA,IAAI,SACF,GAAA,MAAA,CAAO,MAAS,GAAA,WAAA,GAAc,IAAI,MAAO,CAAA,WAAA,GAAc,CAAC,CAAA,CAAE,SAAS,CAAI,GAAA,KAAA,CAAM,aAAc,CAAA,SAAA,GAAY,CAAC,CAAI,GAAA,CAAA;AAE9G,MAAA,MAAM,KAA4B,GAAA;AAAA,QAChC,iBAAiB,SAAY,GAAA,CAAA;AAAA,QAC7B,aAAa,KAAM,CAAA,MAAA,KAAW,CAAI,GAAA,CAAA,GAAI,MAAM,MAAS,GAAA,CAAA;AAAA,QACrD,eAAe,SAAY,GAAA,CAAA;AAAA,QAC3B;AAAA,OACF;AAEA,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,eAAA,CAAgB,KAAK,CAAA;AACzC,MAAM,MAAA,QAAA,GAAwB,IAAI,WAAY,CAAA,KAAA,CAAM,MAAM,KAAO,EAAA,KAAA,EAAO,UAAU,IAAI,CAAA;AAEtF,MAAA,IAAI,MAAO,CAAA,KAAA,CAAM,gBAAiB,CAAA,KAAA,EAAO,QAAQ,CAAG,EAAA;AAClD,QAAU,OAAA,GAAA,QAAA;AAAA;AAGZ,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,QAAA,CAAS,IAAO,GAAA,QAAA;AAAA;AAElB,MAAW,QAAA,GAAA,QAAA;AAAA;AACb;AAEF,EAAO,OAAA,OAAA;AACT;;;;"}
1
+ {"version":3,"file":"linkedTokenBuilder.js","sources":["../../../../../src/components/SQLEditor/utils/linkedTokenBuilder.ts"],"sourcesContent":["import type { monacoTypes } from '@grafana/ui';\nimport { TokenType } from '../types';\nimport { LinkedToken } from './LinkedToken';\nimport { type Monaco } from './types';\n\nexport function linkedTokenBuilder(\n monaco: Monaco,\n model: monacoTypes.editor.ITextModel,\n position: monacoTypes.IPosition,\n languageId = 'sql'\n) {\n let current: LinkedToken | null = null;\n let previous: LinkedToken | null = null;\n const tokensPerLine = monaco.editor.tokenize(model.getValue() ?? '', languageId);\n for (let lineIndex = 0; lineIndex < tokensPerLine.length; lineIndex++) {\n const tokens = tokensPerLine[lineIndex];\n // In case position is first column in new line, add empty whitespace token so that links are not broken\n if (!tokens.length && previous) {\n const token: monacoTypes.Token = {\n offset: 0,\n type: TokenType.Whitespace,\n language: languageId,\n _tokenBrand: undefined,\n };\n tokens.push(token);\n }\n\n for (let columnIndex = 0; columnIndex < tokens.length; columnIndex++) {\n const token = tokens[columnIndex];\n let endColumn =\n tokens.length > columnIndex + 1 ? tokens[columnIndex + 1].offset + 1 : model.getLineLength(lineIndex + 1) + 1;\n\n const range: monacoTypes.IRange = {\n startLineNumber: lineIndex + 1,\n startColumn: token.offset === 0 ? 0 : token.offset + 1,\n endLineNumber: lineIndex + 1,\n endColumn,\n };\n\n const value = model.getValueInRange(range);\n const sqlToken: LinkedToken = new LinkedToken(token.type, value, range, previous, null);\n\n if (monaco.Range.containsPosition(range, position)) {\n current = sqlToken;\n }\n\n if (previous) {\n previous.next = sqlToken;\n }\n previous = sqlToken;\n }\n }\n return current;\n}\n"],"names":[],"mappings":";;;;AAKO,SAAS,kBAAA,CACd,MAAA,EACA,KAAA,EACA,QAAA,EACA,aAAa,KAAA,EACb;AAVF,EAAA,IAAA,EAAA;AAWE,EAAA,IAAI,OAAA,GAA8B,IAAA;AAClC,EAAA,IAAI,QAAA,GAA+B,IAAA;AACnC,EAAA,MAAM,aAAA,GAAgB,OAAO,MAAA,CAAO,QAAA,CAAA,CAAS,WAAM,QAAA,EAAS,KAAf,IAAA,GAAA,EAAA,GAAoB,EAAA,EAAI,UAAU,CAAA;AAC/E,EAAA,KAAA,IAAS,SAAA,GAAY,CAAA,EAAG,SAAA,GAAY,aAAA,CAAc,QAAQ,SAAA,EAAA,EAAa;AACrE,IAAA,MAAM,MAAA,GAAS,cAAc,SAAS,CAAA;AAEtC,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,IAAU,QAAA,EAAU;AAC9B,MAAA,MAAM,KAAA,GAA2B;AAAA,QAC/B,MAAA,EAAQ,CAAA;AAAA,QACR,MAAM,SAAA,CAAU,UAAA;AAAA,QAChB,QAAA,EAAU,UAAA;AAAA,QACV,WAAA,EAAa;AAAA,OACf;AACA,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,IACnB;AAEA,IAAA,KAAA,IAAS,WAAA,GAAc,CAAA,EAAG,WAAA,GAAc,MAAA,CAAO,QAAQ,WAAA,EAAA,EAAe;AACpE,MAAA,MAAM,KAAA,GAAQ,OAAO,WAAW,CAAA;AAChC,MAAA,IAAI,SAAA,GACF,MAAA,CAAO,MAAA,GAAS,WAAA,GAAc,IAAI,MAAA,CAAO,WAAA,GAAc,CAAC,CAAA,CAAE,SAAS,CAAA,GAAI,KAAA,CAAM,aAAA,CAAc,SAAA,GAAY,CAAC,CAAA,GAAI,CAAA;AAE9G,MAAA,MAAM,KAAA,GAA4B;AAAA,QAChC,iBAAiB,SAAA,GAAY,CAAA;AAAA,QAC7B,aAAa,KAAA,CAAM,MAAA,KAAW,CAAA,GAAI,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA;AAAA,QACrD,eAAe,SAAA,GAAY,CAAA;AAAA,QAC3B;AAAA,OACF;AAEA,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,eAAA,CAAgB,KAAK,CAAA;AACzC,MAAA,MAAM,QAAA,GAAwB,IAAI,WAAA,CAAY,KAAA,CAAM,MAAM,KAAA,EAAO,KAAA,EAAO,UAAU,IAAI,CAAA;AAEtF,MAAA,IAAI,MAAA,CAAO,KAAA,CAAM,gBAAA,CAAiB,KAAA,EAAO,QAAQ,CAAA,EAAG;AAClD,QAAA,OAAA,GAAU,QAAA;AAAA,MACZ;AAEA,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,CAAS,IAAA,GAAO,QAAA;AAAA,MAClB;AACA,MAAA,QAAA,GAAW,QAAA;AAAA,IACb;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;;;;"}
@@ -1,5 +1,5 @@
1
1
  import '@grafana/ui';
2
- import { CompletionItemKind, CompletionItemPriority } from '../types.js';
2
+ import { CompletionItemPriority, CompletionItemKind } from '../types.js';
3
3
 
4
4
  const toCompletionItem = (value, range, rest = {}) => {
5
5
  const item = {
@@ -1 +1 @@
1
- {"version":3,"file":"toCompletionItem.js","sources":["../../../../../src/components/SQLEditor/utils/toCompletionItem.ts"],"sourcesContent":["import { type monacoTypes } from '@grafana/ui';\nimport { CompletionItemKind, CompletionItemPriority } from '../types';\n\nexport const toCompletionItem = (\n value: string,\n range: monacoTypes.IRange,\n rest: Partial<monacoTypes.languages.CompletionItem> = {}\n) => {\n const item: monacoTypes.languages.CompletionItem = {\n label: value,\n insertText: value,\n kind: CompletionItemKind.Field,\n sortText: CompletionItemPriority.Medium,\n range,\n ...rest,\n };\n return item;\n};\n"],"names":[],"mappings":";;;AAGO,MAAM,mBAAmB,CAC9B,KAAA,EACA,KACA,EAAA,IAAA,GAAsD,EACnD,KAAA;AACH,EAAA,MAAM,IAA6C,GAAA;AAAA,IACjD,KAAO,EAAA,KAAA;AAAA,IACP,UAAY,EAAA,KAAA;AAAA,IACZ,MAAM,kBAAmB,CAAA,KAAA;AAAA,IACzB,UAAU,sBAAuB,CAAA,MAAA;AAAA,IACjC,KAAA;AAAA,IACA,GAAG;AAAA,GACL;AACA,EAAO,OAAA,IAAA;AACT;;;;"}
1
+ {"version":3,"file":"toCompletionItem.js","sources":["../../../../../src/components/SQLEditor/utils/toCompletionItem.ts"],"sourcesContent":["import { type monacoTypes } from '@grafana/ui';\nimport { CompletionItemKind, CompletionItemPriority } from '../types';\n\nexport const toCompletionItem = (\n value: string,\n range: monacoTypes.IRange,\n rest: Partial<monacoTypes.languages.CompletionItem> = {}\n) => {\n const item: monacoTypes.languages.CompletionItem = {\n label: value,\n insertText: value,\n kind: CompletionItemKind.Field,\n sortText: CompletionItemPriority.Medium,\n range,\n ...rest,\n };\n return item;\n};\n"],"names":[],"mappings":";;;AAGO,MAAM,mBAAmB,CAC9B,KAAA,EACA,KAAA,EACA,IAAA,GAAsD,EAAC,KACpD;AACH,EAAA,MAAM,IAAA,GAA6C;AAAA,IACjD,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,KAAA;AAAA,IACZ,MAAM,kBAAA,CAAmB,KAAA;AAAA,IACzB,UAAU,sBAAA,CAAuB,MAAA;AAAA,IACjC,KAAA;AAAA,IACA,GAAG;AAAA,GACL;AACA,EAAA,OAAO,IAAA;AACT;;;;"}
@@ -4,31 +4,31 @@ import '@grafana/ui';
4
4
 
5
5
  const getSelectToken = (currentToken) => {
6
6
  var _a;
7
- return (_a = currentToken == null ? undefined : currentToken.getPreviousOfType(TokenType.Keyword, SELECT)) != null ? _a : null;
7
+ return (_a = currentToken == null ? void 0 : currentToken.getPreviousOfType(TokenType.Keyword, SELECT)) != null ? _a : null;
8
8
  };
9
9
  const getFromKeywordToken = (currentToken) => {
10
10
  const selectToken = getSelectToken(currentToken);
11
- return selectToken == null ? undefined : selectToken.getNextOfType(TokenType.Keyword, FROM);
11
+ return selectToken == null ? void 0 : selectToken.getNextOfType(TokenType.Keyword, FROM);
12
12
  };
13
13
  const getTableToken = (currentToken) => {
14
14
  var _a;
15
15
  const fromToken = getFromKeywordToken(currentToken);
16
- const nextNonWhiteSpace = fromToken == null ? undefined : fromToken.getNextNonWhiteSpaceToken();
17
- if (nextNonWhiteSpace == null ? undefined : nextNonWhiteSpace.isVariable()) {
16
+ const nextNonWhiteSpace = fromToken == null ? void 0 : fromToken.getNextNonWhiteSpaceToken();
17
+ if (nextNonWhiteSpace == null ? void 0 : nextNonWhiteSpace.isVariable()) {
18
18
  return null;
19
- } else if ((nextNonWhiteSpace == null ? undefined : nextNonWhiteSpace.isKeyword()) && ((_a = nextNonWhiteSpace.next) == null ? undefined : _a.is(TokenType.Parenthesis, "("))) {
19
+ } else if ((nextNonWhiteSpace == null ? void 0 : nextNonWhiteSpace.isKeyword()) && ((_a = nextNonWhiteSpace.next) == null ? void 0 : _a.is(TokenType.Parenthesis, "("))) {
20
20
  return null;
21
21
  } else {
22
22
  return nextNonWhiteSpace;
23
23
  }
24
24
  };
25
25
  const defaultTableNameParser = (token) => {
26
- const parts = token == null ? undefined : token.value.split(".");
27
- if ((parts == null ? undefined : parts.length) === 1) {
26
+ const parts = token == null ? void 0 : token.value.split(".");
27
+ if ((parts == null ? void 0 : parts.length) === 1) {
28
28
  return { table: parts[0] };
29
- } else if ((parts == null ? undefined : parts.length) === 2) {
29
+ } else if ((parts == null ? void 0 : parts.length) === 2) {
30
30
  return { schema: parts[0], table: parts[1] };
31
- } else if ((parts == null ? undefined : parts.length) === 3) {
31
+ } else if ((parts == null ? void 0 : parts.length) === 3) {
32
32
  return { catalog: parts[0], schema: parts[1], table: parts[2] };
33
33
  }
34
34
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"tokenUtils.js","sources":["../../../../../src/components/SQLEditor/utils/tokenUtils.ts"],"sourcesContent":["import { FROM, SCHEMA, SELECT } from '../standardSql/language';\nimport { TokenType } from '../types';\nimport { type LinkedToken } from './LinkedToken';\n\nexport const getSelectToken = (currentToken: LinkedToken | null) =>\n currentToken?.getPreviousOfType(TokenType.Keyword, SELECT) ?? null;\n\nexport const getSelectStatisticToken = (currentToken: LinkedToken | null) => {\n const assumedStatisticToken = getSelectToken(currentToken)?.getNextNonWhiteSpaceToken();\n return assumedStatisticToken?.isVariable() || assumedStatisticToken?.isFunction() ? assumedStatisticToken : null;\n};\n\nexport const getMetricNameToken = (currentToken: LinkedToken | null) => {\n // statistic function is followed by `(` and then an argument\n const assumedMetricNameToken = getSelectStatisticToken(currentToken)?.next?.next;\n return assumedMetricNameToken?.isVariable() || assumedMetricNameToken?.isIdentifier() ? assumedMetricNameToken : null;\n};\n\nexport const getFromKeywordToken = (currentToken: LinkedToken | null) => {\n const selectToken = getSelectToken(currentToken);\n return selectToken?.getNextOfType(TokenType.Keyword, FROM);\n};\n\nexport const getNamespaceToken = (currentToken: LinkedToken | null) => {\n const fromToken = getFromKeywordToken(currentToken);\n const nextNonWhiteSpace = fromToken?.getNextNonWhiteSpaceToken();\n\n if (\n nextNonWhiteSpace?.isDoubleQuotedString() ||\n (nextNonWhiteSpace?.isVariable() && nextNonWhiteSpace?.value.toUpperCase() !== SCHEMA)\n ) {\n // schema is not used\n return nextNonWhiteSpace;\n } else if (nextNonWhiteSpace?.isKeyword() && nextNonWhiteSpace.next?.is(TokenType.Parenthesis, '(')) {\n // schema is specified\n const assumedNamespaceToken = nextNonWhiteSpace.next?.next;\n if (assumedNamespaceToken?.isDoubleQuotedString() || assumedNamespaceToken?.isVariable()) {\n return assumedNamespaceToken;\n }\n }\n return null;\n};\nexport const getTableToken = (currentToken: LinkedToken | null) => {\n const fromToken = getFromKeywordToken(currentToken);\n const nextNonWhiteSpace = fromToken?.getNextNonWhiteSpaceToken();\n if (nextNonWhiteSpace?.isVariable()) {\n // TODO: resolve column from variable?\n return null;\n } else if (nextNonWhiteSpace?.isKeyword() && nextNonWhiteSpace.next?.is(TokenType.Parenthesis, '(')) {\n return null;\n } else {\n return nextNonWhiteSpace;\n }\n};\n\nexport const defaultTableNameParser = (token: LinkedToken | null | undefined) => {\n const parts = token?.value.split('.');\n\n if (parts?.length === 1) {\n return { table: parts[0] };\n } else if (parts?.length === 2) {\n return { schema: parts[0], table: parts[1] };\n } else if (parts?.length === 3) {\n return { catalog: parts[0], schema: parts[1], table: parts[2] };\n }\n\n return null;\n};\n"],"names":[],"mappings":";;;;AAIa,MAAA,cAAA,GAAiB,CAAC,YAAkC,KAAA;AAJjE,EAAA,IAAA,EAAA;AAKE,EAAA,OAAA,CAAA,EAAA,GAAA,YAAA,IAAA,IAAA,GAAA,SAAA,GAAA,YAAA,CAAc,iBAAkB,CAAA,SAAA,CAAU,OAAS,EAAA,MAAA,CAAA,KAAnD,IAA8D,GAAA,EAAA,GAAA,IAAA;AAAA;AAanD,MAAA,mBAAA,GAAsB,CAAC,YAAqC,KAAA;AACvE,EAAM,MAAA,WAAA,GAAc,eAAe,YAAY,CAAA;AAC/C,EAAO,OAAA,WAAA,IAAA,IAAA,GAAA,SAAA,GAAA,WAAA,CAAa,aAAc,CAAA,SAAA,CAAU,OAAS,EAAA,IAAA,CAAA;AACvD;AAqBa,MAAA,aAAA,GAAgB,CAAC,YAAqC,KAAA;AA1CnE,EAAA,IAAA,EAAA;AA2CE,EAAM,MAAA,SAAA,GAAY,oBAAoB,YAAY,CAAA;AAClD,EAAA,MAAM,oBAAoB,SAAW,IAAA,IAAA,GAAA,SAAA,GAAA,SAAA,CAAA,yBAAA,EAAA;AACrC,EAAA,IAAI,0DAAmB,UAAc,EAAA,EAAA;AAEnC,IAAO,OAAA,IAAA;AAAA,GACT,MAAA,IAAA,CAAW,0DAAmB,SAAe,EAAA,MAAA,CAAA,EAAA,GAAA,iBAAA,CAAkB,SAAlB,IAAwB,GAAA,SAAA,GAAA,EAAA,CAAA,EAAA,CAAG,SAAU,CAAA,WAAA,EAAa,GAAM,CAAA,CAAA,EAAA;AACnG,IAAO,OAAA,IAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,iBAAA;AAAA;AAEX;AAEa,MAAA,sBAAA,GAAyB,CAAC,KAA0C,KAAA;AAC/E,EAAM,MAAA,KAAA,GAAQ,KAAO,IAAA,IAAA,GAAA,SAAA,GAAA,KAAA,CAAA,KAAA,CAAM,KAAM,CAAA,GAAA,CAAA;AAEjC,EAAI,IAAA,CAAA,KAAA,IAAA,IAAA,GAAA,SAAA,GAAA,KAAA,CAAO,YAAW,CAAG,EAAA;AACvB,IAAA,OAAO,EAAE,KAAA,EAAO,KAAM,CAAA,CAAC,CAAE,EAAA;AAAA,GAC3B,MAAA,IAAA,CAAW,KAAO,IAAA,IAAA,GAAA,SAAA,GAAA,KAAA,CAAA,MAAA,MAAW,CAAG,EAAA;AAC9B,IAAO,OAAA,EAAE,QAAQ,KAAM,CAAA,CAAC,GAAG,KAAO,EAAA,KAAA,CAAM,CAAC,CAAE,EAAA;AAAA,GAC7C,MAAA,IAAA,CAAW,KAAO,IAAA,IAAA,GAAA,SAAA,GAAA,KAAA,CAAA,MAAA,MAAW,CAAG,EAAA;AAC9B,IAAA,OAAO,EAAE,OAAA,EAAS,KAAM,CAAA,CAAC,CAAG,EAAA,MAAA,EAAQ,KAAM,CAAA,CAAC,CAAG,EAAA,KAAA,EAAO,KAAM,CAAA,CAAC,CAAE,EAAA;AAAA;AAGhE,EAAO,OAAA,IAAA;AACT;;;;"}
1
+ {"version":3,"file":"tokenUtils.js","sources":["../../../../../src/components/SQLEditor/utils/tokenUtils.ts"],"sourcesContent":["import { FROM, SCHEMA, SELECT } from '../standardSql/language';\nimport { TokenType } from '../types';\nimport { type LinkedToken } from './LinkedToken';\n\nexport const getSelectToken = (currentToken: LinkedToken | null) =>\n currentToken?.getPreviousOfType(TokenType.Keyword, SELECT) ?? null;\n\nexport const getSelectStatisticToken = (currentToken: LinkedToken | null) => {\n const assumedStatisticToken = getSelectToken(currentToken)?.getNextNonWhiteSpaceToken();\n return assumedStatisticToken?.isVariable() || assumedStatisticToken?.isFunction() ? assumedStatisticToken : null;\n};\n\nexport const getMetricNameToken = (currentToken: LinkedToken | null) => {\n // statistic function is followed by `(` and then an argument\n const assumedMetricNameToken = getSelectStatisticToken(currentToken)?.next?.next;\n return assumedMetricNameToken?.isVariable() || assumedMetricNameToken?.isIdentifier() ? assumedMetricNameToken : null;\n};\n\nexport const getFromKeywordToken = (currentToken: LinkedToken | null) => {\n const selectToken = getSelectToken(currentToken);\n return selectToken?.getNextOfType(TokenType.Keyword, FROM);\n};\n\nexport const getNamespaceToken = (currentToken: LinkedToken | null) => {\n const fromToken = getFromKeywordToken(currentToken);\n const nextNonWhiteSpace = fromToken?.getNextNonWhiteSpaceToken();\n\n if (\n nextNonWhiteSpace?.isDoubleQuotedString() ||\n (nextNonWhiteSpace?.isVariable() && nextNonWhiteSpace?.value.toUpperCase() !== SCHEMA)\n ) {\n // schema is not used\n return nextNonWhiteSpace;\n } else if (nextNonWhiteSpace?.isKeyword() && nextNonWhiteSpace.next?.is(TokenType.Parenthesis, '(')) {\n // schema is specified\n const assumedNamespaceToken = nextNonWhiteSpace.next?.next;\n if (assumedNamespaceToken?.isDoubleQuotedString() || assumedNamespaceToken?.isVariable()) {\n return assumedNamespaceToken;\n }\n }\n return null;\n};\nexport const getTableToken = (currentToken: LinkedToken | null) => {\n const fromToken = getFromKeywordToken(currentToken);\n const nextNonWhiteSpace = fromToken?.getNextNonWhiteSpaceToken();\n if (nextNonWhiteSpace?.isVariable()) {\n // TODO: resolve column from variable?\n return null;\n } else if (nextNonWhiteSpace?.isKeyword() && nextNonWhiteSpace.next?.is(TokenType.Parenthesis, '(')) {\n return null;\n } else {\n return nextNonWhiteSpace;\n }\n};\n\nexport const defaultTableNameParser = (token: LinkedToken | null | undefined) => {\n const parts = token?.value.split('.');\n\n if (parts?.length === 1) {\n return { table: parts[0] };\n } else if (parts?.length === 2) {\n return { schema: parts[0], table: parts[1] };\n } else if (parts?.length === 3) {\n return { catalog: parts[0], schema: parts[1], table: parts[2] };\n }\n\n return null;\n};\n"],"names":[],"mappings":";;;;AAIO,MAAM,cAAA,GAAiB,CAAC,YAAA,KAAkC;AAJjE,EAAA,IAAA,EAAA;AAKE,EAAA,OAAA,CAAA,EAAA,GAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,iBAAA,CAAkB,SAAA,CAAU,OAAA,EAAS,MAAA,CAAA,KAAnD,IAAA,GAAA,EAAA,GAA8D,IAAA;AAAA;AAazD,MAAM,mBAAA,GAAsB,CAAC,YAAA,KAAqC;AACvE,EAAA,MAAM,WAAA,GAAc,eAAe,YAAY,CAAA;AAC/C,EAAA,OAAO,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,aAAA,CAAc,SAAA,CAAU,OAAA,EAAS,IAAA,CAAA;AACvD;AAqBO,MAAM,aAAA,GAAgB,CAAC,YAAA,KAAqC;AA1CnE,EAAA,IAAA,EAAA;AA2CE,EAAA,MAAM,SAAA,GAAY,oBAAoB,YAAY,CAAA;AAClD,EAAA,MAAM,oBAAoB,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,yBAAA,EAAA;AACrC,EAAA,IAAI,uDAAmB,UAAA,EAAA,EAAc;AAEnC,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,MAAA,IAAA,CAAW,uDAAmB,SAAA,EAAA,MAAA,CAAe,EAAA,GAAA,iBAAA,CAAkB,SAAlB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,EAAA,CAAG,SAAA,CAAU,WAAA,EAAa,GAAA,CAAA,CAAA,EAAM;AACnG,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,MAAO;AACL,IAAA,OAAO,iBAAA;AAAA,EACT;AACF;AAEO,MAAM,sBAAA,GAAyB,CAAC,KAAA,KAA0C;AAC/E,EAAA,MAAM,KAAA,GAAQ,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,CAAM,KAAA,CAAM,GAAA,CAAA;AAEjC,EAAA,IAAA,CAAI,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,YAAW,CAAA,EAAG;AACvB,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,EAAE;AAAA,EAC3B,CAAA,MAAA,IAAA,CAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,MAAA,MAAW,CAAA,EAAG;AAC9B,IAAA,OAAO,EAAE,QAAQ,KAAA,CAAM,CAAC,GAAG,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,EAAE;AAAA,EAC7C,CAAA,MAAA,IAAA,CAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,MAAA,MAAW,CAAA,EAAG;AAC9B,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,CAAM,CAAC,CAAA,EAAG,MAAA,EAAQ,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,EAAE;AAAA,EAChE;AAEA,EAAA,OAAO,IAAA;AACT;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Segment.js","sources":["../../../../src/components/Segment/Segment.tsx"],"sourcesContent":["import React, { useEffect, type ComponentProps, useState } from 'react';\nimport { Segment as GrafanaSegment } from '@grafana/ui';\nimport { type SelectableValue } from '@grafana/data';\nimport { useDebounce } from '../../hooks/useDebounce';\n\nexport interface SegmentProps<T> extends Omit<ComponentProps<typeof GrafanaSegment<T>>, 'onChange'> {\n value: T;\n onDebounce: (debouncedSegment?: T) => void;\n delay?: number;\n}\n\nexport function Segment<T>(props: SegmentProps<T>) {\n const { delay, onDebounce, value, options, ...rest } = props;\n const [input, setInput] = useState(value);\n\n const debouncedSegment = useDebounce(input, delay);\n\n // TODO: We should fix the exhaustive-deps rule\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => onDebounce(debouncedSegment), [debouncedSegment]);\n useEffect(() => setInput(value), [value]);\n\n return (\n <GrafanaSegment\n options={options}\n onChange={(ev: SelectableValue<T>) => setInput(ev.value!)}\n value={input}\n {...rest}\n />\n );\n}\n"],"names":["GrafanaSegment"],"mappings":";;;;;AAWO,SAAS,QAAW,KAAwB,EAAA;AACjD,EAAA,MAAM,EAAE,KAAO,EAAA,UAAA,EAAY,OAAO,OAAS,EAAA,GAAG,MAAS,GAAA,KAAA;AACvD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,KAAK,CAAA;AAExC,EAAM,MAAA,gBAAA,GAAmB,WAAY,CAAA,KAAA,EAAO,KAAK,CAAA;AAIjD,EAAA,SAAA,CAAU,MAAM,UAAW,CAAA,gBAAgB,CAAG,EAAA,CAAC,gBAAgB,CAAC,CAAA;AAChE,EAAA,SAAA,CAAU,MAAM,QAAS,CAAA,KAAK,CAAG,EAAA,CAAC,KAAK,CAAC,CAAA;AAExC,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAACA,SAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,QAAU,EAAA,CAAC,EAA2B,KAAA,QAAA,CAAS,GAAG,KAAM,CAAA;AAAA,MACxD,KAAO,EAAA,KAAA;AAAA,MACN,GAAG;AAAA;AAAA,GACN;AAEJ;;;;"}
1
+ {"version":3,"file":"Segment.js","sources":["../../../../src/components/Segment/Segment.tsx"],"sourcesContent":["import React, { useEffect, type ComponentProps, useState } from 'react';\nimport { Segment as GrafanaSegment } from '@grafana/ui';\nimport { type SelectableValue } from '@grafana/data';\nimport { useDebounce } from '../../hooks/useDebounce';\n\nexport interface SegmentProps<T> extends Omit<ComponentProps<typeof GrafanaSegment<T>>, 'onChange'> {\n value: T;\n onDebounce: (debouncedSegment?: T) => void;\n delay?: number;\n}\n\nexport function Segment<T>(props: SegmentProps<T>) {\n const { delay, onDebounce, value, options, ...rest } = props;\n const [input, setInput] = useState(value);\n\n const debouncedSegment = useDebounce(input, delay);\n\n // TODO: We should fix the exhaustive-deps rule\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => onDebounce(debouncedSegment), [debouncedSegment]);\n useEffect(() => setInput(value), [value]);\n\n return (\n <GrafanaSegment\n options={options}\n onChange={(ev: SelectableValue<T>) => setInput(ev.value!)}\n value={input}\n {...rest}\n />\n );\n}\n"],"names":["GrafanaSegment"],"mappings":";;;;;AAWO,SAAS,QAAW,KAAA,EAAwB;AACjD,EAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,OAAO,OAAA,EAAS,GAAG,MAAK,GAAI,KAAA;AACvD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,KAAK,CAAA;AAExC,EAAA,MAAM,gBAAA,GAAmB,WAAA,CAAY,KAAA,EAAO,KAAK,CAAA;AAIjD,EAAA,SAAA,CAAU,MAAM,UAAA,CAAW,gBAAgB,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAChE,EAAA,SAAA,CAAU,MAAM,QAAA,CAAS,KAAK,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAExC,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAACA,SAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,QAAA,EAAU,CAAC,EAAA,KAA2B,QAAA,CAAS,GAAG,KAAM,CAAA;AAAA,MACxD,KAAA,EAAO,KAAA;AAAA,MACN,GAAG;AAAA;AAAA,GACN;AAEJ;;;;"}
@@ -30,8 +30,8 @@ class QueryModellerBase {
30
30
  hasBinaryOp(query) {
31
31
  return query.operations.find((op) => {
32
32
  const def = this.getOperationDefinition(op.id);
33
- return (def == null ? undefined : def.category) === BINARY_OPERATIONS_KEY;
34
- }) !== undefined;
33
+ return (def == null ? void 0 : def.category) === BINARY_OPERATIONS_KEY;
34
+ }) !== void 0;
35
35
  }
36
36
  }
37
37
 
@@ -1 +1 @@
1
- {"version":3,"file":"QueryModellerBase.js","sources":["../../../../src/components/VisualQueryBuilder/QueryModellerBase.ts"],"sourcesContent":["import { Registry } from '@grafana/data';\n\nimport {\n BINARY_OPERATIONS_KEY,\n type VisualQuery,\n type VisualQueryBinary,\n type QueryBuilderLabelFilter,\n type QueryBuilderOperation,\n type VisualQueryModeller,\n type QueryBuilderOperationDefinition,\n} from './types';\n\nexport abstract class QueryModellerBase implements VisualQueryModeller {\n protected operationsRegistry: Registry<QueryBuilderOperationDefinition>;\n private categories: string[] = [];\n innerQueryPlaceholder: string;\n\n constructor(operationDefinitions: QueryBuilderOperationDefinition[], innerQueryPlaceholder?: string) {\n this.operationsRegistry = new Registry<QueryBuilderOperationDefinition>(() => operationDefinitions);\n this.innerQueryPlaceholder = innerQueryPlaceholder || '<query>';\n }\n\n protected setOperationCategories(categories: string[]) {\n this.categories = categories;\n }\n\n abstract renderOperations(queryString: string, operations: QueryBuilderOperation[]): string;\n\n abstract renderBinaryQueries(queryString: string, binaryQueries?: Array<VisualQueryBinary<VisualQuery>>): string;\n\n abstract renderLabels(labels: QueryBuilderLabelFilter[]): string;\n\n abstract renderQuery(query: VisualQuery, nested?: boolean): string;\n\n getOperationsForCategory(category: string) {\n return this.operationsRegistry.list().filter((op) => op.category === category && !op.hideFromList);\n }\n\n getAlternativeOperations(key: string) {\n return this.operationsRegistry.list().filter((op) => op.alternativesKey && op.alternativesKey === key);\n }\n\n getCategories() {\n return this.categories;\n }\n\n getOperationDefinition(id: string): QueryBuilderOperationDefinition | undefined {\n return this.operationsRegistry.getIfExists(id);\n }\n\n hasBinaryOp(query: VisualQuery): boolean {\n return (\n query.operations.find((op) => {\n const def = this.getOperationDefinition(op.id);\n return def?.category === BINARY_OPERATIONS_KEY;\n }) !== undefined\n );\n }\n}\n"],"names":[],"mappings":";;;;;;AAYO,MAAe,iBAAiD,CAAA;AAAA,EAKrE,WAAA,CAAY,sBAAyD,qBAAgC,EAAA;AAJrG,IAAU,aAAA,CAAA,IAAA,EAAA,oBAAA,CAAA;AACV,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAuB,EAAC,CAAA;AAChC,IAAA,aAAA,CAAA,IAAA,EAAA,uBAAA,CAAA;AAGE,IAAA,IAAA,CAAK,kBAAqB,GAAA,IAAI,QAA0C,CAAA,MAAM,oBAAoB,CAAA;AAClG,IAAA,IAAA,CAAK,wBAAwB,qBAAyB,IAAA,SAAA;AAAA;AACxD,EAEU,uBAAuB,UAAsB,EAAA;AACrD,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA;AAAA;AACpB,EAUA,yBAAyB,QAAkB,EAAA;AACzC,IAAA,OAAO,IAAK,CAAA,kBAAA,CAAmB,IAAK,EAAA,CAAE,MAAO,CAAA,CAAC,EAAO,KAAA,EAAA,CAAG,QAAa,KAAA,QAAA,IAAY,CAAC,EAAA,CAAG,YAAY,CAAA;AAAA;AACnG,EAEA,yBAAyB,GAAa,EAAA;AACpC,IAAO,OAAA,IAAA,CAAK,kBAAmB,CAAA,IAAA,EAAO,CAAA,MAAA,CAAO,CAAC,EAAA,KAAO,EAAG,CAAA,eAAA,IAAmB,EAAG,CAAA,eAAA,KAAoB,GAAG,CAAA;AAAA;AACvG,EAEA,aAAgB,GAAA;AACd,IAAA,OAAO,IAAK,CAAA,UAAA;AAAA;AACd,EAEA,uBAAuB,EAAyD,EAAA;AAC9E,IAAO,OAAA,IAAA,CAAK,kBAAmB,CAAA,WAAA,CAAY,EAAE,CAAA;AAAA;AAC/C,EAEA,YAAY,KAA6B,EAAA;AACvC,IAAA,OACE,KAAM,CAAA,UAAA,CAAW,IAAK,CAAA,CAAC,EAAO,KAAA;AAC5B,MAAA,MAAM,GAAM,GAAA,IAAA,CAAK,sBAAuB,CAAA,EAAA,CAAG,EAAE,CAAA;AAC7C,MAAA,OAAA,CAAO,8BAAK,QAAa,MAAA,qBAAA;AAAA,KAC1B,CAAM,KAAA,SAAA;AAAA;AAGb;;;;"}
1
+ {"version":3,"file":"QueryModellerBase.js","sources":["../../../../src/components/VisualQueryBuilder/QueryModellerBase.ts"],"sourcesContent":["import { Registry } from '@grafana/data';\n\nimport {\n BINARY_OPERATIONS_KEY,\n type VisualQuery,\n type VisualQueryBinary,\n type QueryBuilderLabelFilter,\n type QueryBuilderOperation,\n type VisualQueryModeller,\n type QueryBuilderOperationDefinition,\n} from './types';\n\nexport abstract class QueryModellerBase implements VisualQueryModeller {\n protected operationsRegistry: Registry<QueryBuilderOperationDefinition>;\n private categories: string[] = [];\n innerQueryPlaceholder: string;\n\n constructor(operationDefinitions: QueryBuilderOperationDefinition[], innerQueryPlaceholder?: string) {\n this.operationsRegistry = new Registry<QueryBuilderOperationDefinition>(() => operationDefinitions);\n this.innerQueryPlaceholder = innerQueryPlaceholder || '<query>';\n }\n\n protected setOperationCategories(categories: string[]) {\n this.categories = categories;\n }\n\n abstract renderOperations(queryString: string, operations: QueryBuilderOperation[]): string;\n\n abstract renderBinaryQueries(queryString: string, binaryQueries?: Array<VisualQueryBinary<VisualQuery>>): string;\n\n abstract renderLabels(labels: QueryBuilderLabelFilter[]): string;\n\n abstract renderQuery(query: VisualQuery, nested?: boolean): string;\n\n getOperationsForCategory(category: string) {\n return this.operationsRegistry.list().filter((op) => op.category === category && !op.hideFromList);\n }\n\n getAlternativeOperations(key: string) {\n return this.operationsRegistry.list().filter((op) => op.alternativesKey && op.alternativesKey === key);\n }\n\n getCategories() {\n return this.categories;\n }\n\n getOperationDefinition(id: string): QueryBuilderOperationDefinition | undefined {\n return this.operationsRegistry.getIfExists(id);\n }\n\n hasBinaryOp(query: VisualQuery): boolean {\n return (\n query.operations.find((op) => {\n const def = this.getOperationDefinition(op.id);\n return def?.category === BINARY_OPERATIONS_KEY;\n }) !== undefined\n );\n }\n}\n"],"names":[],"mappings":";;;;;;AAYO,MAAe,iBAAA,CAAiD;AAAA,EAKrE,WAAA,CAAY,sBAAyD,qBAAA,EAAgC;AAJrG,IAAA,aAAA,CAAA,IAAA,EAAU,oBAAA,CAAA;AACV,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAuB,EAAC,CAAA;AAChC,IAAA,aAAA,CAAA,IAAA,EAAA,uBAAA,CAAA;AAGE,IAAA,IAAA,CAAK,kBAAA,GAAqB,IAAI,QAAA,CAA0C,MAAM,oBAAoB,CAAA;AAClG,IAAA,IAAA,CAAK,wBAAwB,qBAAA,IAAyB,SAAA;AAAA,EACxD;AAAA,EAEU,uBAAuB,UAAA,EAAsB;AACrD,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AAAA,EAUA,yBAAyB,QAAA,EAAkB;AACzC,IAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,IAAA,EAAK,CAAE,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,QAAA,KAAa,QAAA,IAAY,CAAC,EAAA,CAAG,YAAY,CAAA;AAAA,EACnG;AAAA,EAEA,yBAAyB,GAAA,EAAa;AACpC,IAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,IAAA,EAAK,CAAE,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,eAAA,IAAmB,EAAA,CAAG,eAAA,KAAoB,GAAG,CAAA;AAAA,EACvG;AAAA,EAEA,aAAA,GAAgB;AACd,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA,EAEA,uBAAuB,EAAA,EAAyD;AAC9E,IAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,WAAA,CAAY,EAAE,CAAA;AAAA,EAC/C;AAAA,EAEA,YAAY,KAAA,EAA6B;AACvC,IAAA,OACE,KAAA,CAAM,UAAA,CAAW,IAAA,CAAK,CAAC,EAAA,KAAO;AAC5B,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,sBAAA,CAAuB,EAAA,CAAG,EAAE,CAAA;AAC7C,MAAA,OAAA,CAAO,2BAAK,QAAA,MAAa,qBAAA;AAAA,IAC3B,CAAC,CAAA,KAAM,MAAA;AAAA,EAEX;AACF;;;;"}
@@ -26,7 +26,7 @@ function LabelFilterItem({
26
26
  const [labelValuesMenuOpen, setLabelValuesMenuOpen] = useState(false);
27
27
  const isMultiSelect = (operator = item.op) => {
28
28
  var _a2;
29
- return (_a2 = operators.find((op) => op.label === operator)) == null ? undefined : _a2.isMultiValue;
29
+ return (_a2 = operators.find((op) => op.label === operator)) == null ? void 0 : _a2.isMultiValue;
30
30
  };
31
31
  const getSelectOptionsFromString = (item2) => {
32
32
  if (item2) {
@@ -39,12 +39,12 @@ function LabelFilterItem({
39
39
  };
40
40
  const getOptions = () => {
41
41
  const labelValues = state.labelValues ? [...state.labelValues] : [];
42
- const selectedOptions = getSelectOptionsFromString(item == null ? undefined : item.value).map(toOption);
42
+ const selectedOptions = getSelectOptionsFromString(item == null ? void 0 : item.value).map(toOption);
43
43
  return uniqBy([...selectedOptions, ...labelValues], "value");
44
44
  };
45
45
  const isConflicting = isConflictingLabelFilter(item, items);
46
46
  const { current: id } = useRef(v4());
47
- return /* @__PURE__ */ React.createElement("div", { "data-testid": "visual-query-builder-dimensions-filter-item" }, /* @__PURE__ */ React.createElement(InlineField, { error: CONFLICTING_LABEL_FILTER_ERROR_MESSAGE, invalid: isConflicting ? true : undefined }, /* @__PURE__ */ React.createElement(InputGroup, null, /* @__PURE__ */ React.createElement(
47
+ return /* @__PURE__ */ React.createElement("div", { "data-testid": "visual-query-builder-dimensions-filter-item" }, /* @__PURE__ */ React.createElement(InlineField, { error: CONFLICTING_LABEL_FILTER_ERROR_MESSAGE, invalid: isConflicting ? true : void 0 }, /* @__PURE__ */ React.createElement(InputGroup, null, /* @__PURE__ */ React.createElement(
48
48
  Select,
49
49
  {
50
50
  placeholder: "Select label",
@@ -57,7 +57,7 @@ function LabelFilterItem({
57
57
  setState({ isLoadingLabelNames: true });
58
58
  const labelNames = await onGetLabelNames(item);
59
59
  setLabelNamesMenuOpen(true);
60
- setState({ labelNames, isLoadingLabelNames: undefined });
60
+ setState({ labelNames, isLoadingLabelNames: void 0 });
61
61
  },
62
62
  onCloseMenu: () => {
63
63
  setLabelNamesMenuOpen(false);
@@ -89,7 +89,7 @@ function LabelFilterItem({
89
89
  onChange({
90
90
  ...item,
91
91
  op: change.value,
92
- value: isMultiSelect(change.value) ? item.value : getSelectOptionsFromString(item == null ? undefined : item.value)[0]
92
+ value: isMultiSelect(change.value) ? item.value : getSelectOptionsFromString(item == null ? void 0 : item.value)[0]
93
93
  });
94
94
  }
95
95
  },
@@ -102,7 +102,7 @@ function LabelFilterItem({
102
102
  "data-testid": selectors.components.QueryBuilder.valueSelect,
103
103
  inputId: `visual-query-builder-dimensions-filter-item-value-${id}`,
104
104
  width: "auto",
105
- value: isMultiSelect() ? getSelectOptionsFromString(item == null ? undefined : item.value).map(toOption) : getSelectOptionsFromString(item == null ? undefined : item.value).map(toOption)[0],
105
+ value: isMultiSelect() ? getSelectOptionsFromString(item == null ? void 0 : item.value).map(toOption) : getSelectOptionsFromString(item == null ? void 0 : item.value).map(toOption)[0],
106
106
  allowCustomValue: true,
107
107
  onOpenMenu: async () => {
108
108
  setState({ isLoadingLabelValues: true });
@@ -110,7 +110,7 @@ function LabelFilterItem({
110
110
  setState({
111
111
  ...state,
112
112
  labelValues,
113
- isLoadingLabelValues: undefined
113
+ isLoadingLabelValues: void 0
114
114
  });
115
115
  setLabelValuesMenuOpen(true);
116
116
  },
@@ -134,9 +134,9 @@ function LabelFilterItem({
134
134
  if (change2.value) {
135
135
  return change2.value;
136
136
  } else {
137
- return undefined;
137
+ return void 0;
138
138
  }
139
- }).filter((val) => val !== undefined).join(multiValueSeparator);
139
+ }).filter((val) => val !== void 0).join(multiValueSeparator);
140
140
  onChange({ ...item, value: changes, op: (_b = item.op) != null ? _b : defaultOp });
141
141
  }
142
142
  },
@@ -163,10 +163,10 @@ function isConflictingLabelFilter(newLabel, labels) {
163
163
  );
164
164
  const conflict = candidates.some((candidate) => {
165
165
  var _a, _b;
166
- if (operationIsNegative && ((_a = candidate == null ? undefined : candidate.op) == null ? undefined : _a.toString().startsWith("!")) === false) {
166
+ if (operationIsNegative && ((_a = candidate == null ? void 0 : candidate.op) == null ? void 0 : _a.toString().startsWith("!")) === false) {
167
167
  return true;
168
168
  }
169
- if (operationIsNegative === false && ((_b = candidate == null ? undefined : candidate.op) == null ? undefined : _b.toString().startsWith("!"))) {
169
+ if (operationIsNegative === false && ((_b = candidate == null ? void 0 : candidate.op) == null ? void 0 : _b.toString().startsWith("!"))) {
170
170
  return true;
171
171
  }
172
172
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"LabelFilterItem.js","sources":["../../../../../src/components/VisualQueryBuilder/components/LabelFilterItem.tsx"],"sourcesContent":["import { uniqBy } from 'lodash';\nimport React, { useRef, useState } from 'react';\nimport { v4 } from 'uuid';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { InlineField, Select } from '@grafana/ui';\nimport { type QueryBuilderLabelFilter } from '../types';\nimport { InputGroup } from '../../QueryEditor/InputGroup';\nimport { AccessoryButton } from '../../QueryEditor/AccessoryButton';\n\nconst CONFLICTING_LABEL_FILTER_ERROR_MESSAGE = 'You have conflicting label filters';\ninterface Props {\n defaultOp: string;\n item: Partial<QueryBuilderLabelFilter>;\n items: Array<Partial<QueryBuilderLabelFilter>>;\n onChange: (value: Partial<QueryBuilderLabelFilter>) => void;\n onGetLabelNames: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<Array<SelectableValue<string>>>;\n onGetLabelValues: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<Array<SelectableValue<string>>>;\n onDelete: () => void;\n invalidLabel?: boolean;\n invalidValue?: boolean;\n multiValueSeparator?: string;\n}\n\nexport function LabelFilterItem({\n item,\n items,\n defaultOp,\n onChange,\n onDelete,\n onGetLabelNames,\n onGetLabelValues,\n invalidLabel,\n invalidValue,\n multiValueSeparator = '|',\n}: Props) {\n const [state, setState] = useState<{\n labelNames?: Array<SelectableValue<string>>;\n labelValues?: Array<SelectableValue<string>>;\n isLoadingLabelNames?: boolean;\n isLoadingLabelValues?: boolean;\n }>({});\n // there's a bug in react-select where the menu doesn't recalculate its position when the options are loaded asynchronously\n // see https://github.com/grafana/grafana/issues/63558\n // instead, we explicitly control the menu visibility and prevent showing it until the options have fully loaded\n const [labelNamesMenuOpen, setLabelNamesMenuOpen] = useState(false);\n const [labelValuesMenuOpen, setLabelValuesMenuOpen] = useState(false);\n\n const isMultiSelect = (operator = item.op) => {\n return operators.find((op) => op.label === operator)?.isMultiValue;\n };\n\n const getSelectOptionsFromString = (item?: string): string[] => {\n if (item) {\n if (item.indexOf(multiValueSeparator) > 0) {\n return item.split(multiValueSeparator);\n }\n return [item];\n }\n return [];\n };\n\n const getOptions = (): Array<SelectableValue<string>> => {\n const labelValues = state.labelValues ? [...state.labelValues] : [];\n const selectedOptions = getSelectOptionsFromString(item?.value).map(toOption);\n\n // Remove possible duplicated values\n return uniqBy([...selectedOptions, ...labelValues], 'value');\n };\n\n const isConflicting = isConflictingLabelFilter(item, items);\n const { current: id } = useRef(v4());\n\n return (\n <div data-testid=\"visual-query-builder-dimensions-filter-item\">\n <InlineField error={CONFLICTING_LABEL_FILTER_ERROR_MESSAGE} invalid={isConflicting ? true : undefined}>\n <InputGroup>\n <Select<string>\n placeholder=\"Select label\"\n data-testid={selectors.components.QueryBuilder.labelSelect}\n inputId={`visual-query-builder-dimensions-filter-item-key-${id}`}\n width=\"auto\"\n value={item.label ? toOption(item.label) : null}\n allowCustomValue\n onOpenMenu={async () => {\n setState({ isLoadingLabelNames: true });\n const labelNames = await onGetLabelNames(item);\n setLabelNamesMenuOpen(true);\n setState({ labelNames, isLoadingLabelNames: undefined });\n }}\n onCloseMenu={() => {\n setLabelNamesMenuOpen(false);\n }}\n isOpen={labelNamesMenuOpen}\n isLoading={state.isLoadingLabelNames}\n options={state.labelNames}\n onChange={(change) => {\n if (change.value) {\n onChange({\n ...item,\n op: item.op ?? defaultOp,\n label: change.value,\n });\n }\n }}\n invalid={isConflicting || invalidLabel}\n />\n\n <Select<string>\n data-testid={selectors.components.QueryBuilder.matchOperatorSelect}\n value={toOption(item.op ?? defaultOp)}\n options={operators}\n width=\"auto\"\n onChange={(change) => {\n if (change.value) {\n onChange({\n ...item,\n op: change.value,\n value: isMultiSelect(change.value) ? item.value : getSelectOptionsFromString(item?.value)[0],\n });\n }\n }}\n invalid={isConflicting}\n />\n\n <Select<string>\n placeholder=\"Select value\"\n data-testid={selectors.components.QueryBuilder.valueSelect}\n inputId={`visual-query-builder-dimensions-filter-item-value-${id}`}\n width=\"auto\"\n value={\n isMultiSelect()\n ? getSelectOptionsFromString(item?.value).map(toOption)\n : getSelectOptionsFromString(item?.value).map(toOption)[0]\n }\n allowCustomValue\n onOpenMenu={async () => {\n setState({ isLoadingLabelValues: true });\n const labelValues = await onGetLabelValues(item);\n setState({\n ...state,\n labelValues,\n isLoadingLabelValues: undefined,\n });\n setLabelValuesMenuOpen(true);\n }}\n onCloseMenu={() => {\n setLabelValuesMenuOpen(false);\n }}\n isOpen={labelValuesMenuOpen}\n isMulti={isMultiSelect()}\n isLoading={state.isLoadingLabelValues}\n options={getOptions()}\n onChange={(change) => {\n if (change.value) {\n onChange({\n ...item,\n value: change.value,\n op: item.op ?? defaultOp,\n });\n } else {\n // otherwise, we're dealing with a multi-value select which is array of options\n const changes = change\n .map((change: SelectableValue<string>) => {\n if (change.value) {\n return change.value;\n } else {\n return undefined;\n }\n })\n .filter((val: string | undefined) => val !== undefined)\n .join(multiValueSeparator);\n onChange({ ...item, value: changes, op: item.op ?? defaultOp });\n }\n }}\n invalid={isConflicting || invalidValue}\n />\n <AccessoryButton aria-label=\"remove\" icon=\"times\" variant=\"secondary\" onClick={onDelete} />\n </InputGroup>\n </InlineField>\n </div>\n );\n}\n\nconst operators = [\n { label: '=', value: '=', description: 'Equals', isMultiValue: false },\n { label: '!=', value: '!=', description: 'Does not equal', isMultiValue: false },\n { label: '=~', value: '=~', description: 'Matches regex', isMultiValue: true },\n { label: '!~', value: '!~', description: 'Does not match regex', isMultiValue: true },\n];\n\nexport function isConflictingLabelFilter(\n newLabel: Partial<QueryBuilderLabelFilter>,\n labels: Array<Partial<QueryBuilderLabelFilter>>\n): boolean {\n if (!newLabel.label || !newLabel.op || !newLabel.value) {\n return false;\n }\n\n if (labels.length < 2) {\n return false;\n }\n\n const operationIsNegative = newLabel.op.toString().startsWith('!');\n\n const candidates = labels.filter(\n (label) => label.label === newLabel.label && label.value === newLabel.value && label.op !== newLabel.op\n );\n\n const conflict = candidates.some((candidate) => {\n if (operationIsNegative && candidate?.op?.toString().startsWith('!') === false) {\n return true;\n }\n if (operationIsNegative === false && candidate?.op?.toString().startsWith('!')) {\n return true;\n }\n return false;\n });\n\n return conflict;\n}\n"],"names":["_a","item","change"],"mappings":"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"}
1
+ {"version":3,"file":"LabelFilterItem.js","sources":["../../../../../src/components/VisualQueryBuilder/components/LabelFilterItem.tsx"],"sourcesContent":["import { uniqBy } from 'lodash';\nimport React, { useRef, useState } from 'react';\nimport { v4 } from 'uuid';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { InlineField, Select } from '@grafana/ui';\nimport { type QueryBuilderLabelFilter } from '../types';\nimport { InputGroup } from '../../QueryEditor/InputGroup';\nimport { AccessoryButton } from '../../QueryEditor/AccessoryButton';\n\nconst CONFLICTING_LABEL_FILTER_ERROR_MESSAGE = 'You have conflicting label filters';\ninterface Props {\n defaultOp: string;\n item: Partial<QueryBuilderLabelFilter>;\n items: Array<Partial<QueryBuilderLabelFilter>>;\n onChange: (value: Partial<QueryBuilderLabelFilter>) => void;\n onGetLabelNames: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<Array<SelectableValue<string>>>;\n onGetLabelValues: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<Array<SelectableValue<string>>>;\n onDelete: () => void;\n invalidLabel?: boolean;\n invalidValue?: boolean;\n multiValueSeparator?: string;\n}\n\nexport function LabelFilterItem({\n item,\n items,\n defaultOp,\n onChange,\n onDelete,\n onGetLabelNames,\n onGetLabelValues,\n invalidLabel,\n invalidValue,\n multiValueSeparator = '|',\n}: Props) {\n const [state, setState] = useState<{\n labelNames?: Array<SelectableValue<string>>;\n labelValues?: Array<SelectableValue<string>>;\n isLoadingLabelNames?: boolean;\n isLoadingLabelValues?: boolean;\n }>({});\n // there's a bug in react-select where the menu doesn't recalculate its position when the options are loaded asynchronously\n // see https://github.com/grafana/grafana/issues/63558\n // instead, we explicitly control the menu visibility and prevent showing it until the options have fully loaded\n const [labelNamesMenuOpen, setLabelNamesMenuOpen] = useState(false);\n const [labelValuesMenuOpen, setLabelValuesMenuOpen] = useState(false);\n\n const isMultiSelect = (operator = item.op) => {\n return operators.find((op) => op.label === operator)?.isMultiValue;\n };\n\n const getSelectOptionsFromString = (item?: string): string[] => {\n if (item) {\n if (item.indexOf(multiValueSeparator) > 0) {\n return item.split(multiValueSeparator);\n }\n return [item];\n }\n return [];\n };\n\n const getOptions = (): Array<SelectableValue<string>> => {\n const labelValues = state.labelValues ? [...state.labelValues] : [];\n const selectedOptions = getSelectOptionsFromString(item?.value).map(toOption);\n\n // Remove possible duplicated values\n return uniqBy([...selectedOptions, ...labelValues], 'value');\n };\n\n const isConflicting = isConflictingLabelFilter(item, items);\n const { current: id } = useRef(v4());\n\n return (\n <div data-testid=\"visual-query-builder-dimensions-filter-item\">\n <InlineField error={CONFLICTING_LABEL_FILTER_ERROR_MESSAGE} invalid={isConflicting ? true : undefined}>\n <InputGroup>\n <Select<string>\n placeholder=\"Select label\"\n data-testid={selectors.components.QueryBuilder.labelSelect}\n inputId={`visual-query-builder-dimensions-filter-item-key-${id}`}\n width=\"auto\"\n value={item.label ? toOption(item.label) : null}\n allowCustomValue\n onOpenMenu={async () => {\n setState({ isLoadingLabelNames: true });\n const labelNames = await onGetLabelNames(item);\n setLabelNamesMenuOpen(true);\n setState({ labelNames, isLoadingLabelNames: undefined });\n }}\n onCloseMenu={() => {\n setLabelNamesMenuOpen(false);\n }}\n isOpen={labelNamesMenuOpen}\n isLoading={state.isLoadingLabelNames}\n options={state.labelNames}\n onChange={(change) => {\n if (change.value) {\n onChange({\n ...item,\n op: item.op ?? defaultOp,\n label: change.value,\n });\n }\n }}\n invalid={isConflicting || invalidLabel}\n />\n\n <Select<string>\n data-testid={selectors.components.QueryBuilder.matchOperatorSelect}\n value={toOption(item.op ?? defaultOp)}\n options={operators}\n width=\"auto\"\n onChange={(change) => {\n if (change.value) {\n onChange({\n ...item,\n op: change.value,\n value: isMultiSelect(change.value) ? item.value : getSelectOptionsFromString(item?.value)[0],\n });\n }\n }}\n invalid={isConflicting}\n />\n\n <Select<string>\n placeholder=\"Select value\"\n data-testid={selectors.components.QueryBuilder.valueSelect}\n inputId={`visual-query-builder-dimensions-filter-item-value-${id}`}\n width=\"auto\"\n value={\n isMultiSelect()\n ? getSelectOptionsFromString(item?.value).map(toOption)\n : getSelectOptionsFromString(item?.value).map(toOption)[0]\n }\n allowCustomValue\n onOpenMenu={async () => {\n setState({ isLoadingLabelValues: true });\n const labelValues = await onGetLabelValues(item);\n setState({\n ...state,\n labelValues,\n isLoadingLabelValues: undefined,\n });\n setLabelValuesMenuOpen(true);\n }}\n onCloseMenu={() => {\n setLabelValuesMenuOpen(false);\n }}\n isOpen={labelValuesMenuOpen}\n isMulti={isMultiSelect()}\n isLoading={state.isLoadingLabelValues}\n options={getOptions()}\n onChange={(change) => {\n if (change.value) {\n onChange({\n ...item,\n value: change.value,\n op: item.op ?? defaultOp,\n });\n } else {\n // otherwise, we're dealing with a multi-value select which is array of options\n const changes = change\n .map((change: SelectableValue<string>) => {\n if (change.value) {\n return change.value;\n } else {\n return undefined;\n }\n })\n .filter((val: string | undefined) => val !== undefined)\n .join(multiValueSeparator);\n onChange({ ...item, value: changes, op: item.op ?? defaultOp });\n }\n }}\n invalid={isConflicting || invalidValue}\n />\n <AccessoryButton aria-label=\"remove\" icon=\"times\" variant=\"secondary\" onClick={onDelete} />\n </InputGroup>\n </InlineField>\n </div>\n );\n}\n\nconst operators = [\n { label: '=', value: '=', description: 'Equals', isMultiValue: false },\n { label: '!=', value: '!=', description: 'Does not equal', isMultiValue: false },\n { label: '=~', value: '=~', description: 'Matches regex', isMultiValue: true },\n { label: '!~', value: '!~', description: 'Does not match regex', isMultiValue: true },\n];\n\nexport function isConflictingLabelFilter(\n newLabel: Partial<QueryBuilderLabelFilter>,\n labels: Array<Partial<QueryBuilderLabelFilter>>\n): boolean {\n if (!newLabel.label || !newLabel.op || !newLabel.value) {\n return false;\n }\n\n if (labels.length < 2) {\n return false;\n }\n\n const operationIsNegative = newLabel.op.toString().startsWith('!');\n\n const candidates = labels.filter(\n (label) => label.label === newLabel.label && label.value === newLabel.value && label.op !== newLabel.op\n );\n\n const conflict = candidates.some((candidate) => {\n if (operationIsNegative && candidate?.op?.toString().startsWith('!') === false) {\n return true;\n }\n if (operationIsNegative === false && candidate?.op?.toString().startsWith('!')) {\n return true;\n }\n return false;\n });\n\n return conflict;\n}\n"],"names":["_a","item","change"],"mappings":"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"}
@@ -27,7 +27,7 @@ function LabelFilters({
27
27
  const onLabelsChange = (newItems) => {
28
28
  setItems(newItems);
29
29
  const newLabels = newItems.filter(
30
- (item) => item.label !== undefined && item.value !== undefined
30
+ (item) => item.label !== void 0 && item.value !== void 0
31
31
  );
32
32
  if (!isEqual(newLabels, labelsFilters)) {
33
33
  onChange(newLabels);
@@ -1 +1 @@
1
- {"version":3,"file":"LabelFilters.js","sources":["../../../../../src/components/VisualQueryBuilder/components/LabelFilters.tsx"],"sourcesContent":["import { isEqual } from 'lodash';\nimport React, { useEffect, useState } from 'react';\n\nimport { type SelectableValue } from '@grafana/data';\n\nimport { type QueryBuilderLabelFilter } from '../types';\n\nimport { EditorField } from '../../QueryEditor/EditorField';\nimport { EditorFieldGroup } from '../../QueryEditor/EditorFieldGroup';\nimport { EditorList } from '../../QueryEditor/EditorList';\nimport { LabelFilterItem } from './LabelFilterItem';\n\nexport const MISSING_LABEL_FILTER_ERROR_MESSAGE = 'Select at least 1 label filter (label and value)';\n\nexport interface Props {\n labelsFilters: QueryBuilderLabelFilter[];\n onChange: (labelFilters: QueryBuilderLabelFilter[]) => void;\n onGetLabelNames: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<SelectableValue[]>;\n onGetLabelValues: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<SelectableValue[]>;\n /** If set to true, component will show error message until at least 1 filter is selected */\n labelFilterRequired?: boolean;\n multiValueSeparator?: string;\n}\n\nexport function LabelFilters({\n labelsFilters,\n onChange,\n onGetLabelNames,\n onGetLabelValues,\n labelFilterRequired,\n multiValueSeparator,\n}: Props) {\n const defaultOp = '=';\n const [items, setItems] = useState<Array<Partial<QueryBuilderLabelFilter>>>([{ op: defaultOp }]);\n\n useEffect(() => {\n if (labelsFilters.length > 0) {\n setItems(labelsFilters);\n } else {\n setItems([{ op: defaultOp }]);\n }\n }, [labelsFilters]);\n\n const onLabelsChange = (newItems: Array<Partial<QueryBuilderLabelFilter>>) => {\n setItems(newItems);\n\n // Extract full label filters with both label & value\n const newLabels = newItems.filter(\n (item): item is QueryBuilderLabelFilter => item.label !== undefined && item.value !== undefined\n );\n if (!isEqual(newLabels, labelsFilters)) {\n onChange(newLabels);\n }\n };\n\n const hasLabelFilter = items.some((item) => item.label && item.value);\n\n return (\n <EditorFieldGroup>\n <EditorField\n label=\"Label filters\"\n error={MISSING_LABEL_FILTER_ERROR_MESSAGE}\n invalid={labelFilterRequired && !hasLabelFilter}\n >\n <EditorList\n items={items}\n onChange={onLabelsChange}\n renderItem={(item: Partial<QueryBuilderLabelFilter>, onChangeItem, onDelete) => (\n <LabelFilterItem\n item={item}\n items={items}\n defaultOp={defaultOp}\n onChange={onChangeItem}\n onDelete={onDelete}\n onGetLabelNames={onGetLabelNames}\n onGetLabelValues={onGetLabelValues}\n invalidLabel={labelFilterRequired && !item.label}\n invalidValue={labelFilterRequired && !item.value}\n multiValueSeparator={multiValueSeparator}\n />\n )}\n />\n </EditorField>\n </EditorFieldGroup>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAYO,MAAM,kCAAqC,GAAA;AAY3C,SAAS,YAAa,CAAA;AAAA,EAC3B,aAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAU,EAAA;AACR,EAAA,MAAM,SAAY,GAAA,GAAA;AAClB,EAAM,MAAA,CAAC,KAAO,EAAA,QAAQ,CAAI,GAAA,QAAA,CAAkD,CAAC,EAAE,EAAA,EAAI,SAAU,EAAC,CAAC,CAAA;AAE/F,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,aAAA,CAAc,SAAS,CAAG,EAAA;AAC5B,MAAA,QAAA,CAAS,aAAa,CAAA;AAAA,KACjB,MAAA;AACL,MAAA,QAAA,CAAS,CAAC,EAAE,EAAI,EAAA,SAAA,EAAW,CAAC,CAAA;AAAA;AAC9B,GACF,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAM,MAAA,cAAA,GAAiB,CAAC,QAAsD,KAAA;AAC5E,IAAA,QAAA,CAAS,QAAQ,CAAA;AAGjB,IAAA,MAAM,YAAY,QAAS,CAAA,MAAA;AAAA,MACzB,CAAC,IAA0C,KAAA,IAAA,CAAK,KAAU,KAAA,SAAA,IAAa,KAAK,KAAU,KAAA;AAAA,KACxF;AACA,IAAA,IAAI,CAAC,OAAA,CAAQ,SAAW,EAAA,aAAa,CAAG,EAAA;AACtC,MAAA,QAAA,CAAS,SAAS,CAAA;AAAA;AACpB,GACF;AAEA,EAAM,MAAA,cAAA,GAAiB,MAAM,IAAK,CAAA,CAAC,SAAS,IAAK,CAAA,KAAA,IAAS,KAAK,KAAK,CAAA;AAEpE,EAAA,2CACG,gBACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,eAAA;AAAA,MACN,KAAO,EAAA,kCAAA;AAAA,MACP,OAAA,EAAS,uBAAuB,CAAC;AAAA,KAAA;AAAA,oBAEjC,KAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAU,EAAA,cAAA;AAAA,QACV,UAAY,EAAA,CAAC,IAAwC,EAAA,YAAA,EAAc,QACjE,qBAAA,KAAA,CAAA,aAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,IAAA;AAAA,YACA,KAAA;AAAA,YACA,SAAA;AAAA,YACA,QAAU,EAAA,YAAA;AAAA,YACV,QAAA;AAAA,YACA,eAAA;AAAA,YACA,gBAAA;AAAA,YACA,YAAA,EAAc,mBAAuB,IAAA,CAAC,IAAK,CAAA,KAAA;AAAA,YAC3C,YAAA,EAAc,mBAAuB,IAAA,CAAC,IAAK,CAAA,KAAA;AAAA,YAC3C;AAAA;AAAA;AACF;AAAA;AAEJ,GAEJ,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"LabelFilters.js","sources":["../../../../../src/components/VisualQueryBuilder/components/LabelFilters.tsx"],"sourcesContent":["import { isEqual } from 'lodash';\nimport React, { useEffect, useState } from 'react';\n\nimport { type SelectableValue } from '@grafana/data';\n\nimport { type QueryBuilderLabelFilter } from '../types';\n\nimport { EditorField } from '../../QueryEditor/EditorField';\nimport { EditorFieldGroup } from '../../QueryEditor/EditorFieldGroup';\nimport { EditorList } from '../../QueryEditor/EditorList';\nimport { LabelFilterItem } from './LabelFilterItem';\n\nexport const MISSING_LABEL_FILTER_ERROR_MESSAGE = 'Select at least 1 label filter (label and value)';\n\nexport interface Props {\n labelsFilters: QueryBuilderLabelFilter[];\n onChange: (labelFilters: QueryBuilderLabelFilter[]) => void;\n onGetLabelNames: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<SelectableValue[]>;\n onGetLabelValues: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<SelectableValue[]>;\n /** If set to true, component will show error message until at least 1 filter is selected */\n labelFilterRequired?: boolean;\n multiValueSeparator?: string;\n}\n\nexport function LabelFilters({\n labelsFilters,\n onChange,\n onGetLabelNames,\n onGetLabelValues,\n labelFilterRequired,\n multiValueSeparator,\n}: Props) {\n const defaultOp = '=';\n const [items, setItems] = useState<Array<Partial<QueryBuilderLabelFilter>>>([{ op: defaultOp }]);\n\n useEffect(() => {\n if (labelsFilters.length > 0) {\n setItems(labelsFilters);\n } else {\n setItems([{ op: defaultOp }]);\n }\n }, [labelsFilters]);\n\n const onLabelsChange = (newItems: Array<Partial<QueryBuilderLabelFilter>>) => {\n setItems(newItems);\n\n // Extract full label filters with both label & value\n const newLabels = newItems.filter(\n (item): item is QueryBuilderLabelFilter => item.label !== undefined && item.value !== undefined\n );\n if (!isEqual(newLabels, labelsFilters)) {\n onChange(newLabels);\n }\n };\n\n const hasLabelFilter = items.some((item) => item.label && item.value);\n\n return (\n <EditorFieldGroup>\n <EditorField\n label=\"Label filters\"\n error={MISSING_LABEL_FILTER_ERROR_MESSAGE}\n invalid={labelFilterRequired && !hasLabelFilter}\n >\n <EditorList\n items={items}\n onChange={onLabelsChange}\n renderItem={(item: Partial<QueryBuilderLabelFilter>, onChangeItem, onDelete) => (\n <LabelFilterItem\n item={item}\n items={items}\n defaultOp={defaultOp}\n onChange={onChangeItem}\n onDelete={onDelete}\n onGetLabelNames={onGetLabelNames}\n onGetLabelValues={onGetLabelValues}\n invalidLabel={labelFilterRequired && !item.label}\n invalidValue={labelFilterRequired && !item.value}\n multiValueSeparator={multiValueSeparator}\n />\n )}\n />\n </EditorField>\n </EditorFieldGroup>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAYO,MAAM,kCAAA,GAAqC;AAY3C,SAAS,YAAA,CAAa;AAAA,EAC3B,aAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA,EAAU;AACR,EAAA,MAAM,SAAA,GAAY,GAAA;AAClB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,CAAkD,CAAC,EAAE,EAAA,EAAI,SAAA,EAAW,CAAC,CAAA;AAE/F,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,MAAA,QAAA,CAAS,aAAa,CAAA;AAAA,IACxB,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,CAAC,EAAE,EAAA,EAAI,SAAA,EAAW,CAAC,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,MAAM,cAAA,GAAiB,CAAC,QAAA,KAAsD;AAC5E,IAAA,QAAA,CAAS,QAAQ,CAAA;AAGjB,IAAA,MAAM,YAAY,QAAA,CAAS,MAAA;AAAA,MACzB,CAAC,IAAA,KAA0C,IAAA,CAAK,KAAA,KAAU,MAAA,IAAa,KAAK,KAAA,KAAU;AAAA,KACxF;AACA,IAAA,IAAI,CAAC,OAAA,CAAQ,SAAA,EAAW,aAAa,CAAA,EAAG;AACtC,MAAA,QAAA,CAAS,SAAS,CAAA;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,CAAC,SAAS,IAAA,CAAK,KAAA,IAAS,KAAK,KAAK,CAAA;AAEpE,EAAA,2CACG,gBAAA,EAAA,IAAA,kBACC,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,eAAA;AAAA,MACN,KAAA,EAAO,kCAAA;AAAA,MACP,OAAA,EAAS,uBAAuB,CAAC;AAAA,KAAA;AAAA,oBAEjC,KAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA,EAAU,cAAA;AAAA,QACV,UAAA,EAAY,CAAC,IAAA,EAAwC,YAAA,EAAc,QAAA,qBACjE,KAAA,CAAA,aAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,IAAA;AAAA,YACA,KAAA;AAAA,YACA,SAAA;AAAA,YACA,QAAA,EAAU,YAAA;AAAA,YACV,QAAA;AAAA,YACA,eAAA;AAAA,YACA,gBAAA;AAAA,YACA,YAAA,EAAc,mBAAA,IAAuB,CAAC,IAAA,CAAK,KAAA;AAAA,YAC3C,YAAA,EAAc,mBAAA,IAAuB,CAAC,IAAA,CAAK,KAAA;AAAA,YAC3C;AAAA;AAAA;AACF;AAAA;AAEJ,GAEJ,CAAA;AAEJ;;;;"}
@@ -23,15 +23,15 @@ function OperationEditor({
23
23
  const def = queryModeller.getOperationDefinition(operation.id);
24
24
  const theme = useTheme2();
25
25
  const isConflicting = isConflictingOperation ? isConflictingOperation(operation, query.operations) : false;
26
- const styles = getStyles(theme);
26
+ const styles = getStyles$6(theme);
27
27
  if (!def) {
28
28
  return /* @__PURE__ */ React.createElement("span", null, "Operation ", operation.id, " not found");
29
29
  }
30
30
  const isInvalid = (isDragging) => {
31
31
  if (isDragging) {
32
- return undefined;
32
+ return void 0;
33
33
  }
34
- return isConflicting ? true : undefined;
34
+ return isConflicting ? true : void 0;
35
35
  };
36
36
  return /* @__PURE__ */ React.createElement(Draggable, { draggableId: `operation-${index}`, index }, (provided, snapshot) => /* @__PURE__ */ React.createElement(
37
37
  InlineField,
@@ -62,7 +62,7 @@ function OperationEditor({
62
62
  )
63
63
  ));
64
64
  }
65
- const getStyles = (theme, isConflicting) => {
65
+ const getStyles$6 = (theme, isConflicting) => {
66
66
  return {
67
67
  cardWrapper: css({
68
68
  alignItems: "stretch"
@@ -1 +1 @@
1
- {"version":3,"file":"OperationEditor.js","sources":["../../../../../src/components/VisualQueryBuilder/components/OperationEditor.tsx"],"sourcesContent":["import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { Draggable } from '@hello-pangea/dnd';\n\nimport { type DataSourceApi, type GrafanaTheme2, type TimeRange } from '@grafana/data';\nimport { InlineField, useTheme2 } from '@grafana/ui';\n\nimport { type QueryBuilderOperation, type VisualQuery, type VisualQueryModeller } from '../types';\nimport { OperationEditorBody } from './OperationEditorBody';\n\ninterface Props<T extends VisualQuery> {\n operation: QueryBuilderOperation;\n index: number;\n query: T;\n datasource: DataSourceApi;\n queryModeller: VisualQueryModeller;\n onChange: (index: number, update: QueryBuilderOperation) => void;\n onRemove: (index: number) => void;\n onToggle: (index: number) => void;\n onRunQuery: () => void;\n flash?: boolean;\n highlight?: boolean;\n timeRange?: TimeRange;\n isConflictingOperation?: (operation: QueryBuilderOperation, otherOperations: QueryBuilderOperation[]) => boolean;\n}\n\nexport function OperationEditor<T extends VisualQuery>({\n operation,\n index,\n onRemove,\n onToggle,\n onChange,\n onRunQuery,\n queryModeller,\n query,\n datasource,\n flash,\n highlight,\n timeRange,\n isConflictingOperation,\n}: Props<T>) {\n const def = queryModeller.getOperationDefinition(operation.id);\n\n const theme = useTheme2();\n const isConflicting = isConflictingOperation ? isConflictingOperation(operation, query.operations) : false;\n const styles = getStyles(theme, isConflicting);\n\n if (!def) {\n return <span>Operation {operation.id} not found</span>;\n }\n\n const isInvalid = (isDragging: boolean) => {\n if (isDragging) {\n return undefined;\n }\n\n return isConflicting ? true : undefined;\n };\n\n return (\n <Draggable draggableId={`operation-${index}`} index={index}>\n {(provided, snapshot) => (\n <InlineField\n error={'You have conflicting label filters'}\n invalid={isInvalid(snapshot.isDragging)}\n className={cx(styles.error, styles.cardWrapper)}\n >\n <OperationEditorBody\n provided={provided}\n flash={flash}\n highlight={highlight}\n isConflicting={isConflicting}\n index={index}\n operation={operation}\n definition={def}\n onChange={onChange}\n onRemove={onRemove}\n onToggle={onToggle}\n queryModeller={queryModeller}\n query={query}\n timeRange={timeRange}\n onRunQuery={onRunQuery}\n datasource={datasource}\n />\n </InlineField>\n )}\n </Draggable>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2, isConflicting: boolean) => {\n return {\n cardWrapper: css({\n alignItems: 'stretch',\n }),\n error: css({\n marginBottom: theme.spacing(1),\n }),\n };\n};\n"],"names":[],"mappings":";;;;;;;AA0BO,SAAS,eAAuC,CAAA;AAAA,EACrD,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAa,EAAA;AACX,EAAA,MAAM,GAAM,GAAA,aAAA,CAAc,sBAAuB,CAAA,SAAA,CAAU,EAAE,CAAA;AAE7D,EAAA,MAAM,QAAQ,SAAU,EAAA;AACxB,EAAA,MAAM,gBAAgB,sBAAyB,GAAA,sBAAA,CAAuB,SAAW,EAAA,KAAA,CAAM,UAAU,CAAI,GAAA,KAAA;AACrG,EAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAoB,CAAA;AAE7C,EAAA,IAAI,CAAC,GAAK,EAAA;AACR,IAAA,uBAAQ,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAK,YAAW,EAAA,SAAA,CAAU,IAAG,YAAU,CAAA;AAAA;AAGjD,EAAM,MAAA,SAAA,GAAY,CAAC,UAAwB,KAAA;AACzC,IAAA,IAAI,UAAY,EAAA;AACd,MAAO,OAAA,SAAA;AAAA;AAGT,IAAA,OAAO,gBAAgB,IAAO,GAAA,SAAA;AAAA,GAChC;AAEA,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,aAAU,WAAa,EAAA,CAAA,UAAA,EAAa,KAAK,CAAI,CAAA,EAAA,KAAA,EAAA,EAC3C,CAAC,QAAA,EAAU,QACV,qBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA,oCAAA;AAAA,MACP,OAAA,EAAS,SAAU,CAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACtC,SAAW,EAAA,EAAA,CAAG,MAAO,CAAA,KAAA,EAAO,OAAO,WAAW;AAAA,KAAA;AAAA,oBAE9C,KAAA,CAAA,aAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,QAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA,aAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAY,EAAA,GAAA;AAAA,QACZ,QAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,aAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA;AAAA;AACF,GAGN,CAAA;AAEJ;AAEA,MAAM,SAAA,GAAY,CAAC,KAAA,EAAsB,aAA2B,KAAA;AAClE,EAAO,OAAA;AAAA,IACL,aAAa,GAAI,CAAA;AAAA,MACf,UAAY,EAAA;AAAA,KACb,CAAA;AAAA,IACD,OAAO,GAAI,CAAA;AAAA,MACT,YAAA,EAAc,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA,KAC9B;AAAA,GACH;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"OperationEditor.js","sources":["../../../../../src/components/VisualQueryBuilder/components/OperationEditor.tsx"],"sourcesContent":["import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { Draggable } from '@hello-pangea/dnd';\n\nimport { type DataSourceApi, type GrafanaTheme2, type TimeRange } from '@grafana/data';\nimport { InlineField, useTheme2 } from '@grafana/ui';\n\nimport { type QueryBuilderOperation, type VisualQuery, type VisualQueryModeller } from '../types';\nimport { OperationEditorBody } from './OperationEditorBody';\n\ninterface Props<T extends VisualQuery> {\n operation: QueryBuilderOperation;\n index: number;\n query: T;\n datasource: DataSourceApi;\n queryModeller: VisualQueryModeller;\n onChange: (index: number, update: QueryBuilderOperation) => void;\n onRemove: (index: number) => void;\n onToggle: (index: number) => void;\n onRunQuery: () => void;\n flash?: boolean;\n highlight?: boolean;\n timeRange?: TimeRange;\n isConflictingOperation?: (operation: QueryBuilderOperation, otherOperations: QueryBuilderOperation[]) => boolean;\n}\n\nexport function OperationEditor<T extends VisualQuery>({\n operation,\n index,\n onRemove,\n onToggle,\n onChange,\n onRunQuery,\n queryModeller,\n query,\n datasource,\n flash,\n highlight,\n timeRange,\n isConflictingOperation,\n}: Props<T>) {\n const def = queryModeller.getOperationDefinition(operation.id);\n\n const theme = useTheme2();\n const isConflicting = isConflictingOperation ? isConflictingOperation(operation, query.operations) : false;\n const styles = getStyles(theme, isConflicting);\n\n if (!def) {\n return <span>Operation {operation.id} not found</span>;\n }\n\n const isInvalid = (isDragging: boolean) => {\n if (isDragging) {\n return undefined;\n }\n\n return isConflicting ? true : undefined;\n };\n\n return (\n <Draggable draggableId={`operation-${index}`} index={index}>\n {(provided, snapshot) => (\n <InlineField\n error={'You have conflicting label filters'}\n invalid={isInvalid(snapshot.isDragging)}\n className={cx(styles.error, styles.cardWrapper)}\n >\n <OperationEditorBody\n provided={provided}\n flash={flash}\n highlight={highlight}\n isConflicting={isConflicting}\n index={index}\n operation={operation}\n definition={def}\n onChange={onChange}\n onRemove={onRemove}\n onToggle={onToggle}\n queryModeller={queryModeller}\n query={query}\n timeRange={timeRange}\n onRunQuery={onRunQuery}\n datasource={datasource}\n />\n </InlineField>\n )}\n </Draggable>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2, isConflicting: boolean) => {\n return {\n cardWrapper: css({\n alignItems: 'stretch',\n }),\n error: css({\n marginBottom: theme.spacing(1),\n }),\n };\n};\n"],"names":["getStyles"],"mappings":";;;;;;;AA0BO,SAAS,eAAA,CAAuC;AAAA,EACrD,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAa;AACX,EAAA,MAAM,GAAA,GAAM,aAAA,CAAc,sBAAA,CAAuB,SAAA,CAAU,EAAE,CAAA;AAE7D,EAAA,MAAM,QAAQ,SAAA,EAAU;AACxB,EAAA,MAAM,gBAAgB,sBAAA,GAAyB,sBAAA,CAAuB,SAAA,EAAW,KAAA,CAAM,UAAU,CAAA,GAAI,KAAA;AACrG,EAAA,MAAM,MAAA,GAASA,WAAA,CAAU,KAAoB,CAAA;AAE7C,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,uBAAO,KAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,EAAK,YAAA,EAAW,SAAA,CAAU,IAAG,YAAU,CAAA;AAAA,EACjD;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,UAAA,KAAwB;AACzC,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,OAAO,gBAAgB,IAAA,GAAO,MAAA;AAAA,EAChC,CAAA;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,aAAU,WAAA,EAAa,CAAA,UAAA,EAAa,KAAK,CAAA,CAAA,EAAI,KAAA,EAAA,EAC3C,CAAC,QAAA,EAAU,QAAA,qBACV,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,oCAAA;AAAA,MACP,OAAA,EAAS,SAAA,CAAU,QAAA,CAAS,UAAU,CAAA;AAAA,MACtC,SAAA,EAAW,EAAA,CAAG,MAAA,CAAO,KAAA,EAAO,OAAO,WAAW;AAAA,KAAA;AAAA,oBAE9C,KAAA,CAAA,aAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,QAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA,aAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAA,EAAY,GAAA;AAAA,QACZ,QAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,aAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA;AAAA;AACF,GAGN,CAAA;AAEJ;AAEA,MAAMA,WAAA,GAAY,CAAC,KAAA,EAAsB,aAAA,KAA2B;AAClE,EAAA,OAAO;AAAA,IACL,aAAa,GAAA,CAAI;AAAA,MACf,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,IACD,OAAO,GAAA,CAAI;AAAA,MACT,YAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,KAC9B;AAAA,GACH;AACF,CAAA;;;;"}
@@ -42,7 +42,7 @@ function OperationEditorBody({
42
42
  datasource
43
43
  }) {
44
44
  const theme = useTheme2();
45
- const styles = getStyles(theme, isConflicting);
45
+ const styles = getStyles$7(theme, isConflicting);
46
46
  const shouldFlash = useFlash(flash);
47
47
  const { current: id } = useRef(v4());
48
48
  const onParamValueChanged = (paramIdx, value) => {
@@ -128,7 +128,7 @@ function OperationEditorBody({
128
128
  index < query.operations.length - 1 && /* @__PURE__ */ React.createElement("div", { className: styles.arrow }, /* @__PURE__ */ React.createElement("div", { className: styles.arrowLine }), /* @__PURE__ */ React.createElement("div", { className: styles.arrowArrow }))
129
129
  );
130
130
  }
131
- const getStyles = (theme, isConflicting) => {
131
+ const getStyles$7 = (theme, isConflicting) => {
132
132
  return {
133
133
  cardWrapper: css({
134
134
  alignItems: "stretch"