@perses-dev/dashboards 0.16.0 → 0.18.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 (98) hide show
  1. package/dist/cjs/components/DashboardToolbar/DashboardToolbar.js +52 -41
  2. package/dist/cjs/components/GridLayout/GridContainer.js +2 -2
  3. package/dist/cjs/components/GridLayout/GridLayout.js +13 -2
  4. package/dist/cjs/components/GridLayout/GridTitle.js +4 -6
  5. package/dist/cjs/components/Panel/PanelHeader.js +1 -1
  6. package/dist/cjs/components/PanelDrawer/PanelDrawer.js +3 -4
  7. package/dist/cjs/components/TimeRangeControls/TimeRangeControls.js +28 -5
  8. package/dist/cjs/components/TimeRangeControls/TimeRangeControls.test.js +11 -5
  9. package/dist/cjs/components/Variables/Variable.js +2 -46
  10. package/dist/cjs/components/Variables/VariableEditor.js +142 -130
  11. package/dist/cjs/components/Variables/VariableEditorForm/VariableEditorForm.js +318 -167
  12. package/dist/cjs/components/Variables/VariableEditorForm/variable-editor-form-model.js +5 -4
  13. package/dist/cjs/components/Variables/VariableList.js +13 -8
  14. package/dist/cjs/components/Variables/variable-model.js +106 -0
  15. package/dist/cjs/components/Variables/variable-model.test.js +106 -0
  16. package/dist/cjs/context/TemplateVariableProvider/query-params.js +3 -1
  17. package/dist/cjs/context/index.js +0 -1
  18. package/dist/cjs/views/ViewDashboard/DashboardApp.js +2 -1
  19. package/dist/cjs/views/ViewDashboard/ViewDashboard.js +6 -4
  20. package/dist/cjs/views/ViewDashboard/tests/panelGroups.test.js +4 -2
  21. package/dist/components/DashboardToolbar/DashboardToolbar.d.ts +1 -0
  22. package/dist/components/DashboardToolbar/DashboardToolbar.d.ts.map +1 -1
  23. package/dist/components/DashboardToolbar/DashboardToolbar.js +53 -42
  24. package/dist/components/DashboardToolbar/DashboardToolbar.js.map +1 -1
  25. package/dist/components/GridLayout/GridContainer.js +2 -2
  26. package/dist/components/GridLayout/GridContainer.js.map +1 -1
  27. package/dist/components/GridLayout/GridLayout.d.ts.map +1 -1
  28. package/dist/components/GridLayout/GridLayout.js +13 -2
  29. package/dist/components/GridLayout/GridLayout.js.map +1 -1
  30. package/dist/components/GridLayout/GridTitle.d.ts.map +1 -1
  31. package/dist/components/GridLayout/GridTitle.js +4 -6
  32. package/dist/components/GridLayout/GridTitle.js.map +1 -1
  33. package/dist/components/Panel/PanelHeader.js +1 -1
  34. package/dist/components/Panel/PanelHeader.js.map +1 -1
  35. package/dist/components/PanelDrawer/PanelDrawer.js +3 -4
  36. package/dist/components/PanelDrawer/PanelDrawer.js.map +1 -1
  37. package/dist/components/TimeRangeControls/TimeRangeControls.d.ts.map +1 -1
  38. package/dist/components/TimeRangeControls/TimeRangeControls.js +24 -7
  39. package/dist/components/TimeRangeControls/TimeRangeControls.js.map +1 -1
  40. package/dist/components/TimeRangeControls/TimeRangeControls.test.js +11 -5
  41. package/dist/components/TimeRangeControls/TimeRangeControls.test.js.map +1 -1
  42. package/dist/components/Variables/Variable.d.ts.map +1 -1
  43. package/dist/components/Variables/Variable.js +3 -47
  44. package/dist/components/Variables/Variable.js.map +1 -1
  45. package/dist/components/Variables/VariableEditor.d.ts.map +1 -1
  46. package/dist/components/Variables/VariableEditor.js +142 -130
  47. package/dist/components/Variables/VariableEditor.js.map +1 -1
  48. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts.map +1 -1
  49. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js +315 -169
  50. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js.map +1 -1
  51. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.d.ts +1 -0
  52. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.d.ts.map +1 -1
  53. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js +5 -4
  54. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js.map +1 -1
  55. package/dist/components/Variables/VariableList.d.ts +2 -0
  56. package/dist/components/Variables/VariableList.d.ts.map +1 -1
  57. package/dist/components/Variables/VariableList.js +13 -8
  58. package/dist/components/Variables/VariableList.js.map +1 -1
  59. package/dist/components/Variables/variable-model.d.ts +9 -0
  60. package/dist/components/Variables/variable-model.d.ts.map +1 -0
  61. package/dist/components/Variables/variable-model.js +95 -0
  62. package/dist/components/Variables/variable-model.js.map +1 -0
  63. package/dist/components/Variables/variable-model.test.d.ts +2 -0
  64. package/dist/components/Variables/variable-model.test.d.ts.map +1 -0
  65. package/dist/components/Variables/variable-model.test.js +104 -0
  66. package/dist/components/Variables/variable-model.test.js.map +1 -0
  67. package/dist/context/TemplateVariableProvider/query-params.js +3 -1
  68. package/dist/context/TemplateVariableProvider/query-params.js.map +1 -1
  69. package/dist/context/index.d.ts +0 -1
  70. package/dist/context/index.d.ts.map +1 -1
  71. package/dist/context/index.js +0 -1
  72. package/dist/context/index.js.map +1 -1
  73. package/dist/views/ViewDashboard/DashboardApp.d.ts +1 -0
  74. package/dist/views/ViewDashboard/DashboardApp.d.ts.map +1 -1
  75. package/dist/views/ViewDashboard/DashboardApp.js +2 -1
  76. package/dist/views/ViewDashboard/DashboardApp.js.map +1 -1
  77. package/dist/views/ViewDashboard/ViewDashboard.d.ts +1 -0
  78. package/dist/views/ViewDashboard/ViewDashboard.d.ts.map +1 -1
  79. package/dist/views/ViewDashboard/ViewDashboard.js +5 -3
  80. package/dist/views/ViewDashboard/ViewDashboard.js.map +1 -1
  81. package/dist/views/ViewDashboard/tests/panelGroups.test.js +4 -2
  82. package/dist/views/ViewDashboard/tests/panelGroups.test.js.map +1 -1
  83. package/package.json +5 -5
  84. package/dist/cjs/context/TimeRangeProvider/TimeRangeProvider.js +0 -91
  85. package/dist/cjs/context/TimeRangeProvider/index.js +0 -29
  86. package/dist/cjs/context/TimeRangeProvider/query-params.js +0 -157
  87. package/dist/context/TimeRangeProvider/TimeRangeProvider.d.ts +0 -19
  88. package/dist/context/TimeRangeProvider/TimeRangeProvider.d.ts.map +0 -1
  89. package/dist/context/TimeRangeProvider/TimeRangeProvider.js +0 -44
  90. package/dist/context/TimeRangeProvider/TimeRangeProvider.js.map +0 -1
  91. package/dist/context/TimeRangeProvider/index.d.ts +0 -3
  92. package/dist/context/TimeRangeProvider/index.d.ts.map +0 -1
  93. package/dist/context/TimeRangeProvider/index.js +0 -16
  94. package/dist/context/TimeRangeProvider/index.js.map +0 -1
  95. package/dist/context/TimeRangeProvider/query-params.d.ts +0 -25
  96. package/dist/context/TimeRangeProvider/query-params.d.ts.map +0 -1
  97. package/dist/context/TimeRangeProvider/query-params.js +0 -149
  98. package/dist/context/TimeRangeProvider/query-params.js.map +0 -1
