@perses-dev/plugin-system 0.0.0-snapshot-scatter-chart-embed-8efdfab → 0.0.0-snapshot-scatterplot-fix-imports-95e1b59

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 (290) hide show
  1. package/dist/cjs/components/CalculationSelector/CalculationSelector.js +1 -1
  2. package/dist/cjs/components/DatasourceEditorForm/DatasourceEditorForm.js +16 -16
  3. package/dist/cjs/components/DatasourceSelect.js +11 -9
  4. package/dist/cjs/components/LegendOptionsEditor/LegendOptionsEditor.js +1 -1
  5. package/dist/cjs/components/OptionsEditorRadios/OptionsEditorRadios.js +3 -3
  6. package/dist/cjs/components/OptionsEditorTabPanel/OptionsEditorTabPanel.js +1 -1
  7. package/dist/cjs/components/OptionsEditorTabs/OptionsEditorTabs.js +3 -3
  8. package/dist/cjs/components/PanelSpecEditor/PanelSpecEditor.js +5 -5
  9. package/dist/cjs/components/PluginEditor/PluginEditor.js +2 -2
  10. package/dist/cjs/components/PluginEditor/plugin-editor-api.js +3 -3
  11. package/dist/cjs/components/PluginKindSelect/PluginKindSelect.js +2 -2
  12. package/dist/cjs/components/PluginRegistry/PluginRegistry.js +1 -1
  13. package/dist/cjs/components/PluginRegistry/plugin-indexes.js +4 -4
  14. package/dist/cjs/components/PluginSpecEditor/PluginSpecEditor.js +3 -3
  15. package/dist/cjs/components/ProjectSelect.js +2 -2
  16. package/dist/cjs/components/TimeRangeControls/TimeRangeControls.js +192 -0
  17. package/dist/cjs/components/TimeRangeControls/index.js +30 -0
  18. package/dist/cjs/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.js +23 -31
  19. package/dist/cjs/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.js +3 -3
  20. package/dist/cjs/components/TraceQueryEditor/TraceQueryEditor.js +2 -2
  21. package/dist/cjs/components/TraceQueryEditor/TraceQueryInput.js +3 -3
  22. package/dist/cjs/components/Variables/VariableEditorForm/VariableEditorForm.js +29 -23
  23. package/dist/cjs/components/Variables/VariableEditorForm/VariablePreview.js +10 -8
  24. package/dist/cjs/components/Variables/VariableEditorForm/variable-editor-form-model.js +1 -1
  25. package/dist/cjs/components/Variables/variable-model.js +12 -13
  26. package/dist/cjs/components/index.js +1 -0
  27. package/dist/cjs/constants/user-interface-text.js +4 -1
  28. package/dist/cjs/context/ProjectStoreProvider.js +5 -5
  29. package/dist/cjs/model/legend.js +5 -5
  30. package/dist/cjs/runtime/DataQueriesProvider/DataQueriesProvider.js +6 -6
  31. package/dist/cjs/runtime/DataQueriesProvider/model.js +3 -3
  32. package/dist/cjs/runtime/TimeRangeProvider/TimeRangeProvider.js +21 -10
  33. package/dist/cjs/runtime/TimeRangeProvider/TimeRangeProviderWithQueryParams.js +3 -3
  34. package/dist/cjs/runtime/TimeRangeProvider/query-params.js +16 -16
  35. package/dist/cjs/runtime/builtin-variables.js +5 -5
  36. package/dist/cjs/runtime/datasources.js +7 -7
  37. package/dist/cjs/runtime/plugin-registry.js +12 -12
  38. package/dist/cjs/runtime/template-variables.js +15 -7
  39. package/dist/cjs/runtime/time-series-queries.js +14 -14
  40. package/dist/cjs/runtime/trace-queries.js +4 -4
  41. package/dist/cjs/stories/shared-utils/decorators/WithPluginRegistry.js +3 -1
  42. package/dist/cjs/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.js +1 -1
  43. package/dist/cjs/test/test-plugins/bert/index.js +2 -2
  44. package/dist/cjs/test/test-plugins/ernie/index.js +2 -2
  45. package/dist/cjs/test/test-plugins/index.js +3 -1
  46. package/dist/cjs/test-utils/mock-plugin-registry.js +4 -4
  47. package/dist/cjs/utils/action.js +3 -3
  48. package/dist/cjs/utils/variables.js +4 -4
  49. package/dist/cjs/validation/duration.js +25 -0
  50. package/dist/cjs/validation/index.js +1 -0
  51. package/dist/cjs/validation/resource.js +1 -1
  52. package/dist/cjs/validation/role.js +4 -3
  53. package/dist/cjs/validation/secret.js +3 -3
  54. package/dist/cjs/validation/user.js +46 -0
  55. package/dist/components/CalculationSelector/CalculationSelector.d.ts +1 -2
  56. package/dist/components/CalculationSelector/CalculationSelector.d.ts.map +1 -1
  57. package/dist/components/CalculationSelector/CalculationSelector.js +1 -1
  58. package/dist/components/CalculationSelector/CalculationSelector.js.map +1 -1
  59. package/dist/components/DatasourceEditorForm/DatasourceEditorForm.d.ts +3 -4
  60. package/dist/components/DatasourceEditorForm/DatasourceEditorForm.d.ts.map +1 -1
  61. package/dist/components/DatasourceEditorForm/DatasourceEditorForm.js +16 -16
  62. package/dist/components/DatasourceEditorForm/DatasourceEditorForm.js.map +1 -1
  63. package/dist/components/DatasourceSelect.d.ts +3 -4
  64. package/dist/components/DatasourceSelect.d.ts.map +1 -1
  65. package/dist/components/DatasourceSelect.js +8 -6
  66. package/dist/components/DatasourceSelect.js.map +1 -1
  67. package/dist/components/LegendOptionsEditor/LegendOptionsEditor.d.ts +1 -2
  68. package/dist/components/LegendOptionsEditor/LegendOptionsEditor.d.ts.map +1 -1
  69. package/dist/components/LegendOptionsEditor/LegendOptionsEditor.js +1 -1
  70. package/dist/components/LegendOptionsEditor/LegendOptionsEditor.js.map +1 -1
  71. package/dist/components/OptionsEditorRadios/OptionsEditorRadios.d.ts +3 -3
  72. package/dist/components/OptionsEditorRadios/OptionsEditorRadios.d.ts.map +1 -1
  73. package/dist/components/OptionsEditorRadios/OptionsEditorRadios.js +3 -3
  74. package/dist/components/OptionsEditorRadios/OptionsEditorRadios.js.map +1 -1
  75. package/dist/components/OptionsEditorTabPanel/OptionsEditorTabPanel.d.ts +1 -1
  76. package/dist/components/OptionsEditorTabPanel/OptionsEditorTabPanel.d.ts.map +1 -1
  77. package/dist/components/OptionsEditorTabPanel/OptionsEditorTabPanel.js +1 -1
  78. package/dist/components/OptionsEditorTabPanel/OptionsEditorTabPanel.js.map +1 -1
  79. package/dist/components/OptionsEditorTabs/OptionsEditorTabs.d.ts +3 -3
  80. package/dist/components/OptionsEditorTabs/OptionsEditorTabs.d.ts.map +1 -1
  81. package/dist/components/OptionsEditorTabs/OptionsEditorTabs.js +3 -3
  82. package/dist/components/OptionsEditorTabs/OptionsEditorTabs.js.map +1 -1
  83. package/dist/components/PanelSpecEditor/PanelSpecEditor.d.ts +1 -2
  84. package/dist/components/PanelSpecEditor/PanelSpecEditor.d.ts.map +1 -1
  85. package/dist/components/PanelSpecEditor/PanelSpecEditor.js +5 -5
  86. package/dist/components/PanelSpecEditor/PanelSpecEditor.js.map +1 -1
  87. package/dist/components/PluginEditor/PluginEditor.d.ts +1 -2
  88. package/dist/components/PluginEditor/PluginEditor.d.ts.map +1 -1
  89. package/dist/components/PluginEditor/PluginEditor.js +2 -2
  90. package/dist/components/PluginEditor/PluginEditor.js.map +1 -1
  91. package/dist/components/PluginEditor/plugin-editor-api.d.ts +3 -4
  92. package/dist/components/PluginEditor/plugin-editor-api.d.ts.map +1 -1
  93. package/dist/components/PluginEditor/plugin-editor-api.js +3 -3
  94. package/dist/components/PluginEditor/plugin-editor-api.js.map +1 -1
  95. package/dist/components/PluginKindSelect/PluginKindSelect.d.ts +1 -1
  96. package/dist/components/PluginKindSelect/PluginKindSelect.d.ts.map +1 -1
  97. package/dist/components/PluginKindSelect/PluginKindSelect.js +2 -2
  98. package/dist/components/PluginKindSelect/PluginKindSelect.js.map +1 -1
  99. package/dist/components/PluginRegistry/PluginRegistry.d.ts +4 -4
  100. package/dist/components/PluginRegistry/PluginRegistry.d.ts.map +1 -1
  101. package/dist/components/PluginRegistry/PluginRegistry.js +1 -1
  102. package/dist/components/PluginRegistry/PluginRegistry.js.map +1 -1
  103. package/dist/components/PluginRegistry/plugin-indexes.js +1 -1
  104. package/dist/components/PluginRegistry/plugin-indexes.js.map +1 -1
  105. package/dist/components/PluginSpecEditor/PluginSpecEditor.d.ts +1 -2
  106. package/dist/components/PluginSpecEditor/PluginSpecEditor.d.ts.map +1 -1
  107. package/dist/components/PluginSpecEditor/PluginSpecEditor.js +3 -3
  108. package/dist/components/PluginSpecEditor/PluginSpecEditor.js.map +1 -1
  109. package/dist/components/ProjectSelect.d.ts +2 -3
  110. package/dist/components/ProjectSelect.d.ts.map +1 -1
  111. package/dist/components/ProjectSelect.js +2 -2
  112. package/dist/components/ProjectSelect.js.map +1 -1
  113. package/dist/components/TimeRangeControls/TimeRangeControls.d.ts +13 -0
  114. package/dist/components/TimeRangeControls/TimeRangeControls.d.ts.map +1 -0
  115. package/dist/components/TimeRangeControls/TimeRangeControls.js +168 -0
  116. package/dist/components/TimeRangeControls/TimeRangeControls.js.map +1 -0
  117. package/dist/components/TimeRangeControls/index.d.ts +2 -0
  118. package/dist/components/TimeRangeControls/index.d.ts.map +1 -0
  119. package/dist/components/TimeRangeControls/index.js +15 -0
  120. package/dist/components/TimeRangeControls/index.js.map +1 -0
  121. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.d.ts +1 -2
  122. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.d.ts.map +1 -1
  123. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.js +24 -32
  124. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.js.map +1 -1
  125. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.d.ts +1 -2
  126. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.d.ts.map +1 -1
  127. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.js +3 -3
  128. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.js.map +1 -1
  129. package/dist/components/TraceQueryEditor/TraceQueryEditor.d.ts +1 -2
  130. package/dist/components/TraceQueryEditor/TraceQueryEditor.d.ts.map +1 -1
  131. package/dist/components/TraceQueryEditor/TraceQueryEditor.js +2 -2
  132. package/dist/components/TraceQueryEditor/TraceQueryEditor.js.map +1 -1
  133. package/dist/components/TraceQueryEditor/TraceQueryInput.d.ts +1 -2
  134. package/dist/components/TraceQueryEditor/TraceQueryInput.d.ts.map +1 -1
  135. package/dist/components/TraceQueryEditor/TraceQueryInput.js +3 -3
  136. package/dist/components/TraceQueryEditor/TraceQueryInput.js.map +1 -1
  137. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts +1 -1
  138. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts.map +1 -1
  139. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js +26 -22
  140. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js.map +1 -1
  141. package/dist/components/Variables/VariableEditorForm/VariablePreview.d.ts +2 -3
  142. package/dist/components/Variables/VariableEditorForm/VariablePreview.d.ts.map +1 -1
  143. package/dist/components/Variables/VariableEditorForm/VariablePreview.js +4 -4
  144. package/dist/components/Variables/VariableEditorForm/VariablePreview.js.map +1 -1
  145. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.d.ts +1 -1
  146. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.d.ts.map +1 -1
  147. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js +1 -1
  148. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js.map +1 -1
  149. package/dist/components/Variables/variable-model.d.ts.map +1 -1
  150. package/dist/components/Variables/variable-model.js +6 -7
  151. package/dist/components/Variables/variable-model.js.map +1 -1
  152. package/dist/components/index.d.ts +1 -0
  153. package/dist/components/index.d.ts.map +1 -1
  154. package/dist/components/index.js +1 -0
  155. package/dist/components/index.js.map +1 -1
  156. package/dist/constants/user-interface-text.d.ts +2 -0
  157. package/dist/constants/user-interface-text.d.ts.map +1 -1
  158. package/dist/constants/user-interface-text.js +4 -1
  159. package/dist/constants/user-interface-text.js.map +1 -1
  160. package/dist/context/ProjectStoreProvider.d.ts +1 -1
  161. package/dist/context/ProjectStoreProvider.d.ts.map +1 -1
  162. package/dist/context/ProjectStoreProvider.js +2 -2
  163. package/dist/context/ProjectStoreProvider.js.map +1 -1
  164. package/dist/context/query-params.js.map +1 -1
  165. package/dist/model/datasource.js +3 -1
  166. package/dist/model/datasource.js.map +1 -1
  167. package/dist/model/legend.d.ts +2 -2
  168. package/dist/model/legend.d.ts.map +1 -1
  169. package/dist/model/legend.js.map +1 -1
  170. package/dist/model/panels.d.ts +1 -1
  171. package/dist/model/panels.d.ts.map +1 -1
  172. package/dist/model/plugin-base.d.ts +0 -1
  173. package/dist/model/plugin-base.d.ts.map +1 -1
  174. package/dist/model/plugin-base.js.map +1 -1
  175. package/dist/model/plugin-loading.js.map +1 -1
  176. package/dist/model/plugins.d.ts +4 -4
  177. package/dist/model/plugins.d.ts.map +1 -1
  178. package/dist/model/plugins.js.map +1 -1
  179. package/dist/model/time-series-queries.d.ts +2 -2
  180. package/dist/model/time-series-queries.d.ts.map +1 -1
  181. package/dist/model/time-series-queries.js.map +1 -1
  182. package/dist/model/trace-queries.d.ts +1 -1
  183. package/dist/model/trace-queries.d.ts.map +1 -1
  184. package/dist/model/trace-queries.js.map +1 -1
  185. package/dist/model/variables.d.ts +2 -2
  186. package/dist/model/variables.d.ts.map +1 -1
  187. package/dist/model/variables.js +3 -1
  188. package/dist/model/variables.js.map +1 -1
  189. package/dist/runtime/DataQueriesProvider/DataQueriesProvider.d.ts +1 -1
  190. package/dist/runtime/DataQueriesProvider/DataQueriesProvider.d.ts.map +1 -1
  191. package/dist/runtime/DataQueriesProvider/DataQueriesProvider.js +2 -2
  192. package/dist/runtime/DataQueriesProvider/DataQueriesProvider.js.map +1 -1
  193. package/dist/runtime/DataQueriesProvider/model.d.ts +2 -2
  194. package/dist/runtime/DataQueriesProvider/model.d.ts.map +1 -1
  195. package/dist/runtime/DataQueriesProvider/model.js +3 -3
  196. package/dist/runtime/DataQueriesProvider/model.js.map +1 -1
  197. package/dist/runtime/TimeRangeProvider/TimeRangeProvider.d.ts +5 -1
  198. package/dist/runtime/TimeRangeProvider/TimeRangeProvider.d.ts.map +1 -1
  199. package/dist/runtime/TimeRangeProvider/TimeRangeProvider.js +14 -6
  200. package/dist/runtime/TimeRangeProvider/TimeRangeProvider.js.map +1 -1
  201. package/dist/runtime/TimeRangeProvider/TimeRangeProviderWithQueryParams.d.ts +1 -1
  202. package/dist/runtime/TimeRangeProvider/TimeRangeProviderWithQueryParams.d.ts.map +1 -1
  203. package/dist/runtime/TimeRangeProvider/TimeRangeProviderWithQueryParams.js +3 -3
  204. package/dist/runtime/TimeRangeProvider/TimeRangeProviderWithQueryParams.js.map +1 -1
  205. package/dist/runtime/TimeRangeProvider/query-params.d.ts +1 -1
  206. package/dist/runtime/TimeRangeProvider/query-params.d.ts.map +1 -1
  207. package/dist/runtime/TimeRangeProvider/query-params.js +4 -4
  208. package/dist/runtime/TimeRangeProvider/query-params.js.map +1 -1
  209. package/dist/runtime/builtin-variables.d.ts +1 -1
  210. package/dist/runtime/builtin-variables.d.ts.map +1 -1
  211. package/dist/runtime/builtin-variables.js +2 -2
  212. package/dist/runtime/builtin-variables.js.map +1 -1
  213. package/dist/runtime/datasources.js +1 -1
  214. package/dist/runtime/datasources.js.map +1 -1
  215. package/dist/runtime/plugin-registry.d.ts +3 -3
  216. package/dist/runtime/plugin-registry.d.ts.map +1 -1
  217. package/dist/runtime/plugin-registry.js +4 -4
  218. package/dist/runtime/plugin-registry.js.map +1 -1
  219. package/dist/runtime/template-variables.d.ts +4 -4
  220. package/dist/runtime/template-variables.d.ts.map +1 -1
  221. package/dist/runtime/template-variables.js +10 -2
  222. package/dist/runtime/template-variables.js.map +1 -1
  223. package/dist/runtime/time-series-queries.js +7 -7
  224. package/dist/runtime/time-series-queries.js.map +1 -1
  225. package/dist/runtime/trace-queries.d.ts +1 -1
  226. package/dist/runtime/trace-queries.d.ts.map +1 -1
  227. package/dist/runtime/trace-queries.js +4 -4
  228. package/dist/runtime/trace-queries.js.map +1 -1
  229. package/dist/stories/shared-utils/decorators/WithDataQueries.d.ts +2 -3
  230. package/dist/stories/shared-utils/decorators/WithDataQueries.d.ts.map +1 -1
  231. package/dist/stories/shared-utils/decorators/WithDataQueries.js.map +1 -1
  232. package/dist/stories/shared-utils/decorators/WithPluginRegistry.d.ts +1 -2
  233. package/dist/stories/shared-utils/decorators/WithPluginRegistry.d.ts.map +1 -1
  234. package/dist/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.d.ts +2 -3
  235. package/dist/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.d.ts.map +1 -1
  236. package/dist/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.js.map +1 -1
  237. package/dist/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.d.ts +2 -3
  238. package/dist/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.d.ts.map +1 -1
  239. package/dist/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.js +1 -1
  240. package/dist/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.js.map +1 -1
  241. package/dist/stories/shared-utils/decorators/WithPluginSystemTemplateVariables.d.ts +2 -3
  242. package/dist/stories/shared-utils/decorators/WithPluginSystemTemplateVariables.d.ts.map +1 -1
  243. package/dist/stories/shared-utils/decorators/WithPluginSystemTemplateVariables.js.map +1 -1
  244. package/dist/stories/shared-utils/decorators/WithTimeRange.d.ts +2 -3
  245. package/dist/stories/shared-utils/decorators/WithTimeRange.d.ts.map +1 -1
  246. package/dist/stories/shared-utils/decorators/WithTimeRange.js.map +1 -1
  247. package/dist/test/render.d.ts +1 -1
  248. package/dist/test/render.d.ts.map +1 -1
  249. package/dist/test/render.js.map +1 -1
  250. package/dist/test/setup-tests.js.map +1 -1
  251. package/dist/test/test-plugins/bert/index.js +2 -2
  252. package/dist/test/test-plugins/bert/index.js.map +1 -1
  253. package/dist/test/test-plugins/ernie/index.js +2 -2
  254. package/dist/test/test-plugins/ernie/index.js.map +1 -1
  255. package/dist/test-utils/mock-plugin-registry.d.ts +1 -1
  256. package/dist/test-utils/mock-plugin-registry.d.ts.map +1 -1
  257. package/dist/test-utils/mock-plugin-registry.js +1 -1
  258. package/dist/test-utils/mock-plugin-registry.js.map +1 -1
  259. package/dist/utils/variables.js.map +1 -1
  260. package/dist/validation/datasource.d.ts +1 -1
  261. package/dist/validation/datasource.d.ts.map +1 -1
  262. package/dist/validation/datasource.js.map +1 -1
  263. package/dist/validation/duration.d.ts +3 -0
  264. package/dist/validation/duration.d.ts.map +1 -0
  265. package/dist/validation/duration.js +17 -0
  266. package/dist/validation/duration.js.map +1 -0
  267. package/dist/validation/index.d.ts +1 -0
  268. package/dist/validation/index.d.ts.map +1 -1
  269. package/dist/validation/index.js +1 -0
  270. package/dist/validation/index.js.map +1 -1
  271. package/dist/validation/resource.js +1 -1
  272. package/dist/validation/resource.js.map +1 -1
  273. package/dist/validation/role.d.ts +47 -47
  274. package/dist/validation/role.d.ts.map +1 -1
  275. package/dist/validation/role.js +1 -0
  276. package/dist/validation/role.js.map +1 -1
  277. package/dist/validation/rolebinding.d.ts +10 -10
  278. package/dist/validation/rolebinding.d.ts.map +1 -1
  279. package/dist/validation/rolebinding.js.map +1 -1
  280. package/dist/validation/secret.d.ts +19 -19
  281. package/dist/validation/secret.d.ts.map +1 -1
  282. package/dist/validation/secret.js.map +1 -1
  283. package/dist/validation/user.d.ts +93 -0
  284. package/dist/validation/user.d.ts.map +1 -0
  285. package/dist/validation/user.js +38 -0
  286. package/dist/validation/user.js.map +1 -0
  287. package/dist/validation/variable.d.ts +1 -1
  288. package/dist/validation/variable.d.ts.map +1 -1
  289. package/dist/validation/variable.js.map +1 -1
  290. package/package.json +4 -4
