@perses-dev/dashboards 0.46.0 → 0.47.0-rc0

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 (158) hide show
  1. package/dist/cjs/components/DashboardStickyToolbar/DashboardStickyToolbar.js +2 -2
  2. package/dist/cjs/components/Datasources/DatasourceEditor.js +15 -13
  3. package/dist/cjs/components/EmptyDashboard/EmptyDashboard.js +1 -1
  4. package/dist/cjs/components/PanelDrawer/PanelEditorForm.js +30 -38
  5. package/dist/cjs/components/SaveChangesConfirmationDialog/SaveChangesConfirmationDialog.js +2 -2
  6. package/dist/cjs/components/SaveDashboardButton/SaveDashboardButton.js +2 -2
  7. package/dist/cjs/components/Variables/EditVariablesButton.js +4 -4
  8. package/dist/cjs/components/Variables/{TemplateVariable.js → Variable.js} +16 -19
  9. package/dist/cjs/components/Variables/VariableEditor.js +19 -17
  10. package/dist/cjs/components/Variables/VariableList.js +17 -17
  11. package/dist/cjs/components/Variables/index.js +2 -2
  12. package/dist/cjs/constants/styles.js +7 -7
  13. package/dist/cjs/context/DashboardProvider/panel-editor-slice.js +4 -4
  14. package/dist/cjs/context/{TemplateVariableProvider/TemplateVariableProvider.js → VariableProvider/VariableProvider.js} +51 -56
  15. package/dist/cjs/context/{TemplateVariableProvider → VariableProvider}/hydrationUtils.js +8 -8
  16. package/dist/cjs/{validation → context/VariableProvider}/index.js +2 -2
  17. package/dist/cjs/context/{TemplateVariableProvider → VariableProvider}/query-params.js +1 -1
  18. package/dist/cjs/context/{TemplateVariableProvider → VariableProvider}/utils.js +1 -1
  19. package/dist/cjs/context/index.js +2 -2
  20. package/dist/cjs/context/useDashboard.js +4 -4
  21. package/dist/cjs/stories/decorators/{WithTemplateVariables.js → WithVariables.js} +8 -8
  22. package/dist/cjs/stories/decorators/index.js +2 -2
  23. package/dist/cjs/views/ViewDashboard/ViewDashboard.js +3 -3
  24. package/dist/components/DashboardStickyToolbar/DashboardStickyToolbar.js +3 -3
  25. package/dist/components/DashboardStickyToolbar/DashboardStickyToolbar.js.map +1 -1
  26. package/dist/components/Datasources/DatasourceEditor.d.ts.map +1 -1
  27. package/dist/components/Datasources/DatasourceEditor.js +16 -14
  28. package/dist/components/Datasources/DatasourceEditor.js.map +1 -1
  29. package/dist/components/EmptyDashboard/EmptyDashboard.js +1 -1
  30. package/dist/components/EmptyDashboard/EmptyDashboard.js.map +1 -1
  31. package/dist/components/GridLayout/GridLayout.d.ts +1 -1
  32. package/dist/components/GridLayout/GridLayout.d.ts.map +1 -1
  33. package/dist/components/GridLayout/GridLayout.js.map +1 -1
  34. package/dist/components/GridLayout/GridTitle.d.ts +1 -1
  35. package/dist/components/GridLayout/GridTitle.d.ts.map +1 -1
  36. package/dist/components/GridLayout/GridTitle.js.map +1 -1
  37. package/dist/components/PanelDrawer/PanelDrawer.d.ts.map +1 -1
  38. package/dist/components/PanelDrawer/PanelDrawer.js.map +1 -1
  39. package/dist/components/PanelDrawer/PanelEditorForm.d.ts +1 -2
  40. package/dist/components/PanelDrawer/PanelEditorForm.d.ts.map +1 -1
  41. package/dist/components/PanelDrawer/PanelEditorForm.js +31 -39
  42. package/dist/components/PanelDrawer/PanelEditorForm.js.map +1 -1
  43. package/dist/components/PanelDrawer/PanelPreview.d.ts +1 -1
  44. package/dist/components/PanelDrawer/PanelPreview.d.ts.map +1 -1
  45. package/dist/components/PanelDrawer/PanelPreview.js.map +1 -1
  46. package/dist/components/SaveChangesConfirmationDialog/SaveChangesConfirmationDialog.js +3 -3
  47. package/dist/components/SaveChangesConfirmationDialog/SaveChangesConfirmationDialog.js.map +1 -1
  48. package/dist/components/SaveDashboardButton/SaveDashboardButton.js +3 -3
  49. package/dist/components/SaveDashboardButton/SaveDashboardButton.js.map +1 -1
  50. package/dist/components/Variables/EditVariablesButton.js +5 -5
  51. package/dist/components/Variables/EditVariablesButton.js.map +1 -1
  52. package/dist/components/Variables/{TemplateVariable.d.ts → Variable.d.ts} +3 -3
  53. package/dist/components/Variables/Variable.d.ts.map +1 -0
  54. package/dist/components/Variables/{TemplateVariable.js → Variable.js} +17 -20
  55. package/dist/components/Variables/Variable.js.map +1 -0
  56. package/dist/components/Variables/VariableEditor.d.ts.map +1 -1
  57. package/dist/components/Variables/VariableEditor.js +20 -18
  58. package/dist/components/Variables/VariableEditor.js.map +1 -1
  59. package/dist/components/Variables/VariableList.d.ts +2 -2
  60. package/dist/components/Variables/VariableList.d.ts.map +1 -1
  61. package/dist/components/Variables/VariableList.js +15 -15
  62. package/dist/components/Variables/VariableList.js.map +1 -1
  63. package/dist/components/Variables/index.d.ts +1 -1
  64. package/dist/components/Variables/index.d.ts.map +1 -1
  65. package/dist/components/Variables/index.js +2 -2
  66. package/dist/components/Variables/index.js.map +1 -1
  67. package/dist/constants/styles.d.ts +2 -2
  68. package/dist/constants/styles.d.ts.map +1 -1
  69. package/dist/constants/styles.js +3 -3
  70. package/dist/constants/styles.js.map +1 -1
  71. package/dist/context/DashboardProvider/dashboard-provider-api.d.ts +2 -1
  72. package/dist/context/DashboardProvider/dashboard-provider-api.d.ts.map +1 -1
  73. package/dist/context/DashboardProvider/dashboard-provider-api.js.map +1 -1
  74. package/dist/context/DashboardProvider/delete-panel-group-slice.d.ts +2 -1
  75. package/dist/context/DashboardProvider/delete-panel-group-slice.d.ts.map +1 -1
  76. package/dist/context/DashboardProvider/delete-panel-group-slice.js.map +1 -1
  77. package/dist/context/DashboardProvider/index.d.ts +1 -2
  78. package/dist/context/DashboardProvider/index.d.ts.map +1 -1
  79. package/dist/context/DashboardProvider/index.js.map +1 -1
  80. package/dist/context/DashboardProvider/panel-editor-slice.d.ts +2 -9
  81. package/dist/context/DashboardProvider/panel-editor-slice.d.ts.map +1 -1
  82. package/dist/context/DashboardProvider/panel-editor-slice.js +1 -1
  83. package/dist/context/DashboardProvider/panel-editor-slice.js.map +1 -1
  84. package/dist/context/DashboardProvider/panel-group-editor-slice.d.ts +2 -1
  85. package/dist/context/DashboardProvider/panel-group-editor-slice.d.ts.map +1 -1
  86. package/dist/context/DashboardProvider/panel-group-editor-slice.js.map +1 -1
  87. package/dist/context/DashboardProvider/panel-group-slice.d.ts +1 -2
  88. package/dist/context/DashboardProvider/panel-group-slice.d.ts.map +1 -1
  89. package/dist/context/DashboardProvider/panel-group-slice.js.map +1 -1
  90. package/dist/context/DashboardProvider/view-panel-slice.d.ts.map +1 -1
  91. package/dist/context/DashboardProvider/view-panel-slice.js.map +1 -1
  92. package/dist/context/DatasourceStoreProvider.d.ts +5 -5
  93. package/dist/context/DatasourceStoreProvider.d.ts.map +1 -1
  94. package/dist/context/DatasourceStoreProvider.js.map +1 -1
  95. package/dist/context/VariableProvider/VariableProvider.d.ts +126 -0
  96. package/dist/context/VariableProvider/VariableProvider.d.ts.map +1 -0
  97. package/dist/context/{TemplateVariableProvider/TemplateVariableProvider.js → VariableProvider/VariableProvider.js} +40 -41
  98. package/dist/context/VariableProvider/VariableProvider.js.map +1 -0
  99. package/dist/context/{TemplateVariableProvider → VariableProvider}/hydrationUtils.d.ts +1 -1
  100. package/dist/context/VariableProvider/hydrationUtils.d.ts.map +1 -0
  101. package/dist/context/{TemplateVariableProvider → VariableProvider}/hydrationUtils.js +6 -6
  102. package/dist/context/VariableProvider/hydrationUtils.js.map +1 -0
  103. package/dist/context/VariableProvider/index.d.ts +2 -0
  104. package/dist/context/VariableProvider/index.d.ts.map +1 -0
  105. package/dist/{validation → context/VariableProvider}/index.js +2 -2
  106. package/dist/context/VariableProvider/index.js.map +1 -0
  107. package/dist/context/VariableProvider/query-params.d.ts.map +1 -0
  108. package/dist/context/{TemplateVariableProvider → VariableProvider}/query-params.js +1 -1
  109. package/dist/context/VariableProvider/query-params.js.map +1 -0
  110. package/dist/context/VariableProvider/utils.d.ts.map +1 -0
  111. package/dist/context/{TemplateVariableProvider → VariableProvider}/utils.js +1 -1
  112. package/dist/context/VariableProvider/utils.js.map +1 -0
  113. package/dist/context/index.d.ts +1 -1
  114. package/dist/context/index.d.ts.map +1 -1
  115. package/dist/context/index.js +2 -2
  116. package/dist/context/index.js.map +1 -1
  117. package/dist/context/useDashboard.d.ts.map +1 -1
  118. package/dist/context/useDashboard.js +4 -4
  119. package/dist/context/useDashboard.js.map +1 -1
  120. package/dist/stories/decorators/{WithTemplateVariables.js → WithVariables.js} +8 -8
  121. package/dist/stories/decorators/WithVariables.js.map +1 -0
  122. package/dist/stories/decorators/index.js +2 -2
  123. package/dist/stories/decorators/index.js.map +1 -1
  124. package/dist/test/datasource-provider.d.ts +2 -2
  125. package/dist/test/datasource-provider.d.ts.map +1 -1
  126. package/dist/test/datasource-provider.js.map +1 -1
  127. package/dist/views/ViewDashboard/ViewDashboard.d.ts +2 -2
  128. package/dist/views/ViewDashboard/ViewDashboard.d.ts.map +1 -1
  129. package/dist/views/ViewDashboard/ViewDashboard.js +4 -4
  130. package/dist/views/ViewDashboard/ViewDashboard.js.map +1 -1
  131. package/package.json +7 -7
  132. package/dist/cjs/context/TemplateVariableProvider/index.js +0 -30
  133. package/dist/cjs/validation/panel.js +0 -39
  134. package/dist/components/Variables/TemplateVariable.d.ts.map +0 -1
  135. package/dist/components/Variables/TemplateVariable.js.map +0 -1
  136. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.d.ts +0 -77
  137. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.d.ts.map +0 -1
  138. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.js.map +0 -1
  139. package/dist/context/TemplateVariableProvider/hydrationUtils.d.ts.map +0 -1
  140. package/dist/context/TemplateVariableProvider/hydrationUtils.js.map +0 -1
  141. package/dist/context/TemplateVariableProvider/index.d.ts +0 -2
  142. package/dist/context/TemplateVariableProvider/index.d.ts.map +0 -1
  143. package/dist/context/TemplateVariableProvider/index.js +0 -15
  144. package/dist/context/TemplateVariableProvider/index.js.map +0 -1
  145. package/dist/context/TemplateVariableProvider/query-params.d.ts.map +0 -1
  146. package/dist/context/TemplateVariableProvider/query-params.js.map +0 -1
  147. package/dist/context/TemplateVariableProvider/utils.d.ts.map +0 -1
  148. package/dist/context/TemplateVariableProvider/utils.js.map +0 -1
  149. package/dist/stories/decorators/WithTemplateVariables.js.map +0 -1
  150. package/dist/validation/index.d.ts +0 -2
  151. package/dist/validation/index.d.ts.map +0 -1
  152. package/dist/validation/index.js.map +0 -1
  153. package/dist/validation/panel.d.ts +0 -67
  154. package/dist/validation/panel.d.ts.map +0 -1
  155. package/dist/validation/panel.js +0 -31
  156. package/dist/validation/panel.js.map +0 -1
  157. /package/dist/context/{TemplateVariableProvider → VariableProvider}/query-params.d.ts +0 -0
  158. /package/dist/context/{TemplateVariableProvider → VariableProvider}/utils.d.ts +0 -0
