@perses-dev/dashboards 0.37.2 → 0.39.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 (118) hide show
  1. package/dist/cjs/components/Dashboard/Dashboard.js +3 -2
  2. package/dist/cjs/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js +12 -52
  3. package/dist/cjs/components/GridLayout/GridItemContent.js +3 -1
  4. package/dist/cjs/components/GridLayout/GridLayout.js +1 -0
  5. package/dist/cjs/components/Panel/Panel.js +8 -3
  6. package/dist/cjs/components/Panel/PanelHeader.js +7 -3
  7. package/dist/cjs/components/SaveDashboardButton/SaveDashboardButton.js +3 -1
  8. package/dist/cjs/components/Variables/EditVariablesButton.js +2 -0
  9. package/dist/cjs/components/Variables/TemplateVariable.js +22 -18
  10. package/dist/cjs/components/Variables/VariableEditor.js +271 -99
  11. package/dist/cjs/components/Variables/VariableList.js +38 -18
  12. package/dist/cjs/components/Variables/index.js +0 -2
  13. package/dist/cjs/context/DatasourceStoreProvider.js +22 -18
  14. package/dist/cjs/context/TemplateVariableProvider/TemplateVariableProvider.js +71 -24
  15. package/dist/cjs/context/TemplateVariableProvider/hydrationUtils.js +55 -5
  16. package/dist/cjs/context/TemplateVariableProvider/utils.js +39 -7
  17. package/dist/cjs/test/render.js +1 -1
  18. package/dist/cjs/views/ViewDashboard/DashboardApp.js +7 -2
  19. package/dist/cjs/views/ViewDashboard/ViewDashboard.js +4 -3
  20. package/dist/components/Dashboard/Dashboard.d.ts +3 -1
  21. package/dist/components/Dashboard/Dashboard.d.ts.map +1 -1
  22. package/dist/components/Dashboard/Dashboard.js +3 -2
  23. package/dist/components/Dashboard/Dashboard.js.map +1 -1
  24. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.d.ts +1 -1
  25. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.d.ts.map +1 -1
  26. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js +11 -46
  27. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js.map +1 -1
  28. package/dist/components/GridLayout/GridItemContent.d.ts +2 -0
  29. package/dist/components/GridLayout/GridItemContent.d.ts.map +1 -1
  30. package/dist/components/GridLayout/GridItemContent.js +3 -1
  31. package/dist/components/GridLayout/GridItemContent.js.map +1 -1
  32. package/dist/components/GridLayout/GridLayout.d.ts +2 -0
  33. package/dist/components/GridLayout/GridLayout.d.ts.map +1 -1
  34. package/dist/components/GridLayout/GridLayout.js +1 -0
  35. package/dist/components/GridLayout/GridLayout.js.map +1 -1
  36. package/dist/components/Panel/Panel.d.ts +20 -0
  37. package/dist/components/Panel/Panel.d.ts.map +1 -1
  38. package/dist/components/Panel/Panel.js +8 -3
  39. package/dist/components/Panel/Panel.js.map +1 -1
  40. package/dist/components/Panel/PanelHeader.d.ts +2 -1
  41. package/dist/components/Panel/PanelHeader.d.ts.map +1 -1
  42. package/dist/components/Panel/PanelHeader.js +7 -3
  43. package/dist/components/Panel/PanelHeader.js.map +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/SaveDashboardButton/SaveDashboardButton.d.ts.map +1 -1
  47. package/dist/components/SaveDashboardButton/SaveDashboardButton.js +3 -1
  48. package/dist/components/SaveDashboardButton/SaveDashboardButton.js.map +1 -1
  49. package/dist/components/Variables/EditVariablesButton.d.ts.map +1 -1
  50. package/dist/components/Variables/EditVariablesButton.js +3 -1
  51. package/dist/components/Variables/EditVariablesButton.js.map +1 -1
  52. package/dist/components/Variables/TemplateVariable.d.ts +2 -1
  53. package/dist/components/Variables/TemplateVariable.d.ts.map +1 -1
  54. package/dist/components/Variables/TemplateVariable.js +21 -17
  55. package/dist/components/Variables/TemplateVariable.js.map +1 -1
  56. package/dist/components/Variables/VariableEditor.d.ts +7 -0
  57. package/dist/components/Variables/VariableEditor.d.ts.map +1 -1
  58. package/dist/components/Variables/VariableEditor.js +261 -95
  59. package/dist/components/Variables/VariableEditor.js.map +1 -1
  60. package/dist/components/Variables/VariableList.d.ts +5 -0
  61. package/dist/components/Variables/VariableList.d.ts.map +1 -1
  62. package/dist/components/Variables/VariableList.js +31 -17
  63. package/dist/components/Variables/VariableList.js.map +1 -1
  64. package/dist/components/Variables/index.d.ts +0 -2
  65. package/dist/components/Variables/index.d.ts.map +1 -1
  66. package/dist/components/Variables/index.js +0 -2
  67. package/dist/components/Variables/index.js.map +1 -1
  68. package/dist/context/DatasourceStoreProvider.d.ts +4 -3
  69. package/dist/context/DatasourceStoreProvider.d.ts.map +1 -1
  70. package/dist/context/DatasourceStoreProvider.js +22 -18
  71. package/dist/context/DatasourceStoreProvider.js.map +1 -1
  72. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.d.ts +39 -10
  73. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.d.ts.map +1 -1
  74. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.js +76 -27
  75. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.js.map +1 -1
  76. package/dist/context/TemplateVariableProvider/hydrationUtils.d.ts +9 -2
  77. package/dist/context/TemplateVariableProvider/hydrationUtils.d.ts.map +1 -1
  78. package/dist/context/TemplateVariableProvider/hydrationUtils.js +60 -5
  79. package/dist/context/TemplateVariableProvider/hydrationUtils.js.map +1 -1
  80. package/dist/context/TemplateVariableProvider/utils.d.ts +27 -2
  81. package/dist/context/TemplateVariableProvider/utils.d.ts.map +1 -1
  82. package/dist/context/TemplateVariableProvider/utils.js +46 -4
  83. package/dist/context/TemplateVariableProvider/utils.js.map +1 -1
  84. package/dist/test/render.js +2 -2
  85. package/dist/test/render.js.map +1 -1
  86. package/dist/views/ViewDashboard/DashboardApp.d.ts.map +1 -1
  87. package/dist/views/ViewDashboard/DashboardApp.js +9 -4
  88. package/dist/views/ViewDashboard/DashboardApp.js.map +1 -1
  89. package/dist/views/ViewDashboard/ViewDashboard.d.ts +2 -1
  90. package/dist/views/ViewDashboard/ViewDashboard.d.ts.map +1 -1
  91. package/dist/views/ViewDashboard/ViewDashboard.js +4 -3
  92. package/dist/views/ViewDashboard/ViewDashboard.js.map +1 -1
  93. package/package.json +6 -6
  94. package/dist/cjs/components/Variables/VariableEditorForm/VariableEditorForm.js +0 -399
  95. package/dist/cjs/components/Variables/VariableEditorForm/VariablePreview.js +0 -178
  96. package/dist/cjs/components/Variables/VariableEditorForm/index.js +0 -29
  97. package/dist/cjs/components/Variables/VariableEditorForm/variable-editor-form-model.js +0 -91
  98. package/dist/cjs/components/Variables/variable-model.js +0 -117
  99. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts +0 -10
  100. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts.map +0 -1
  101. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js +0 -354
  102. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js.map +0 -1
  103. package/dist/components/Variables/VariableEditorForm/VariablePreview.d.ts +0 -16
  104. package/dist/components/Variables/VariableEditorForm/VariablePreview.d.ts.map +0 -1
  105. package/dist/components/Variables/VariableEditorForm/VariablePreview.js +0 -122
  106. package/dist/components/Variables/VariableEditorForm/VariablePreview.js.map +0 -1
  107. package/dist/components/Variables/VariableEditorForm/index.d.ts +0 -3
  108. package/dist/components/Variables/VariableEditorForm/index.d.ts.map +0 -1
  109. package/dist/components/Variables/VariableEditorForm/index.js +0 -16
  110. package/dist/components/Variables/VariableEditorForm/index.js.map +0 -1
  111. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.d.ts +0 -23
  112. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.d.ts.map +0 -1
  113. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js +0 -79
  114. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js.map +0 -1
  115. package/dist/components/Variables/variable-model.d.ts +0 -16
  116. package/dist/components/Variables/variable-model.d.ts.map +0 -1
  117. package/dist/components/Variables/variable-model.js +0 -105
  118. package/dist/components/Variables/variable-model.js.map +0 -1
