@perses-dev/plugin-system 0.0.0-snapshot-scatter-chart-embed-8efdfab → 0.0.0-snapshot-explorer-plugin-c4a7621

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 (431) hide show
  1. package/dist/cjs/components/CalculationSelector/CalculationSelector.js +1 -1
  2. package/dist/cjs/components/DatasourceEditorForm/DatasourceEditorForm.js +83 -163
  3. package/dist/cjs/components/DatasourceSelect.js +12 -15
  4. package/dist/cjs/components/HTTPSettingsEditor/HTTPSettingsEditor.js +528 -0
  5. package/dist/cjs/components/{TimeSeriesQueryEditor → HTTPSettingsEditor}/index.js +2 -2
  6. package/dist/cjs/components/LegendOptionsEditor/LegendOptionsEditor.js +8 -7
  7. package/dist/cjs/components/MetricLabelInput/MetricLabelInput.js +41 -0
  8. package/dist/cjs/{validation/resource.js → components/MetricLabelInput/index.js} +15 -9
  9. package/dist/cjs/components/{TraceQueryEditor/TraceQueryEditor.js → MultiQueryEditor/MultiQueryEditor.js} +39 -40
  10. package/dist/cjs/components/{TimeSeriesQueryEditor/TimeSeriesQueryInput.js → MultiQueryEditor/QueryEditorContainer.js} +23 -11
  11. package/dist/cjs/components/MultiQueryEditor/index.js +30 -0
  12. package/dist/cjs/components/OptionsEditorRadios/OptionsEditorRadios.js +3 -3
  13. package/dist/cjs/components/OptionsEditorTabPanel/OptionsEditorTabPanel.js +1 -1
  14. package/dist/cjs/components/OptionsEditorTabs/OptionsEditorTabs.js +3 -3
  15. package/dist/cjs/components/PanelSpecEditor/PanelSpecEditor.js +54 -62
  16. package/dist/cjs/components/PluginEditor/PluginEditor.js +16 -13
  17. package/dist/cjs/components/PluginEditor/plugin-editor-api.js +44 -33
  18. package/dist/cjs/components/PluginKindSelect/PluginKindSelect.js +55 -7
  19. package/dist/cjs/components/PluginRegistry/PluginRegistry.js +9 -10
  20. package/dist/cjs/components/PluginRegistry/plugin-indexes.js +20 -17
  21. package/dist/cjs/components/PluginSpecEditor/PluginSpecEditor.js +3 -3
  22. package/dist/cjs/components/ProjectSelect.js +7 -7
  23. package/dist/cjs/components/TimeRangeControls/TimeRangeControls.js +131 -0
  24. package/dist/cjs/components/{TraceQueryEditor → TimeRangeControls}/index.js +1 -1
  25. package/dist/cjs/components/Variables/VariableEditorForm/VariableEditorForm.js +394 -439
  26. package/dist/cjs/components/Variables/VariableEditorForm/VariablePreview.js +17 -15
  27. package/dist/cjs/components/Variables/VariableEditorForm/variable-editor-form-model.js +7 -12
  28. package/dist/cjs/components/Variables/variable-model.js +35 -37
  29. package/dist/cjs/components/index.js +4 -1
  30. package/dist/cjs/constants/user-interface-text.js +4 -1
  31. package/dist/cjs/context/ProjectStoreProvider.js +12 -9
  32. package/dist/cjs/context/ValidationProvider.js +69 -0
  33. package/dist/cjs/context/index.js +1 -0
  34. package/dist/cjs/index.js +1 -1
  35. package/dist/{components/TimeSeriesQueryEditor/index.js → cjs/model/explore.js} +4 -3
  36. package/dist/cjs/model/legend.js +5 -5
  37. package/dist/cjs/remote/PersesPlugin.types.js +16 -0
  38. package/dist/cjs/remote/PluginLoaderComponent.js +75 -0
  39. package/dist/cjs/remote/PluginRuntime.js +267 -0
  40. package/dist/cjs/{validation → remote}/index.js +2 -4
  41. package/dist/cjs/remote/remotePluginLoader.js +61 -0
  42. package/dist/cjs/runtime/DataQueriesProvider/DataQueriesProvider.js +23 -14
  43. package/dist/cjs/runtime/DataQueriesProvider/model.js +10 -9
  44. package/dist/cjs/runtime/QueryCountProvider.js +83 -0
  45. package/dist/cjs/runtime/TimeRangeProvider/TimeRangeProvider.js +37 -13
  46. package/dist/cjs/runtime/TimeRangeProvider/TimeRangeProviderWithQueryParams.js +3 -3
  47. package/dist/cjs/runtime/TimeRangeProvider/TimeRangeSettingsProvider.js +100 -0
  48. package/dist/cjs/runtime/TimeRangeProvider/index.js +2 -1
  49. package/dist/cjs/runtime/TimeRangeProvider/query-params.js +20 -23
  50. package/dist/cjs/runtime/UsageMetricsProvider.js +99 -0
  51. package/dist/cjs/runtime/builtin-variables.js +7 -7
  52. package/dist/cjs/runtime/datasources.js +30 -21
  53. package/dist/cjs/runtime/index.js +4 -2
  54. package/dist/cjs/runtime/plugin-registry.js +48 -36
  55. package/dist/cjs/runtime/time-series-queries.js +35 -40
  56. package/dist/cjs/runtime/trace-queries.js +9 -6
  57. package/dist/cjs/runtime/{template-variables.js → variables.js} +38 -48
  58. package/dist/cjs/stories/shared-utils/decorators/WithDataQueries.js +1 -1
  59. package/dist/cjs/stories/shared-utils/decorators/WithPluginRegistry.js +1 -65
  60. package/dist/cjs/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.js +1 -1
  61. package/dist/cjs/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.js +5 -5
  62. package/dist/cjs/stories/shared-utils/decorators/{WithPluginSystemTemplateVariables.js → WithPluginSystemVariables.js} +9 -9
  63. package/dist/cjs/stories/shared-utils/decorators/WithTimeRange.js +1 -1
  64. package/dist/cjs/stories/shared-utils/decorators/index.js +2 -2
  65. package/dist/cjs/test/mock-data.js +25 -4
  66. package/dist/cjs/test/render.js +2 -11
  67. package/dist/cjs/test/test-plugins/bert/index.js +21 -20
  68. package/dist/cjs/test/test-plugins/ernie/index.js +2 -2
  69. package/dist/cjs/test/test-plugins/index.js +3 -1
  70. package/dist/cjs/test-utils/mock-plugin-registry.js +13 -13
  71. package/dist/cjs/utils/action.js +3 -3
  72. package/dist/cjs/utils/variables.js +24 -24
  73. package/dist/components/CalculationSelector/CalculationSelector.d.ts +2 -2
  74. package/dist/components/CalculationSelector/CalculationSelector.d.ts.map +1 -1
  75. package/dist/components/CalculationSelector/CalculationSelector.js +1 -1
  76. package/dist/components/CalculationSelector/CalculationSelector.js.map +1 -1
  77. package/dist/components/DatasourceEditorForm/DatasourceEditorForm.d.ts +7 -7
  78. package/dist/components/DatasourceEditorForm/DatasourceEditorForm.d.ts.map +1 -1
  79. package/dist/components/DatasourceEditorForm/DatasourceEditorForm.js +86 -166
  80. package/dist/components/DatasourceEditorForm/DatasourceEditorForm.js.map +1 -1
  81. package/dist/components/DatasourceSelect.d.ts +4 -4
  82. package/dist/components/DatasourceSelect.d.ts.map +1 -1
  83. package/dist/components/DatasourceSelect.js +9 -12
  84. package/dist/components/DatasourceSelect.js.map +1 -1
  85. package/dist/components/HTTPSettingsEditor/HTTPSettingsEditor.d.ts +11 -0
  86. package/dist/components/HTTPSettingsEditor/HTTPSettingsEditor.d.ts.map +1 -0
  87. package/dist/components/HTTPSettingsEditor/HTTPSettingsEditor.js +474 -0
  88. package/dist/components/HTTPSettingsEditor/HTTPSettingsEditor.js.map +1 -0
  89. package/dist/components/HTTPSettingsEditor/index.d.ts +2 -0
  90. package/dist/components/HTTPSettingsEditor/index.d.ts.map +1 -0
  91. package/dist/components/HTTPSettingsEditor/index.js +15 -0
  92. package/dist/components/HTTPSettingsEditor/index.js.map +1 -0
  93. package/dist/components/LegendOptionsEditor/LegendOptionsEditor.d.ts +3 -2
  94. package/dist/components/LegendOptionsEditor/LegendOptionsEditor.d.ts.map +1 -1
  95. package/dist/components/LegendOptionsEditor/LegendOptionsEditor.js +10 -9
  96. package/dist/components/LegendOptionsEditor/LegendOptionsEditor.js.map +1 -1
  97. package/dist/components/MetricLabelInput/MetricLabelInput.d.ts +7 -0
  98. package/dist/components/MetricLabelInput/MetricLabelInput.d.ts.map +1 -0
  99. package/dist/components/MetricLabelInput/MetricLabelInput.js +33 -0
  100. package/dist/components/MetricLabelInput/MetricLabelInput.js.map +1 -0
  101. package/dist/components/MetricLabelInput/index.d.ts +2 -0
  102. package/dist/components/MetricLabelInput/index.d.ts.map +1 -0
  103. package/dist/components/MetricLabelInput/index.js +15 -0
  104. package/dist/components/MetricLabelInput/index.js.map +1 -0
  105. package/dist/components/MultiQueryEditor/MultiQueryEditor.d.ts +17 -0
  106. package/dist/components/MultiQueryEditor/MultiQueryEditor.d.ts.map +1 -0
  107. package/dist/components/{TimeSeriesQueryEditor/TimeSeriesQueryEditor.js → MultiQueryEditor/MultiQueryEditor.js} +42 -39
  108. package/dist/components/MultiQueryEditor/MultiQueryEditor.js.map +1 -0
  109. package/dist/components/MultiQueryEditor/QueryEditorContainer.d.ts +29 -0
  110. package/dist/components/MultiQueryEditor/QueryEditorContainer.d.ts.map +1 -0
  111. package/dist/components/{TimeSeriesQueryEditor/TimeSeriesQueryInput.js → MultiQueryEditor/QueryEditorContainer.js} +33 -10
  112. package/dist/components/MultiQueryEditor/QueryEditorContainer.js.map +1 -0
  113. package/dist/components/MultiQueryEditor/index.d.ts +2 -0
  114. package/dist/components/MultiQueryEditor/index.d.ts.map +1 -0
  115. package/dist/components/MultiQueryEditor/index.js +15 -0
  116. package/dist/components/{TraceQueryEditor → MultiQueryEditor}/index.js.map +1 -1
  117. package/dist/components/OptionsEditorRadios/OptionsEditorRadios.d.ts +4 -4
  118. package/dist/components/OptionsEditorRadios/OptionsEditorRadios.d.ts.map +1 -1
  119. package/dist/components/OptionsEditorRadios/OptionsEditorRadios.js +3 -3
  120. package/dist/components/OptionsEditorRadios/OptionsEditorRadios.js.map +1 -1
  121. package/dist/components/OptionsEditorTabPanel/OptionsEditorTabPanel.d.ts +2 -2
  122. package/dist/components/OptionsEditorTabPanel/OptionsEditorTabPanel.d.ts.map +1 -1
  123. package/dist/components/OptionsEditorTabPanel/OptionsEditorTabPanel.js +1 -1
  124. package/dist/components/OptionsEditorTabPanel/OptionsEditorTabPanel.js.map +1 -1
  125. package/dist/components/OptionsEditorTabs/OptionsEditorTabs.d.ts +5 -5
  126. package/dist/components/OptionsEditorTabs/OptionsEditorTabs.d.ts.map +1 -1
  127. package/dist/components/OptionsEditorTabs/OptionsEditorTabs.js +3 -3
  128. package/dist/components/OptionsEditorTabs/OptionsEditorTabs.js.map +1 -1
  129. package/dist/components/PanelSpecEditor/PanelSpecEditor.d.ts +5 -3
  130. package/dist/components/PanelSpecEditor/PanelSpecEditor.d.ts.map +1 -1
  131. package/dist/components/PanelSpecEditor/PanelSpecEditor.js +56 -64
  132. package/dist/components/PanelSpecEditor/PanelSpecEditor.js.map +1 -1
  133. package/dist/components/PluginEditor/PluginEditor.d.ts +2 -2
  134. package/dist/components/PluginEditor/PluginEditor.d.ts.map +1 -1
  135. package/dist/components/PluginEditor/PluginEditor.js +16 -13
  136. package/dist/components/PluginEditor/PluginEditor.js.map +1 -1
  137. package/dist/components/PluginEditor/plugin-editor-api.d.ts +16 -10
  138. package/dist/components/PluginEditor/plugin-editor-api.d.ts.map +1 -1
  139. package/dist/components/PluginEditor/plugin-editor-api.js +44 -33
  140. package/dist/components/PluginEditor/plugin-editor-api.js.map +1 -1
  141. package/dist/components/PluginKindSelect/PluginKindSelect.d.ts +11 -5
  142. package/dist/components/PluginKindSelect/PluginKindSelect.d.ts.map +1 -1
  143. package/dist/components/PluginKindSelect/PluginKindSelect.js +61 -10
  144. package/dist/components/PluginKindSelect/PluginKindSelect.js.map +1 -1
  145. package/dist/components/PluginRegistry/PluginRegistry.d.ts +4 -4
  146. package/dist/components/PluginRegistry/PluginRegistry.d.ts.map +1 -1
  147. package/dist/components/PluginRegistry/PluginRegistry.js +9 -10
  148. package/dist/components/PluginRegistry/PluginRegistry.js.map +1 -1
  149. package/dist/components/PluginRegistry/plugin-indexes.d.ts +4 -4
  150. package/dist/components/PluginRegistry/plugin-indexes.d.ts.map +1 -1
  151. package/dist/components/PluginRegistry/plugin-indexes.js +17 -14
  152. package/dist/components/PluginRegistry/plugin-indexes.js.map +1 -1
  153. package/dist/components/PluginSpecEditor/PluginSpecEditor.d.ts +5 -5
  154. package/dist/components/PluginSpecEditor/PluginSpecEditor.d.ts.map +1 -1
  155. package/dist/components/PluginSpecEditor/PluginSpecEditor.js +3 -3
  156. package/dist/components/PluginSpecEditor/PluginSpecEditor.js.map +1 -1
  157. package/dist/components/ProjectSelect.d.ts +3 -3
  158. package/dist/components/ProjectSelect.d.ts.map +1 -1
  159. package/dist/components/ProjectSelect.js +7 -7
  160. package/dist/components/ProjectSelect.js.map +1 -1
  161. package/dist/components/TimeRangeControls/TimeRangeControls.d.ts +14 -0
  162. package/dist/components/TimeRangeControls/TimeRangeControls.d.ts.map +1 -0
  163. package/dist/components/TimeRangeControls/TimeRangeControls.js +110 -0
  164. package/dist/components/TimeRangeControls/TimeRangeControls.js.map +1 -0
  165. package/dist/components/TimeRangeControls/index.d.ts +2 -0
  166. package/dist/components/TimeRangeControls/index.d.ts.map +1 -0
  167. package/dist/components/{TraceQueryEditor → TimeRangeControls}/index.js +1 -1
  168. package/dist/components/TimeRangeControls/index.js.map +1 -0
  169. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts +4 -3
  170. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts.map +1 -1
  171. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js +395 -442
  172. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js.map +1 -1
  173. package/dist/components/Variables/VariableEditorForm/VariablePreview.d.ts +3 -3
  174. package/dist/components/Variables/VariableEditorForm/VariablePreview.d.ts.map +1 -1
  175. package/dist/components/Variables/VariableEditorForm/VariablePreview.js +11 -11
  176. package/dist/components/Variables/VariableEditorForm/VariablePreview.js.map +1 -1
  177. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.d.ts +3 -3
  178. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.d.ts.map +1 -1
  179. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js +7 -12
  180. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js.map +1 -1
  181. package/dist/components/Variables/variable-model.d.ts +2 -1
  182. package/dist/components/Variables/variable-model.d.ts.map +1 -1
  183. package/dist/components/Variables/variable-model.js +29 -31
  184. package/dist/components/Variables/variable-model.js.map +1 -1
  185. package/dist/components/index.d.ts +4 -1
  186. package/dist/components/index.d.ts.map +1 -1
  187. package/dist/components/index.js +4 -1
  188. package/dist/components/index.js.map +1 -1
  189. package/dist/constants/user-interface-text.d.ts +2 -0
  190. package/dist/constants/user-interface-text.d.ts.map +1 -1
  191. package/dist/constants/user-interface-text.js +4 -1
  192. package/dist/constants/user-interface-text.js.map +1 -1
  193. package/dist/context/ProjectStoreProvider.d.ts +4 -4
  194. package/dist/context/ProjectStoreProvider.d.ts.map +1 -1
  195. package/dist/context/ProjectStoreProvider.js +9 -6
  196. package/dist/context/ProjectStoreProvider.js.map +1 -1
  197. package/dist/context/ValidationProvider.d.ts +19 -0
  198. package/dist/context/ValidationProvider.d.ts.map +1 -0
  199. package/dist/context/ValidationProvider.js +52 -0
  200. package/dist/context/ValidationProvider.js.map +1 -0
  201. package/dist/context/index.d.ts +1 -0
  202. package/dist/context/index.d.ts.map +1 -1
  203. package/dist/context/index.js +1 -0
  204. package/dist/context/index.js.map +1 -1
  205. package/dist/context/query-params.d.ts.map +1 -1
  206. package/dist/context/query-params.js.map +1 -1
  207. package/dist/index.d.ts +1 -1
  208. package/dist/index.d.ts.map +1 -1
  209. package/dist/index.js +1 -1
  210. package/dist/index.js.map +1 -1
  211. package/dist/model/datasource.js +3 -1
  212. package/dist/model/datasource.js.map +1 -1
  213. package/dist/model/explore.d.ts +13 -0
  214. package/dist/model/explore.d.ts.map +1 -0
  215. package/dist/{validation/resource.js → model/explore.js} +4 -3
  216. package/dist/model/explore.js.map +1 -0
  217. package/dist/model/legend.d.ts +2 -2
  218. package/dist/model/legend.d.ts.map +1 -1
  219. package/dist/model/legend.js.map +1 -1
  220. package/dist/model/panels.d.ts +17 -5
  221. package/dist/model/panels.d.ts.map +1 -1
  222. package/dist/model/panels.js.map +1 -1
  223. package/dist/model/plugin-base.d.ts +0 -1
  224. package/dist/model/plugin-base.d.ts.map +1 -1
  225. package/dist/model/plugin-base.js.map +1 -1
  226. package/dist/model/plugin-loading.js.map +1 -1
  227. package/dist/model/plugins.d.ts +35 -21
  228. package/dist/model/plugins.d.ts.map +1 -1
  229. package/dist/model/plugins.js.map +1 -1
  230. package/dist/model/time-series-queries.d.ts +4 -3
  231. package/dist/model/time-series-queries.d.ts.map +1 -1
  232. package/dist/model/time-series-queries.js.map +1 -1
  233. package/dist/model/trace-queries.d.ts +1 -1
  234. package/dist/model/trace-queries.d.ts.map +1 -1
  235. package/dist/model/trace-queries.js.map +1 -1
  236. package/dist/model/variables.d.ts +2 -2
  237. package/dist/model/variables.d.ts.map +1 -1
  238. package/dist/model/variables.js +3 -1
  239. package/dist/model/variables.js.map +1 -1
  240. package/dist/remote/PersesPlugin.types.d.ts +7 -0
  241. package/dist/remote/PersesPlugin.types.d.ts.map +1 -0
  242. package/dist/remote/PersesPlugin.types.js +15 -0
  243. package/dist/remote/PersesPlugin.types.js.map +1 -0
  244. package/dist/remote/PluginLoaderComponent.d.ts +10 -0
  245. package/dist/remote/PluginLoaderComponent.d.ts.map +1 -0
  246. package/dist/remote/PluginLoaderComponent.js +67 -0
  247. package/dist/remote/PluginLoaderComponent.js.map +1 -0
  248. package/dist/remote/PluginRuntime.d.ts +11 -0
  249. package/dist/remote/PluginRuntime.d.ts.map +1 -0
  250. package/dist/remote/PluginRuntime.js +202 -0
  251. package/dist/remote/PluginRuntime.js.map +1 -0
  252. package/dist/remote/index.d.ts +3 -0
  253. package/dist/remote/index.d.ts.map +1 -0
  254. package/dist/{validation → remote}/index.js +2 -4
  255. package/dist/remote/index.js.map +1 -0
  256. package/dist/remote/remotePluginLoader.d.ts +3 -0
  257. package/dist/remote/remotePluginLoader.d.ts.map +1 -0
  258. package/dist/remote/remotePluginLoader.js +53 -0
  259. package/dist/remote/remotePluginLoader.js.map +1 -0
  260. package/dist/runtime/DataQueriesProvider/DataQueriesProvider.d.ts +2 -2
  261. package/dist/runtime/DataQueriesProvider/DataQueriesProvider.d.ts.map +1 -1
  262. package/dist/runtime/DataQueriesProvider/DataQueriesProvider.js +19 -10
  263. package/dist/runtime/DataQueriesProvider/DataQueriesProvider.js.map +1 -1
  264. package/dist/runtime/DataQueriesProvider/model.d.ts +6 -7
  265. package/dist/runtime/DataQueriesProvider/model.d.ts.map +1 -1
  266. package/dist/runtime/DataQueriesProvider/model.js +10 -9
  267. package/dist/runtime/DataQueriesProvider/model.js.map +1 -1
  268. package/dist/runtime/QueryCountProvider.d.ts +9 -0
  269. package/dist/runtime/QueryCountProvider.d.ts.map +1 -0
  270. package/dist/{validation/datasource.js → runtime/QueryCountProvider.js} +14 -10
  271. package/dist/runtime/QueryCountProvider.js.map +1 -0
  272. package/dist/runtime/TimeRangeProvider/TimeRangeProvider.d.ts +6 -2
  273. package/dist/runtime/TimeRangeProvider/TimeRangeProvider.d.ts.map +1 -1
  274. package/dist/runtime/TimeRangeProvider/TimeRangeProvider.js +30 -9
  275. package/dist/runtime/TimeRangeProvider/TimeRangeProvider.js.map +1 -1
  276. package/dist/runtime/TimeRangeProvider/TimeRangeProviderWithQueryParams.d.ts +2 -2
  277. package/dist/runtime/TimeRangeProvider/TimeRangeProviderWithQueryParams.d.ts.map +1 -1
  278. package/dist/runtime/TimeRangeProvider/TimeRangeProviderWithQueryParams.js +3 -3
  279. package/dist/runtime/TimeRangeProvider/TimeRangeProviderWithQueryParams.js.map +1 -1
  280. package/dist/runtime/TimeRangeProvider/TimeRangeSettingsProvider.d.ts +32 -0
  281. package/dist/runtime/TimeRangeProvider/TimeRangeSettingsProvider.d.ts.map +1 -0
  282. package/dist/runtime/TimeRangeProvider/TimeRangeSettingsProvider.js +82 -0
  283. package/dist/runtime/TimeRangeProvider/TimeRangeSettingsProvider.js.map +1 -0
  284. package/dist/runtime/TimeRangeProvider/index.d.ts +1 -0
  285. package/dist/runtime/TimeRangeProvider/index.d.ts.map +1 -1
  286. package/dist/runtime/TimeRangeProvider/index.js +2 -1
  287. package/dist/runtime/TimeRangeProvider/index.js.map +1 -1
  288. package/dist/runtime/TimeRangeProvider/query-params.d.ts +1 -1
  289. package/dist/runtime/TimeRangeProvider/query-params.d.ts.map +1 -1
  290. package/dist/runtime/TimeRangeProvider/query-params.js +8 -11
  291. package/dist/runtime/TimeRangeProvider/query-params.js.map +1 -1
  292. package/dist/runtime/TimeRangeProvider/refresh-interval.d.ts.map +1 -1
  293. package/dist/runtime/TimeRangeProvider/refresh-interval.js.map +1 -1
  294. package/dist/runtime/UsageMetricsProvider.d.ts +25 -0
  295. package/dist/runtime/UsageMetricsProvider.d.ts.map +1 -0
  296. package/dist/runtime/UsageMetricsProvider.js +77 -0
  297. package/dist/runtime/UsageMetricsProvider.js.map +1 -0
  298. package/dist/runtime/builtin-variables.d.ts +2 -2
  299. package/dist/runtime/builtin-variables.d.ts.map +1 -1
  300. package/dist/runtime/builtin-variables.js +4 -4
  301. package/dist/runtime/builtin-variables.js.map +1 -1
  302. package/dist/runtime/datasources.d.ts +5 -4
  303. package/dist/runtime/datasources.d.ts.map +1 -1
  304. package/dist/runtime/datasources.js +24 -15
  305. package/dist/runtime/datasources.js.map +1 -1
  306. package/dist/runtime/index.d.ts +3 -1
  307. package/dist/runtime/index.d.ts.map +1 -1
  308. package/dist/runtime/index.js +4 -2
  309. package/dist/runtime/index.js.map +1 -1
  310. package/dist/runtime/plugin-registry.d.ts +11 -11
  311. package/dist/runtime/plugin-registry.d.ts.map +1 -1
  312. package/dist/runtime/plugin-registry.js +40 -28
  313. package/dist/runtime/plugin-registry.js.map +1 -1
  314. package/dist/runtime/time-series-queries.d.ts +5 -4
  315. package/dist/runtime/time-series-queries.d.ts.map +1 -1
  316. package/dist/runtime/time-series-queries.js +28 -33
  317. package/dist/runtime/time-series-queries.js.map +1 -1
  318. package/dist/runtime/trace-queries.d.ts +5 -4
  319. package/dist/runtime/trace-queries.d.ts.map +1 -1
  320. package/dist/runtime/trace-queries.js +10 -7
  321. package/dist/runtime/trace-queries.js.map +1 -1
  322. package/dist/runtime/{template-variables.d.ts → variables.d.ts} +7 -7
  323. package/dist/runtime/variables.d.ts.map +1 -0
  324. package/dist/runtime/{template-variables.js → variables.js} +35 -44
  325. package/dist/runtime/variables.js.map +1 -0
  326. package/dist/stories/shared-utils/decorators/WithDataQueries.d.ts +3 -3
  327. package/dist/stories/shared-utils/decorators/WithDataQueries.d.ts.map +1 -1
  328. package/dist/stories/shared-utils/decorators/WithDataQueries.js +1 -1
  329. package/dist/stories/shared-utils/decorators/WithDataQueries.js.map +1 -1
  330. package/dist/stories/shared-utils/decorators/WithPluginRegistry.d.ts +2 -2
  331. package/dist/stories/shared-utils/decorators/WithPluginRegistry.d.ts.map +1 -1
  332. package/dist/stories/shared-utils/decorators/WithPluginRegistry.js +2 -22
  333. package/dist/stories/shared-utils/decorators/WithPluginRegistry.js.map +1 -1
  334. package/dist/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.d.ts +3 -3
  335. package/dist/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.d.ts.map +1 -1
  336. package/dist/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.js +1 -1
  337. package/dist/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.js.map +1 -1
  338. package/dist/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.d.ts +3 -3
  339. package/dist/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.d.ts.map +1 -1
  340. package/dist/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.js +5 -5
  341. package/dist/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.js.map +1 -1
  342. package/dist/stories/shared-utils/decorators/WithPluginSystemVariables.d.ts +13 -0
  343. package/dist/stories/shared-utils/decorators/WithPluginSystemVariables.d.ts.map +1 -0
  344. package/dist/stories/shared-utils/decorators/{WithPluginSystemTemplateVariables.js → WithPluginSystemVariables.js} +10 -10
  345. package/dist/stories/shared-utils/decorators/WithPluginSystemVariables.js.map +1 -0
  346. package/dist/stories/shared-utils/decorators/WithTimeRange.d.ts +3 -3
  347. package/dist/stories/shared-utils/decorators/WithTimeRange.d.ts.map +1 -1
  348. package/dist/stories/shared-utils/decorators/WithTimeRange.js +1 -1
  349. package/dist/stories/shared-utils/decorators/WithTimeRange.js.map +1 -1
  350. package/dist/stories/shared-utils/decorators/index.d.ts +1 -1
  351. package/dist/stories/shared-utils/decorators/index.d.ts.map +1 -1
  352. package/dist/stories/shared-utils/decorators/index.js +2 -2
  353. package/dist/stories/shared-utils/decorators/index.js.map +1 -1
  354. package/dist/test/mock-data.d.ts.map +1 -1
  355. package/dist/test/mock-data.js +25 -4
  356. package/dist/test/mock-data.js.map +1 -1
  357. package/dist/test/render.d.ts +4 -4
  358. package/dist/test/render.d.ts.map +1 -1
  359. package/dist/test/render.js +2 -11
  360. package/dist/test/render.js.map +1 -1
  361. package/dist/test/setup-tests.js.map +1 -1
  362. package/dist/test/test-plugins/bert/index.d.ts.map +1 -1
  363. package/dist/test/test-plugins/bert/index.js +21 -20
  364. package/dist/test/test-plugins/bert/index.js.map +1 -1
  365. package/dist/test/test-plugins/ernie/index.js +2 -2
  366. package/dist/test/test-plugins/ernie/index.js.map +1 -1
  367. package/dist/test-utils/mock-plugin-registry.d.ts +6 -4
  368. package/dist/test-utils/mock-plugin-registry.d.ts.map +1 -1
  369. package/dist/test-utils/mock-plugin-registry.js +10 -10
  370. package/dist/test-utils/mock-plugin-registry.js.map +1 -1
  371. package/dist/utils/variables.d.ts +4 -4
  372. package/dist/utils/variables.d.ts.map +1 -1
  373. package/dist/utils/variables.js +19 -19
  374. package/dist/utils/variables.js.map +1 -1
  375. package/package.json +7 -6
  376. package/dist/cjs/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.js +0 -146
  377. package/dist/cjs/components/TraceQueryEditor/TraceQueryInput.js +0 -96
  378. package/dist/cjs/validation/datasource.js +0 -30
  379. package/dist/cjs/validation/role.js +0 -85
  380. package/dist/cjs/validation/rolebinding.js +0 -55
  381. package/dist/cjs/validation/secret.js +0 -176
  382. package/dist/cjs/validation/variable.js +0 -48
  383. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.d.ts +0 -8
  384. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.d.ts.map +0 -1
  385. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.js.map +0 -1
  386. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.d.ts +0 -13
  387. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.d.ts.map +0 -1
  388. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.js.map +0 -1
  389. package/dist/components/TimeSeriesQueryEditor/index.d.ts +0 -2
  390. package/dist/components/TimeSeriesQueryEditor/index.d.ts.map +0 -1
  391. package/dist/components/TimeSeriesQueryEditor/index.js.map +0 -1
  392. package/dist/components/TraceQueryEditor/TraceQueryEditor.d.ts +0 -9
  393. package/dist/components/TraceQueryEditor/TraceQueryEditor.d.ts.map +0 -1
  394. package/dist/components/TraceQueryEditor/TraceQueryEditor.js +0 -130
  395. package/dist/components/TraceQueryEditor/TraceQueryEditor.js.map +0 -1
  396. package/dist/components/TraceQueryEditor/TraceQueryInput.d.ts +0 -13
  397. package/dist/components/TraceQueryEditor/TraceQueryInput.d.ts.map +0 -1
  398. package/dist/components/TraceQueryEditor/TraceQueryInput.js +0 -83
  399. package/dist/components/TraceQueryEditor/TraceQueryInput.js.map +0 -1
  400. package/dist/components/TraceQueryEditor/index.d.ts +0 -2
  401. package/dist/components/TraceQueryEditor/index.d.ts.map +0 -1
  402. package/dist/runtime/template-variables.d.ts.map +0 -1
  403. package/dist/runtime/template-variables.js.map +0 -1
  404. package/dist/stories/shared-utils/decorators/WithPluginSystemTemplateVariables.d.ts +0 -13
  405. package/dist/stories/shared-utils/decorators/WithPluginSystemTemplateVariables.d.ts.map +0 -1
  406. package/dist/stories/shared-utils/decorators/WithPluginSystemTemplateVariables.js.map +0 -1
  407. package/dist/validation/datasource.d.ts +0 -19
  408. package/dist/validation/datasource.d.ts.map +0 -1
  409. package/dist/validation/datasource.js.map +0 -1
  410. package/dist/validation/index.d.ts +0 -5
  411. package/dist/validation/index.d.ts.map +0 -1
  412. package/dist/validation/index.js.map +0 -1
  413. package/dist/validation/resource.d.ts +0 -3
  414. package/dist/validation/resource.d.ts.map +0 -1
  415. package/dist/validation/resource.js.map +0 -1
  416. package/dist/validation/role.d.ts +0 -228
  417. package/dist/validation/role.d.ts.map +0 -1
  418. package/dist/validation/role.js +0 -66
  419. package/dist/validation/role.js.map +0 -1
  420. package/dist/validation/rolebinding.d.ts +0 -137
  421. package/dist/validation/rolebinding.d.ts.map +0 -1
  422. package/dist/validation/rolebinding.js +0 -47
  423. package/dist/validation/rolebinding.js.map +0 -1
  424. package/dist/validation/secret.d.ts +0 -964
  425. package/dist/validation/secret.d.ts.map +0 -1
  426. package/dist/validation/secret.js +0 -157
  427. package/dist/validation/secret.js.map +0 -1
  428. package/dist/validation/variable.d.ts +0 -96
  429. package/dist/validation/variable.d.ts.map +0 -1
  430. package/dist/validation/variable.js +0 -40
  431. package/dist/validation/variable.js.map +0 -1
