@perses-dev/plugin-system 0.0.0-snapshot-panel-extra-content-2-2767e21 → 0.0.0-snapshot-scatter-chart-embed-8efdfab

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 (373) hide show
  1. package/dist/cjs/components/CalculationSelector/CalculationSelector.js +6 -4
  2. package/dist/cjs/components/CalculationSelector/index.js +10 -8
  3. package/dist/cjs/components/DatasourceEditorForm/DatasourceEditorForm.js +350 -0
  4. package/dist/cjs/components/DatasourceEditorForm/index.js +30 -0
  5. package/dist/cjs/components/DatasourceSelect.js +135 -25
  6. package/dist/cjs/components/LegendOptionsEditor/LegendOptionsEditor.js +18 -16
  7. package/dist/cjs/components/LegendOptionsEditor/index.js +10 -8
  8. package/dist/cjs/components/OptionsEditorRadios/OptionsEditorRadios.js +69 -0
  9. package/dist/cjs/components/OptionsEditorRadios/index.js +30 -0
  10. package/dist/cjs/components/{OptionsEditorTabs/TabPanel.js → OptionsEditorTabPanel/OptionsEditorTabPanel.js} +8 -6
  11. package/dist/cjs/components/OptionsEditorTabPanel/index.js +30 -0
  12. package/dist/cjs/components/OptionsEditorTabs/OptionsEditorTabs.js +10 -8
  13. package/dist/cjs/components/OptionsEditorTabs/index.js +10 -8
  14. package/dist/cjs/components/PanelSpecEditor/PanelSpecEditor.js +55 -14
  15. package/dist/cjs/components/PanelSpecEditor/index.js +10 -8
  16. package/dist/cjs/components/PluginEditor/PluginEditor.js +24 -31
  17. package/dist/cjs/components/PluginEditor/index.js +11 -9
  18. package/dist/cjs/components/PluginEditor/plugin-editor-api.js +5 -3
  19. package/dist/cjs/components/PluginKindSelect/PluginKindSelect.js +23 -12
  20. package/dist/cjs/components/PluginKindSelect/index.js +10 -8
  21. package/dist/cjs/components/PluginRegistry/PluginRegistry.js +11 -9
  22. package/dist/cjs/components/PluginRegistry/index.js +10 -8
  23. package/dist/cjs/components/PluginRegistry/plugin-indexes.js +6 -2
  24. package/dist/cjs/components/PluginSpecEditor/PluginSpecEditor.js +6 -4
  25. package/dist/cjs/components/PluginSpecEditor/index.js +10 -8
  26. package/dist/cjs/components/ProjectSelect.js +96 -0
  27. package/dist/cjs/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.js +27 -23
  28. package/dist/cjs/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.js +21 -19
  29. package/dist/cjs/components/TimeSeriesQueryEditor/index.js +10 -8
  30. package/dist/cjs/components/TraceQueryEditor/TraceQueryEditor.js +143 -0
  31. package/dist/cjs/components/TraceQueryEditor/TraceQueryInput.js +96 -0
  32. package/dist/cjs/components/TraceQueryEditor/index.js +30 -0
  33. package/dist/cjs/components/Variables/VariableEditorForm/VariableEditorForm.js +438 -229
  34. package/dist/cjs/components/Variables/VariableEditorForm/VariablePreview.js +32 -28
  35. package/dist/cjs/components/Variables/VariableEditorForm/index.js +11 -9
  36. package/dist/cjs/components/Variables/VariableEditorForm/variable-editor-form-model.js +35 -36
  37. package/dist/cjs/components/Variables/index.js +11 -9
  38. package/dist/cjs/components/Variables/variable-model.js +17 -9
  39. package/dist/cjs/components/index.js +23 -18
  40. package/dist/cjs/constants/index.js +10 -8
  41. package/dist/cjs/constants/user-interface-text.js +3 -1
  42. package/dist/cjs/context/ProjectStoreProvider.js +78 -0
  43. package/dist/cjs/context/index.js +30 -0
  44. package/dist/cjs/context/query-params.js +49 -0
  45. package/dist/cjs/index.js +17 -13
  46. package/dist/cjs/model/index.js +18 -15
  47. package/dist/cjs/model/legend.js +32 -20
  48. package/dist/cjs/model/panels.js +2 -2
  49. package/dist/cjs/model/plugin-base.js +2 -2
  50. package/dist/cjs/model/plugin-loading.js +3 -1
  51. package/dist/cjs/model/trace-queries.js +16 -0
  52. package/dist/cjs/runtime/DataQueriesProvider/DataQueriesProvider.js +67 -35
  53. package/dist/cjs/runtime/DataQueriesProvider/index.js +11 -9
  54. package/dist/cjs/runtime/DataQueriesProvider/model.js +81 -0
  55. package/dist/cjs/runtime/TimeRangeProvider/TimeRangeProvider.js +43 -26
  56. package/dist/cjs/runtime/TimeRangeProvider/TimeRangeProviderWithQueryParams.js +43 -0
  57. package/dist/cjs/runtime/TimeRangeProvider/index.js +12 -9
  58. package/dist/cjs/runtime/TimeRangeProvider/query-params.js +41 -55
  59. package/dist/cjs/runtime/TimeRangeProvider/refresh-interval.js +30 -0
  60. package/dist/cjs/runtime/builtin-variables.js +81 -0
  61. package/dist/cjs/runtime/datasources.js +31 -12
  62. package/dist/cjs/runtime/index.js +17 -13
  63. package/dist/cjs/runtime/plugin-registry.js +41 -11
  64. package/dist/cjs/runtime/template-variables.js +96 -4
  65. package/dist/cjs/runtime/time-series-queries.js +39 -27
  66. package/dist/cjs/runtime/trace-queries.js +76 -0
  67. package/dist/cjs/stories/shared-utils/decorators/WithDataQueries.js +7 -5
  68. package/dist/cjs/stories/shared-utils/decorators/WithPluginRegistry.js +18 -15
  69. package/dist/cjs/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.js +42 -0
  70. package/dist/cjs/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.js +31 -13
  71. package/dist/cjs/stories/shared-utils/decorators/WithPluginSystemTemplateVariables.js +6 -4
  72. package/dist/cjs/stories/shared-utils/decorators/WithTimeRange.js +9 -7
  73. package/dist/cjs/stories/shared-utils/decorators/index.js +15 -12
  74. package/dist/cjs/stories/shared-utils/index.js +10 -8
  75. package/dist/cjs/test/index.js +11 -8
  76. package/dist/cjs/test/mock-data.js +80 -0
  77. package/dist/cjs/test/render.js +13 -11
  78. package/dist/cjs/test/test-plugins/bert/index.js +14 -10
  79. package/dist/cjs/test/test-plugins/ernie/index.js +13 -9
  80. package/dist/cjs/test/test-plugins/index.js +11 -9
  81. package/dist/cjs/test-utils/index.js +10 -8
  82. package/dist/cjs/test-utils/mock-plugin-registry.js +8 -4
  83. package/dist/cjs/utils/action.js +43 -0
  84. package/dist/cjs/utils/index.js +11 -8
  85. package/dist/cjs/utils/variables.js +26 -8
  86. package/dist/cjs/validation/datasource.js +30 -0
  87. package/dist/cjs/validation/index.js +33 -0
  88. package/dist/cjs/validation/resource.js +24 -0
  89. package/dist/cjs/validation/role.js +85 -0
  90. package/dist/cjs/validation/rolebinding.js +55 -0
  91. package/dist/cjs/validation/secret.js +176 -0
  92. package/dist/cjs/validation/variable.js +48 -0
  93. package/dist/components/CalculationSelector/CalculationSelector.js.map +1 -1
  94. package/dist/components/CalculationSelector/index.js.map +1 -1
  95. package/dist/components/DatasourceEditorForm/DatasourceEditorForm.d.ts +15 -0
  96. package/dist/components/DatasourceEditorForm/DatasourceEditorForm.d.ts.map +1 -0
  97. package/dist/components/DatasourceEditorForm/DatasourceEditorForm.js +342 -0
  98. package/dist/components/DatasourceEditorForm/DatasourceEditorForm.js.map +1 -0
  99. package/dist/components/DatasourceEditorForm/index.d.ts +2 -0
  100. package/dist/components/DatasourceEditorForm/index.d.ts.map +1 -0
  101. package/dist/components/DatasourceEditorForm/index.js +15 -0
  102. package/dist/components/DatasourceEditorForm/index.js.map +1 -0
  103. package/dist/components/DatasourceSelect.d.ts +6 -0
  104. package/dist/components/DatasourceSelect.d.ts.map +1 -1
  105. package/dist/components/DatasourceSelect.js +118 -23
  106. package/dist/components/DatasourceSelect.js.map +1 -1
  107. package/dist/components/LegendOptionsEditor/LegendOptionsEditor.js +2 -2
  108. package/dist/components/LegendOptionsEditor/LegendOptionsEditor.js.map +1 -1
  109. package/dist/components/LegendOptionsEditor/index.js.map +1 -1
  110. package/dist/components/OptionsEditorRadios/OptionsEditorRadios.d.ts +16 -0
  111. package/dist/components/OptionsEditorRadios/OptionsEditorRadios.d.ts.map +1 -0
  112. package/dist/components/OptionsEditorRadios/OptionsEditorRadios.js +61 -0
  113. package/dist/components/OptionsEditorRadios/OptionsEditorRadios.js.map +1 -0
  114. package/dist/components/OptionsEditorRadios/index.d.ts +2 -0
  115. package/dist/components/OptionsEditorRadios/index.d.ts.map +1 -0
  116. package/dist/components/OptionsEditorRadios/index.js +15 -0
  117. package/dist/components/OptionsEditorRadios/index.js.map +1 -0
  118. package/dist/components/OptionsEditorTabPanel/OptionsEditorTabPanel.d.ts +9 -0
  119. package/dist/components/OptionsEditorTabPanel/OptionsEditorTabPanel.d.ts.map +1 -0
  120. package/dist/components/{OptionsEditorTabs/TabPanel.js → OptionsEditorTabPanel/OptionsEditorTabPanel.js} +2 -2
  121. package/dist/components/OptionsEditorTabPanel/OptionsEditorTabPanel.js.map +1 -0
  122. package/dist/components/OptionsEditorTabPanel/index.d.ts +2 -0
  123. package/dist/components/OptionsEditorTabPanel/index.d.ts.map +1 -0
  124. package/dist/components/OptionsEditorTabPanel/index.js +15 -0
  125. package/dist/components/OptionsEditorTabPanel/index.js.map +1 -0
  126. package/dist/components/OptionsEditorTabs/OptionsEditorTabs.js +2 -2
  127. package/dist/components/OptionsEditorTabs/OptionsEditorTabs.js.map +1 -1
  128. package/dist/components/OptionsEditorTabs/index.js.map +1 -1
  129. package/dist/components/PanelSpecEditor/PanelSpecEditor.d.ts +1 -1
  130. package/dist/components/PanelSpecEditor/PanelSpecEditor.d.ts.map +1 -1
  131. package/dist/components/PanelSpecEditor/PanelSpecEditor.js +45 -6
  132. package/dist/components/PanelSpecEditor/PanelSpecEditor.js.map +1 -1
  133. package/dist/components/PanelSpecEditor/index.js.map +1 -1
  134. package/dist/components/PluginEditor/PluginEditor.js +15 -24
  135. package/dist/components/PluginEditor/PluginEditor.js.map +1 -1
  136. package/dist/components/PluginEditor/index.js.map +1 -1
  137. package/dist/components/PluginEditor/plugin-editor-api.d.ts +2 -1
  138. package/dist/components/PluginEditor/plugin-editor-api.d.ts.map +1 -1
  139. package/dist/components/PluginEditor/plugin-editor-api.js +2 -2
  140. package/dist/components/PluginEditor/plugin-editor-api.js.map +1 -1
  141. package/dist/components/PluginKindSelect/PluginKindSelect.d.ts +3 -3
  142. package/dist/components/PluginKindSelect/PluginKindSelect.d.ts.map +1 -1
  143. package/dist/components/PluginKindSelect/PluginKindSelect.js +21 -12
  144. package/dist/components/PluginKindSelect/PluginKindSelect.js.map +1 -1
  145. package/dist/components/PluginKindSelect/index.js.map +1 -1
  146. package/dist/components/PluginRegistry/PluginRegistry.js +3 -3
  147. package/dist/components/PluginRegistry/PluginRegistry.js.map +1 -1
  148. package/dist/components/PluginRegistry/index.js.map +1 -1
  149. package/dist/components/PluginRegistry/plugin-indexes.js.map +1 -1
  150. package/dist/components/PluginSpecEditor/PluginSpecEditor.d.ts +1 -0
  151. package/dist/components/PluginSpecEditor/PluginSpecEditor.d.ts.map +1 -1
  152. package/dist/components/PluginSpecEditor/PluginSpecEditor.js.map +1 -1
  153. package/dist/components/PluginSpecEditor/index.js.map +1 -1
  154. package/dist/components/ProjectSelect.d.ts +15 -0
  155. package/dist/components/ProjectSelect.d.ts.map +1 -0
  156. package/dist/components/ProjectSelect.js +91 -0
  157. package/dist/components/ProjectSelect.js.map +1 -0
  158. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.d.ts.map +1 -1
  159. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.js +19 -17
  160. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.js.map +1 -1
  161. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.js +1 -1
  162. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.js.map +1 -1
  163. package/dist/components/TimeSeriesQueryEditor/index.js.map +1 -1
  164. package/dist/components/TraceQueryEditor/TraceQueryEditor.d.ts +9 -0
  165. package/dist/components/TraceQueryEditor/TraceQueryEditor.d.ts.map +1 -0
  166. package/dist/components/TraceQueryEditor/TraceQueryEditor.js +130 -0
  167. package/dist/components/TraceQueryEditor/TraceQueryEditor.js.map +1 -0
  168. package/dist/components/TraceQueryEditor/TraceQueryInput.d.ts +13 -0
  169. package/dist/components/TraceQueryEditor/TraceQueryInput.d.ts.map +1 -0
  170. package/dist/components/TraceQueryEditor/TraceQueryInput.js +83 -0
  171. package/dist/components/TraceQueryEditor/TraceQueryInput.js.map +1 -0
  172. package/dist/components/TraceQueryEditor/index.d.ts +2 -0
  173. package/dist/components/TraceQueryEditor/index.d.ts.map +1 -0
  174. package/dist/components/TraceQueryEditor/index.js +15 -0
  175. package/dist/components/TraceQueryEditor/index.js.map +1 -0
  176. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts +10 -8
  177. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts.map +1 -1
  178. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js +391 -184
  179. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js.map +1 -1
  180. package/dist/components/Variables/VariableEditorForm/VariablePreview.js.map +1 -1
  181. package/dist/components/Variables/VariableEditorForm/index.js.map +1 -1
  182. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.d.ts +8 -19
  183. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.d.ts.map +1 -1
  184. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js +29 -34
  185. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js.map +1 -1
  186. package/dist/components/Variables/index.js.map +1 -1
  187. package/dist/components/Variables/variable-model.js +3 -3
  188. package/dist/components/Variables/variable-model.js.map +1 -1
  189. package/dist/components/index.d.ts +3 -0
  190. package/dist/components/index.d.ts.map +1 -1
  191. package/dist/components/index.js +3 -0
  192. package/dist/components/index.js.map +1 -1
  193. package/dist/constants/index.js.map +1 -1
  194. package/dist/constants/user-interface-text.js.map +1 -1
  195. package/dist/context/ProjectStoreProvider.d.ts +16 -0
  196. package/dist/context/ProjectStoreProvider.d.ts.map +1 -0
  197. package/dist/context/ProjectStoreProvider.js +56 -0
  198. package/dist/context/ProjectStoreProvider.js.map +1 -0
  199. package/dist/context/index.d.ts +2 -0
  200. package/dist/context/index.d.ts.map +1 -0
  201. package/dist/context/index.js +15 -0
  202. package/dist/context/index.js.map +1 -0
  203. package/dist/context/query-params.d.ts +5 -0
  204. package/dist/context/query-params.d.ts.map +1 -0
  205. package/dist/context/query-params.js +41 -0
  206. package/dist/context/query-params.js.map +1 -0
  207. package/dist/index.d.ts +2 -0
  208. package/dist/index.d.ts.map +1 -1
  209. package/dist/index.js +2 -0
  210. package/dist/index.js.map +1 -1
  211. package/dist/model/datasource.d.ts +2 -1
  212. package/dist/model/datasource.d.ts.map +1 -1
  213. package/dist/model/datasource.js.map +1 -1
  214. package/dist/model/index.d.ts +1 -0
  215. package/dist/model/index.d.ts.map +1 -1
  216. package/dist/model/index.js +1 -0
  217. package/dist/model/index.js.map +1 -1
  218. package/dist/model/legend.d.ts +1 -1
  219. package/dist/model/legend.d.ts.map +1 -1
  220. package/dist/model/legend.js +14 -14
  221. package/dist/model/legend.js.map +1 -1
  222. package/dist/model/panels.d.ts +2 -1
  223. package/dist/model/panels.d.ts.map +1 -1
  224. package/dist/model/panels.js.map +1 -1
  225. package/dist/model/plugin-base.d.ts +1 -0
  226. package/dist/model/plugin-base.d.ts.map +1 -1
  227. package/dist/model/plugin-base.js.map +1 -1
  228. package/dist/model/plugin-loading.js.map +1 -1
  229. package/dist/model/plugins.d.ts +2 -0
  230. package/dist/model/plugins.d.ts.map +1 -1
  231. package/dist/model/plugins.js.map +1 -1
  232. package/dist/model/trace-queries.d.ts +19 -0
  233. package/dist/model/trace-queries.d.ts.map +1 -0
  234. package/dist/model/trace-queries.js +15 -0
  235. package/dist/model/trace-queries.js.map +1 -0
  236. package/dist/runtime/DataQueriesProvider/DataQueriesProvider.d.ts +5 -5
  237. package/dist/runtime/DataQueriesProvider/DataQueriesProvider.d.ts.map +1 -1
  238. package/dist/runtime/DataQueriesProvider/DataQueriesProvider.js +52 -28
  239. package/dist/runtime/DataQueriesProvider/DataQueriesProvider.js.map +1 -1
  240. package/dist/runtime/DataQueriesProvider/index.js.map +1 -1
  241. package/dist/runtime/DataQueriesProvider/model.d.ts +17 -12
  242. package/dist/runtime/DataQueriesProvider/model.d.ts.map +1 -1
  243. package/dist/runtime/DataQueriesProvider/model.js +67 -1
  244. package/dist/runtime/DataQueriesProvider/model.js.map +1 -1
  245. package/dist/runtime/TimeRangeProvider/TimeRangeProvider.d.ts +4 -3
  246. package/dist/runtime/TimeRangeProvider/TimeRangeProvider.d.ts.map +1 -1
  247. package/dist/runtime/TimeRangeProvider/TimeRangeProvider.js +28 -19
  248. package/dist/runtime/TimeRangeProvider/TimeRangeProvider.js.map +1 -1
  249. package/dist/runtime/TimeRangeProvider/TimeRangeProviderWithQueryParams.d.ts +9 -0
  250. package/dist/runtime/TimeRangeProvider/TimeRangeProviderWithQueryParams.d.ts.map +1 -0
  251. package/dist/runtime/TimeRangeProvider/TimeRangeProviderWithQueryParams.js +30 -0
  252. package/dist/runtime/TimeRangeProvider/TimeRangeProviderWithQueryParams.js.map +1 -0
  253. package/dist/runtime/TimeRangeProvider/index.d.ts +1 -0
  254. package/dist/runtime/TimeRangeProvider/index.d.ts.map +1 -1
  255. package/dist/runtime/TimeRangeProvider/index.js +1 -0
  256. package/dist/runtime/TimeRangeProvider/index.js.map +1 -1
  257. package/dist/runtime/TimeRangeProvider/query-params.d.ts +4 -4
  258. package/dist/runtime/TimeRangeProvider/query-params.d.ts.map +1 -1
  259. package/dist/runtime/TimeRangeProvider/query-params.js +9 -41
  260. package/dist/runtime/TimeRangeProvider/query-params.js.map +1 -1
  261. package/dist/runtime/TimeRangeProvider/refresh-interval.d.ts +7 -0
  262. package/dist/runtime/TimeRangeProvider/refresh-interval.d.ts.map +1 -0
  263. package/dist/runtime/TimeRangeProvider/refresh-interval.js +25 -0
  264. package/dist/runtime/TimeRangeProvider/refresh-interval.js.map +1 -0
  265. package/dist/runtime/builtin-variables.d.ts +11 -0
  266. package/dist/runtime/builtin-variables.d.ts.map +1 -0
  267. package/dist/runtime/builtin-variables.js +59 -0
  268. package/dist/runtime/builtin-variables.js.map +1 -0
  269. package/dist/runtime/datasources.d.ts +42 -7
  270. package/dist/runtime/datasources.d.ts.map +1 -1
  271. package/dist/runtime/datasources.js +15 -7
  272. package/dist/runtime/datasources.js.map +1 -1
  273. package/dist/runtime/index.d.ts +2 -0
  274. package/dist/runtime/index.d.ts.map +1 -1
  275. package/dist/runtime/index.js +2 -0
  276. package/dist/runtime/index.js.map +1 -1
  277. package/dist/runtime/plugin-registry.d.ts +2 -0
  278. package/dist/runtime/plugin-registry.d.ts.map +1 -1
  279. package/dist/runtime/plugin-registry.js +19 -2
  280. package/dist/runtime/plugin-registry.js.map +1 -1
  281. package/dist/runtime/template-variables.d.ts +62 -2
  282. package/dist/runtime/template-variables.d.ts.map +1 -1
  283. package/dist/runtime/template-variables.js +83 -1
  284. package/dist/runtime/template-variables.js.map +1 -1
  285. package/dist/runtime/time-series-queries.d.ts +3 -3
  286. package/dist/runtime/time-series-queries.d.ts.map +1 -1
  287. package/dist/runtime/time-series-queries.js +14 -12
  288. package/dist/runtime/time-series-queries.js.map +1 -1
  289. package/dist/runtime/trace-queries.d.ts +14 -0
  290. package/dist/runtime/trace-queries.d.ts.map +1 -0
  291. package/dist/runtime/trace-queries.js +61 -0
  292. package/dist/runtime/trace-queries.js.map +1 -0
  293. package/dist/stories/shared-utils/decorators/WithDataQueries.js.map +1 -1
  294. package/dist/stories/shared-utils/decorators/WithPluginRegistry.d.ts.map +1 -1
  295. package/dist/stories/shared-utils/decorators/WithPluginRegistry.js +2 -1
  296. package/dist/stories/shared-utils/decorators/WithPluginRegistry.js.map +1 -1
  297. package/dist/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.d.ts +13 -0
  298. package/dist/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.d.ts.map +1 -0
  299. package/dist/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.js +39 -0
  300. package/dist/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.js.map +1 -0
  301. package/dist/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.d.ts.map +1 -1
  302. package/dist/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.js +23 -7
  303. package/dist/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.js.map +1 -1
  304. package/dist/stories/shared-utils/decorators/WithPluginSystemTemplateVariables.js.map +1 -1
  305. package/dist/stories/shared-utils/decorators/WithTimeRange.d.ts +2 -2
  306. package/dist/stories/shared-utils/decorators/WithTimeRange.d.ts.map +1 -1
  307. package/dist/stories/shared-utils/decorators/WithTimeRange.js +2 -2
  308. package/dist/stories/shared-utils/decorators/WithTimeRange.js.map +1 -1
  309. package/dist/stories/shared-utils/decorators/index.d.ts +1 -0
  310. package/dist/stories/shared-utils/decorators/index.d.ts.map +1 -1
  311. package/dist/stories/shared-utils/decorators/index.js +1 -0
  312. package/dist/stories/shared-utils/decorators/index.js.map +1 -1
  313. package/dist/stories/shared-utils/index.js.map +1 -1
  314. package/dist/test/index.d.ts +1 -0
  315. package/dist/test/index.d.ts.map +1 -1
  316. package/dist/test/index.js +1 -0
  317. package/dist/test/index.js.map +1 -1
  318. package/dist/test/mock-data.d.ts +4 -0
  319. package/dist/test/mock-data.d.ts.map +1 -0
  320. package/dist/test/mock-data.js +64 -0
  321. package/dist/test/mock-data.js.map +1 -0
  322. package/dist/test/render.js +2 -2
  323. package/dist/test/render.js.map +1 -1
  324. package/dist/test/setup-tests.js.map +1 -1
  325. package/dist/test/test-plugins/bert/index.js.map +1 -1
  326. package/dist/test/test-plugins/ernie/index.js.map +1 -1
  327. package/dist/test/test-plugins/index.js.map +1 -1
  328. package/dist/test-utils/index.js.map +1 -1
  329. package/dist/test-utils/mock-plugin-registry.js +2 -2
  330. package/dist/test-utils/mock-plugin-registry.js.map +1 -1
  331. package/dist/utils/action.d.ts +4 -0
  332. package/dist/utils/action.d.ts.map +1 -0
  333. package/dist/utils/action.js +27 -0
  334. package/dist/utils/action.js.map +1 -0
  335. package/dist/utils/index.d.ts +1 -0
  336. package/dist/utils/index.d.ts.map +1 -1
  337. package/dist/utils/index.js +1 -0
  338. package/dist/utils/index.js.map +1 -1
  339. package/dist/utils/variables.d.ts.map +1 -1
  340. package/dist/utils/variables.js +17 -5
  341. package/dist/utils/variables.js.map +1 -1
  342. package/dist/validation/datasource.d.ts +19 -0
  343. package/dist/validation/datasource.d.ts.map +1 -0
  344. package/dist/validation/datasource.js +22 -0
  345. package/dist/validation/datasource.js.map +1 -0
  346. package/dist/validation/index.d.ts +5 -0
  347. package/dist/validation/index.d.ts.map +1 -0
  348. package/dist/validation/index.js +18 -0
  349. package/dist/validation/index.js.map +1 -0
  350. package/dist/validation/resource.d.ts +3 -0
  351. package/dist/validation/resource.d.ts.map +1 -0
  352. package/dist/validation/resource.js +16 -0
  353. package/dist/validation/resource.js.map +1 -0
  354. package/dist/validation/role.d.ts +228 -0
  355. package/dist/validation/role.d.ts.map +1 -0
  356. package/dist/validation/role.js +66 -0
  357. package/dist/validation/role.js.map +1 -0
  358. package/dist/validation/rolebinding.d.ts +137 -0
  359. package/dist/validation/rolebinding.d.ts.map +1 -0
  360. package/dist/validation/rolebinding.js +47 -0
  361. package/dist/validation/rolebinding.js.map +1 -0
  362. package/dist/validation/secret.d.ts +964 -0
  363. package/dist/validation/secret.d.ts.map +1 -0
  364. package/dist/validation/secret.js +157 -0
  365. package/dist/validation/secret.js.map +1 -0
  366. package/dist/validation/variable.d.ts +96 -0
  367. package/dist/validation/variable.d.ts.map +1 -0
  368. package/dist/validation/variable.js +40 -0
  369. package/dist/validation/variable.js.map +1 -0
  370. package/package.json +9 -6
  371. package/dist/components/OptionsEditorTabs/TabPanel.d.ts +0 -9
  372. package/dist/components/OptionsEditorTabs/TabPanel.d.ts.map +0 -1
  373. package/dist/components/OptionsEditorTabs/TabPanel.js.map +0 -1
