@grafana/plugin-ui 0.14.1-dsconfig.f952c80 → 0.15.0

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 (672) hide show
  1. package/README.md +9 -3
  2. package/dist/cjs/index.cjs +11546 -7142
  3. package/dist/cjs/index.cjs.map +1 -1
  4. package/dist/cjs/index.d.cts +61 -653
  5. package/dist/cjs/test-utils.cjs +7881 -62
  6. package/dist/cjs/test-utils.cjs.map +1 -1
  7. package/dist/cjs/test-utils.d.cts +1 -1
  8. package/dist/esm/_virtual/_commonjsHelpers.js +6 -0
  9. package/dist/esm/_virtual/_commonjsHelpers.js.map +1 -0
  10. package/dist/esm/_virtual/chance.js +6 -0
  11. package/dist/esm/_virtual/chance.js.map +1 -0
  12. package/dist/esm/_virtual/chance2.js +4 -0
  13. package/dist/esm/_virtual/chance2.js.map +1 -0
  14. package/dist/esm/_virtual/index.js +8 -0
  15. package/dist/esm/_virtual/index.js.map +1 -0
  16. package/dist/esm/_virtual/index2.js +6 -0
  17. package/dist/esm/_virtual/index2.js.map +1 -0
  18. package/dist/esm/_virtual/index3.js +4 -0
  19. package/dist/esm/_virtual/index3.js.map +1 -0
  20. package/dist/esm/_virtual/re.js +4 -0
  21. package/dist/esm/_virtual/re.js.map +1 -0
  22. package/dist/esm/_virtual/react.development.js +4 -0
  23. package/dist/esm/_virtual/react.development.js.map +1 -0
  24. package/dist/esm/_virtual/react.production.min.js +4 -0
  25. package/dist/esm/_virtual/react.production.min.js.map +1 -0
  26. package/dist/esm/async-query-data/DatasourceWithAsyncBackend.js +157 -0
  27. package/dist/esm/async-query-data/DatasourceWithAsyncBackend.js.map +1 -0
  28. package/dist/esm/async-query-data/RunQueryButtons.js +52 -0
  29. package/dist/esm/async-query-data/RunQueryButtons.js.map +1 -0
  30. package/dist/esm/async-query-data/requestLooper.js +74 -0
  31. package/dist/esm/async-query-data/requestLooper.js.map +1 -0
  32. package/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js +1 -1
  33. package/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js.map +1 -1
  34. package/dist/esm/components/ConfigEditor/Auth/Auth.js +1 -1
  35. package/dist/esm/components/ConfigEditor/Auth/Auth.js.map +1 -1
  36. package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js +8 -8
  37. package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js.map +1 -1
  38. package/dist/esm/components/ConfigEditor/Auth/auth-method/BasicAuth.js +1 -1
  39. package/dist/esm/components/ConfigEditor/Auth/auth-method/BasicAuth.js.map +1 -1
  40. package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeader.js +1 -1
  41. package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeader.js.map +1 -1
  42. package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js +4 -4
  43. package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js.map +1 -1
  44. package/dist/esm/components/ConfigEditor/Auth/styles.js.map +1 -1
  45. package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js +2 -2
  46. package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js.map +1 -1
  47. package/dist/esm/components/ConfigEditor/Auth/tls/SkipTLSVerification.js +1 -1
  48. package/dist/esm/components/ConfigEditor/Auth/tls/SkipTLSVerification.js.map +1 -1
  49. package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js +4 -4
  50. package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js.map +1 -1
  51. package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettings.js +1 -1
  52. package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettings.js.map +1 -1
  53. package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettingsSection.js +1 -1
  54. package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettingsSection.js.map +1 -1
  55. package/dist/esm/components/ConfigEditor/Auth/types.js +1 -1
  56. package/dist/esm/components/ConfigEditor/Auth/types.js.map +1 -1
  57. package/dist/esm/components/ConfigEditor/Auth/utils.js +4 -4
  58. package/dist/esm/components/ConfigEditor/Auth/utils.js.map +1 -1
  59. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js +3 -3
  60. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js.map +1 -1
  61. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js +1 -1
  62. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js.map +1 -1
  63. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js +1 -1
  64. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js.map +1 -1
  65. package/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js +2 -2
  66. package/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js.map +1 -1
  67. package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js +2 -2
  68. package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js.map +1 -1
  69. package/dist/esm/components/ConfigEditor/DataSourceDescription.js +1 -1
  70. package/dist/esm/components/ConfigEditor/DataSourceDescription.js.map +1 -1
  71. package/dist/esm/components/ConfigEditor/SecureSocksProxyToggle.js +1 -1
  72. package/dist/esm/components/ConfigEditor/SecureSocksProxyToggle.js.map +1 -1
  73. package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js +13 -13
  74. package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js.map +1 -1
  75. package/dist/esm/components/DataLinks/DataLink.js +7 -7
  76. package/dist/esm/components/DataLinks/DataLink.js.map +1 -1
  77. package/dist/esm/components/DataLinks/DataLinks.js +4 -4
  78. package/dist/esm/components/DataLinks/DataLinks.js.map +1 -1
  79. package/dist/esm/components/DataSourcePicker/DataSourcePicker.js +10 -10
  80. package/dist/esm/components/DataSourcePicker/DataSourcePicker.js.map +1 -1
  81. package/dist/esm/components/DatePicker/DatePicker.js +3 -3
  82. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  83. package/dist/esm/components/DatePicker/styles.js +2 -2
  84. package/dist/esm/components/DatePicker/styles.js.map +1 -1
  85. package/dist/esm/components/DatePickerWithInput/DatePickerWithInput.js +2 -2
  86. package/dist/esm/components/DatePickerWithInput/DatePickerWithInput.js.map +1 -1
  87. package/dist/esm/components/DatePickerWithInput/styles.js +2 -2
  88. package/dist/esm/components/DatePickerWithInput/styles.js.map +1 -1
  89. package/dist/esm/components/DebounceInput/DebounceInput.js +4 -4
  90. package/dist/esm/components/DebounceInput/DebounceInput.js.map +1 -1
  91. package/dist/esm/components/Plugins/PluginSignatureBadge.js +1 -1
  92. package/dist/esm/components/Plugins/PluginSignatureBadge.js.map +1 -1
  93. package/dist/esm/components/QueryEditor/AccessoryButton.js +1 -1
  94. package/dist/esm/components/QueryEditor/AccessoryButton.js.map +1 -1
  95. package/dist/esm/components/QueryEditor/CatalogSelector.js +6 -6
  96. package/dist/esm/components/QueryEditor/CatalogSelector.js.map +1 -1
  97. package/dist/esm/components/QueryEditor/ConfirmModal.js +4 -4
  98. package/dist/esm/components/QueryEditor/ConfirmModal.js.map +1 -1
  99. package/dist/esm/components/QueryEditor/DatasetSelector.js +3 -3
  100. package/dist/esm/components/QueryEditor/DatasetSelector.js.map +1 -1
  101. package/dist/esm/components/QueryEditor/EditorField.js +6 -6
  102. package/dist/esm/components/QueryEditor/EditorField.js.map +1 -1
  103. package/dist/esm/components/QueryEditor/EditorFieldGroup.js +1 -1
  104. package/dist/esm/components/QueryEditor/EditorFieldGroup.js.map +1 -1
  105. package/dist/esm/components/QueryEditor/EditorHeader.js +3 -3
  106. package/dist/esm/components/QueryEditor/EditorHeader.js.map +1 -1
  107. package/dist/esm/components/QueryEditor/EditorList.js +2 -2
  108. package/dist/esm/components/QueryEditor/EditorList.js.map +1 -1
  109. package/dist/esm/components/QueryEditor/EditorRow.js +5 -5
  110. package/dist/esm/components/QueryEditor/EditorRow.js.map +1 -1
  111. package/dist/esm/components/QueryEditor/EditorRows.js +3 -3
  112. package/dist/esm/components/QueryEditor/EditorRows.js.map +1 -1
  113. package/dist/esm/components/QueryEditor/EditorStack.js +2 -2
  114. package/dist/esm/components/QueryEditor/EditorStack.js.map +1 -1
  115. package/dist/esm/components/QueryEditor/EditorSwitch.js +3 -3
  116. package/dist/esm/components/QueryEditor/EditorSwitch.js.map +1 -1
  117. package/dist/esm/components/QueryEditor/FlexItem.js +1 -1
  118. package/dist/esm/components/QueryEditor/FlexItem.js.map +1 -1
  119. package/dist/esm/components/QueryEditor/InlineSelect.js +2 -2
  120. package/dist/esm/components/QueryEditor/InlineSelect.js.map +1 -1
  121. package/dist/esm/components/QueryEditor/InputGroup.js +6 -6
  122. package/dist/esm/components/QueryEditor/InputGroup.js.map +1 -1
  123. package/dist/esm/components/QueryEditor/QueryEditor.js +13 -15
  124. package/dist/esm/components/QueryEditor/QueryEditor.js.map +1 -1
  125. package/dist/esm/components/QueryEditor/QueryHeader.js +22 -22
  126. package/dist/esm/components/QueryEditor/QueryHeader.js.map +1 -1
  127. package/dist/esm/components/QueryEditor/RunQueryButton.js +2 -2
  128. package/dist/esm/components/QueryEditor/RunQueryButton.js.map +1 -1
  129. package/dist/esm/components/QueryEditor/Space.js +3 -3
  130. package/dist/esm/components/QueryEditor/Space.js.map +1 -1
  131. package/dist/esm/components/QueryEditor/TableSelector.js +1 -1
  132. package/dist/esm/components/QueryEditor/TableSelector.js.map +1 -1
  133. package/dist/esm/components/QueryEditor/defaults.js +7 -7
  134. package/dist/esm/components/QueryEditor/defaults.js.map +1 -1
  135. package/dist/esm/components/QueryEditor/expressions.js.map +1 -1
  136. package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js +4 -4
  137. package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js.map +1 -1
  138. package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js +5 -5
  139. package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js.map +1 -1
  140. package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js +9 -9
  141. package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js.map +1 -1
  142. package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js +6 -6
  143. package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js.map +1 -1
  144. package/dist/esm/components/QueryEditor/types.js +1 -1
  145. package/dist/esm/components/QueryEditor/types.js.map +1 -1
  146. package/dist/esm/components/QueryEditor/utils/formatSQL.js.map +1 -1
  147. package/dist/esm/components/QueryEditor/utils/sql.utils.js +8 -8
  148. package/dist/esm/components/QueryEditor/utils/sql.utils.js.map +1 -1
  149. package/dist/esm/components/QueryEditor/utils/useSqlChange.js +2 -2
  150. package/dist/esm/components/QueryEditor/utils/useSqlChange.js.map +1 -1
  151. package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js +28 -27
  152. package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js.map +1 -1
  153. package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js +4 -4
  154. package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js.map +1 -1
  155. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js +3 -3
  156. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js.map +1 -1
  157. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRows.js +1 -1
  158. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRows.js.map +1 -1
  159. package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js +4 -4
  160. package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js.map +1 -1
  161. package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js +9 -9
  162. package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js.map +1 -1
  163. package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js +3 -3
  164. package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js.map +1 -1
  165. package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js +1 -1
  166. package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js.map +1 -1
  167. package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js +3 -3
  168. package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js.map +1 -1
  169. package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js +1 -1
  170. package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js.map +1 -1
  171. package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js +1 -1
  172. package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js.map +1 -1
  173. package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js +14 -14
  174. package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js.map +1 -1
  175. package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js +1 -1
  176. package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js.map +1 -1
  177. package/dist/esm/components/QueryEditor/visual-query-builder/WhereRow.js +6 -6
  178. package/dist/esm/components/QueryEditor/visual-query-builder/WhereRow.js.map +1 -1
  179. package/dist/esm/components/QueryEditorRow/QueryEditorRow.js +1 -1
  180. package/dist/esm/components/QueryEditorRow/QueryEditorRow.js.map +1 -1
  181. package/dist/esm/components/SQLEditor/components/SQLEditor.js +19 -19
  182. package/dist/esm/components/SQLEditor/components/SQLEditor.js.map +1 -1
  183. package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js +5 -5
  184. package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js.map +1 -1
  185. package/dist/esm/components/SQLEditor/mocks/Monaco.js.map +1 -1
  186. package/dist/esm/components/SQLEditor/mocks/TextModel.js.map +1 -1
  187. package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQuery.js.map +1 -1
  188. package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQueryWithAggregation.js.map +1 -1
  189. package/dist/esm/components/SQLEditor/mocks/queries/multiLineMultipleColumns.js.map +1 -1
  190. package/dist/esm/components/SQLEditor/mocks/queries/singleLineEmptyQuery.js.map +1 -1
  191. package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQuery.js.map +1 -1
  192. package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQueryWithAggregation.js.map +1 -1
  193. package/dist/esm/components/SQLEditor/mocks/queries/singleLineMultipleColumns.js.map +1 -1
  194. package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueries.js.map +1 -1
  195. package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueriesWithAggregation.js.map +1 -1
  196. package/dist/esm/components/SQLEditor/standardSql/definition.js.map +1 -1
  197. package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js +2 -2
  198. package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js.map +1 -1
  199. package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js +3 -3
  200. package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js.map +1 -1
  201. package/dist/esm/components/SQLEditor/standardSql/language.js.map +1 -1
  202. package/dist/esm/components/SQLEditor/standardSql/macros.js.map +1 -1
  203. package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js +2 -2
  204. package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js.map +1 -1
  205. package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js +1 -1
  206. package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js.map +1 -1
  207. package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js +25 -25
  208. package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js.map +1 -1
  209. package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js +1 -1
  210. package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js.map +1 -1
  211. package/dist/esm/components/SQLEditor/test-utils/index.js.map +1 -1
  212. package/dist/esm/components/SQLEditor/test-utils/statementPosition.js.map +1 -1
  213. package/dist/esm/components/SQLEditor/types.js.map +1 -1
  214. package/dist/esm/components/SQLEditor/utils/LinkedToken.js +7 -7
  215. package/dist/esm/components/SQLEditor/utils/LinkedToken.js.map +1 -1
  216. package/dist/esm/components/SQLEditor/utils/commands.js.map +1 -1
  217. package/dist/esm/components/SQLEditor/utils/debugger.js +1 -1
  218. package/dist/esm/components/SQLEditor/utils/debugger.js.map +1 -1
  219. package/dist/esm/components/SQLEditor/utils/getSuggestionKind.js.map +1 -1
  220. package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js +1 -1
  221. package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js.map +1 -1
  222. package/dist/esm/components/SQLEditor/utils/toCompletionItem.js +1 -1
  223. package/dist/esm/components/SQLEditor/utils/toCompletionItem.js.map +1 -1
  224. package/dist/esm/components/SQLEditor/utils/tokenType.js.map +1 -1
  225. package/dist/esm/components/SQLEditor/utils/tokenUtils.js +9 -9
  226. package/dist/esm/components/SQLEditor/utils/tokenUtils.js.map +1 -1
  227. package/dist/esm/components/Segment/Segment.js +4 -4
  228. package/dist/esm/components/Segment/Segment.js.map +1 -1
  229. package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js +2 -2
  230. package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js.map +1 -1
  231. package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js +16 -16
  232. package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js.map +1 -1
  233. package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js +4 -4
  234. package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js.map +1 -1
  235. package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js +5 -5
  236. package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js.map +1 -1
  237. package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js +6 -8
  238. package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js.map +1 -1
  239. package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js +4 -4
  240. package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js.map +1 -1
  241. package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js +5 -5
  242. package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js.map +1 -1
  243. package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js +5 -5
  244. package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js.map +1 -1
  245. package/dist/esm/components/VisualQueryBuilder/components/OperationList.js +5 -7
  246. package/dist/esm/components/VisualQueryBuilder/components/OperationList.js.map +1 -1
  247. package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js +3 -3
  248. package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js.map +1 -1
  249. package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js +6 -8
  250. package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js.map +1 -1
  251. package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js +3 -5
  252. package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js.map +1 -1
  253. package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js +10 -10
  254. package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js.map +1 -1
  255. package/dist/esm/components/VisualQueryBuilder/components/QueryEditorModeToggle.js +1 -1
  256. package/dist/esm/components/VisualQueryBuilder/components/QueryEditorModeToggle.js.map +1 -1
  257. package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js +4 -6
  258. package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js.map +1 -1
  259. package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js +1 -3
  260. package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js.map +1 -1
  261. package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js +3 -3
  262. package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js.map +1 -1
  263. package/dist/esm/components/VisualQueryBuilder/types.js +1 -1
  264. package/dist/esm/components/VisualQueryBuilder/types.js.map +1 -1
  265. package/dist/esm/datasource/SqlDatasource.js +18 -16
  266. package/dist/esm/datasource/SqlDatasource.js.map +1 -1
  267. package/dist/esm/datasource/constants.js.map +1 -1
  268. package/dist/esm/hooks/useDebounce.js +3 -3
  269. package/dist/esm/hooks/useDebounce.js.map +1 -1
  270. package/dist/esm/index.d.ts +61 -653
  271. package/dist/esm/index.js +3 -11
  272. package/dist/esm/index.js.map +1 -1
  273. package/dist/esm/node_modules/chance/chance.js +7820 -0
  274. package/dist/esm/node_modules/chance/chance.js.map +1 -0
  275. package/dist/esm/node_modules/react/cjs/react.development.js +2752 -0
  276. package/dist/esm/node_modules/react/cjs/react.development.js.map +1 -0
  277. package/dist/esm/node_modules/react/cjs/react.production.min.js +39 -0
  278. package/dist/esm/node_modules/react/cjs/react.production.min.js.map +1 -0
  279. package/dist/esm/node_modules/react/index.js +20 -0
  280. package/dist/esm/node_modules/react/index.js.map +1 -0
  281. package/dist/esm/node_modules/rxjs/dist/esm5/internal/Observable.js +104 -0
  282. package/dist/esm/node_modules/rxjs/dist/esm5/internal/Observable.js.map +1 -0
  283. package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscriber.js +154 -0
  284. package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscriber.js.map +1 -0
  285. package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscription.js +145 -0
  286. package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscription.js.map +1 -0
  287. package/dist/esm/node_modules/rxjs/dist/esm5/internal/config.js +10 -0
  288. package/dist/esm/node_modules/rxjs/dist/esm5/internal/config.js.map +1 -0
  289. package/dist/esm/node_modules/rxjs/dist/esm5/internal/lastValueFrom.js +26 -0
  290. package/dist/esm/node_modules/rxjs/dist/esm5/internal/lastValueFrom.js.map +1 -0
  291. package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/empty.js +6 -0
  292. package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/empty.js.map +1 -0
  293. package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/from.js +9 -0
  294. package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/from.js.map +1 -0
  295. package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js +146 -0
  296. package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js.map +1 -0
  297. package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/merge.js +26 -0
  298. package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/merge.js.map +1 -0
  299. package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/of.js +14 -0
  300. package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/of.js.map +1 -0
  301. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js +63 -0
  302. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js.map +1 -0
  303. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/catchError.js +30 -0
  304. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/catchError.js.map +1 -0
  305. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/map.js +14 -0
  306. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/map.js.map +1 -0
  307. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js +10 -0
  308. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js.map +1 -0
  309. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js +56 -0
  310. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js.map +1 -0
  311. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js +19 -0
  312. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js.map +1 -0
  313. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/observeOn.js +13 -0
  314. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/observeOn.js.map +1 -0
  315. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js +11 -0
  316. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js.map +1 -0
  317. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js +21 -0
  318. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js.map +1 -0
  319. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js +26 -0
  320. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js.map +1 -0
  321. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js +35 -0
  322. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js.map +1 -0
  323. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js +10 -0
  324. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js.map +1 -0
  325. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js +10 -0
  326. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js.map +1 -0
  327. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js +9 -0
  328. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js.map +1 -0
  329. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js +40 -0
  330. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js.map +1 -0
  331. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js +18 -0
  332. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js.map +1 -0
  333. package/dist/esm/node_modules/rxjs/dist/esm5/internal/symbol/iterator.js +10 -0
  334. package/dist/esm/node_modules/rxjs/dist/esm5/internal/symbol/iterator.js.map +1 -0
  335. package/dist/esm/node_modules/rxjs/dist/esm5/internal/symbol/observable.js +4 -0
  336. package/dist/esm/node_modules/rxjs/dist/esm5/internal/symbol/observable.js.map +1 -0
  337. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/EmptyError.js +10 -0
  338. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/EmptyError.js.map +1 -0
  339. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js +15 -0
  340. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js.map +1 -0
  341. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/args.js +14 -0
  342. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/args.js.map +1 -0
  343. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js +9 -0
  344. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js.map +1 -0
  345. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js +13 -0
  346. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js.map +1 -0
  347. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/errorContext.js +8 -0
  348. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/errorContext.js.map +1 -0
  349. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js +20 -0
  350. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js.map +1 -0
  351. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/identity.js +6 -0
  352. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/identity.js.map +1 -0
  353. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js +4 -0
  354. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js.map +1 -0
  355. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js +8 -0
  356. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js.map +1 -0
  357. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +6 -0
  358. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isFunction.js.map +1 -0
  359. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js +9 -0
  360. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js.map +1 -0
  361. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isIterable.js +9 -0
  362. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isIterable.js.map +1 -0
  363. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isPromise.js +8 -0
  364. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isPromise.js.map +1 -0
  365. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js +41 -0
  366. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js.map +1 -0
  367. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isScheduler.js +8 -0
  368. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isScheduler.js.map +1 -0
  369. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/lift.js +23 -0
  370. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/lift.js.map +1 -0
  371. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/noop.js +4 -0
  372. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/noop.js.map +1 -0
  373. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/pipe.js +16 -0
  374. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/pipe.js.map +1 -0
  375. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js +12 -0
  376. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js.map +1 -0
  377. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js +6 -0
  378. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js.map +1 -0
  379. package/dist/esm/node_modules/semver/classes/comparator.js +160 -0
  380. package/dist/esm/node_modules/semver/classes/comparator.js.map +1 -0
  381. package/dist/esm/node_modules/semver/classes/range.js +575 -0
  382. package/dist/esm/node_modules/semver/classes/range.js.map +1 -0
  383. package/dist/esm/node_modules/semver/classes/semver.js +349 -0
  384. package/dist/esm/node_modules/semver/classes/semver.js.map +1 -0
  385. package/dist/esm/node_modules/semver/functions/clean.js +20 -0
  386. package/dist/esm/node_modules/semver/functions/clean.js.map +1 -0
  387. package/dist/esm/node_modules/semver/functions/cmp.js +71 -0
  388. package/dist/esm/node_modules/semver/functions/cmp.js.map +1 -0
  389. package/dist/esm/node_modules/semver/functions/coerce.js +76 -0
  390. package/dist/esm/node_modules/semver/functions/coerce.js.map +1 -0
  391. package/dist/esm/node_modules/semver/functions/compare-build.js +21 -0
  392. package/dist/esm/node_modules/semver/functions/compare-build.js.map +1 -0
  393. package/dist/esm/node_modules/semver/functions/compare-loose.js +17 -0
  394. package/dist/esm/node_modules/semver/functions/compare-loose.js.map +1 -0
  395. package/dist/esm/node_modules/semver/functions/compare.js +19 -0
  396. package/dist/esm/node_modules/semver/functions/compare.js.map +1 -0
  397. package/dist/esm/node_modules/semver/functions/diff.js +72 -0
  398. package/dist/esm/node_modules/semver/functions/diff.js.map +1 -0
  399. package/dist/esm/node_modules/semver/functions/eq.js +17 -0
  400. package/dist/esm/node_modules/semver/functions/eq.js.map +1 -0
  401. package/dist/esm/node_modules/semver/functions/gt.js +17 -0
  402. package/dist/esm/node_modules/semver/functions/gt.js.map +1 -0
  403. package/dist/esm/node_modules/semver/functions/gte.js +17 -0
  404. package/dist/esm/node_modules/semver/functions/gte.js.map +1 -0
  405. package/dist/esm/node_modules/semver/functions/inc.js +33 -0
  406. package/dist/esm/node_modules/semver/functions/inc.js.map +1 -0
  407. package/dist/esm/node_modules/semver/functions/lt.js +17 -0
  408. package/dist/esm/node_modules/semver/functions/lt.js.map +1 -0
  409. package/dist/esm/node_modules/semver/functions/lte.js +17 -0
  410. package/dist/esm/node_modules/semver/functions/lte.js.map +1 -0
  411. package/dist/esm/node_modules/semver/functions/major.js +17 -0
  412. package/dist/esm/node_modules/semver/functions/major.js.map +1 -0
  413. package/dist/esm/node_modules/semver/functions/minor.js +17 -0
  414. package/dist/esm/node_modules/semver/functions/minor.js.map +1 -0
  415. package/dist/esm/node_modules/semver/functions/neq.js +17 -0
  416. package/dist/esm/node_modules/semver/functions/neq.js.map +1 -0
  417. package/dist/esm/node_modules/semver/functions/parse.js +30 -0
  418. package/dist/esm/node_modules/semver/functions/parse.js.map +1 -0
  419. package/dist/esm/node_modules/semver/functions/patch.js +17 -0
  420. package/dist/esm/node_modules/semver/functions/patch.js.map +1 -0
  421. package/dist/esm/node_modules/semver/functions/prerelease.js +20 -0
  422. package/dist/esm/node_modules/semver/functions/prerelease.js.map +1 -0
  423. package/dist/esm/node_modules/semver/functions/rcompare.js +17 -0
  424. package/dist/esm/node_modules/semver/functions/rcompare.js.map +1 -0
  425. package/dist/esm/node_modules/semver/functions/rsort.js +17 -0
  426. package/dist/esm/node_modules/semver/functions/rsort.js.map +1 -0
  427. package/dist/esm/node_modules/semver/functions/satisfies.js +24 -0
  428. package/dist/esm/node_modules/semver/functions/satisfies.js.map +1 -0
  429. package/dist/esm/node_modules/semver/functions/sort.js +17 -0
  430. package/dist/esm/node_modules/semver/functions/sort.js.map +1 -0
  431. package/dist/esm/node_modules/semver/functions/valid.js +20 -0
  432. package/dist/esm/node_modules/semver/functions/valid.js.map +1 -0
  433. package/dist/esm/node_modules/semver/index.js +143 -0
  434. package/dist/esm/node_modules/semver/index.js.map +1 -0
  435. package/dist/esm/node_modules/semver/internal/constants.js +47 -0
  436. package/dist/esm/node_modules/semver/internal/constants.js.map +1 -0
  437. package/dist/esm/node_modules/semver/internal/debug.js +21 -0
  438. package/dist/esm/node_modules/semver/internal/debug.js.map +1 -0
  439. package/dist/esm/node_modules/semver/internal/identifiers.js +39 -0
  440. package/dist/esm/node_modules/semver/internal/identifiers.js.map +1 -0
  441. package/dist/esm/node_modules/semver/internal/lrucache.js +52 -0
  442. package/dist/esm/node_modules/semver/internal/lrucache.js.map +1 -0
  443. package/dist/esm/node_modules/semver/internal/parse-options.js +27 -0
  444. package/dist/esm/node_modules/semver/internal/parse-options.js.map +1 -0
  445. package/dist/esm/node_modules/semver/internal/re.js +238 -0
  446. package/dist/esm/node_modules/semver/internal/re.js.map +1 -0
  447. package/dist/esm/node_modules/semver/ranges/gtr.js +18 -0
  448. package/dist/esm/node_modules/semver/ranges/gtr.js.map +1 -0
  449. package/dist/esm/node_modules/semver/ranges/intersects.js +21 -0
  450. package/dist/esm/node_modules/semver/ranges/intersects.js.map +1 -0
  451. package/dist/esm/node_modules/semver/ranges/ltr.js +18 -0
  452. package/dist/esm/node_modules/semver/ranges/ltr.js.map +1 -0
  453. package/dist/esm/node_modules/semver/ranges/max-satisfying.js +40 -0
  454. package/dist/esm/node_modules/semver/ranges/max-satisfying.js.map +1 -0
  455. package/dist/esm/node_modules/semver/ranges/min-satisfying.js +39 -0
  456. package/dist/esm/node_modules/semver/ranges/min-satisfying.js.map +1 -0
  457. package/dist/esm/node_modules/semver/ranges/min-version.js +77 -0
  458. package/dist/esm/node_modules/semver/ranges/min-version.js.map +1 -0
  459. package/dist/esm/node_modules/semver/ranges/outside.js +101 -0
  460. package/dist/esm/node_modules/semver/ranges/outside.js.map +1 -0
  461. package/dist/esm/node_modules/semver/ranges/simplify.js +62 -0
  462. package/dist/esm/node_modules/semver/ranges/simplify.js.map +1 -0
  463. package/dist/esm/node_modules/semver/ranges/subset.js +264 -0
  464. package/dist/esm/node_modules/semver/ranges/subset.js.map +1 -0
  465. package/dist/esm/node_modules/semver/ranges/to-comparators.js +22 -0
  466. package/dist/esm/node_modules/semver/ranges/to-comparators.js.map +1 -0
  467. package/dist/esm/node_modules/semver/ranges/valid.js +25 -0
  468. package/dist/esm/node_modules/semver/ranges/valid.js.map +1 -0
  469. package/dist/esm/node_modules/tslib/tslib.es6.js +140 -0
  470. package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -0
  471. package/dist/esm/test/mocks/DataQuery.js +5 -5
  472. package/dist/esm/test/mocks/DataQuery.js.map +1 -1
  473. package/dist/esm/test/mocks/Datasource.js +22 -22
  474. package/dist/esm/test/mocks/Datasource.js.map +1 -1
  475. package/dist/esm/test/mocks/Plugin.js +30 -30
  476. package/dist/esm/test/mocks/Plugin.js.map +1 -1
  477. package/dist/esm/test/mocks/QueryEditorProps.js +6 -6
  478. package/dist/esm/test/mocks/QueryEditorProps.js.map +1 -1
  479. package/dist/esm/test/mocks/utils.js +5 -5
  480. package/dist/esm/test/mocks/utils.js.map +1 -1
  481. package/dist/esm/test-utils.d.ts +1 -1
  482. package/package.json +73 -103
  483. package/dist/cjs/schemas.cjs +0 -25
  484. package/dist/cjs/schemas.cjs.map +0 -1
  485. package/dist/cjs/schemas.d.cts +0 -448
  486. package/dist/cjs/useDatasourceSchema-BWcU0Gkw.js +0 -16623
  487. package/dist/cjs/useDatasourceSchema-BWcU0Gkw.js.map +0 -1
  488. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceConfigWizard.js +0 -234
  489. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceConfigWizard.js.map +0 -1
  490. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceErrorBoundary.js +0 -27
  491. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceErrorBoundary.js.map +0 -1
  492. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SchemaField.js +0 -71
  493. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SchemaField.js.map +0 -1
  494. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SidebarNav.js +0 -54
  495. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SidebarNav.js.map +0 -1
  496. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/TabLayout.js +0 -181
  497. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/TabLayout.js.map +0 -1
  498. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/cel.js +0 -75
  499. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/cel.js.map +0 -1
  500. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/config.js +0 -258
  501. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/config.js.map +0 -1
  502. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/datasource.js +0 -354
  503. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/datasource.js.map +0 -1
  504. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/fieldUtils.js +0 -138
  505. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/fieldUtils.js.map +0 -1
  506. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.js +0 -326
  507. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.js.map +0 -1
  508. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useHealthChecks.js +0 -106
  509. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useHealthChecks.js.map +0 -1
  510. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/AuthorizationHeaderField.js +0 -51
  511. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/AuthorizationHeaderField.js.map +0 -1
  512. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ComplexFieldNote.js +0 -26
  513. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ComplexFieldNote.js.map +0 -1
  514. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FileUploadField.js +0 -106
  515. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FileUploadField.js.map +0 -1
  516. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/IndexedPairEditor.js +0 -124
  517. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/IndexedPairEditor.js.map +0 -1
  518. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ObjectArrayEditor.js +0 -190
  519. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ObjectArrayEditor.js.map +0 -1
  520. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/PdcFieldNote.js +0 -31
  521. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/PdcFieldNote.js.map +0 -1
  522. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/SecureFieldInput.js +0 -59
  523. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/SecureFieldInput.js.map +0 -1
  524. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/StringArrayInput.js +0 -80
  525. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/StringArrayInput.js.map +0 -1
  526. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/renderFieldInput.js +0 -141
  527. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/renderFieldInput.js.map +0 -1
  528. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/resolvePluginName.js +0 -30
  529. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/resolvePluginName.js.map +0 -1
  530. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/styles.js +0 -360
  531. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/styles.js.map +0 -1
  532. package/dist/esm/schema/registry/alertmanager.schema.json.js +0 -77
  533. package/dist/esm/schema/registry/alertmanager.schema.json.js.map +0 -1
  534. package/dist/esm/schema/registry/cloudwatch.schema.json.js +0 -384
  535. package/dist/esm/schema/registry/cloudwatch.schema.json.js.map +0 -1
  536. package/dist/esm/schema/registry/elasticsearch.schema.json.js +0 -597
  537. package/dist/esm/schema/registry/elasticsearch.schema.json.js.map +0 -1
  538. package/dist/esm/schema/registry/grafana-adobeanalytics-datasource.schema.json.js +0 -95
  539. package/dist/esm/schema/registry/grafana-adobeanalytics-datasource.schema.json.js.map +0 -1
  540. package/dist/esm/schema/registry/grafana-amazonprometheus-datasource.schema.json.js +0 -166
  541. package/dist/esm/schema/registry/grafana-amazonprometheus-datasource.schema.json.js.map +0 -1
  542. package/dist/esm/schema/registry/grafana-appdynamics-datasource.schema.json.js +0 -145
  543. package/dist/esm/schema/registry/grafana-appdynamics-datasource.schema.json.js.map +0 -1
  544. package/dist/esm/schema/registry/grafana-astradb-datasource.schema.json.js +0 -123
  545. package/dist/esm/schema/registry/grafana-astradb-datasource.schema.json.js.map +0 -1
  546. package/dist/esm/schema/registry/grafana-athena-datasource.schema.json.js +0 -158
  547. package/dist/esm/schema/registry/grafana-athena-datasource.schema.json.js.map +0 -1
  548. package/dist/esm/schema/registry/grafana-azure-data-explorer-datasource.schema.json.js +0 -204
  549. package/dist/esm/schema/registry/grafana-azure-data-explorer-datasource.schema.json.js.map +0 -1
  550. package/dist/esm/schema/registry/grafana-azure-monitor-datasource.schema.json.js +0 -300
  551. package/dist/esm/schema/registry/grafana-azure-monitor-datasource.schema.json.js.map +0 -1
  552. package/dist/esm/schema/registry/grafana-azuredevops-datasource.schema.json.js +0 -101
  553. package/dist/esm/schema/registry/grafana-azuredevops-datasource.schema.json.js.map +0 -1
  554. package/dist/esm/schema/registry/grafana-azureprometheus-datasource.schema.json.js +0 -125
  555. package/dist/esm/schema/registry/grafana-azureprometheus-datasource.schema.json.js.map +0 -1
  556. package/dist/esm/schema/registry/grafana-bigquery-datasource.schema.json.js +0 -508
  557. package/dist/esm/schema/registry/grafana-bigquery-datasource.schema.json.js.map +0 -1
  558. package/dist/esm/schema/registry/grafana-clickhouse-datasource.schema.json.js +0 -1400
  559. package/dist/esm/schema/registry/grafana-clickhouse-datasource.schema.json.js.map +0 -1
  560. package/dist/esm/schema/registry/grafana-cockroachdb-datasource.schema.json.js +0 -302
  561. package/dist/esm/schema/registry/grafana-cockroachdb-datasource.schema.json.js.map +0 -1
  562. package/dist/esm/schema/registry/grafana-databricks-datasource.schema.json.js +0 -291
  563. package/dist/esm/schema/registry/grafana-databricks-datasource.schema.json.js.map +0 -1
  564. package/dist/esm/schema/registry/grafana-datadog-datasource.schema.json.js +0 -155
  565. package/dist/esm/schema/registry/grafana-datadog-datasource.schema.json.js.map +0 -1
  566. package/dist/esm/schema/registry/grafana-dynatrace-datasource.schema.json.js +0 -179
  567. package/dist/esm/schema/registry/grafana-dynatrace-datasource.schema.json.js.map +0 -1
  568. package/dist/esm/schema/registry/grafana-falconlogscale-datasource.schema.json.js +0 -134
  569. package/dist/esm/schema/registry/grafana-falconlogscale-datasource.schema.json.js.map +0 -1
  570. package/dist/esm/schema/registry/grafana-github-datasource.schema.json.js +0 -156
  571. package/dist/esm/schema/registry/grafana-github-datasource.schema.json.js.map +0 -1
  572. package/dist/esm/schema/registry/grafana-gitlab-datasource.schema.json.js +0 -84
  573. package/dist/esm/schema/registry/grafana-gitlab-datasource.schema.json.js.map +0 -1
  574. package/dist/esm/schema/registry/grafana-googlesheets-datasource.schema.json.js +0 -231
  575. package/dist/esm/schema/registry/grafana-googlesheets-datasource.schema.json.js.map +0 -1
  576. package/dist/esm/schema/registry/grafana-honeycomb-datasource.schema.json.js +0 -87
  577. package/dist/esm/schema/registry/grafana-honeycomb-datasource.schema.json.js.map +0 -1
  578. package/dist/esm/schema/registry/grafana-iot-sitewise-datasource.schema.json.js +0 -159
  579. package/dist/esm/schema/registry/grafana-iot-sitewise-datasource.schema.json.js.map +0 -1
  580. package/dist/esm/schema/registry/grafana-jira-datasource.schema.json.js +0 -188
  581. package/dist/esm/schema/registry/grafana-jira-datasource.schema.json.js.map +0 -1
  582. package/dist/esm/schema/registry/grafana-looker-datasource.schema.json.js +0 -82
  583. package/dist/esm/schema/registry/grafana-looker-datasource.schema.json.js.map +0 -1
  584. package/dist/esm/schema/registry/grafana-mongodb-datasource.schema.json.js +0 -278
  585. package/dist/esm/schema/registry/grafana-mongodb-datasource.schema.json.js.map +0 -1
  586. package/dist/esm/schema/registry/grafana-mqtt-datasource.schema.json.js +0 -168
  587. package/dist/esm/schema/registry/grafana-mqtt-datasource.schema.json.js.map +0 -1
  588. package/dist/esm/schema/registry/grafana-newrelic-datasource.schema.json.js +0 -129
  589. package/dist/esm/schema/registry/grafana-newrelic-datasource.schema.json.js.map +0 -1
  590. package/dist/esm/schema/registry/grafana-odbc-datasource.schema.json.js +0 -56
  591. package/dist/esm/schema/registry/grafana-odbc-datasource.schema.json.js.map +0 -1
  592. package/dist/esm/schema/registry/grafana-opensearch-datasource.schema.json.js +0 -212
  593. package/dist/esm/schema/registry/grafana-opensearch-datasource.schema.json.js.map +0 -1
  594. package/dist/esm/schema/registry/grafana-oracle-datasource.schema.json.js +0 -186
  595. package/dist/esm/schema/registry/grafana-oracle-datasource.schema.json.js.map +0 -1
  596. package/dist/esm/schema/registry/grafana-pagerduty-datasource.schema.json.js +0 -85
  597. package/dist/esm/schema/registry/grafana-pagerduty-datasource.schema.json.js.map +0 -1
  598. package/dist/esm/schema/registry/grafana-postgresql-datasource.schema.json.js +0 -411
  599. package/dist/esm/schema/registry/grafana-postgresql-datasource.schema.json.js.map +0 -1
  600. package/dist/esm/schema/registry/grafana-pyroscope-datasource.schema.json.js +0 -41
  601. package/dist/esm/schema/registry/grafana-pyroscope-datasource.schema.json.js.map +0 -1
  602. package/dist/esm/schema/registry/grafana-redshift-datasource.schema.json.js +0 -201
  603. package/dist/esm/schema/registry/grafana-redshift-datasource.schema.json.js.map +0 -1
  604. package/dist/esm/schema/registry/grafana-salesforce-datasource.schema.json.js +0 -248
  605. package/dist/esm/schema/registry/grafana-salesforce-datasource.schema.json.js.map +0 -1
  606. package/dist/esm/schema/registry/grafana-saphana-datasource.schema.json.js +0 -208
  607. package/dist/esm/schema/registry/grafana-saphana-datasource.schema.json.js.map +0 -1
  608. package/dist/esm/schema/registry/grafana-sentry-datasource.schema.json.js +0 -94
  609. package/dist/esm/schema/registry/grafana-sentry-datasource.schema.json.js.map +0 -1
  610. package/dist/esm/schema/registry/grafana-servicenow-datasource.schema.json.js +0 -179
  611. package/dist/esm/schema/registry/grafana-servicenow-datasource.schema.json.js.map +0 -1
  612. package/dist/esm/schema/registry/grafana-snowflake-datasource.schema.json.js +0 -304
  613. package/dist/esm/schema/registry/grafana-snowflake-datasource.schema.json.js.map +0 -1
  614. package/dist/esm/schema/registry/grafana-splunk-datasource.schema.json.js +0 -690
  615. package/dist/esm/schema/registry/grafana-splunk-datasource.schema.json.js.map +0 -1
  616. package/dist/esm/schema/registry/grafana-splunkobservability-datasource.schema.json.js +0 -90
  617. package/dist/esm/schema/registry/grafana-splunkobservability-datasource.schema.json.js.map +0 -1
  618. package/dist/esm/schema/registry/grafana-strava-datasource.schema.json.js +0 -74
  619. package/dist/esm/schema/registry/grafana-strava-datasource.schema.json.js.map +0 -1
  620. package/dist/esm/schema/registry/grafana-sumologic-datasource.schema.json.js +0 -102
  621. package/dist/esm/schema/registry/grafana-sumologic-datasource.schema.json.js.map +0 -1
  622. package/dist/esm/schema/registry/grafana-surrealdb-datasource.schema.json.js +0 -92
  623. package/dist/esm/schema/registry/grafana-surrealdb-datasource.schema.json.js.map +0 -1
  624. package/dist/esm/schema/registry/grafana-timestream-datasource.schema.json.js +0 -145
  625. package/dist/esm/schema/registry/grafana-timestream-datasource.schema.json.js.map +0 -1
  626. package/dist/esm/schema/registry/grafana-wavefront-datasource.schema.json.js +0 -80
  627. package/dist/esm/schema/registry/grafana-wavefront-datasource.schema.json.js.map +0 -1
  628. package/dist/esm/schema/registry/grafana-x-ray-datasource.schema.json.js +0 -112
  629. package/dist/esm/schema/registry/grafana-x-ray-datasource.schema.json.js.map +0 -1
  630. package/dist/esm/schema/registry/grafana-yugabyte-datasource.schema.json.js +0 -114
  631. package/dist/esm/schema/registry/grafana-yugabyte-datasource.schema.json.js.map +0 -1
  632. package/dist/esm/schema/registry/graphite.schema.json.js +0 -104
  633. package/dist/esm/schema/registry/graphite.schema.json.js.map +0 -1
  634. package/dist/esm/schema/registry/index.js +0 -139
  635. package/dist/esm/schema/registry/index.js.map +0 -1
  636. package/dist/esm/schema/registry/influxdb.schema.json.js +0 -717
  637. package/dist/esm/schema/registry/influxdb.schema.json.js.map +0 -1
  638. package/dist/esm/schema/registry/jaeger.schema.json.js +0 -59
  639. package/dist/esm/schema/registry/jaeger.schema.json.js.map +0 -1
  640. package/dist/esm/schema/registry/loki.schema.json.js +0 -545
  641. package/dist/esm/schema/registry/loki.schema.json.js.map +0 -1
  642. package/dist/esm/schema/registry/marcusolsson-csv-datasource.schema.json.js +0 -45
  643. package/dist/esm/schema/registry/marcusolsson-csv-datasource.schema.json.js.map +0 -1
  644. package/dist/esm/schema/registry/marcusolsson-json-datasource.schema.json.js +0 -36
  645. package/dist/esm/schema/registry/marcusolsson-json-datasource.schema.json.js.map +0 -1
  646. package/dist/esm/schema/registry/mssql.schema.json.js +0 -292
  647. package/dist/esm/schema/registry/mssql.schema.json.js.map +0 -1
  648. package/dist/esm/schema/registry/mysql.schema.json.js +0 -304
  649. package/dist/esm/schema/registry/mysql.schema.json.js.map +0 -1
  650. package/dist/esm/schema/registry/opentsdb.schema.json.js +0 -113
  651. package/dist/esm/schema/registry/opentsdb.schema.json.js.map +0 -1
  652. package/dist/esm/schema/registry/prometheus.schema.json.js +0 -783
  653. package/dist/esm/schema/registry/prometheus.schema.json.js.map +0 -1
  654. package/dist/esm/schema/registry/stackdriver.schema.json.js +0 -224
  655. package/dist/esm/schema/registry/stackdriver.schema.json.js.map +0 -1
  656. package/dist/esm/schema/registry/tempo.schema.json.js +0 -664
  657. package/dist/esm/schema/registry/tempo.schema.json.js.map +0 -1
  658. package/dist/esm/schema/registry/yesoreyeram-infinity-datasource.schema.json.js +0 -1073
  659. package/dist/esm/schema/registry/yesoreyeram-infinity-datasource.schema.json.js.map +0 -1
  660. package/dist/esm/schema/registry/zipkin.schema.json.js +0 -40
  661. package/dist/esm/schema/registry/zipkin.schema.json.js.map +0 -1
  662. package/dist/esm/schema/utils/dsconfig.js +0 -97
  663. package/dist/esm/schema/utils/dsconfig.js.map +0 -1
  664. package/dist/esm/schema/utils/llm.js +0 -54
  665. package/dist/esm/schema/utils/llm.js.map +0 -1
  666. package/dist/esm/schema/utils/provisioning.js +0 -434
  667. package/dist/esm/schema/utils/provisioning.js.map +0 -1
  668. package/dist/esm/schema/utils/useDatasourceSchema.js +0 -16
  669. package/dist/esm/schema/utils/useDatasourceSchema.js.map +0 -1
  670. package/dist/esm/schemas.d.ts +0 -448
  671. package/dist/esm/schemas.js +0 -6
  672. package/dist/esm/schemas.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDatasourceSchema-BWcU0Gkw.js","sources":["../../src/components/ConfigEditor/DatasourceConfigWizard/cel.ts","../../src/components/ConfigEditor/DatasourceConfigWizard/config.ts","../../src/schema/registry/index.ts","../../src/schema/utils/llm.ts","../../src/schema/utils/dsconfig.ts","../../src/schema/utils/provisioning.ts","../../src/schema/utils/useDatasourceSchema.ts"],"sourcesContent":["/**\n * CEL (Common Expression Language) expression evaluator for schema conditions.\n *\n * Used by `dependsOn`, `requiredWhen`, `disabledWhen`, and `overrides[].when`.\n * Wraps @marcbachmann/cel-js with field-ID-aware context building.\n *\n * Go equivalent: github.com/google/cel-go\n */\n\nimport { evaluate as celEvaluate, parse as celParse } from '@marcbachmann/cel-js';\n\n// ============================================================\n// Expression cache — parse once, evaluate many times\n// ============================================================\n\ntype CompiledExpr = (ctx: Record<string, unknown>) => unknown;\nconst exprCache = new Map<string, CompiledExpr | null>();\n\nfunction getCompiled(expr: string): CompiledExpr | null {\n if (exprCache.has(expr)) {\n return exprCache.get(expr)!;\n }\n try {\n const compiled = celParse(expr);\n exprCache.set(expr, compiled);\n return compiled;\n } catch {\n exprCache.set(expr, null);\n return null;\n }\n}\n\n// ============================================================\n// Context builder — flat field values → nested object for CEL\n// ============================================================\n\n/**\n * Build a nested context object from flat form values keyed by field IDs.\n *\n * CEL interprets dots as property access, so `jsonData.auth_method == 'oauth2'`\n * requires `{ jsonData: { auth_method: 'oauth2' } }`.\n *\n * This function takes flat key-value pairs (from react-hook-form `watch()`)\n * and builds the nested structure CEL expects.\n *\n * @param values - Flat map of form keys to values (e.g. `{ \"auth_method\": \"oauth2\", \"oauth2.oauth2_type\": \"jwt\" }`)\n * @param fieldIdToFormKey - Optional map from field ID to form key for translation\n */\nexport function buildCelContext(values: Record<string, unknown>): Record<string, unknown> {\n const ctx: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(values)) {\n setNestedValue(ctx, key, value);\n }\n\n return ctx;\n}\n\nfunction setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void {\n const parts = path.split('.');\n let current = obj;\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n if (!(part in current) || typeof current[part] !== 'object' || current[part] === null) {\n current[part] = {};\n }\n current = current[part] as Record<string, unknown>;\n }\n current[parts[parts.length - 1]] = value;\n}\n\n// ============================================================\n// Public API\n// ============================================================\n\n/**\n * Evaluate a CEL expression against a context of field values.\n * Returns the boolean result, or `defaultValue` if the expression is invalid.\n *\n * @example\n * ```ts\n * evaluateCelExpression(\"jsonData.auth_method == 'oauth2'\", { jsonData: { auth_method: 'oauth2' } })\n * // => true\n *\n * evaluateCelExpression(\"auth_method == 'oauth2' && oauth2_type == 'jwt'\", { auth_method: 'oauth2', oauth2_type: 'jwt' })\n * // => true\n * ```\n */\nexport function evaluateCelExpression(expr: string, context: Record<string, unknown>, defaultValue = false): boolean {\n if (!expr || !expr.trim()) {\n return defaultValue;\n }\n\n const compiled = getCompiled(expr);\n if (!compiled) {\n return defaultValue;\n }\n\n try {\n const result = compiled(context);\n return !!result;\n } catch {\n return defaultValue;\n }\n}\n\n/**\n * Evaluate a CEL expression directly using `evaluate` (no caching).\n * Useful for one-off evaluations or testing.\n */\nexport function evaluateCelDirect(expr: string, context: Record<string, unknown>): unknown {\n return celEvaluate(expr, context);\n}\n\n/**\n * Validate that a CEL expression can be parsed without errors.\n * Returns true if valid, false otherwise.\n */\nexport function isValidCelExpression(expr: string): boolean {\n try {\n celParse(expr);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Extract all field ID references from a simple expression.\n * Used by `resolveRequiredFieldsGroup` to find dependency relationships.\n *\n * For simple expressions like `fieldA == 'x'`, returns `['fieldA']`.\n * For compound expressions like `fieldA == 'x' && fieldB == 'y'`, returns `['fieldA', 'fieldB']`.\n *\n * This uses regex extraction (not AST walking) for simplicity and speed.\n */\nexport function extractFieldRefs(expr: string): string[] {\n // Match identifiers (possibly dotted) that precede == or !=\n const matches = expr.matchAll(/([\\w.]+)\\s*(?:==|!=)/g);\n const refs = new Set<string>();\n for (const m of matches) {\n refs.add(m[1]);\n }\n return [...refs];\n}\n\n/**\n * Clear the expression cache. Useful for testing.\n */\nexport function clearExpressionCache(): void {\n exprCache.clear();\n}\n","/**\n * Pure helper functions for working with DatasourceConfigSchema.\n *\n * Types are defined in schema.ts — import them from there directly.\n */\n\nimport { extractFieldRefs } from './cel';\nimport type { DatasourceConfigSchema, ConfigField, ConfigGroup, FieldOverride } from '../../../schema';\n\n/**\n * Resolve a schema's groups into arrays of ConfigField objects.\n * If the schema has no groups, returns a single group containing all non-virtual fields.\n */\nexport function resolveGroups(schema: DatasourceConfigSchema): Array<{ group: ConfigGroup; fields: ConfigField[] }> {\n const fieldMap = new Map<string, ConfigField>();\n for (const f of schema.fields) {\n fieldMap.set(f.id, f);\n }\n\n if (schema.groups && schema.groups.length > 0) {\n return schema.groups\n .slice()\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n .map((g) => ({\n group: g,\n fields: g.fieldRefs.map((ref) => fieldMap.get(ref)).filter((f): f is ConfigField => f != null),\n }));\n }\n\n // No groups: single step with all storage fields\n const allFields = schema.fields.filter((f) => f.kind !== 'virtual' && !f.isItemField);\n return [\n {\n group: { id: 'default', title: 'Configuration', fieldRefs: allFields.map((f) => f.id) },\n fields: allFields,\n },\n ];\n}\n\n/**\n * Build a virtual \"Required\" group containing all required fields, any parent\n * fields they depend on (via `dependsOn`), and any child fields that depend on\n * required fields. When the schema contains an \"auth\" group, its fields are\n * also pulled in (auth is effectively required for Prometheus/Loki/Tempo style\n * datasources). Fields are returned in schema order and de-duplicated.\n * Returns `null` when the virtual group would be empty.\n */\nexport function resolveRequiredFieldsGroup(\n schema: DatasourceConfigSchema\n): { group: ConfigGroup; fields: ConfigField[] } | null {\n const fieldMap = new Map<string, ConfigField>();\n for (const f of schema.fields) {\n fieldMap.set(f.id, f);\n }\n\n const requiredIds = new Set<string>();\n for (const f of schema.fields) {\n if (f.required || f.tags?.includes('pinned')) {\n requiredIds.add(f.id);\n }\n }\n\n // Include all fields from the \"auth\" group as effectively required\n const authGroup = schema.groups?.find((g) => g.id === 'auth');\n if (authGroup) {\n for (const ref of authGroup.fieldRefs) {\n if (fieldMap.has(ref)) {\n requiredIds.add(ref);\n }\n }\n }\n\n if (requiredIds.size === 0) {\n return null;\n }\n\n const includeIds = new Set<string>();\n\n // Required fields + parent fields they depend on\n for (const id of requiredIds) {\n includeIds.add(id);\n const f = fieldMap.get(id);\n if (f?.dependsOn) {\n for (const ref of extractFieldRefs(f.dependsOn)) {\n if (fieldMap.has(ref)) {\n includeIds.add(ref);\n }\n }\n }\n }\n\n // Child fields that depend on any required field\n for (const f of schema.fields) {\n if (f.dependsOn && !includeIds.has(f.id)) {\n const refs = extractFieldRefs(f.dependsOn);\n if (refs.some((ref) => requiredIds.has(ref))) {\n includeIds.add(f.id);\n }\n }\n }\n\n const virtualFields = schema.fields.filter((f) => includeIds.has(f.id));\n if (virtualFields.length === 0) {\n return null;\n }\n\n return {\n group: {\n id: '_required',\n title: 'General',\n fieldRefs: virtualFields.map((f) => f.id),\n },\n fields: virtualFields,\n };\n}\n\n/**\n * Unique form key for a field. Section-scoped fields (e.g. section:\"logs\", key:\"defaultTable\")\n * get a prefixed key (\"logs.defaultTable\") so they don't collide with top-level fields that\n * share the same key name.\n */\nexport function formKey(field: ConfigField): string {\n return field.section ? `${field.section}.${field.key}` : field.key;\n}\n\n/**\n * Resolve a possibly-dotted key against watchedValues from react-hook-form.\n * RHF's `watch()` returns nested objects for dotted Controller names\n * (e.g. \"logs.otelEnabled\" → { logs: { otelEnabled: true } }),\n * so a flat `obj[\"logs.otelEnabled\"]` lookup misses.\n *\n * For dotted keys we must try the nested path **first**: react-hook-form's\n * Controller `onChange` writes nested objects via its internal `set()`, but\n * `reset()` may have created a flat dotted key with the same name. After user\n * interaction the nested value is authoritative; the stale flat key must not\n * shadow it. This mirrors RHF's own `get()` semantics (nested-first, flat\n * fallback).\n */\nexport function getWatchedValue(watchedValues: Record<string, unknown>, key: string): unknown {\n // For dotted keys, prefer the nested path walk.\n if (key.includes('.')) {\n const parts = key.split('.');\n let current: unknown = watchedValues;\n for (const part of parts) {\n if (current == null || typeof current !== 'object') {\n // Nested path doesn't exist — fall back to flat key\n return watchedValues[key];\n }\n current = (current as Record<string, unknown>)[part];\n }\n if (current !== undefined) {\n return current;\n }\n // Nested walk yielded undefined — try flat key as fallback\n return watchedValues[key];\n }\n // Non-dotted key: direct property access\n return watchedValues[key];\n}\n\n/**\n * Parse a simple CEL-like dependsOn expression: \"fieldId == 'value'\" or \"fieldId != 'value'\".\n * Only single comparisons are supported — no &&, ||, or parentheses.\n * Field IDs may contain dots and underscores (e.g. \"jsonData.oauth2.oauth2_type\").\n * Values may be single-quoted, double-quoted, or unquoted literals (true/false/numbers).\n * Returns { field, value, negate } or null if unparseable.\n */\nexport function parseDependsOn(expr: string): { field: string; value: string; negate: boolean } | null {\n // Match: fieldRef == 'value' | fieldRef == \"value\" | fieldRef == literal\n // Field ref: word chars and dots, no parens/operators.\n // Unquoted values: non-whitespace, no quotes, no logical operators.\n const m = expr.match(/^([\\w.]+)\\s*(==|!=)\\s*(?:'([^']*)'|\"([^\"]*)\"|(\\S+))$/);\n if (!m) {\n return null;\n }\n return { field: m[1], value: (m[3] ?? m[4] ?? m[5]).trim(), negate: m[2] === '!=' };\n}\n\n/**\n * Evaluate a parsed dependsOn condition against a value.\n * Handles both == and != operators.\n */\nexport function evaluateDependsOn(parsed: { value: string; negate: boolean }, currentValue: unknown): boolean {\n const matches = String(currentValue ?? '') === parsed.value;\n return parsed.negate ? !matches : matches;\n}\n\n/**\n * Resolve the first matching override for a field given current form values.\n * Override `when` uses the same \"fieldId == 'value'\" syntax as dependsOn.\n * Returns the matching override or undefined if none match.\n */\nexport function resolveActiveOverride(\n field: ConfigField,\n watchedValues: Record<string, unknown>,\n fieldById: Map<string, ConfigField>\n): FieldOverride | undefined {\n if (!field.overrides || field.overrides.length === 0) {\n return undefined;\n }\n for (const ov of field.overrides) {\n const parsed = parseDependsOn(ov.when);\n if (!parsed) {\n continue;\n }\n const depField = fieldById.get(parsed.field);\n const depKey = depField ? formKey(depField) : parsed.field;\n if (evaluateDependsOn(parsed, getWatchedValue(watchedValues, depKey))) {\n return ov;\n }\n }\n return undefined;\n}\n\n/**\n * Resolve a field reference like \"root.basicAuth\" or \"jsonData.oauthPassThru\"\n * to its current value from a flat form values map, using the schema's field definitions.\n */\nfunction resolveFieldValue(ref: string, values: Record<string, unknown>, fields: ConfigField[]): unknown {\n // Try direct match on formKey first\n if (ref in values) {\n return values[ref];\n }\n // Try matching by field ID → formKey\n const field = fields.find((f) => f.id === ref);\n if (field) {\n const fk = formKey(field);\n if (fk in values) {\n return values[fk];\n }\n }\n return undefined;\n}\n\n/**\n * Evaluate a simple computed.read expression against form values.\n * Supports patterns used in dsconfig schemas:\n * - \"fieldRef == true ? 'a' : (fieldRef == true ? 'b' : 'c')\"\n * - Simple ternary chains with equality checks\n * Falls back to the field's defaultValue if the expression can't be evaluated.\n */\nexport function evaluateComputedRead(expr: string, values: Record<string, unknown>, fields: ConfigField[]): unknown {\n // Recursively evaluate ternary: condition ? trueVal : falseVal\n function evalExpr(s: string): unknown {\n s = s.trim();\n\n // Strip outer parens\n if (s.startsWith('(') && findMatchingParen(s, 0) === s.length - 1) {\n s = s.slice(1, -1).trim();\n }\n\n // Ternary: find top-level \"?\"\n const qIdx = findTopLevel(s, '?');\n if (qIdx !== -1) {\n const condition = s.slice(0, qIdx).trim();\n const rest = s.slice(qIdx + 1);\n const cIdx = findTopLevel(rest, ':');\n if (cIdx !== -1) {\n const trueExpr = rest.slice(0, cIdx).trim();\n const falseExpr = rest.slice(cIdx + 1).trim();\n return evalCondition(condition) ? evalExpr(trueExpr) : evalExpr(falseExpr);\n }\n }\n\n // String literal\n const strMatch = s.match(/^'([^']*)'$/) ?? s.match(/^\"([^\"]*)\"$/);\n if (strMatch) {\n return strMatch[1];\n }\n // Boolean/number literals\n if (s === 'true') {\n return true;\n }\n if (s === 'false') {\n return false;\n }\n if (/^-?\\d+(\\.\\d+)?$/.test(s)) {\n return Number(s);\n }\n\n // Field reference\n return resolveFieldValue(s, values, fields);\n }\n\n function evalCondition(cond: string): boolean {\n // \"ref == value\" or \"ref != value\"\n const eqMatch = cond.match(/^(.+?)\\s*(==|!=)\\s*(.+)$/);\n if (eqMatch) {\n const left = evalExpr(eqMatch[1]);\n const right = evalExpr(eqMatch[3]);\n const eq = String(left) === String(right);\n return eqMatch[2] === '==' ? eq : !eq;\n }\n // Truthy check\n return !!evalExpr(cond);\n }\n\n function findMatchingParen(s: string, start: number): number {\n let depth = 0;\n for (let i = start; i < s.length; i++) {\n if (s[i] === '(') {\n depth++;\n } else if (s[i] === ')') {\n depth--;\n if (depth === 0) {\n return i;\n }\n }\n }\n return -1;\n }\n\n function findTopLevel(s: string, char: string): number {\n let depth = 0;\n let inStr: string | null = null;\n for (let i = 0; i < s.length; i++) {\n const c = s[i];\n if (inStr) {\n if (c === inStr) {\n inStr = null;\n }\n continue;\n }\n if (c === \"'\" || c === '\"') {\n inStr = c;\n continue;\n }\n if (c === '(') {\n depth++;\n continue;\n }\n if (c === ')') {\n depth--;\n continue;\n }\n if (depth === 0 && c === char) {\n return i;\n }\n }\n return -1;\n }\n\n try {\n return evalExpr(expr);\n } catch {\n return undefined;\n }\n}\n\n/**\n * Compute initial values for all virtual fields that have storage.computed.read expressions.\n * Call after loading existing storage field values.\n */\nexport function computeVirtualFieldValues(\n schema: DatasourceConfigSchema,\n existingValues: Record<string, unknown>\n): Record<string, unknown> {\n const virtualValues: Record<string, unknown> = {};\n for (const field of schema.fields) {\n if (field.kind !== 'virtual') {\n continue;\n }\n const fk = formKey(field);\n if (field.storage?.type === 'computed' && field.storage.read) {\n const val = evaluateComputedRead(field.storage.read, existingValues, schema.fields);\n if (val !== undefined) {\n virtualValues[fk] = val;\n } else if (field.defaultValue !== undefined) {\n virtualValues[fk] = field.defaultValue;\n }\n } else if (field.defaultValue !== undefined) {\n virtualValues[fk] = field.defaultValue;\n }\n }\n return virtualValues;\n}\n","import type { DatasourceConfigSchema } from '../schema';\n\nimport alertmanagerSchema from './alertmanager.schema.json';\nimport cloudwatchSchema from './cloudwatch.schema.json';\nimport elasticsearchSchema from './elasticsearch.schema.json';\nimport grafanaAmazonprometheusDatasourceSchema from './grafana-amazonprometheus-datasource.schema.json';\nimport grafanaAdobeanalyticsDatasourceSchema from './grafana-adobeanalytics-datasource.schema.json';\nimport grafanaAppdynamicsDatasourceSchema from './grafana-appdynamics-datasource.schema.json';\nimport grafanaAstradbDatasourceSchema from './grafana-astradb-datasource.schema.json';\nimport grafanaAthenaDatasourceSchema from './grafana-athena-datasource.schema.json';\nimport grafanaAzureDataExplorerDatasourceSchema from './grafana-azure-data-explorer-datasource.schema.json';\nimport grafanaAzureMonitorDatasourceSchema from './grafana-azure-monitor-datasource.schema.json';\nimport grafanaAzuredevopsDatasourceSchema from './grafana-azuredevops-datasource.schema.json';\nimport grafanaAzureprometheusDatasourceSchema from './grafana-azureprometheus-datasource.schema.json';\nimport grafanaBigqueryDatasourceSchema from './grafana-bigquery-datasource.schema.json';\nimport grafanaClickhouseDatasourceSchema from './grafana-clickhouse-datasource.schema.json';\nimport grafanaCockroachdbDatasourceSchema from './grafana-cockroachdb-datasource.schema.json';\nimport grafanaDatabricksDatasourceSchema from './grafana-databricks-datasource.schema.json';\nimport grafanaDatadogDatasourceSchema from './grafana-datadog-datasource.schema.json';\nimport grafanaDynatraceDatasourceSchema from './grafana-dynatrace-datasource.schema.json';\nimport grafanaFalconlogscaleDatasourceSchema from './grafana-falconlogscale-datasource.schema.json';\nimport grafanaGithubDatasourceSchema from './grafana-github-datasource.schema.json';\nimport grafanaGitlabDatasourceSchema from './grafana-gitlab-datasource.schema.json';\nimport grafanaGooglesheetsDatasourceSchema from './grafana-googlesheets-datasource.schema.json';\nimport grafanaHoneycombDatasourceSchema from './grafana-honeycomb-datasource.schema.json';\nimport grafanaIotSitewiseDatasourceSchema from './grafana-iot-sitewise-datasource.schema.json';\nimport grafanaJiraDatasourceSchema from './grafana-jira-datasource.schema.json';\nimport grafanaLookerDatasourceSchema from './grafana-looker-datasource.schema.json';\nimport grafanaMongodbDatasourceSchema from './grafana-mongodb-datasource.schema.json';\nimport grafanaMqttDatasourceSchema from './grafana-mqtt-datasource.schema.json';\nimport grafanaNewrelicDatasourceSchema from './grafana-newrelic-datasource.schema.json';\nimport grafanaOdbcDatasourceSchema from './grafana-odbc-datasource.schema.json';\nimport grafanaOpensearchDatasourceSchema from './grafana-opensearch-datasource.schema.json';\nimport grafanaOracleDatasourceSchema from './grafana-oracle-datasource.schema.json';\nimport grafanaPagerdutyDatasourceSchema from './grafana-pagerduty-datasource.schema.json';\nimport grafanaPostgresqlDatasourceSchema from './grafana-postgresql-datasource.schema.json';\nimport grafanaPyroscopeDatasourceSchema from './grafana-pyroscope-datasource.schema.json';\nimport grafanaRedshiftDatasourceSchema from './grafana-redshift-datasource.schema.json';\nimport grafanaSalesforceDatasourceSchema from './grafana-salesforce-datasource.schema.json';\nimport grafanaSaphanaDatasourceSchema from './grafana-saphana-datasource.schema.json';\nimport grafanaSentryDatasourceSchema from './grafana-sentry-datasource.schema.json';\nimport grafanaServicenowDatasourceSchema from './grafana-servicenow-datasource.schema.json';\nimport grafanaSnowflakeDatasourceSchema from './grafana-snowflake-datasource.schema.json';\nimport grafanaSplunkDatasourceSchema from './grafana-splunk-datasource.schema.json';\nimport grafanaSplunkobservabilityDatasourceSchema from './grafana-splunkobservability-datasource.schema.json';\nimport grafanaStravaDatasourceSchema from './grafana-strava-datasource.schema.json';\nimport grafanaSumologicDatasourceSchema from './grafana-sumologic-datasource.schema.json';\nimport grafanaSurrealdbDatasourceSchema from './grafana-surrealdb-datasource.schema.json';\nimport grafanaTimestreamDatasourceSchema from './grafana-timestream-datasource.schema.json';\nimport grafanaWavefrontDatasourceSchema from './grafana-wavefront-datasource.schema.json';\nimport grafanaXRayDatasourceSchema from './grafana-x-ray-datasource.schema.json';\nimport grafanaYugabyteDatasourceSchema from './grafana-yugabyte-datasource.schema.json';\nimport graphiteSchema from './graphite.schema.json';\nimport influxdbSchema from './influxdb.schema.json';\nimport jaegerSchema from './jaeger.schema.json';\nimport lokiSchema from './loki.schema.json';\nimport marcusolssonCsvDatasourceSchema from './marcusolsson-csv-datasource.schema.json';\nimport marcusolssonJsonDatasourceSchema from './marcusolsson-json-datasource.schema.json';\nimport mssqlSchema from './mssql.schema.json';\nimport mysqlSchema from './mysql.schema.json';\nimport opentsdbSchema from './opentsdb.schema.json';\nimport prometheusSchema from './prometheus.schema.json';\nimport stackdriverSchema from './stackdriver.schema.json';\nimport tempoSchema from './tempo.schema.json';\nimport yesoreyeramInfinityDatasourceSchema from './yesoreyeram-infinity-datasource.schema.json';\nimport zipkinSchema from './zipkin.schema.json';\n\nconst asSchema = (s: unknown) => s as DatasourceConfigSchema;\n\nconst schemaRegistry = new Map<string, DatasourceConfigSchema>([\n ['alertmanager', asSchema(alertmanagerSchema)],\n ['cloudwatch', asSchema(cloudwatchSchema)],\n ['elasticsearch', asSchema(elasticsearchSchema)],\n ['grafana-amazonprometheus-datasource', asSchema(grafanaAmazonprometheusDatasourceSchema)],\n ['grafana-adobeanalytics-datasource', asSchema(grafanaAdobeanalyticsDatasourceSchema)],\n ['grafana-appdynamics-datasource', asSchema(grafanaAppdynamicsDatasourceSchema)],\n ['grafana-astradb-datasource', asSchema(grafanaAstradbDatasourceSchema)],\n ['grafana-athena-datasource', asSchema(grafanaAthenaDatasourceSchema)],\n ['grafana-azure-data-explorer-datasource', asSchema(grafanaAzureDataExplorerDatasourceSchema)],\n ['grafana-azure-monitor-datasource', asSchema(grafanaAzureMonitorDatasourceSchema)],\n ['grafana-azuredevops-datasource', asSchema(grafanaAzuredevopsDatasourceSchema)],\n ['grafana-azureprometheus-datasource', asSchema(grafanaAzureprometheusDatasourceSchema)],\n ['grafana-bigquery-datasource', asSchema(grafanaBigqueryDatasourceSchema)],\n ['grafana-clickhouse-datasource', asSchema(grafanaClickhouseDatasourceSchema)],\n ['grafana-cockroachdb-datasource', asSchema(grafanaCockroachdbDatasourceSchema)],\n ['grafana-databricks-datasource', asSchema(grafanaDatabricksDatasourceSchema)],\n ['grafana-datadog-datasource', asSchema(grafanaDatadogDatasourceSchema)],\n ['grafana-dynatrace-datasource', asSchema(grafanaDynatraceDatasourceSchema)],\n ['grafana-falconlogscale-datasource', asSchema(grafanaFalconlogscaleDatasourceSchema)],\n ['grafana-github-datasource', asSchema(grafanaGithubDatasourceSchema)],\n ['grafana-gitlab-datasource', asSchema(grafanaGitlabDatasourceSchema)],\n ['grafana-googlesheets-datasource', asSchema(grafanaGooglesheetsDatasourceSchema)],\n ['grafana-honeycomb-datasource', asSchema(grafanaHoneycombDatasourceSchema)],\n ['grafana-iot-sitewise-datasource', asSchema(grafanaIotSitewiseDatasourceSchema)],\n ['grafana-jira-datasource', asSchema(grafanaJiraDatasourceSchema)],\n ['grafana-looker-datasource', asSchema(grafanaLookerDatasourceSchema)],\n ['grafana-mongodb-datasource', asSchema(grafanaMongodbDatasourceSchema)],\n ['grafana-mqtt-datasource', asSchema(grafanaMqttDatasourceSchema)],\n ['grafana-newrelic-datasource', asSchema(grafanaNewrelicDatasourceSchema)],\n ['grafana-odbc-datasource', asSchema(grafanaOdbcDatasourceSchema)],\n ['grafana-opensearch-datasource', asSchema(grafanaOpensearchDatasourceSchema)],\n ['grafana-oracle-datasource', asSchema(grafanaOracleDatasourceSchema)],\n ['grafana-pagerduty-datasource', asSchema(grafanaPagerdutyDatasourceSchema)],\n ['grafana-postgresql-datasource', asSchema(grafanaPostgresqlDatasourceSchema)],\n ['grafana-pyroscope-datasource', asSchema(grafanaPyroscopeDatasourceSchema)],\n ['grafana-redshift-datasource', asSchema(grafanaRedshiftDatasourceSchema)],\n ['grafana-salesforce-datasource', asSchema(grafanaSalesforceDatasourceSchema)],\n ['grafana-saphana-datasource', asSchema(grafanaSaphanaDatasourceSchema)],\n ['grafana-sentry-datasource', asSchema(grafanaSentryDatasourceSchema)],\n ['grafana-servicenow-datasource', asSchema(grafanaServicenowDatasourceSchema)],\n ['grafana-snowflake-datasource', asSchema(grafanaSnowflakeDatasourceSchema)],\n ['grafana-splunk-datasource', asSchema(grafanaSplunkDatasourceSchema)],\n ['grafana-splunkobservability-datasource', asSchema(grafanaSplunkobservabilityDatasourceSchema)],\n ['grafana-strava-datasource', asSchema(grafanaStravaDatasourceSchema)],\n ['grafana-sumologic-datasource', asSchema(grafanaSumologicDatasourceSchema)],\n ['grafana-surrealdb-datasource', asSchema(grafanaSurrealdbDatasourceSchema)],\n ['grafana-timestream-datasource', asSchema(grafanaTimestreamDatasourceSchema)],\n ['grafana-wavefront-datasource', asSchema(grafanaWavefrontDatasourceSchema)],\n ['grafana-x-ray-datasource', asSchema(grafanaXRayDatasourceSchema)],\n ['grafana-yugabyte-datasource', asSchema(grafanaYugabyteDatasourceSchema)],\n ['graphite', asSchema(graphiteSchema)],\n ['influxdb', asSchema(influxdbSchema)],\n ['jaeger', asSchema(jaegerSchema)],\n ['loki', asSchema(lokiSchema)],\n ['marcusolsson-csv-datasource', asSchema(marcusolssonCsvDatasourceSchema)],\n ['marcusolsson-json-datasource', asSchema(marcusolssonJsonDatasourceSchema)],\n ['mssql', asSchema(mssqlSchema)],\n ['mysql', asSchema(mysqlSchema)],\n ['opentsdb', asSchema(opentsdbSchema)],\n ['prometheus', asSchema(prometheusSchema)],\n ['stackdriver', asSchema(stackdriverSchema)],\n ['tempo', asSchema(tempoSchema)],\n ['yesoreyeram-infinity-datasource', asSchema(yesoreyeramInfinityDatasourceSchema)],\n ['zipkin', asSchema(zipkinSchema)],\n]);\n\nexport function getConfigSchema(pluginType: string): DatasourceConfigSchema | null {\n return schemaRegistry.get(pluginType) ?? null;\n}\n","import type { DatasourceConfigSchema } from '../schema';\n\n/**\n * Generate LLM hints for select fields (used when creating datasources).\n */\nexport function generateLLMHint(schema: DatasourceConfigSchema): string {\n const hints: string[] = [];\n for (const field of schema.fields) {\n if (field.ui?.component !== 'select' || field.target !== 'jsonData' || field.kind === 'virtual') {\n continue;\n }\n const options = field.ui?.options ?? [];\n const values = options\n .map((opt) => {\n const isDefault = field.defaultValue != null && String(opt.value) === String(field.defaultValue);\n return isDefault ? `\"${opt.value}\" (default)` : `\"${opt.value}\"`;\n })\n .join(', ');\n if (values) {\n hints.push(`- ${field.label ?? field.key}: jsonData.${field.key} — values: ${values}`);\n }\n }\n return hints.join('\\n');\n}\n\n/**\n * Generate comprehensive structured field data for troubleshooting context.\n * Returns an array of field descriptors the LLM can use to render rich tables.\n */\nexport function generateTroubleshootingFields(schema: DatasourceConfigSchema): Array<{\n label: string;\n key: string;\n target: string;\n type: string;\n required: boolean;\n description?: string;\n defaultValue?: unknown;\n options?: string[];\n section?: string;\n dependsOn?: string;\n}> {\n const result: Array<{\n label: string;\n key: string;\n target: string;\n type: string;\n required: boolean;\n description?: string;\n defaultValue?: unknown;\n options?: string[];\n section?: string;\n dependsOn?: string;\n }> = [];\n for (const field of schema.fields) {\n if (field.kind === 'virtual' || field.isItemField) {\n continue;\n }\n const entry: (typeof result)[0] = {\n label: field.label ?? field.key,\n key: field.target === 'root' ? field.key : `${field.target}.${field.key}`,\n target: field.target ?? 'jsonData',\n type: field.valueType,\n required: !!field.required,\n };\n if (field.description) {\n entry.description = field.description;\n }\n if (field.defaultValue != null) {\n entry.defaultValue = field.defaultValue;\n }\n if (field.ui?.options && field.ui.options.length > 0) {\n entry.options = field.ui.options.map((o) => String(o.value));\n }\n if (field.section) {\n entry.section = field.section;\n }\n if (field.dependsOn) {\n entry.dependsOn = field.dependsOn;\n }\n result.push(entry);\n }\n return result;\n}\n","export const ROOT_CONFIG_FIELDS = [\n 'name',\n 'type',\n 'id',\n 'uid',\n 'access',\n 'url',\n 'basicAuth',\n 'basicAuthUser',\n 'user',\n 'isDefault',\n 'database',\n 'withCredentials',\n] as const;\n\ntype DatasourceConfig = Record<any, any>;\n\nexport const buildCreateDatasourcePayload = (input: DatasourceConfig): DatasourceConfig => {\n const body: DatasourceConfig = { name: input.name, type: input.type, access: 'proxy' };\n if (input.jsonData !== undefined) {\n body.jsonData = { ...(input.jsonData as DatasourceConfig) };\n }\n normalizeDatasourceConfig(body, input, { inferAuthMethod: true });\n return body;\n};\n\nexport const buildCloneDatasourcePayload = (source: DatasourceConfig, name: string): DatasourceConfig => {\n return { ...source, name, access: source.access ?? 'proxy', isDefault: false };\n};\n\nexport const buildUpdateDatasourcePayload = (\n existing: DatasourceConfig,\n input: DatasourceConfig\n): { body: DatasourceConfig; hasChanges: boolean } => {\n const body: DatasourceConfig = {\n name: existing.name,\n type: existing.type,\n access: existing.access,\n url: existing.url,\n database: existing.database,\n basicAuth: existing.basicAuth,\n basicAuthUser: existing.basicAuthUser,\n isDefault: existing.isDefault,\n user: existing.user,\n withCredentials: existing.withCredentials,\n jsonData: existing.jsonData,\n };\n let hasChanges = false;\n const UPDATE_COMPARABLE_FIELDS = ['name', 'url', 'database', 'isDefault', 'basicAuth'] as const;\n for (const key of UPDATE_COMPARABLE_FIELDS) {\n if (input[key] !== undefined && input[key] !== existing[key]) {\n body[key] = input[key];\n hasChanges = true;\n }\n }\n\n if (input.jsonData !== undefined) {\n body.jsonData = { ...((existing.jsonData ?? {}) as DatasourceConfig), ...(input.jsonData as DatasourceConfig) };\n hasChanges = true;\n hasChanges = normalizeDatasourceConfig(body, input) || hasChanges;\n }\n\n return { body, hasChanges };\n};\n\nconst normalizeDatasourceConfig = (\n body: DatasourceConfig,\n input: DatasourceConfig,\n options: { inferAuthMethod?: boolean } = {}\n): boolean => {\n const changed = hoistRootConfigFields(body, input);\n if (options.inferAuthMethod) {\n applyInferredAuthMethod(body, input);\n }\n return changed;\n};\n\nconst hoistRootConfigFields = (body: DatasourceConfig, input: DatasourceConfig): boolean => {\n const jsonData = (body.jsonData as DatasourceConfig | undefined) ?? {};\n let changed = false;\n\n for (const key of ROOT_CONFIG_FIELDS) {\n if (jsonData[key] === undefined) {\n continue;\n }\n\n if (input[key] === undefined) {\n body[key] = jsonData[key];\n changed = true;\n }\n\n delete jsonData[key];\n }\n\n body.jsonData = jsonData;\n return changed;\n};\n\nconst applyInferredAuthMethod = (body: DatasourceConfig, input: DatasourceConfig): void => {\n const jsonData = (body.jsonData as DatasourceConfig | undefined) ?? {};\n\n if (jsonData.authMethod !== undefined) {\n body.jsonData = jsonData;\n return;\n }\n\n if (jsonData.oauthPassThru === true) {\n jsonData.authMethod = 'forward_oauth';\n } else if (body.basicAuth === true || input.basicAuth === true) {\n jsonData.authMethod = 'basic';\n }\n\n body.jsonData = jsonData;\n};\n","// @ts-expect-error — js-yaml has no bundled type declarations; used only for scalar serialization\nimport yaml from 'js-yaml';\nimport { resolveGroups } from '../../components/ConfigEditor/DatasourceConfigWizard/config';\nimport { ROOT_CONFIG_FIELDS } from './dsconfig';\nimport type { AllowedValuesValidationRule, ConfigField, ConfigGroup, DatasourceConfigSchema } from '../schema';\n\ntype YamlRenderOptions = { jsonDataKeys?: string[]; secureKeys?: string[] };\n\n// ============================================================\n// Provisioning YAML generation\n// ============================================================\n\n/** Indent each line by `depth * 2` spaces. */\nfunction yamlIndent(depth: number): string {\n return ' '.repeat(depth);\n}\n\n/** Serialize a scalar value as a safe YAML string using js-yaml. */\nfunction yamlString(value: unknown): string {\n if (value === null || value === undefined) {\n return '\"\"';\n }\n const s = String(value);\n if (s === '') {\n return '\"\"';\n }\n return yaml.dump(s, { lineWidth: -1 }).trimEnd();\n}\n\n/** Format a value as YAML inline. */\nfunction yamlValue(value: unknown, depth: number): string {\n if (value === null || value === undefined) {\n return '\"\"';\n }\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false';\n }\n if (typeof value === 'number') {\n return String(value);\n }\n if (typeof value === 'string') {\n return yamlString(value);\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]';\n }\n const lines = value.map((item) => {\n if (typeof item === 'object' && item !== null && !Array.isArray(item)) {\n const entries = Object.entries(item as Record<string, unknown>);\n if (entries.length === 0) {\n return `${yamlIndent(depth)}- {}`;\n }\n const [firstKey, firstVal] = entries[0];\n const firstLine = `${yamlIndent(depth)}- ${yamlString(firstKey)}: ${yamlValue(firstVal, depth + 2)}`;\n const rest = entries\n .slice(1)\n .map(([k, v]) => `${yamlIndent(depth + 1)}${yamlString(k)}: ${yamlValue(v, depth + 2)}`);\n return [firstLine, ...rest].join('\\n');\n }\n return `${yamlIndent(depth)}- ${yamlValue(item, depth + 1)}`;\n });\n return '\\n' + lines.join('\\n');\n }\n if (typeof value === 'object') {\n const entries = Object.entries(value as Record<string, unknown>);\n if (entries.length === 0) {\n return '{}';\n }\n const lines = entries.map(([k, v]) => `${yamlIndent(depth)}${yamlString(k)}: ${yamlValue(v, depth + 1)}`);\n return '\\n' + lines.join('\\n');\n }\n return yamlString(value);\n}\n\n/** True if the field is a certificate or key (multiline secret). */\nfunction isCertField(field: ConfigField): boolean {\n const k = field.key.toLowerCase();\n return (\n field.target === 'secureJsonData' && (k.includes('cert') || k.includes('key') || field.ui?.component === 'textarea')\n );\n}\n\n/** True if the field should be excluded from provisioning YAML output. */\nfunction isExcludedFromProvisioning(field: ConfigField): boolean {\n if (field.kind === 'virtual') {\n return true;\n }\n if (field.isItemField) {\n return true;\n }\n // Fields tagged \"managed-by:*\" are auto-set by the wizard UI via effects.\n // Root fields like basicAuth still need to appear in provisioning YAML\n // because they are real storage fields. Only exclude managed jsonData fields.\n if (field.tags?.some((t) => t.startsWith('managed-by:')) && field.target !== 'root') {\n return true;\n }\n // Skip indexedPair storage — these are handled separately (e.g. httpHeaders)\n if (field.storage?.type === 'indexedPair') {\n return true;\n }\n return false;\n}\n\n/** Format a secureJsonData placeholder value. */\nfunction secretPlaceholder(field: ConfigField): string {\n if (isCertField(field)) {\n return '|\\n xxxxxx';\n }\n return 'xxxxxx';\n}\n\n/** Default YAML value for a field in template mode. */\nfunction templateValue(field: ConfigField): unknown {\n if (field.defaultValue !== undefined) {\n return field.defaultValue;\n }\n // Use first option value as a sensible default\n if (field.ui?.options && field.ui.options.length > 0) {\n return field.ui.options[0].value;\n }\n switch (field.valueType) {\n case 'string':\n return '';\n case 'number':\n return 0;\n case 'boolean':\n return false;\n case 'array':\n return [];\n case 'object':\n case 'map':\n return {};\n default:\n return '';\n }\n}\n\n/**\n * Format a YAML comment for a field in template mode.\n * Includes label, description, allowed values, and default.\n */\nfunction fieldComment(field: ConfigField, indent: string): string {\n const parts: string[] = [];\n const label = field.label ?? field.key;\n let line = label;\n if (field.required) {\n line += ' (REQUIRED)';\n }\n if (field.description) {\n line += ` — ${field.description}`;\n }\n parts.push(`${indent}# ${line}`);\n\n const options = field.ui?.options;\n if (options && options.length > 0) {\n const vals = options.map((o) => String(o.value)).join(', ');\n parts.push(`${indent}# Allowed values: ${vals}`);\n }\n\n const allowedValuesRule = field.validations?.find(\n (v): v is AllowedValuesValidationRule => v.type === 'allowedValues'\n );\n if (allowedValuesRule && !options) {\n const vals = allowedValuesRule.values.map((v) => String(v)).join(', ');\n parts.push(`${indent}# Allowed values: ${vals}`);\n }\n\n if (field.dependsOn) {\n parts.push(`${indent}# Only when: ${field.dependsOn}`);\n }\n\n return parts.join('\\n');\n}\n\nexport type ProvisioningYamlOptions = {\n /** Include comments with field descriptions. Default: true for template, false for export. */\n comments?: boolean;\n /** Name override (used in template mode). */\n name?: string;\n};\n\n/**\n * Generate a Grafana provisioning YAML from a dsconfig schema.\n * In template mode (no values), emits all fields with defaults and comments.\n * When values are provided, emits actual values — used for existing datasource export.\n */\nexport function toProvisioningYaml(\n schema: DatasourceConfigSchema,\n values?: Record<string, unknown>,\n options?: ProvisioningYamlOptions\n): string {\n const isTemplate = !values;\n const showComments = options?.comments ?? isTemplate;\n const indent2 = ' ';\n const indent3 = ' ';\n\n // Use schema groups to order fields logically (connection → auth → network → etc.)\n const groups = resolveGroups(schema);\n const rootFields: ConfigField[] = [];\n const jsonDataFieldsByGroup: Array<{ group: ConfigGroup; fields: ConfigField[] }> = [];\n const secureJsonDataFieldsByGroup: Array<{ group: ConfigGroup; fields: ConfigField[] }> = [];\n const virtualFieldsWithOptions: ConfigField[] = [];\n\n for (const { group, fields } of groups) {\n const jd: ConfigField[] = [];\n const sd: ConfigField[] = [];\n for (const field of fields) {\n // Collect virtual fields with UI options (e.g. auth.method) for comment-only output\n if (field.kind === 'virtual' && field.ui?.options && field.ui.options.length > 0) {\n virtualFieldsWithOptions.push(field);\n continue;\n }\n if (isExcludedFromProvisioning(field)) {\n continue;\n }\n switch (field.target) {\n case 'root':\n rootFields.push(field);\n break;\n case 'jsonData':\n jd.push(field);\n break;\n case 'secureJsonData':\n sd.push(field);\n break;\n }\n }\n if (jd.length > 0) {\n jsonDataFieldsByGroup.push({ group, fields: jd });\n }\n if (sd.length > 0) {\n secureJsonDataFieldsByGroup.push({ group, fields: sd });\n }\n }\n\n const allSecureJsonDataFields = secureJsonDataFieldsByGroup.flatMap((g) => g.fields);\n\n // Pick up root fields not referenced in any group (e.g. root.basicAuth is managed\n // by auth.method effects and not listed in the auth group's fieldRefs).\n const groupedFieldIds = new Set(groups.flatMap(({ group }) => group.fieldRefs));\n for (const field of schema.fields) {\n if (field.target === 'root' && !groupedFieldIds.has(field.id) && !isExcludedFromProvisioning(field)) {\n rootFields.push(field);\n }\n }\n\n const lines: string[] = [];\n lines.push('apiVersion: 1');\n lines.push('');\n lines.push('datasources:');\n lines.push(`${indent2.slice(2)}- name: ${yamlString(options?.name ?? values?.name ?? `my-${schema.pluginType}`)}`);\n lines.push(`${indent2}type: ${schema.pluginType}`);\n\n // In export mode, emit uid so the provisioning YAML can be used for idempotent upserts.\n if (!isTemplate && values?.uid) {\n lines.push(`${indent2}uid: ${yamlString(values.uid)}`);\n }\n\n // Root fields (url, basicAuth, basicAuthUser, database, etc.)\n const ALREADY_EMITTED_ROOT = new Set(['name', 'type', 'uid']);\n for (const field of rootFields) {\n if (ALREADY_EMITTED_ROOT.has(field.key)) {\n continue;\n }\n const val = values ? values[field.key] : templateValue(field);\n if (val === undefined || val === null) {\n continue;\n }\n // Skip false booleans in export mode to keep YAML clean\n if (!isTemplate && val === false) {\n continue;\n }\n if (showComments) {\n lines.push(fieldComment(field, indent2));\n }\n lines.push(`${indent2}${field.key}: ${yamlValue(val, 3)}`);\n }\n\n // Emit virtual fields with UI options as comments (e.g. auth.method selector)\n // These explain configuration choices even though they aren't stored directly.\n if (showComments) {\n for (const vf of virtualFieldsWithOptions) {\n const label = vf.label ?? vf.key;\n const opts = vf.ui!.options!.map((o) => `${String(o.value)} (${o.label})`).join(', ');\n lines.push(`${indent2}# ${label}: ${opts}`);\n if (vf.description) {\n lines.push(`${indent2}# ${vf.description}`);\n }\n }\n }\n\n // Collect jsonData keys emitted by schema fields so we can detect extra keys in export mode.\n const emittedJsonDataKeys = new Set<string>();\n const emittedSecureJsonDataKeys = new Set<string>();\n\n // jsonData section — ordered by schema groups\n const jsonDataValues = values?.jsonData as Record<string, unknown> | undefined;\n const hasJsonDataFromSchema = jsonDataFieldsByGroup.length > 0;\n const hasJsonDataFromValues = !isTemplate && jsonDataValues && Object.keys(jsonDataValues).length > 0;\n\n if (hasJsonDataFromSchema || hasJsonDataFromValues) {\n lines.push(`${indent2}jsonData:`);\n\n // Schema-declared fields, grouped by section\n for (const { group, fields: groupFields } of jsonDataFieldsByGroup) {\n if (showComments && jsonDataFieldsByGroup.length > 1) {\n lines.push(`${indent3}# --- ${group.title} ---`);\n }\n for (const field of groupFields) {\n const val = values ? getNestedValue(values, 'jsonData', field) : templateValue(field);\n if (val === undefined || val === null) {\n continue;\n }\n // In export mode, skip default-value fields to keep YAML minimal\n if (!isTemplate && field.defaultValue !== undefined && val === field.defaultValue) {\n continue;\n }\n emittedJsonDataKeys.add(field.key);\n if (showComments) {\n lines.push(fieldComment(field, indent3));\n }\n const rendered = yamlValue(val, 4);\n if (rendered.startsWith('\\n')) {\n lines.push(`${indent3}${field.key}:${rendered}`);\n } else {\n lines.push(`${indent3}${field.key}: ${rendered}`);\n }\n }\n }\n\n // In export mode, emit extra jsonData keys not declared in the schema\n // (e.g. httpHeaderName1 from indexedPair storage, or plugin-specific keys)\n if (!isTemplate && jsonDataValues) {\n for (const [key, val] of Object.entries(jsonDataValues)) {\n if (emittedJsonDataKeys.has(key)) {\n continue;\n }\n if (val === undefined || val === null) {\n continue;\n }\n const rendered = yamlValue(val, 4);\n if (rendered.startsWith('\\n')) {\n lines.push(`${indent3}${key}:${rendered}`);\n } else {\n lines.push(`${indent3}${key}: ${rendered}`);\n }\n }\n }\n }\n\n // secureJsonData section\n // In export mode, the Grafana API returns `secureJsonFields: { key: true }` indicating which\n // secure fields are actually configured. Only emit those — not all schema-declared secure fields.\n // In template mode, emit all schema-declared secure fields with placeholders.\n const secureJsonFields = (values?.secureJsonFields ?? {}) as Record<string, boolean>;\n const inferredSecureKeys = !isTemplate ? inferSecureJsonDataKeys(jsonDataValues) : [];\n\n // Filter secure fields: in export mode, only emit fields that are actually set on the datasource\n const activeSecureFields = isTemplate\n ? allSecureJsonDataFields\n : allSecureJsonDataFields.filter((f) => secureJsonFields[f.key] === true);\n\n if (activeSecureFields.length > 0 || inferredSecureKeys.length > 0) {\n lines.push(`${indent2}secureJsonData:`);\n for (const field of activeSecureFields) {\n emittedSecureJsonDataKeys.add(field.key);\n if (showComments) {\n lines.push(fieldComment(field, indent3));\n }\n lines.push(`${indent3}${field.key}: ${secretPlaceholder(field)}`);\n }\n // Inferred secure keys (e.g. httpHeaderValue1 matching httpHeaderName1)\n for (const key of inferredSecureKeys) {\n if (emittedSecureJsonDataKeys.has(key)) {\n continue;\n }\n lines.push(`${indent3}${key}: xxxxxx`);\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Infer secureJsonData keys from jsonData keys.\n * For example, httpHeaderName1 → httpHeaderValue1 (Grafana's indexedPair convention).\n */\nfunction inferSecureJsonDataKeys(jsonData: Record<string, unknown> | undefined): string[] {\n if (!jsonData) {\n return [];\n }\n const keys: string[] = [];\n for (const key of Object.keys(jsonData)) {\n const match = key.match(/^httpHeaderName(\\d+)$/);\n if (match) {\n keys.push(`httpHeaderValue${match[1]}`);\n }\n }\n return keys;\n}\n\n/** Retrieve a nested value for a jsonData/secureJsonData field from a flat or nested values object. */\nfunction getNestedValue(values: Record<string, unknown>, target: string, field: ConfigField): unknown {\n const nested = values[target];\n if (nested && typeof nested === 'object') {\n return (nested as Record<string, unknown>)[field.key];\n }\n return undefined;\n}\n\n/**\n * Generate provisioning YAML from an existing Grafana datasource API response.\n * If a dsconfig schema is available, uses it for field ordering and comments.\n * If not, generates basic YAML from the raw API response.\n */\nexport function datasourceToProvisioningYaml(\n ds: Record<string, unknown>,\n schema: DatasourceConfigSchema | null\n): string {\n if (schema) {\n return toProvisioningYaml(schema, ds, { comments: false });\n }\n\n // No schema — generate basic YAML from the raw API response\n const lines: string[] = [];\n lines.push('apiVersion: 1');\n lines.push('');\n lines.push('datasources:');\n lines.push(` - name: ${yamlString(ds.name)}`);\n if (ds.uid) {\n lines.push(` uid: ${yamlString(ds.uid)}`);\n }\n lines.push(` type: ${yamlString(ds.type)}`);\n if (ds.url) {\n lines.push(` url: ${yamlString(ds.url)}`);\n }\n if (ds.database) {\n lines.push(` database: ${yamlString(ds.database)}`);\n }\n if (ds.isDefault) {\n lines.push(' isDefault: true');\n }\n if (ds.basicAuth) {\n lines.push(' basicAuth: true');\n if (ds.basicAuthUser) {\n lines.push(` basicAuthUser: ${yamlString(ds.basicAuthUser)}`);\n }\n }\n\n const jsonData = ds.jsonData as Record<string, unknown> | undefined;\n if (jsonData && Object.keys(jsonData).length > 0) {\n lines.push(' jsonData:');\n for (const [key, val] of Object.entries(jsonData)) {\n const rendered = yamlValue(val, 4);\n if (rendered.startsWith('\\n')) {\n lines.push(` ${key}:${rendered}`);\n } else {\n lines.push(` ${key}: ${rendered}`);\n }\n }\n }\n\n // secureJsonData is never returned by the API — emit placeholder comment\n lines.push(' # secureJsonData: (secrets are not exported — add manually)');\n lines.push(' # mySecret: xxxxxx');\n\n return lines.join('\\n');\n}\n\nfunction getYamlRenderOptions(ds: Record<string, unknown>): Required<YamlRenderOptions> {\n return {\n jsonDataKeys: Object.keys((ds.jsonData ?? {}) as Record<string, unknown>).sort(),\n secureKeys: [\n ...new Set([\n ...Object.keys((ds.secureJsonData ?? {}) as Record<string, unknown>),\n ...Object.keys((ds.secureJsonFields ?? {}) as Record<string, boolean>),\n ]),\n ].sort(),\n };\n}\n\nexport const configToYaml = (ds: Record<string, unknown>, options: YamlRenderOptions = {}): string => {\n const { jsonDataKeys, secureKeys } = {\n ...getYamlRenderOptions(ds),\n ...options,\n };\n const root: Record<string, unknown> = {};\n\n for (const key of ROOT_CONFIG_FIELDS) {\n root[key] = ds[key] ?? '';\n }\n\n const jsonData = (ds.jsonData ?? {}) as Record<string, unknown>;\n if (jsonDataKeys.length > 0) {\n const jsonDataYaml: Record<string, unknown> = {};\n for (const key of jsonDataKeys) {\n jsonDataYaml[key] = jsonData[key] ?? '';\n }\n root.jsonData = jsonDataYaml;\n }\n\n if (secureKeys.length > 0) {\n const secureJsonData: Record<string, string> = {};\n for (const key of secureKeys) {\n secureJsonData[key] = '********';\n }\n root.secureJsonData = secureJsonData;\n }\n\n return yaml.dump(root, { lineWidth: -1, sortKeys: false, noRefs: true }).trimEnd();\n};\n\nexport const formatYamlDiff = (existing: Record<string, unknown>, body: Record<string, unknown>): string => {\n const updated = { ...existing, ...body };\n\n const existingJD = (existing.jsonData ?? {}) as Record<string, unknown>;\n const updatedJD = (updated.jsonData ?? {}) as Record<string, unknown>;\n const jsonDataKeys = [...new Set([...Object.keys(existingJD), ...Object.keys(updatedJD)])].sort();\n\n const secureKeys = [\n ...new Set([\n ...Object.keys((existing.secureJsonData ?? {}) as Record<string, unknown>),\n ...Object.keys((existing.secureJsonFields ?? {}) as Record<string, boolean>),\n ...Object.keys((updated.secureJsonData ?? {}) as Record<string, unknown>),\n ...Object.keys((updated.secureJsonFields ?? {}) as Record<string, boolean>),\n ]),\n ].sort();\n\n const currentYaml = configToYaml(existing, { jsonDataKeys, secureKeys });\n const updatedYaml = configToYaml(updated, { jsonDataKeys, secureKeys });\n\n const oldLines = currentYaml.split('\\n');\n const newLines = updatedYaml.split('\\n');\n const maxLen = Math.max(oldLines.length, newLines.length);\n const diffLines: string[] = [];\n\n for (let i = 0; i < maxLen; i++) {\n const oldLine = oldLines[i];\n const newLine = newLines[i];\n if (oldLine === newLine) {\n diffLines.push(` ${oldLine}`);\n continue;\n }\n if (oldLine !== undefined) {\n diffLines.push(`-${oldLine}`);\n }\n if (newLine !== undefined) {\n diffLines.push(`+${newLine}`);\n }\n }\n\n return '```diff\\n' + diffLines.join('\\n') + '\\n```';\n};\n","import { useMemo } from 'react';\nimport { getConfigSchema } from '../registry';\nimport type { DatasourceConfigSchema } from '../schema';\n\ntype UseDatasourceSchemaResult = { schema: DatasourceConfigSchema | null; loading: boolean; error: string | null };\n\nexport function useDatasourceSchema(pluginType: string): UseDatasourceSchemaResult {\n const schema = useMemo(() => fetchConfigSchema(pluginType), [pluginType]);\n return { schema, loading: false, error: null };\n}\n\nexport function fetchConfigSchema(pluginType: string): DatasourceConfigSchema | null {\n if (!pluginType) {\n return null;\n }\n return getConfigSchema(pluginType);\n}\n"],"names":["celParse","celEvaluate","yaml","useMemo"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