@@ -1,4 +1,4 @@
1
- // Copyright 2023 The Perses Authors
1
+ // Copyright 2024 The Perses Authors
2
2
  // Licensed under the Apache License, Version 2.0 (the "License");
3
3
  // you may not use this file except in compliance with the License.
4
4
  // You may obtain a copy of the License at
@@ -21,32 +21,29 @@ function _export(target, all) {
21
21
  });
22
22
  }
23
23
  _export(exports, {
24
- TemplateVariableProvider: function() {
25
- return TemplateVariableProvider;
24
+ VariableProvider: function() {
25
+ return VariableProvider;
26
26
  },
27
- TemplateVariableProviderWithQueryParams: function() {
28
- return TemplateVariableProviderWithQueryParams;
27
+ VariableProviderWithQueryParams: function() {
28
+ return VariableProviderWithQueryParams;
29
29
  },
30
- useTemplateExternalVariableDefinitions: function() {
31
- return useTemplateExternalVariableDefinitions;
30
+ useExternalVariableDefinitions: function() {
31
+ return useExternalVariableDefinitions;
32
32
  },
33
- useTemplateVariable: function() {
34
- return useTemplateVariable;
33
+ useVariableDefinitionActions: function() {
34
+ return useVariableDefinitionActions;
35
35
  },
36
- useTemplateVariableActions: function() {
37
- return useTemplateVariableActions;
36
+ useVariableDefinitionAndState: function() {
37
+ return useVariableDefinitionAndState;
38
38
  },
39
- useTemplateVariableDefinitions: function() {
40
- return useTemplateVariableDefinitions;
39
+ useVariableDefinitionStates: function() {
40
+ return useVariableDefinitionStates;
41
41
  },
42
- useTemplateVariableStore: function() {
43
- return useTemplateVariableStore;
42
+ useVariableDefinitionStoreCtx: function() {
43
+ return useVariableDefinitionStoreCtx;
44
44
  },
45
- useTemplateVariableStoreCtx: function() {
46
- return useTemplateVariableStoreCtx;
47
- },
48
- useTemplateVariableValues: function() {
49
- return useTemplateVariableValues;
45
+ useVariableDefinitions: function() {
46
+ return useVariableDefinitions;
50
47
  }
51
48
  });
52
49
  const _jsxruntime = require("react/jsx-runtime");
@@ -66,18 +63,20 @@ function _interop_require_default(obj) {
66
63
  default: obj
67
64
  };
68
65
  }
69
- const TemplateVariableStoreContext = /*#__PURE__*/ (0, _react.createContext)(undefined);
70
- function useTemplateVariableStoreCtx() {
71
- const context = (0, _react.useContext)(TemplateVariableStoreContext);
66
+ /**
67
+ * Context object for {@link VariableDefinitionStore}.
68
+ */ const VariableDefinitionStoreContext = /*#__PURE__*/ (0, _react.createContext)(undefined);
69
+ function useVariableDefinitionStoreCtx() {
70
+ const context = (0, _react.useContext)(VariableDefinitionStoreContext);
72
71
  if (!context) {
73
- throw new Error('TemplateVariableStoreContext not initialized');
72
+ throw new Error('VariableStoreContext not initialized');
74
73
  }
75
74
  return context;
76
75
  }
77
- function useTemplateVariableValues(variableNames) {
78
- const store = useTemplateVariableStoreCtx();
76
+ function useVariableDefinitionStates(variableNames) {
77
+ const store = useVariableDefinitionStoreCtx();
79
78
  return (0, _traditional.useStoreWithEqualityFn)(store, (s)=>{
80
- const vars = {};
79
+ const varStates = {};
81
80
  // Collect values of local variables, from the variable state
82
81
  const names = variableNames !== null && variableNames !== void 0 ? variableNames : s.variableDefinitions.map((value)=>value.spec.name);
83
82
  names.forEach((name)=>{
@@ -87,7 +86,7 @@ function useTemplateVariableValues(variableNames) {
87
86
  if (!varState || varState.overridden) {
88
87
  return;
89
88
  }
90
- vars[name] = varState;
89
+ varStates[name] = varState;
91
90
  });
92
91
  // Collect values of external variables, from the variable state
93
92
  s.externalVariableDefinitions.forEach((d)=>{
@@ -101,16 +100,16 @@ function useTemplateVariableValues(variableNames) {
101
100
  if (!varState || varState.overridden) {
102
101
  return;
103
102
  }
104
- vars[name] = varState;
103
+ varStates[name] = varState;
105
104
  });
106
105
  });
107
- return vars;
106
+ return varStates;
108
107
  }, (left, right)=>{
109
108
  return JSON.stringify(left) === JSON.stringify(right);
110
109
  });
111
110
  }
112
- function useTemplateVariable(name, source) {
113
- const store = useTemplateVariableStoreCtx();
111
+ function useVariableDefinitionAndState(name, source) {
112
+ const store = useVariableDefinitionStoreCtx();
114
113
  return (0, _zustand.useStore)(store, (s)=>{
115
114
  var _s_externalVariableDefinitions_find;
116
115
  const state = s.variableState.get({
@@ -125,8 +124,8 @@ function useTemplateVariable(name, source) {
125
124
  };
126
125
  });
127
126
  }
128
- function useTemplateVariableActions() {
129
- const store = useTemplateVariableStoreCtx();
127
+ function useVariableDefinitionActions() {
128
+ const store = useVariableDefinitionStoreCtx();
130
129
  return (0, _zustand.useStore)(store, (s)=>{
131
130
  return {
132
131
  setVariableValue: s.setVariableValue,
@@ -138,22 +137,18 @@ function useTemplateVariableActions() {
138
137
  };
139
138
  });
140
139
  }
141
- function useTemplateVariableDefinitions() {
142
- const store = useTemplateVariableStoreCtx();
140
+ function useVariableDefinitions() {
141
+ const store = useVariableDefinitionStoreCtx();
143
142
  return (0, _zustand.useStore)(store, (s)=>s.variableDefinitions);
144
143
  }
145
- function useTemplateExternalVariableDefinitions() {
146
- const store = useTemplateVariableStoreCtx();
144
+ function useExternalVariableDefinitions() {
145
+ const store = useVariableDefinitionStoreCtx();
147
146
  return (0, _zustand.useStore)(store, (s)=>s.externalVariableDefinitions);
148
147
  }
149
- function useTemplateVariableStore() {
150
- const store = useTemplateVariableStoreCtx();
151
- return (0, _zustand.useStore)(store);
152
- }
153
148
  function PluginProvider({ children, builtinVariables }) {
154
- const originalValues = useTemplateVariableValues();
155
- const definitions = useTemplateVariableDefinitions();
156
- const externalDefinitions = useTemplateExternalVariableDefinitions();
149
+ const originalValues = useVariableDefinitionStates();
150
+ const definitions = useVariableDefinitions();
151
+ const externalDefinitions = useExternalVariableDefinitions();
157
152
  const { absoluteTimeRange } = (0, _pluginsystem.useTimeRange)();
158
153
  const values = (0, _react.useMemo)(()=>{
159
154
  const contextValues = {};
@@ -261,7 +256,7 @@ function PluginProvider({ children, builtinVariables }) {
261
256
  value: {
262
257
  variables: allBuiltinVariables
263
258
  },
264
- children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_pluginsystem.TemplateVariableContext.Provider, {
259
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_pluginsystem.VariableContext.Provider, {
265
260
  value: {
266
261
  state: values
267
262
  },
@@ -269,16 +264,16 @@ function PluginProvider({ children, builtinVariables }) {
269
264
  })
270
265
  });
271
266
  }
272
- function createTemplateVariableSrvStore({ initialVariableDefinitions = [], externalVariableDefinitions = [], queryParams }) {
267
+ function createVariableDefinitionStore({ initialVariableDefinitions = [], externalVariableDefinitions = [], queryParams }) {
273
268
  const initialParams = (0, _queryparams.getInitalValuesFromQueryParameters)(queryParams ? queryParams[0] : {});
274
269
  const store = (0, _zustand.createStore)()((0, _middleware.devtools)((0, _immer.immer)((set, get)=>({
275
- variableState: (0, _hydrationUtils.hydrateTemplateVariableStates)(initialVariableDefinitions, initialParams, externalVariableDefinitions),
270
+ variableState: (0, _hydrationUtils.hydrateVariableDefinitionStates)(initialVariableDefinitions, initialParams, externalVariableDefinitions),
276
271
  variableDefinitions: initialVariableDefinitions,
277
272
  externalVariableDefinitions: externalVariableDefinitions,
278
273
  setVariableDefinitions (definitions) {
279
274
  set((state)=>{
280
275
  state.variableDefinitions = definitions;
281
- state.variableState = (0, _hydrationUtils.hydrateTemplateVariableStates)(definitions, initialParams, externalVariableDefinitions);
276
+ state.variableState = (0, _hydrationUtils.hydrateVariableDefinitionStates)(definitions, initialParams, externalVariableDefinitions);
282
277
  }, false, '[Variables] setVariableDefinitions' // Used for action name in Redux devtools
283
278
  );
284
279
  },
@@ -376,28 +371,28 @@ function createTemplateVariableSrvStore({ initialVariableDefinitions = [], exter
376
371
  }))));
377
372
  return store;
378
373
  }
379
- function TemplateVariableProvider({ children, initialVariableDefinitions = [], externalVariableDefinitions = [], builtinVariables = [] }) {
380
- const [store] = (0, _react.useState)(createTemplateVariableSrvStore({
374
+ function VariableProvider({ children, initialVariableDefinitions = [], externalVariableDefinitions = [], builtinVariableDefinitions = [] }) {
375
+ const [store] = (0, _react.useState)(createVariableDefinitionStore({
381
376
  initialVariableDefinitions,
382
377
  externalVariableDefinitions
383
378
  }));
384
- return /*#__PURE__*/ (0, _jsxruntime.jsx)(TemplateVariableStoreContext.Provider, {
379
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(VariableDefinitionStoreContext.Provider, {
385
380
  value: store,
386
381
  children: /*#__PURE__*/ (0, _jsxruntime.jsx)(PluginProvider, {
387
- builtinVariables: builtinVariables,
382
+ builtinVariables: builtinVariableDefinitions,
388
383
  children: children
389
384
  })
390
385
  });
391
386
  }
392
- function TemplateVariableProviderWithQueryParams({ children, initialVariableDefinitions = [], externalVariableDefinitions = [], builtinVariables = [] }) {
387
+ function VariableProviderWithQueryParams({ children, initialVariableDefinitions = [], externalVariableDefinitions = [], builtinVariableDefinitions: builtinVariables = [] }) {
393
388
  const allVariableDefs = (0, _utils.mergeVariableDefinitions)(initialVariableDefinitions, externalVariableDefinitions);
394
389
  const queryParams = (0, _queryparams.useVariableQueryParams)(allVariableDefs);
395
- const [store] = (0, _react.useState)(createTemplateVariableSrvStore({
390
+ const [store] = (0, _react.useState)(createVariableDefinitionStore({
396
391
  initialVariableDefinitions,
397
392
  externalVariableDefinitions,
398
393
  queryParams
399
394
  }));
400
- return /*#__PURE__*/ (0, _jsxruntime.jsx)(TemplateVariableStoreContext.Provider, {
395
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(VariableDefinitionStoreContext.Provider, {
401
396
  value: store,
402
397
  children: /*#__PURE__*/ (0, _jsxruntime.jsx)(PluginProvider, {
403
398
  builtinVariables: builtinVariables,
@@ -1,4 +1,4 @@
1
- // Copyright 2023 The Perses Authors
1
+ // Copyright 2024 The Perses Authors
2
2
  // Licensed under the Apache License, Version 2.0 (the "License");
3
3
  // you may not use this file except in compliance with the License.
4
4
  // You may obtain a copy of the License at
@@ -14,16 +14,16 @@
14
14
  Object.defineProperty(exports, "__esModule", {
15
15
  value: true
16
16
  });
17
- Object.defineProperty(exports, "hydrateTemplateVariableStates", {
17
+ Object.defineProperty(exports, "hydrateVariableDefinitionStates", {
18
18
  enumerable: true,
19
19
  get: function() {
20
- return hydrateTemplateVariableStates;
20
+ return hydrateVariableDefinitionStates;
21
21
  }
22
22
  });
23
23
  const _core = require("@perses-dev/core");
24
24
  const _pluginsystem = require("@perses-dev/plugin-system");
25
- // TODO: move to TemplateVariableProvider/utils.ts
26
- function hydrateTemplateVariableState(variable, initialValue) {
25
+ // TODO: move to VariableProvider/utils.ts
26
+ function hydrateVariableState(variable, initialValue) {
27
27
  const varState = {
28
28
  value: null,
29
29
  loading: false,
@@ -63,7 +63,7 @@ function hydrateTemplateVariableState(variable, initialValue) {
63
63
  }
64
64
  return varState;
65
65
  }
66
- function hydrateTemplateVariableStates(localDefinitions, initialValues, externalDefinitions = []) {
66
+ function hydrateVariableDefinitionStates(localDefinitions, initialValues, externalDefinitions = []) {
67
67
  const state = new _pluginsystem.VariableStoreStateMap();
68
68
  // Collect the names used by local definitions
69
69
  let overridingNames = {};
@@ -83,7 +83,7 @@ function hydrateTemplateVariableStates(localDefinitions, initialValues, external
83
83
  source,
84
84
  name
85
85
  }, {
86
- ...hydrateTemplateVariableState(v, initialValue),
86
+ ...hydrateVariableState(v, initialValue),
87
87
  overridden: !!overridingNames[name]
88
88
  });
89
89
  overridingNames[name] = true;
@@ -99,7 +99,7 @@ function hydrateTemplateVariableStates(localDefinitions, initialValues, external
99
99
  state.set({
100
100
  name
101
101
  }, {
102
- ...hydrateTemplateVariableState(v, initialValue),
102
+ ...hydrateVariableState(v, initialValue),
103
103
  overriding: !!overriddenNames[name]
104
104
  });
105
105
  });
@@ -1,4 +1,4 @@
1
- // Copyright 2023 The Perses Authors
1
+ // Copyright 2024 The Perses Authors
2
2
  // Licensed under the Apache License, Version 2.0 (the "License");
3
3
  // you may not use this file except in compliance with the License.
4
4
  // You may obtain a copy of the License at
@@ -14,7 +14,7 @@
14
14
  Object.defineProperty(exports, "__esModule", {
15
15
  value: true
16
16
  });
17
- _export_star(require("./panel"), exports);
17
+ _export_star(require("./VariableProvider"), exports);
18
18
  function _export_star(from, to) {
19
19
  Object.keys(from).forEach(function(k) {
20
20
  if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
@@ -1,4 +1,4 @@
1
- // Copyright 2023 The Perses Authors
1
+ // Copyright 2024 The Perses Authors
2
2
  // Licensed under the Apache License, Version 2.0 (the "License");
3
3
  // you may not use this file except in compliance with the License.
4
4
  // You may obtain a copy of the License at
@@ -1,4 +1,4 @@
1
- // Copyright 2023 The Perses Authors
1
+ // Copyright 2024 The Perses Authors
2
2
  // Licensed under the Apache License, Version 2.0 (the "License");
3
3
  // you may not use this file except in compliance with the License.
4
4
  // You may obtain a copy of the License at
@@ -1,4 +1,4 @@
1
- // Copyright 2023 The Perses Authors
1
+ // Copyright 2024 The Perses Authors
2
2
  // Licensed under the Apache License, Version 2.0 (the "License");
3
3
  // you may not use this file except in compliance with the License.
4
4
  // You may obtain a copy of the License at
@@ -16,7 +16,7 @@ Object.defineProperty(exports, "__esModule", {
16
16
  });
17
17
  _export_star(require("./DashboardProvider"), exports);
18
18
  _export_star(require("./DatasourceStoreProvider"), exports);
19
- _export_star(require("./TemplateVariableProvider"), exports);
19
+ _export_star(require("./VariableProvider"), exports);
20
20
  _export_star(require("./useDashboard"), exports);
21
21
  function _export_star(from, to) {
22
22
  Object.keys(from).forEach(function(k) {
@@ -1,4 +1,4 @@
1
- // Copyright 2023 The Perses Authors
1
+ // Copyright 2024 The Perses Authors
2
2
  // Licensed under the Apache License, Version 2.0 (the "License");
3
3
  // you may not use this file except in compliance with the License.
4
4
  // You may obtain a copy of the License at
@@ -22,7 +22,7 @@ Object.defineProperty(exports, "useDashboard", {
22
22
  });
23
23
  const _core = require("@perses-dev/core");
24
24
  const _DashboardProvider = require("./DashboardProvider");
25
- const _TemplateVariableProvider = require("./TemplateVariableProvider");
25
+ const _VariableProvider = require("./VariableProvider");
26
26
  function useDashboard() {
27
27
  const { panels, panelGroups, panelGroupOrder, setDashboard: setDashboardResource, kind, metadata, display, duration, refreshInterval, datasources, ttl } = (0, _DashboardProvider.useDashboardStore)(({ panels, panelGroups, panelGroupOrder, setDashboard, kind, metadata, display, duration, refreshInterval, datasources, ttl })=>({
28
28
  panels,
@@ -37,8 +37,8 @@ function useDashboard() {
37
37
  datasources,
38
38
  ttl
39
39
  }));
40
- const { setVariableDefinitions } = (0, _TemplateVariableProvider.useTemplateVariableActions)();
41
- const variables = (0, _TemplateVariableProvider.useTemplateVariableDefinitions)();
40
+ const { setVariableDefinitions } = (0, _VariableProvider.useVariableDefinitionActions)();
41
+ const variables = (0, _VariableProvider.useVariableDefinitions)();
42
42
  const layouts = convertPanelGroupsToLayouts(panelGroups, panelGroupOrder);
43
43
  const dashboard = kind === 'Dashboard' ? {
44
44
  kind,
@@ -1,4 +1,4 @@
1
- // Copyright 2023 The Perses Authors
1
+ // Copyright 2024 The Perses Authors
2
2
  // Licensed under the Apache License, Version 2.0 (the "License");
3
3
  // you may not use this file except in compliance with the License.
4
4
  // You may obtain a copy of the License at
@@ -14,23 +14,23 @@
14
14
  Object.defineProperty(exports, "__esModule", {
15
15
  value: true
16
16
  });
17
- Object.defineProperty(exports, "WithTemplateVariables", {
17
+ Object.defineProperty(exports, "WithVariables", {
18
18
  enumerable: true,
19
19
  get: function() {
20
- return WithTemplateVariables;
20
+ return WithVariables;
21
21
  }
22
22
  });
23
23
  const _jsxruntime = require("react/jsx-runtime");
24
24
  const _dashboards = require("@perses-dev/dashboards");
25
25
  // Type guard because storybook types parameters as `any`
26
- function isWithTemplateVariableParameter(parameter) {
26
+ function isWithVariableParameter(parameter) {
27
27
  return !!parameter && typeof parameter === 'object' && 'props' in parameter;
28
28
  }
29
- const WithTemplateVariables = (Story, context)=>{
30
- const initParameter = context.parameters.withTemplateVariables;
31
- const parameter = isWithTemplateVariableParameter(initParameter) ? initParameter : undefined;
29
+ const WithVariables = (Story, context)=>{
30
+ const initParameter = context.parameters.withVariables;
31
+ const parameter = isWithVariableParameter(initParameter) ? initParameter : undefined;
32
32
  const props = parameter === null || parameter === void 0 ? void 0 : parameter.props;
33
- return /*#__PURE__*/ (0, _jsxruntime.jsx)(_dashboards.TemplateVariableProvider, {
33
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_dashboards.VariableProvider, {
34
34
  ...props,
35
35
  children: /*#__PURE__*/ (0, _jsxruntime.jsx)(Story, {})
36
36
  });
@@ -1,4 +1,4 @@
1
- // Copyright 2023 The Perses Authors
1
+ // Copyright 2024 The Perses Authors
2
2
  // Licensed under the Apache License, Version 2.0 (the "License");
3
3
  // you may not use this file except in compliance with the License.
4
4
  // You may obtain a copy of the License at
@@ -17,7 +17,7 @@ Object.defineProperty(exports, "__esModule", {
17
17
  _export_star(require("./constants"), exports);
18
18
  _export_star(require("./WithDashboard"), exports);
19
19
  _export_star(require("./WithDatasourceStore"), exports);
20
- _export_star(require("./WithTemplateVariables"), exports);
20
+ _export_star(require("./WithVariables"), exports);
21
21
  function _export_star(from, to) {
22
22
  Object.keys(from).forEach(function(k) {
23
23
  if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
@@ -1,4 +1,4 @@
1
- // Copyright 2023 The Perses Authors
1
+ // Copyright 2024 The Perses Authors
2
2
  // Licensed under the Apache License, Version 2.0 (the "License");
3
3
  // you may not use this file except in compliance with the License.
4
4
  // You may obtain a copy of the License at
@@ -88,10 +88,10 @@ function ViewDashboard(props) {
88
88
  children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_pluginsystem.TimeRangeProviderWithQueryParams, {
89
89
  initialTimeRange: initialTimeRange,
90
90
  initialRefreshInterval: initialRefreshInterval,
91
- children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_context.TemplateVariableProviderWithQueryParams, {
91
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_context.VariableProviderWithQueryParams, {
92
92
  initialVariableDefinitions: spec.variables,
93
93
  externalVariableDefinitions: externalVariableDefinitions,
94
- builtinVariables: builtinVariables,
94
+ builtinVariableDefinitions: builtinVariables,
95
95
  children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Box, {
96
96
  sx: (0, _components.combineSx)({
97
97
  display: 'flex',
@@ -1,4 +1,4 @@
1
- // Copyright 2023 The Perses Authors
1
+ // Copyright 2024 The Perses Authors
2
2
  // Licensed under the Apache License, Version 2.0 (the "License");
3
3
  // you may not use this file except in compliance with the License.
4
4
  // You may obtain a copy of the License at
@@ -16,7 +16,7 @@ import { AppBar, Box, IconButton, Stack, useMediaQuery, useScrollTrigger, useThe
16
16
  import PinOutline from 'mdi-material-ui/PinOutline';
17
17
  import PinOffOutline from 'mdi-material-ui/PinOffOutline';
18
18
  import { TimeRangeControls } from '@perses-dev/plugin-system';
19
- import { TemplateVariableList } from '../Variables';
19
+ import { VariableList } from '../Variables';
20
20
  export function DashboardStickyToolbar(props) {
21
21
  const [isPin, setIsPin] = useState(props.initialVariableIsSticky);
22
22
  const scrollTrigger = useScrollTrigger({
@@ -69,7 +69,7 @@ export function DashboardStickyToolbar(props) {
69
69
  },
70
70
  gap: 1,
71
71
  children: [
72
- /*#__PURE__*/ _jsx(TemplateVariableList, {}),
72
+ /*#__PURE__*/ _jsx(VariableList, {}),
73
73
  props.initialVariableIsSticky && /*#__PURE__*/ _jsx(IconButton, {
74
74
  style: {
75
75
  width: 'fit-content',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/DashboardStickyToolbar/DashboardStickyToolbar.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 {\n AppBar,\n Box,\n IconButton,\n Stack,\n SxProps,\n Theme,\n useMediaQuery,\n useScrollTrigger,\n useTheme,\n} from '@mui/material';\nimport PinOutline from 'mdi-material-ui/PinOutline';\nimport PinOffOutline from 'mdi-material-ui/PinOffOutline';\nimport { TimeRangeControls } from '@perses-dev/plugin-system';\nimport { TemplateVariableList } from '../Variables';\n\ninterface DashboardStickyToolbarProps {\n initialVariableIsSticky?: boolean;\n sx?: SxProps<Theme>;\n}\n\nexport function DashboardStickyToolbar(props: DashboardStickyToolbarProps) {\n const [isPin, setIsPin] = useState(props.initialVariableIsSticky);\n\n const scrollTrigger = useScrollTrigger({ disableHysteresis: true });\n const isSticky = scrollTrigger && props.initialVariableIsSticky && isPin;\n\n const isBiggerThanMd = useMediaQuery(useTheme().breakpoints.up('md'));\n\n return (\n // marginBottom={-1} counteracts the marginBottom={1} on every variable input.\n // The margin on the inputs is for spacing between inputs, but is not meant to add space to bottom of the container.\n <Box marginBottom={-1} data-testid=\"variable-list\">\n <AppBar\n color=\"inherit\"\n position={isSticky ? 'fixed' : 'static'}\n elevation={isSticky ? 4 : 0}\n sx={{ backgroundColor: 'inherit', ...props.sx }}\n >\n <Box\n display=\"flex\"\n justifyContent=\"space-between\"\n sx={{\n flexDirection: isBiggerThanMd ? 'row' : 'column',\n }}\n >\n <Box\n display=\"flex\"\n flexWrap={!isSticky && isBiggerThanMd ? 'wrap' : 'nowrap'}\n maxWidth={isSticky || !isBiggerThanMd ? '100vw' : '100%'}\n maxHeight=\"150px\" // Limit the vertical space used to ~3 rows of variables\n pt={1}\n pl={isSticky ? 1 : 0}\n mt={isSticky && isBiggerThanMd ? 0.5 : 0}\n ml={isSticky && isBiggerThanMd ? 0.5 : 0}\n sx={{\n overflowX: !isSticky && isBiggerThanMd ? 'hidden' : 'auto',\n // Firefox:\n scrollbarWidth: 'thin',\n // Safari and Chrome:\n '&::-webkit-scrollbar': {\n height: '8px',\n backgroundColor: (theme) => theme.palette.grey['300'],\n },\n '&::-webkit-scrollbar-thumb': {\n background: (theme) => theme.palette.grey['600'],\n },\n }}\n gap={1}\n >\n <TemplateVariableList />\n {props.initialVariableIsSticky && (\n <IconButton style={{ width: 'fit-content', height: 'fit-content' }} onClick={() => setIsPin(!isPin)}>\n {isPin ? <PinOutline /> : <PinOffOutline />}\n </IconButton>\n )}\n </Box>\n {isSticky && (\n <Stack\n m={isBiggerThanMd ? 1.5 : 1}\n mt={isBiggerThanMd ? 1.5 : 0}\n ml={isBiggerThanMd ? 1.5 : 'auto'}\n direction=\"row\"\n justifyContent=\"end\"\n >\n <TimeRangeControls></TimeRangeControls>\n </Stack>\n )}\n </Box>\n </AppBar>\n </Box>\n );\n}\n"],"names":["useState","AppBar","Box","IconButton","Stack","useMediaQuery","useScrollTrigger","useTheme","PinOutline","PinOffOutline","TimeRangeControls","TemplateVariableList","DashboardStickyToolbar","props","isPin","setIsPin","initialVariableIsSticky","scrollTrigger","disableHysteresis","isSticky","isBiggerThanMd","breakpoints","up","marginBottom","data-testid","color","position","elevation","sx","backgroundColor","display","justifyContent","flexDirection","flexWrap","maxWidth","maxHeight","pt","pl","mt","ml","overflowX","scrollbarWidth","height","theme","palette","grey","background","gap","style","width","onClick","m","direction"],"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,QAAQ,QAAQ,QAAQ;AACjC,SACEC,MAAM,EACNC,GAAG,EACHC,UAAU,EACVC,KAAK,EAGLC,aAAa,EACbC,gBAAgB,EAChBC,QAAQ,QACH,gBAAgB;AACvB,OAAOC,gBAAgB,6BAA6B;AACpD,OAAOC,mBAAmB,gCAAgC;AAC1D,SAASC,iBAAiB,QAAQ,4BAA4B;AAC9D,SAASC,oBAAoB,QAAQ,eAAe;AAOpD,OAAO,SAASC,uBAAuBC,KAAkC;IACvE,MAAM,CAACC,OAAOC,SAAS,GAAGf,SAASa,MAAMG,uBAAuB;IAEhE,MAAMC,gBAAgBX,iBAAiB;QAAEY,mBAAmB;IAAK;IACjE,MAAMC,WAAWF,iBAAiBJ,MAAMG,uBAAuB,IAAIF;IAEnE,MAAMM,iBAAiBf,cAAcE,WAAWc,WAAW,CAACC,EAAE,CAAC;IAE/D,OACE,8EAA8E;IAC9E,oHAAoH;kBACpH,KAACpB;QAAIqB,cAAc,CAAC;QAAGC,eAAY;kBACjC,cAAA,KAACvB;YACCwB,OAAM;YACNC,UAAUP,WAAW,UAAU;YAC/BQ,WAAWR,WAAW,IAAI;YAC1BS,IAAI;gBAAEC,iBAAiB;gBAAW,GAAGhB,MAAMe,EAAE;YAAC;sBAE9C,cAAA,MAAC1B;gBACC4B,SAAQ;gBACRC,gBAAe;gBACfH,IAAI;oBACFI,eAAeZ,iBAAiB,QAAQ;gBAC1C;;kCAEA,MAAClB;wBACC4B,SAAQ;wBACRG,UAAU,CAACd,YAAYC,iBAAiB,SAAS;wBACjDc,UAAUf,YAAY,CAACC,iBAAiB,UAAU;wBAClDe,WAAU,QAAQ,wDAAwD;;wBAC1EC,IAAI;wBACJC,IAAIlB,WAAW,IAAI;wBACnBmB,IAAInB,YAAYC,iBAAiB,MAAM;wBACvCmB,IAAIpB,YAAYC,iBAAiB,MAAM;wBACvCQ,IAAI;4BACFY,WAAW,CAACrB,YAAYC,iBAAiB,WAAW;4BACpD,WAAW;4BACXqB,gBAAgB;4BAChB,qBAAqB;4BACrB,wBAAwB;gCACtBC,QAAQ;gCACRb,iBAAiB,CAACc,QAAUA,MAAMC,OAAO,CAACC,IAAI,CAAC,MAAM;4BACvD;4BACA,8BAA8B;gCAC5BC,YAAY,CAACH,QAAUA,MAAMC,OAAO,CAACC,IAAI,CAAC,MAAM;4BAClD;wBACF;wBACAE,KAAK;;0CAEL,KAACpC;4BACAE,MAAMG,uBAAuB,kBAC5B,KAACb;gCAAW6C,OAAO;oCAAEC,OAAO;oCAAeP,QAAQ;gCAAc;gCAAGQ,SAAS,IAAMnC,SAAS,CAACD;0CAC1FA,sBAAQ,KAACN,gCAAgB,KAACC;;;;oBAIhCU,0BACC,KAACf;wBACC+C,GAAG/B,iBAAiB,MAAM;wBAC1BkB,IAAIlB,iBAAiB,MAAM;wBAC3BmB,IAAInB,iBAAiB,MAAM;wBAC3BgC,WAAU;wBACVrB,gBAAe;kCAEf,cAAA,KAACrB;;;;;;AAOf"}
1
+ {"version":3,"sources":["../../../src/components/DashboardStickyToolbar/DashboardStickyToolbar.tsx"],"sourcesContent":["// Copyright 2024 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { useState } from 'react';\nimport {\n AppBar,\n Box,\n IconButton,\n Stack,\n SxProps,\n Theme,\n useMediaQuery,\n useScrollTrigger,\n useTheme,\n} from '@mui/material';\nimport PinOutline from 'mdi-material-ui/PinOutline';\nimport PinOffOutline from 'mdi-material-ui/PinOffOutline';\nimport { TimeRangeControls } from '@perses-dev/plugin-system';\nimport { VariableList } from '../Variables';\n\ninterface DashboardStickyToolbarProps {\n initialVariableIsSticky?: boolean;\n sx?: SxProps<Theme>;\n}\n\nexport function DashboardStickyToolbar(props: DashboardStickyToolbarProps) {\n const [isPin, setIsPin] = useState(props.initialVariableIsSticky);\n\n const scrollTrigger = useScrollTrigger({ disableHysteresis: true });\n const isSticky = scrollTrigger && props.initialVariableIsSticky && isPin;\n\n const isBiggerThanMd = useMediaQuery(useTheme().breakpoints.up('md'));\n\n return (\n // marginBottom={-1} counteracts the marginBottom={1} on every variable input.\n // The margin on the inputs is for spacing between inputs, but is not meant to add space to bottom of the container.\n <Box marginBottom={-1} data-testid=\"variable-list\">\n <AppBar\n color=\"inherit\"\n position={isSticky ? 'fixed' : 'static'}\n elevation={isSticky ? 4 : 0}\n sx={{ backgroundColor: 'inherit', ...props.sx }}\n >\n <Box\n display=\"flex\"\n justifyContent=\"space-between\"\n sx={{\n flexDirection: isBiggerThanMd ? 'row' : 'column',\n }}\n >\n <Box\n display=\"flex\"\n flexWrap={!isSticky && isBiggerThanMd ? 'wrap' : 'nowrap'}\n maxWidth={isSticky || !isBiggerThanMd ? '100vw' : '100%'}\n maxHeight=\"150px\" // Limit the vertical space used to ~3 rows of variables\n pt={1}\n pl={isSticky ? 1 : 0}\n mt={isSticky && isBiggerThanMd ? 0.5 : 0}\n ml={isSticky && isBiggerThanMd ? 0.5 : 0}\n sx={{\n overflowX: !isSticky && isBiggerThanMd ? 'hidden' : 'auto',\n // Firefox:\n scrollbarWidth: 'thin',\n // Safari and Chrome:\n '&::-webkit-scrollbar': {\n height: '8px',\n backgroundColor: (theme) => theme.palette.grey['300'],\n },\n '&::-webkit-scrollbar-thumb': {\n background: (theme) => theme.palette.grey['600'],\n },\n }}\n gap={1}\n >\n <VariableList />\n {props.initialVariableIsSticky && (\n <IconButton style={{ width: 'fit-content', height: 'fit-content' }} onClick={() => setIsPin(!isPin)}>\n {isPin ? <PinOutline /> : <PinOffOutline />}\n </IconButton>\n )}\n </Box>\n {isSticky && (\n <Stack\n m={isBiggerThanMd ? 1.5 : 1}\n mt={isBiggerThanMd ? 1.5 : 0}\n ml={isBiggerThanMd ? 1.5 : 'auto'}\n direction=\"row\"\n justifyContent=\"end\"\n >\n <TimeRangeControls />\n </Stack>\n )}\n </Box>\n </AppBar>\n </Box>\n );\n}\n"],"names":["useState","AppBar","Box","IconButton","Stack","useMediaQuery","useScrollTrigger","useTheme","PinOutline","PinOffOutline","TimeRangeControls","VariableList","DashboardStickyToolbar","props","isPin","setIsPin","initialVariableIsSticky","scrollTrigger","disableHysteresis","isSticky","isBiggerThanMd","breakpoints","up","marginBottom","data-testid","color","position","elevation","sx","backgroundColor","display","justifyContent","flexDirection","flexWrap","maxWidth","maxHeight","pt","pl","mt","ml","overflowX","scrollbarWidth","height","theme","palette","grey","background","gap","style","width","onClick","m","direction"],"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,QAAQ,QAAQ,QAAQ;AACjC,SACEC,MAAM,EACNC,GAAG,EACHC,UAAU,EACVC,KAAK,EAGLC,aAAa,EACbC,gBAAgB,EAChBC,QAAQ,QACH,gBAAgB;AACvB,OAAOC,gBAAgB,6BAA6B;AACpD,OAAOC,mBAAmB,gCAAgC;AAC1D,SAASC,iBAAiB,QAAQ,4BAA4B;AAC9D,SAASC,YAAY,QAAQ,eAAe;AAO5C,OAAO,SAASC,uBAAuBC,KAAkC;IACvE,MAAM,CAACC,OAAOC,SAAS,GAAGf,SAASa,MAAMG,uBAAuB;IAEhE,MAAMC,gBAAgBX,iBAAiB;QAAEY,mBAAmB;IAAK;IACjE,MAAMC,WAAWF,iBAAiBJ,MAAMG,uBAAuB,IAAIF;IAEnE,MAAMM,iBAAiBf,cAAcE,WAAWc,WAAW,CAACC,EAAE,CAAC;IAE/D,OACE,8EAA8E;IAC9E,oHAAoH;kBACpH,KAACpB;QAAIqB,cAAc,CAAC;QAAGC,eAAY;kBACjC,cAAA,KAACvB;YACCwB,OAAM;YACNC,UAAUP,WAAW,UAAU;YAC/BQ,WAAWR,WAAW,IAAI;YAC1BS,IAAI;gBAAEC,iBAAiB;gBAAW,GAAGhB,MAAMe,EAAE;YAAC;sBAE9C,cAAA,MAAC1B;gBACC4B,SAAQ;gBACRC,gBAAe;gBACfH,IAAI;oBACFI,eAAeZ,iBAAiB,QAAQ;gBAC1C;;kCAEA,MAAClB;wBACC4B,SAAQ;wBACRG,UAAU,CAACd,YAAYC,iBAAiB,SAAS;wBACjDc,UAAUf,YAAY,CAACC,iBAAiB,UAAU;wBAClDe,WAAU,QAAQ,wDAAwD;;wBAC1EC,IAAI;wBACJC,IAAIlB,WAAW,IAAI;wBACnBmB,IAAInB,YAAYC,iBAAiB,MAAM;wBACvCmB,IAAIpB,YAAYC,iBAAiB,MAAM;wBACvCQ,IAAI;4BACFY,WAAW,CAACrB,YAAYC,iBAAiB,WAAW;4BACpD,WAAW;4BACXqB,gBAAgB;4BAChB,qBAAqB;4BACrB,wBAAwB;gCACtBC,QAAQ;gCACRb,iBAAiB,CAACc,QAAUA,MAAMC,OAAO,CAACC,IAAI,CAAC,MAAM;4BACvD;4BACA,8BAA8B;gCAC5BC,YAAY,CAACH,QAAUA,MAAMC,OAAO,CAACC,IAAI,CAAC,MAAM;4BAClD;wBACF;wBACAE,KAAK;;0CAEL,KAACpC;4BACAE,MAAMG,uBAAuB,kBAC5B,KAACb;gCAAW6C,OAAO;oCAAEC,OAAO;oCAAeP,QAAQ;gCAAc;gCAAGQ,SAAS,IAAMnC,SAAS,CAACD;0CAC1FA,sBAAQ,KAACN,gCAAgB,KAACC;;;;oBAIhCU,0BACC,KAACf;wBACC+C,GAAG/B,iBAAiB,MAAM;wBAC1BkB,IAAIlB,iBAAiB,MAAM;wBAC3BmB,IAAInB,iBAAiB,MAAM;wBAC3BgC,WAAU;wBACVrB,gBAAe;kCAEf,cAAA,KAACrB;;;;;;AAOf"}
@@ -1 +1 @@
1
- {"version":3,"file":"DatasourceEditor.d.ts","sourceRoot":"","sources":["../../../src/components/Datasources/DatasourceEditor.tsx"],"names":[],"mappings":"AA6BA,OAAO,EAAgC,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMhF,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,2CAyJA"}
1
+ {"version":3,"file":"DatasourceEditor.d.ts","sourceRoot":"","sources":["../../../src/components/Datasources/DatasourceEditor.tsx"],"names":[],"mappings":"AA6BA,OAAO,EAAgC,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMhF,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,2CA2JA"}
@@ -15,7 +15,7 @@ import { Box, Button, IconButton, Stack, Table, TableBody, TableCell, TableConta
15
15
  import AddIcon from 'mdi-material-ui/Plus';
16
16
  import PencilIcon from 'mdi-material-ui/Pencil';
17
17
  import TrashIcon from 'mdi-material-ui/TrashCan';
18
- import { DatasourceEditorForm } from '@perses-dev/plugin-system';
18
+ import { DatasourceEditorForm, ValidationProvider } from '@perses-dev/plugin-system';
19
19
  import { useState } from 'react';
20
20
  import { useImmer } from 'use-immer';
21
21
  import { useDiscardChangesConfirmationDialog } from '../../context';
@@ -69,20 +69,22 @@ export function DatasourceEditor(props) {
69
69
  });
70
70
  };
71
71
  return /*#__PURE__*/ _jsx(_Fragment, {
72
- children: datasourceEdit ? /*#__PURE__*/ _jsx(DatasourceEditorForm, {
73
- initialDatasourceDefinition: datasourceEdit,
74
- initialAction: datasourceFormAction,
75
- isDraft: true,
76
- onSave: (name, spec)=>{
77
- setDatasources((draft)=>{
78
- delete draft[datasourceEdit.name]; // to tackle the case where datasource name has been changed
79
- draft[name] = spec;
72
+ children: datasourceEdit ? /*#__PURE__*/ _jsx(ValidationProvider, {
73
+ children: /*#__PURE__*/ _jsx(DatasourceEditorForm, {
74
+ initialDatasourceDefinition: datasourceEdit,
75
+ initialAction: datasourceFormAction,
76
+ isDraft: true,
77
+ onSave: (def)=>{
78
+ setDatasources((draft)=>{
79
+ delete draft[datasourceEdit.name]; // to tackle the case where datasource name has been changed
80
+ draft[def.name] = def.spec;
81
+ setDatasourceEdit(null);
82
+ });
83
+ },
84
+ onClose: ()=>{
80
85
  setDatasourceEdit(null);
81
- });
82
- },
83
- onClose: ()=>{
84
- setDatasourceEdit(null);
85
- }
86
+ }
87
+ })
86
88
  }) : /*#__PURE__*/ _jsxs(_Fragment, {
87
89
  children: [
88
90
  /*#__PURE__*/ _jsxs(Box, {
@@ -1 +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, DatasourceDefinition, 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<DatasourceDefinition | 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 initialDatasourceDefinition={datasourceEdit}\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","initialDatasourceDefinition","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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"}
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, DatasourceDefinition, DatasourceSpec } from '@perses-dev/core';\nimport { DatasourceEditorForm, ValidationProvider } 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<DatasourceDefinition | 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 <ValidationProvider>\n <DatasourceEditorForm\n initialDatasourceDefinition={datasourceEdit}\n initialAction={datasourceFormAction}\n isDraft={true}\n onSave={(def: DatasourceDefinition) => {\n setDatasources((draft) => {\n delete draft[datasourceEdit.name]; // to tackle the case where datasource name has been changed\n draft[def.name] = def.spec;\n setDatasourceEdit(null);\n });\n }}\n onClose={() => {\n setDatasourceEdit(null);\n }}\n />\n </ValidationProvider>\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","ValidationProvider","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","initialDatasourceDefinition","initialAction","isDraft","onSave","def","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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"}
@@ -22,7 +22,7 @@ const DEFAULT_DESCRIPTION = {
22
22
  view: 'This dashboard is currently empty. Get started by clicking the edit button.'
23
23
  };
24
24
  // Constants from specifics in designs to make the default messaging look good.
25
- const CONTAINER_WIDTH = '450px';
25
+ const CONTAINER_WIDTH = '500px';
26
26
  const PRIMARY_CONTENT_WIDTH = '289px';
27
27
  const COMMON_BUTTON_PROPS = {
28
28
  variant: 'outlined',