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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (341) hide show
  1. package/dist/cjs/components/AddGroupButton/AddGroupButton.js +10 -7
  2. package/dist/cjs/components/AddGroupButton/index.js +10 -8
  3. package/dist/cjs/components/AddPanelButton/AddPanelButton.js +10 -11
  4. package/dist/cjs/components/AddPanelButton/index.js +10 -8
  5. package/dist/cjs/components/Dashboard/Dashboard.js +11 -9
  6. package/dist/cjs/components/Dashboard/index.js +10 -8
  7. package/dist/cjs/components/DashboardStickyToolbar/DashboardStickyToolbar.js +53 -22
  8. package/dist/cjs/components/DashboardStickyToolbar/index.js +10 -8
  9. package/dist/cjs/components/DashboardToolbar/DashboardToolbar.js +81 -102
  10. package/dist/cjs/components/DashboardToolbar/index.js +10 -8
  11. package/dist/cjs/components/Datasources/DatasourceEditor.js +237 -0
  12. package/dist/cjs/components/Datasources/EditDatasourcesButton.js +106 -0
  13. package/dist/cjs/components/Datasources/index.js +31 -0
  14. package/dist/cjs/components/DeletePanelDialog/DeletePanelDialog.js +12 -10
  15. package/dist/cjs/components/DeletePanelDialog/index.js +10 -8
  16. package/dist/cjs/components/DeletePanelGroupDialog/DeletePanelGroupDialog.js +17 -15
  17. package/dist/cjs/components/DeletePanelGroupDialog/index.js +10 -8
  18. package/dist/cjs/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js +5 -3
  19. package/dist/cjs/components/DiscardChangesConfirmationDialog/index.js +10 -8
  20. package/dist/cjs/components/DownloadButton/DownloadButton.js +12 -10
  21. package/dist/cjs/components/DownloadButton/index.js +10 -8
  22. package/dist/cjs/components/EditButton/EditButton.js +8 -6
  23. package/dist/cjs/components/EditButton/index.js +10 -8
  24. package/dist/cjs/components/EditJsonButton/EditJsonButton.js +15 -11
  25. package/dist/cjs/components/EditJsonButton/index.js +10 -8
  26. package/dist/cjs/components/EditJsonDialog/EditJsonDialog.js +46 -24
  27. package/dist/cjs/components/EditJsonDialog/index.js +10 -8
  28. package/dist/cjs/components/EmptyDashboard/EmptyDashboard.js +18 -16
  29. package/dist/cjs/components/EmptyDashboard/index.js +10 -8
  30. package/dist/cjs/components/GridLayout/GridContainer.js +5 -3
  31. package/dist/cjs/components/GridLayout/GridItemContent.js +33 -13
  32. package/dist/cjs/components/GridLayout/GridLayout.js +18 -16
  33. package/dist/cjs/components/GridLayout/GridTitle.js +35 -33
  34. package/dist/cjs/components/GridLayout/index.js +13 -11
  35. package/dist/cjs/components/Panel/Panel.js +22 -23
  36. package/dist/cjs/components/Panel/PanelContent.js +11 -8
  37. package/dist/cjs/components/Panel/PanelHeader.js +33 -31
  38. package/dist/cjs/components/Panel/index.js +10 -8
  39. package/dist/cjs/components/PanelDrawer/PanelDrawer.js +25 -77
  40. package/dist/cjs/components/PanelDrawer/PanelEditorForm.js +231 -141
  41. package/dist/cjs/components/PanelDrawer/PanelPreview.js +11 -9
  42. package/dist/cjs/components/PanelDrawer/index.js +11 -8
  43. package/dist/cjs/components/PanelDrawer/usePanelEditor.js +3 -1
  44. package/dist/cjs/components/PanelGroupDialog/PanelGroupDialog.js +18 -16
  45. package/dist/cjs/components/PanelGroupDialog/PanelGroupEditorForm.js +15 -11
  46. package/dist/cjs/components/PanelGroupDialog/index.js +10 -8
  47. package/dist/cjs/components/QuerySummaryTable/QuerySummaryTable.js +47 -45
  48. package/dist/cjs/components/QuerySummaryTable/index.js +10 -8
  49. package/dist/cjs/components/SaveChangesConfirmationDialog/SaveChangesConfirmationDialog.js +23 -21
  50. package/dist/cjs/components/SaveChangesConfirmationDialog/index.js +10 -8
  51. package/dist/cjs/components/SaveDashboardButton/SaveDashboardButton.js +11 -9
  52. package/dist/cjs/components/SaveDashboardButton/index.js +10 -8
  53. package/dist/cjs/components/TimeRangeControls/TimeRangeControls.js +46 -19
  54. package/dist/cjs/components/TimeRangeControls/index.js +10 -8
  55. package/dist/cjs/components/ToolbarIconButton/ToolbarIconButton.js +5 -3
  56. package/dist/cjs/components/ToolbarIconButton/index.js +10 -8
  57. package/dist/cjs/components/Variables/BuiltinVariableAccordions.js +140 -0
  58. package/dist/cjs/components/Variables/EditVariablesButton.js +19 -15
  59. package/dist/cjs/components/Variables/TemplateVariable.js +259 -110
  60. package/dist/cjs/components/Variables/VariableEditor.js +354 -117
  61. package/dist/cjs/components/Variables/VariableList.js +44 -22
  62. package/dist/cjs/components/Variables/index.js +14 -11
  63. package/dist/cjs/components/index.js +32 -29
  64. package/dist/cjs/constants/grid-layout-config.js +6 -2
  65. package/dist/cjs/constants/index.js +12 -9
  66. package/dist/cjs/constants/styles.js +42 -0
  67. package/dist/cjs/constants/user-interface-text.js +9 -2
  68. package/dist/cjs/context/DashboardProvider/DashboardProvider.js +43 -35
  69. package/dist/cjs/context/DashboardProvider/common.js +6 -2
  70. package/dist/cjs/context/DashboardProvider/dashboard-provider-api.js +70 -38
  71. package/dist/cjs/context/DashboardProvider/delete-panel-group-slice.js +3 -1
  72. package/dist/cjs/context/DashboardProvider/delete-panel-slice.js +5 -3
  73. package/dist/cjs/context/DashboardProvider/discard-changes-dialog-slice.js +3 -1
  74. package/dist/cjs/context/DashboardProvider/duplicate-panel-slice.js +3 -1
  75. package/dist/cjs/context/DashboardProvider/edit-json-dialog-slice.js +3 -1
  76. package/dist/cjs/context/DashboardProvider/index.js +12 -10
  77. package/dist/cjs/context/DashboardProvider/panel-editor-slice.js +13 -11
  78. package/dist/cjs/context/DashboardProvider/panel-group-editor-slice.js +8 -6
  79. package/dist/cjs/context/DashboardProvider/panel-group-slice.js +15 -7
  80. package/dist/cjs/context/DashboardProvider/panel-slice.js +3 -1
  81. package/dist/cjs/context/DashboardProvider/save-changes-dialog-slice.js +3 -1
  82. package/dist/cjs/context/DatasourceStoreProvider.js +167 -46
  83. package/dist/cjs/context/TemplateVariableProvider/TemplateVariableProvider.js +205 -51
  84. package/dist/cjs/context/TemplateVariableProvider/hydrationUtils.js +65 -13
  85. package/dist/cjs/context/TemplateVariableProvider/index.js +10 -8
  86. package/dist/cjs/context/TemplateVariableProvider/query-params.js +17 -7
  87. package/dist/cjs/context/TemplateVariableProvider/utils.js +49 -9
  88. package/dist/cjs/context/index.js +13 -11
  89. package/dist/cjs/context/useDashboard.js +12 -8
  90. package/dist/cjs/index.js +12 -10
  91. package/dist/cjs/stories/decorators/WithDashboard.js +6 -4
  92. package/dist/cjs/stories/decorators/WithDatasourceStore.js +6 -4
  93. package/dist/cjs/stories/decorators/WithTemplateVariables.js +6 -4
  94. package/dist/cjs/stories/decorators/constants.js +5 -3
  95. package/dist/cjs/stories/decorators/index.js +13 -11
  96. package/dist/cjs/test/dashboard-provider.js +8 -4
  97. package/dist/cjs/test/datasource-provider.js +16 -12
  98. package/dist/cjs/test/index.js +13 -11
  99. package/dist/cjs/test/plugin-registry.js +6 -4
  100. package/dist/cjs/test/render.js +27 -20
  101. package/dist/cjs/test/setup-tests.js +2 -2
  102. package/dist/cjs/test/testDashboard.js +13 -11
  103. package/dist/cjs/utils/index.js +11 -9
  104. package/dist/cjs/utils/panelUtils.js +9 -3
  105. package/dist/cjs/utils/time.js +5 -3
  106. package/dist/cjs/validation/index.js +30 -0
  107. package/dist/cjs/validation/panel.js +29 -0
  108. package/dist/cjs/views/ViewDashboard/DashboardApp.js +30 -16
  109. package/dist/cjs/views/ViewDashboard/ViewDashboard.js +64 -20
  110. package/dist/cjs/views/ViewDashboard/index.js +10 -8
  111. package/dist/cjs/views/index.js +10 -8
  112. package/dist/components/AddGroupButton/AddGroupButton.d.ts.map +1 -1
  113. package/dist/components/AddGroupButton/AddGroupButton.js +2 -1
  114. package/dist/components/AddGroupButton/AddGroupButton.js.map +1 -1
  115. package/dist/components/AddGroupButton/index.js.map +1 -1
  116. package/dist/components/AddPanelButton/AddPanelButton.js +2 -5
  117. package/dist/components/AddPanelButton/AddPanelButton.js.map +1 -1
  118. package/dist/components/AddPanelButton/index.js.map +1 -1
  119. package/dist/components/Dashboard/Dashboard.js.map +1 -1
  120. package/dist/components/Dashboard/index.js.map +1 -1
  121. package/dist/components/DashboardStickyToolbar/DashboardStickyToolbar.d.ts.map +1 -1
  122. package/dist/components/DashboardStickyToolbar/DashboardStickyToolbar.js +37 -8
  123. package/dist/components/DashboardStickyToolbar/DashboardStickyToolbar.js.map +1 -1
  124. package/dist/components/DashboardStickyToolbar/index.js.map +1 -1
  125. package/dist/components/DashboardToolbar/DashboardToolbar.d.ts.map +1 -1
  126. package/dist/components/DashboardToolbar/DashboardToolbar.js +61 -84
  127. package/dist/components/DashboardToolbar/DashboardToolbar.js.map +1 -1
  128. package/dist/components/DashboardToolbar/index.js.map +1 -1
  129. package/dist/components/Datasources/DatasourceEditor.d.ts +8 -0
  130. package/dist/components/Datasources/DatasourceEditor.d.ts.map +1 -0
  131. package/dist/components/Datasources/DatasourceEditor.js +224 -0
  132. package/dist/components/Datasources/DatasourceEditor.js.map +1 -0
  133. package/dist/components/Datasources/EditDatasourcesButton.d.ts +3 -0
  134. package/dist/components/Datasources/EditDatasourcesButton.d.ts.map +1 -0
  135. package/dist/components/Datasources/EditDatasourcesButton.js +93 -0
  136. package/dist/components/Datasources/EditDatasourcesButton.js.map +1 -0
  137. package/dist/components/Datasources/index.d.ts +3 -0
  138. package/dist/components/Datasources/index.d.ts.map +1 -0
  139. package/dist/components/Datasources/index.js +16 -0
  140. package/dist/components/Datasources/index.js.map +1 -0
  141. package/dist/components/DeletePanelDialog/DeletePanelDialog.js.map +1 -1
  142. package/dist/components/DeletePanelDialog/index.js.map +1 -1
  143. package/dist/components/DeletePanelGroupDialog/DeletePanelGroupDialog.js +2 -2
  144. package/dist/components/DeletePanelGroupDialog/DeletePanelGroupDialog.js.map +1 -1
  145. package/dist/components/DeletePanelGroupDialog/index.js.map +1 -1
  146. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js.map +1 -1
  147. package/dist/components/DiscardChangesConfirmationDialog/index.js.map +1 -1
  148. package/dist/components/DownloadButton/DownloadButton.js.map +1 -1
  149. package/dist/components/DownloadButton/index.js.map +1 -1
  150. package/dist/components/EditButton/EditButton.js.map +1 -1
  151. package/dist/components/EditButton/index.js.map +1 -1
  152. package/dist/components/EditJsonButton/EditJsonButton.d.ts +4 -1
  153. package/dist/components/EditJsonButton/EditJsonButton.d.ts.map +1 -1
  154. package/dist/components/EditJsonButton/EditJsonButton.js +5 -3
  155. package/dist/components/EditJsonButton/EditJsonButton.js.map +1 -1
  156. package/dist/components/EditJsonButton/index.js.map +1 -1
  157. package/dist/components/EditJsonDialog/EditJsonDialog.d.ts +5 -1
  158. package/dist/components/EditJsonDialog/EditJsonDialog.d.ts.map +1 -1
  159. package/dist/components/EditJsonDialog/EditJsonDialog.js +32 -12
  160. package/dist/components/EditJsonDialog/EditJsonDialog.js.map +1 -1
  161. package/dist/components/EditJsonDialog/index.js.map +1 -1
  162. package/dist/components/EmptyDashboard/EmptyDashboard.js.map +1 -1
  163. package/dist/components/EmptyDashboard/index.js.map +1 -1
  164. package/dist/components/GridLayout/GridContainer.js.map +1 -1
  165. package/dist/components/GridLayout/GridItemContent.d.ts.map +1 -1
  166. package/dist/components/GridLayout/GridItemContent.js +27 -9
  167. package/dist/components/GridLayout/GridItemContent.js.map +1 -1
  168. package/dist/components/GridLayout/GridLayout.js +2 -2
  169. package/dist/components/GridLayout/GridLayout.js.map +1 -1
  170. package/dist/components/GridLayout/GridTitle.js.map +1 -1
  171. package/dist/components/GridLayout/index.js.map +1 -1
  172. package/dist/components/Panel/Panel.d.ts +13 -1
  173. package/dist/components/Panel/Panel.d.ts.map +1 -1
  174. package/dist/components/Panel/Panel.js +9 -12
  175. package/dist/components/Panel/Panel.js.map +1 -1
  176. package/dist/components/Panel/PanelContent.d.ts +2 -1
  177. package/dist/components/Panel/PanelContent.d.ts.map +1 -1
  178. package/dist/components/Panel/PanelContent.js +3 -2
  179. package/dist/components/Panel/PanelContent.js.map +1 -1
  180. package/dist/components/Panel/PanelHeader.js.map +1 -1
  181. package/dist/components/Panel/index.js.map +1 -1
  182. package/dist/components/PanelDrawer/PanelDrawer.d.ts.map +1 -1
  183. package/dist/components/PanelDrawer/PanelDrawer.js +22 -76
  184. package/dist/components/PanelDrawer/PanelDrawer.js.map +1 -1
  185. package/dist/components/PanelDrawer/PanelEditorForm.d.ts +4 -1
  186. package/dist/components/PanelDrawer/PanelEditorForm.d.ts.map +1 -1
  187. package/dist/components/PanelDrawer/PanelEditorForm.js +225 -139
  188. package/dist/components/PanelDrawer/PanelEditorForm.js.map +1 -1
  189. package/dist/components/PanelDrawer/PanelPreview.d.ts.map +1 -1
  190. package/dist/components/PanelDrawer/PanelPreview.js +2 -2
  191. package/dist/components/PanelDrawer/PanelPreview.js.map +1 -1
  192. package/dist/components/PanelDrawer/index.d.ts +1 -0
  193. package/dist/components/PanelDrawer/index.d.ts.map +1 -1
  194. package/dist/components/PanelDrawer/index.js +1 -0
  195. package/dist/components/PanelDrawer/index.js.map +1 -1
  196. package/dist/components/PanelDrawer/usePanelEditor.js.map +1 -1
  197. package/dist/components/PanelGroupDialog/PanelGroupDialog.js.map +1 -1
  198. package/dist/components/PanelGroupDialog/PanelGroupEditorForm.js.map +1 -1
  199. package/dist/components/PanelGroupDialog/index.js.map +1 -1
  200. package/dist/components/QuerySummaryTable/QuerySummaryTable.js +6 -6
  201. package/dist/components/QuerySummaryTable/QuerySummaryTable.js.map +1 -1
  202. package/dist/components/QuerySummaryTable/index.js.map +1 -1
  203. package/dist/components/SaveChangesConfirmationDialog/SaveChangesConfirmationDialog.js +4 -4
  204. package/dist/components/SaveChangesConfirmationDialog/SaveChangesConfirmationDialog.js.map +1 -1
  205. package/dist/components/SaveChangesConfirmationDialog/index.js.map +1 -1
  206. package/dist/components/SaveDashboardButton/SaveDashboardButton.js +4 -4
  207. package/dist/components/SaveDashboardButton/SaveDashboardButton.js.map +1 -1
  208. package/dist/components/SaveDashboardButton/index.js.map +1 -1
  209. package/dist/components/TimeRangeControls/TimeRangeControls.d.ts.map +1 -1
  210. package/dist/components/TimeRangeControls/TimeRangeControls.js +26 -5
  211. package/dist/components/TimeRangeControls/TimeRangeControls.js.map +1 -1
  212. package/dist/components/TimeRangeControls/index.js.map +1 -1
  213. package/dist/components/ToolbarIconButton/ToolbarIconButton.js.map +1 -1
  214. package/dist/components/ToolbarIconButton/index.js.map +1 -1
  215. package/dist/components/Variables/BuiltinVariableAccordions.d.ts +8 -0
  216. package/dist/components/Variables/BuiltinVariableAccordions.d.ts.map +1 -0
  217. package/dist/components/Variables/BuiltinVariableAccordions.js +127 -0
  218. package/dist/components/Variables/BuiltinVariableAccordions.js.map +1 -0
  219. package/dist/components/Variables/EditVariablesButton.d.ts.map +1 -1
  220. package/dist/components/Variables/EditVariablesButton.js +8 -6
  221. package/dist/components/Variables/EditVariablesButton.js.map +1 -1
  222. package/dist/components/Variables/TemplateVariable.d.ts +12 -2
  223. package/dist/components/Variables/TemplateVariable.d.ts.map +1 -1
  224. package/dist/components/Variables/TemplateVariable.js +242 -103
  225. package/dist/components/Variables/TemplateVariable.js.map +1 -1
  226. package/dist/components/Variables/VariableEditor.d.ts +9 -1
  227. package/dist/components/Variables/VariableEditor.d.ts.map +1 -1
  228. package/dist/components/Variables/VariableEditor.js +324 -97
  229. package/dist/components/Variables/VariableEditor.js.map +1 -1
  230. package/dist/components/Variables/VariableList.d.ts +5 -0
  231. package/dist/components/Variables/VariableList.d.ts.map +1 -1
  232. package/dist/components/Variables/VariableList.js +31 -19
  233. package/dist/components/Variables/VariableList.js.map +1 -1
  234. package/dist/components/Variables/index.d.ts +1 -0
  235. package/dist/components/Variables/index.d.ts.map +1 -1
  236. package/dist/components/Variables/index.js +1 -0
  237. package/dist/components/Variables/index.js.map +1 -1
  238. package/dist/components/index.d.ts +1 -0
  239. package/dist/components/index.d.ts.map +1 -1
  240. package/dist/components/index.js +1 -0
  241. package/dist/components/index.js.map +1 -1
  242. package/dist/constants/grid-layout-config.js.map +1 -1
  243. package/dist/constants/index.d.ts +1 -0
  244. package/dist/constants/index.d.ts.map +1 -1
  245. package/dist/constants/index.js +1 -0
  246. package/dist/constants/index.js.map +1 -1
  247. package/dist/constants/styles.d.ts +5 -0
  248. package/dist/constants/styles.d.ts.map +1 -0
  249. package/dist/constants/styles.js +23 -0
  250. package/dist/constants/styles.js.map +1 -0
  251. package/dist/constants/user-interface-text.d.ts +3 -0
  252. package/dist/constants/user-interface-text.d.ts.map +1 -1
  253. package/dist/constants/user-interface-text.js +3 -0
  254. package/dist/constants/user-interface-text.js.map +1 -1
  255. package/dist/context/DashboardProvider/DashboardProvider.d.ts +2 -1
  256. package/dist/context/DashboardProvider/DashboardProvider.d.ts.map +1 -1
  257. package/dist/context/DashboardProvider/DashboardProvider.js +8 -6
  258. package/dist/context/DashboardProvider/DashboardProvider.js.map +1 -1
  259. package/dist/context/DashboardProvider/common.js.map +1 -1
  260. package/dist/context/DashboardProvider/dashboard-provider-api.js +2 -2
  261. package/dist/context/DashboardProvider/dashboard-provider-api.js.map +1 -1
  262. package/dist/context/DashboardProvider/delete-panel-group-slice.js.map +1 -1
  263. package/dist/context/DashboardProvider/delete-panel-slice.js +2 -2
  264. package/dist/context/DashboardProvider/delete-panel-slice.js.map +1 -1
  265. package/dist/context/DashboardProvider/discard-changes-dialog-slice.js.map +1 -1
  266. package/dist/context/DashboardProvider/duplicate-panel-slice.js.map +1 -1
  267. package/dist/context/DashboardProvider/edit-json-dialog-slice.js.map +1 -1
  268. package/dist/context/DashboardProvider/index.js.map +1 -1
  269. package/dist/context/DashboardProvider/panel-editor-slice.d.ts +2 -2
  270. package/dist/context/DashboardProvider/panel-editor-slice.d.ts.map +1 -1
  271. package/dist/context/DashboardProvider/panel-editor-slice.js +7 -7
  272. package/dist/context/DashboardProvider/panel-editor-slice.js.map +1 -1
  273. package/dist/context/DashboardProvider/panel-group-editor-slice.js +2 -2
  274. package/dist/context/DashboardProvider/panel-group-editor-slice.js.map +1 -1
  275. package/dist/context/DashboardProvider/panel-group-slice.js +3 -3
  276. package/dist/context/DashboardProvider/panel-group-slice.js.map +1 -1
  277. package/dist/context/DashboardProvider/panel-slice.js.map +1 -1
  278. package/dist/context/DashboardProvider/save-changes-dialog-slice.js.map +1 -1
  279. package/dist/context/DatasourceStoreProvider.d.ts +15 -10
  280. package/dist/context/DatasourceStoreProvider.d.ts.map +1 -1
  281. package/dist/context/DatasourceStoreProvider.js +161 -42
  282. package/dist/context/DatasourceStoreProvider.js.map +1 -1
  283. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.d.ts +49 -13
  284. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.d.ts.map +1 -1
  285. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.js +178 -41
  286. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.js.map +1 -1
  287. package/dist/context/TemplateVariableProvider/hydrationUtils.d.ts +9 -2
  288. package/dist/context/TemplateVariableProvider/hydrationUtils.d.ts.map +1 -1
  289. package/dist/context/TemplateVariableProvider/hydrationUtils.js +67 -12
  290. package/dist/context/TemplateVariableProvider/hydrationUtils.js.map +1 -1
  291. package/dist/context/TemplateVariableProvider/index.js.map +1 -1
  292. package/dist/context/TemplateVariableProvider/query-params.js.map +1 -1
  293. package/dist/context/TemplateVariableProvider/utils.d.ts +27 -2
  294. package/dist/context/TemplateVariableProvider/utils.d.ts.map +1 -1
  295. package/dist/context/TemplateVariableProvider/utils.js +48 -6
  296. package/dist/context/TemplateVariableProvider/utils.js.map +1 -1
  297. package/dist/context/index.js.map +1 -1
  298. package/dist/context/useDashboard.d.ts.map +1 -1
  299. package/dist/context/useDashboard.js +5 -3
  300. package/dist/context/useDashboard.js.map +1 -1
  301. package/dist/index.js.map +1 -1
  302. package/dist/stories/decorators/WithDashboard.js.map +1 -1
  303. package/dist/stories/decorators/WithDatasourceStore.js.map +1 -1
  304. package/dist/stories/decorators/WithTemplateVariables.js.map +1 -1
  305. package/dist/stories/decorators/constants.js +2 -2
  306. package/dist/stories/decorators/constants.js.map +1 -1
  307. package/dist/stories/decorators/index.js.map +1 -1
  308. package/dist/test/dashboard-provider.js.map +1 -1
  309. package/dist/test/datasource-provider.d.ts.map +1 -1
  310. package/dist/test/datasource-provider.js +5 -7
  311. package/dist/test/datasource-provider.js.map +1 -1
  312. package/dist/test/index.js.map +1 -1
  313. package/dist/test/plugin-registry.js.map +1 -1
  314. package/dist/test/render.d.ts.map +1 -1
  315. package/dist/test/render.js +8 -3
  316. package/dist/test/render.js.map +1 -1
  317. package/dist/test/setup-tests.js.map +1 -1
  318. package/dist/test/testDashboard.js +10 -10
  319. package/dist/test/testDashboard.js.map +1 -1
  320. package/dist/utils/index.js.map +1 -1
  321. package/dist/utils/panelUtils.js.map +1 -1
  322. package/dist/utils/time.js.map +1 -1
  323. package/dist/validation/index.d.ts +2 -0
  324. package/dist/validation/index.d.ts.map +1 -0
  325. package/dist/validation/index.js +15 -0
  326. package/dist/validation/index.js.map +1 -0
  327. package/dist/validation/panel.d.ts +19 -0
  328. package/dist/validation/panel.d.ts.map +1 -0
  329. package/dist/validation/panel.js +21 -0
  330. package/dist/validation/panel.js.map +1 -0
  331. package/dist/views/ViewDashboard/DashboardApp.d.ts +1 -0
  332. package/dist/views/ViewDashboard/DashboardApp.d.ts.map +1 -1
  333. package/dist/views/ViewDashboard/DashboardApp.js +17 -5
  334. package/dist/views/ViewDashboard/DashboardApp.js.map +1 -1
  335. package/dist/views/ViewDashboard/ViewDashboard.d.ts +3 -1
  336. package/dist/views/ViewDashboard/ViewDashboard.d.ts.map +1 -1
  337. package/dist/views/ViewDashboard/ViewDashboard.js +54 -12
  338. package/dist/views/ViewDashboard/ViewDashboard.js.map +1 -1
  339. package/dist/views/ViewDashboard/index.js.map +1 -1
  340. package/dist/views/index.js.map +1 -1
  341. package/package.json +8 -7