@@ -16,9 +16,11 @@ Object.defineProperty(exports, "__esModule", {
16
16
  });
17
17
  Object.defineProperty(exports, "CalculationSelector", {
18
18
  enumerable: true,
19
- get: ()=>CalculationSelector
19
+ get: function() {
20
+ return CalculationSelector;
21
+ }
20
22
  });
21
- const _jsxRuntime = require("react/jsx-runtime");
23
+ const _jsxruntime = require("react/jsx-runtime");
22
24
  const _components = require("@perses-dev/components");
23
25
  const _core = require("@perses-dev/core");
24
26
  const CALC_OPTIONS = Object.entries(_core.CALCULATIONS_CONFIG).map(([id, config])=>{
@@ -32,9 +34,9 @@ function CalculationSelector({ value , onChange }) {
32
34
  onChange(newValue.id);
33
35
  };
34
36
  const calcConfig = _core.CALCULATIONS_CONFIG[value];
35
- return /*#__PURE__*/ (0, _jsxRuntime.jsx)(_components.OptionsEditorControl, {
37
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_components.OptionsEditorControl, {
36
38
  label: "Calculation",
37
- control: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_components.SettingsAutocomplete, {
39
+ control: /*#__PURE__*/ (0, _jsxruntime.jsx)(_components.SettingsAutocomplete, {
38
40
  value: {
39
41
  ...calcConfig,
40
42
  id: value
@@ -14,15 +14,17 @@
14
14
  Object.defineProperty(exports, "__esModule", {
15
15
  value: true
16
16
  });
17
- _exportStar(require("./CalculationSelector"), exports);
18
- function _exportStar(from, to) {
17
+ _export_star(require("./CalculationSelector"), exports);
18
+ function _export_star(from, to) {
19
19
  Object.keys(from).forEach(function(k) {
20
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) Object.defineProperty(to, k, {
21
- enumerable: true,
22
- get: function() {
23
- return from[k];
24
- }
25
- });
20
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
21
+ Object.defineProperty(to, k, {
22
+ enumerable: true,
23
+ get: function() {
24
+ return from[k];
25
+ }
26
+ });
27
+ }
26
28
  });
27
29
  return from;
28
30
  }
@@ -0,0 +1,350 @@
1
+ // Copyright 2023 The Perses Authors
2
+ // Licensed under the Apache License, Version 2.0 (the "License");
3
+ // you may not use this file except in compliance with the License.
4
+ // You may obtain a copy of the License at
5
+ //
6
+ // http://www.apache.org/licenses/LICENSE-2.0
7
+ //
8
+ // Unless required by applicable law or agreed to in writing, software
9
+ // distributed under the License is distributed on an "AS IS" BASIS,
10
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ // See the License for the specific language governing permissions and
12
+ // limitations under the License.
13
+ "use strict";
14
+ Object.defineProperty(exports, "__esModule", {
15
+ value: true
16
+ });
17
+ Object.defineProperty(exports, "DatasourceEditorForm", {
18
+ enumerable: true,
19
+ get: function() {
20
+ return DatasourceEditorForm;
21
+ }
22
+ });
23
+ const _jsxruntime = require("react/jsx-runtime");
24
+ const _useimmer = require("use-immer");
25
+ const _material = require("@mui/material");
26
+ const _react = require("react");
27
+ const _components = require("@perses-dev/components");
28
+ const _reacthookform = require("react-hook-form");
29
+ const _zod = require("@hookform/resolvers/zod");
30
+ const _PluginEditor = require("../PluginEditor");
31
+ const _utils = require("../../utils");
32
+ const _validation = require("../../validation");
33
+ /**
34
+ * This preprocessing ensures that we always have a defined object for the `display` property
35
+ * @param datasource
36
+ */ function getInitialState(name, spec) {
37
+ var _spec_display, _spec_display1;
38
+ var _spec_display_name, _spec_display_description;
39
+ const patchedDisplay = {
40
+ name: (_spec_display_name = (_spec_display = spec.display) === null || _spec_display === void 0 ? void 0 : _spec_display.name) !== null && _spec_display_name !== void 0 ? _spec_display_name : '',
41
+ description: (_spec_display_description = (_spec_display1 = spec.display) === null || _spec_display1 === void 0 ? void 0 : _spec_display1.description) !== null && _spec_display_description !== void 0 ? _spec_display_description : ''
42
+ };
43
+ return {
44
+ name: name,
45
+ spec: {
46
+ ...spec,
47
+ display: patchedDisplay
48
+ }
49
+ };
50
+ }
51
+ function DatasourceEditorForm(props) {
52
+ var _state_spec_display, _state_spec_display1;
53
+ const { initialName , initialSpec , initialAction , isDraft , isReadonly , onSave , onClose , onDelete } = props;
54
+ const initialState = getInitialState(initialName, initialSpec);
55
+ const [state, setState] = (0, _useimmer.useImmer)(initialState);
56
+ const [isDiscardDialogOpened, setDiscardDialogOpened] = (0, _react.useState)(false);
57
+ const [action, setAction] = (0, _react.useState)(initialAction);
58
+ const titleAction = (0, _utils.getTitleAction)(action, isDraft);
59
+ const submitText = (0, _utils.getSubmitText)(action, isDraft);
60
+ const form = (0, _reacthookform.useForm)({
61
+ resolver: (0, _zod.zodResolver)(_validation.datasourceEditValidationSchema),
62
+ mode: 'onBlur',
63
+ defaultValues: {
64
+ name: state.name,
65
+ title: (_state_spec_display = state.spec.display) === null || _state_spec_display === void 0 ? void 0 : _state_spec_display.name,
66
+ description: (_state_spec_display1 = state.spec.display) === null || _state_spec_display1 === void 0 ? void 0 : _state_spec_display1.description,
67
+ default: state.spec.default
68
+ }
69
+ });
70
+ const processForm = ()=>{
71
+ var _state_spec_display, _state_spec_display1, _state_spec_display2, _state_spec_display3;
72
+ // reset display attributes to undefined when empty, because we don't want to save empty strings
73
+ onSave(state.name, {
74
+ ...state.spec,
75
+ display: {
76
+ name: ((_state_spec_display = state.spec.display) === null || _state_spec_display === void 0 ? void 0 : _state_spec_display.name) === '' ? undefined : (_state_spec_display1 = state.spec.display) === null || _state_spec_display1 === void 0 ? void 0 : _state_spec_display1.name,
77
+ description: ((_state_spec_display2 = state.spec.display) === null || _state_spec_display2 === void 0 ? void 0 : _state_spec_display2.description) === '' ? undefined : (_state_spec_display3 = state.spec.display) === null || _state_spec_display3 === void 0 ? void 0 : _state_spec_display3.description
78
+ }
79
+ });
80
+ };
81
+ // When user click on cancel, several possibilities:
82
+ // - create action: ask for discard approval
83
+ // - update action: ask for discard approval if changed
84
+ // - read action: don´t ask for discard approval
85
+ const handleCancel = (0, _react.useCallback)(()=>{
86
+ if (JSON.stringify(initialState) !== JSON.stringify(state)) {
87
+ setDiscardDialogOpened(true);
88
+ } else {
89
+ onClose();
90
+ }
91
+ }, [
92
+ state,
93
+ initialState,
94
+ setDiscardDialogOpened,
95
+ onClose
96
+ ]);
97
+ return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reacthookform.FormProvider, {
98
+ ...form,
99
+ children: [
100
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Box, {
101
+ sx: {
102
+ display: 'flex',
103
+ alignItems: 'center',
104
+ padding: (theme)=>theme.spacing(1, 2),
105
+ borderBottom: (theme)=>`1px solid ${theme.palette.divider}`
106
+ },
107
+ children: [
108
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Typography, {
109
+ variant: "h2",
110
+ children: [
111
+ titleAction,
112
+ " Datasource"
113
+ ]
114
+ }),
115
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Stack, {
116
+ direction: "row",
117
+ spacing: 1,
118
+ sx: {
119
+ marginLeft: 'auto'
120
+ },
121
+ children: action === 'read' ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
122
+ children: [
123
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Button, {
124
+ disabled: isReadonly,
125
+ variant: "contained",
126
+ onClick: ()=>setAction('update'),
127
+ children: "Edit"
128
+ }),
129
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Button, {
130
+ color: "error",
131
+ disabled: isReadonly,
132
+ variant: "outlined",
133
+ onClick: onDelete,
134
+ children: "Delete"
135
+ }),
136
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Divider, {
137
+ orientation: "vertical",
138
+ flexItem: true,
139
+ sx: (theme)=>({
140
+ borderColor: theme.palette.grey['500'],
141
+ '&.MuiDivider-root': {
142
+ marginLeft: 2,
143
+ marginRight: 1
144
+ }
145
+ })
146
+ }),
147
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Button, {
148
+ color: "secondary",
149
+ variant: "outlined",
150
+ onClick: onClose,
151
+ children: "Close"
152
+ })
153
+ ]
154
+ }) : /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
155
+ children: [
156
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Button, {
157
+ variant: "contained",
158
+ disabled: !form.formState.isValid,
159
+ onClick: form.handleSubmit(processForm),
160
+ children: submitText
161
+ }),
162
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Button, {
163
+ color: "secondary",
164
+ variant: "outlined",
165
+ onClick: handleCancel,
166
+ children: "Cancel"
167
+ })
168
+ ]
169
+ })
170
+ })
171
+ ]
172
+ }),
173
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Box, {
174
+ padding: 2,
175
+ sx: {
176
+ overflowY: 'scroll'
177
+ },
178
+ children: [
179
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Grid, {
180
+ container: true,
181
+ spacing: 2,
182
+ mb: 2,
183
+ children: [
184
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Grid, {
185
+ item: true,
186
+ xs: 4,
187
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_reacthookform.Controller, {
188
+ name: "name",
189
+ render: ({ field , fieldState })=>{
190
+ var _fieldState_error;
191
+ /*#__PURE__*/ return (0, _jsxruntime.jsx)(_material.TextField, {
192
+ ...field,
193
+ required: true,
194
+ fullWidth: true,
195
+ name: "name",
196
+ label: "Name",
197
+ InputLabelProps: {
198
+ shrink: action === 'read' ? true : undefined
199
+ },
200
+ InputProps: {
201
+ disabled: action === 'update' && !isDraft,
202
+ readOnly: action === 'read'
203
+ },
204
+ error: !!fieldState.error,
205
+ helperText: (_fieldState_error = fieldState.error) === null || _fieldState_error === void 0 ? void 0 : _fieldState_error.message,
206
+ onChange: (event)=>{
207
+ field.onChange(event);
208
+ setState((draft)=>{
209
+ draft.name = event.target.value;
210
+ });
211
+ }
212
+ });
213
+ }
214
+ })
215
+ }),
216
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Grid, {
217
+ item: true,
218
+ xs: 8,
219
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_reacthookform.Controller, {
220
+ name: "title",
221
+ render: ({ field , fieldState })=>{
222
+ var _fieldState_error;
223
+ /*#__PURE__*/ return (0, _jsxruntime.jsx)(_material.TextField, {
224
+ ...field,
225
+ fullWidth: true,
226
+ name: "title",
227
+ label: "Display Label",
228
+ InputLabelProps: {
229
+ shrink: action === 'read' ? true : undefined
230
+ },
231
+ InputProps: {
232
+ readOnly: action === 'read'
233
+ },
234
+ error: !!fieldState.error,
235
+ helperText: (_fieldState_error = fieldState.error) === null || _fieldState_error === void 0 ? void 0 : _fieldState_error.message,
236
+ onChange: (event)=>{
237
+ setState((draft)=>{
238
+ field.onChange(event);
239
+ if (draft.spec.display) {
240
+ draft.spec.display.name = event.target.value;
241
+ }
242
+ });
243
+ }
244
+ });
245
+ }
246
+ })
247
+ }),
248
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Grid, {
249
+ item: true,
250
+ xs: 12,
251
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_reacthookform.Controller, {
252
+ name: "description",
253
+ render: ({ field , fieldState })=>{
254
+ var _fieldState_error;
255
+ /*#__PURE__*/ return (0, _jsxruntime.jsx)(_material.TextField, {
256
+ ...field,
257
+ fullWidth: true,
258
+ name: "description",
259
+ label: "Description",
260
+ InputLabelProps: {
261
+ shrink: action === 'read' ? true : undefined
262
+ },
263
+ InputProps: {
264
+ readOnly: action === 'read'
265
+ },
266
+ error: !!fieldState.error,
267
+ helperText: (_fieldState_error = fieldState.error) === null || _fieldState_error === void 0 ? void 0 : _fieldState_error.message,
268
+ onChange: (event)=>{
269
+ field.onChange(event);
270
+ setState((draft)=>{
271
+ if (draft.spec.display) {
272
+ draft.spec.display.description = event.target.value;
273
+ }
274
+ });
275
+ }
276
+ });
277
+ }
278
+ })
279
+ }),
280
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Grid, {
281
+ item: true,
282
+ xs: 6,
283
+ sx: {
284
+ paddingTop: '5px !important'
285
+ },
286
+ children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Stack, {
287
+ children: [
288
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_reacthookform.Controller, {
289
+ name: "default",
290
+ render: ({ field })=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_material.FormControlLabel, {
291
+ ...field,
292
+ control: /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Switch, {
293
+ checked: state.spec.default,
294
+ readOnly: action === 'read',
295
+ onChange: (event)=>{
296
+ if (action === 'read') return; // ReadOnly prop is not blocking user interaction...
297
+ field.onChange(event);
298
+ setState((draft)=>{
299
+ draft.spec.default = event.target.checked;
300
+ });
301
+ }
302
+ }),
303
+ label: "Set as default"
304
+ })
305
+ }),
306
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Typography, {
307
+ variant: "caption",
308
+ children: [
309
+ "Whether this datasource should be the default ",
310
+ state.spec.plugin.kind,
311
+ " to be used"
312
+ ]
313
+ })
314
+ ]
315
+ })
316
+ })
317
+ ]
318
+ }),
319
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Divider, {}),
320
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Typography, {
321
+ py: 1,
322
+ variant: "h3",
323
+ children: "Plugin Options"
324
+ }),
325
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_PluginEditor.PluginEditor, {
326
+ width: "100%",
327
+ pluginType: "Datasource",
328
+ pluginKindLabel: "Source",
329
+ value: state.spec.plugin,
330
+ isReadonly: action === 'read',
331
+ onChange: (v)=>{
332
+ setState((draft)=>{
333
+ draft.spec.plugin = v;
334
+ });
335
+ }
336
+ })
337
+ ]
338
+ }),
339
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_components.DiscardChangesConfirmationDialog, {
340
+ description: "Are you sure you want to discard your changes? Changes cannot be recovered.",
341
+ isOpen: isDiscardDialogOpened,
342
+ onCancel: ()=>setDiscardDialogOpened(false),
343
+ onDiscardChanges: ()=>{
344
+ setDiscardDialogOpened(false);
345
+ onClose();
346
+ }
347
+ })
348
+ ]
349
+ });
350
+ }
@@ -0,0 +1,30 @@
1
+ // Copyright 2023 The Perses Authors
2
+ // Licensed under the Apache License, Version 2.0 (the "License");
3
+ // you may not use this file except in compliance with the License.
4
+ // You may obtain a copy of the License at
5
+ //
6
+ // http://www.apache.org/licenses/LICENSE-2.0
7
+ //
8
+ // Unless required by applicable law or agreed to in writing, software
9
+ // distributed under the License is distributed on an "AS IS" BASIS,
10
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ // See the License for the specific language governing permissions and
12
+ // limitations under the License.
13
+ "use strict";
14
+ Object.defineProperty(exports, "__esModule", {
15
+ value: true
16
+ });
17
+ _export_star(require("./DatasourceEditorForm"), exports);
18
+ function _export_star(from, to) {
19
+ Object.keys(from).forEach(function(k) {
20
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
21
+ Object.defineProperty(to, k, {
22
+ enumerable: true,
23
+ get: function() {
24
+ return from[k];
25
+ }
26
+ });
27
+ }
28
+ });
29
+ return from;
30
+ }
@@ -14,58 +14,168 @@
14
14
  Object.defineProperty(exports, "__esModule", {
15
15
  value: true
16
16
  });