@@ -17,8 +17,8 @@ import { useProjectList } from '../context';
17
17
  * Displays a MUI input for selecting a Project of a particular kind. Note: The 'value' and `onChange` handler for
18
18
  * the input deal with a `ProjectSelector`.
19
19
  */ export function ProjectSelect(props) {
20
- const { onChange , value , ...others } = props;
21
- const { data , isLoading } = useProjectList();
20
+ const { onChange, value, ...others } = props;
21
+ const { data, isLoading } = useProjectList();
22
22
  // While loading available values, just use an empty string so MUI select doesn't warn about values out of range
23
23
  const optionValue = isLoading ? '' : projectToOptionValue(value);
24
24
  // When the user makes a selection, convert the string option value back to a DatasourceSelector
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/ProjectSelect.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 { Select, SelectProps, MenuItem, Stack, ListItemText } from '@mui/material';\nimport { ProjectResource } from '@perses-dev/core';\nimport { useProjectList } from '../context';\n\n// Props on MUI Select 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';\n\nexport interface ProjectSelectProps extends Omit<SelectProps<string>, OmittedMuiProps> {\n onChange: (next: ProjectResource) => void;\n value: ProjectResource;\n}\n\n/**\n * Displays a MUI input for selecting a Project of a particular kind. Note: The 'value' and `onChange` handler for\n * the input deal with a `ProjectSelector`.\n */\nexport function ProjectSelect(props: ProjectSelectProps) {\n const { onChange, value, ...others } = props;\n\n const { data, isLoading } = useProjectList();\n\n // While loading available values, just use an empty string so MUI select doesn't warn about values out of range\n const optionValue = isLoading ? '' : projectToOptionValue(value);\n\n // When the user makes a selection, convert the string option value back to a DatasourceSelector\n const handleChange: SelectProps<string>['onChange'] = (e) => {\n const next = optionValueToSelector(e.target.value);\n onChange(next);\n };\n\n // TODO:\n // - Does this need a loading indicator of some kind?\n // - The group's edit link is not clickable once selected.\n // - The group's edit link is disabled if datasource is overridden.\n // Ref: https://github.com/mui/material-ui/issues/36572\n return (\n <Select {...others} value={optionValue} onChange={handleChange}>\n <MenuItem value={'none'}>\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\" width=\"100%\" height={32}>\n <ListItemText>None</ListItemText>\n </Stack>\n </MenuItem>\n {data?.map((project: ProjectResource) => [\n <MenuItem key={project.metadata.name} value={project.metadata.name}>\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\" width=\"100%\" height={32}>\n <ListItemText>{project.metadata.name}</ListItemText>\n </Stack>\n </MenuItem>,\n ])}\n </Select>\n );\n}\n\n/**\n * Given a ProjectSelectItemSelector,\n * returns a string value that can be used as a Select input value.\n * @param selector\n */\nfunction projectToOptionValue(project: ProjectResource): string {\n return project.metadata.name ?? 'none';\n}\n\n/**\n * Given an option value name,\n * returns a ProjectResource to be used by the query data model.\n * @param optionValue\n */\nfunction optionValueToSelector(optionValue: string): ProjectResource {\n return {\n kind: 'Project',\n metadata: {\n name: optionValue,\n },\n };\n}\n"],"names":["Select","MenuItem","Stack","ListItemText","useProjectList","ProjectSelect","props","onChange","value","others","data","isLoading","optionValue","projectToOptionValue","handleChange","e","next","optionValueToSelector","target","direction","alignItems","justifyContent","width","height","map","project","metadata","name","kind"],"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,MAAM,EAAeC,QAAQ,EAAEC,KAAK,EAAEC,YAAY,QAAQ,gBAAgB;AAEnF,SAASC,cAAc,QAAQ,aAAa;AAW5C;;;CAGC,GACD,OAAO,SAASC,cAAcC,KAAyB;IACrD,MAAM,EAAEC,SAAQ,EAAEC,MAAK,EAAE,GAAGC,QAAQ,GAAGH;IAEvC,MAAM,EAAEI,KAAI,EAAEC,UAAS,EAAE,GAAGP;IAE5B,gHAAgH;IAChH,MAAMQ,cAAcD,YAAY,KAAKE,qBAAqBL;IAE1D,gGAAgG;IAChG,MAAMM,eAAgD,CAACC;QACrD,MAAMC,OAAOC,sBAAsBF,EAAEG,OAAOV;QAC5CD,SAASS;IACX;IAEA,QAAQ;IACR,sDAAsD;IACtD,2DAA2D;IAC3D,oEAAoE;IACpE,0DAA0D;IAC1D,qBACE,MAAChB;QAAQ,GAAGS,MAAM;QAAED,OAAOI;QAAaL,UAAUO;;0BAChD,KAACb;gBAASO,OAAO;0BACf,cAAA,KAACN;oBAAMiB,WAAU;oBAAMC,YAAW;oBAASC,gBAAe;oBAAgBC,OAAM;oBAAOC,QAAQ;8BAC7F,cAAA,KAACpB;kCAAa;;;;YAGjBO,iBAAAA,kBAAAA,KAAAA,IAAAA,KAAMc,IAAI,CAACC,UAA6B;kCACvC,KAACxB;wBAAqCO,OAAOiB,QAAQC,SAASC;kCAC5D,cAAA,KAACzB;4BAAMiB,WAAU;4BAAMC,YAAW;4BAASC,gBAAe;4BAAgBC,OAAM;4BAAOC,QAAQ;sCAC7F,cAAA,KAACpB;0CAAcsB,QAAQC,SAASC;;;uBAFrBF,QAAQC,SAASC;iBAKjC;;;AAGP;AAEA;;;;CAIC,GACD,SAASd,qBAAqBY,OAAwB;QAC7CA;IAAP,OAAOA,CAAAA,yBAAAA,QAAQC,SAASC,kBAAjBF,oCAAAA,yBAAyB;AAClC;AAEA;;;;CAIC,GACD,SAASR,sBAAsBL,WAAmB;IAChD,OAAO;QACLgB,MAAM;QACNF,UAAU;YACRC,MAAMf;QACR;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/components/ProjectSelect.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 { Select, SelectProps, MenuItem, Stack, ListItemText } from '@mui/material';\nimport { ProjectResource } from '@perses-dev/core';\nimport { useProjectList } from '../context';\n\n// Props on MUI Select 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';\n\nexport interface ProjectSelectProps extends Omit<SelectProps<string>, OmittedMuiProps> {\n onChange: (next: ProjectResource) => void;\n value: ProjectResource;\n}\n\n/**\n * Displays a MUI input for selecting a Project of a particular kind. Note: The 'value' and `onChange` handler for\n * the input deal with a `ProjectSelector`.\n */\nexport function ProjectSelect(props: ProjectSelectProps) {\n const { onChange, value, ...others } = props;\n\n const { data, isLoading } = useProjectList();\n\n // While loading available values, just use an empty string so MUI select doesn't warn about values out of range\n const optionValue = isLoading ? '' : projectToOptionValue(value);\n\n // When the user makes a selection, convert the string option value back to a DatasourceSelector\n const handleChange: SelectProps<string>['onChange'] = (e) => {\n const next = optionValueToSelector(e.target.value);\n onChange(next);\n };\n\n // TODO:\n // - Does this need a loading indicator of some kind?\n // - The group's edit link is not clickable once selected.\n // - The group's edit link is disabled if datasource is overridden.\n // Ref: https://github.com/mui/material-ui/issues/36572\n return (\n <Select {...others} value={optionValue} onChange={handleChange}>\n <MenuItem value={'none'}>\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\" width=\"100%\" height={32}>\n <ListItemText>None</ListItemText>\n </Stack>\n </MenuItem>\n {data?.map((project: ProjectResource) => [\n <MenuItem key={project.metadata.name} value={project.metadata.name}>\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\" width=\"100%\" height={32}>\n <ListItemText>{project.metadata.name}</ListItemText>\n </Stack>\n </MenuItem>,\n ])}\n </Select>\n );\n}\n\n/**\n * Given a ProjectSelectItemSelector,\n * returns a string value that can be used as a Select input value.\n * @param selector\n */\nfunction projectToOptionValue(project: ProjectResource): string {\n return project.metadata.name ?? 'none';\n}\n\n/**\n * Given an option value name,\n * returns a ProjectResource to be used by the query data model.\n * @param optionValue\n */\nfunction optionValueToSelector(optionValue: string): ProjectResource {\n return {\n kind: 'Project',\n metadata: {\n name: optionValue,\n },\n };\n}\n"],"names":["Select","MenuItem","Stack","ListItemText","useProjectList","ProjectSelect","props","onChange","value","others","data","isLoading","optionValue","projectToOptionValue","handleChange","e","next","optionValueToSelector","target","direction","alignItems","justifyContent","width","height","map","project","metadata","name","kind"],"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,MAAM,EAAeC,QAAQ,EAAEC,KAAK,EAAEC,YAAY,QAAQ,gBAAgB;AAEnF,SAASC,cAAc,QAAQ,aAAa;AAW5C;;;CAGC,GACD,OAAO,SAASC,cAAcC,KAAyB;IACrD,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAE,GAAGC,QAAQ,GAAGH;IAEvC,MAAM,EAAEI,IAAI,EAAEC,SAAS,EAAE,GAAGP;IAE5B,gHAAgH;IAChH,MAAMQ,cAAcD,YAAY,KAAKE,qBAAqBL;IAE1D,gGAAgG;IAChG,MAAMM,eAAgD,CAACC;QACrD,MAAMC,OAAOC,sBAAsBF,EAAEG,MAAM,CAACV,KAAK;QACjDD,SAASS;IACX;IAEA,QAAQ;IACR,sDAAsD;IACtD,2DAA2D;IAC3D,oEAAoE;IACpE,0DAA0D;IAC1D,qBACE,MAAChB;QAAQ,GAAGS,MAAM;QAAED,OAAOI;QAAaL,UAAUO;;0BAChD,KAACb;gBAASO,OAAO;0BACf,cAAA,KAACN;oBAAMiB,WAAU;oBAAMC,YAAW;oBAASC,gBAAe;oBAAgBC,OAAM;oBAAOC,QAAQ;8BAC7F,cAAA,KAACpB;kCAAa;;;;YAGjBO,iBAAAA,2BAAAA,KAAMc,GAAG,CAAC,CAACC,UAA6B;kCACvC,KAACxB;wBAAqCO,OAAOiB,QAAQC,QAAQ,CAACC,IAAI;kCAChE,cAAA,KAACzB;4BAAMiB,WAAU;4BAAMC,YAAW;4BAASC,gBAAe;4BAAgBC,OAAM;4BAAOC,QAAQ;sCAC7F,cAAA,KAACpB;0CAAcsB,QAAQC,QAAQ,CAACC,IAAI;;;uBAFzBF,QAAQC,QAAQ,CAACC,IAAI;iBAKrC;;;AAGP;AAEA;;;;CAIC,GACD,SAASd,qBAAqBY,OAAwB;QAC7CA;IAAP,OAAOA,CAAAA,yBAAAA,QAAQC,QAAQ,CAACC,IAAI,cAArBF,oCAAAA,yBAAyB;AAClC;AAEA;;;;CAIC,GACD,SAASR,sBAAsBL,WAAmB;IAChD,OAAO;QACLgB,MAAM;QACNF,UAAU;YACRC,MAAMf;QACR;IACF;AACF"}
@@ -0,0 +1,13 @@
1
+ import { TimeOption } from '@perses-dev/components';
2
+ export declare const DEFAULT_TIME_RANGE_OPTIONS: TimeOption[];
3
+ export declare const DEFAULT_REFRESH_INTERVAL_OPTIONS: TimeOption[];
4
+ interface TimeRangeControlsProps {
5
+ heightPx?: number;
6
+ showTimeRangeSelector?: boolean;
7
+ showRefreshButton?: boolean;
8
+ showRefreshInterval?: boolean;
9
+ timePresets?: TimeOption[];
10
+ }
11
+ export declare function TimeRangeControls({ heightPx, showTimeRangeSelector, showRefreshButton, showRefreshInterval, timePresets, }: TimeRangeControlsProps): import("react/jsx-runtime").JSX.Element;
12
+ export {};
13
+ //# sourceMappingURL=TimeRangeControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeRangeControls.d.ts","sourceRoot":"","sources":["../../../src/components/TimeRangeControls/TimeRangeControls.tsx"],"names":[],"mappings":"AAeA,OAAO,EAIL,UAAU,EAEX,MAAM,wBAAwB,CAAC;AAMhC,eAAO,MAAM,0BAA0B,EAAE,UAAU,EAUlD,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,UAAU,EAOxD,CAAC;AAIF,UAAU,sBAAsB;IAE9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,qBAA4B,EAC5B,iBAAwB,EACxB,mBAA0B,EAC1B,WAAwC,GACzC,EAAE,sBAAsB,2CAiDxB"}
@@ -0,0 +1,168 @@
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
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
+ import RefreshIcon from 'mdi-material-ui/Refresh';
15
+ import { Stack } from '@mui/material';
16
+ import { DateTimeRangePicker, RefreshIntervalPicker, InfoTooltip, ToolbarIconButton } from '@perses-dev/components';
17
+ import { useCallback } from 'react';
18
+ import { TOOLTIP_TEXT } from '../../constants';
19
+ import { useTimeRange } from '../../runtime';
20
+ export const DEFAULT_TIME_RANGE_OPTIONS = [
21
+ {
22
+ value: {
23
+ pastDuration: '5m'
24
+ },
25
+ display: 'Last 5 minutes'
26
+ },
27
+ {
28
+ value: {
29
+ pastDuration: '15m'
30
+ },
31
+ display: 'Last 15 minutes'
32
+ },
33
+ {
34
+ value: {
35
+ pastDuration: '30m'
36
+ },
37
+ display: 'Last 30 minutes'
38
+ },
39
+ {
40
+ value: {
41
+ pastDuration: '1h'
42
+ },
43
+ display: 'Last 1 hour'
44
+ },
45
+ {
46
+ value: {
47
+ pastDuration: '6h'
48
+ },
49
+ display: 'Last 6 hours'
50
+ },
51
+ {
52
+ value: {
53
+ pastDuration: '12h'
54
+ },
55
+ display: 'Last 12 hours'
56
+ },
57
+ {
58
+ value: {
59
+ pastDuration: '24h'
60
+ },
61
+ display: 'Last 1 day'
62
+ },
63
+ {
64
+ value: {
65
+ pastDuration: '7d'
66
+ },
67
+ display: 'Last 7 days'
68
+ },
69
+ {
70
+ value: {
71
+ pastDuration: '14d'
72
+ },
73
+ display: 'Last 14 days'
74
+ }
75
+ ];
76
+ export const DEFAULT_REFRESH_INTERVAL_OPTIONS = [
77
+ {
78
+ value: {
79
+ pastDuration: '0s'
80
+ },
81
+ display: 'Off'
82
+ },
83
+ {
84
+ value: {
85
+ pastDuration: '5s'
86
+ },
87
+ display: '5s'
88
+ },
89
+ {
90
+ value: {
91
+ pastDuration: '10s'
92
+ },
93
+ display: '10s'
94
+ },
95
+ {
96
+ value: {
97
+ pastDuration: '15s'
98
+ },
99
+ display: '15s'
100
+ },
101
+ {
102
+ value: {
103
+ pastDuration: '30s'
104
+ },
105
+ display: '30s'
106
+ },
107
+ {
108
+ value: {
109
+ pastDuration: '60s'
110
+ },
111
+ display: '1m'
112
+ }
113
+ ];
114
+ const DEFAULT_HEIGHT = '34px';
115
+ export function TimeRangeControls({ heightPx, showTimeRangeSelector = true, showRefreshButton = true, showRefreshInterval = true, timePresets = DEFAULT_TIME_RANGE_OPTIONS }) {
116
+ const { timeRange, setTimeRange, refresh, refreshInterval, setRefreshInterval } = useTimeRange();
117
+ // Convert height to a string, then use the string for styling
118
+ const height = heightPx === undefined ? DEFAULT_HEIGHT : `${heightPx}px`;
119
+ // add time preset if one does not match duration given in time range
120
+ if ('pastDuration' in timeRange && !timePresets.some((option)=>option.value.pastDuration === timeRange['pastDuration'])) {
121
+ timePresets.push({
122
+ value: {
123
+ pastDuration: timeRange['pastDuration']
124
+ },
125
+ display: `Last ${timeRange['pastDuration']}`
126
+ });
127
+ }
128
+ // set the new refresh interval both in the dashboard context & as query param
129
+ const handleRefreshIntervalChange = useCallback((duration)=>{
130
+ setRefreshInterval(duration);
131
+ }, [
132
+ setRefreshInterval
133
+ ]);
134
+ return /*#__PURE__*/ _jsxs(Stack, {
135
+ direction: "row",
136
+ spacing: 1,
137
+ children: [
138
+ showTimeRangeSelector && /*#__PURE__*/ _jsx(DateTimeRangePicker, {
139
+ timeOptions: timePresets,
140
+ value: timeRange,
141
+ onChange: setTimeRange,
142
+ height: height
143
+ }),
144
+ showRefreshButton && /*#__PURE__*/ _jsx(InfoTooltip, {
145
+ description: TOOLTIP_TEXT.refresh,
146
+ children: /*#__PURE__*/ _jsx(ToolbarIconButton, {
147
+ "aria-label": TOOLTIP_TEXT.refresh,
148
+ onClick: refresh,
149
+ sx: {
150
+ height
151
+ },
152
+ children: /*#__PURE__*/ _jsx(RefreshIcon, {})
153
+ })
154
+ }),
155
+ showRefreshInterval && /*#__PURE__*/ _jsx(InfoTooltip, {
156
+ description: TOOLTIP_TEXT.refreshInterval,
157
+ children: /*#__PURE__*/ _jsx(RefreshIntervalPicker, {
158
+ timeOptions: DEFAULT_REFRESH_INTERVAL_OPTIONS,
159
+ value: refreshInterval,
160
+ onChange: handleRefreshIntervalChange,
161
+ height: height
162
+ })
163
+ })
164
+ ]
165
+ });
166
+ }
167
+
168
+ //# sourceMappingURL=TimeRangeControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/TimeRangeControls/TimeRangeControls.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 RefreshIcon from 'mdi-material-ui/Refresh';\nimport { Stack } from '@mui/material';\nimport {\n DateTimeRangePicker,\n RefreshIntervalPicker,\n InfoTooltip,\n TimeOption,\n ToolbarIconButton,\n} from '@perses-dev/components';\nimport { DurationString } from '@perses-dev/core';\nimport { useCallback } from 'react';\nimport { TOOLTIP_TEXT } from '../../constants';\nimport { useTimeRange } from '../../runtime';\n\nexport const DEFAULT_TIME_RANGE_OPTIONS: TimeOption[] = [\n { value: { pastDuration: '5m' }, display: 'Last 5 minutes' },\n { value: { pastDuration: '15m' }, display: 'Last 15 minutes' },\n { value: { pastDuration: '30m' }, display: 'Last 30 minutes' },\n { value: { pastDuration: '1h' }, display: 'Last 1 hour' },\n { value: { pastDuration: '6h' }, display: 'Last 6 hours' },\n { value: { pastDuration: '12h' }, display: 'Last 12 hours' },\n { value: { pastDuration: '24h' }, display: 'Last 1 day' },\n { value: { pastDuration: '7d' }, display: 'Last 7 days' },\n { value: { pastDuration: '14d' }, display: 'Last 14 days' },\n];\n\nexport const DEFAULT_REFRESH_INTERVAL_OPTIONS: TimeOption[] = [\n { value: { pastDuration: '0s' }, display: 'Off' },\n { value: { pastDuration: '5s' }, display: '5s' },\n { value: { pastDuration: '10s' }, display: '10s' },\n { value: { pastDuration: '15s' }, display: '15s' },\n { value: { pastDuration: '30s' }, display: '30s' },\n { value: { pastDuration: '60s' }, display: '1m' },\n];\n\nconst DEFAULT_HEIGHT = '34px';\n\ninterface TimeRangeControlsProps {\n // The controls look best at heights >= 28 pixels\n heightPx?: number;\n showTimeRangeSelector?: boolean;\n showRefreshButton?: boolean;\n showRefreshInterval?: boolean;\n timePresets?: TimeOption[];\n}\n\nexport function TimeRangeControls({\n heightPx,\n showTimeRangeSelector = true,\n showRefreshButton = true,\n showRefreshInterval = true,\n timePresets = DEFAULT_TIME_RANGE_OPTIONS,\n}: TimeRangeControlsProps) {\n const { timeRange, setTimeRange, refresh, refreshInterval, setRefreshInterval } = useTimeRange();\n\n // Convert height to a string, then use the string for styling\n const height = heightPx === undefined ? DEFAULT_HEIGHT : `${heightPx}px`;\n\n // add time preset if one does not match duration given in time range\n if (\n 'pastDuration' in timeRange &&\n !timePresets.some((option) => option.value.pastDuration === timeRange['pastDuration'])\n ) {\n timePresets.push({\n value: { pastDuration: timeRange['pastDuration'] },\n display: `Last ${timeRange['pastDuration']}`,\n });\n }\n\n // set the new refresh interval both in the dashboard context & as query param\n const handleRefreshIntervalChange = useCallback(\n (duration: DurationString) => {\n setRefreshInterval(duration);\n },\n [setRefreshInterval]\n );\n\n return (\n <Stack direction=\"row\" spacing={1}>\n {showTimeRangeSelector && (\n <DateTimeRangePicker timeOptions={timePresets} value={timeRange} onChange={setTimeRange} height={height} />\n )}\n {showRefreshButton && (\n <InfoTooltip description={TOOLTIP_TEXT.refresh}>\n <ToolbarIconButton aria-label={TOOLTIP_TEXT.refresh} onClick={refresh} sx={{ height }}>\n <RefreshIcon />\n </ToolbarIconButton>\n </InfoTooltip>\n )}\n {showRefreshInterval && (\n <InfoTooltip description={TOOLTIP_TEXT.refreshInterval}>\n <RefreshIntervalPicker\n timeOptions={DEFAULT_REFRESH_INTERVAL_OPTIONS}\n value={refreshInterval}\n onChange={handleRefreshIntervalChange}\n height={height}\n />\n </InfoTooltip>\n )}\n </Stack>\n );\n}\n"],"names":["RefreshIcon","Stack","DateTimeRangePicker","RefreshIntervalPicker","InfoTooltip","ToolbarIconButton","useCallback","TOOLTIP_TEXT","useTimeRange","DEFAULT_TIME_RANGE_OPTIONS","value","pastDuration","display","DEFAULT_REFRESH_INTERVAL_OPTIONS","DEFAULT_HEIGHT","TimeRangeControls","heightPx","showTimeRangeSelector","showRefreshButton","showRefreshInterval","timePresets","timeRange","setTimeRange","refresh","refreshInterval","setRefreshInterval","height","undefined","some","option","push","handleRefreshIntervalChange","duration","direction","spacing","timeOptions","onChange","description","aria-label","onClick","sx"],"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,iBAAiB,0BAA0B;AAClD,SAASC,KAAK,QAAQ,gBAAgB;AACtC,SACEC,mBAAmB,EACnBC,qBAAqB,EACrBC,WAAW,EAEXC,iBAAiB,QACZ,yBAAyB;AAEhC,SAASC,WAAW,QAAQ,QAAQ;AACpC,SAASC,YAAY,QAAQ,kBAAkB;AAC/C,SAASC,YAAY,QAAQ,gBAAgB;AAE7C,OAAO,MAAMC,6BAA2C;IACtD;QAAEC,OAAO;YAAEC,cAAc;QAAK;QAAGC,SAAS;IAAiB;IAC3D;QAAEF,OAAO;YAAEC,cAAc;QAAM;QAAGC,SAAS;IAAkB;IAC7D;QAAEF,OAAO;YAAEC,cAAc;QAAM;QAAGC,SAAS;IAAkB;IAC7D;QAAEF,OAAO;YAAEC,cAAc;QAAK;QAAGC,SAAS;IAAc;IACxD;QAAEF,OAAO;YAAEC,cAAc;QAAK;QAAGC,SAAS;IAAe;IACzD;QAAEF,OAAO;YAAEC,cAAc;QAAM;QAAGC,SAAS;IAAgB;IAC3D;QAAEF,OAAO;YAAEC,cAAc;QAAM;QAAGC,SAAS;IAAa;IACxD;QAAEF,OAAO;YAAEC,cAAc;QAAK;QAAGC,SAAS;IAAc;IACxD;QAAEF,OAAO;YAAEC,cAAc;QAAM;QAAGC,SAAS;IAAe;CAC3D,CAAC;AAEF,OAAO,MAAMC,mCAAiD;IAC5D;QAAEH,OAAO;YAAEC,cAAc;QAAK;QAAGC,SAAS;IAAM;IAChD;QAAEF,OAAO;YAAEC,cAAc;QAAK;QAAGC,SAAS;IAAK;IAC/C;QAAEF,OAAO;YAAEC,cAAc;QAAM;QAAGC,SAAS;IAAM;IACjD;QAAEF,OAAO;YAAEC,cAAc;QAAM;QAAGC,SAAS;IAAM;IACjD;QAAEF,OAAO;YAAEC,cAAc;QAAM;QAAGC,SAAS;IAAM;IACjD;QAAEF,OAAO;YAAEC,cAAc;QAAM;QAAGC,SAAS;IAAK;CACjD,CAAC;AAEF,MAAME,iBAAiB;AAWvB,OAAO,SAASC,kBAAkB,EAChCC,QAAQ,EACRC,wBAAwB,IAAI,EAC5BC,oBAAoB,IAAI,EACxBC,sBAAsB,IAAI,EAC1BC,cAAcX,0BAA0B,EACjB;IACvB,MAAM,EAAEY,SAAS,EAAEC,YAAY,EAAEC,OAAO,EAAEC,eAAe,EAAEC,kBAAkB,EAAE,GAAGjB;IAElF,8DAA8D;IAC9D,MAAMkB,SAASV,aAAaW,YAAYb,iBAAiB,CAAC,EAAEE,SAAS,EAAE,CAAC;IAExE,qEAAqE;IACrE,IACE,kBAAkBK,aAClB,CAACD,YAAYQ,IAAI,CAAC,CAACC,SAAWA,OAAOnB,KAAK,CAACC,YAAY,KAAKU,SAAS,CAAC,eAAe,GACrF;QACAD,YAAYU,IAAI,CAAC;YACfpB,OAAO;gBAAEC,cAAcU,SAAS,CAAC,eAAe;YAAC;YACjDT,SAAS,CAAC,KAAK,EAAES,SAAS,CAAC,eAAe,CAAC,CAAC;QAC9C;IACF;IAEA,8EAA8E;IAC9E,MAAMU,8BAA8BzB,YAClC,CAAC0B;QACCP,mBAAmBO;IACrB,GACA;QAACP;KAAmB;IAGtB,qBACE,MAACxB;QAAMgC,WAAU;QAAMC,SAAS;;YAC7BjB,uCACC,KAACf;gBAAoBiC,aAAaf;gBAAaV,OAAOW;gBAAWe,UAAUd;gBAAcI,QAAQA;;YAElGR,mCACC,KAACd;gBAAYiC,aAAa9B,aAAagB,OAAO;0BAC5C,cAAA,KAAClB;oBAAkBiC,cAAY/B,aAAagB,OAAO;oBAAEgB,SAAShB;oBAASiB,IAAI;wBAAEd;oBAAO;8BAClF,cAAA,KAAC1B;;;YAINmB,qCACC,KAACf;gBAAYiC,aAAa9B,aAAaiB,eAAe;0BACpD,cAAA,KAACrB;oBACCgC,aAAatB;oBACbH,OAAOc;oBACPY,UAAUL;oBACVL,QAAQA;;;;;AAMpB"}
@@ -0,0 +1,2 @@
1
+ export * from './TimeRangeControls';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/TimeRangeControls/index.ts"],"names":[],"mappings":"AAaA,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,15 @@
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
+ export * from './TimeRangeControls';
14
+
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/TimeRangeControls/index.ts"],"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 './TimeRangeControls';\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,sBAAsB"}
@@ -1,8 +1,7 @@
1
- /// <reference types="react" />
2
1
  import { TimeSeriesQueryDefinition, QueryDefinition } from '@perses-dev/core';
3
2
  export interface TimeSeriesQueryEditorProps {
4
3
  queries?: TimeSeriesQueryDefinition[];
5
4
  onChange: (queries: QueryDefinition[]) => void;
6
5
  }
7
- export declare function TimeSeriesQueryEditor({ queries, onChange }: TimeSeriesQueryEditorProps): JSX.Element;
6
+ export declare function TimeSeriesQueryEditor({ queries, onChange }: TimeSeriesQueryEditorProps): import("react/jsx-runtime").JSX.Element;
8
7
  //# sourceMappingURL=TimeSeriesQueryEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TimeSeriesQueryEditor.d.ts","sourceRoot":"","sources":["../../../src/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.tsx"],"names":[],"mappings":";AAiBA,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAM9E,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACtC,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,qBAAqB,CAAC,EAAE,OAAY,EAAE,QAAQ,EAAE,EAAE,0BAA0B,eA0G3F"}
1
+ {"version":3,"file":"TimeSeriesQueryEditor.d.ts","sourceRoot":"","sources":["../../../src/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAI9E,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACtC,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,qBAAqB,CAAC,EAAE,OAAY,EAAE,QAAQ,EAAE,EAAE,0BAA0B,2CA+F3F"}
@@ -15,18 +15,30 @@ 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';
18
+ import { TIME_SERIES_QUERY_KEY, useListPluginMetadata, usePlugin, usePluginRegistry } from '../../runtime';
19
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, {
20
+ export function TimeSeriesQueryEditor({ queries = [], onChange }) {
21
+ var _timeSeriesPlugins_;
22
+ // Build the default query plugin
23
+ // Use as default the plugin kind explicitly set as default or the first in the list
24
+ const { defaultPluginKinds } = usePluginRegistry();
25
+ const { data: timeSeriesPlugins } = useListPluginMetadata(TIME_SERIES_QUERY_KEY);
26
+ var _defaultPluginKinds_TIME_SERIES_QUERY_KEY, _ref;
27
+ const defaultTimeSeriesQueryKind = (_ref = (_defaultPluginKinds_TIME_SERIES_QUERY_KEY = defaultPluginKinds === null || defaultPluginKinds === void 0 ? void 0 : defaultPluginKinds[TIME_SERIES_QUERY_KEY]) !== null && _defaultPluginKinds_TIME_SERIES_QUERY_KEY !== void 0 ? _defaultPluginKinds_TIME_SERIES_QUERY_KEY : timeSeriesPlugins === null || timeSeriesPlugins === void 0 ? void 0 : (_timeSeriesPlugins_ = timeSeriesPlugins[0]) === null || _timeSeriesPlugins_ === void 0 ? void 0 : _timeSeriesPlugins_.kind) !== null && _ref !== void 0 ? _ref : '';
28
+ const { data: defaultQueryPlugin } = usePlugin(TIME_SERIES_QUERY_KEY, defaultTimeSeriesQueryKind, {
27
29
  useErrorBoundary: true,
28
30
  enabled: true
29
31
  });
32
+ // This default query definition is used if no query is provided initially or when we add a new query
33
+ const defaultInitialQueryDefinition = {
34
+ kind: TIME_SERIES_QUERY_KEY,
35
+ spec: {
36
+ plugin: {
37
+ kind: defaultTimeSeriesQueryKind,
38
+ spec: (defaultQueryPlugin === null || defaultQueryPlugin === void 0 ? void 0 : defaultQueryPlugin.createInitialOptions()) || {}
39
+ }
40
+ }
41
+ };
30
42
  // State for which queries are collapsed
31
43
  // TODO: Would be easier if we had IDs for queries.
32
44
  const [queriesCollapsed, setQueriesCollapsed] = useState(queries.map(()=>false));
@@ -45,21 +57,12 @@ export function TimeSeriesQueryEditor({ queries =[] , onChange }) {
45
57
  const handleQueryAdd = ()=>{
46
58
  if (!defaultQueryPlugin) return;
47
59
  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
60
  if (draft) {
58
- draft.push(queryDef);
61
+ draft.push(defaultInitialQueryDefinition);
59
62
  } else {
60
63
  draft = [
61
64
  ...queries,
62
- queryDef
65
+ defaultInitialQueryDefinition
63
66
  ];
64
67
  }
65
68
  }));
@@ -89,20 +92,9 @@ export function TimeSeriesQueryEditor({ queries =[] , onChange }) {
89
92
  ];
90
93
  });
91
94
  };