@@ -19,37 +19,38 @@ import { AddGroupButton } from '../AddGroupButton';
19
19
  import { DownloadButton } from '../DownloadButton';
20
20
  import { TimeRangeControls } from '../TimeRangeControls';
21
21
  import { EditVariablesButton } from '../Variables';
22
+ import { EditDatasourcesButton } from '../Datasources';
22
23
  import { EditButton } from '../EditButton';
23
24
  import { EditJsonButton } from '../EditJsonButton';
24
25
  import { SaveDashboardButton } from '../SaveDashboardButton';
25
26
  import { DashboardStickyToolbar } from '../DashboardStickyToolbar';
26
27
  export const DashboardToolbar = (props)=>{
27
- const { dashboardName , dashboardTitleComponent , initialVariableIsSticky , isReadonly , onEditButtonClick , onCancelButtonClick , onSave , } = props;
28
+ const { dashboardName , dashboardTitleComponent , initialVariableIsSticky , isReadonly , onEditButtonClick , onCancelButtonClick , onSave } = props;
28
29
  const { isEditMode } = useEditMode();
29
30
  const isBiggerThanSm = useMediaQuery(useTheme().breakpoints.up('sm'));
30
- const isBiggerThanLg = useMediaQuery(useTheme().breakpoints.up('lg'));
31
+ const isBiggerThanMd = useMediaQuery(useTheme().breakpoints.up('md'));
31
32
  const dashboardTitle = dashboardTitleComponent ? dashboardTitleComponent : /*#__PURE__*/ _jsx(Typography, {
32
33
  variant: "h2",
33
34
  children: dashboardName
34
35
  });
35
36
  const testId = 'dashboard-toolbar';
36
37
  return /*#__PURE__*/ _jsx(_Fragment, {
37
- children: isEditMode ? /*#__PURE__*/ _jsxs(Stack, {
38
- spacing: 1,
38
+ children: /*#__PURE__*/ _jsxs(Stack, {
39
39
  "data-testid": testId,
40
40
  children: [
41
41
  /*#__PURE__*/ _jsxs(Box, {
42
- p: 2,
42
+ px: 2,
43
+ py: 1.5,
43
44
  display: "flex",
44
45
  sx: {
45
- backgroundColor: (theme)=>theme.palette.primary.main + '30'
46
+ backgroundColor: (theme)=>theme.palette.primary.main + (isEditMode ? '30' : '0')
46
47
  },
47
48
  children: [
48
49
  dashboardTitle,
49
- /*#__PURE__*/ _jsxs(Stack, {
50
+ isEditMode ? /*#__PURE__*/ _jsxs(Stack, {
50
51
  direction: "row",
51
- spacing: 1,
52
- marginLeft: "auto",
52
+ gap: 1,
53
+ ml: "auto",
53
54
  children: [
54
55
  isReadonly && /*#__PURE__*/ _jsx(Alert, {
55
56
  severity: 'warning',
@@ -59,6 +60,18 @@ export const DashboardToolbar = (props)=>{
59
60
  },
60
61
  children: "Dashboard managed via code only. Download JSON and commit changes to save."
61
62
  }),
63
+ /*#__PURE__*/ _jsxs(Stack, {
64
+ direction: "row",
65
+ spacing: 0.5,
66
+ ml: 1,
67
+ whiteSpace: "nowrap",
68
+ children: [
69
+ /*#__PURE__*/ _jsx(EditVariablesButton, {}),
70
+ /*#__PURE__*/ _jsx(EditDatasourcesButton, {}),
71
+ /*#__PURE__*/ _jsx(AddPanelButton, {}),
72
+ /*#__PURE__*/ _jsx(AddGroupButton, {})
73
+ ]
74
+ }),
62
75
  /*#__PURE__*/ _jsx(SaveDashboardButton, {
63
76
  onSave: onSave,
64
77
  isDisabled: isReadonly
@@ -69,6 +82,15 @@ export const DashboardToolbar = (props)=>{
69
82
  children: "Cancel"
70
83
  })
71
84
  ]
85
+ }) : /*#__PURE__*/ _jsx(_Fragment, {
86
+ children: isBiggerThanSm && /*#__PURE__*/ _jsx(Stack, {
87
+ direction: "row",
88
+ gap: 1,
89
+ ml: "auto",
90
+ children: /*#__PURE__*/ _jsx(EditButton, {
91
+ onClick: onEditButtonClick
92
+ })
93
+ })
72
94
  })
73
95
  ]
74
96
  }),
@@ -77,89 +99,44 @@ export const DashboardToolbar = (props)=>{
77
99
  display: 'flex',
78
100
  width: '100%',
79
101
  alignItems: 'start',
80
- padding: (theme)=>theme.spacing(1, 2)
102
+ padding: (theme)=>theme.spacing(1, 2, 0, 2),
103
+ flexDirection: isBiggerThanMd ? 'row' : 'column',
104
+ flexWrap: 'nowrap',
105
+ gap: 1
81
106
  },
82
107
  children: [
83
- /*#__PURE__*/ _jsx(ErrorBoundary, {
84
- FallbackComponent: ErrorAlert,
85
- children: /*#__PURE__*/ _jsx(DashboardStickyToolbar, {
86
- initialVariableIsSticky: initialVariableIsSticky,
87
- sx: {
88
- backgroundColor: ({ palette })=>palette.background.default
89
- }
108
+ /*#__PURE__*/ _jsx(Box, {
109
+ width: "100%",
110
+ children: /*#__PURE__*/ _jsx(ErrorBoundary, {
111
+ FallbackComponent: ErrorAlert,
112
+ children: /*#__PURE__*/ _jsx(DashboardStickyToolbar, {
113
+ initialVariableIsSticky: initialVariableIsSticky,
114
+ sx: {
115
+ backgroundColor: ({ palette })=>palette.background.default
116
+ }
117
+ })
90
118
  })
91
119
  }),
92
- /*#__PURE__*/ _jsxs(Stack, {
93
- ml: "auto",
120
+ /*#__PURE__*/ _jsx(Stack, {
94
121
  direction: "row",
95
- flexWrap: isBiggerThanLg ? 'nowrap' : 'wrap-reverse',
122
+ ml: "auto",
123
+ flexWrap: "wrap",
96
124
  justifyContent: "end",
97
- children: [
98
- /*#__PURE__*/ _jsxs(Stack, {
99
- direction: "row",
100
- spacing: 1,
101
- ml: 1,
102
- mb: 1,
103
- whiteSpace: "nowrap",
104
- children: [
105
- /*#__PURE__*/ _jsx(EditVariablesButton, {}),
106
- /*#__PURE__*/ _jsx(AddPanelButton, {}),
107
- /*#__PURE__*/ _jsx(AddGroupButton, {})
108
- ]
109
- }),
110
- /*#__PURE__*/ _jsxs(Stack, {
111
- direction: "row",
112
- spacing: 1,
113
- ml: 1,
114
- mb: 1,
115
- children: [
116
- /*#__PURE__*/ _jsx(TimeRangeControls, {}),
117
- /*#__PURE__*/ _jsx(DownloadButton, {}),
118
- /*#__PURE__*/ _jsx(EditJsonButton, {})
119
- ]
120
- })
121
- ]
122
- })
123
- ]
124
- })
125
- ]
126
- }) : /*#__PURE__*/ _jsxs(Stack, {
127
- spacing: 1,
128
- padding: 2,
129
- "data-testid": testId,
130
- children: [
131
- /*#__PURE__*/ _jsxs(Box, {
132
- sx: {
133
- display: 'flex',
134
- width: '100%'
135
- },
136
- children: [
137
- dashboardTitle,
138
- /*#__PURE__*/ _jsxs(Stack, {
139
- direction: "row",
140
- spacing: 1,
141
- marginLeft: "auto",
142
- children: [
143
- /*#__PURE__*/ _jsx(TimeRangeControls, {}),
144
- /*#__PURE__*/ _jsx(DownloadButton, {}),
145
- isBiggerThanSm && /*#__PURE__*/ _jsx(EditButton, {
146
- onClick: onEditButtonClick
147
- })
148
- ]
125
+ children: /*#__PURE__*/ _jsxs(Stack, {
126
+ direction: "row",
127
+ spacing: 1,
128
+ mt: 1,
129
+ ml: 1,
130
+ children: [
131
+ /*#__PURE__*/ _jsx(TimeRangeControls, {}),
132
+ /*#__PURE__*/ _jsx(DownloadButton, {}),
133
+ /*#__PURE__*/ _jsx(EditJsonButton, {
134
+ isReadonly: !isEditMode
135
+ })
136
+ ]
137
+ })
149
138
  })
150
139
  ]
151
- }),
152
- /*#__PURE__*/ _jsx(Box, {
153
- paddingY: 2,
154
- children: /*#__PURE__*/ _jsx(ErrorBoundary, {
155
- FallbackComponent: ErrorAlert,
156
- children: /*#__PURE__*/ _jsx(DashboardStickyToolbar, {
157
- initialVariableIsSticky: initialVariableIsSticky,
158
- sx: {
159
- backgroundColor: ({ palette })=>palette.background.default
160
- }
161
- })
162
- })
163
140
  })
164
141
  ]
165
142
  })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/DashboardToolbar/DashboardToolbar.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 { Typography, Stack, Button, Box, useTheme, useMediaQuery, Alert } from '@mui/material';\nimport { ErrorBoundary, ErrorAlert } from '@perses-dev/components';\nimport { OnSaveDashboard, useEditMode } from '../../context';\nimport { AddPanelButton } from '../AddPanelButton';\nimport { AddGroupButton } from '../AddGroupButton';\nimport { DownloadButton } from '../DownloadButton';\nimport { TimeRangeControls } from '../TimeRangeControls';\nimport { EditVariablesButton } from '../Variables';\nimport { EditButton } from '../EditButton';\nimport { EditJsonButton } from '../EditJsonButton';\nimport { SaveDashboardButton } from '../SaveDashboardButton';\nimport { DashboardStickyToolbar } from '../DashboardStickyToolbar';\n\nexport interface DashboardToolbarProps {\n dashboardName: string;\n dashboardTitleComponent?: JSX.Element;\n initialVariableIsSticky?: boolean;\n isReadonly: boolean;\n onEditButtonClick: () => void;\n onCancelButtonClick: () => void;\n onSave?: OnSaveDashboard;\n}\n\nexport const DashboardToolbar = (props: DashboardToolbarProps) => {\n const {\n dashboardName,\n dashboardTitleComponent,\n initialVariableIsSticky,\n isReadonly,\n onEditButtonClick,\n onCancelButtonClick,\n onSave,\n } = props;\n\n const { isEditMode } = useEditMode();\n\n const isBiggerThanSm = useMediaQuery(useTheme().breakpoints.up('sm'));\n const isBiggerThanLg = useMediaQuery(useTheme().breakpoints.up('lg'));\n\n const dashboardTitle = dashboardTitleComponent ? (\n dashboardTitleComponent\n ) : (\n <Typography variant=\"h2\">{dashboardName}</Typography>\n );\n\n const testId = 'dashboard-toolbar';\n\n return (\n <>\n {isEditMode ? (\n <Stack spacing={1} data-testid={testId}>\n <Box p={2} display=\"flex\" sx={{ backgroundColor: (theme) => theme.palette.primary.main + '30' }}>\n {dashboardTitle}\n <Stack direction=\"row\" spacing={1} marginLeft=\"auto\">\n {isReadonly && (\n <Alert severity={'warning'} sx={{ backgroundColor: 'transparent', padding: 0 }}>\n Dashboard managed via code only. Download JSON and commit changes to save.\n </Alert>\n )}\n <SaveDashboardButton onSave={onSave} isDisabled={isReadonly} />\n <Button variant=\"outlined\" onClick={onCancelButtonClick}>\n Cancel\n </Button>\n </Stack>\n </Box>\n <Box\n sx={{\n display: 'flex',\n width: '100%',\n alignItems: 'start',\n padding: (theme) => theme.spacing(1, 2),\n }}\n >\n <ErrorBoundary FallbackComponent={ErrorAlert}>\n <DashboardStickyToolbar\n initialVariableIsSticky={initialVariableIsSticky}\n sx={{\n backgroundColor: ({ palette }) => palette.background.default,\n }}\n />\n </ErrorBoundary>\n <Stack ml=\"auto\" direction=\"row\" flexWrap={isBiggerThanLg ? 'nowrap' : 'wrap-reverse'} justifyContent=\"end\">\n <Stack direction=\"row\" spacing={1} ml={1} mb={1} whiteSpace=\"nowrap\">\n <EditVariablesButton />\n <AddPanelButton />\n <AddGroupButton />\n </Stack>\n <Stack direction=\"row\" spacing={1} ml={1} mb={1}>\n <TimeRangeControls />\n <DownloadButton />\n <EditJsonButton />\n </Stack>\n </Stack>\n </Box>\n </Stack>\n ) : (\n <Stack spacing={1} padding={2} data-testid={testId}>\n <Box sx={{ display: 'flex', width: '100%' }}>\n {dashboardTitle}\n <Stack direction=\"row\" spacing={1} marginLeft=\"auto\">\n <TimeRangeControls />\n <DownloadButton />\n {isBiggerThanSm && <EditButton onClick={onEditButtonClick} />}\n </Stack>\n </Box>\n <Box paddingY={2}>\n <ErrorBoundary FallbackComponent={ErrorAlert}>\n <DashboardStickyToolbar\n initialVariableIsSticky={initialVariableIsSticky}\n sx={{\n backgroundColor: ({ palette }) => palette.background.default,\n }}\n />\n </ErrorBoundary>\n </Box>\n </Stack>\n )}\n </>\n );\n};\n"],"names":["Typography","Stack","Button","Box","useTheme","useMediaQuery","Alert","ErrorBoundary","ErrorAlert","useEditMode","AddPanelButton","AddGroupButton","DownloadButton","TimeRangeControls","EditVariablesButton","EditButton","EditJsonButton","SaveDashboardButton","DashboardStickyToolbar","DashboardToolbar","props","dashboardName","dashboardTitleComponent","initialVariableIsSticky","isReadonly","onEditButtonClick","onCancelButtonClick","onSave","isEditMode","isBiggerThanSm","breakpoints","up","isBiggerThanLg","dashboardTitle","variant","testId","spacing","data-testid","p","display","sx","backgroundColor","theme","palette","primary","main","direction","marginLeft","severity","padding","isDisabled","onClick","width","alignItems","FallbackComponent","background","default","ml","flexWrap","justifyContent","mb","whiteSpace","paddingY"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/DashboardToolbar/DashboardToolbar.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 { Typography, Stack, Button, Box, useTheme, useMediaQuery, Alert } from '@mui/material';\nimport { ErrorBoundary, ErrorAlert } from '@perses-dev/components';\nimport { OnSaveDashboard, useEditMode } from '../../context';\nimport { AddPanelButton } from '../AddPanelButton';\nimport { AddGroupButton } from '../AddGroupButton';\nimport { DownloadButton } from '../DownloadButton';\nimport { TimeRangeControls } from '../TimeRangeControls';\nimport { EditVariablesButton } from '../Variables';\nimport { EditDatasourcesButton } from '../Datasources';\nimport { EditButton } from '../EditButton';\nimport { EditJsonButton } from '../EditJsonButton';\nimport { SaveDashboardButton } from '../SaveDashboardButton';\nimport { DashboardStickyToolbar } from '../DashboardStickyToolbar';\n\nexport interface DashboardToolbarProps {\n dashboardName: string;\n dashboardTitleComponent?: JSX.Element;\n initialVariableIsSticky?: boolean;\n isReadonly: boolean;\n onEditButtonClick: () => void;\n onCancelButtonClick: () => void;\n onSave?: OnSaveDashboard;\n}\n\nexport const DashboardToolbar = (props: DashboardToolbarProps) => {\n const {\n dashboardName,\n dashboardTitleComponent,\n initialVariableIsSticky,\n isReadonly,\n onEditButtonClick,\n onCancelButtonClick,\n onSave,\n } = props;\n\n const { isEditMode } = useEditMode();\n\n const isBiggerThanSm = useMediaQuery(useTheme().breakpoints.up('sm'));\n const isBiggerThanMd = useMediaQuery(useTheme().breakpoints.up('md'));\n\n const dashboardTitle = dashboardTitleComponent ? (\n dashboardTitleComponent\n ) : (\n <Typography variant=\"h2\">{dashboardName}</Typography>\n );\n\n const testId = 'dashboard-toolbar';\n\n return (\n <>\n <Stack data-testid={testId}>\n <Box\n px={2}\n py={1.5}\n display=\"flex\"\n sx={{ backgroundColor: (theme) => theme.palette.primary.main + (isEditMode ? '30' : '0') }}\n >\n {dashboardTitle}\n {isEditMode ? (\n <Stack direction=\"row\" gap={1} ml=\"auto\">\n {isReadonly && (\n <Alert severity={'warning'} sx={{ backgroundColor: 'transparent', padding: 0 }}>\n Dashboard managed via code only. Download JSON and commit changes to save.\n </Alert>\n )}\n <Stack direction=\"row\" spacing={0.5} ml={1} whiteSpace=\"nowrap\">\n <EditVariablesButton />\n <EditDatasourcesButton />\n <AddPanelButton />\n <AddGroupButton />\n </Stack>\n <SaveDashboardButton onSave={onSave} isDisabled={isReadonly} />\n <Button variant=\"outlined\" onClick={onCancelButtonClick}>\n Cancel\n </Button>\n </Stack>\n ) : (\n <>\n {isBiggerThanSm && (\n <Stack direction=\"row\" gap={1} ml=\"auto\">\n <EditButton onClick={onEditButtonClick} />\n </Stack>\n )}\n </>\n )}\n </Box>\n <Box\n sx={{\n display: 'flex',\n width: '100%',\n alignItems: 'start',\n padding: (theme) => theme.spacing(1, 2, 0, 2),\n flexDirection: isBiggerThanMd ? 'row' : 'column',\n flexWrap: 'nowrap',\n gap: 1,\n }}\n >\n <Box width=\"100%\">\n <ErrorBoundary FallbackComponent={ErrorAlert}>\n <DashboardStickyToolbar\n initialVariableIsSticky={initialVariableIsSticky}\n sx={{\n backgroundColor: ({ palette }) => palette.background.default,\n }}\n />\n </ErrorBoundary>\n </Box>\n <Stack direction=\"row\" ml=\"auto\" flexWrap=\"wrap\" justifyContent=\"end\">\n <Stack direction=\"row\" spacing={1} mt={1} ml={1}>\n <TimeRangeControls />\n <DownloadButton />\n <EditJsonButton isReadonly={!isEditMode} />\n </Stack>\n </Stack>\n </Box>\n </Stack>\n </>\n );\n};\n"],"names":["Typography","Stack","Button","Box","useTheme","useMediaQuery","Alert","ErrorBoundary","ErrorAlert","useEditMode","AddPanelButton","AddGroupButton","DownloadButton","TimeRangeControls","EditVariablesButton","EditDatasourcesButton","EditButton","EditJsonButton","SaveDashboardButton","DashboardStickyToolbar","DashboardToolbar","props","dashboardName","dashboardTitleComponent","initialVariableIsSticky","isReadonly","onEditButtonClick","onCancelButtonClick","onSave","isEditMode","isBiggerThanSm","breakpoints","up","isBiggerThanMd","dashboardTitle","variant","testId","data-testid","px","py","display","sx","backgroundColor","theme","palette","primary","main","direction","gap","ml","severity","padding","spacing","whiteSpace","isDisabled","onClick","width","alignItems","flexDirection","flexWrap","FallbackComponent","background","default","justifyContent","mt"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/DashboardToolbar/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 './DashboardToolbar';\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,oBAAoB,CAAC"}
1
+ {"version":3,"sources":["../../../src/components/DashboardToolbar/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 './DashboardToolbar';\n"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,cAAc,qBAAqB"}
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { DatasourceSpec } from '@perses-dev/core';
3
+ export declare function DatasourceEditor(props: {
4
+ datasources: Record<string, DatasourceSpec>;
5
+ onChange: (datasources: Record<string, DatasourceSpec>) => void;
6
+ onCancel: () => void;
7
+ }): JSX.Element;
8
+ //# sourceMappingURL=DatasourceEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatasourceEditor.d.ts","sourceRoot":"","sources":["../../../src/components/Datasources/DatasourceEditor.tsx"],"names":[],"mappings":";AA6BA,OAAO,EAAU,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAM1D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5C,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,IAAI,CAAC;IAChE,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,eA0JA"}
@@ -0,0 +1,224 @@
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, Fragment as _Fragment } from "react/jsx-runtime";
14
+ import { Box, Button, IconButton, Stack, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Typography } from '@mui/material';
15
+ import AddIcon from 'mdi-material-ui/Plus';
16
+ import PencilIcon from 'mdi-material-ui/Pencil';
17
+ import TrashIcon from 'mdi-material-ui/TrashCan';
18
+ import { DatasourceEditorForm } from '@perses-dev/plugin-system';
19
+ import { useState } from 'react';
20
+ import { useImmer } from 'use-immer';
21
+ import { useDiscardChangesConfirmationDialog } from '../../context';
22
+ export function DatasourceEditor(props) {
23
+ const [datasources, setDatasources] = useImmer(props.datasources);
24
+ const [datasourceFormAction, setDatasourceFormAction] = useState('update');
25
+ const [datasourceEdit, setDatasourceEdit] = useState(null);
26
+ const defaultSpec = {
27
+ default: false,
28
+ plugin: {
29
+ // TODO: find a way to avoid assuming that the PrometheusDatasource plugin is installed
30
+ kind: 'PrometheusDatasource',
31
+ spec: {}
32
+ }
33
+ };
34
+ const { openDiscardChangesConfirmationDialog , closeDiscardChangesConfirmationDialog } = useDiscardChangesConfirmationDialog();
35
+ const handleCancel = ()=>{
36
+ if (JSON.stringify(props.datasources) !== JSON.stringify(datasources)) {
37
+ openDiscardChangesConfirmationDialog({
38
+ onDiscardChanges: ()=>{
39
+ closeDiscardChangesConfirmationDialog();
40
+ props.onCancel();
41
+ },
42
+ onCancel: ()=>{
43
+ closeDiscardChangesConfirmationDialog();
44
+ },
45
+ description: 'You have unapplied changes. Are you sure you want to discard these changes? Changes cannot be recovered.'
46
+ });
47
+ } else {
48
+ props.onCancel();
49
+ }
50
+ };
51
+ const removeDatasource = (name)=>{
52
+ setDatasources((draft)=>{
53
+ delete draft[name];
54
+ });
55
+ };
56
+ const addDatasource = ()=>{
57
+ setDatasourceFormAction('create');
58
+ setDatasourceEdit({
59
+ name: 'NewDatasource',
60
+ spec: defaultSpec
61
+ });
62
+ };
63
+ const editDatasource = (name)=>{
64
+ setDatasourceFormAction('update');
65
+ var _datasources_name;
66
+ setDatasourceEdit({
67
+ name: name,
68
+ spec: (_datasources_name = datasources[name]) !== null && _datasources_name !== void 0 ? _datasources_name : defaultSpec
69
+ });
70
+ };
71
+ return /*#__PURE__*/ _jsx(_Fragment, {
72
+ children: datasourceEdit ? /*#__PURE__*/ _jsx(DatasourceEditorForm, {
73
+ initialName: datasourceEdit.name,
74
+ initialSpec: datasourceEdit.spec,
75
+ initialAction: datasourceFormAction,
76
+ isDraft: true,
77
+ onSave: (name, spec)=>{
78
+ setDatasources((draft)=>{
79
+ delete draft[datasourceEdit.name]; // to tackle the case where datasource name has been changed
80
+ draft[name] = spec;
81
+ setDatasourceEdit(null);
82
+ });
83
+ },
84
+ onClose: ()=>{
85
+ setDatasourceEdit(null);
86
+ }
87
+ }) : /*#__PURE__*/ _jsxs(_Fragment, {
88
+ children: [
89
+ /*#__PURE__*/ _jsxs(Box, {
90
+ sx: {
91
+ display: 'flex',
92
+ alignItems: 'center',
93
+ padding: (theme)=>theme.spacing(1, 2),
94
+ borderBottom: (theme)=>`1px solid ${theme.palette.divider}`
95
+ },
96
+ children: [
97
+ /*#__PURE__*/ _jsx(Typography, {
98
+ variant: "h2",
99
+ children: "Edit Dashboard Datasources"
100
+ }),
101
+ /*#__PURE__*/ _jsxs(Stack, {
102
+ direction: "row",
103
+ spacing: 1,
104
+ marginLeft: "auto",
105
+ children: [
106
+ /*#__PURE__*/ _jsx(Button, {
107
+ disabled: props.datasources === datasources,
108
+ variant: "contained",
109
+ onClick: ()=>{
110
+ props.onChange(datasources);
111
+ },
112
+ children: "Apply"
113
+ }),
114
+ /*#__PURE__*/ _jsx(Button, {
115
+ color: "secondary",
116
+ variant: "outlined",
117
+ onClick: handleCancel,
118
+ children: "Cancel"
119
+ })
120
+ ]
121
+ })
122
+ ]
123
+ }),
124
+ /*#__PURE__*/ _jsx(Box, {
125
+ padding: 2,
126
+ sx: {
127
+ overflowY: 'scroll'
128
+ },
129
+ children: /*#__PURE__*/ _jsx(Stack, {
130
+ spacing: 2,
131
+ children: /*#__PURE__*/ _jsxs(Stack, {
132
+ spacing: 2,
133
+ children: [
134
+ /*#__PURE__*/ _jsx(TableContainer, {
135
+ children: /*#__PURE__*/ _jsxs(Table, {
136
+ sx: {
137
+ minWidth: 650
138
+ },
139
+ "aria-label": "table of datasources",
140
+ children: [
141
+ /*#__PURE__*/ _jsx(TableHead, {
142
+ children: /*#__PURE__*/ _jsxs(TableRow, {
143
+ children: [
144
+ /*#__PURE__*/ _jsx(TableCell, {
145
+ children: "Name"
146
+ }),
147
+ /*#__PURE__*/ _jsx(TableCell, {
148
+ children: "Type"
149
+ }),
150
+ /*#__PURE__*/ _jsx(TableCell, {
151
+ children: "Description"
152
+ }),
153
+ /*#__PURE__*/ _jsx(TableCell, {
154
+ align: "right",
155
+ children: "Actions"
156
+ })
157
+ ]
158
+ })
159
+ }),
160
+ /*#__PURE__*/ _jsx(TableBody, {
161
+ children: Object.entries(datasources).map(([name, spec])=>{
162
+ var _spec_display;
163
+ var _spec_display_description;
164
+ return /*#__PURE__*/ _jsxs(TableRow, {
165
+ children: [
166
+ /*#__PURE__*/ _jsx(TableCell, {
167
+ component: "th",
168
+ scope: "row",
169
+ sx: {
170
+ fontWeight: 'bold'
171
+ },
172
+ children: name
173
+ }),
174
+ /*#__PURE__*/ _jsx(TableCell, {
175
+ children: spec.plugin.kind
176
+ }),
177
+ /*#__PURE__*/ _jsx(TableCell, {
178
+ children: (_spec_display_description = (_spec_display = spec.display) === null || _spec_display === void 0 ? void 0 : _spec_display.description) !== null && _spec_display_description !== void 0 ? _spec_display_description : ''
179
+ }),
180
+ /*#__PURE__*/ _jsxs(TableCell, {
181
+ align: "right",
182
+ sx: {
183
+ whiteSpace: 'nowrap'
184
+ },
185
+ children: [
186
+ /*#__PURE__*/ _jsx(IconButton, {
187
+ onClick: ()=>editDatasource(name),
188
+ children: /*#__PURE__*/ _jsx(PencilIcon, {})
189
+ }),
190
+ /*#__PURE__*/ _jsx(IconButton, {
191
+ onClick: ()=>removeDatasource(name),
192
+ children: /*#__PURE__*/ _jsx(TrashIcon, {})
193
+ })
194
+ ]
195
+ })
196
+ ]
197
+ }, name);
198
+ })
199
+ })
200
+ ]
201
+ })
202
+ }),
203
+ /*#__PURE__*/ _jsx(Box, {
204
+ display: "flex",
205
+ children: /*#__PURE__*/ _jsx(Button, {
206
+ variant: "contained",
207
+ startIcon: /*#__PURE__*/ _jsx(AddIcon, {}),
208
+ sx: {
209
+ marginLeft: 'auto'
210
+ },
211
+ onClick: addDatasource,
212
+ children: "Add Datasource"
213
+ })
214
+ })
215
+ ]
216
+ })
217
+ })
218
+ })
219
+ ]
220
+ })
221
+ });
222
+ }
223
+
224
+ //# sourceMappingURL=DatasourceEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/Datasources/DatasourceEditor.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 {\n Box,\n Button,\n IconButton,\n Stack,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Typography,\n} from '@mui/material';\nimport AddIcon from 'mdi-material-ui/Plus';\nimport PencilIcon from 'mdi-material-ui/Pencil';\nimport TrashIcon from 'mdi-material-ui/TrashCan';\nimport { Action, DatasourceSpec } from '@perses-dev/core';\nimport { DatasourceEditorForm } from '@perses-dev/plugin-system';\nimport { useState } from 'react';\nimport { useImmer } from 'use-immer';\nimport { useDiscardChangesConfirmationDialog } from '../../context';\n\nexport function DatasourceEditor(props: {\n datasources: Record<string, DatasourceSpec>;\n onChange: (datasources: Record<string, DatasourceSpec>) => void;\n onCancel: () => void;\n}) {\n const [datasources, setDatasources] = useImmer(props.datasources);\n const [datasourceFormAction, setDatasourceFormAction] = useState<Action>('update');\n const [datasourceEdit, setDatasourceEdit] = useState<{ name: string; spec: DatasourceSpec } | null>(null);\n const defaultSpec: DatasourceSpec = {\n default: false,\n plugin: {\n // TODO: find a way to avoid assuming that the PrometheusDatasource plugin is installed\n kind: 'PrometheusDatasource',\n spec: {},\n },\n };\n\n const { openDiscardChangesConfirmationDialog, closeDiscardChangesConfirmationDialog } =\n useDiscardChangesConfirmationDialog();\n\n const handleCancel = () => {\n if (JSON.stringify(props.datasources) !== JSON.stringify(datasources)) {\n openDiscardChangesConfirmationDialog({\n onDiscardChanges: () => {\n closeDiscardChangesConfirmationDialog();\n props.onCancel();\n },\n onCancel: () => {\n closeDiscardChangesConfirmationDialog();\n },\n description:\n 'You have unapplied changes. Are you sure you want to discard these changes? Changes cannot be recovered.',\n });\n } else {\n props.onCancel();\n }\n };\n\n const removeDatasource = (name: string) => {\n setDatasources((draft) => {\n delete draft[name];\n });\n };\n\n const addDatasource = () => {\n setDatasourceFormAction('create');\n setDatasourceEdit({\n name: 'NewDatasource',\n spec: defaultSpec,\n });\n };\n\n const editDatasource = (name: string) => {\n setDatasourceFormAction('update');\n setDatasourceEdit({\n name: name,\n spec: datasources[name] ?? defaultSpec,\n });\n };\n\n return (\n <>\n {datasourceEdit ? (\n <DatasourceEditorForm\n initialName={datasourceEdit.name}\n initialSpec={datasourceEdit.spec}\n initialAction={datasourceFormAction}\n isDraft={true}\n onSave={(name: string, spec: DatasourceSpec) => {\n setDatasources((draft) => {\n delete draft[datasourceEdit.name]; // to tackle the case where datasource name has been changed\n draft[name] = spec;\n setDatasourceEdit(null);\n });\n }}\n onClose={() => {\n setDatasourceEdit(null);\n }}\n />\n ) : (\n <>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n padding: (theme) => theme.spacing(1, 2),\n borderBottom: (theme) => `1px solid ${theme.palette.divider}`,\n }}\n >\n <Typography variant=\"h2\">Edit Dashboard Datasources</Typography>\n <Stack direction=\"row\" spacing={1} marginLeft=\"auto\">\n <Button\n disabled={props.datasources === datasources}\n variant=\"contained\"\n onClick={() => {\n props.onChange(datasources);\n }}\n >\n Apply\n </Button>\n <Button color=\"secondary\" variant=\"outlined\" onClick={handleCancel}>\n Cancel\n </Button>\n </Stack>\n </Box>\n <Box padding={2} sx={{ overflowY: 'scroll' }}>\n <Stack spacing={2}>\n <Stack spacing={2}>\n <TableContainer>\n <Table sx={{ minWidth: 650 }} aria-label=\"table of datasources\">\n <TableHead>\n <TableRow>\n <TableCell>Name</TableCell>\n <TableCell>Type</TableCell>\n <TableCell>Description</TableCell>\n <TableCell align=\"right\">Actions</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {Object.entries(datasources).map(([name, spec]) => {\n return (\n <TableRow key={name}>\n <TableCell component=\"th\" scope=\"row\" sx={{ fontWeight: 'bold' }}>\n {name}\n </TableCell>\n <TableCell>{spec.plugin.kind}</TableCell>\n <TableCell>{spec.display?.description ?? ''}</TableCell>\n <TableCell align=\"right\" sx={{ whiteSpace: 'nowrap' }}>\n <IconButton onClick={() => editDatasource(name)}>\n <PencilIcon />\n </IconButton>\n <IconButton onClick={() => removeDatasource(name)}>\n <TrashIcon />\n </IconButton>\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </TableContainer>\n <Box display=\"flex\">\n <Button\n variant=\"contained\"\n startIcon={<AddIcon />}\n sx={{ marginLeft: 'auto' }}\n onClick={addDatasource}\n >\n Add Datasource\n </Button>\n </Box>\n </Stack>\n </Stack>\n </Box>\n </>\n )}\n </>\n );\n}\n"],"names":["Box","Button","IconButton","Stack","Table","TableBody","TableCell","TableContainer","TableHead","TableRow","Typography","AddIcon","PencilIcon","TrashIcon","DatasourceEditorForm","useState","useImmer","useDiscardChangesConfirmationDialog","DatasourceEditor","props","datasources","setDatasources","datasourceFormAction","setDatasourceFormAction","datasourceEdit","setDatasourceEdit","defaultSpec","default","plugin","kind","spec","openDiscardChangesConfirmationDialog","closeDiscardChangesConfirmationDialog","handleCancel","JSON","stringify","onDiscardChanges","onCancel","description","removeDatasource","name","draft","addDatasource","editDatasource","initialName","initialSpec","initialAction","isDraft","onSave","onClose","sx","display","alignItems","padding","theme","spacing","borderBottom","palette","divider","variant","direction","marginLeft","disabled","onClick","onChange","color","overflowY","minWidth","aria-label","align","Object","entries","map","component","scope","fontWeight","whiteSpace","startIcon"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ export declare function EditDatasourcesButton(): JSX.Element;
3
+ //# sourceMappingURL=EditDatasourcesButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditDatasourcesButton.d.ts","sourceRoot":"","sources":["../../../src/components/Datasources/EditDatasourcesButton.tsx"],"names":[],"mappings":";AAuBA,wBAAgB,qBAAqB,gBA2EpC"}