17
- Object.defineProperty(exports, "DatasourceSelect", {
18
- enumerable: true,
19
- get: ()=>DatasourceSelect
17
+ function _export(target, all) {
18
+ for(var name in all)Object.defineProperty(target, name, {
19
+ enumerable: true,
20
+ get: all[name]
21
+ });
22
+ }
23
+ _export(exports, {
24
+ DatasourceSelect: function() {
25
+ return DatasourceSelect;
26
+ },
27
+ DatasourceName: function() {
28
+ return DatasourceName;
29
+ }
20
30
  });
21
- const _jsxRuntime = require("react/jsx-runtime");
31
+ const _jsxruntime = require("react/jsx-runtime");
32
+ const _OpenInNew = /*#__PURE__*/ _interop_require_default(require("mdi-material-ui/OpenInNew"));
22
33
  const _material = require("@mui/material");
23
34
  const _react = require("react");
24
35
  const _runtime = require("../runtime");
36
+ function _interop_require_default(obj) {
37
+ return obj && obj.__esModule ? obj : {
38
+ default: obj
39
+ };
40
+ }
25
41
  function DatasourceSelect(props) {
26
- const { datasourcePluginKind , value , onChange , ...others } = props;
27
- const { data , isLoading } = (0, _runtime.useListDatasources)(datasourcePluginKind);
28
- // Convert the datasource list into menu items with name/value strings that the Select input can work with
42
+ const { datasourcePluginKind , value , project , onChange , ...others } = props;
43
+ const { data , isLoading } = (0, _runtime.useListDatasourceSelectItems)(datasourcePluginKind, project);
44
+ // Rebuild the group of the value if not provided
45
+ const defaultValue = (0, _react.useMemo)(()=>{
46
+ var _flatMap_find;
47
+ const group = (_flatMap_find = (data !== null && data !== void 0 ? data : []).flatMap((itemGroup)=>itemGroup.items).find((item)=>{
48
+ return value.kind === item.selector.kind && value.name === item.selector.name && !item.overridden;
49
+ })) === null || _flatMap_find === void 0 ? void 0 : _flatMap_find.selector.group;
50
+ return {
51
+ ...value,
52
+ group
53
+ };
54
+ }, [
55
+ value,
56
+ data
57
+ ]);
58
+ // Convert the datasource list into menu items with name/group?/value strings that the Select input can work with
29
59
  const menuItems = (0, _react.useMemo)(()=>{
30
- if (data === undefined) return [];
31
- return data.map((ds)=>({
32
- name: ds.name,
33
- value: selectorToOptionValue(ds.selector)
60
+ var _item_saved;
61
+ return (data !== null && data !== void 0 ? data : []).map((itemGroup)=>({
62
+ group: itemGroup.group,
63
+ editLink: itemGroup.editLink,
64
+ items: itemGroup.items.map((item)=>({
65
+ name: item.name,
66
+ overriding: item.overriding,
67
+ overridden: item.overridden,
68
+ saved: (_item_saved = item.saved) !== null && _item_saved !== void 0 ? _item_saved : true,
69
+ group: item.selector.group,
70
+ value: selectorToOptionValue(item.selector)
71
+ }))
34
72
  }));
35
73
  }, [
36
74
  data
37
75
  ]);
38
76
  // While loading available values, just use an empty string so MUI select doesn't warn about values out of range
39
- const optionValue = isLoading ? '' : selectorToOptionValue(value);
77
+ const optionValue = isLoading ? '' : selectorToOptionValue(defaultValue);
40
78
  // When the user makes a selection, convert the string option value back to a DatasourceSelector
41
79
  const handleChange = (e)=>{
42
80
  const next = optionValueToSelector(e.target.value);
43
81
  onChange(next);
44
82
  };
45
- // TODO: Does this need a loading indicator of some kind?
46
- return /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Select, {
83
+ // We use a fake action event when we click on the action of the chip (hijack the "delete" feature).
84
+ // This is because the href link action is on the `deleteIcon` property already, but the `onDelete` property
85
+ // controls its visibility.
86
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
87
+ const fakeActionEvent = ()=>{};
88
+ // TODO:
89
+ // - Does this need a loading indicator of some kind?
90
+ // - The group's edit link is not clickable once selected.
91
+ // - The group's edit link is disabled if datasource is overridden.
92
+ // Ref: https://github.com/mui/material-ui/issues/36572
93
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Select, {
47
94
  ...others,
48
95
  value: optionValue,
49
96
  onChange: handleChange,
50
- children: menuItems.map((menuItem)=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.MenuItem, {
51
- value: menuItem.value,
52
- children: menuItem.name
53
- }, menuItem.value))
97
+ children: menuItems.map((menuItemGroup)=>[
98
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Divider, {}, `${menuItemGroup.group}-divider`),
99
+ ...menuItemGroup.items.map((menuItem)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_material.MenuItem, {
100
+ value: menuItem.value,
101
+ disabled: menuItem.overridden || !menuItem.saved,
102
+ children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Stack, {
103
+ direction: "row",
104
+ alignItems: "center",
105
+ justifyContent: "space-between",
106
+ width: "100%",
107
+ children: [
108
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.ListItemText, {
109
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(DatasourceName, {
110
+ name: menuItem.name,
111
+ overridden: menuItem.overridden,
112
+ overriding: menuItem.overriding
113
+ })
114
+ }),
115
+ !menuItem.saved && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.ListItemText, {
116
+ children: "Save the dashboard to enable this datasource"
117
+ }),
118
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.ListItemText, {
119
+ style: {
120
+ textAlign: 'right'
121
+ },
122
+ children: menuItemGroup.group && menuItemGroup.group.length > 0 && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Chip, {
123
+ disabled: false,
124
+ label: menuItemGroup.group,
125
+ size: "small",
126
+ onDelete: menuItemGroup.editLink ? fakeActionEvent : undefined,
127
+ deleteIcon: menuItemGroup.editLink ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.IconButton, {
128
+ href: menuItemGroup.editLink,
129
+ target: "_blank",
130
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_OpenInNew.default, {
131
+ fontSize: "small"
132
+ })
133
+ }) : undefined
134
+ })
135
+ })
136
+ ]
137
+ })
138
+ }, menuItem.value))
139
+ ])
140
+ });
141
+ }
142
+ function DatasourceName(props) {
143
+ const { name , overridden , overriding } = props;
144
+ return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
145
+ children: [
146
+ `${name} `,
147
+ !overridden && overriding && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Box, {
148
+ display: "inline",
149
+ fontWeight: "normal",
150
+ color: (theme)=>theme.palette.primary.main,
151
+ children: "(overriding)"
152
+ }),
153
+ overridden && '(overridden)'
154
+ ]
54
155
  });