@@ -12,16 +12,17 @@
12
12
  // limitations under the License.
13
13
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
14
14
  import { useState, useMemo } from 'react';
15
- import { Button, Stack, Box, TableContainer, TableBody, TableRow, TableCell as MuiTableCell, Table, TableHead, Switch, Typography, IconButton, Alert, styled } from '@mui/material';
15
+ import { Button, Stack, Box, TableContainer, TableBody, TableRow, TableCell as MuiTableCell, Table, TableHead, Switch, Typography, IconButton, Alert, styled, capitalize, Tooltip } from '@mui/material';
16
16
  import AddIcon from 'mdi-material-ui/Plus';
17
17
  import { useImmer } from 'use-immer';
18
18
  import PencilIcon from 'mdi-material-ui/Pencil';
19
19
  import TrashIcon from 'mdi-material-ui/TrashCan';
20
20
  import ArrowUp from 'mdi-material-ui/ArrowUp';
21
21
  import ArrowDown from 'mdi-material-ui/ArrowDown';
22
+ import ContentDuplicate from 'mdi-material-ui/ContentDuplicate';
23
+ import { VariableEditForm, VARIABLE_TYPES } from '@perses-dev/plugin-system';
22
24
  import { useDiscardChangesConfirmationDialog } from '../../context';