@@ -1,234 +0,0 @@
1
- import React, { useState, useMemo, useCallback } from 'react';
2
- import { useStyles2, Spinner, Alert, LinkButton, Icon, Tooltip, Button, Select } from '@grafana/ui';
3
- import { formKey, getWatchedValue } from './config.js';
4
- import { SECURE_FIELD_CONFIGURED } from './datasource.js';
5
- import { isFieldRequired } from './fieldUtils.js';
6
- import { SchemaField } from './SchemaField.js';
7
- import { AuthorizationHeaderField } from './inputs/AuthorizationHeaderField.js';
8
- import { TabLayout } from './TabLayout.js';
9
- import { getWizardStyles } from './styles.js';
10
- import { useDatasourceConfigForm } from './hooks/useDatasourceConfigForm.js';
11
-
12
- function DatasourceConfigWizard(props) {
13
- const { schema, dsUid, dsName, onSuccess, onSaving, onRetest, healthError, renderActions, mode = "tab" } = props;
14
- const form = useDatasourceConfigForm({ schema, dsUid, onSuccess, onSaving });
15
- if (mode === "tab") {
16
- return /* @__PURE__ */ React.createElement(
17
- TabLayout,
18
- {
19
- form,
20
- schema,
21
- dsUid,
22
- dsName,
23
- onRetest,
24
- healthError,
25
- renderActions
26
- }
27
- );
28
- }
29
- return /* @__PURE__ */ React.createElement(
30
- WizardLayout,
31
- {
32
- form,
33
- schema,
34
- dsUid,
35
- dsName,
36
- onRetest,
37
- healthError,
38
- renderActions
39
- }
40
- );
41
- }
42
- function WizardLayout({ form, schema, dsUid, dsName, onRetest, healthError, renderActions }) {
43
- var _a, _b, _c;
44
- const styles = useStyles2(getWizardStyles);
45
- const [currentStep, setCurrentStep] = useState(0);
46
- const {
47
- resolvedGroups,
48
- fieldById,
49
- httpHeadersField,
50
- control,
51
- handleSubmit,
52
- trigger,
53
- errors,
54
- watchedValues,
55
- celContext,
56
- initializing,
57
- fetchError,
58
- submitting,
59
- submitError,
60
- readOnly,
61
- isFieldVisible,
62
- isFieldDisabled,
63
- onSubmit,
64
- setValue
65
- } = form;
66
- const arrowSteps = useMemo(() => {
67
- const requiredGroup = resolvedGroups.find((g) => g.group.id === "_required");
68
- if (!requiredGroup) {
69
- return new Set(resolvedGroups.map((_, i) => i));
70
- }
71
- const requiredFieldIds = new Set(requiredGroup.fields.map((f) => f.id));
72
- const steps = /* @__PURE__ */ new Set();
73
- for (let i = 0; i < resolvedGroups.length; i++) {
74
- const g = resolvedGroups[i];
75
- if (g.group.id === "_required" || g.fields.some((f) => !requiredFieldIds.has(f.id))) {
76
- steps.add(i);
77
- }
78
- }
79
- return steps;
80
- }, [resolvedGroups]);
81
- const currentResolved = resolvedGroups[currentStep];
82
- const isFirstStep = useMemo(() => {
83
- for (let i = 0; i < currentStep; i++) {
84
- if (arrowSteps.has(i)) {
85
- return false;
86
- }
87
- }
88
- return true;
89
- }, [currentStep, arrowSteps]);
90
- const isLastStep = useMemo(() => {
91
- for (let i = currentStep + 1; i < resolvedGroups.length; i++) {
92
- if (arrowSteps.has(i)) {
93
- return false;
94
- }
95
- }
96
- return true;
97
- }, [currentStep, arrowSteps, resolvedGroups.length]);
98
- const visibleFieldsForStep = useMemo(
99
- () => currentResolved ? currentResolved.fields.filter(isFieldVisible) : [],
100
- [currentResolved, isFieldVisible]
101
- );
102
- const currentGroupValid = useMemo(() => {
103
- if (!currentResolved) {
104
- return true;
105
- }
106
- for (const field of visibleFieldsForStep) {
107
- if (errors[formKey(field)]) {
108
- return false;
109
- }
110
- if (isFieldRequired(field, watchedValues, fieldById, celContext)) {
111
- const val = getWatchedValue(watchedValues, formKey(field));
112
- if (val === SECURE_FIELD_CONFIGURED) {
113
- continue;
114
- }
115
- if (val === void 0 || val === null || val === "") {
116
- return false;
117
- }
118
- }
119
- }
120
- return true;
121
- }, [currentResolved, errors, visibleFieldsForStep, watchedValues, fieldById, celContext]);
122
- const goNext = useCallback(async () => {
123
- if (!currentResolved) {
124
- return;
125
- }
126
- if (!readOnly) {
127
- const visibleKeys = visibleFieldsForStep.map((f) => formKey(f));
128
- const valid = await trigger(visibleKeys);
129
- if (!valid) {
130
- return;
131
- }
132
- }
133
- setCurrentStep((s) => {
134
- for (let i = s + 1; i < resolvedGroups.length; i++) {
135
- if (arrowSteps.has(i)) {
136
- return i;
137
- }
138
- }
139
- return s;
140
- });
141
- }, [currentResolved, visibleFieldsForStep, trigger, resolvedGroups.length, arrowSteps, readOnly]);
142
- const goPrev = useCallback(() => {
143
- setCurrentStep((s) => {
144
- for (let i = s - 1; i >= 0; i--) {
145
- if (arrowSteps.has(i)) {
146
- return i;
147
- }
148
- }
149
- return s;
150
- });
151
- }, [arrowSteps]);
152
- if (initializing) {
153
- return /* @__PURE__ */ React.createElement("div", { className: styles.container }, /* @__PURE__ */ React.createElement(Spinner, { size: "sm", inline: true }), " Loading configuration...");
154
- }
155
- if (fetchError) {
156
- return /* @__PURE__ */ React.createElement("div", { className: styles.container }, /* @__PURE__ */ React.createElement(Alert, { severity: "error", title: "Failed to load configuration" }, fetchError), /* @__PURE__ */ React.createElement("div", { className: styles.buttons }, /* @__PURE__ */ React.createElement(
157
- LinkButton,
158
- {
159
- variant: "secondary",
160
- size: "sm",
161
- icon: "external-link-alt",
162
- href: `/connections/datasources/edit/${dsUid}`
163
- },
164
- "Open datasource settings"
165
- )));
166
- }
167
- const allDisabled = submitting || readOnly;
168
- if (resolvedGroups.length === 0) {
169
- return null;
170
- }
171
- const currentGroup = currentResolved == null ? void 0 : currentResolved.group;
172
- return /* @__PURE__ */ React.createElement("div", { className: styles.container }, submitting && /* @__PURE__ */ React.createElement("div", { className: styles.overlay }, /* @__PURE__ */ React.createElement(Spinner, { size: "sm" }), /* @__PURE__ */ React.createElement("span", null, "Saving & testing\u2026")), readOnly && /* @__PURE__ */ React.createElement("div", { className: styles.readOnlyBanner }, /* @__PURE__ */ React.createElement(Icon, { name: "lock", size: "xs" }), /* @__PURE__ */ React.createElement("span", null, "Read-only \u2014 managed externally")), /* @__PURE__ */ React.createElement("div", { className: styles.navBar }, currentGroup && /* @__PURE__ */ React.createElement(Tooltip, { content: (_a = currentGroup.description) != null ? _a : currentGroup.title }, /* @__PURE__ */ React.createElement("span", { className: styles.navTitle }, currentGroup.title, /* @__PURE__ */ React.createElement("span", { className: styles.stepCount }, currentStep + 1, "/", resolvedGroups.length))), /* @__PURE__ */ React.createElement("div", { className: styles.navActions }, /* @__PURE__ */ React.createElement(Tooltip, { content: isFirstStep ? "First step" : `Previous: ${(_b = resolvedGroups[currentStep - 1]) == null ? void 0 : _b.group.title}` }, /* @__PURE__ */ React.createElement(
173
- Button,
174
- {
175
- variant: "secondary",
176
- fill: "text",
177
- size: "sm",
178
- icon: "angle-left",
179
- "aria-label": "Previous",
180
- onClick: goPrev,
181
- disabled: isFirstStep || submitting,
182
- type: "button"
183
- }
184
- )), /* @__PURE__ */ React.createElement(
185
- Select,
186
- {
187
- options: resolvedGroups.map((g, i) => ({ label: g.group.title, value: i })),
188
- value: currentStep,
189
- onChange: (v) => {
190
- if (v) {
191
- setCurrentStep(v.value);
192
- }
193
- },
194
- disabled: submitting,
195
- width: 18
196
- }
197
- ), /* @__PURE__ */ React.createElement(Tooltip, { content: isLastStep ? "Last step" : `Next: ${(_c = resolvedGroups[currentStep + 1]) == null ? void 0 : _c.group.title}` }, /* @__PURE__ */ React.createElement(
198
- Button,
199
- {
200
- variant: isLastStep || !readOnly && !currentGroupValid ? "secondary" : "primary",
201
- size: "sm",
202
- icon: "angle-right",
203
- "aria-label": "Next",
204
- onClick: goNext,
205
- disabled: isLastStep || submitting,
206
- type: "button"
207
- }
208
- )))), currentResolved && /* @__PURE__ */ React.createElement("form", { onSubmit: handleSubmit(onSubmit), className: styles.form }, visibleFieldsForStep.map((field) => /* @__PURE__ */ React.createElement(
209
- SchemaField,
210
- {
211
- key: formKey(field),
212
- field,
213
- control,
214
- errors,
215
- disabled: allDisabled || isFieldDisabled(field),
216
- dsUid,
217
- watchedValues,
218
- fieldById,
219
- celContext,
220
- setValue
221
- }
222
- )), (currentResolved.group.id === "_required" || currentResolved.group.id === "auth") && httpHeadersField && /* @__PURE__ */ React.createElement(
223
- AuthorizationHeaderField,
224
- {
225
- headersFieldKey: formKey(httpHeadersField),
226
- control,
227
- disabled: allDisabled,
228
- watchedValues
229
- }
230
- ), submitError && /* @__PURE__ */ React.createElement(Alert, { severity: "error", title: "Error" }, submitError), /* @__PURE__ */ React.createElement("div", { className: styles.buttons }, readOnly ? /* @__PURE__ */ React.createElement(Button, { variant: "primary", size: "sm", icon: "sync", onClick: onRetest, type: "button" }, "Test") : /* @__PURE__ */ React.createElement(Button, { variant: "primary", size: "sm", disabled: submitting || !currentGroupValid, type: "submit" }, submitting ? "Saving..." : "Save & Test"), healthError && (renderActions == null ? void 0 : renderActions({ dsUid, dsName, dsType: schema.pluginType, healthError })))));
231
- }
232
-
233
- export { DatasourceConfigWizard };
234
- //# sourceMappingURL=DatasourceConfigWizard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DatasourceConfigWizard.js","sources":["../../../../../src/components/ConfigEditor/DatasourceConfigWizard/DatasourceConfigWizard.tsx"],"sourcesContent":["import React, { type ReactNode, useCallback, useMemo, useState } from 'react';\nimport { useStyles2, Button, LinkButton, Select, Icon, Alert, Tooltip, Spinner } from '@grafana/ui';\nimport type { DatasourceConfigSchema } from '../../../schema/schema';\nimport { formKey, getWatchedValue } from './config';\nimport { SECURE_FIELD_CONFIGURED } from './datasource';\nimport { isFieldRequired } from './fieldUtils';\nimport { SchemaField } from './SchemaField';\nimport { AuthorizationHeaderField } from './inputs/AuthorizationHeaderField';\nimport { TabLayout } from './TabLayout';\nimport { getWizardStyles } from './styles';\nimport { useDatasourceConfigForm } from './hooks/useDatasourceConfigForm';\n\nexport type DatasourceConfigWizardProps = {\n schema: DatasourceConfigSchema;\n dsUid: string;\n dsName: string;\n onSuccess: (status: string, message?: string) => void;\n onSaving?: (saving: boolean) => void;\n onRetest?: () => void;\n onFollowup?: (intent: string) => void;\n healthError?: string;\n mode?: 'tab' | 'wizard';\n /** Optional render prop for custom action buttons (e.g. analyze/troubleshoot). */\n renderActions?: (props: { dsUid: string; dsName: string; dsType: string; healthError?: string }) => ReactNode;\n};\n\nexport function DatasourceConfigWizard(props: DatasourceConfigWizardProps) {\n const { schema, dsUid, dsName, onSuccess, onSaving, onRetest, healthError, renderActions, mode = 'tab' } = props;\n\n const form = useDatasourceConfigForm({ schema, dsUid, onSuccess, onSaving });\n\n if (mode === 'tab') {\n return (\n <TabLayout\n form={form}\n schema={schema}\n dsUid={dsUid}\n dsName={dsName}\n onRetest={onRetest}\n healthError={healthError}\n renderActions={renderActions}\n />\n );\n }\n\n return (\n <WizardLayout\n form={form}\n schema={schema}\n dsUid={dsUid}\n dsName={dsName}\n onRetest={onRetest}\n healthError={healthError}\n renderActions={renderActions}\n />\n );\n}\n\ntype LayoutProps = {\n form: ReturnType<typeof useDatasourceConfigForm>;\n schema: DatasourceConfigSchema;\n dsUid: string;\n dsName: string;\n onRetest?: () => void;\n healthError?: string;\n renderActions?: (props: { dsUid: string; dsName: string; dsType: string; healthError?: string }) => ReactNode;\n};\n\nfunction WizardLayout({ form, schema, dsUid, dsName, onRetest, healthError, renderActions }: LayoutProps) {\n const styles = useStyles2(getWizardStyles);\n const [currentStep, setCurrentStep] = useState(0);\n\n const {\n resolvedGroups,\n fieldById,\n httpHeadersField,\n control,\n handleSubmit,\n trigger,\n errors,\n watchedValues,\n celContext,\n initializing,\n fetchError,\n submitting,\n submitError,\n readOnly,\n isFieldVisible,\n isFieldDisabled,\n onSubmit,\n setValue,\n } = form;\n\n const arrowSteps = useMemo(() => {\n const requiredGroup = resolvedGroups.find((g) => g.group.id === '_required');\n if (!requiredGroup) {\n return new Set(resolvedGroups.map((_, i) => i));\n }\n const requiredFieldIds = new Set(requiredGroup.fields.map((f) => f.id));\n const steps = new Set<number>();\n for (let i = 0; i < resolvedGroups.length; i++) {\n const g = resolvedGroups[i];\n if (g.group.id === '_required' || g.fields.some((f) => !requiredFieldIds.has(f.id))) {\n steps.add(i);\n }\n }\n return steps;\n }, [resolvedGroups]);\n\n const currentResolved = resolvedGroups[currentStep];\n\n const isFirstStep = useMemo(() => {\n for (let i = 0; i < currentStep; i++) {\n if (arrowSteps.has(i)) {\n return false;\n }\n }\n return true;\n }, [currentStep, arrowSteps]);\n\n const isLastStep = useMemo(() => {\n for (let i = currentStep + 1; i < resolvedGroups.length; i++) {\n if (arrowSteps.has(i)) {\n return false;\n }\n }\n return true;\n }, [currentStep, arrowSteps, resolvedGroups.length]);\n\n const visibleFieldsForStep = useMemo(\n () => (currentResolved ? currentResolved.fields.filter(isFieldVisible) : []),\n [currentResolved, isFieldVisible]\n );\n\n const currentGroupValid = useMemo(() => {\n if (!currentResolved) {\n return true;\n }\n for (const field of visibleFieldsForStep) {\n if (errors[formKey(field)]) {\n return false;\n }\n if (isFieldRequired(field, watchedValues, fieldById, celContext)) {\n const val = getWatchedValue(watchedValues, formKey(field));\n if (val === SECURE_FIELD_CONFIGURED) {\n continue;\n }\n if (val === undefined || val === null || val === '') {\n return false;\n }\n }\n }\n return true;\n }, [currentResolved, errors, visibleFieldsForStep, watchedValues, fieldById, celContext]);\n\n const goNext = useCallback(async () => {\n if (!currentResolved) {\n return;\n }\n if (!readOnly) {\n const visibleKeys = visibleFieldsForStep.map((f) => formKey(f));\n const valid = await trigger(visibleKeys);\n if (!valid) {\n return;\n }\n }\n setCurrentStep((s) => {\n for (let i = s + 1; i < resolvedGroups.length; i++) {\n if (arrowSteps.has(i)) {\n return i;\n }\n }\n return s;\n });\n }, [currentResolved, visibleFieldsForStep, trigger, resolvedGroups.length, arrowSteps, readOnly]);\n\n const goPrev = useCallback(() => {\n setCurrentStep((s) => {\n for (let i = s - 1; i >= 0; i--) {\n if (arrowSteps.has(i)) {\n return i;\n }\n }\n return s;\n });\n }, [arrowSteps]);\n\n if (initializing) {\n return (\n <div className={styles.container}>\n <Spinner size=\"sm\" inline /> Loading configuration...\n </div>\n );\n }\n\n if (fetchError) {\n return (\n <div className={styles.container}>\n <Alert severity=\"error\" title=\"Failed to load configuration\">\n {fetchError}\n </Alert>\n <div className={styles.buttons}>\n <LinkButton\n variant=\"secondary\"\n size=\"sm\"\n icon=\"external-link-alt\"\n href={`/connections/datasources/edit/${dsUid}`}\n >\n Open datasource settings\n </LinkButton>\n </div>\n </div>\n );\n }\n\n const allDisabled = submitting || readOnly;\n\n if (resolvedGroups.length === 0) {\n return null;\n }\n\n const currentGroup = currentResolved?.group;\n\n return (\n <div className={styles.container}>\n {submitting && (\n <div className={styles.overlay}>\n <Spinner size=\"sm\" />\n <span>Saving & testing…</span>\n </div>\n )}\n {readOnly && (\n <div className={styles.readOnlyBanner}>\n <Icon name=\"lock\" size=\"xs\" />\n <span>Read-only — managed externally</span>\n </div>\n )}\n <div className={styles.navBar}>\n {currentGroup && (\n <Tooltip content={currentGroup.description ?? currentGroup.title}>\n <span className={styles.navTitle}>\n {currentGroup.title}\n <span className={styles.stepCount}>\n {currentStep + 1}/{resolvedGroups.length}\n </span>\n </span>\n </Tooltip>\n )}\n <div className={styles.navActions}>\n <Tooltip content={isFirstStep ? 'First step' : `Previous: ${resolvedGroups[currentStep - 1]?.group.title}`}>\n <Button\n variant=\"secondary\"\n fill=\"text\"\n size=\"sm\"\n icon=\"angle-left\"\n aria-label=\"Previous\"\n onClick={goPrev}\n disabled={isFirstStep || submitting}\n type=\"button\"\n />\n </Tooltip>\n <Select\n options={resolvedGroups.map((g, i) => ({ label: g.group.title, value: i }))}\n value={currentStep}\n onChange={(v) => {\n if (v) {\n setCurrentStep(v.value!);\n }\n }}\n disabled={submitting}\n width={18}\n />\n <Tooltip content={isLastStep ? 'Last step' : `Next: ${resolvedGroups[currentStep + 1]?.group.title}`}>\n <Button\n variant={isLastStep || (!readOnly && !currentGroupValid) ? 'secondary' : 'primary'}\n size=\"sm\"\n icon=\"angle-right\"\n aria-label=\"Next\"\n onClick={goNext}\n disabled={isLastStep || submitting}\n type=\"button\"\n />\n </Tooltip>\n </div>\n </div>\n\n {currentResolved && (\n <form onSubmit={handleSubmit(onSubmit)} className={styles.form}>\n {visibleFieldsForStep.map((field) => (\n <SchemaField\n key={formKey(field)}\n field={field}\n control={control}\n errors={errors}\n disabled={allDisabled || isFieldDisabled(field)}\n dsUid={dsUid}\n watchedValues={watchedValues}\n fieldById={fieldById}\n celContext={celContext}\n setValue={setValue}\n />\n ))}\n\n {(currentResolved.group.id === '_required' || currentResolved.group.id === 'auth') && httpHeadersField && (\n <AuthorizationHeaderField\n headersFieldKey={formKey(httpHeadersField)}\n control={control}\n disabled={allDisabled}\n watchedValues={watchedValues}\n />\n )}\n\n {submitError && (\n <Alert severity=\"error\" title=\"Error\">\n {submitError}\n </Alert>\n )}\n\n <div className={styles.buttons}>\n {readOnly ? (\n <Button variant=\"primary\" size=\"sm\" icon=\"sync\" onClick={onRetest} type=\"button\">\n Test\n </Button>\n ) : (\n <Button variant=\"primary\" size=\"sm\" disabled={submitting || !currentGroupValid} type=\"submit\">\n {submitting ? 'Saving...' : 'Save & Test'}\n </Button>\n )}\n {healthError && renderActions?.({ dsUid, dsName, dsType: schema.pluginType, healthError })}\n </div>\n </form>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- import React, { Component } from 'react';
2
- import { Alert } from '@grafana/ui';
3
-
4
- var __defProp$2 = Object.defineProperty;
5
- var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
- var __publicField$2 = (obj, key, value) => __defNormalProp$2(obj, key + "" , value);
7
- class DatasourceErrorBoundary extends Component {
8
- constructor() {
9
- super(...arguments);
10
- __publicField$2(this, "state", { error: null });
11
- }
12
- static getDerivedStateFromError(error) {
13
- return { error };
14
- }
15
- componentDidCatch(error, info) {
16
- console.error("[DatasourceConfigWizard] Caught error:", error, info.componentStack);
17
- }
18
- render() {
19
- if (this.state.error) {
20
- return /* @__PURE__ */ React.createElement(Alert, { severity: "warning", title: "Configuration wizard unavailable" }, "Could not load the configuration wizard", this.props.dsName ? ` for ${this.props.dsName}` : "", ". Use the Settings link to configure this datasource manually.");
21
- }
22
- return this.props.children;
23
- }
24
- }
25
-
26
- export { DatasourceErrorBoundary };
27
- //# sourceMappingURL=DatasourceErrorBoundary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DatasourceErrorBoundary.js","sources":["../../../../../src/components/ConfigEditor/DatasourceConfigWizard/DatasourceErrorBoundary.tsx"],"sourcesContent":["import React, { Component, type ReactNode, type ErrorInfo } from 'react';\nimport { Alert } from '@grafana/ui';\n\n/** Lightweight error boundary scoped to datasource config widgets — won't crash the host UI. */\nexport class DatasourceErrorBoundary extends Component<\n { children: ReactNode; dsName?: string },\n { error: Error | null }\n> {\n state: { error: Error | null } = { error: null };\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo) {\n console.error('[DatasourceConfigWizard] Caught error:', error, info.componentStack);\n }\n\n render() {\n if (this.state.error) {\n return (\n <Alert severity=\"warning\" title=\"Configuration wizard unavailable\">\n Could not load the configuration wizard\n {this.props.dsName ? ` for ${this.props.dsName}` : ''}. Use the Settings link to configure this datasource\n manually.\n </Alert>\n );\n }\n return this.props.children;\n }\n}\n"],"names":["__publicField"],"mappings":";;;;;;AAIO,MAAM,gCAAgC,SAAA,CAG3C;AAAA,EAHK,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAIL,IAAAA,eAAA,CAAA,IAAA,EAAA,OAAA,EAAiC,EAAE,OAAO,IAAA,EAAK,CAAA;AAAA,EAAA;AAAA,EAE/C,OAAO,yBAAyB,KAAA,EAAc;AAC5C,IAAA,OAAO,EAAE,KAAA,EAAM;AAAA,EACjB;AAAA,EAEA,iBAAA,CAAkB,OAAc,IAAA,EAAiB;AAC/C,IAAA,OAAA,CAAQ,KAAA,CAAM,wCAAA,EAA0C,KAAA,EAAO,IAAA,CAAK,cAAc,CAAA;AAAA,EACpF;AAAA,EAEA,MAAA,GAAS;AACP,IAAA,IAAI,IAAA,CAAK,MAAM,KAAA,EAAO;AACpB,MAAA,2CACG,KAAA,EAAA,EAAM,QAAA,EAAS,SAAA,EAAU,KAAA,EAAM,sCAAmC,yCAAA,EAEhE,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,QAAQ,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,CAAA,GAAK,IAAG,gEAExD,CAAA;AAAA,IAEJ;AACA,IAAA,OAAO,KAAK,KAAA,CAAM,QAAA;AAAA,EACpB;AACF;;;;"}