@perses-dev/dashboards 0.15.0 → 0.17.0

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 (86) hide show
  1. package/dist/cjs/components/DashboardToolbar/DashboardToolbar.js +8 -12
  2. package/dist/cjs/components/DownloadButton/DownloadButton.js +109 -0
  3. package/dist/cjs/{utils/component-ids.js → components/DownloadButton/index.js} +11 -14
  4. package/dist/cjs/components/GridLayout/GridLayout.js +13 -2
  5. package/dist/cjs/components/GridLayout/GridTitle.js +11 -17
  6. package/dist/cjs/components/Panel/Panel.js +4 -2
  7. package/dist/cjs/components/Panel/PanelHeader.js +54 -50
  8. package/dist/cjs/components/PanelDrawer/PanelDrawer.js +1 -3
  9. package/dist/cjs/components/PanelDrawer/PanelDrawer.test.js +23 -0
  10. package/dist/cjs/components/TimeRangeControls/TimeRangeControls.test.js +3 -1
  11. package/dist/cjs/components/Variables/Variable.js +7 -46
  12. package/dist/cjs/components/Variables/VariableEditor.js +157 -126
  13. package/dist/cjs/components/Variables/VariableEditorForm/VariableEditorForm.js +353 -161
  14. package/dist/cjs/components/Variables/VariableList.js +15 -8
  15. package/dist/cjs/components/Variables/variable-model.js +74 -0
  16. package/dist/cjs/components/index.js +1 -0
  17. package/dist/cjs/context/DashboardProvider/panel-editor-slice.js +40 -15
  18. package/dist/cjs/context/DashboardProvider/panel-group-editor-slice.js +5 -9
  19. package/dist/cjs/context/DashboardProvider/panel-group-slice.js +16 -1
  20. package/dist/cjs/views/ViewDashboard/tests/panelGroups.test.js +15 -21
  21. package/dist/components/DashboardToolbar/DashboardToolbar.d.ts.map +1 -1
  22. package/dist/components/DashboardToolbar/DashboardToolbar.js +8 -12
  23. package/dist/components/DashboardToolbar/DashboardToolbar.js.map +1 -1
  24. package/dist/components/DownloadButton/DownloadButton.d.ts +3 -0
  25. package/dist/components/DownloadButton/DownloadButton.d.ts.map +1 -0
  26. package/dist/components/DownloadButton/DownloadButton.js +60 -0
  27. package/dist/components/DownloadButton/DownloadButton.js.map +1 -0
  28. package/dist/components/DownloadButton/index.d.ts +2 -0
  29. package/dist/components/DownloadButton/index.d.ts.map +1 -0
  30. package/dist/{utils/component-ids.js → components/DownloadButton/index.js} +2 -14
  31. package/dist/components/DownloadButton/index.js.map +1 -0
  32. package/dist/components/GridLayout/GridLayout.d.ts.map +1 -1
  33. package/dist/components/GridLayout/GridLayout.js +13 -2
  34. package/dist/components/GridLayout/GridLayout.js.map +1 -1
  35. package/dist/components/GridLayout/GridTitle.d.ts.map +1 -1
  36. package/dist/components/GridLayout/GridTitle.js +11 -17
  37. package/dist/components/GridLayout/GridTitle.js.map +1 -1
  38. package/dist/components/Panel/Panel.d.ts.map +1 -1
  39. package/dist/components/Panel/Panel.js +4 -2
  40. package/dist/components/Panel/Panel.js.map +1 -1
  41. package/dist/components/Panel/PanelHeader.d.ts.map +1 -1
  42. package/dist/components/Panel/PanelHeader.js +54 -50
  43. package/dist/components/Panel/PanelHeader.js.map +1 -1
  44. package/dist/components/PanelDrawer/PanelDrawer.js +1 -3
  45. package/dist/components/PanelDrawer/PanelDrawer.js.map +1 -1
  46. package/dist/components/PanelDrawer/PanelDrawer.test.js +23 -0
  47. package/dist/components/PanelDrawer/PanelDrawer.test.js.map +1 -1
  48. package/dist/components/TimeRangeControls/TimeRangeControls.test.js +4 -2
  49. package/dist/components/TimeRangeControls/TimeRangeControls.test.js.map +1 -1
  50. package/dist/components/Variables/Variable.d.ts.map +1 -1
  51. package/dist/components/Variables/Variable.js +8 -47
  52. package/dist/components/Variables/Variable.js.map +1 -1
  53. package/dist/components/Variables/VariableEditor.d.ts.map +1 -1
  54. package/dist/components/Variables/VariableEditor.js +159 -128
  55. package/dist/components/Variables/VariableEditor.js.map +1 -1
  56. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts.map +1 -1
  57. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js +315 -162
  58. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js.map +1 -1
  59. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js.map +1 -1
  60. package/dist/components/Variables/VariableList.d.ts.map +1 -1
  61. package/dist/components/Variables/VariableList.js +15 -8
  62. package/dist/components/Variables/VariableList.js.map +1 -1
  63. package/dist/components/Variables/variable-model.d.ts +8 -0
  64. package/dist/components/Variables/variable-model.d.ts.map +1 -0
  65. package/dist/components/Variables/variable-model.js +64 -0
  66. package/dist/components/Variables/variable-model.js.map +1 -0
  67. package/dist/components/index.d.ts +1 -0
  68. package/dist/components/index.d.ts.map +1 -1
  69. package/dist/components/index.js +1 -0
  70. package/dist/components/index.js.map +1 -1
  71. package/dist/context/DashboardProvider/panel-editor-slice.d.ts.map +1 -1
  72. package/dist/context/DashboardProvider/panel-editor-slice.js +40 -15
  73. package/dist/context/DashboardProvider/panel-editor-slice.js.map +1 -1
  74. package/dist/context/DashboardProvider/panel-group-editor-slice.d.ts.map +1 -1
  75. package/dist/context/DashboardProvider/panel-group-editor-slice.js +5 -9
  76. package/dist/context/DashboardProvider/panel-group-editor-slice.js.map +1 -1
  77. package/dist/context/DashboardProvider/panel-group-slice.d.ts +9 -0
  78. package/dist/context/DashboardProvider/panel-group-slice.d.ts.map +1 -1
  79. package/dist/context/DashboardProvider/panel-group-slice.js +17 -0
  80. package/dist/context/DashboardProvider/panel-group-slice.js.map +1 -1
  81. package/dist/views/ViewDashboard/tests/panelGroups.test.js +15 -21
  82. package/dist/views/ViewDashboard/tests/panelGroups.test.js.map +1 -1
  83. package/package.json +4 -4
  84. package/dist/utils/component-ids.d.ts +0 -8
  85. package/dist/utils/component-ids.d.ts.map +0 -1
  86. package/dist/utils/component-ids.js.map +0 -1