@@ -10,10 +10,10 @@
10
10
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  // See the License for the specific language governing permissions and
12
12
  // limitations under the License.
13
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
14
  import { Switch } from '@mui/material';
15
15
  import { DEFAULT_LEGEND, getLegendMode, getLegendPosition, getLegendSize } from '@perses-dev/core';
16
- import { ErrorAlert, OptionsEditorControl, SettingsAutocomplete } from '@perses-dev/components';
16
+ import { ErrorAlert, OptionsEditorControl, OptionsEditorGroup, SettingsAutocomplete } from '@perses-dev/components';
17
17
  import { LEGEND_MODE_CONFIG, LEGEND_POSITIONS_CONFIG, validateLegendSpec, LEGEND_VALUE_CONFIG, LEGEND_SIZE_CONFIG } from '../../model';
18
18
  const POSITION_OPTIONS = Object.entries(LEGEND_POSITIONS_CONFIG).map(([id, config])=>{
19
19
  return {
@@ -39,7 +39,7 @@ const VALUE_OPTIONS = Object.entries(LEGEND_VALUE_CONFIG).map(([id, config])=>{
39
39
  ...config
40
40
  };
41
41
  });
42
- export function LegendOptionsEditor({ value , onChange }) {
42
+ export function LegendOptionsEditor({ value, onChange, showValuesEditor = true }) {
43
43
  const handleLegendShowChange = (_, checked)=>{
44
44
  // legend is hidden when legend obj is undefined
45
45
  const legendValue = checked === true ? {
@@ -77,13 +77,13 @@ export function LegendOptionsEditor({ value , onChange }) {
77
77
  });
78
78
  };
79
79
  const isValidLegend = validateLegendSpec(value);
80
- const currentPosition = getLegendPosition(value === null || value === void 0 ? void 0 : value.position);
80
+ const currentPosition = getLegendPosition(value?.position);
81
81
  const legendPositionConfig = LEGEND_POSITIONS_CONFIG[currentPosition];
82
- const currentMode = getLegendMode(value === null || value === void 0 ? void 0 : value.mode);
82
+ const currentMode = getLegendMode(value?.mode);
83
83
  const legendModeConfig = LEGEND_MODE_CONFIG[currentMode];
84
- const currentSize = getLegendSize(value === null || value === void 0 ? void 0 : value.size);
84
+ const currentSize = getLegendSize(value?.size);
85
85
  const legendSizeConfig = LEGEND_SIZE_CONFIG[currentSize];
86
- const currentValues = (value === null || value === void 0 ? void 0 : value.values) || [];
86
+ const currentValues = value?.values || [];
87
87
  const legendValuesConfig = currentValues.reduce((result, item)=>{
88
88
  const config = LEGEND_VALUE_CONFIG[item];
89
89
  if (config) {
@@ -94,7 +94,8 @@ export function LegendOptionsEditor({ value , onChange }) {
94
94
  }
95
95
  return result;
96
96
  }, []);
97
- return /*#__PURE__*/ _jsxs(_Fragment, {
97
+ return /*#__PURE__*/ _jsxs(OptionsEditorGroup, {
98
+ title: "Legend",
98
99
  children: [
99
100
  !isValidLegend && /*#__PURE__*/ _jsx(ErrorAlert, {
100
101
  error: {
@@ -150,7 +151,7 @@ export function LegendOptionsEditor({ value , onChange }) {
150
151
  disableClearable: true
151
152
  })
152
153
  }),
153
- /*#__PURE__*/ _jsx(OptionsEditorControl, {
154
+ showValuesEditor && /*#__PURE__*/ _jsx(OptionsEditorControl, {
154
155
  label: "Values",
155
156
  control: // For some reason, the inferred option type doesn't always seem to work
156
157
  // quite right when `multiple` is true. Explicitly setting the generics
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/LegendOptionsEditor/LegendOptionsEditor.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Switch, SwitchProps } from '@mui/material';\nimport { DEFAULT_LEGEND, getLegendMode, getLegendPosition, getLegendSize } from '@perses-dev/core';\nimport { ErrorAlert, OptionsEditorControl, SettingsAutocomplete } from '@perses-dev/components';\nimport {\n LEGEND_MODE_CONFIG,\n LEGEND_POSITIONS_CONFIG,\n LegendSpecOptions,\n LegendSingleSelectConfig,\n validateLegendSpec,\n LEGEND_VALUE_CONFIG,\n LegendValue,\n LEGEND_SIZE_CONFIG,\n} from '../../model';\n\ntype LegendPositionOption = LegendSingleSelectConfig & { id: LegendSpecOptions['position'] };\n\nconst POSITION_OPTIONS: LegendPositionOption[] = Object.entries(LEGEND_POSITIONS_CONFIG).map(([id, config]) => {\n return {\n id: id as LegendSpecOptions['position'],\n ...config,\n };\n});\n\ntype LegendModeOption = LegendSingleSelectConfig & { id: Required<LegendSpecOptions>['mode'] };\n\nconst MODE_OPTIONS: LegendModeOption[] = Object.entries(LEGEND_MODE_CONFIG).map(([id, config]) => {\n return {\n id: id as Required<LegendSpecOptions>['mode'],\n ...config,\n };\n});\n\ntype LegendSizeOption = LegendSingleSelectConfig & { id: Required<LegendSpecOptions>['size'] };\n\nconst SIZE_OPTIONS: LegendSizeOption[] = Object.entries(LEGEND_SIZE_CONFIG).map(([id, config]) => {\n return {\n id: id as Required<LegendSpecOptions>['size'],\n ...config,\n };\n});\n\ntype LegendValueOption = LegendSingleSelectConfig & { id: LegendValue };\nconst VALUE_OPTIONS: LegendValueOption[] = Object.entries(LEGEND_VALUE_CONFIG).map(([id, config]) => {\n return {\n id: id as LegendValue,\n ...config,\n };\n});\n\nexport interface LegendOptionsEditorProps {\n value?: LegendSpecOptions;\n onChange: (legend?: LegendSpecOptions) => void;\n}\n\nexport function LegendOptionsEditor({ value, onChange }: LegendOptionsEditorProps) {\n const handleLegendShowChange: SwitchProps['onChange'] = (_: unknown, checked: boolean) => {\n // legend is hidden when legend obj is undefined\n const legendValue = checked === true ? { position: DEFAULT_LEGEND.position } : undefined;\n onChange(legendValue);\n };\n\n const handleLegendPositionChange = (_: unknown, newValue: LegendPositionOption) => {\n onChange({\n ...value,\n position: newValue.id,\n });\n };\n\n const handleLegendModeChange = (_: unknown, newValue: LegendModeOption) => {\n onChange({\n ...value,\n position: currentPosition,\n mode: newValue.id,\n });\n };\n\n const handleLegendSizeChange = (_: unknown, newValue: LegendSizeOption) => {\n onChange({\n ...value,\n position: currentPosition,\n size: newValue.id,\n });\n };\n\n const handleLegendValueChange = (_: unknown, newValue: LegendValueOption[]) => {\n onChange({\n ...value,\n position: currentPosition,\n values: newValue.map((value) => {\n return value.id;\n }),\n });\n };\n\n const isValidLegend = validateLegendSpec(value);\n const currentPosition = getLegendPosition(value?.position);\n const legendPositionConfig = LEGEND_POSITIONS_CONFIG[currentPosition];\n\n const currentMode = getLegendMode(value?.mode);\n const legendModeConfig = LEGEND_MODE_CONFIG[currentMode];\n\n const currentSize = getLegendSize(value?.size);\n const legendSizeConfig = LEGEND_SIZE_CONFIG[currentSize];\n\n const currentValues = value?.values || [];\n const legendValuesConfig = currentValues.reduce((result, item) => {\n const config = LEGEND_VALUE_CONFIG[item];\n if (config) {\n result.push({ ...config, id: item });\n }\n return result;\n }, [] as LegendValueOption[]);\n\n return (\n <>\n {!isValidLegend && <ErrorAlert error={{ name: 'invalid-legend', message: 'Invalid legend spec' }} />}\n <OptionsEditorControl\n label=\"Show\"\n control={<Switch checked={value !== undefined} onChange={handleLegendShowChange} />}\n />\n <OptionsEditorControl\n label=\"Position\"\n control={\n <SettingsAutocomplete\n value={{\n ...legendPositionConfig,\n id: currentPosition,\n }}\n options={POSITION_OPTIONS}\n onChange={handleLegendPositionChange}\n disabled={value === undefined}\n disableClearable\n ></SettingsAutocomplete>\n }\n />\n <OptionsEditorControl\n label=\"Mode\"\n control={\n <SettingsAutocomplete\n value={{\n ...legendModeConfig,\n id: currentMode,\n }}\n options={MODE_OPTIONS}\n onChange={handleLegendModeChange}\n disabled={value === undefined}\n disableClearable\n ></SettingsAutocomplete>\n }\n />\n <OptionsEditorControl\n label=\"Size\"\n control={\n <SettingsAutocomplete\n value={{\n ...legendSizeConfig,\n id: currentSize,\n }}\n options={SIZE_OPTIONS}\n onChange={handleLegendSizeChange}\n // TODO: enable sizes for list mode when we normalize the layout of\n // lists to more closely match tables.\n disabled={value === undefined || currentMode !== 'table'}\n disableClearable\n ></SettingsAutocomplete>\n }\n />\n <OptionsEditorControl\n label=\"Values\"\n control={\n // For some reason, the inferred option type doesn't always seem to work\n // quite right when `multiple` is true. Explicitly setting the generics\n // to work around this.\n <SettingsAutocomplete<LegendValueOption, true, true>\n multiple={true}\n disableCloseOnSelect\n disableClearable\n value={legendValuesConfig}\n options={VALUE_OPTIONS}\n onChange={handleLegendValueChange}\n disabled={value === undefined || currentMode !== 'table'}\n limitTags={1}\n ChipProps={{\n size: 'small',\n }}\n />\n }\n />\n </>\n );\n}\n"],"names":["Switch","DEFAULT_LEGEND","getLegendMode","getLegendPosition","getLegendSize","ErrorAlert","OptionsEditorControl","SettingsAutocomplete","LEGEND_MODE_CONFIG","LEGEND_POSITIONS_CONFIG","validateLegendSpec","LEGEND_VALUE_CONFIG","LEGEND_SIZE_CONFIG","POSITION_OPTIONS","Object","entries","map","id","config","MODE_OPTIONS","SIZE_OPTIONS","VALUE_OPTIONS","LegendOptionsEditor","value","onChange","handleLegendShowChange","_","checked","legendValue","position","undefined","handleLegendPositionChange","newValue","handleLegendModeChange","currentPosition","mode","handleLegendSizeChange","size","handleLegendValueChange","values","isValidLegend","legendPositionConfig","currentMode","legendModeConfig","currentSize","legendSizeConfig","currentValues","legendValuesConfig","reduce","result","item","push","error","name","message","label","control","options","disabled","disableClearable","multiple","disableCloseOnSelect","limitTags","ChipProps"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/LegendOptionsEditor/LegendOptionsEditor.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Switch, SwitchProps } from '@mui/material';\nimport { DEFAULT_LEGEND, getLegendMode, getLegendPosition, getLegendSize } from '@perses-dev/core';\nimport { ErrorAlert, OptionsEditorControl, OptionsEditorGroup, SettingsAutocomplete } from '@perses-dev/components';\nimport { ReactElement } from 'react';\nimport {\n LEGEND_MODE_CONFIG,\n LEGEND_POSITIONS_CONFIG,\n LegendSpecOptions,\n LegendSingleSelectConfig,\n validateLegendSpec,\n LEGEND_VALUE_CONFIG,\n LegendValue,\n LEGEND_SIZE_CONFIG,\n} from '../../model';\n\ntype LegendPositionOption = LegendSingleSelectConfig & { id: LegendSpecOptions['position'] };\n\nconst POSITION_OPTIONS: LegendPositionOption[] = Object.entries(LEGEND_POSITIONS_CONFIG).map(([id, config]) => {\n return {\n id: id as LegendSpecOptions['position'],\n ...config,\n };\n});\n\ntype LegendModeOption = LegendSingleSelectConfig & { id: Required<LegendSpecOptions>['mode'] };\n\nconst MODE_OPTIONS: LegendModeOption[] = Object.entries(LEGEND_MODE_CONFIG).map(([id, config]) => {\n return {\n id: id as Required<LegendSpecOptions>['mode'],\n ...config,\n };\n});\n\ntype LegendSizeOption = LegendSingleSelectConfig & { id: Required<LegendSpecOptions>['size'] };\n\nconst SIZE_OPTIONS: LegendSizeOption[] = Object.entries(LEGEND_SIZE_CONFIG).map(([id, config]) => {\n return {\n id: id as Required<LegendSpecOptions>['size'],\n ...config,\n };\n});\n\ntype LegendValueOption = LegendSingleSelectConfig & { id: LegendValue };\nconst VALUE_OPTIONS: LegendValueOption[] = Object.entries(LEGEND_VALUE_CONFIG).map(([id, config]) => {\n return {\n id: id as LegendValue,\n ...config,\n };\n});\n\nexport interface LegendOptionsEditorProps {\n value?: LegendSpecOptions;\n onChange: (legend?: LegendSpecOptions) => void;\n showValuesEditor?: boolean;\n}\n\nexport function LegendOptionsEditor({\n value,\n onChange,\n showValuesEditor = true,\n}: LegendOptionsEditorProps): ReactElement {\n const handleLegendShowChange: SwitchProps['onChange'] = (_: unknown, checked: boolean) => {\n // legend is hidden when legend obj is undefined\n const legendValue = checked === true ? { position: DEFAULT_LEGEND.position } : undefined;\n onChange(legendValue);\n };\n\n const handleLegendPositionChange = (_: unknown, newValue: LegendPositionOption): void => {\n onChange({\n ...value,\n position: newValue.id,\n });\n };\n\n const handleLegendModeChange = (_: unknown, newValue: LegendModeOption): void => {\n onChange({\n ...value,\n position: currentPosition,\n mode: newValue.id,\n });\n };\n\n const handleLegendSizeChange = (_: unknown, newValue: LegendSizeOption): void => {\n onChange({\n ...value,\n position: currentPosition,\n size: newValue.id,\n });\n };\n\n const handleLegendValueChange = (_: unknown, newValue: LegendValueOption[]): void => {\n onChange({\n ...value,\n position: currentPosition,\n values: newValue.map((value) => {\n return value.id;\n }),\n });\n };\n\n const isValidLegend = validateLegendSpec(value);\n const currentPosition = getLegendPosition(value?.position);\n const legendPositionConfig = LEGEND_POSITIONS_CONFIG[currentPosition];\n\n const currentMode = getLegendMode(value?.mode);\n const legendModeConfig = LEGEND_MODE_CONFIG[currentMode];\n\n const currentSize = getLegendSize(value?.size);\n const legendSizeConfig = LEGEND_SIZE_CONFIG[currentSize];\n\n const currentValues = value?.values || [];\n const legendValuesConfig = currentValues.reduce((result, item) => {\n const config = LEGEND_VALUE_CONFIG[item];\n if (config) {\n result.push({ ...config, id: item });\n }\n return result;\n }, [] as LegendValueOption[]);\n\n return (\n <OptionsEditorGroup title=\"Legend\">\n {!isValidLegend && <ErrorAlert error={{ name: 'invalid-legend', message: 'Invalid legend spec' }} />}\n <OptionsEditorControl\n label=\"Show\"\n control={<Switch checked={value !== undefined} onChange={handleLegendShowChange} />}\n />\n <OptionsEditorControl\n label=\"Position\"\n control={\n <SettingsAutocomplete\n value={{\n ...legendPositionConfig,\n id: currentPosition,\n }}\n options={POSITION_OPTIONS}\n onChange={handleLegendPositionChange}\n disabled={value === undefined}\n disableClearable\n ></SettingsAutocomplete>\n }\n />\n <OptionsEditorControl\n label=\"Mode\"\n control={\n <SettingsAutocomplete\n value={{\n ...legendModeConfig,\n id: currentMode,\n }}\n options={MODE_OPTIONS}\n onChange={handleLegendModeChange}\n disabled={value === undefined}\n disableClearable\n ></SettingsAutocomplete>\n }\n />\n <OptionsEditorControl\n label=\"Size\"\n control={\n <SettingsAutocomplete\n value={{\n ...legendSizeConfig,\n id: currentSize,\n }}\n options={SIZE_OPTIONS}\n onChange={handleLegendSizeChange}\n // TODO: enable sizes for list mode when we normalize the layout of\n // lists to more closely match tables.\n disabled={value === undefined || currentMode !== 'table'}\n disableClearable\n ></SettingsAutocomplete>\n }\n />\n {showValuesEditor && (\n <OptionsEditorControl\n label=\"Values\"\n control={\n // For some reason, the inferred option type doesn't always seem to work\n // quite right when `multiple` is true. Explicitly setting the generics\n // to work around this.\n <SettingsAutocomplete<LegendValueOption, true, true>\n multiple={true}\n disableCloseOnSelect\n disableClearable\n value={legendValuesConfig}\n options={VALUE_OPTIONS}\n onChange={handleLegendValueChange}\n disabled={value === undefined || currentMode !== 'table'}\n limitTags={1}\n ChipProps={{\n size: 'small',\n }}\n />\n }\n />\n )}\n </OptionsEditorGroup>\n );\n}\n"],"names":["Switch","DEFAULT_LEGEND","getLegendMode","getLegendPosition","getLegendSize","ErrorAlert","OptionsEditorControl","OptionsEditorGroup","SettingsAutocomplete","LEGEND_MODE_CONFIG","LEGEND_POSITIONS_CONFIG","validateLegendSpec","LEGEND_VALUE_CONFIG","LEGEND_SIZE_CONFIG","POSITION_OPTIONS","Object","entries","map","id","config","MODE_OPTIONS","SIZE_OPTIONS","VALUE_OPTIONS","LegendOptionsEditor","value","onChange","showValuesEditor","handleLegendShowChange","_","checked","legendValue","position","undefined","handleLegendPositionChange","newValue","handleLegendModeChange","currentPosition","mode","handleLegendSizeChange","size","handleLegendValueChange","values","isValidLegend","legendPositionConfig","currentMode","legendModeConfig","currentSize","legendSizeConfig","currentValues","legendValuesConfig","reduce","result","item","push","title","error","name","message","label","control","options","disabled","disableClearable","multiple","disableCloseOnSelect","limitTags","ChipProps"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { FC } from 'react';
2
+ export interface MetricLabelInputProps {
3
+ value?: string;
4
+ onChange: (metricLabel?: string) => void;
5
+ }
6
+ export declare const MetricLabelInput: FC<MetricLabelInputProps>;
7
+ //# sourceMappingURL=MetricLabelInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricLabelInput.d.ts","sourceRoot":"","sources":["../../../src/components/MetricLabelInput/MetricLabelInput.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAE3B,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAatD,CAAC"}
@@ -0,0 +1,33 @@
1
+ // Copyright 2025 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
+ import { jsx as _jsx } from "react/jsx-runtime";
14
+ import { TextField } from '@mui/material';
15
+ import { OptionsEditorControl } from '@perses-dev/components';
16
+ export const MetricLabelInput = ({ value, onChange })=>{
17
+ const handleChange = (event)=>{
18
+ const newValue = event.target.value;
19
+ onChange(newValue || undefined);
20
+ };
21
+ return /*#__PURE__*/ _jsx(OptionsEditorControl, {
22
+ label: "Metric label",
23
+ description: "Specify label to display",
24
+ control: /*#__PURE__*/ _jsx(TextField, {
25
+ fullWidth: true,
26
+ name: "Metric label",
27
+ value: value || '',
28
+ onChange: handleChange
29
+ })
30
+ });
31
+ };
32
+
33
+ //# sourceMappingURL=MetricLabelInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/MetricLabelInput/MetricLabelInput.tsx"],"sourcesContent":["// Copyright 2025 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { TextField } from '@mui/material';\nimport { OptionsEditorControl } from '@perses-dev/components';\nimport { FC } from 'react';\n\nexport interface MetricLabelInputProps {\n value?: string;\n onChange: (metricLabel?: string) => void;\n}\n\nexport const MetricLabelInput: FC<MetricLabelInputProps> = ({ value, onChange }) => {\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\n const newValue = event.target.value;\n onChange(newValue || undefined);\n };\n\n return (\n <OptionsEditorControl\n label=\"Metric label\"\n description=\"Specify label to display\"\n control={<TextField fullWidth name=\"Metric label\" value={value || ''} onChange={handleChange} />}\n />\n );\n};\n"],"names":["TextField","OptionsEditorControl","MetricLabelInput","value","onChange","handleChange","event","newValue","target","undefined","label","description","control","fullWidth","name"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;AAEjC,SAASA,SAAS,QAAQ,gBAAgB;AAC1C,SAASC,oBAAoB,QAAQ,yBAAyB;AAQ9D,OAAO,MAAMC,mBAA8C,CAAC,EAAEC,KAAK,EAAEC,QAAQ,EAAE;IAC7E,MAAMC,eAAe,CAACC;QACpB,MAAMC,WAAWD,MAAME,MAAM,CAACL,KAAK;QACnCC,SAASG,YAAYE;IACvB;IAEA,qBACE,KAACR;QACCS,OAAM;QACNC,aAAY;QACZC,uBAAS,KAACZ;YAAUa,SAAS;YAACC,MAAK;YAAeX,OAAOA,SAAS;YAAIC,UAAUC;;;AAGtF,EAAE"}
@@ -0,0 +1,2 @@
1
+ export * from './MetricLabelInput';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/MetricLabelInput/index.ts"],"names":[],"mappings":"AAaA,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,15 @@
1
+ // Copyright 2025 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
+ export * from './MetricLabelInput';
14
+
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/MetricLabelInput/index.ts"],"sourcesContent":["// Copyright 2025 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport * from './MetricLabelInput';\n"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,cAAc,qBAAqB"}
@@ -0,0 +1,17 @@
1
+ import { ReactElement } from 'react';
2
+ import { QueryDefinition, QueryPluginType } from '@perses-dev/core';
3
+ export interface MultiQueryEditorProps {
4
+ queryTypes: QueryPluginType[];
5
+ queries?: QueryDefinition[];
6
+ onChange: (queries: QueryDefinition[]) => void;
7
+ }
8
+ /**
9
+ * A component render a list of {@link QueryEditorContainer} for the given query definitions.
10
+ * It allows adding, removing and editing queries.
11
+ * @param queryTypes The list of query types that the underlying editor will propose
12
+ * @param queries The list of query definitions to render
13
+ * @param onChange The callback to call when the queries are modified
14
+ * @constructor
15
+ */
16
+ export declare function MultiQueryEditor({ queryTypes, queries, onChange }: MultiQueryEditorProps): ReactElement;
17
+ //# sourceMappingURL=MultiQueryEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiQueryEditor.d.ts","sourceRoot":"","sources":["../../../src/components/MultiQueryEditor/MultiQueryEditor.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,YAAY,EAAY,MAAM,OAAO,CAAC;AAI/C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAIpE,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;CAChD;AA6BD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,UAAU,EAAE,OAAY,EAAE,QAAQ,EAAE,EAAE,qBAAqB,GAAG,YAAY,CA8E5G"}
@@ -1,4 +1,4 @@
1
- // Copyright 2023 The Perses Authors
1
+ // Copyright 2024 The Perses Authors
2
2
  // Licensed under the Apache License, Version 2.0 (the "License");
3
3
  // you may not use this file except in compliance with the License.
4
4
  // You may obtain a copy of the License at
@@ -15,20 +15,43 @@ import { useState } from 'react';
15
15
  import { produce } from 'immer';
16
16
  import { Button, Stack } from '@mui/material';
17
17
  import AddIcon from 'mdi-material-ui/Plus';
18
- import { usePlugin, usePluginRegistry } from '../../runtime';
19
- import { TimeSeriesQueryInput } from './TimeSeriesQueryInput';
20
- const DEFAULT_QUERY_PLUGIN_TYPE = 'TimeSeriesQuery';
21
- export function TimeSeriesQueryEditor({ queries =[] , onChange }) {
22
- const hasMoreThanOneQuery = queries.length > 1;
23
- const { defaultPluginKinds } = usePluginRegistry();
24
- var _defaultPluginKinds_DEFAULT_QUERY_PLUGIN_TYPE;
25
- const defaultTimeSeriesQueryKind = (_defaultPluginKinds_DEFAULT_QUERY_PLUGIN_TYPE = defaultPluginKinds === null || defaultPluginKinds === void 0 ? void 0 : defaultPluginKinds[DEFAULT_QUERY_PLUGIN_TYPE]) !== null && _defaultPluginKinds_DEFAULT_QUERY_PLUGIN_TYPE !== void 0 ? _defaultPluginKinds_DEFAULT_QUERY_PLUGIN_TYPE : '';
26
- const { data: defaultQueryPlugin } = usePlugin(DEFAULT_QUERY_PLUGIN_TYPE, defaultTimeSeriesQueryKind, {
27
- useErrorBoundary: true,
18
+ import { useListPluginMetadata, usePlugin, usePluginRegistry } from '../../runtime';
19
+ import { QueryEditorContainer } from './QueryEditorContainer';
20
+ function useDefaultQueryDefinition(queryTypes) {
21
+ // Build the default query plugin
22
+ // This will be used only if the queries are empty, to open a starting query
23
+ // Firs the default query type
24
+ const defaultQueryType = queryTypes[0];
25
+ // Then the default plugin kind
26
+ // Use as default the plugin kind explicitly set as default or the first in the list
27
+ const { data: queryPlugins } = useListPluginMetadata(queryTypes);
28
+ const { defaultPluginKinds } = usePluginRegistry();
29
+ const defaultQueryKind = defaultPluginKinds?.[defaultQueryType] ?? queryPlugins?.[0]?.spec.name ?? '';
30
+ const { data: defaultQueryPlugin } = usePlugin(defaultQueryType, defaultQueryKind, {
31
+ throwOnError: true,
28
32
  enabled: true
29
33
  });
34
+ // This default query definition is used if no query is provided initially or when we add a new query
35
+ return {
36
+ kind: defaultQueryType,
37
+ spec: {
38
+ plugin: {
39
+ kind: defaultQueryKind,
40
+ spec: defaultQueryPlugin?.createInitialOptions() || {}
41
+ }
42
+ }
43
+ };
44
+ }
45
+ /**
46
+ * A component render a list of {@link QueryEditorContainer} for the given query definitions.
47
+ * It allows adding, removing and editing queries.
48
+ * @param queryTypes The list of query types that the underlying editor will propose
49
+ * @param queries The list of query definitions to render
50
+ * @param onChange The callback to call when the queries are modified
51
+ * @constructor
52
+ */ export function MultiQueryEditor({ queryTypes, queries = [], onChange }) {
53
+ const defaultInitialQueryDefinition = useDefaultQueryDefinition(queryTypes);
30
54
  // State for which queries are collapsed
31
- // TODO: Would be easier if we had IDs for queries.
32
55
  const [queriesCollapsed, setQueriesCollapsed] = useState(queries.map(()=>false));
33
56
  // Query handlers
34
57
  const handleQueryChange = (index, queryDef)=>{
@@ -43,23 +66,13 @@ export function TimeSeriesQueryEditor({ queries =[] , onChange }) {
43
66
  }));
44
67
  };
45
68
  const handleQueryAdd = ()=>{
46
- if (!defaultQueryPlugin) return;
47
69
  onChange(produce(queries, (draft)=>{
48
- const queryDef = {
49
- kind: DEFAULT_QUERY_PLUGIN_TYPE,
50
- spec: {
51
- plugin: {
52
- kind: defaultTimeSeriesQueryKind,
53
- spec: defaultQueryPlugin.createInitialOptions()
54
- }
55
- }
56
- };
57
70
  if (draft) {
58
- draft.push(queryDef);
71
+ draft.push(defaultInitialQueryDefinition);
59
72
  } else {
60
73
  draft = [
61
74
  ...queries,
62
- queryDef
75
+ defaultInitialQueryDefinition
63
76
  ];
64
77
  }
65
78
  }));
@@ -89,31 +102,21 @@ export function TimeSeriesQueryEditor({ queries =[] , onChange }) {
89
102
  ];
90
103
  });
91
104
  };
92
- var _defaultPluginKinds_TimeSeriesQuery;
93
105
  // show one query input if queries is empty
94
106
  const queryDefinitions = queries.length ? queries : [
95
- {
96
- kind: 'TimeSeriesQuery',
97
- spec: {
98
- plugin: {
99
- kind: (_defaultPluginKinds_TimeSeriesQuery = defaultPluginKinds === null || defaultPluginKinds === void 0 ? void 0 : defaultPluginKinds['TimeSeriesQuery']) !== null && _defaultPluginKinds_TimeSeriesQuery !== void 0 ? _defaultPluginKinds_TimeSeriesQuery : '',
100
- spec: {
101
- query: ''
102
- }
103
- }
104
- }
105
- }
107
+ defaultInitialQueryDefinition
106
108
  ];
107
109
  return /*#__PURE__*/ _jsxs(_Fragment, {
108
110
  children: [
109
111
  /*#__PURE__*/ _jsx(Stack, {
110
112
  spacing: 1,
111
- children: queryDefinitions.map((query, i)=>/*#__PURE__*/ _jsx(TimeSeriesQueryInput, {
113
+ children: queryDefinitions.map((query, i)=>/*#__PURE__*/ _jsx(QueryEditorContainer, {
114
+ queryTypes: queryTypes,
112
115
  index: i,
113
116
  query: query,
114
117
  isCollapsed: !!queriesCollapsed[i],
115
118
  onChange: handleQueryChange,
116
- onDelete: hasMoreThanOneQuery ? handleQueryDelete : undefined,
119
+ onDelete: queries.length > 1 ? handleQueryDelete : undefined,
117
120
  onCollapseExpand: handleQueryCollapseExpand
118
121
  }, i))
119
122
  }),
@@ -130,4 +133,4 @@ export function TimeSeriesQueryEditor({ queries =[] , onChange }) {
130
133
  });
131
134
  }
132
135
 
133
- //# sourceMappingURL=TimeSeriesQueryEditor.js.map
136
+ //# sourceMappingURL=MultiQueryEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/MultiQueryEditor/MultiQueryEditor.tsx"],"sourcesContent":["// Copyright 2024 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { ReactElement, useState } from 'react';\nimport { produce } from 'immer';\nimport { Button, Stack } from '@mui/material';\nimport AddIcon from 'mdi-material-ui/Plus';\nimport { QueryDefinition, QueryPluginType } from '@perses-dev/core';\nimport { useListPluginMetadata, usePlugin, usePluginRegistry } from '../../runtime';\nimport { QueryEditorContainer } from './QueryEditorContainer';\n\nexport interface MultiQueryEditorProps {\n queryTypes: QueryPluginType[];\n queries?: QueryDefinition[];\n onChange: (queries: QueryDefinition[]) => void;\n}\n\nfunction useDefaultQueryDefinition(queryTypes: QueryPluginType[]): QueryDefinition {\n // Build the default query plugin\n // This will be used only if the queries are empty, to open a starting query\n\n // Firs the default query type\n const defaultQueryType = queryTypes[0]!;\n\n // Then the default plugin kind\n // Use as default the plugin kind explicitly set as default or the first in the list\n const { data: queryPlugins } = useListPluginMetadata(queryTypes);\n const { defaultPluginKinds } = usePluginRegistry();\n const defaultQueryKind = defaultPluginKinds?.[defaultQueryType] ?? queryPlugins?.[0]?.spec.name ?? '';\n\n const { data: defaultQueryPlugin } = usePlugin(defaultQueryType, defaultQueryKind, {\n throwOnError: true,\n enabled: true,\n });\n\n // This default query definition is used if no query is provided initially or when we add a new query\n return {\n kind: defaultQueryType,\n spec: {\n plugin: { kind: defaultQueryKind, spec: defaultQueryPlugin?.createInitialOptions() || {} },\n },\n };\n}\n\n/**\n * A component render a list of {@link QueryEditorContainer} for the given query definitions.\n * It allows adding, removing and editing queries.\n * @param queryTypes The list of query types that the underlying editor will propose\n * @param queries The list of query definitions to render\n * @param onChange The callback to call when the queries are modified\n * @constructor\n */\nexport function MultiQueryEditor({ queryTypes, queries = [], onChange }: MultiQueryEditorProps): ReactElement {\n const defaultInitialQueryDefinition = useDefaultQueryDefinition(queryTypes);\n\n // State for which queries are collapsed\n const [queriesCollapsed, setQueriesCollapsed] = useState(queries.map(() => false));\n\n // Query handlers\n const handleQueryChange = (index: number, queryDef: QueryDefinition): void => {\n onChange(\n produce(queries, (draft) => {\n if (draft) {\n draft[index] = queryDef;\n } else {\n draft = [queryDef];\n }\n })\n );\n };\n\n const handleQueryAdd = (): void => {\n onChange(\n produce(queries, (draft) => {\n if (draft) {\n draft.push(defaultInitialQueryDefinition);\n } else {\n draft = [...queries, defaultInitialQueryDefinition];\n }\n })\n );\n setQueriesCollapsed((queriesCollapsed) => {\n queriesCollapsed.push(false);\n return [...queriesCollapsed];\n });\n };\n\n const handleQueryDelete = (index: number): void => {\n onChange(\n produce(queries, (draft) => {\n draft.splice(index, 1);\n })\n );\n setQueriesCollapsed((queriesCollapsed) => {\n queriesCollapsed.splice(index, 1);\n return [...queriesCollapsed];\n });\n };\n\n const handleQueryCollapseExpand = (index: number): void => {\n setQueriesCollapsed((queriesCollapsed) => {\n queriesCollapsed[index] = !queriesCollapsed[index];\n return [...queriesCollapsed];\n });\n };\n\n // show one query input if queries is empty\n const queryDefinitions: QueryDefinition[] = queries.length ? queries : [defaultInitialQueryDefinition];\n\n return (\n <>\n <Stack spacing={1}>\n {queryDefinitions.map((query: QueryDefinition, i: number) => (\n <QueryEditorContainer\n queryTypes={queryTypes}\n key={i}\n index={i}\n query={query}\n isCollapsed={!!queriesCollapsed[i]}\n onChange={handleQueryChange}\n onDelete={queries.length > 1 ? handleQueryDelete : undefined}\n onCollapseExpand={handleQueryCollapseExpand}\n />\n ))}\n </Stack>\n <Button variant=\"contained\" startIcon={<AddIcon />} sx={{ marginTop: 1 }} onClick={handleQueryAdd}>\n Add Query\n </Button>\n </>\n );\n}\n"],"names":["useState","produce","Button","Stack","AddIcon","useListPluginMetadata","usePlugin","usePluginRegistry","QueryEditorContainer","useDefaultQueryDefinition","queryTypes","defaultQueryType","data","queryPlugins","defaultPluginKinds","defaultQueryKind","spec","name","defaultQueryPlugin","throwOnError","enabled","kind","plugin","createInitialOptions","MultiQueryEditor","queries","onChange","defaultInitialQueryDefinition","queriesCollapsed","setQueriesCollapsed","map","handleQueryChange","index","queryDef","draft","handleQueryAdd","push","handleQueryDelete","splice","handleQueryCollapseExpand","queryDefinitions","length","spacing","query","i","isCollapsed","onDelete","undefined","onCollapseExpand","variant","startIcon","sx","marginTop","onClick"],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { QueryDefinition, QueryPluginType } from '@perses-dev/core';
2
+ import { ReactElement } from 'react';
3
+ /**
4
+ * Properties for {@link QueryEditorContainer}
5
+ */
6
+ interface QueryEditorContainerProps {
7
+ queryTypes: QueryPluginType[];
8
+ index: number;
9
+ query: QueryDefinition;
10
+ onChange: (index: number, query: QueryDefinition) => void;
11
+ onCollapseExpand: (index: number) => void;
12
+ isCollapsed?: boolean;
13
+ onDelete?: (index: number) => void;
14
+ }
15
+ /**
16
+ * Container for a query editor. This component is responsible for rendering the query editor, and make it collapsible
17
+ * to not take too much space.
18
+ * @param queryTypes the supported query types
19
+ * @param index the index of the query in the list
20
+ * @param query the query definition
21
+ * @param isCollapsed whether the query editor is collapsed or not
22
+ * @param onDelete callback when the query is deleted
23
+ * @param onChange callback when the query is changed
24
+ * @param onCollapseExpand callback when the query is collapsed or expanded
25
+ * @constructor
26
+ */
27
+ export declare const QueryEditorContainer: ({ queryTypes, index, query, isCollapsed, onDelete, onChange, onCollapseExpand, }: QueryEditorContainerProps) => ReactElement;
28
+ export {};
29
+ //# sourceMappingURL=QueryEditorContainer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryEditorContainer.d.ts","sourceRoot":"","sources":["../../../src/components/MultiQueryEditor/QueryEditorContainer.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKpE,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAGrC;;GAEG;AACH,UAAU,yBAAyB;IACjC,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC1D,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,qFAQ9B,yBAAyB,KAAG,YAsB9B,CAAC"}
@@ -1,4 +1,4 @@
1
- // Copyright 2023 The Perses Authors
1
+ // Copyright 2024 The Perses Authors
2
2
  // Licensed under the Apache License, Version 2.0 (the "License");
3
3
  // you may not use this file except in compliance with the License.
4
4
  // You may obtain a copy of the License at
@@ -17,7 +17,18 @@ import DeleteIcon from 'mdi-material-ui/DeleteOutline';
17
17
  import ChevronDown from 'mdi-material-ui/ChevronDown';
18
18
  import ChevronRight from 'mdi-material-ui/ChevronRight';
19
19
  import { PluginEditor } from '../PluginEditor';
20
- export const TimeSeriesQueryInput = ({ index , query , isCollapsed , onDelete , onChange , onCollapseExpand })=>{
20
+ /**
21
+ * Container for a query editor. This component is responsible for rendering the query editor, and make it collapsible
22
+ * to not take too much space.
23
+ * @param queryTypes the supported query types
24
+ * @param index the index of the query in the list
25
+ * @param query the query definition
26
+ * @param isCollapsed whether the query editor is collapsed or not
27
+ * @param onDelete callback when the query is deleted
28
+ * @param onChange callback when the query is changed
29
+ * @param onCollapseExpand callback when the query is collapsed or expanded
30
+ * @constructor
31
+ */ export const QueryEditorContainer = ({ queryTypes, index, query, isCollapsed, onDelete, onChange, onCollapseExpand })=>{
21
32
  return /*#__PURE__*/ _jsxs(Stack, {
22
33
  spacing: 1,
23
34
  children: [
@@ -36,7 +47,7 @@ export const TimeSeriesQueryInput = ({ index , query , isCollapsed , onDelete ,
36
47
  variant: "overline",
37
48
  component: "h4",
38
49
  children: [
39
- "Query ",
50
+ "Query #",
40
51
  index + 1
41
52
  ]
42
53
  }),
@@ -53,6 +64,7 @@ export const TimeSeriesQueryInput = ({ index , query , isCollapsed , onDelete ,
53
64
  ]
54
65
  }),
55
66
  !isCollapsed && /*#__PURE__*/ _jsx(QueryEditor, {
67
+ queryTypes: queryTypes,
56
68
  value: query,
57
69
  onChange: (next)=>onChange(index, next)
58
70
  })
@@ -60,24 +72,35 @@ export const TimeSeriesQueryInput = ({ index , query , isCollapsed , onDelete ,
60
72
  }, index);
61
73
  };
62
74
  /**
63
- * Displays an editor for TimeSeriesQueryDefinition objects.
75
+ * Editor for a query definition. This component is responsible for rendering the plugin editor for the given query.
76
+ * This will allow user to select a plugin extending from the given supported query types, and then edit the plugin
77
+ * spec for this plugin.
78
+ * @param props
79
+ * @constructor
64
80
  */ function QueryEditor(props) {
65
- const { value , onChange , ...others } = props;
66
- const { spec: { plugin } } = value;
81
+ const { value, onChange, queryTypes, ...others } = props;
67
82
  const handlePluginChange = (next)=>{
68
83
  onChange(produce(value, (draft)=>{
69
- draft.spec.plugin = next;
84
+ draft.kind = next.selection.type;
85
+ draft.spec.plugin.kind = next.selection.kind;
86
+ draft.spec.plugin.spec = next.spec;
70
87
  }));
71
88
  };
72
89
  return /*#__PURE__*/ _jsx(Box, {
73
90
  ...others,
74
91
  children: /*#__PURE__*/ _jsx(PluginEditor, {
75
- pluginType: "TimeSeriesQuery",
92
+ pluginTypes: queryTypes,
76
93
  pluginKindLabel: "Query Type",
77
- value: plugin,
94
+ value: {
95
+ selection: {
96
+ kind: value.spec.plugin.kind,
97
+ type: value.kind
98
+ },
99
+ spec: value.spec.plugin.spec
100
+ },
78
101
  onChange: handlePluginChange
79
102
  })
80
103
  });
81
104
  }
82
105
 
83
- //# sourceMappingURL=TimeSeriesQueryInput.js.map
106
+ //# sourceMappingURL=QueryEditorContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/MultiQueryEditor/QueryEditorContainer.tsx"],"sourcesContent":["// Copyright 2024 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport produce from 'immer';\nimport { QueryDefinition, QueryPluginType } from '@perses-dev/core';\nimport { Stack, IconButton, Typography, BoxProps, Box } from '@mui/material';\nimport DeleteIcon from 'mdi-material-ui/DeleteOutline';\nimport ChevronDown from 'mdi-material-ui/ChevronDown';\nimport ChevronRight from 'mdi-material-ui/ChevronRight';\nimport { ReactElement } from 'react';\nimport { PluginEditor, PluginEditorProps } from '../PluginEditor';\n\n/**\n * Properties for {@link QueryEditorContainer}\n */\ninterface QueryEditorContainerProps {\n queryTypes: QueryPluginType[];\n index: number;\n query: QueryDefinition;\n onChange: (index: number, query: QueryDefinition) => void;\n onCollapseExpand: (index: number) => void;\n isCollapsed?: boolean;\n onDelete?: (index: number) => void;\n}\n\n/**\n * Container for a query editor. This component is responsible for rendering the query editor, and make it collapsible\n * to not take too much space.\n * @param queryTypes the supported query types\n * @param index the index of the query in the list\n * @param query the query definition\n * @param isCollapsed whether the query editor is collapsed or not\n * @param onDelete callback when the query is deleted\n * @param onChange callback when the query is changed\n * @param onCollapseExpand callback when the query is collapsed or expanded\n * @constructor\n */\nexport const QueryEditorContainer = ({\n queryTypes,\n index,\n query,\n isCollapsed,\n onDelete,\n onChange,\n onCollapseExpand,\n}: QueryEditorContainerProps): ReactElement => {\n return (\n <Stack key={index} spacing={1}>\n <Stack direction=\"row\" alignItems=\"center\" borderBottom={1} borderColor={(theme) => theme.palette.divider}>\n <IconButton size=\"small\" onClick={() => onCollapseExpand(index)}>\n {isCollapsed ? <ChevronRight /> : <ChevronDown />}\n </IconButton>\n <Typography variant=\"overline\" component=\"h4\">\n Query #{index + 1}\n </Typography>\n <IconButton\n size=\"small\"\n // Use `visibility` to ensure that the row has the same height when delete button is visible or not visible\n sx={{ marginLeft: 'auto', visibility: `${onDelete ? 'visible' : 'hidden'}` }}\n onClick={() => onDelete && onDelete(index)}\n >\n <DeleteIcon />\n </IconButton>\n </Stack>\n {!isCollapsed && <QueryEditor queryTypes={queryTypes} value={query} onChange={(next) => onChange(index, next)} />}\n </Stack>\n );\n};\n\n// Props on MUI Box that we don't want people to pass because we're either redefining them or providing them in\n// this component\ntype OmittedMuiProps = 'children' | 'value' | 'onChange';\ninterface QueryEditorProps extends Omit<BoxProps, OmittedMuiProps> {\n queryTypes: QueryPluginType[];\n value: QueryDefinition;\n onChange: (next: QueryDefinition) => void;\n}\n\n/**\n * Editor for a query definition. This component is responsible for rendering the plugin editor for the given query.\n * This will allow user to select a plugin extending from the given supported query types, and then edit the plugin\n * spec for this plugin.\n * @param props\n * @constructor\n */\nfunction QueryEditor(props: QueryEditorProps): ReactElement {\n const { value, onChange, queryTypes, ...others } = props;\n\n const handlePluginChange: PluginEditorProps['onChange'] = (next) => {\n onChange(\n produce(value, (draft) => {\n draft.kind = next.selection.type;\n draft.spec.plugin.kind = next.selection.kind;\n draft.spec.plugin.spec = next.spec;\n })\n );\n };\n\n return (\n <Box {...others}>\n <PluginEditor\n pluginTypes={queryTypes}\n pluginKindLabel=\"Query Type\"\n value={{\n selection: {\n kind: value.spec.plugin.kind,\n type: value.kind,\n },\n spec: value.spec.plugin.spec,\n }}\n onChange={handlePluginChange}\n />\n </Box>\n );\n}\n"],"names":["produce","Stack","IconButton","Typography","Box","DeleteIcon","ChevronDown","ChevronRight","PluginEditor","QueryEditorContainer","queryTypes","index","query","isCollapsed","onDelete","onChange","onCollapseExpand","spacing","direction","alignItems","borderBottom","borderColor","theme","palette","divider","size","onClick","variant","component","sx","marginLeft","visibility","QueryEditor","value","next","props","others","handlePluginChange","draft","kind","selection","type","spec","plugin","pluginTypes","pluginKindLabel"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;AAEjC,OAAOA,aAAa,QAAQ;AAE5B,SAASC,KAAK,EAAEC,UAAU,EAAEC,UAAU,EAAYC,GAAG,QAAQ,gBAAgB;AAC7E,OAAOC,gBAAgB,gCAAgC;AACvD,OAAOC,iBAAiB,8BAA8B;AACtD,OAAOC,kBAAkB,+BAA+B;AAExD,SAASC,YAAY,QAA2B,kBAAkB;AAelE;;;;;;;;;;;CAWC,GACD,OAAO,MAAMC,uBAAuB,CAAC,EACnCC,UAAU,EACVC,KAAK,EACLC,KAAK,EACLC,WAAW,EACXC,QAAQ,EACRC,QAAQ,EACRC,gBAAgB,EACU;IAC1B,qBACE,MAACf;QAAkBgB,SAAS;;0BAC1B,MAAChB;gBAAMiB,WAAU;gBAAMC,YAAW;gBAASC,cAAc;gBAAGC,aAAa,CAACC,QAAUA,MAAMC,OAAO,CAACC,OAAO;;kCACvG,KAACtB;wBAAWuB,MAAK;wBAAQC,SAAS,IAAMV,iBAAiBL;kCACtDE,4BAAc,KAACN,kCAAkB,KAACD;;kCAErC,MAACH;wBAAWwB,SAAQ;wBAAWC,WAAU;;4BAAK;4BACpCjB,QAAQ;;;kCAElB,KAACT;wBACCuB,MAAK;wBACL,2GAA2G;wBAC3GI,IAAI;4BAAEC,YAAY;4BAAQC,YAAY,CAAC,EAAEjB,WAAW,YAAY,SAAS,CAAC;wBAAC;wBAC3EY,SAAS,IAAMZ,YAAYA,SAASH;kCAEpC,cAAA,KAACN;;;;YAGJ,CAACQ,6BAAe,KAACmB;gBAAYtB,YAAYA;gBAAYuB,OAAOrB;gBAAOG,UAAU,CAACmB,OAASnB,SAASJ,OAAOuB;;;OAjB9FvB;AAoBhB,EAAE;AAWF;;;;;;CAMC,GACD,SAASqB,YAAYG,KAAuB;IAC1C,MAAM,EAAEF,KAAK,EAAElB,QAAQ,EAAEL,UAAU,EAAE,GAAG0B,QAAQ,GAAGD;IAEnD,MAAME,qBAAoD,CAACH;QACzDnB,SACEf,QAAQiC,OAAO,CAACK;YACdA,MAAMC,IAAI,GAAGL,KAAKM,SAAS,CAACC,IAAI;YAChCH,MAAMI,IAAI,CAACC,MAAM,CAACJ,IAAI,GAAGL,KAAKM,SAAS,CAACD,IAAI;YAC5CD,MAAMI,IAAI,CAACC,MAAM,CAACD,IAAI,GAAGR,KAAKQ,IAAI;QACpC;IAEJ;IAEA,qBACE,KAACtC;QAAK,GAAGgC,MAAM;kBACb,cAAA,KAAC5B;YACCoC,aAAalC;YACbmC,iBAAgB;YAChBZ,OAAO;gBACLO,WAAW;oBACTD,MAAMN,MAAMS,IAAI,CAACC,MAAM,CAACJ,IAAI;oBAC5BE,MAAMR,MAAMM,IAAI;gBAClB;gBACAG,MAAMT,MAAMS,IAAI,CAACC,MAAM,CAACD,IAAI;YAC9B;YACA3B,UAAUsB;;;AAIlB"}
@@ -0,0 +1,2 @@
1
+ export * from './MultiQueryEditor';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/MultiQueryEditor/index.tsx"],"names":[],"mappings":"AAaA,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,15 @@
1
+ // Copyright 2024 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
+ export * from './MultiQueryEditor';
14
+
15
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/TraceQueryEditor/index.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport * from './TraceQueryEditor';\n"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,cAAc,qBAAqB"}
1
+ {"version":3,"sources":["../../../src/components/MultiQueryEditor/index.tsx"],"sourcesContent":["// Copyright 2024 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport * from './MultiQueryEditor';\n"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,cAAc,qBAAqB"}
@@ -1,16 +1,16 @@
1
- import { ReactNode } from 'react';
2
- export declare type OptionsEditorRadio = {
1
+ import { ReactElement, ReactNode } from 'react';
2
+ export type OptionsEditorRadio = {
3
3
  label: string;
4
4
  /**
5
5
  * Content rendered when the tab is active.
6
6
  */
7
7
  content: ReactNode;
8
8
  };
9
- export declare type OptionsEditorRadiosProps = {
9
+ export type OptionsEditorRadiosProps = {
10
10
  tabs: OptionsEditorRadio[];
11
11
  defaultTab: number;
12
12
  onModeChange: (value: number) => void;
13
13
  isReadonly?: boolean;
14
14
  };
15
- export declare const OptionsEditorRadios: (props: OptionsEditorRadiosProps) => JSX.Element;
15
+ export declare const OptionsEditorRadios: (props: OptionsEditorRadiosProps) => ReactElement;
16
16
  //# sourceMappingURL=OptionsEditorRadios.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OptionsEditorRadios.d.ts","sourceRoot":"","sources":["../../../src/components/OptionsEditorRadios/OptionsEditorRadios.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAG5C,oBAAY,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,EAAE,SAAS,CAAC;CACpB,CAAC;AAEF,oBAAY,wBAAwB,GAAG;IACrC,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,mBAAmB,UAAW,wBAAwB,gBAoClE,CAAC"}
1
+ {"version":3,"file":"OptionsEditorRadios.d.ts","sourceRoot":"","sources":["../../../src/components/OptionsEditorRadios/OptionsEditorRadios.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAG1D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,EAAE,SAAS,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,mBAAmB,UAAW,wBAAwB,KAAG,YAoCrE,CAAC"}
@@ -15,7 +15,7 @@ import { FormControl, FormControlLabel, Radio, RadioGroup, Box } from '@mui/mate
15
15
  import { useState } from 'react';
16
16
  import { OptionsEditorTabPanel } from '../OptionsEditorTabPanel';
17
17
  export const OptionsEditorRadios = (props)=>{
18
- const { tabs , defaultTab , onModeChange , isReadonly } = props;
18
+ const { tabs, defaultTab, onModeChange, isReadonly } = props;
19
19
  const [activeTab, setActiveTab] = useState(defaultTab);
20
20
  const handleChange = (_, value)=>{
21
21
  const v = parseInt(value);
@@ -36,7 +36,7 @@ export const OptionsEditorRadios = (props)=>{
36
36
  value: activeTab,
37
37
  onChange: handleChange,
38
38
  "aria-labelledby": "Configuration radio",
39
- children: tabs.map(({ label }, i)=>{
39
+ children: tabs.map(({ label }, i)=>{
40
40
  return /*#__PURE__*/ _jsx(FormControlLabel, {
41
41
  disabled: isReadonly,
42
42
  value: i,
@@ -47,7 +47,7 @@ export const OptionsEditorRadios = (props)=>{
47
47
  })
48
48
  })
49
49
  }),
50
- tabs.map(({ label , content }, i)=>{
50
+ tabs.map(({ label, content }, i)=>{
51
51
  return /*#__PURE__*/ _jsx(OptionsEditorTabPanel, {
52
52
  value: activeTab,
53
53
  index: i,