23
- import { VariableEditForm } from './VariableEditorForm';
24
- import { VARIABLE_TYPES } from './variable-model';
25
+ import { hydrateTemplateVariableStates } from '../../context/TemplateVariableProvider/hydrationUtils';
25
26
  function getVariableLabelByKind(kind) {
26
27
  var ref;
27
28
  return (ref = VARIABLE_TYPES.find((variableType)=>variableType.kind === kind)) === null || ref === void 0 ? void 0 : ref.label;
@@ -41,9 +42,19 @@ function getValidation(variableDefinitions) {
41
42
  export function VariableEditor(props) {
42
43
  const [variableDefinitions, setVariableDefinitions] = useImmer(props.variableDefinitions);
43
44
  const [variableEditIdx, setVariableEditIdx] = useState(null);
45
+ const [variableFormAction, setVariableFormAction] = useState('update');
46
+ const externalVariableDefinitions = props.externalVariableDefinitions;
44
47
  const validation = useMemo(()=>getValidation(variableDefinitions), [
45
48
  variableDefinitions
46
49
  ]);
50
+ const [variableState] = useMemo(()=>{
51
+ return [
52
+ hydrateTemplateVariableStates(variableDefinitions, {}, externalVariableDefinitions)
53
+ ];
54
+ }, [
55
+ externalVariableDefinitions,
56
+ variableDefinitions
57
+ ]);
47
58
  const currentEditingVariableDefinition = typeof variableEditIdx === 'number' && variableDefinitions[variableEditIdx];
48
59
  const { openDiscardChangesConfirmationDialog , closeDiscardChangesConfirmationDialog } = useDiscardChangesConfirmationDialog();
49
60
  const handleCancel = ()=>{
@@ -68,6 +79,7 @@ export function VariableEditor(props) {
68
79
  });
69
80
  };
70
81
  const addVariable = ()=>{
82
+ setVariableFormAction('create');
71
83
  setVariableDefinitions((draft)=>{
72
84
  draft.push({
73
85
  kind: 'TextVariable',
@@ -79,6 +91,10 @@ export function VariableEditor(props) {
79
91
  });
80
92
  setVariableEditIdx(variableDefinitions.length);
81
93
  };
94
+ const editVariable = (index)=>{
95
+ setVariableFormAction('update');
96
+ setVariableEditIdx(index);
97
+ };
82
98
  const toggleVariableVisibility = (index, visible)=>{
83
99
  setVariableDefinitions((draft)=>{
84
100
  const v = draft[index];
@@ -115,7 +131,12 @@ export function VariableEditor(props) {
115
131
  }
116
132
  });
117
133
  };
118
- var ref;
134
+ const overrideVariable = (v)=>{
135
+ setVariableDefinitions((draft)=>{
136
+ draft.push(v);
137
+ });
138
+ };
139
+ var ref, ref1;
119
140
  return /*#__PURE__*/ _jsxs(_Fragment, {
120
141
  children: [
121
142
  currentEditingVariableDefinition && /*#__PURE__*/ _jsx(VariableEditForm, {
@@ -126,7 +147,13 @@ export function VariableEditor(props) {
126
147
  setVariableEditIdx(null);
127
148
  });
128
149
  },
129
- onCancel: ()=>setVariableEditIdx(null)
150
+ onCancel: ()=>{
151
+ if (variableFormAction === 'create') {
152
+ removeVariable(variableEditIdx);
153
+ }
154
+ setVariableEditIdx(null);
155
+ },
156
+ action: variableFormAction
130
157
  }),
131
158
  !currentEditingVariableDefinition && /*#__PURE__*/ _jsxs(_Fragment, {
132
159
  children: [
@@ -140,7 +167,7 @@ export function VariableEditor(props) {
140
167
  children: [
141
168
  /*#__PURE__*/ _jsx(Typography, {
142
169
  variant: "h2",
143
- children: "Variables"
170
+ children: "Dashboard Variables"
144
171
  }),
145
172
  /*#__PURE__*/ _jsxs(Stack, {
146
173
  direction: "row",
@@ -165,113 +192,226 @@ export function VariableEditor(props) {
165
192
  })
166
193
  ]
167
194
  }),
168
- /*#__PURE__*/ _jsx(Box, {
195
+ /*#__PURE__*/ _jsxs(Box, {
169
196
  padding: 2,
170
197
  sx: {
171
198
  overflowY: 'scroll'
172
199
  },
173
- children: /*#__PURE__*/ _jsxs(Stack, {
174
- spacing: 2,
175
- children: [
176
- !validation.isValid && validation.errors.map((error)=>/*#__PURE__*/ _jsx(Alert, {
177
- severity: "error",
178
- children: error
179
- }, error)),
180
- /*#__PURE__*/ _jsx(TableContainer, {
181
- children: /*#__PURE__*/ _jsxs(Table, {
182
- sx: {
183
- minWidth: 650
184
- },
185
- "aria-label": "table of variables",
186
- children: [
187
- /*#__PURE__*/ _jsx(TableHead, {
188
- children: /*#__PURE__*/ _jsxs(TableRow, {
189
- children: [
190
- /*#__PURE__*/ _jsx(TableCell, {
191
- children: "Visibility"
192
- }),
193
- /*#__PURE__*/ _jsx(TableCell, {
194
- children: "Name"
195
- }),
196
- /*#__PURE__*/ _jsx(TableCell, {
197
- children: "Type"
198
- }),
199
- /*#__PURE__*/ _jsx(TableCell, {
200
- align: "right"
201
- })
202
- ]
203
- })
204
- }),
205
- /*#__PURE__*/ _jsx(TableBody, {
206
- children: variableDefinitions.map((v, idx)=>{
207
- var ref1;
208
- /*#__PURE__*/ return _jsxs(TableRow, {
200
+ children: [
201
+ /*#__PURE__*/ _jsxs(Stack, {
202
+ spacing: 2,
203
+ children: [
204
+ !validation.isValid && validation.errors.map((error)=>/*#__PURE__*/ _jsx(Alert, {
205
+ severity: "error",
206
+ children: error
207
+ }, error)),
208
+ /*#__PURE__*/ _jsx(TableContainer, {
209
+ children: /*#__PURE__*/ _jsxs(Table, {
210
+ sx: {
211
+ minWidth: 650
212
+ },
213
+ "aria-label": "table of variables",
214
+ children: [
215
+ /*#__PURE__*/ _jsx(TableHead, {
216
+ children: /*#__PURE__*/ _jsxs(TableRow, {
209
217
  children: [
210
218
  /*#__PURE__*/ _jsx(TableCell, {
211
- component: "th",
212
- scope: "row",
213
- children: /*#__PURE__*/ _jsx(Switch, {
214
- checked: ((ref1 = v.spec.display) === null || ref1 === void 0 ? void 0 : ref1.hidden) !== true,
215
- onChange: (e)=>{
216
- toggleVariableVisibility(idx, e.target.checked);
217
- }
218
- })
219
+ children: "Visibility"
219
220
  }),
220
221
  /*#__PURE__*/ _jsx(TableCell, {
221
- component: "th",
222
- scope: "row",
223
- sx: {
224
- fontWeight: 'bold'
225
- },
226
- children: v.spec.name
222
+ children: "Name"
227
223
  }),
228
224
  /*#__PURE__*/ _jsx(TableCell, {
229
- children: (ref = getVariableLabelByKind(v.kind)) !== null && ref !== void 0 ? ref : v.kind
225
+ children: "Type"
230
226
  }),
231
- /*#__PURE__*/ _jsxs(TableCell, {
232
- align: "right",
227
+ /*#__PURE__*/ _jsx(TableCell, {
228
+ align: "right"
229
+ })
230
+ ]
231
+ })
232
+ }),
233
+ /*#__PURE__*/ _jsx(TableBody, {
234
+ children: variableDefinitions.map((v, idx)=>{
235
+ var ref1;
236
+ /*#__PURE__*/ return _jsxs(TableRow, {
237
+ children: [
238
+ /*#__PURE__*/ _jsx(TableCell, {
239
+ component: "th",
240
+ scope: "row",
241
+ children: /*#__PURE__*/ _jsx(Switch, {
242
+ checked: ((ref1 = v.spec.display) === null || ref1 === void 0 ? void 0 : ref1.hidden) !== true,
243
+ onChange: (e)=>{
244
+ toggleVariableVisibility(idx, e.target.checked);
245
+ }
246
+ })
247
+ }),
248
+ /*#__PURE__*/ _jsx(TableCell, {
249
+ component: "th",
250
+ scope: "row",
251
+ sx: {
252
+ fontWeight: 'bold'
253
+ },
254
+ children: /*#__PURE__*/ _jsx(VariableName, {
255
+ name: v.spec.name,
256
+ state: variableState.get({
257
+ name: v.spec.name
258
+ })
259
+ })
260
+ }),
261
+ /*#__PURE__*/ _jsx(TableCell, {
262
+ children: (ref = getVariableLabelByKind(v.kind)) !== null && ref !== void 0 ? ref : v.kind
263
+ }),
264
+ /*#__PURE__*/ _jsxs(TableCell, {
265
+ align: "right",
266
+ children: [
267
+ /*#__PURE__*/ _jsx(IconButton, {
268
+ onClick: ()=>changeVariableOrder(idx, 'up'),
269
+ disabled: idx === 0,
270
+ children: /*#__PURE__*/ _jsx(ArrowUp, {})
271
+ }),
272
+ /*#__PURE__*/ _jsx(IconButton, {
273
+ onClick: ()=>changeVariableOrder(idx, 'down'),
274
+ disabled: idx === variableDefinitions.length - 1,
275
+ children: /*#__PURE__*/ _jsx(ArrowDown, {})
276
+ }),
277
+ /*#__PURE__*/ _jsx(IconButton, {
278
+ onClick: ()=>editVariable(idx),
279
+ children: /*#__PURE__*/ _jsx(PencilIcon, {})
280
+ }),
281
+ /*#__PURE__*/ _jsx(IconButton, {
282
+ onClick: ()=>removeVariable(idx),
283
+ children: /*#__PURE__*/ _jsx(TrashIcon, {})
284
+ })
285
+ ]
286
+ })
287
+ ]
288
+ }, v.spec.name);
289
+ })
290
+ })
291
+ ]
292
+ })
293
+ }),
294
+ /*#__PURE__*/ _jsx(Box, {
295
+ display: "flex",
296
+ children: /*#__PURE__*/ _jsx(Button, {
297
+ variant: "contained",
298
+ startIcon: /*#__PURE__*/ _jsx(AddIcon, {}),
299
+ sx: {
300
+ marginLeft: 'auto'
301
+ },
302
+ onClick: addVariable,
303
+ children: "Add Variable"
304
+ })
305
+ })
306
+ ]
307
+ }),
308
+ externalVariableDefinitions.map((extVar)=>{
309
+ /*#__PURE__*/ return _jsxs(Stack, {
310
+ children: [
311
+ /*#__PURE__*/ _jsxs(Typography, {
312
+ variant: "h2",
313
+ children: [
314
+ capitalize(extVar.source),
315
+ " Variables"
316
+ ]
317
+ }),
318
+ /*#__PURE__*/ _jsx(TableContainer, {
319
+ children: /*#__PURE__*/ _jsxs(Table, {
320
+ sx: {
321
+ minWidth: 650
322
+ },
323
+ "aria-label": "table of variables",
324
+ children: [
325
+ /*#__PURE__*/ _jsx(TableHead, {
326
+ children: /*#__PURE__*/ _jsxs(TableRow, {
327
+ children: [
328
+ /*#__PURE__*/ _jsx(TableCell, {
329
+ children: "Visibility"
330
+ }),
331
+ /*#__PURE__*/ _jsx(TableCell, {
332
+ children: "Name"
333
+ }),
334
+ /*#__PURE__*/ _jsx(TableCell, {
335
+ children: "Type"
336
+ }),
337
+ /*#__PURE__*/ _jsx(TableCell, {
338
+ align: "right"
339
+ })
340
+ ]
341
+ })
342
+ }),
343
+ /*#__PURE__*/ _jsx(TableBody, {
344
+ children: extVar.definitions.map((v)=>{
345
+ var ref;
346
+ /*#__PURE__*/ return _jsxs(TableRow, {
233
347
  children: [
234
- /*#__PURE__*/ _jsx(IconButton, {
235
- onClick: ()=>changeVariableOrder(idx, 'up'),
236
- disabled: idx === 0,
237
- children: /*#__PURE__*/ _jsx(ArrowUp, {})
348
+ /*#__PURE__*/ _jsx(TableCell, {
349
+ component: "th",
350
+ scope: "row",
351
+ children: /*#__PURE__*/ _jsx(Switch, {
352
+ checked: ((ref = v.spec.display) === null || ref === void 0 ? void 0 : ref.hidden) !== true,
353
+ disabled: true
354
+ })
238
355
  }),
239
- /*#__PURE__*/ _jsx(IconButton, {
240
- onClick: ()=>changeVariableOrder(idx, 'down'),
241
- disabled: idx === variableDefinitions.length - 1,
242
- children: /*#__PURE__*/ _jsx(ArrowDown, {})
356
+ /*#__PURE__*/ _jsx(TableCell, {
357
+ component: "th",
358
+ scope: "row",
359
+ sx: {
360
+ fontWeight: 'bold'
361
+ },
362
+ children: /*#__PURE__*/ _jsx(VariableName, {
363
+ name: v.spec.name,
364
+ state: variableState.get({
365
+ name: v.spec.name,
366
+ source: extVar.source
367
+ })
368
+ })
243
369
  }),
244
- /*#__PURE__*/ _jsx(IconButton, {
245
- onClick: ()=>setVariableEditIdx(idx),
246
- children: /*#__PURE__*/ _jsx(PencilIcon, {})
370
+ /*#__PURE__*/ _jsx(TableCell, {
371
+ children: (ref1 = getVariableLabelByKind(v.kind)) !== null && ref1 !== void 0 ? ref1 : v.kind
247
372
  }),
248
- /*#__PURE__*/ _jsx(IconButton, {
249
- onClick: ()=>removeVariable(idx),
250
- children: /*#__PURE__*/ _jsx(TrashIcon, {})
373
+ /*#__PURE__*/ _jsxs(TableCell, {
374
+ align: "right",
375
+ children: [
376
+ /*#__PURE__*/ _jsx(Tooltip, {
377
+ title: "Override",
378
+ children: /*#__PURE__*/ _jsx(IconButton, {
379
+ onClick: ()=>overrideVariable(v),
380
+ disabled: !!variableState.get({
381
+ name: v.spec.name
382
+ }),
383
+ children: /*#__PURE__*/ _jsx(ContentDuplicate, {})
384
+ })
385
+ }),
386
+ /*#__PURE__*/ _jsx(IconButton, {
387
+ disabled: true,
388
+ children: /*#__PURE__*/ _jsx(ArrowUp, {})
389
+ }),
390
+ /*#__PURE__*/ _jsx(IconButton, {
391
+ disabled: true,
392
+ children: /*#__PURE__*/ _jsx(ArrowDown, {})
393
+ }),
394
+ /*#__PURE__*/ _jsx(IconButton, {
395
+ disabled: true,
396
+ children: /*#__PURE__*/ _jsx(PencilIcon, {})
397
+ }),
398
+ /*#__PURE__*/ _jsx(IconButton, {
399
+ disabled: true,
400
+ children: /*#__PURE__*/ _jsx(TrashIcon, {})
401
+ })
402
+ ]
251
403
  })
252
404
  ]
253
- })
254
- ]
255
- }, v.spec.name);
256
- })
405
+ }, v.spec.name);
406
+ })
407
+ })
408
+ ]
257
409
  })
258
- ]
259
- })
260
- }),
261
- /*#__PURE__*/ _jsx(Box, {
262
- display: "flex",
263
- children: /*#__PURE__*/ _jsx(Button, {
264
- variant: "contained",
265
- startIcon: /*#__PURE__*/ _jsx(AddIcon, {}),
266
- sx: {
267
- marginLeft: 'auto'
268
- },
269
- onClick: addVariable,
270
- children: "Add Variable"
271
- })
272
- })
273
- ]
274
- })
410
+ })
411
+ ]
412
+ }, extVar.source);
413
+ })
414
+ ]
275
415
  })
276
416
  ]
277
417
  })
@@ -281,5 +421,31 @@ export function VariableEditor(props) {
281
421
  const TableCell = styled(MuiTableCell)(({ theme })=>({
282
422
  borderBottom: `solid 1px ${theme.palette.divider}`
283
423
  }));
424
+ export function VariableName(props) {
425
+ const { name , state } = props;
426
+ return /*#__PURE__*/ _jsxs(_Fragment, {
427
+ children: [
428
+ !(state === null || state === void 0 ? void 0 : state.overridden) && `${name} `,
429
+ !(state === null || state === void 0 ? void 0 : state.overridden) && (state === null || state === void 0 ? void 0 : state.overriding) && /*#__PURE__*/ _jsx(Box, {
430
+ fontWeight: "normal",
431
+ color: (theme)=>theme.palette.primary.main,
432
+ children: "(overriding)"
433
+ }),
434
+ (state === null || state === void 0 ? void 0 : state.overridden) && /*#__PURE__*/ _jsxs(_Fragment, {
435
+ children: [
436
+ /*#__PURE__*/ _jsx(Box, {
437
+ color: (theme)=>theme.palette.grey[500],
438
+ children: name
439
+ }),
440
+ /*#__PURE__*/ _jsx(Box, {
441
+ fontWeight: "normal",
442
+ color: (theme)=>theme.palette.grey[500],
443
+ children: "(overridden)"
444
+ })
445
+ ]
446
+ })
447
+ ]
448
+ });
449
+ }
284
450
 
285
451
  //# sourceMappingURL=VariableEditor.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Variables/VariableEditor.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, useMemo } from 'react';\nimport {\n Button,\n Stack,\n Box,\n TableContainer,\n TableBody,\n TableRow,\n TableCell as MuiTableCell,\n Table,\n TableHead,\n Switch,\n Typography,\n IconButton,\n Alert,\n styled,\n} from '@mui/material';\nimport AddIcon from 'mdi-material-ui/Plus';\nimport { VariableDefinition } from '@perses-dev/core';\nimport { useImmer } from 'use-immer';\nimport PencilIcon from 'mdi-material-ui/Pencil';\nimport TrashIcon from 'mdi-material-ui/TrashCan';\nimport ArrowUp from 'mdi-material-ui/ArrowUp';\nimport ArrowDown from 'mdi-material-ui/ArrowDown';\n\nimport { useDiscardChangesConfirmationDialog } from '../../context';\nimport { VariableEditForm } from './VariableEditorForm';\nimport { VARIABLE_TYPES } from './variable-model';\n\nfunction getVariableLabelByKind(kind: string) {\n return VARIABLE_TYPES.find((variableType) => variableType.kind === kind)?.label;\n}\n\nfunction getValidation(variableDefinitions: VariableDefinition[]) {\n const errors = [];\n\n /** Variable names must be unique */\n const variableNames = variableDefinitions.map((variableDefinition) => variableDefinition.spec.name);\n const uniqueVariableNames = new Set(variableNames);\n if (variableNames.length !== uniqueVariableNames.size) {\n errors.push('Variable names must be unique');\n }\n return {\n errors: errors,\n isValid: errors.length === 0,\n };\n}\n\nexport function VariableEditor(props: {\n variableDefinitions: VariableDefinition[];\n onChange: (variableDefinitions: VariableDefinition[]) => void;\n onCancel: () => void;\n}) {\n const [variableDefinitions, setVariableDefinitions] = useImmer(props.variableDefinitions);\n const [variableEditIdx, setVariableEditIdx] = useState<number | null>(null);\n\n const validation = useMemo(() => getValidation(variableDefinitions), [variableDefinitions]);\n const currentEditingVariableDefinition = typeof variableEditIdx === 'number' && variableDefinitions[variableEditIdx];\n\n const { openDiscardChangesConfirmationDialog, closeDiscardChangesConfirmationDialog } =\n useDiscardChangesConfirmationDialog();\n const handleCancel = () => {\n if (JSON.stringify(props.variableDefinitions) !== JSON.stringify(variableDefinitions)) {\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 removeVariable = (index: number) => {\n setVariableDefinitions((draft) => {\n draft.splice(index, 1);\n });\n };\n\n const addVariable = () => {\n setVariableDefinitions((draft) => {\n draft.push({\n kind: 'TextVariable',\n spec: {\n name: 'NewVariable',\n value: '',\n },\n });\n });\n setVariableEditIdx(variableDefinitions.length);\n };\n\n const toggleVariableVisibility = (index: number, visible: boolean) => {\n setVariableDefinitions((draft) => {\n const v = draft[index];\n if (!v) {\n return;\n }\n if (!v.spec.display) {\n v.spec.display = {\n name: v.spec.name,\n hidden: false,\n };\n }\n v.spec.display.hidden = visible === false;\n });\n };\n\n const changeVariableOrder = (index: number, direction: 'up' | 'down') => {\n setVariableDefinitions((draft) => {\n if (direction === 'up') {\n const prevElement = draft[index - 1];\n const currentElement = draft[index];\n if (index === 0 || !prevElement || !currentElement) {\n return;\n }\n draft[index - 1] = currentElement;\n draft[index] = prevElement;\n } else {\n const nextElement = draft[index + 1];\n const currentElement = draft[index];\n if (index === draft.length - 1 || !nextElement || !currentElement) {\n return;\n }\n draft[index + 1] = currentElement;\n draft[index] = nextElement;\n }\n });\n };\n\n return (\n <>\n {currentEditingVariableDefinition && (\n <VariableEditForm\n initialVariableDefinition={currentEditingVariableDefinition}\n onChange={(definition) => {\n setVariableDefinitions((draft) => {\n draft[variableEditIdx] = definition;\n setVariableEditIdx(null);\n });\n }}\n onCancel={() => setVariableEditIdx(null)}\n />\n )}\n {!currentEditingVariableDefinition && (\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\">Variables</Typography>\n <Stack direction=\"row\" spacing={1} marginLeft=\"auto\">\n <Button\n disabled={props.variableDefinitions === variableDefinitions || !validation.isValid}\n variant=\"contained\"\n onClick={() => {\n props.onChange(variableDefinitions);\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 {!validation.isValid &&\n validation.errors.map((error) => (\n <Alert severity=\"error\" key={error}>\n {error}\n </Alert>\n ))}\n <TableContainer>\n <Table sx={{ minWidth: 650 }} aria-label=\"table of variables\">\n <TableHead>\n <TableRow>\n <TableCell>Visibility</TableCell>\n <TableCell>Name</TableCell>\n <TableCell>Type</TableCell>\n <TableCell align=\"right\" />\n </TableRow>\n </TableHead>\n <TableBody>\n {variableDefinitions.map((v, idx) => (\n <TableRow key={v.spec.name}>\n <TableCell component=\"th\" scope=\"row\">\n <Switch\n checked={v.spec.display?.hidden !== true}\n onChange={(e) => {\n toggleVariableVisibility(idx, e.target.checked);\n }}\n />\n </TableCell>\n <TableCell component=\"th\" scope=\"row\" sx={{ fontWeight: 'bold' }}>\n {v.spec.name}\n </TableCell>\n <TableCell>{getVariableLabelByKind(v.kind) ?? v.kind}</TableCell>\n <TableCell align=\"right\">\n <IconButton onClick={() => changeVariableOrder(idx, 'up')} disabled={idx === 0}>\n <ArrowUp />\n </IconButton>\n <IconButton\n onClick={() => changeVariableOrder(idx, 'down')}\n disabled={idx === variableDefinitions.length - 1}\n >\n <ArrowDown />\n </IconButton>\n\n <IconButton onClick={() => setVariableEditIdx(idx)}>\n <PencilIcon />\n </IconButton>\n <IconButton onClick={() => removeVariable(idx)}>\n <TrashIcon />\n </IconButton>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n <Box display=\"flex\">\n <Button variant=\"contained\" startIcon={<AddIcon />} sx={{ marginLeft: 'auto' }} onClick={addVariable}>\n Add Variable\n </Button>\n </Box>\n </Stack>\n </Box>\n </>\n )}\n </>\n );\n}\n\nconst TableCell = styled(MuiTableCell)(({ theme }) => ({\n borderBottom: `solid 1px ${theme.palette.divider}`,\n}));\n"],"names":["useState","useMemo","Button","Stack","Box","TableContainer","TableBody","TableRow","TableCell","MuiTableCell","Table","TableHead","Switch","Typography","IconButton","Alert","styled","AddIcon","useImmer","PencilIcon","TrashIcon","ArrowUp","ArrowDown","useDiscardChangesConfirmationDialog","VariableEditForm","VARIABLE_TYPES","getVariableLabelByKind","kind","find","variableType","label","getValidation","variableDefinitions","errors","variableNames","map","variableDefinition","spec","name","uniqueVariableNames","Set","length","size","push","isValid","VariableEditor","props","setVariableDefinitions","variableEditIdx","setVariableEditIdx","validation","currentEditingVariableDefinition","openDiscardChangesConfirmationDialog","closeDiscardChangesConfirmationDialog","handleCancel","JSON","stringify","onDiscardChanges","onCancel","description","removeVariable","index","draft","splice","addVariable","value","toggleVariableVisibility","visible","v","display","hidden","changeVariableOrder","direction","prevElement","currentElement","nextElement","initialVariableDefinition","onChange","definition","sx","alignItems","padding","theme","spacing","borderBottom","palette","divider","variant","marginLeft","disabled","onClick","color","overflowY","error","severity","minWidth","aria-label","align","idx","component","scope","checked","e","target","fontWeight","startIcon"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/Variables/VariableEditor.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, useMemo } from 'react';\nimport {\n Button,\n Stack,\n Box,\n TableContainer,\n TableBody,\n TableRow,\n TableCell as MuiTableCell,\n Table,\n TableHead,\n Switch,\n Typography,\n IconButton,\n Alert,\n styled,\n capitalize,\n Tooltip,\n} from '@mui/material';\nimport AddIcon from 'mdi-material-ui/Plus';\nimport { VariableDefinition } from '@perses-dev/core';\nimport { useImmer } from 'use-immer';\nimport PencilIcon from 'mdi-material-ui/Pencil';\nimport TrashIcon from 'mdi-material-ui/TrashCan';\nimport ArrowUp from 'mdi-material-ui/ArrowUp';\nimport ArrowDown from 'mdi-material-ui/ArrowDown';\nimport ContentDuplicate from 'mdi-material-ui/ContentDuplicate';\nimport { Action, VariableEditForm, VariableState, VARIABLE_TYPES } from '@perses-dev/plugin-system';\nimport { ExternalVariableDefinition, useDiscardChangesConfirmationDialog } from '../../context';\nimport { hydrateTemplateVariableStates } from '../../context/TemplateVariableProvider/hydrationUtils';\n\nfunction getVariableLabelByKind(kind: string) {\n return VARIABLE_TYPES.find((variableType) => variableType.kind === kind)?.label;\n}\n\nfunction getValidation(variableDefinitions: VariableDefinition[]) {\n const errors = [];\n\n /** Variable names must be unique */\n const variableNames = variableDefinitions.map((variableDefinition) => variableDefinition.spec.name);\n const uniqueVariableNames = new Set(variableNames);\n if (variableNames.length !== uniqueVariableNames.size) {\n errors.push('Variable names must be unique');\n }\n return {\n errors: errors,\n isValid: errors.length === 0,\n };\n}\n\nexport function VariableEditor(props: {\n variableDefinitions: VariableDefinition[];\n externalVariableDefinitions: ExternalVariableDefinition[];\n onChange: (variableDefinitions: VariableDefinition[]) => void;\n onCancel: () => void;\n}) {\n const [variableDefinitions, setVariableDefinitions] = useImmer(props.variableDefinitions);\n const [variableEditIdx, setVariableEditIdx] = useState<number | null>(null);\n const [variableFormAction, setVariableFormAction] = useState<Action>('update');\n\n const externalVariableDefinitions = props.externalVariableDefinitions;\n const validation = useMemo(() => getValidation(variableDefinitions), [variableDefinitions]);\n const [variableState] = useMemo(() => {\n return [hydrateTemplateVariableStates(variableDefinitions, {}, externalVariableDefinitions)];\n }, [externalVariableDefinitions, variableDefinitions]);\n const currentEditingVariableDefinition = typeof variableEditIdx === 'number' && variableDefinitions[variableEditIdx];\n\n const { openDiscardChangesConfirmationDialog, closeDiscardChangesConfirmationDialog } =\n useDiscardChangesConfirmationDialog();\n const handleCancel = () => {\n if (JSON.stringify(props.variableDefinitions) !== JSON.stringify(variableDefinitions)) {\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 removeVariable = (index: number) => {\n setVariableDefinitions((draft) => {\n draft.splice(index, 1);\n });\n };\n\n const addVariable = () => {\n setVariableFormAction('create');\n setVariableDefinitions((draft) => {\n draft.push({\n kind: 'TextVariable',\n spec: {\n name: 'NewVariable',\n value: '',\n },\n });\n });\n setVariableEditIdx(variableDefinitions.length);\n };\n\n const editVariable = (index: number) => {\n setVariableFormAction('update');\n setVariableEditIdx(index);\n };\n\n const toggleVariableVisibility = (index: number, visible: boolean) => {\n setVariableDefinitions((draft) => {\n const v = draft[index];\n if (!v) {\n return;\n }\n if (!v.spec.display) {\n v.spec.display = {\n name: v.spec.name,\n hidden: false,\n };\n }\n v.spec.display.hidden = visible === false;\n });\n };\n\n const changeVariableOrder = (index: number, direction: 'up' | 'down') => {\n setVariableDefinitions((draft) => {\n if (direction === 'up') {\n const prevElement = draft[index - 1];\n const currentElement = draft[index];\n if (index === 0 || !prevElement || !currentElement) {\n return;\n }\n draft[index - 1] = currentElement;\n draft[index] = prevElement;\n } else {\n const nextElement = draft[index + 1];\n const currentElement = draft[index];\n if (index === draft.length - 1 || !nextElement || !currentElement) {\n return;\n }\n draft[index + 1] = currentElement;\n draft[index] = nextElement;\n }\n });\n };\n\n const overrideVariable = (v: VariableDefinition) => {\n setVariableDefinitions((draft) => {\n draft.push(v);\n });\n };\n\n return (\n <>\n {currentEditingVariableDefinition && (\n <VariableEditForm\n initialVariableDefinition={currentEditingVariableDefinition}\n onChange={(definition) => {\n setVariableDefinitions((draft) => {\n draft[variableEditIdx] = definition;\n setVariableEditIdx(null);\n });\n }}\n onCancel={() => {\n if (variableFormAction === 'create') {\n removeVariable(variableEditIdx);\n }\n setVariableEditIdx(null);\n }}\n action={variableFormAction}\n />\n )}\n {!currentEditingVariableDefinition && (\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\">Dashboard Variables</Typography>\n <Stack direction=\"row\" spacing={1} marginLeft=\"auto\">\n <Button\n disabled={props.variableDefinitions === variableDefinitions || !validation.isValid}\n variant=\"contained\"\n onClick={() => {\n props.onChange(variableDefinitions);\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 {!validation.isValid &&\n validation.errors.map((error) => (\n <Alert severity=\"error\" key={error}>\n {error}\n </Alert>\n ))}\n <TableContainer>\n <Table sx={{ minWidth: 650 }} aria-label=\"table of variables\">\n <TableHead>\n <TableRow>\n <TableCell>Visibility</TableCell>\n <TableCell>Name</TableCell>\n <TableCell>Type</TableCell>\n <TableCell align=\"right\" />\n </TableRow>\n </TableHead>\n <TableBody>\n {variableDefinitions.map((v, idx) => (\n <TableRow key={v.spec.name}>\n <TableCell component=\"th\" scope=\"row\">\n <Switch\n checked={v.spec.display?.hidden !== true}\n onChange={(e) => {\n toggleVariableVisibility(idx, e.target.checked);\n }}\n />\n </TableCell>\n <TableCell component=\"th\" scope=\"row\" sx={{ fontWeight: 'bold' }}>\n <VariableName name={v.spec.name} state={variableState.get({ name: v.spec.name })} />\n </TableCell>\n <TableCell>{getVariableLabelByKind(v.kind) ?? v.kind}</TableCell>\n <TableCell align=\"right\">\n <IconButton onClick={() => changeVariableOrder(idx, 'up')} disabled={idx === 0}>\n <ArrowUp />\n </IconButton>\n <IconButton\n onClick={() => changeVariableOrder(idx, 'down')}\n disabled={idx === variableDefinitions.length - 1}\n >\n <ArrowDown />\n </IconButton>\n\n <IconButton onClick={() => editVariable(idx)}>\n <PencilIcon />\n </IconButton>\n <IconButton onClick={() => removeVariable(idx)}>\n <TrashIcon />\n </IconButton>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n <Box display=\"flex\">\n <Button variant=\"contained\" startIcon={<AddIcon />} sx={{ marginLeft: 'auto' }} onClick={addVariable}>\n Add Variable\n </Button>\n </Box>\n </Stack>\n\n {externalVariableDefinitions.map((extVar) => (\n <Stack key={extVar.source}>\n <Typography variant=\"h2\">{capitalize(extVar.source)} Variables</Typography>\n <TableContainer>\n <Table sx={{ minWidth: 650 }} aria-label=\"table of variables\">\n <TableHead>\n <TableRow>\n <TableCell>Visibility</TableCell>\n <TableCell>Name</TableCell>\n <TableCell>Type</TableCell>\n <TableCell align=\"right\" />\n </TableRow>\n </TableHead>\n <TableBody>\n {extVar.definitions.map((v) => (\n <TableRow key={v.spec.name}>\n <TableCell component=\"th\" scope=\"row\">\n <Switch checked={v.spec.display?.hidden !== true} disabled />\n </TableCell>\n <TableCell component=\"th\" scope=\"row\" sx={{ fontWeight: 'bold' }}>\n <VariableName\n name={v.spec.name}\n state={variableState.get({ name: v.spec.name, source: extVar.source })}\n />\n </TableCell>\n <TableCell>{getVariableLabelByKind(v.kind) ?? v.kind}</TableCell>\n <TableCell align=\"right\">\n <Tooltip title=\"Override\">\n <IconButton\n onClick={() => overrideVariable(v)}\n disabled={!!variableState.get({ name: v.spec.name })}\n >\n <ContentDuplicate />\n </IconButton>\n </Tooltip>\n <IconButton disabled>\n <ArrowUp />\n </IconButton>\n <IconButton disabled>\n <ArrowDown />\n </IconButton>\n <IconButton disabled>\n <PencilIcon />\n </IconButton>\n <IconButton disabled>\n <TrashIcon />\n </IconButton>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </Stack>\n ))}\n </Box>\n </>\n )}\n </>\n );\n}\n\nconst TableCell = styled(MuiTableCell)(({ theme }) => ({\n borderBottom: `solid 1px ${theme.palette.divider}`,\n}));\n\nexport function VariableName(props: { name: string; state: VariableState | undefined }) {\n const { name, state } = props;\n return (\n <>\n {!state?.overridden && `${name} `}\n {!state?.overridden && state?.overriding && (\n <Box fontWeight=\"normal\" color={(theme) => theme.palette.primary.main}>\n (overriding)\n </Box>\n )}\n {state?.overridden && (\n <>\n <Box color={(theme) => theme.palette.grey[500]}>{name}</Box>\n <Box fontWeight=\"normal\" color={(theme) => theme.palette.grey[500]}>\n (overridden)\n </Box>\n </>\n )}\n </>\n );\n}\n"],"names":["useState","useMemo","Button","Stack","Box","TableContainer","TableBody","TableRow","TableCell","MuiTableCell","Table","TableHead","Switch","Typography","IconButton","Alert","styled","capitalize","Tooltip","AddIcon","useImmer","PencilIcon","TrashIcon","ArrowUp","ArrowDown","ContentDuplicate","VariableEditForm","VARIABLE_TYPES","useDiscardChangesConfirmationDialog","hydrateTemplateVariableStates","getVariableLabelByKind","kind","find","variableType","label","getValidation","variableDefinitions","errors","variableNames","map","variableDefinition","spec","name","uniqueVariableNames","Set","length","size","push","isValid","VariableEditor","props","setVariableDefinitions","variableEditIdx","setVariableEditIdx","variableFormAction","setVariableFormAction","externalVariableDefinitions","validation","variableState","currentEditingVariableDefinition","openDiscardChangesConfirmationDialog","closeDiscardChangesConfirmationDialog","handleCancel","JSON","stringify","onDiscardChanges","onCancel","description","removeVariable","index","draft","splice","addVariable","value","editVariable","toggleVariableVisibility","visible","v","display","hidden","changeVariableOrder","direction","prevElement","currentElement","nextElement","overrideVariable","initialVariableDefinition","onChange","definition","action","sx","alignItems","padding","theme","spacing","borderBottom","palette","divider","variant","marginLeft","disabled","onClick","color","overflowY","error","severity","minWidth","aria-label","align","idx","component","scope","checked","e","target","fontWeight","VariableName","state","get","startIcon","extVar","source","definitions","title","overridden","overriding","primary","main","grey"],"mappings":"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"}
@@ -1,3 +1,8 @@
1
1
  /// <reference types="react" />
2
+ import { VariableSpec } from '@perses-dev/core';
2
3
  export declare function TemplateVariableList(): JSX.Element;
4
+ export declare function TemplateVariableListItem({ spec, source }: {
5
+ spec: VariableSpec;
6
+ source?: string;
7
+ }): JSX.Element;
3
8
  //# sourceMappingURL=VariableList.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VariableList.d.ts","sourceRoot":"","sources":["../../../src/components/Variables/VariableList.tsx"],"names":[],"mappings":";AAqBA,wBAAgB,oBAAoB,gBAoBnC"}
1
+ {"version":3,"file":"VariableList.d.ts","sourceRoot":"","sources":["../../../src/components/Variables/VariableList.tsx"],"names":[],"mappings":";AAcA,OAAO,EAAsB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAYpE,wBAAgB,oBAAoB,gBAmBnC;AAED,wBAAgB,wBAAwB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,eAejG"}