@@ -19,221 +19,413 @@ Object.defineProperty(exports, "VariableEditForm", {
19
19
  get: ()=>VariableEditForm
20
20
  });
21
21
  const _jsxRuntime = require("react/jsx-runtime");
22
- const _react = /*#__PURE__*/ _interopRequireDefault(require("react"));
22
+ const _react = /*#__PURE__*/ _interopRequireWildcard(require("react"));
23
23
  const _material = require("@mui/material");
24
24
  const _useImmer = require("use-immer");
25
25
  const _pluginSystem = require("@perses-dev/plugin-system");
26
+ const _components = require("@perses-dev/components");
27
+ const _refresh = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/Refresh"));
28
+ const _variableModel = require("../variable-model");
26
29
  const _variableEditorFormModel = require("./variable-editor-form-model");
27
30
  function _interopRequireDefault(obj) {
28
31
  return obj && obj.__esModule ? obj : {
29
32
  default: obj
30
33
  };
31
34
  }
35
+ function _getRequireWildcardCache(nodeInterop) {
36
+ if (typeof WeakMap !== "function") return null;
37
+ var cacheBabelInterop = new WeakMap();
38
+ var cacheNodeInterop = new WeakMap();
39
+ return (_getRequireWildcardCache = function(nodeInterop) {
40
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
41
+ })(nodeInterop);
42
+ }
43
+ function _interopRequireWildcard(obj, nodeInterop) {
44
+ if (!nodeInterop && obj && obj.__esModule) {
45
+ return obj;
46
+ }
47
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
48
+ return {
49
+ default: obj
50
+ };
51
+ }
52
+ var cache = _getRequireWildcardCache(nodeInterop);
53
+ if (cache && cache.has(obj)) {
54
+ return cache.get(obj);
55
+ }
56
+ var newObj = {};
57
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
58
+ for(var key in obj){
59
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
60
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
61
+ if (desc && (desc.get || desc.set)) {
62
+ Object.defineProperty(newObj, key, desc);
63
+ } else {
64
+ newObj[key] = obj[key];
65
+ }
66
+ }
67
+ }
68
+ newObj.default = obj;
69
+ if (cache) {
70
+ cache.set(obj, newObj);
71
+ }
72
+ return newObj;
73
+ }
32
74
  const VARIABLE_TYPES = [
33
75
  'ListVariable',
34
76
  'TextVariable'
35
77
  ];