@@ -23,7 +23,15 @@ 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");
30
+ function _interopRequireDefault(obj) {
31
+ return obj && obj.__esModule ? obj : {
32
+ default: obj
33
+ };
34
+ }
27
35
  function _getRequireWildcardCache(nodeInterop) {
28
36
  if (typeof WeakMap !== "function") return null;
29
37
  var cacheBabelInterop = new WeakMap();
@@ -67,6 +75,7 @@ const VARIABLE_TYPES = [
67
75
  'ListVariable',
68
76
  'TextVariable'
69
77
  ];
78
+ const DEFAULT_MAX_PREVIEW_VALUES = 50;
70
79
  // TODO: Replace with proper validation library
71
80
  function getValidation(state) {
72
81
  /** Name validation */ let name = null;
@@ -87,209 +96,351 @@ const SectionHeader = ({ children })=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_mater
87
96
  variant: "subtitle1",
88
97
  children: children
89
98
  });
90
- function VariableEditForm({ initialVariableDefinition , onChange , onCancel }) {
91
- const [state, setState] = (0, _useImmer.useImmer)((0, _variableEditorFormModel.getInitialState)(initialVariableDefinition));
92
- const validation = (0, _react.useMemo)(()=>getValidation(state), [
93
- state
94
- ]);
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;
95
110
  return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Box, {
96
111
  children: [
97
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(SectionHeader, {
98
- 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"
99
120
  }),
100
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Grid, {
101
- container: true,
102
- spacing: 2,
103
- mb: 2,
121
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
104
122
  children: [
105
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
106
- item: true,
107
- xs: 6,
108
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TextField, {
109
- required: true,
110
- error: !!validation.name,
111
- fullWidth: true,
112
- label: "Name",
113
- value: state.name,
114
- helperText: validation.name,
115
- onChange: (v)=>{
116
- setState((draft)=>{
117
- draft.name = v.target.value;
118
- });
119
- }
120
- })
121
- }),
122
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
123
- item: true,
124
- xs: 6,
125
- children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.FormControl, {
126
- fullWidth: true,
127
- children: [
128
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.InputLabel, {
129
- id: "variable-type-select-label",
130
- children: "Type"
131
- }),
132
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Select, {
133
- labelId: "variable-type-select-label",
134
- id: "variable-type-select",
135
- label: "Type",
136
- value: state.kind,
137
- onChange: (v)=>{
138
- setState((draft)=>{
139
- draft.kind = v.target.value;
140
- });
141
- },
142
- children: VARIABLE_TYPES.map((v)=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.MenuItem, {
143
- value: v,
144
- children: v
145
- }, v))
146
- })
147
- ]
148
- })
149
- }),
150
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
151
- item: true,
152
- xs: 6,
153
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TextField, {
154
- fullWidth: true,
155
- label: "Label",
156
- value: state.title,
157
- onChange: (v)=>{
158
- setState((draft)=>{
159
- draft.title = v.target.value;
160
- });
161
- }
162
- })
163
- }),
164
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
165
- item: true,
166
- xs: 12,
167
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TextField, {
168
- fullWidth: true,
169
- label: "Description",
170
- value: state.description,
171
- onChange: (v)=>{
172
- setState((draft)=>{
173
- draft.description = v.target.value;
174
- });
175
- }
176
- })
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`
177
140
  })
178
141
  ]
179
- }),
180
- 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
+ },
181
173
  children: [
182
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(SectionHeader, {
183
- children: "Text Options"
174
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Typography, {
175
+ variant: "h2",
176
+ children: "Template Variables / Edit Variable"
184
177
  }),
185
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
186
- container: true,
187
- spacing: 2,
188
- mb: 2,
189
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
190
- item: true,
191
- xs: 12,
192
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TextField, {
193
- label: "Value",
194
- value: state.textVariableFields.value,
195
- onChange: (v)=>{
196
- setState((draft)=>{
197
- draft.textVariableFields.value = v.target.value;
198
- });
199
- }
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"
200
199
  })
201
- })
200
+ ]
202
201
  })
203
202
  ]
204
203
  }),
205
- 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
+ },
206
209
  children: [
207
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(SectionHeader, {
208
- children: "List Options"
209
- }),
210
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
211
- container: true,
212
- spacing: 2,
210
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Typography, {
211
+ variant: "h3",
213
212
  mb: 2,
214
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
215
- item: true,
216
- xs: 6,
217
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_pluginSystem.PluginEditor, {
218
- width: 500,
219
- pluginType: "Variable",
220
- pluginKindLabel: "Source",
221
- value: state.listVariableFields.plugin,
222
- onChange: (val)=>{
223
- setState((draft)=>{
224
- draft.listVariableFields.plugin = val;
225
- });
226
- }
227
- })
228
- })
213
+ children: "Edit Variable"
229
214
  }),
230
215
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(SectionHeader, {
231
- children: "Dropdown Options"
216
+ children: "General"
232
217
  }),
233
218
  /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Grid, {
234
219
  container: true,
235
- spacing: 1,
236
- mb: 1,
220
+ spacing: 2,
221
+ mb: 2,
237
222
  children: [
238
- /*#__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, {
239
283
  item: true,
240
284
  xs: 12,
241
- children: [
242
- "Allow Multiple",
243
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Switch, {
244
- checked: state.listVariableFields.allowMultiple,
245
- 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)=>{
246
314
  setState((draft)=>{
247
- draft.listVariableFields.allowMultiple = e.target.checked;
315
+ draft.textVariableFields.value = v.target.value;
248
316
  });
249
317
  }
250
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.TextField, {
338
+ sx: {
339
+ mb: 1
340
+ },
341
+ label: "Capturing Regexp",
342
+ value: state.listVariableFields.capturing_regexp,
343
+ onChange: (e)=>{
344
+ setState((draft)=>{
345
+ draft.listVariableFields.capturing_regexp = e.target.value;
346
+ });
347
+ }
348
+ }),
349
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.ClickAwayListener, {
350
+ onClickAway: ()=>refreshPreview(),
351
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Box, {})
352
+ }),
353
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_pluginSystem.PluginEditor, {
354
+ width: 500,
355
+ pluginType: "Variable",
356
+ pluginKindLabel: "Source",
357
+ value: state.listVariableFields.plugin,
358
+ onChange: (val)=>{
359
+ setState((draft)=>{
360
+ draft.listVariableFields.plugin = val;
361
+ });
362
+ }
363
+ })
364
+ ]
365
+ }),
366
+ state.listVariableFields.plugin.kind && /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
367
+ item: true,
368
+ xs: 12,
369
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_components.ErrorBoundary, {
370
+ FallbackComponent: ()=>/*#__PURE__*/ (0, _jsxRuntime.jsx)("div", {
371
+ children: "Error previewing values"
372
+ }),
373
+ resetKeys: [
374
+ previewSpec
375
+ ],
376
+ children: [
377
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Stack, {
378
+ direction: 'row',
379
+ spacing: 1,
380
+ alignItems: "center",
381
+ children: [
382
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Typography, {
383
+ variant: "caption",
384
+ children: "Preview Values"
385
+ }),
386
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
387
+ onClick: refreshPreview,
388
+ size: "small",
389
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_refresh.default, {})
390
+ })
391
+ ]
392
+ }),
393
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(VariableListPreview, {
394
+ definition: previewSpec
395
+ })
396
+ ]
397
+ })
398
+ })
251
399
  ]
252
400
  }),
401
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(SectionHeader, {
402
+ children: "Dropdown Options"
403
+ }),
253
404
  /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Grid, {
254
- item: true,
255
- xs: 12,
405
+ container: true,
406
+ spacing: 1,
407
+ mb: 1,
256
408
  children: [
257
- "Allow All",
258
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Switch, {
259
- checked: state.listVariableFields.allowAll,
260
- onChange: (e)=>{
261
- setState((draft)=>{
262
- draft.listVariableFields.allowAll = e.target.checked;
263
- });
264
- }
409
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Grid, {
410
+ item: true,
411
+ xs: 12,
412
+ children: [
413
+ "Allow Multiple",
414
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Switch, {
415
+ checked: state.listVariableFields.allowMultiple,
416
+ onChange: (e)=>{
417
+ setState((draft)=>{
418
+ draft.listVariableFields.allowMultiple = e.target.checked;
419
+ });
420
+ }
421
+ })
422
+ ]
423
+ }),
424
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Grid, {
425
+ item: true,
426
+ xs: 12,
427
+ children: [
428
+ "Allow All",
429
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Switch, {
430
+ checked: state.listVariableFields.allowAll,
431
+ onChange: (e)=>{
432
+ setState((draft)=>{
433
+ draft.listVariableFields.allowAll = e.target.checked;
434
+ });
435
+ }
436
+ })
437
+ ]
265
438
  })
266
439
  ]
267
440
  })
268
441
  ]
269
442
  })
270
443
  ]
271
- }),
272
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Stack, {
273
- direction: 'row',
274
- spacing: 2,
275
- justifyContent: "end",
276
- children: [
277
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Button, {
278
- disabled: !validation.isValid,
279
- variant: "contained",
280
- onClick: ()=>{
281
- onChange((0, _variableEditorFormModel.getVariableDefinitionFromState)(state));
282
- },
283
- children: "Update"
284
- }),
285
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Button, {
286
- variant: "outlined",
287
- onClick: ()=>{
288
- onCancel();
289
- },
290
- children: "Cancel"
291
- })
292
- ]
293
444
  })
294
445
  ]
295
446
  });
@@ -33,6 +33,7 @@ function getInitialState(initialVariableDefinition) {
33
33
  const listVariableFields = {
34
34
  allowMultiple: false,
35
35
  allowAll: false,
36
+ capturing_regexp: undefined,
36
37
  plugin: {
37
38
  kind: '',
38
39
  spec: {}
@@ -43,6 +44,7 @@ function getInitialState(initialVariableDefinition) {
43
44
  listVariableFields.allowMultiple = (_allow_all_value = initialVariableDefinition.spec.allow_all_value) !== null && _allow_all_value !== void 0 ? _allow_all_value : false;
44
45
  var _allow_all_value1;
45
46
  listVariableFields.allowAll = (_allow_all_value1 = initialVariableDefinition.spec.allow_all_value) !== null && _allow_all_value1 !== void 0 ? _allow_all_value1 : false;
47
+ listVariableFields.capturing_regexp = initialVariableDefinition.spec.capturing_regexp;
46
48
  listVariableFields.plugin = initialVariableDefinition.spec.plugin;
47
49
  }
48
50
  return {
@@ -63,26 +65,25 @@ function getVariableDefinitionFromState(state) {
63
65
  }
64
66
  };
65
67
  if (kind === 'TextVariable') {
66
- const textVariableDefinition = {
68
+ return {
67
69
  kind,
68
70
  spec: {
69
71
  ...commonSpec,
70
72
  ...state.textVariableFields
71
73
  }
72
74
  };
73
- return textVariableDefinition;
74
75
  }
75
76
  if (kind === 'ListVariable') {
76
- const listVariableDefinition = {
77
+ return {
77
78
  kind,
78
79
  spec: {
79
80
  ...commonSpec,
80
81
  allow_multiple: state.listVariableFields.allowMultiple,
81
82
  allow_all_value: state.listVariableFields.allowAll,
83
+ capturing_regexp: state.listVariableFields.capturing_regexp,
82
84
  plugin: state.listVariableFields.plugin
83
85
  }
84
86
  };
85
- return listVariableDefinition;
86
87
  }
87
88
  throw new Error(`Unknown variable kind: ${kind}`);
88
89
  }
@@ -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,21 +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,
92
96
  PaperProps: {
93
97
  sx: {
94
98
  width: '50%'
95
99
  }
96
100
  },
97
101
  children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_variableEditor.VariableEditor, {
98
- onCancel: ()=>{
99
- setIsEditing(false);
100
- },
101
102
  variableDefinitions: variableDefinitions,
103
+ onCancel: onClose,
102
104
  onChange: (v)=>{
103
105
  setVariableDefinitions(v);
104
106
  setIsEditing(false);
@@ -127,6 +129,9 @@ function TemplateVariableList(props) {
127
129
  color: 'inherit',
128
130
  position: isSticky ? 'fixed' : 'static',
129
131
  elevation: isSticky ? 4 : 0,
132
+ sx: {
133
+ ...props.sx
134
+ },
130
135
  children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Box, {
131
136
  display: 'flex',
132
137
  justifyContent: "space-between",
@@ -134,8 +139,8 @@ function TemplateVariableList(props) {
134
139
  ml: isSticky ? 2 : 0,
135
140
  children: [
136
141
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Stack, {
137
- direction: 'row',
138
- spacing: 2,
142
+ direction: "row",
143
+ spacing: 1,
139
144
  children: showVariables && variableDefinitions.map((v)=>{
140
145
  var ref;
141
146
  /*#__PURE__*/ return (0, _jsxRuntime.jsx)(_material.Box, {