55
156
  }
56
157
  // Delimiter used to stringify/parse option values
57
158
  const OPTION_VALUE_DELIMITER = '_____';
58
- // Given a DatasourceSelector, returns a string value like `{kind}_____{name}` that can be used as a Select input value
59
- function selectorToOptionValue(selector) {
60
- var _name;
159
+ /**
160
+ * Given a DatasourceSelectItemSelector,
161
+ * returns a string value like `{kind}_____{group}_____{name}` that can be used as a Select input value.
162
+ * @param selector
163
+ */ function selectorToOptionValue(selector) {
164
+ var _selector_group, _selector_name;
61
165
  return [
62
166
  selector.kind,
63
- (_name = selector.name) !== null && _name !== void 0 ? _name : ''
167
+ (_selector_group = selector.group) !== null && _selector_group !== void 0 ? _selector_group : '',
168
+ (_selector_name = selector.name) !== null && _selector_name !== void 0 ? _selector_name : ''
64
169
  ].join(OPTION_VALUE_DELIMITER);
65
170
  }
66
- // Given an option value name like `{kind}_____{name}`, returns a DatasourceSelector
67
- function optionValueToSelector(optionValue) {
68
- const [kind, name] = optionValue.split(OPTION_VALUE_DELIMITER);
171
+ /**
172
+ * Given an option value name like `{kind}_____{group}_____{name}`,
173
+ * returns a DatasourceSelector to be used by the query data model.
174
+ * @param optionValue
175
+ */ function optionValueToSelector(optionValue) {
176
+ const words = optionValue.split(OPTION_VALUE_DELIMITER);
177
+ const kind = words[0];
178
+ const name = words[2];
69
179
  if (kind === undefined || name === undefined) {
70
180
  throw new Error('Invalid optionValue string');
71
181
  }