78
+ const DEFAULT_MAX_PREVIEW_VALUES = 50;
79
+ // TODO: Replace with proper validation library
80
+ function getValidation(state) {
81
+ /** Name validation */ let name = null;
82
+ if (!state.name) {
83
+ name = 'Name is required';
84
+ }
85
+ // name can only contain alphanumeric characters and underscores and no spaces
86
+ if (state.name && !/^[a-zA-Z0-9_-]+$/.test(state.name)) {
87
+ name = 'Name can only contain alphanumeric characters, underscores, and dashes';
88
+ }
89
+ return {
90
+ name,
91
+ isValid: !name
92
+ };
93
+ }
36
94
  const SectionHeader = ({ children })=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Typography, {
37
95
  pb: 2,
38
96
  variant: "subtitle1",
39
97
  children: children
40
98
  });
41
- function VariableEditForm({ initialVariableDefinition , onChange , onCancel }) {
42
- const [state, setState] = (0, _useImmer.useImmer)((0, _variableEditorFormModel.getInitialState)(initialVariableDefinition));
99
+ function VariableListPreview({ definition }) {
100
+ const { data , isFetching , error } = (0, _variableModel.useListVariablePluginValues)(definition);
101
+ const [maxValues, setMaxValues] = (0, _react.useState)(DEFAULT_MAX_PREVIEW_VALUES);
102
+ const showAll = ()=>{
103
+ setMaxValues(undefined);
104
+ };
105
+ let notShown = 0;
106
+ if (data && (data === null || data === void 0 ? void 0 : data.length) > 0 && maxValues) {
107
+ notShown = data.length - maxValues;
108
+ }
109
+ const errorMessage = error === null || error === void 0 ? void 0 : error.message;
43
110
  return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Box, {
44
111
  children: [
45
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(SectionHeader, {
46
- children: "General"
112
+ errorMessage && /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Alert, {
113
+ severity: "error",
114
+ children: errorMessage
115
+ }),
116
+ isFetching && 'Loading...',
117
+ (data === null || data === void 0 ? void 0 : data.length) === 0 && /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Alert, {
118
+ severity: "info",
119
+ children: "No results"
47
120
  }),
48
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Grid, {
49
- container: true,
50
- spacing: 2,
51
- mb: 2,
121
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
52
122
  children: [
53
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
54
- item: true,
55
- xs: 6,
56
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TextField, {
57
- fullWidth: true,
58
- label: "Name",
59
- value: state.name,
60
- onChange: (v)=>{
61
- setState((draft)=>{
62
- draft.name = v.target.value;
63
- });
64
- }
65
- })
66
- }),
67
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
68
- item: true,
69
- xs: 6,
70
- children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.FormControl, {
71
- fullWidth: true,
72
- children: [
73
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.InputLabel, {
74
- id: "variable-type-select-label",
75
- children: "Type"
76
- }),
77
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Select, {
78
- labelId: "variable-type-select-label",
79
- id: "variable-type-select",
80
- label: "Type",
81
- value: state.kind,
82
- onChange: (v)=>{
83
- setState((draft)=>{
84
- draft.kind = v.target.value;
85
- });
86
- },
87
- children: VARIABLE_TYPES.map((v)=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.MenuItem, {
88
- value: v,
89
- children: v
90
- }, v))
91
- })
92
- ]
93
- })
94
- }),
95
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
96
- item: true,
97
- xs: 6,
98
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TextField, {
99
- fullWidth: true,
100
- label: "Label",
101
- value: state.title,
102
- onChange: (v)=>{
103
- setState((draft)=>{
104
- draft.title = v.target.value;
105
- });
106
- }
107
- })
108
- }),
109
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
110
- item: true,
111
- xs: 12,
112
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TextField, {
113
- fullWidth: true,
114
- label: "Description",
115
- value: state.description,
116
- onChange: (v)=>{
117
- setState((draft)=>{
118
- draft.description = v.target.value;
119
- });
120
- }
121
- })
123
+ data === null || data === void 0 ? void 0 : data.slice(0, maxValues).map((val)=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Chip, {
124
+ sx: {
125
+ mr: 1,
126
+ mb: 1
127
+ },
128
+ size: "small",
129
+ label: val.label
130
+ }, val.value)),
131
+ notShown > 0 && /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Chip, {
132
+ onClick: showAll,
133
+ variant: "outlined",
134
+ sx: {
135
+ mr: 1,
136
+ mb: 1
137
+ },
138
+ size: "small",
139
+ label: `+${notShown} more`
122
140
  })