92
- var _defaultPluginKinds_TimeSeriesQuery;
93
95
  // show one query input if queries is empty
94
96
  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
- }
97
+ defaultInitialQueryDefinition
106
98
  ];
107
99
  return /*#__PURE__*/ _jsxs(_Fragment, {
108
100
  children: [
@@ -113,7 +105,7 @@ export function TimeSeriesQueryEditor({ queries =[] , onChange }) {
113
105
  query: query,
114
106
  isCollapsed: !!queriesCollapsed[i],
115
107
  onChange: handleQueryChange,
116
- onDelete: hasMoreThanOneQuery ? handleQueryDelete : undefined,
108
+ onDelete: queries.length > 1 ? handleQueryDelete : undefined,
117
109
  onCollapseExpand: handleQueryCollapseExpand
118
110
  }, i))
119
111
  }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.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 { useState } from 'react';\nimport { produce } from 'immer';\nimport { Button, Stack } from '@mui/material';\nimport AddIcon from 'mdi-material-ui/Plus';\nimport { TimeSeriesQueryDefinition, QueryDefinition } from '@perses-dev/core';\nimport { usePlugin, usePluginRegistry } from '../../runtime';\nimport { TimeSeriesQueryInput } from './TimeSeriesQueryInput';\n\nconst DEFAULT_QUERY_PLUGIN_TYPE = 'TimeSeriesQuery';\n\nexport interface TimeSeriesQueryEditorProps {\n queries?: TimeSeriesQueryDefinition[];\n onChange: (queries: QueryDefinition[]) => void;\n}\n\nexport function TimeSeriesQueryEditor({ queries = [], onChange }: TimeSeriesQueryEditorProps) {\n const hasMoreThanOneQuery = queries.length > 1;\n const { defaultPluginKinds } = usePluginRegistry();\n const defaultTimeSeriesQueryKind = defaultPluginKinds?.[DEFAULT_QUERY_PLUGIN_TYPE] ?? '';\n\n const { data: defaultQueryPlugin } = usePlugin(DEFAULT_QUERY_PLUGIN_TYPE, defaultTimeSeriesQueryKind, {\n useErrorBoundary: true,\n enabled: true,\n });\n\n // State for which queries are collapsed\n // TODO: Would be easier if we had IDs for queries.\n const [queriesCollapsed, setQueriesCollapsed] = useState(queries.map(() => false));\n\n // Query handlers\n const handleQueryChange = (index: number, queryDef: TimeSeriesQueryDefinition) => {\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 = () => {\n if (!defaultQueryPlugin) return;\n onChange(\n produce(queries, (draft) => {\n const queryDef: TimeSeriesQueryDefinition = {\n kind: DEFAULT_QUERY_PLUGIN_TYPE,\n spec: {\n plugin: { kind: defaultTimeSeriesQueryKind, spec: defaultQueryPlugin.createInitialOptions() },\n },\n };\n if (draft) {\n draft.push(queryDef);\n } else {\n draft = [...queries, queryDef];\n }\n })\n );\n setQueriesCollapsed((queriesCollapsed) => {\n queriesCollapsed.push(false);\n return [...queriesCollapsed];\n });\n };\n\n const handleQueryDelete = (index: number) => {\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) => {\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: TimeSeriesQueryDefinition[] = queries.length\n ? queries\n : [\n {\n kind: 'TimeSeriesQuery',\n spec: {\n plugin: {\n kind: defaultPluginKinds?.['TimeSeriesQuery'] ?? '',\n spec: {\n query: '',\n },\n },\n },\n },\n ];\n\n return (\n <>\n <Stack spacing={1}>\n {queryDefinitions.map((query: TimeSeriesQueryDefinition, i: number) => (\n <TimeSeriesQueryInput\n key={i}\n index={i}\n query={query}\n isCollapsed={!!queriesCollapsed[i]}\n onChange={handleQueryChange}\n onDelete={hasMoreThanOneQuery ? 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","usePlugin","usePluginRegistry","TimeSeriesQueryInput","DEFAULT_QUERY_PLUGIN_TYPE","TimeSeriesQueryEditor","queries","onChange","hasMoreThanOneQuery","length","defaultPluginKinds","defaultTimeSeriesQueryKind","data","defaultQueryPlugin","useErrorBoundary","enabled","queriesCollapsed","setQueriesCollapsed","map","handleQueryChange","index","queryDef","draft","handleQueryAdd","kind","spec","plugin","createInitialOptions","push","handleQueryDelete","splice","handleQueryCollapseExpand","queryDefinitions","query","spacing","i","isCollapsed","onDelete","undefined","onCollapseExpand","variant","startIcon","sx","marginTop","onClick"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.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 { useState } from 'react';\nimport { produce } from 'immer';\nimport { Button, Stack } from '@mui/material';\nimport AddIcon from 'mdi-material-ui/Plus';\nimport { TimeSeriesQueryDefinition, QueryDefinition } from '@perses-dev/core';\nimport { TIME_SERIES_QUERY_KEY, useListPluginMetadata, usePlugin, usePluginRegistry } from '../../runtime';\nimport { TimeSeriesQueryInput } from './TimeSeriesQueryInput';\n\nexport interface TimeSeriesQueryEditorProps {\n queries?: TimeSeriesQueryDefinition[];\n onChange: (queries: QueryDefinition[]) => void;\n}\n\nexport function TimeSeriesQueryEditor({ queries = [], onChange }: TimeSeriesQueryEditorProps) {\n // Build the default query plugin\n // Use as default the plugin kind explicitly set as default or the first in the list\n const { defaultPluginKinds } = usePluginRegistry();\n const { data: timeSeriesPlugins } = useListPluginMetadata(TIME_SERIES_QUERY_KEY);\n const defaultTimeSeriesQueryKind = defaultPluginKinds?.[TIME_SERIES_QUERY_KEY] ?? timeSeriesPlugins?.[0]?.kind ?? '';\n const { data: defaultQueryPlugin } = usePlugin(TIME_SERIES_QUERY_KEY, defaultTimeSeriesQueryKind, {\n useErrorBoundary: 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 const defaultInitialQueryDefinition: TimeSeriesQueryDefinition = {\n kind: TIME_SERIES_QUERY_KEY,\n spec: {\n plugin: { kind: defaultTimeSeriesQueryKind, spec: defaultQueryPlugin?.createInitialOptions() || {} },\n },\n };\n\n // State for which queries are collapsed\n // TODO: Would be easier if we had IDs for queries.\n const [queriesCollapsed, setQueriesCollapsed] = useState(queries.map(() => false));\n\n // Query handlers\n const handleQueryChange = (index: number, queryDef: TimeSeriesQueryDefinition) => {\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 = () => {\n if (!defaultQueryPlugin) return;\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) => {\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) => {\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: TimeSeriesQueryDefinition[] = queries.length ? queries : [defaultInitialQueryDefinition];\n\n return (\n <>\n <Stack spacing={1}>\n {queryDefinitions.map((query: TimeSeriesQueryDefinition, i: number) => (\n <TimeSeriesQueryInput\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","TIME_SERIES_QUERY_KEY","useListPluginMetadata","usePlugin","usePluginRegistry","TimeSeriesQueryInput","TimeSeriesQueryEditor","queries","onChange","timeSeriesPlugins","defaultPluginKinds","data","defaultTimeSeriesQueryKind","kind","defaultQueryPlugin","useErrorBoundary","enabled","defaultInitialQueryDefinition","spec","plugin","createInitialOptions","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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"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { TimeSeriesQueryDefinition } from '@perses-dev/core';
3
2
  interface TimeSeriesQueryInputProps {
4
3
  query: TimeSeriesQueryDefinition;
@@ -8,6 +7,6 @@ interface TimeSeriesQueryInputProps {
8
7
  isCollapsed?: boolean;
9
8
  onDelete?: (index: number) => void;
10
9
  }
11
- export declare const TimeSeriesQueryInput: ({ index, query, isCollapsed, onDelete, onChange, onCollapseExpand, }: TimeSeriesQueryInputProps) => JSX.Element;
10
+ export declare const TimeSeriesQueryInput: ({ index, query, isCollapsed, onDelete, onChange, onCollapseExpand, }: TimeSeriesQueryInputProps) => import("react/jsx-runtime").JSX.Element;
12
11
  export {};
13
12
  //# sourceMappingURL=TimeSeriesQueryInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TimeSeriesQueryInput.d.ts","sourceRoot":"","sources":["../../../src/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.tsx"],"names":[],"mappings":";AAcA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAO7D,UAAU,yBAAyB;IACjC,KAAK,EAAE,yBAAyB,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACpE,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,eAAO,MAAM,oBAAoB,yEAO9B,yBAAyB,gBAsB3B,CAAC"}
1
+ {"version":3,"file":"TimeSeriesQueryInput.d.ts","sourceRoot":"","sources":["../../../src/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAO7D,UAAU,yBAAyB;IACjC,KAAK,EAAE,yBAAyB,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACpE,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,eAAO,MAAM,oBAAoB,yEAO9B,yBAAyB,4CAsB3B,CAAC"}
@@ -17,7 +17,7 @@ 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
+ export const TimeSeriesQueryInput = ({ index, query, isCollapsed, onDelete, onChange, onCollapseExpand })=>{
21
21
  return /*#__PURE__*/ _jsxs(Stack, {
22
22
  spacing: 1,
23
23
  children: [
@@ -62,8 +62,8 @@ export const TimeSeriesQueryInput = ({ index , query , isCollapsed , onDelete ,
62
62
  /**
63
63
  * Displays an editor for TimeSeriesQueryDefinition objects.
64
64
  */ function QueryEditor(props) {
65
- const { value , onChange , ...others } = props;
66
- const { spec: { plugin } } = value;
65
+ const { value, onChange, ...others } = props;
66
+ const { spec: { plugin } } = value;
67
67
  const handlePluginChange = (next)=>{
68
68
  onChange(produce(value, (draft)=>{
69
69
  draft.spec.plugin = next;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.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 produce from 'immer';\nimport { TimeSeriesQueryDefinition } 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 { PluginEditor, PluginEditorProps } from '../PluginEditor';\n\ninterface TimeSeriesQueryInputProps {\n query: TimeSeriesQueryDefinition;\n index: number;\n onChange: (index: number, query: TimeSeriesQueryDefinition) => void;\n onCollapseExpand: (index: number) => void;\n isCollapsed?: boolean;\n onDelete?: (index: number) => void;\n}\n\nexport const TimeSeriesQueryInput = ({\n index,\n query,\n isCollapsed,\n onDelete,\n onChange,\n onCollapseExpand,\n}: TimeSeriesQueryInputProps) => {\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 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';\n\ninterface QueryEditorProps extends Omit<BoxProps, OmittedMuiProps> {\n value: TimeSeriesQueryDefinition;\n onChange: (next: TimeSeriesQueryDefinition) => void;\n}\n\n/**\n * Displays an editor for TimeSeriesQueryDefinition objects.\n */\nfunction QueryEditor(props: QueryEditorProps) {\n const { value, onChange, ...others } = props;\n const {\n spec: { plugin },\n } = value;\n\n const handlePluginChange: PluginEditorProps['onChange'] = (next) => {\n onChange(\n produce(value, (draft) => {\n draft.spec.plugin = next;\n })\n );\n };\n\n return (\n <Box {...others}>\n {/* If TimeSeriesQuery plugins ever have common props on the definition, the inputs could go here */}\n <PluginEditor\n pluginType=\"TimeSeriesQuery\"\n pluginKindLabel=\"Query Type\"\n value={plugin}\n onChange={handlePluginChange}\n />\n </Box>\n );\n}\n"],"names":["produce","Stack","IconButton","Typography","Box","DeleteIcon","ChevronDown","ChevronRight","PluginEditor","TimeSeriesQueryInput","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","spec","plugin","handlePluginChange","draft","pluginType","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;AACxD,SAASC,YAAY,QAA2B,kBAAkB;AAWlE,OAAO,MAAMC,uBAAuB,CAAC,EACnCC,MAAK,EACLC,MAAK,EACLC,YAAW,EACXC,SAAQ,EACRC,SAAQ,EACRC,iBAAgB,EACU;IAC1B,qBACE,MAACd;QAAkBe,SAAS;;0BAC1B,MAACf;gBAAMgB,WAAU;gBAAMC,YAAW;gBAASC,cAAc;gBAAGC,aAAa,CAACC,QAAUA,MAAMC,QAAQC;;kCAChG,KAACrB;wBAAWsB,MAAK;wBAAQC,SAAS,IAAMV,iBAAiBL;kCACtDE,4BAAc,KAACL,kCAAkB,KAACD;;kCAErC,MAACH;wBAAWuB,SAAQ;wBAAWC,WAAU;;4BAAK;4BACrCjB,QAAQ;;;kCAEjB,KAACR;wBACCsB,MAAK;wBACL,2GAA2G;wBAC3GI,IAAI;4BAAEC,YAAY;4BAAQC,YAAY,CAAC,EAAEjB,WAAW,YAAY,SAAS,CAAC;wBAAC;wBAC3EY,SAAS,IAAMZ,YAAYA,SAASH;kCAEpC,cAAA,KAACL;;;;YAGJ,CAACO,6BAAe,KAACmB;gBAAYC,OAAOrB;gBAAOG,UAAU,CAACmB,OAASnB,SAASJ,OAAOuB;;;OAjBtEvB;AAoBhB,EAAE;AAWF;;CAEC,GACD,SAASqB,YAAYG,KAAuB;IAC1C,MAAM,EAAEF,MAAK,EAAElB,SAAQ,EAAE,GAAGqB,QAAQ,GAAGD;IACvC,MAAM,EACJE,MAAM,EAAEC,OAAM,EAAE,CAAA,EACjB,GAAGL;IAEJ,MAAMM,qBAAoD,CAACL;QACzDnB,SACEd,QAAQgC,OAAO,CAACO;YACdA,MAAMH,KAAKC,SAASJ;QACtB;IAEJ;IAEA,qBACE,KAAC7B;QAAK,GAAG+B,MAAM;kBAEb,cAAA,KAAC3B;YACCgC,YAAW;YACXC,iBAAgB;YAChBT,OAAOK;YACPvB,UAAUwB;;;AAIlB"}
1
+ {"version":3,"sources":["../../../src/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.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 produce from 'immer';\nimport { TimeSeriesQueryDefinition } 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 { PluginEditor, PluginEditorProps } from '../PluginEditor';\n\ninterface TimeSeriesQueryInputProps {\n query: TimeSeriesQueryDefinition;\n index: number;\n onChange: (index: number, query: TimeSeriesQueryDefinition) => void;\n onCollapseExpand: (index: number) => void;\n isCollapsed?: boolean;\n onDelete?: (index: number) => void;\n}\n\nexport const TimeSeriesQueryInput = ({\n index,\n query,\n isCollapsed,\n onDelete,\n onChange,\n onCollapseExpand,\n}: TimeSeriesQueryInputProps) => {\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 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';\n\ninterface QueryEditorProps extends Omit<BoxProps, OmittedMuiProps> {\n value: TimeSeriesQueryDefinition;\n onChange: (next: TimeSeriesQueryDefinition) => void;\n}\n\n/**\n * Displays an editor for TimeSeriesQueryDefinition objects.\n */\nfunction QueryEditor(props: QueryEditorProps) {\n const { value, onChange, ...others } = props;\n const {\n spec: { plugin },\n } = value;\n\n const handlePluginChange: PluginEditorProps['onChange'] = (next) => {\n onChange(\n produce(value, (draft) => {\n draft.spec.plugin = next;\n })\n );\n };\n\n return (\n <Box {...others}>\n {/* If TimeSeriesQuery plugins ever have common props on the definition, the inputs could go here */}\n <PluginEditor\n pluginType=\"TimeSeriesQuery\"\n pluginKindLabel=\"Query Type\"\n value={plugin}\n onChange={handlePluginChange}\n />\n </Box>\n );\n}\n"],"names":["produce","Stack","IconButton","Typography","Box","DeleteIcon","ChevronDown","ChevronRight","PluginEditor","TimeSeriesQueryInput","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","spec","plugin","handlePluginChange","draft","pluginType","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;AACxD,SAASC,YAAY,QAA2B,kBAAkB;AAWlE,OAAO,MAAMC,uBAAuB,CAAC,EACnCC,KAAK,EACLC,KAAK,EACLC,WAAW,EACXC,QAAQ,EACRC,QAAQ,EACRC,gBAAgB,EACU;IAC1B,qBACE,MAACd;QAAkBe,SAAS;;0BAC1B,MAACf;gBAAMgB,WAAU;gBAAMC,YAAW;gBAASC,cAAc;gBAAGC,aAAa,CAACC,QAAUA,MAAMC,OAAO,CAACC,OAAO;;kCACvG,KAACrB;wBAAWsB,MAAK;wBAAQC,SAAS,IAAMV,iBAAiBL;kCACtDE,4BAAc,KAACL,kCAAkB,KAACD;;kCAErC,MAACH;wBAAWuB,SAAQ;wBAAWC,WAAU;;4BAAK;4BACrCjB,QAAQ;;;kCAEjB,KAACR;wBACCsB,MAAK;wBACL,2GAA2G;wBAC3GI,IAAI;4BAAEC,YAAY;4BAAQC,YAAY,CAAC,EAAEjB,WAAW,YAAY,SAAS,CAAC;wBAAC;wBAC3EY,SAAS,IAAMZ,YAAYA,SAASH;kCAEpC,cAAA,KAACL;;;;YAGJ,CAACO,6BAAe,KAACmB;gBAAYC,OAAOrB;gBAAOG,UAAU,CAACmB,OAASnB,SAASJ,OAAOuB;;;OAjBtEvB;AAoBhB,EAAE;AAWF;;CAEC,GACD,SAASqB,YAAYG,KAAuB;IAC1C,MAAM,EAAEF,KAAK,EAAElB,QAAQ,EAAE,GAAGqB,QAAQ,GAAGD;IACvC,MAAM,EACJE,MAAM,EAAEC,MAAM,EAAE,EACjB,GAAGL;IAEJ,MAAMM,qBAAoD,CAACL;QACzDnB,SACEd,QAAQgC,OAAO,CAACO;YACdA,MAAMH,IAAI,CAACC,MAAM,GAAGJ;QACtB;IAEJ;IAEA,qBACE,KAAC7B;QAAK,GAAG+B,MAAM;kBAEb,cAAA,KAAC3B;YACCgC,YAAW;YACXC,iBAAgB;YAChBT,OAAOK;YACPvB,UAAUwB;;;AAIlB"}
@@ -1,9 +1,8 @@
1
- /// <reference types="react" />
2
1
  import { QueryDefinition } from '@perses-dev/core';
3
2
  import { TraceQueryDefinition } from '../../runtime';
4
3
  export interface TraceQueryEditorProps {
5
4
  queries?: TraceQueryDefinition[];
6
5
  onChange: (queries: QueryDefinition[]) => void;
7
6
  }
8
- export declare function TraceQueryEditor({ queries, onChange }: TraceQueryEditorProps): JSX.Element;
7
+ export declare function TraceQueryEditor({ queries, onChange }: TraceQueryEditorProps): import("react/jsx-runtime").JSX.Element;
9
8
  //# sourceMappingURL=TraceQueryEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TraceQueryEditor.d.ts","sourceRoot":"","sources":["../../../src/components/TraceQueryEditor/TraceQueryEditor.tsx"],"names":[],"mappings":";AAaA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKnD,OAAO,EAAa,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAKhE,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACjC,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,gBAAgB,CAAC,EAAE,OAAY,EAAE,QAAQ,EAAE,EAAE,qBAAqB,eAyGjF"}
1
+ {"version":3,"file":"TraceQueryEditor.d.ts","sourceRoot":"","sources":["../../../src/components/TraceQueryEditor/TraceQueryEditor.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKnD,OAAO,EAAa,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAKhE,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACjC,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,gBAAgB,CAAC,EAAE,OAAY,EAAE,QAAQ,EAAE,EAAE,qBAAqB,2CAyGjF"}
@@ -18,13 +18,13 @@ import { produce } from 'immer';
18
18
  import { usePlugin } from '../../runtime';
19
19
  import { TraceQueryInput } from './TraceQueryInput';
20
20
  const DEFAULT_QUERY_PLUGIN_TYPE = 'TraceQuery';
21
- export function TraceQueryEditor({ queries =[] , onChange }) {
21
+ export function TraceQueryEditor({ queries = [], onChange }) {
22
22
  const hasMoreThanOneQuery = queries.length > 1;
23
23
  const defaultTraceQueryKind = 'TempoTraceQuery';
24
24
  // State for which queries are collapsed
25
25
  // TODO: Would be easier if we had IDs for queries.
26
26
  const [queriesCollapsed, setQueriesCollapsed] = useState(queries.map(()=>false));
27
- const { data: defaultQueryPlugin } = usePlugin(DEFAULT_QUERY_PLUGIN_TYPE, defaultTraceQueryKind, {
27
+ const { data: defaultQueryPlugin } = usePlugin(DEFAULT_QUERY_PLUGIN_TYPE, defaultTraceQueryKind, {
28
28
  useErrorBoundary: true,
29
29
  enabled: true
30
30
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/TraceQueryEditor/TraceQueryEditor.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 { QueryDefinition } from '@perses-dev/core';\nimport { Button, Stack } from '@mui/material';\nimport AddIcon from 'mdi-material-ui/Plus';\nimport { useState } from 'react';\nimport { produce } from 'immer';\nimport { usePlugin, TraceQueryDefinition } from '../../runtime';\nimport { TraceQueryInput } from './TraceQueryInput';\n\nconst DEFAULT_QUERY_PLUGIN_TYPE = 'TraceQuery';\n\nexport interface TraceQueryEditorProps {\n queries?: TraceQueryDefinition[];\n onChange: (queries: QueryDefinition[]) => void;\n}\n\nexport function TraceQueryEditor({ queries = [], onChange }: TraceQueryEditorProps) {\n const hasMoreThanOneQuery = queries.length > 1;\n const defaultTraceQueryKind = 'TempoTraceQuery';\n\n // State for which queries are collapsed\n // TODO: Would be easier if we had IDs for queries.\n const [queriesCollapsed, setQueriesCollapsed] = useState(queries.map(() => false));\n\n const { data: defaultQueryPlugin } = usePlugin(DEFAULT_QUERY_PLUGIN_TYPE, defaultTraceQueryKind, {\n useErrorBoundary: true,\n enabled: true,\n });\n\n // Query handlers\n const handleQueryChange = (index: number, queryDef: TraceQueryDefinition) => {\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 = () => {\n if (!defaultQueryPlugin) return;\n onChange(\n produce(queries, (draft) => {\n const queryDef: TraceQueryDefinition = {\n kind: DEFAULT_QUERY_PLUGIN_TYPE,\n spec: {\n plugin: { kind: defaultTraceQueryKind, spec: defaultQueryPlugin.createInitialOptions() },\n },\n };\n if (draft) {\n draft.push(queryDef);\n } else {\n draft = [...queries, queryDef];\n }\n })\n );\n setQueriesCollapsed((queriesCollapsed) => {\n queriesCollapsed.push(false);\n return [...queriesCollapsed];\n });\n };\n\n const handleQueryDelete = (index: number) => {\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) => {\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: TraceQueryDefinition[] = queries.length\n ? queries\n : [\n {\n kind: 'TraceQuery',\n spec: {\n plugin: {\n kind: 'TempoTraceQuery',\n spec: {\n query: '',\n },\n },\n },\n },\n ];\n\n return (\n <>\n <Stack spacing={1}>\n {queryDefinitions.map((query: TraceQueryDefinition, i: number) => (\n <TraceQueryInput\n key={i}\n index={i}\n query={query}\n isCollapsed={!!queriesCollapsed[i]}\n onChange={handleQueryChange}\n onDelete={hasMoreThanOneQuery ? 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":["Button","Stack","AddIcon","useState","produce","usePlugin","TraceQueryInput","DEFAULT_QUERY_PLUGIN_TYPE","TraceQueryEditor","queries","onChange","hasMoreThanOneQuery","length","defaultTraceQueryKind","queriesCollapsed","setQueriesCollapsed","map","data","defaultQueryPlugin","useErrorBoundary","enabled","handleQueryChange","index","queryDef","draft","handleQueryAdd","kind","spec","plugin","createInitialOptions","push","handleQueryDelete","splice","handleQueryCollapseExpand","queryDefinitions","query","spacing","i","isCollapsed","onDelete","undefined","onCollapseExpand","variant","startIcon","sx","marginTop","onClick"],"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;;AAGjC,SAASA,MAAM,EAAEC,KAAK,QAAQ,gBAAgB;AAC9C,OAAOC,aAAa,uBAAuB;AAC3C,SAASC,QAAQ,QAAQ,QAAQ;AACjC,SAASC,OAAO,QAAQ,QAAQ;AAChC,SAASC,SAAS,QAA8B,gBAAgB;AAChE,SAASC,eAAe,QAAQ,oBAAoB;AAEpD,MAAMC,4BAA4B;AAOlC,OAAO,SAASC,iBAAiB,EAAEC,SAAU,EAAE,CAAA,EAAEC,SAAQ,EAAyB;IAChF,MAAMC,sBAAsBF,QAAQG,SAAS;IAC7C,MAAMC,wBAAwB;IAE9B,wCAAwC;IACxC,mDAAmD;IACnD,MAAM,CAACC,kBAAkBC,oBAAoB,GAAGZ,SAASM,QAAQO,IAAI,IAAM;IAE3E,MAAM,EAAEC,MAAMC,mBAAkB,EAAE,GAAGb,UAAUE,2BAA2BM,uBAAuB;QAC/FM,kBAAkB;QAClBC,SAAS;IACX;IAEA,iBAAiB;IACjB,MAAMC,oBAAoB,CAACC,OAAeC;QACxCb,SACEN,QAAQK,SAAS,CAACe;YAChB,IAAIA,OAAO;gBACTA,KAAK,CAACF,MAAM,GAAGC;YACjB,OAAO;gBACLC,QAAQ;oBAACD;iBAAS;YACpB;QACF;IAEJ;IAEA,MAAME,iBAAiB;QACrB,IAAI,CAACP,oBAAoB;QACzBR,SACEN,QAAQK,SAAS,CAACe;YAChB,MAAMD,WAAiC;gBACrCG,MAAMnB;gBACNoB,MAAM;oBACJC,QAAQ;wBAAEF,MAAMb;wBAAuBc,MAAMT,mBAAmBW;oBAAuB;gBACzF;YACF;YACA,IAAIL,OAAO;gBACTA,MAAMM,KAAKP;YACb,OAAO;gBACLC,QAAQ;uBAAIf;oBAASc;iBAAS;YAChC;QACF;QAEFR,oBAAoB,CAACD;YACnBA,iBAAiBgB,KAAK;YACtB,OAAO;mBAAIhB;aAAiB;QAC9B;IACF;IAEA,MAAMiB,oBAAoB,CAACT;QACzBZ,SACEN,QAAQK,SAAS,CAACe;YAChBA,MAAMQ,OAAOV,OAAO;QACtB;QAEFP,oBAAoB,CAACD;YACnBA,iBAAiBkB,OAAOV,OAAO;YAC/B,OAAO;mBAAIR;aAAiB;QAC9B;IACF;IAEA,MAAMmB,4BAA4B,CAACX;QACjCP,oBAAoB,CAACD;YACnBA,gBAAgB,CAACQ,MAAM,GAAG,CAACR,gBAAgB,CAACQ,MAAM;YAClD,OAAO;mBAAIR;aAAiB;QAC9B;IACF;IAEA,2CAA2C;IAC3C,MAAMoB,mBAA2CzB,QAAQG,SACrDH,UACA;QACE;YACEiB,MAAM;YACNC,MAAM;gBACJC,QAAQ;oBACNF,MAAM;oBACNC,MAAM;wBACJQ,OAAO;oBACT;gBACF;YACF;QACF;KACD;IAEL,qBACE;;0BACE,KAAClC;gBAAMmC,SAAS;0BACbF,iBAAiBlB,IAAI,CAACmB,OAA6BE,kBAClD,KAAC/B;wBAECgB,OAAOe;wBACPF,OAAOA;wBACPG,aAAa,CAAC,CAACxB,gBAAgB,CAACuB,EAAE;wBAClC3B,UAAUW;wBACVkB,UAAU5B,sBAAsBoB,oBAAoBS;wBACpDC,kBAAkBR;uBANbI;;0BAUX,KAACrC;gBAAO0C,SAAQ;gBAAYC,yBAAW,KAACzC;gBAAY0C,IAAI;oBAAEC,WAAW;gBAAE;gBAAGC,SAASrB;0BAAgB;;;;AAKzG"}
1
+ {"version":3,"sources":["../../../src/components/TraceQueryEditor/TraceQueryEditor.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 { QueryDefinition } from '@perses-dev/core';\nimport { Button, Stack } from '@mui/material';\nimport AddIcon from 'mdi-material-ui/Plus';\nimport { useState } from 'react';\nimport { produce } from 'immer';\nimport { usePlugin, TraceQueryDefinition } from '../../runtime';\nimport { TraceQueryInput } from './TraceQueryInput';\n\nconst DEFAULT_QUERY_PLUGIN_TYPE = 'TraceQuery';\n\nexport interface TraceQueryEditorProps {\n queries?: TraceQueryDefinition[];\n onChange: (queries: QueryDefinition[]) => void;\n}\n\nexport function TraceQueryEditor({ queries = [], onChange }: TraceQueryEditorProps) {\n const hasMoreThanOneQuery = queries.length > 1;\n const defaultTraceQueryKind = 'TempoTraceQuery';\n\n // State for which queries are collapsed\n // TODO: Would be easier if we had IDs for queries.\n const [queriesCollapsed, setQueriesCollapsed] = useState(queries.map(() => false));\n\n const { data: defaultQueryPlugin } = usePlugin(DEFAULT_QUERY_PLUGIN_TYPE, defaultTraceQueryKind, {\n useErrorBoundary: true,\n enabled: true,\n });\n\n // Query handlers\n const handleQueryChange = (index: number, queryDef: TraceQueryDefinition) => {\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 = () => {\n if (!defaultQueryPlugin) return;\n onChange(\n produce(queries, (draft) => {\n const queryDef: TraceQueryDefinition = {\n kind: DEFAULT_QUERY_PLUGIN_TYPE,\n spec: {\n plugin: { kind: defaultTraceQueryKind, spec: defaultQueryPlugin.createInitialOptions() },\n },\n };\n if (draft) {\n draft.push(queryDef);\n } else {\n draft = [...queries, queryDef];\n }\n })\n );\n setQueriesCollapsed((queriesCollapsed) => {\n queriesCollapsed.push(false);\n return [...queriesCollapsed];\n });\n };\n\n const handleQueryDelete = (index: number) => {\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) => {\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: TraceQueryDefinition[] = queries.length\n ? queries\n : [\n {\n kind: 'TraceQuery',\n spec: {\n plugin: {\n kind: 'TempoTraceQuery',\n spec: {\n query: '',\n },\n },\n },\n },\n ];\n\n return (\n <>\n <Stack spacing={1}>\n {queryDefinitions.map((query: TraceQueryDefinition, i: number) => (\n <TraceQueryInput\n key={i}\n index={i}\n query={query}\n isCollapsed={!!queriesCollapsed[i]}\n onChange={handleQueryChange}\n onDelete={hasMoreThanOneQuery ? 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":["Button","Stack","AddIcon","useState","produce","usePlugin","TraceQueryInput","DEFAULT_QUERY_PLUGIN_TYPE","TraceQueryEditor","queries","onChange","hasMoreThanOneQuery","length","defaultTraceQueryKind","queriesCollapsed","setQueriesCollapsed","map","data","defaultQueryPlugin","useErrorBoundary","enabled","handleQueryChange","index","queryDef","draft","handleQueryAdd","kind","spec","plugin","createInitialOptions","push","handleQueryDelete","splice","handleQueryCollapseExpand","queryDefinitions","query","spacing","i","isCollapsed","onDelete","undefined","onCollapseExpand","variant","startIcon","sx","marginTop","onClick"],"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;;AAGjC,SAASA,MAAM,EAAEC,KAAK,QAAQ,gBAAgB;AAC9C,OAAOC,aAAa,uBAAuB;AAC3C,SAASC,QAAQ,QAAQ,QAAQ;AACjC,SAASC,OAAO,QAAQ,QAAQ;AAChC,SAASC,SAAS,QAA8B,gBAAgB;AAChE,SAASC,eAAe,QAAQ,oBAAoB;AAEpD,MAAMC,4BAA4B;AAOlC,OAAO,SAASC,iBAAiB,EAAEC,UAAU,EAAE,EAAEC,QAAQ,EAAyB;IAChF,MAAMC,sBAAsBF,QAAQG,MAAM,GAAG;IAC7C,MAAMC,wBAAwB;IAE9B,wCAAwC;IACxC,mDAAmD;IACnD,MAAM,CAACC,kBAAkBC,oBAAoB,GAAGZ,SAASM,QAAQO,GAAG,CAAC,IAAM;IAE3E,MAAM,EAAEC,MAAMC,kBAAkB,EAAE,GAAGb,UAAUE,2BAA2BM,uBAAuB;QAC/FM,kBAAkB;QAClBC,SAAS;IACX;IAEA,iBAAiB;IACjB,MAAMC,oBAAoB,CAACC,OAAeC;QACxCb,SACEN,QAAQK,SAAS,CAACe;YAChB,IAAIA,OAAO;gBACTA,KAAK,CAACF,MAAM,GAAGC;YACjB,OAAO;gBACLC,QAAQ;oBAACD;iBAAS;YACpB;QACF;IAEJ;IAEA,MAAME,iBAAiB;QACrB,IAAI,CAACP,oBAAoB;QACzBR,SACEN,QAAQK,SAAS,CAACe;YAChB,MAAMD,WAAiC;gBACrCG,MAAMnB;gBACNoB,MAAM;oBACJC,QAAQ;wBAAEF,MAAMb;wBAAuBc,MAAMT,mBAAmBW,oBAAoB;oBAAG;gBACzF;YACF;YACA,IAAIL,OAAO;gBACTA,MAAMM,IAAI,CAACP;YACb,OAAO;gBACLC,QAAQ;uBAAIf;oBAASc;iBAAS;YAChC;QACF;QAEFR,oBAAoB,CAACD;YACnBA,iBAAiBgB,IAAI,CAAC;YACtB,OAAO;mBAAIhB;aAAiB;QAC9B;IACF;IAEA,MAAMiB,oBAAoB,CAACT;QACzBZ,SACEN,QAAQK,SAAS,CAACe;YAChBA,MAAMQ,MAAM,CAACV,OAAO;QACtB;QAEFP,oBAAoB,CAACD;YACnBA,iBAAiBkB,MAAM,CAACV,OAAO;YAC/B,OAAO;mBAAIR;aAAiB;QAC9B;IACF;IAEA,MAAMmB,4BAA4B,CAACX;QACjCP,oBAAoB,CAACD;YACnBA,gBAAgB,CAACQ,MAAM,GAAG,CAACR,gBAAgB,CAACQ,MAAM;YAClD,OAAO;mBAAIR;aAAiB;QAC9B;IACF;IAEA,2CAA2C;IAC3C,MAAMoB,mBAA2CzB,QAAQG,MAAM,GAC3DH,UACA;QACE;YACEiB,MAAM;YACNC,MAAM;gBACJC,QAAQ;oBACNF,MAAM;oBACNC,MAAM;wBACJQ,OAAO;oBACT;gBACF;YACF;QACF;KACD;IAEL,qBACE;;0BACE,KAAClC;gBAAMmC,SAAS;0BACbF,iBAAiBlB,GAAG,CAAC,CAACmB,OAA6BE,kBAClD,KAAC/B;wBAECgB,OAAOe;wBACPF,OAAOA;wBACPG,aAAa,CAAC,CAACxB,gBAAgB,CAACuB,EAAE;wBAClC3B,UAAUW;wBACVkB,UAAU5B,sBAAsBoB,oBAAoBS;wBACpDC,kBAAkBR;uBANbI;;0BAUX,KAACrC;gBAAO0C,SAAQ;gBAAYC,yBAAW,KAACzC;gBAAY0C,IAAI;oBAAEC,WAAW;gBAAE;gBAAGC,SAASrB;0BAAgB;;;;AAKzG"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { TraceQueryDefinition } from '../../runtime';
3
2
  interface TraceQueryInputProps {
4
3
  query: TraceQueryDefinition;
@@ -8,6 +7,6 @@ interface TraceQueryInputProps {
8
7
  isCollapsed?: boolean;
9
8
  onDelete?: (index: number) => void;
10
9
  }
11
- export declare const TraceQueryInput: ({ index, query, isCollapsed, onDelete, onChange, onCollapseExpand, }: TraceQueryInputProps) => JSX.Element;
10
+ export declare const TraceQueryInput: ({ index, query, isCollapsed, onDelete, onChange, onCollapseExpand, }: TraceQueryInputProps) => import("react/jsx-runtime").JSX.Element;
12
11
  export {};
13
12
  //# sourceMappingURL=TraceQueryInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TraceQueryInput.d.ts","sourceRoot":"","sources":["../../../src/components/TraceQueryEditor/TraceQueryInput.tsx"],"names":[],"mappings":";AAmBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,UAAU,oBAAoB;IAC5B,KAAK,EAAE,oBAAoB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC/D,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;AAWD,eAAO,MAAM,eAAe,yEAOzB,oBAAoB,gBAsBtB,CAAC"}
1
+ {"version":3,"file":"TraceQueryInput.d.ts","sourceRoot":"","sources":["../../../src/components/TraceQueryEditor/TraceQueryInput.tsx"],"names":[],"mappings":"AAmBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,UAAU,oBAAoB;IAC5B,KAAK,EAAE,oBAAoB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC/D,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;AAWD,eAAO,MAAM,eAAe,yEAOzB,oBAAoB,4CAsBtB,CAAC"}