123
141
  ]
124
- }),
125
- state.kind === 'TextVariable' && /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
142
+ })
143
+ ]
144
+ });
145
+ }
146
+ function VariableEditForm({ initialVariableDefinition , onChange , onCancel }) {
147
+ const [state, setState] = (0, _useImmer.useImmer)((0, _variableEditorFormModel.getInitialState)(initialVariableDefinition));
148
+ const validation = (0, _react.useMemo)(()=>getValidation(state), [
149
+ state
150
+ ]);
151
+ const [previewKey, setPreviewKey] = _react.default.useState(0);
152
+ const refreshPreview = ()=>{
153
+ setPreviewKey((prev)=>prev + 1);
154
+ };
155
+ /** We use the `previewKey` that we increment to know when to explicity update the
156
+ * spec that will be used for preview. The reason why we do this is to avoid
157
+ * having to re-fetch the values when the user is still editing the spec.
158
+ */ const previewSpec = (0, _react.useMemo)(()=>{
159
+ return (0, _variableEditorFormModel.getVariableDefinitionFromState)(state);
160
+ // eslint-disable-next-line react-hooks/exhaustive-deps
161
+ }, [
162
+ previewKey
163
+ ]);
164
+ return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
165
+ children: [
166
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Box, {
167
+ sx: {
168
+ display: 'flex',
169
+ alignItems: 'center',
170
+ padding: (theme)=>theme.spacing(1, 2),
171
+ borderBottom: (theme)=>`1px solid ${theme.palette.grey[100]}`
172
+ },
126
173
  children: [
127
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(SectionHeader, {
128
- children: "Text Options"
174
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Typography, {
175
+ variant: "h2",
176
+ children: "Template Variables / Edit Variable"
129
177
  }),
130
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
131
- container: true,
132
- spacing: 2,
133
- mb: 2,
134
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
135
- item: true,
136
- xs: 12,
137
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TextField, {
138
- label: "Value",
139
- value: state.textVariableFields.value,
140
- onChange: (v)=>{
141
- setState((draft)=>{
142
- draft.textVariableFields.value = v.target.value;
143
- });
144
- }
178
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Stack, {
179
+ direction: "row",
180
+ spacing: 1,
181
+ sx: {
182
+ marginLeft: 'auto'
183
+ },
184
+ children: [
185
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Button, {
186
+ disabled: !validation.isValid,
187
+ variant: "contained",
188
+ onClick: ()=>{
189
+ onChange((0, _variableEditorFormModel.getVariableDefinitionFromState)(state));
190
+ },
191
+ children: "Update"
192
+ }),
193
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Button, {
194
+ variant: "outlined",
195
+ onClick: ()=>{
196
+ onCancel();
197
+ },
198
+ children: "Cancel"
145
199
  })
146
- })
200
+ ]
147
201
  })
148
202
  ]
149
203
  }),
150
- state.kind === 'ListVariable' && /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
204
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Box, {
205
+ padding: 2,
206
+ sx: {
207
+ overflowY: 'scroll'
208
+ },
151
209
  children: [
152
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(SectionHeader, {
153
- children: "List Options"
154
- }),
155
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
156
- container: true,
157
- spacing: 2,
210
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Typography, {
211
+ variant: "h3",
158
212
  mb: 2,
159
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
160
- item: true,
161
- xs: 6,
162
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_pluginSystem.PluginEditor, {
163
- width: 500,
164
- pluginType: "Variable",
165
- pluginKindLabel: "Source",
166
- value: state.listVariableFields.plugin,
167
- onChange: (val)=>{
168
- setState((draft)=>{
169
- draft.listVariableFields.plugin = val;
170
- });
171
- }
172
- })
173
- })
213
+ children: "Edit Variable"
174
214
  }),
175
215
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(SectionHeader, {
176
- children: "Dropdown Options"
216
+ children: "General"
177
217
  }),
178
218
  /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Grid, {
179
219
  container: true,
180
- spacing: 1,
181
- mb: 1,
220
+ spacing: 2,
221
+ mb: 2,
182
222
  children: [
183
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Grid, {
223
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
224
+ item: true,
225
+ xs: 6,
226
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TextField, {
227
+ required: true,
228
+ error: !!validation.name,
229
+ fullWidth: true,
230
+ label: "Name",
231
+ value: state.name,
232
+ helperText: validation.name,
233
+ onChange: (v)=>{
234
+ setState((draft)=>{
235
+ draft.name = v.target.value;
236
+ });
237
+ }
238
+ })
239
+ }),
240
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
241
+ item: true,
242
+ xs: 6,
243
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.FormControl, {
244
+ fullWidth: true,
245
+ children: [
246
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.InputLabel, {
247
+ id: "variable-type-select-label",
248
+ children: "Type"
249
+ }),
250
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Select, {
251
+ labelId: "variable-type-select-label",
252
+ id: "variable-type-select",
253
+ label: "Type",
254
+ value: state.kind,
255
+ onChange: (v)=>{
256
+ setState((draft)=>{
257
+ draft.kind = v.target.value;
258
+ });
259
+ },
260
+ children: VARIABLE_TYPES.map((v)=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.MenuItem, {
261
+ value: v,
262
+ children: v
263
+ }, v))
264
+ })
265
+ ]
266
+ })
267
+ }),
268
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
269
+ item: true,
270
+ xs: 6,
271
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TextField, {
272
+ fullWidth: true,
273
+ label: "Label",
274
+ value: state.title,
275
+ onChange: (v)=>{
276
+ setState((draft)=>{
277
+ draft.title = v.target.value;
278
+ });
279
+ }
280
+ })
281
+ }),
282
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
184
283
  item: true,
185
284
  xs: 12,
186
- children: [
187
- "Allow Multiple",
188
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Switch, {
189
- checked: state.listVariableFields.allowMultiple,
190
- onChange: (e)=>{
285
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TextField, {
286
+ fullWidth: true,
287
+ label: "Description",
288
+ value: state.description,
289
+ onChange: (v)=>{
290
+ setState((draft)=>{
291
+ draft.description = v.target.value;
292
+ });
293
+ }
294
+ })
295
+ })
296
+ ]
297
+ }),
298
+ state.kind === 'TextVariable' && /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
299
+ children: [
300
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(SectionHeader, {
301
+ children: "Text Options"
302
+ }),
303
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
304
+ container: true,
305
+ spacing: 2,
306
+ mb: 2,
307
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
308
+ item: true,
309
+ xs: 12,
310
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TextField, {
311
+ label: "Value",
312
+ value: state.textVariableFields.value,
313
+ onChange: (v)=>{
191
314
  setState((draft)=>{
192
- draft.listVariableFields.allowMultiple = e.target.checked;
315
+ draft.textVariableFields.value = v.target.value;
193
316
  });
194
317
  }
195
318
  })
319
+ })
320
+ })
321
+ ]
322
+ }),
323
+ state.kind === 'ListVariable' && /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
324
+ children: [
325
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(SectionHeader, {
326
+ children: "List Options"
327
+ }),
328
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Grid, {
329
+ container: true,
330
+ spacing: 2,
331
+ mb: 2,
332
+ children: [
333
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Grid, {
334
+ item: true,
335
+ xs: 6,
336
+ children: [
337
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.ClickAwayListener, {
338
+ onClickAway: ()=>refreshPreview(),
339
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Box, {})
340
+ }),
341
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_pluginSystem.PluginEditor, {
342
+ width: 500,
343
+ pluginType: "Variable",
344
+ pluginKindLabel: "Source",
345
+ value: state.listVariableFields.plugin,
346
+ onChange: (val)=>{
347
+ setState((draft)=>{
348
+ draft.listVariableFields.plugin = val;
349
+ });
350
+ }
351
+ })
352
+ ]
353
+ }),
354
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
355
+ item: true,
356
+ xs: 12,
357
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_components.ErrorBoundary, {
358
+ FallbackComponent: ()=>/*#__PURE__*/ (0, _jsxRuntime.jsx)("div", {
359
+ children: "Error"
360
+ }),
361
+ children: [
362
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Stack, {
363
+ direction: 'row',
364
+ spacing: 1,
365
+ alignItems: "center",
366
+ children: [
367
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Typography, {
368
+ variant: "caption",
369
+ children: "Preview Values"
370
+ }),
371
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
372
+ onClick: refreshPreview,
373
+ size: "small",
374
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_refresh.default, {})
375
+ })
376
+ ]
377
+ }),
378
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(VariableListPreview, {
379
+ definition: previewSpec
380
+ })
381
+ ]
382
+ })
383
+ })
196
384
  ]
197
385
  }),
386
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(SectionHeader, {
387
+ children: "Dropdown Options"
388
+ }),
198
389
  /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Grid, {
199
- item: true,
200
- xs: 12,
390
+ container: true,
391
+ spacing: 1,
392
+ mb: 1,
201
393
  children: [
202
- "Allow All",
203
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Switch, {
204
- checked: state.listVariableFields.allowAll,
205
- onChange: (e)=>{
206
- setState((draft)=>{
207
- draft.listVariableFields.allowAll = e.target.checked;
208
- });
209
- }
394
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Grid, {
395
+ item: true,
396
+ xs: 12,
397
+ children: [
398
+ "Allow Multiple",
399
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Switch, {
400
+ checked: state.listVariableFields.allowMultiple,
401
+ onChange: (e)=>{
402
+ setState((draft)=>{
403
+ draft.listVariableFields.allowMultiple = e.target.checked;
404
+ });
405
+ }
406
+ })
407
+ ]
408
+ }),
409
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Grid, {
410
+ item: true,
411
+ xs: 12,
412
+ children: [
413
+ "Allow All",
414
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Switch, {
415
+ checked: state.listVariableFields.allowAll,
416
+ onChange: (e)=>{
417
+ setState((draft)=>{
418
+ draft.listVariableFields.allowAll = e.target.checked;
419
+ });
420
+ }
421
+ })
422
+ ]
210
423
  })
211
424
  ]
212
425
  })
213
426
  ]
214
427
  })
215
428
  ]
216
- }),
217
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Stack, {
218
- direction: 'row',
219
- spacing: 2,
220
- justifyContent: "end",
221
- children: [
222
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Button, {
223
- variant: "contained",
224
- onClick: ()=>{
225
- onChange((0, _variableEditorFormModel.getVariableDefinitionFromState)(state));
226
- },
227
- children: "Update"
228
- }),
229
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Button, {
230
- variant: "outlined",
231
- onClick: ()=>{
232
- onCancel();
233
- },
234
- children: "Cancel"
235
- })
236
- ]
237
429
  })
238
430
  ]
239
431
  });
@@ -25,6 +25,7 @@ const _eye = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/Eye")
25
25
  const _pencil = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/Pencil"));
26
26
  const _pinOutline = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/PinOutline"));
27
27
  const _pinOffOutline = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/PinOffOutline"));
28
+ const _components = require("@perses-dev/components");
28
29
  const _context = require("../../context");
29
30
  const _variable = require("./Variable");
30
31
  const _variableEditor = require("./VariableEditor");
@@ -84,16 +85,22 @@ function TemplateVariableList(props) {
84
85
  disableHysteresis: true
85
86
  });
86
87
  const isSticky = scrollTrigger && props.initialVariableIsSticky && isPin;
88
+ const onClose = ()=>{
89
+ setIsEditing(false);
90
+ };
87
91
  return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Box, {
88
92
  children: [
89
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Drawer, {
90
- anchor: 'right',
91
- open: isEditing,
93
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_components.Drawer, {
94
+ isOpen: isEditing,
95
+ onClose: onClose,
96
+ PaperProps: {
97
+ sx: {
98
+ width: '50%'
99
+ }
100
+ },
92
101
  children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_variableEditor.VariableEditor, {
93
- onCancel: ()=>{
94
- setIsEditing(false);
95
- },
96
102
  variableDefinitions: variableDefinitions,
103
+ onCancel: onClose,
97
104
  onChange: (v)=>{
98
105
  setVariableDefinitions(v);
99
106
  setIsEditing(false);
@@ -129,8 +136,8 @@ function TemplateVariableList(props) {
129
136
  ml: isSticky ? 2 : 0,
130
137
  children: [
131
138
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Stack, {
132
- direction: 'row',
133
- spacing: 2,
139
+ direction: "row",
140
+ spacing: 1,
134
141
  children: showVariables && variableDefinitions.map((v)=>{
135
142
  var ref;
136
143
  /*#__PURE__*/ return (0, _jsxRuntime.jsx)(_material.Box, {