@perses-dev/components 0.50.3 → 0.51.0-beta.1

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 (144) hide show
  1. package/dist/BarChart/BarChart.js.map +1 -1
  2. package/dist/ColorPicker/ColorPicker.js +2 -2
  3. package/dist/ColorPicker/ColorPicker.js.map +1 -1
  4. package/dist/ColorPicker/OptionsColorPicker.js.map +1 -1
  5. package/dist/ContentWithLegend/ContentWithLegend.js.map +1 -1
  6. package/dist/ContentWithLegend/model/content-with-legend-model.js +2 -3
  7. package/dist/ContentWithLegend/model/content-with-legend-model.js.map +1 -1
  8. package/dist/DragAndDrop/DragButton.js +1 -1
  9. package/dist/DragAndDrop/DragButton.js.map +1 -1
  10. package/dist/DragAndDrop/DropIndicator.js.map +1 -1
  11. package/dist/Drawer/Drawer.js +1 -1
  12. package/dist/Drawer/Drawer.js.map +1 -1
  13. package/dist/EChart/EChart.d.ts.map +1 -1
  14. package/dist/EChart/EChart.js +19 -5
  15. package/dist/EChart/EChart.js.map +1 -1
  16. package/dist/GaugeChart/GaugeChart.js +2 -5
  17. package/dist/GaugeChart/GaugeChart.js.map +1 -1
  18. package/dist/InfoTooltip/InfoTooltip.js +5 -4
  19. package/dist/InfoTooltip/InfoTooltip.js.map +1 -1
  20. package/dist/JSONEditor.js.map +1 -1
  21. package/dist/Legend/ListLegendItem.js +3 -4
  22. package/dist/Legend/ListLegendItem.js.map +1 -1
  23. package/dist/LineChart/LineChart.js +4 -8
  24. package/dist/LineChart/LineChart.js.map +1 -1
  25. package/dist/LinksEditor/LinksEditor.js +9 -18
  26. package/dist/LinksEditor/LinksEditor.js.map +1 -1
  27. package/dist/OptionsEditorLayout/OptionsEditorControl.js.map +1 -1
  28. package/dist/Overlay/Overlay.js +1 -1
  29. package/dist/Overlay/Overlay.js.map +1 -1
  30. package/dist/RefreshIntervalPicker/RefreshIntervalPicker.js.map +1 -1
  31. package/dist/SettingsAutocomplete/SettingsAutocomplete.js +1 -2
  32. package/dist/SettingsAutocomplete/SettingsAutocomplete.js.map +1 -1
  33. package/dist/StatChart/StatChart.js +3 -5
  34. package/dist/StatChart/StatChart.js.map +1 -1
  35. package/dist/StatChart/calculateFontSize.js +2 -4
  36. package/dist/StatChart/calculateFontSize.js.map +1 -1
  37. package/dist/StatusHistoryChart/StatusHistoryChart.js +1 -2
  38. package/dist/StatusHistoryChart/StatusHistoryChart.js.map +1 -1
  39. package/dist/StatusHistoryChart/utils/get-color.js.map +1 -1
  40. package/dist/Table/Table.d.ts +1 -1
  41. package/dist/Table/Table.d.ts.map +1 -1
  42. package/dist/Table/Table.js +7 -6
  43. package/dist/Table/Table.js.map +1 -1
  44. package/dist/Table/TableCell.d.ts +2 -1
  45. package/dist/Table/TableCell.d.ts.map +1 -1
  46. package/dist/Table/TableCell.js +9 -8
  47. package/dist/Table/TableCell.js.map +1 -1
  48. package/dist/Table/TableHeaderCell.js.map +1 -1
  49. package/dist/Table/VirtualizedTable.d.ts +2 -2
  50. package/dist/Table/VirtualizedTable.d.ts.map +1 -1
  51. package/dist/Table/VirtualizedTable.js +14 -15
  52. package/dist/Table/VirtualizedTable.js.map +1 -1
  53. package/dist/Table/hooks/useTableKeyboardNav.js +1 -1
  54. package/dist/Table/hooks/useTableKeyboardNav.js.map +1 -1
  55. package/dist/Table/hooks/useVirtualizedTableKeyboardNav.js +7 -13
  56. package/dist/Table/hooks/useVirtualizedTableKeyboardNav.js.map +1 -1
  57. package/dist/Table/model/table-model.d.ts +8 -1
  58. package/dist/Table/model/table-model.d.ts.map +1 -1
  59. package/dist/Table/model/table-model.js +5 -3
  60. package/dist/Table/model/table-model.js.map +1 -1
  61. package/dist/ThresholdsEditor/ThresholdInput.js.map +1 -1
  62. package/dist/ThresholdsEditor/ThresholdsEditor.js +16 -24
  63. package/dist/ThresholdsEditor/ThresholdsEditor.js.map +1 -1
  64. package/dist/TimeChart/TimeChart.js +7 -10
  65. package/dist/TimeChart/TimeChart.js.map +1 -1
  66. package/dist/TimeRangeSelector/DateTimeRangePicker.js +1 -1
  67. package/dist/TimeRangeSelector/DateTimeRangePicker.js.map +1 -1
  68. package/dist/TimeRangeSelector/TimeRangeSelector.js.map +1 -1
  69. package/dist/TimeRangeSelector/utils.js.map +1 -1
  70. package/dist/TimeSeriesTooltip/LineChartTooltip.js +6 -11
  71. package/dist/TimeSeriesTooltip/LineChartTooltip.js.map +1 -1
  72. package/dist/TimeSeriesTooltip/SeriesInfo.js +1 -2
  73. package/dist/TimeSeriesTooltip/SeriesInfo.js.map +1 -1
  74. package/dist/TimeSeriesTooltip/SeriesLabelsStack.js.map +1 -1
  75. package/dist/TimeSeriesTooltip/TimeChartTooltip.js +2 -3
  76. package/dist/TimeSeriesTooltip/TimeChartTooltip.js.map +1 -1
  77. package/dist/TimeSeriesTooltip/TooltipHeader.js +4 -10
  78. package/dist/TimeSeriesTooltip/TooltipHeader.js.map +1 -1
  79. package/dist/TimeSeriesTooltip/nearby-series.js +13 -23
  80. package/dist/TimeSeriesTooltip/nearby-series.js.map +1 -1
  81. package/dist/TimeSeriesTooltip/utils.js +2 -4
  82. package/dist/TimeSeriesTooltip/utils.js.map +1 -1
  83. package/dist/TransformsEditor/TransformEditor.js +4 -7
  84. package/dist/TransformsEditor/TransformEditor.js.map +1 -1
  85. package/dist/TransformsEditor/TransformEditorContainer.js +3 -5
  86. package/dist/TransformsEditor/TransformEditorContainer.js.map +1 -1
  87. package/dist/TransformsEditor/TransformsEditor.js +3 -6
  88. package/dist/TransformsEditor/TransformsEditor.js.map +1 -1
  89. package/dist/ValueMappingEditor/ValueMappingEditor.js +11 -24
  90. package/dist/ValueMappingEditor/ValueMappingEditor.js.map +1 -1
  91. package/dist/cjs/ColorPicker/ColorPicker.js +2 -2
  92. package/dist/cjs/ContentWithLegend/model/content-with-legend-model.js +2 -3
  93. package/dist/cjs/DragAndDrop/DragButton.js +1 -1
  94. package/dist/cjs/Drawer/Drawer.js +1 -1
  95. package/dist/cjs/EChart/EChart.js +18 -4
  96. package/dist/cjs/GaugeChart/GaugeChart.js +2 -5
  97. package/dist/cjs/InfoTooltip/InfoTooltip.js +5 -4
  98. package/dist/cjs/Legend/ListLegendItem.js +3 -4
  99. package/dist/cjs/LineChart/LineChart.js +4 -8
  100. package/dist/cjs/LinksEditor/LinksEditor.js +9 -18
  101. package/dist/cjs/Overlay/Overlay.js +1 -1
  102. package/dist/cjs/SettingsAutocomplete/SettingsAutocomplete.js +1 -2
  103. package/dist/cjs/StatChart/StatChart.js +3 -5
  104. package/dist/cjs/StatChart/calculateFontSize.js +2 -4
  105. package/dist/cjs/StatusHistoryChart/StatusHistoryChart.js +1 -2
  106. package/dist/cjs/Table/Table.js +7 -6
  107. package/dist/cjs/Table/TableCell.js +9 -8
  108. package/dist/cjs/Table/VirtualizedTable.js +14 -15
  109. package/dist/cjs/Table/hooks/useTableKeyboardNav.js +1 -1
  110. package/dist/cjs/Table/hooks/useVirtualizedTableKeyboardNav.js +7 -13
  111. package/dist/cjs/Table/model/table-model.js +8 -3
  112. package/dist/cjs/ThresholdsEditor/ThresholdsEditor.js +24 -32
  113. package/dist/cjs/TimeChart/TimeChart.js +6 -9
  114. package/dist/cjs/TimeRangeSelector/DateTimeRangePicker.js +2 -2
  115. package/dist/cjs/TimeSeriesTooltip/LineChartTooltip.js +6 -11
  116. package/dist/cjs/TimeSeriesTooltip/SeriesInfo.js +1 -2
  117. package/dist/cjs/TimeSeriesTooltip/TimeChartTooltip.js +2 -3
  118. package/dist/cjs/TimeSeriesTooltip/TooltipHeader.js +4 -10
  119. package/dist/cjs/TimeSeriesTooltip/nearby-series.js +13 -23
  120. package/dist/cjs/TimeSeriesTooltip/utils.js +2 -4
  121. package/dist/cjs/TransformsEditor/TransformEditor.js +4 -7
  122. package/dist/cjs/TransformsEditor/TransformEditorContainer.js +3 -5
  123. package/dist/cjs/TransformsEditor/TransformsEditor.js +3 -6
  124. package/dist/cjs/ValueMappingEditor/ValueMappingEditor.js +11 -24
  125. package/dist/cjs/context/TimeZoneProvider.js +1 -1
  126. package/dist/cjs/controls/TextField.js +1 -1
  127. package/dist/cjs/utils/chart-actions.js +1 -2
  128. package/dist/cjs/utils/format.js +1 -1
  129. package/dist/cjs/utils/theme-gen.js +5 -7
  130. package/dist/context/SnackbarProvider.js.map +1 -1
  131. package/dist/context/TimeZoneProvider.js +1 -1
  132. package/dist/context/TimeZoneProvider.js.map +1 -1
  133. package/dist/controls/TextField.js +1 -1
  134. package/dist/controls/TextField.js.map +1 -1
  135. package/dist/model/timeOption.js.map +1 -1
  136. package/dist/theme/component-overrides/alert.js.map +1 -1
  137. package/dist/utils/chart-actions.js +1 -2
  138. package/dist/utils/chart-actions.js.map +1 -1
  139. package/dist/utils/component-ids.js.map +1 -1
  140. package/dist/utils/format.js +1 -1
  141. package/dist/utils/format.js.map +1 -1
  142. package/dist/utils/theme-gen.js +5 -7
  143. package/dist/utils/theme-gen.js.map +1 -1
  144. package/package.json +5 -8
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/TransformsEditor/TransformEditor.tsx"],"sourcesContent":["// Copyright 2024 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport {\n Autocomplete,\n FormControlLabel,\n MenuItem,\n Stack,\n StackProps,\n Switch,\n Typography,\n TextField as MuiTextField,\n} from '@mui/material';\nimport {\n JoinByColumnValueTransform,\n MergeColumnsTransform,\n MergeIndexedColumnsTransform,\n MergeSeriesTransform,\n Transform,\n} from '@perses-dev/core';\nimport { ReactElement } from 'react';\nimport { TextField } from '../controls';\n\ninterface TransformSpecEditorProps<Spec> {\n value: Spec;\n onChange: (transform: Spec) => void;\n}\n\nfunction JoinByColumnValueTransformEditor({\n value,\n onChange,\n}: TransformSpecEditorProps<JoinByColumnValueTransform>): ReactElement {\n return (\n <Stack direction=\"row\">\n <Autocomplete\n freeSolo\n multiple\n id=\"join-columns\"\n sx={{ width: '100%' }}\n options={[]} // TODO: autofill columns name when query results is available to panel editors\n value={value.spec.columns ?? []}\n renderInput={(params) => <MuiTextField {...params} variant=\"outlined\" label=\"Columns\" required />}\n onChange={(_, columns) => {\n onChange({\n ...value,\n spec: {\n ...value.spec,\n columns: columns,\n },\n });\n }}\n />\n <FormControlLabel\n label=\"Enabled\"\n labelPlacement=\"start\"\n control={\n <Switch\n value={!value.spec.disabled}\n checked={!value.spec.disabled}\n onChange={(e) =>\n onChange({\n ...value,\n spec: { ...value.spec, disabled: !e.target.checked },\n })\n }\n />\n }\n />\n </Stack>\n );\n}\n\nfunction MergeColumnsTransformEditor({\n value,\n onChange,\n}: TransformSpecEditorProps<MergeColumnsTransform>): ReactElement {\n return (\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Autocomplete\n freeSolo\n multiple\n id=\"merge-columns-columns\"\n sx={{ width: '100%' }}\n options={[]}\n value={value.spec.columns ?? []}\n renderInput={(params) => <MuiTextField {...params} variant=\"outlined\" label=\"Columns\" required />}\n onChange={(_, columns) => {\n onChange({\n ...value,\n spec: {\n ...value.spec,\n columns: columns,\n },\n });\n }}\n />\n\n <TextField\n id=\"merge-columns-name\"\n variant=\"outlined\"\n label=\"Output Name\"\n value={value.spec.name ?? ''}\n sx={{ width: '100%' }}\n onChange={(name) => {\n onChange({\n ...value,\n spec: {\n ...value.spec,\n name: name,\n },\n });\n }}\n required\n />\n <FormControlLabel\n label=\"Enabled\"\n labelPlacement=\"start\"\n control={\n <Switch\n value={!value.spec.disabled}\n checked={!value.spec.disabled}\n onChange={(e) =>\n onChange({\n ...value,\n spec: { ...value.spec, disabled: !e.target.checked },\n })\n }\n />\n }\n />\n </Stack>\n );\n}\n\nfunction MergeIndexedColumnsTransformEditor({\n value,\n onChange,\n}: TransformSpecEditorProps<MergeIndexedColumnsTransform>): ReactElement {\n return (\n <Stack direction=\"row\">\n <TextField\n id=\"merge-indexed-columns\"\n variant=\"outlined\"\n label=\"Column\"\n placeholder=\"Example: 'value' for merging 'value #1', 'value #2' and 'value #...'\"\n value={value.spec.column ?? ''}\n sx={{ width: '100%' }}\n onChange={(column) => {\n onChange({\n ...value,\n spec: { ...value.spec, column: column },\n });\n }}\n required\n />\n <FormControlLabel\n label=\"Enabled\"\n labelPlacement=\"start\"\n control={\n <Switch\n value={!value.spec.disabled}\n checked={!value.spec.disabled}\n onChange={(e) =>\n onChange({\n ...value,\n spec: { ...value.spec, disabled: !e.target.checked },\n })\n }\n />\n }\n />\n </Stack>\n );\n}\n\nfunction MergeSeriesTransformEditor({ value, onChange }: TransformSpecEditorProps<MergeSeriesTransform>): ReactElement {\n return (\n <Stack direction=\"row\">\n <FormControlLabel\n label=\"Enabled\"\n labelPlacement=\"start\"\n control={\n <Switch\n value={!value.spec.disabled}\n checked={!value.spec.disabled}\n onChange={(e) =>\n onChange({\n ...value,\n spec: { ...value.spec, disabled: !e.target.checked },\n })\n }\n />\n }\n />\n </Stack>\n );\n}\n\nexport interface TransformEditorProps extends Omit<StackProps, 'children' | 'value' | 'onChange'> {\n value: Transform;\n onChange: (transform: Transform) => void;\n}\n\nexport function TransformEditor({ value, onChange, ...props }: TransformEditorProps): ReactElement {\n return (\n <Stack gap={2} sx={{ width: '100%' }} mt={1} {...props}>\n <TextField\n select\n label=\"Kind\"\n value={value.kind}\n onChange={(kind) => onChange({ ...value, kind: kind as unknown as Transform['kind'] } as Transform)}\n >\n <MenuItem value=\"JoinByColumnValue\">\n <Stack>\n <Typography>Join by column value</Typography>\n <Typography variant=\"caption\">Regroup rows with equal cell value in a column</Typography>\n </Stack>\n </MenuItem>\n <MenuItem value=\"MergeColumns\">\n <Stack>\n <Typography>Merge columns</Typography>\n <Typography variant=\"caption\">Multiple columns are merged to one column</Typography>\n </Stack>\n </MenuItem>\n <MenuItem value=\"MergeIndexedColumns\">\n <Stack>\n <Typography>Merge indexed columns</Typography>\n <Typography variant=\"caption\">Indexed columns are merged to one column</Typography>\n </Stack>\n </MenuItem>\n <MenuItem value=\"MergeSeries\">\n <Stack>\n <Typography>Merge series</Typography>\n <Typography variant=\"caption\">Series will be merged by their labels</Typography>\n </Stack>\n </MenuItem>\n </TextField>\n {value.kind === 'JoinByColumnValue' && <JoinByColumnValueTransformEditor value={value} onChange={onChange} />}\n {value.kind === 'MergeColumns' && <MergeColumnsTransformEditor value={value} onChange={onChange} />}\n {value.kind === 'MergeIndexedColumns' && <MergeIndexedColumnsTransformEditor value={value} onChange={onChange} />}\n {value.kind === 'MergeSeries' && <MergeSeriesTransformEditor value={value} onChange={onChange} />}\n </Stack>\n );\n}\n"],"names":["Autocomplete","FormControlLabel","MenuItem","Stack","Switch","Typography","TextField","MuiTextField","JoinByColumnValueTransformEditor","value","onChange","direction","freeSolo","multiple","id","sx","width","options","spec","columns","renderInput","params","variant","label","required","_","labelPlacement","control","disabled","checked","e","target","MergeColumnsTransformEditor","gap","alignItems","name","MergeIndexedColumnsTransformEditor","placeholder","column","MergeSeriesTransformEditor","TransformEditor","props","mt","select","kind"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/TransformsEditor/TransformEditor.tsx"],"sourcesContent":["// Copyright 2024 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport {\n Autocomplete,\n FormControlLabel,\n MenuItem,\n Stack,\n StackProps,\n Switch,\n Typography,\n TextField as MuiTextField,\n} from '@mui/material';\nimport {\n JoinByColumnValueTransform,\n MergeColumnsTransform,\n MergeIndexedColumnsTransform,\n MergeSeriesTransform,\n Transform,\n} from '@perses-dev/core';\nimport { ReactElement } from 'react';\nimport { TextField } from '../controls';\n\ninterface TransformSpecEditorProps<Spec> {\n value: Spec;\n onChange: (transform: Spec) => void;\n}\n\nfunction JoinByColumnValueTransformEditor({\n value,\n onChange,\n}: TransformSpecEditorProps<JoinByColumnValueTransform>): ReactElement {\n return (\n <Stack direction=\"row\">\n <Autocomplete\n freeSolo\n multiple\n id=\"join-columns\"\n sx={{ width: '100%' }}\n options={[]} // TODO: autofill columns name when query results is available to panel editors\n value={value.spec.columns ?? []}\n renderInput={(params) => <MuiTextField {...params} variant=\"outlined\" label=\"Columns\" required />}\n onChange={(_, columns) => {\n onChange({\n ...value,\n spec: {\n ...value.spec,\n columns: columns,\n },\n });\n }}\n />\n <FormControlLabel\n label=\"Enabled\"\n labelPlacement=\"start\"\n control={\n <Switch\n value={!value.spec.disabled}\n checked={!value.spec.disabled}\n onChange={(e) =>\n onChange({\n ...value,\n spec: { ...value.spec, disabled: !e.target.checked },\n })\n }\n />\n }\n />\n </Stack>\n );\n}\n\nfunction MergeColumnsTransformEditor({\n value,\n onChange,\n}: TransformSpecEditorProps<MergeColumnsTransform>): ReactElement {\n return (\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Autocomplete\n freeSolo\n multiple\n id=\"merge-columns-columns\"\n sx={{ width: '100%' }}\n options={[]}\n value={value.spec.columns ?? []}\n renderInput={(params) => <MuiTextField {...params} variant=\"outlined\" label=\"Columns\" required />}\n onChange={(_, columns) => {\n onChange({\n ...value,\n spec: {\n ...value.spec,\n columns: columns,\n },\n });\n }}\n />\n\n <TextField\n id=\"merge-columns-name\"\n variant=\"outlined\"\n label=\"Output Name\"\n value={value.spec.name ?? ''}\n sx={{ width: '100%' }}\n onChange={(name) => {\n onChange({\n ...value,\n spec: {\n ...value.spec,\n name: name,\n },\n });\n }}\n required\n />\n <FormControlLabel\n label=\"Enabled\"\n labelPlacement=\"start\"\n control={\n <Switch\n value={!value.spec.disabled}\n checked={!value.spec.disabled}\n onChange={(e) =>\n onChange({\n ...value,\n spec: { ...value.spec, disabled: !e.target.checked },\n })\n }\n />\n }\n />\n </Stack>\n );\n}\n\nfunction MergeIndexedColumnsTransformEditor({\n value,\n onChange,\n}: TransformSpecEditorProps<MergeIndexedColumnsTransform>): ReactElement {\n return (\n <Stack direction=\"row\">\n <TextField\n id=\"merge-indexed-columns\"\n variant=\"outlined\"\n label=\"Column\"\n placeholder=\"Example: 'value' for merging 'value #1', 'value #2' and 'value #...'\"\n value={value.spec.column ?? ''}\n sx={{ width: '100%' }}\n onChange={(column) => {\n onChange({\n ...value,\n spec: { ...value.spec, column: column },\n });\n }}\n required\n />\n <FormControlLabel\n label=\"Enabled\"\n labelPlacement=\"start\"\n control={\n <Switch\n value={!value.spec.disabled}\n checked={!value.spec.disabled}\n onChange={(e) =>\n onChange({\n ...value,\n spec: { ...value.spec, disabled: !e.target.checked },\n })\n }\n />\n }\n />\n </Stack>\n );\n}\n\nfunction MergeSeriesTransformEditor({ value, onChange }: TransformSpecEditorProps<MergeSeriesTransform>): ReactElement {\n return (\n <Stack direction=\"row\">\n <FormControlLabel\n label=\"Enabled\"\n labelPlacement=\"start\"\n control={\n <Switch\n value={!value.spec.disabled}\n checked={!value.spec.disabled}\n onChange={(e) =>\n onChange({\n ...value,\n spec: { ...value.spec, disabled: !e.target.checked },\n })\n }\n />\n }\n />\n </Stack>\n );\n}\n\nexport interface TransformEditorProps extends Omit<StackProps, 'children' | 'value' | 'onChange'> {\n value: Transform;\n onChange: (transform: Transform) => void;\n}\n\nexport function TransformEditor({ value, onChange, ...props }: TransformEditorProps): ReactElement {\n return (\n <Stack gap={2} sx={{ width: '100%' }} mt={1} {...props}>\n <TextField\n select\n label=\"Kind\"\n value={value.kind}\n onChange={(kind) => onChange({ ...value, kind: kind as unknown as Transform['kind'] } as Transform)}\n >\n <MenuItem value=\"JoinByColumnValue\">\n <Stack>\n <Typography>Join by column value</Typography>\n <Typography variant=\"caption\">Regroup rows with equal cell value in a column</Typography>\n </Stack>\n </MenuItem>\n <MenuItem value=\"MergeColumns\">\n <Stack>\n <Typography>Merge columns</Typography>\n <Typography variant=\"caption\">Multiple columns are merged to one column</Typography>\n </Stack>\n </MenuItem>\n <MenuItem value=\"MergeIndexedColumns\">\n <Stack>\n <Typography>Merge indexed columns</Typography>\n <Typography variant=\"caption\">Indexed columns are merged to one column</Typography>\n </Stack>\n </MenuItem>\n <MenuItem value=\"MergeSeries\">\n <Stack>\n <Typography>Merge series</Typography>\n <Typography variant=\"caption\">Series will be merged by their labels</Typography>\n </Stack>\n </MenuItem>\n </TextField>\n {value.kind === 'JoinByColumnValue' && <JoinByColumnValueTransformEditor value={value} onChange={onChange} />}\n {value.kind === 'MergeColumns' && <MergeColumnsTransformEditor value={value} onChange={onChange} />}\n {value.kind === 'MergeIndexedColumns' && <MergeIndexedColumnsTransformEditor value={value} onChange={onChange} />}\n {value.kind === 'MergeSeries' && <MergeSeriesTransformEditor value={value} onChange={onChange} />}\n </Stack>\n );\n}\n"],"names":["Autocomplete","FormControlLabel","MenuItem","Stack","Switch","Typography","TextField","MuiTextField","JoinByColumnValueTransformEditor","value","onChange","direction","freeSolo","multiple","id","sx","width","options","spec","columns","renderInput","params","variant","label","required","_","labelPlacement","control","disabled","checked","e","target","MergeColumnsTransformEditor","gap","alignItems","name","MergeIndexedColumnsTransformEditor","placeholder","column","MergeSeriesTransformEditor","TransformEditor","props","mt","select","kind"],"mappings":"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"}
@@ -20,14 +20,12 @@ import DeleteIcon from 'mdi-material-ui/DeleteOutline';
20
20
  import { TRANSFORM_TEXT } from '@perses-dev/core';
21
21
  import { TransformEditor } from './TransformEditor';
22
22
  export function TransformEditorContainer({ index, value, isCollapsed, onChange, onCollapse, onDelete, ...props }) {
23
- var _value_spec, _value_spec1;
24
23
  function handleTransformDisable() {
25
- var _value_spec;
26
24
  onChange({
27
25
  ...value,
28
26
  spec: {
29
27
  ...value.spec,
30
- disabled: !((_value_spec = value.spec) === null || _value_spec === void 0 ? void 0 : _value_spec.disabled)
28
+ disabled: !value.spec?.disabled
31
29
  }
32
30
  });
33
31
  }
@@ -75,7 +73,7 @@ export function TransformEditorContainer({ index, value, isCollapsed, onChange,
75
73
  isCollapsed && /*#__PURE__*/ _jsxs(_Fragment, {
76
74
  children: [
77
75
  /*#__PURE__*/ _jsx(Tooltip, {
78
- title: ((_value_spec = value.spec) === null || _value_spec === void 0 ? void 0 : _value_spec.disabled) ? 'Enable transformation' : 'Disable transformation',
76
+ title: value.spec?.disabled ? 'Enable transformation' : 'Disable transformation',
79
77
  placement: "top",
80
78
  children: /*#__PURE__*/ _jsx(IconButton, {
81
79
  size: "small",
@@ -83,7 +81,7 @@ export function TransformEditorContainer({ index, value, isCollapsed, onChange,
83
81
  marginLeft: 'auto'
84
82
  },
85
83
  onClick: handleTransformDisable,
86
- children: ((_value_spec1 = value.spec) === null || _value_spec1 === void 0 ? void 0 : _value_spec1.disabled) ? /*#__PURE__*/ _jsx(EyeOffIcon, {}) : /*#__PURE__*/ _jsx(EyeIcon, {})
84
+ children: value.spec?.disabled ? /*#__PURE__*/ _jsx(EyeOffIcon, {}) : /*#__PURE__*/ _jsx(EyeIcon, {})
87
85
  })
88
86
  }),
89
87
  /*#__PURE__*/ _jsx(Divider, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/TransformsEditor/TransformEditorContainer.tsx"],"sourcesContent":["// Copyright 2024 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Divider, IconButton, Stack, Tooltip, Typography } from '@mui/material';\nimport ChevronRight from 'mdi-material-ui/ChevronRight';\nimport ChevronDown from 'mdi-material-ui/ChevronDown';\nimport EyeOffIcon from 'mdi-material-ui/EyeOffOutline';\nimport EyeIcon from 'mdi-material-ui/EyeOutline';\nimport DeleteIcon from 'mdi-material-ui/DeleteOutline';\nimport { Transform, TRANSFORM_TEXT } from '@perses-dev/core';\nimport { ReactElement } from 'react';\nimport { TransformEditor, TransformEditorProps } from './TransformEditor';\n\nexport interface TransformEditorContainerProps extends TransformEditorProps {\n index?: number;\n isCollapsed: boolean;\n onCollapse: (collapsed: boolean) => void;\n onDelete: () => void;\n}\n\nexport function TransformEditorContainer({\n index,\n value,\n isCollapsed,\n onChange,\n onCollapse,\n onDelete,\n ...props\n}: TransformEditorContainerProps): ReactElement {\n function handleTransformDisable(): void {\n onChange({ ...value, spec: { ...value.spec, disabled: !value.spec?.disabled } } as Transform);\n }\n\n return (\n <Stack {...props}>\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n borderBottom={1}\n borderColor={(theme) => theme.palette.divider}\n justifyContent=\"space-between\"\n gap={4}\n >\n <Stack direction=\"row\" gap={1}>\n <IconButton data-testid={`transform-toggle#${index}`} size=\"small\" onClick={() => onCollapse(!isCollapsed)}>\n {isCollapsed ? <ChevronRight /> : <ChevronDown />}\n </IconButton>\n <Typography variant=\"overline\" component=\"h4\" sx={{ textTransform: 'none' }}>\n {value.kind ? (\n <span>\n <strong>{TRANSFORM_TEXT[value.kind]}</strong>\n </span>\n ) : (\n <strong>Select a transformation kind</strong>\n )}\n </Typography>\n </Stack>\n\n <Stack direction=\"row\" gap={1}>\n {isCollapsed && (\n <>\n <Tooltip\n title={value.spec?.disabled ? 'Enable transformation' : 'Disable transformation'}\n placement=\"top\"\n >\n <IconButton size=\"small\" sx={{ marginLeft: 'auto' }} onClick={handleTransformDisable}>\n {value.spec?.disabled ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </Tooltip>\n <Divider flexItem orientation=\"vertical\" variant=\"middle\" />\n </>\n )}\n <Tooltip title=\"Remove transformation\" placement=\"top\">\n <IconButton size=\"small\" sx={{ marginLeft: 'auto' }} onClick={onDelete}>\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n </Stack>\n </Stack>\n {!isCollapsed && <TransformEditor value={value} onChange={onChange} />}\n </Stack>\n );\n}\n"],"names":["Divider","IconButton","Stack","Tooltip","Typography","ChevronRight","ChevronDown","EyeOffIcon","EyeIcon","DeleteIcon","TRANSFORM_TEXT","TransformEditor","TransformEditorContainer","index","value","isCollapsed","onChange","onCollapse","onDelete","props","handleTransformDisable","spec","disabled","direction","alignItems","borderBottom","borderColor","theme","palette","divider","justifyContent","gap","data-testid","size","onClick","variant","component","sx","textTransform","kind","span","strong","title","placement","marginLeft","flexItem","orientation"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;AAEjC,SAASA,OAAO,EAAEC,UAAU,EAAEC,KAAK,EAAEC,OAAO,EAAEC,UAAU,QAAQ,gBAAgB;AAChF,OAAOC,kBAAkB,+BAA+B;AACxD,OAAOC,iBAAiB,8BAA8B;AACtD,OAAOC,gBAAgB,gCAAgC;AACvD,OAAOC,aAAa,6BAA6B;AACjD,OAAOC,gBAAgB,gCAAgC;AACvD,SAAoBC,cAAc,QAAQ,mBAAmB;AAE7D,SAASC,eAAe,QAA8B,oBAAoB;AAS1E,OAAO,SAASC,yBAAyB,EACvCC,KAAK,EACLC,KAAK,EACLC,WAAW,EACXC,QAAQ,EACRC,UAAU,EACVC,QAAQ,EACR,GAAGC,OAC2B;QAkCTL,aAIJA;IArCjB,SAASM;YACgDN;QAAvDE,SAAS;YAAE,GAAGF,KAAK;YAAEO,MAAM;gBAAE,GAAGP,MAAMO,IAAI;gBAAEC,UAAU,GAACR,cAAAA,MAAMO,IAAI,cAAVP,kCAAAA,YAAYQ,QAAQ;YAAC;QAAE;IAChF;IAEA,qBACE,MAACpB;QAAO,GAAGiB,KAAK;;0BACd,MAACjB;gBACCqB,WAAU;gBACVC,YAAW;gBACXC,cAAc;gBACdC,aAAa,CAACC,QAAUA,MAAMC,OAAO,CAACC,OAAO;gBAC7CC,gBAAe;gBACfC,KAAK;;kCAEL,MAAC7B;wBAAMqB,WAAU;wBAAMQ,KAAK;;0CAC1B,KAAC9B;gCAAW+B,eAAa,CAAC,iBAAiB,EAAEnB,MAAM,CAAC;gCAAEoB,MAAK;gCAAQC,SAAS,IAAMjB,WAAW,CAACF;0CAC3FA,4BAAc,KAACV,kCAAkB,KAACC;;0CAErC,KAACF;gCAAW+B,SAAQ;gCAAWC,WAAU;gCAAKC,IAAI;oCAAEC,eAAe;gCAAO;0CACvExB,MAAMyB,IAAI,iBACT,KAACC;8CACC,cAAA,KAACC;kDAAQ/B,cAAc,CAACI,MAAMyB,IAAI,CAAC;;mDAGrC,KAACE;8CAAO;;;;;kCAKd,MAACvC;wBAAMqB,WAAU;wBAAMQ,KAAK;;4BACzBhB,6BACC;;kDACE,KAACZ;wCACCuC,OAAO5B,EAAAA,cAAAA,MAAMO,IAAI,cAAVP,kCAAAA,YAAYQ,QAAQ,IAAG,0BAA0B;wCACxDqB,WAAU;kDAEV,cAAA,KAAC1C;4CAAWgC,MAAK;4CAAQI,IAAI;gDAAEO,YAAY;4CAAO;4CAAGV,SAASd;sDAC3DN,EAAAA,eAAAA,MAAMO,IAAI,cAAVP,mCAAAA,aAAYQ,QAAQ,kBAAG,KAACf,gCAAgB,KAACC;;;kDAG9C,KAACR;wCAAQ6C,QAAQ;wCAACC,aAAY;wCAAWX,SAAQ;;;;0CAGrD,KAAChC;gCAAQuC,OAAM;gCAAwBC,WAAU;0CAC/C,cAAA,KAAC1C;oCAAWgC,MAAK;oCAAQI,IAAI;wCAAEO,YAAY;oCAAO;oCAAGV,SAAShB;8CAC5D,cAAA,KAACT;;;;;;;YAKR,CAACM,6BAAe,KAACJ;gBAAgBG,OAAOA;gBAAOE,UAAUA;;;;AAGhE"}
1
+ {"version":3,"sources":["../../src/TransformsEditor/TransformEditorContainer.tsx"],"sourcesContent":["// Copyright 2024 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Divider, IconButton, Stack, Tooltip, Typography } from '@mui/material';\nimport ChevronRight from 'mdi-material-ui/ChevronRight';\nimport ChevronDown from 'mdi-material-ui/ChevronDown';\nimport EyeOffIcon from 'mdi-material-ui/EyeOffOutline';\nimport EyeIcon from 'mdi-material-ui/EyeOutline';\nimport DeleteIcon from 'mdi-material-ui/DeleteOutline';\nimport { Transform, TRANSFORM_TEXT } from '@perses-dev/core';\nimport { ReactElement } from 'react';\nimport { TransformEditor, TransformEditorProps } from './TransformEditor';\n\nexport interface TransformEditorContainerProps extends TransformEditorProps {\n index?: number;\n isCollapsed: boolean;\n onCollapse: (collapsed: boolean) => void;\n onDelete: () => void;\n}\n\nexport function TransformEditorContainer({\n index,\n value,\n isCollapsed,\n onChange,\n onCollapse,\n onDelete,\n ...props\n}: TransformEditorContainerProps): ReactElement {\n function handleTransformDisable(): void {\n onChange({ ...value, spec: { ...value.spec, disabled: !value.spec?.disabled } } as Transform);\n }\n\n return (\n <Stack {...props}>\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n borderBottom={1}\n borderColor={(theme) => theme.palette.divider}\n justifyContent=\"space-between\"\n gap={4}\n >\n <Stack direction=\"row\" gap={1}>\n <IconButton data-testid={`transform-toggle#${index}`} size=\"small\" onClick={() => onCollapse(!isCollapsed)}>\n {isCollapsed ? <ChevronRight /> : <ChevronDown />}\n </IconButton>\n <Typography variant=\"overline\" component=\"h4\" sx={{ textTransform: 'none' }}>\n {value.kind ? (\n <span>\n <strong>{TRANSFORM_TEXT[value.kind]}</strong>\n </span>\n ) : (\n <strong>Select a transformation kind</strong>\n )}\n </Typography>\n </Stack>\n\n <Stack direction=\"row\" gap={1}>\n {isCollapsed && (\n <>\n <Tooltip\n title={value.spec?.disabled ? 'Enable transformation' : 'Disable transformation'}\n placement=\"top\"\n >\n <IconButton size=\"small\" sx={{ marginLeft: 'auto' }} onClick={handleTransformDisable}>\n {value.spec?.disabled ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </Tooltip>\n <Divider flexItem orientation=\"vertical\" variant=\"middle\" />\n </>\n )}\n <Tooltip title=\"Remove transformation\" placement=\"top\">\n <IconButton size=\"small\" sx={{ marginLeft: 'auto' }} onClick={onDelete}>\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n </Stack>\n </Stack>\n {!isCollapsed && <TransformEditor value={value} onChange={onChange} />}\n </Stack>\n );\n}\n"],"names":["Divider","IconButton","Stack","Tooltip","Typography","ChevronRight","ChevronDown","EyeOffIcon","EyeIcon","DeleteIcon","TRANSFORM_TEXT","TransformEditor","TransformEditorContainer","index","value","isCollapsed","onChange","onCollapse","onDelete","props","handleTransformDisable","spec","disabled","direction","alignItems","borderBottom","borderColor","theme","palette","divider","justifyContent","gap","data-testid","size","onClick","variant","component","sx","textTransform","kind","span","strong","title","placement","marginLeft","flexItem","orientation"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;AAEjC,SAASA,OAAO,EAAEC,UAAU,EAAEC,KAAK,EAAEC,OAAO,EAAEC,UAAU,QAAQ,gBAAgB;AAChF,OAAOC,kBAAkB,+BAA+B;AACxD,OAAOC,iBAAiB,8BAA8B;AACtD,OAAOC,gBAAgB,gCAAgC;AACvD,OAAOC,aAAa,6BAA6B;AACjD,OAAOC,gBAAgB,gCAAgC;AACvD,SAAoBC,cAAc,QAAQ,mBAAmB;AAE7D,SAASC,eAAe,QAA8B,oBAAoB;AAS1E,OAAO,SAASC,yBAAyB,EACvCC,KAAK,EACLC,KAAK,EACLC,WAAW,EACXC,QAAQ,EACRC,UAAU,EACVC,QAAQ,EACR,GAAGC,OAC2B;IAC9B,SAASC;QACPJ,SAAS;YAAE,GAAGF,KAAK;YAAEO,MAAM;gBAAE,GAAGP,MAAMO,IAAI;gBAAEC,UAAU,CAACR,MAAMO,IAAI,EAAEC;YAAS;QAAE;IAChF;IAEA,qBACE,MAACpB;QAAO,GAAGiB,KAAK;;0BACd,MAACjB;gBACCqB,WAAU;gBACVC,YAAW;gBACXC,cAAc;gBACdC,aAAa,CAACC,QAAUA,MAAMC,OAAO,CAACC,OAAO;gBAC7CC,gBAAe;gBACfC,KAAK;;kCAEL,MAAC7B;wBAAMqB,WAAU;wBAAMQ,KAAK;;0CAC1B,KAAC9B;gCAAW+B,eAAa,CAAC,iBAAiB,EAAEnB,OAAO;gCAAEoB,MAAK;gCAAQC,SAAS,IAAMjB,WAAW,CAACF;0CAC3FA,4BAAc,KAACV,kCAAkB,KAACC;;0CAErC,KAACF;gCAAW+B,SAAQ;gCAAWC,WAAU;gCAAKC,IAAI;oCAAEC,eAAe;gCAAO;0CACvExB,MAAMyB,IAAI,iBACT,KAACC;8CACC,cAAA,KAACC;kDAAQ/B,cAAc,CAACI,MAAMyB,IAAI,CAAC;;mDAGrC,KAACE;8CAAO;;;;;kCAKd,MAACvC;wBAAMqB,WAAU;wBAAMQ,KAAK;;4BACzBhB,6BACC;;kDACE,KAACZ;wCACCuC,OAAO5B,MAAMO,IAAI,EAAEC,WAAW,0BAA0B;wCACxDqB,WAAU;kDAEV,cAAA,KAAC1C;4CAAWgC,MAAK;4CAAQI,IAAI;gDAAEO,YAAY;4CAAO;4CAAGV,SAASd;sDAC3DN,MAAMO,IAAI,EAAEC,yBAAW,KAACf,gCAAgB,KAACC;;;kDAG9C,KAACR;wCAAQ6C,QAAQ;wCAACC,aAAY;wCAAWX,SAAQ;;;;0CAGrD,KAAChC;gCAAQuC,OAAM;gCAAwBC,WAAU;0CAC/C,cAAA,KAAC1C;oCAAWgC,MAAK;oCAAQI,IAAI;wCAAEO,YAAY;oCAAO;oCAAGV,SAAShB;8CAC5D,cAAA,KAACT;;;;;;;YAKR,CAACM,6BAAe,KAACJ;gBAAgBG,OAAOA;gBAAOE,UAAUA;;;;AAGhE"}
@@ -66,17 +66,14 @@ export function TransformsEditor({ value, onChange, ...props }) {
66
66
  gap: 1,
67
67
  ...props,
68
68
  children: [
69
- value.map((transform, i)=>{
70
- var _transformsCollapsed_i;
71
- return /*#__PURE__*/ _jsx(TransformEditorContainer, {
69
+ value.map((transform, i)=>/*#__PURE__*/ _jsx(TransformEditorContainer, {
72
70
  index: i,
73
71
  value: transform,
74
- isCollapsed: (_transformsCollapsed_i = transformsCollapsed[i]) !== null && _transformsCollapsed_i !== void 0 ? _transformsCollapsed_i : true,
72
+ isCollapsed: transformsCollapsed[i] ?? true,
75
73
  onChange: (updatedTransform)=>handleTransformChange(i, updatedTransform),
76
74
  onDelete: ()=>handleTransformDelete(i),
77
75
  onCollapse: (collapsed)=>handleTransformCollapseExpand(i, collapsed)
78
- }, i);
79
- }),
76
+ }, i)),
80
77
  /*#__PURE__*/ _jsx(Button, {
81
78
  variant: "contained",
82
79
  startIcon: /*#__PURE__*/ _jsx(AddIcon, {}),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/TransformsEditor/TransformsEditor.tsx"],"sourcesContent":["// Copyright 2024 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Transform } from '@perses-dev/core';\nimport { Button, Stack, StackProps } from '@mui/material';\nimport { ReactElement, useState } from 'react';\nimport AddIcon from 'mdi-material-ui/Plus';\nimport { TransformEditorContainer } from './TransformEditorContainer';\n\nexport interface TransformsEditorProps extends Omit<StackProps, 'onChange'> {\n value: Transform[];\n onChange: (transforms: Transform[]) => void;\n}\n\nexport function TransformsEditor({ value, onChange, ...props }: TransformsEditorProps): ReactElement {\n const [transformsCollapsed, setTransformsCollapsed] = useState(value.map(() => true));\n\n function handleTransformChange(index: number, transform: Transform): void {\n const updatedTransforms = [...value];\n updatedTransforms[index] = transform;\n onChange(updatedTransforms);\n }\n\n function handleTransformAdd(): void {\n const updatedTransforms = [...value];\n // @ts-expect-error: Unknown transform\n updatedTransforms.push({ kind: '', spec: {} });\n onChange(updatedTransforms);\n setTransformsCollapsed((prev) => {\n prev.push(false);\n return [...prev];\n });\n }\n\n function handleTransformDelete(index: number): void {\n const updatedTransforms = [...value];\n updatedTransforms.splice(index, 1);\n onChange(updatedTransforms);\n setTransformsCollapsed((prev) => {\n prev.splice(index, 1);\n return [...prev];\n });\n }\n\n function handleTransformCollapseExpand(index: number, collapsed: boolean): void {\n setTransformsCollapsed((prev) => {\n prev[index] = collapsed;\n return [...prev];\n });\n }\n\n return (\n <Stack gap={1} {...props}>\n {value.map((transform, i) => (\n <TransformEditorContainer\n key={i}\n index={i}\n value={transform}\n isCollapsed={transformsCollapsed[i] ?? true}\n onChange={(updatedTransform: Transform) => handleTransformChange(i, updatedTransform)}\n onDelete={() => handleTransformDelete(i)}\n onCollapse={(collapsed) => handleTransformCollapseExpand(i, collapsed)}\n />\n ))}\n\n <Button variant=\"contained\" startIcon={<AddIcon />} sx={{ marginTop: 1 }} onClick={handleTransformAdd}>\n Add Transformation\n </Button>\n </Stack>\n );\n}\n"],"names":["Button","Stack","useState","AddIcon","TransformEditorContainer","TransformsEditor","value","onChange","props","transformsCollapsed","setTransformsCollapsed","map","handleTransformChange","index","transform","updatedTransforms","handleTransformAdd","push","kind","spec","prev","handleTransformDelete","splice","handleTransformCollapseExpand","collapsed","gap","i","isCollapsed","updatedTransform","onDelete","onCollapse","variant","startIcon","sx","marginTop","onClick"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;AAGjC,SAASA,MAAM,EAAEC,KAAK,QAAoB,gBAAgB;AAC1D,SAAuBC,QAAQ,QAAQ,QAAQ;AAC/C,OAAOC,aAAa,uBAAuB;AAC3C,SAASC,wBAAwB,QAAQ,6BAA6B;AAOtE,OAAO,SAASC,iBAAiB,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGC,OAA8B;IACnF,MAAM,CAACC,qBAAqBC,uBAAuB,GAAGR,SAASI,MAAMK,GAAG,CAAC,IAAM;IAE/E,SAASC,sBAAsBC,KAAa,EAAEC,SAAoB;QAChE,MAAMC,oBAAoB;eAAIT;SAAM;QACpCS,iBAAiB,CAACF,MAAM,GAAGC;QAC3BP,SAASQ;IACX;IAEA,SAASC;QACP,MAAMD,oBAAoB;eAAIT;SAAM;QACpC,sCAAsC;QACtCS,kBAAkBE,IAAI,CAAC;YAAEC,MAAM;YAAIC,MAAM,CAAC;QAAE;QAC5CZ,SAASQ;QACTL,uBAAuB,CAACU;YACtBA,KAAKH,IAAI,CAAC;YACV,OAAO;mBAAIG;aAAK;QAClB;IACF;IAEA,SAASC,sBAAsBR,KAAa;QAC1C,MAAME,oBAAoB;eAAIT;SAAM;QACpCS,kBAAkBO,MAAM,CAACT,OAAO;QAChCN,SAASQ;QACTL,uBAAuB,CAACU;YACtBA,KAAKE,MAAM,CAACT,OAAO;YACnB,OAAO;mBAAIO;aAAK;QAClB;IACF;IAEA,SAASG,8BAA8BV,KAAa,EAAEW,SAAkB;QACtEd,uBAAuB,CAACU;YACtBA,IAAI,CAACP,MAAM,GAAGW;YACd,OAAO;mBAAIJ;aAAK;QAClB;IACF;IAEA,qBACE,MAACnB;QAAMwB,KAAK;QAAI,GAAGjB,KAAK;;YACrBF,MAAMK,GAAG,CAAC,CAACG,WAAWY;oBAKNjB;qCAJf,KAACL;oBAECS,OAAOa;oBACPpB,OAAOQ;oBACPa,aAAalB,CAAAA,yBAAAA,mBAAmB,CAACiB,EAAE,cAAtBjB,oCAAAA,yBAA0B;oBACvCF,UAAU,CAACqB,mBAAgChB,sBAAsBc,GAAGE;oBACpEC,UAAU,IAAMR,sBAAsBK;oBACtCI,YAAY,CAACN,YAAcD,8BAA8BG,GAAGF;mBANvDE;;0BAUT,KAAC1B;gBAAO+B,SAAQ;gBAAYC,yBAAW,KAAC7B;gBAAY8B,IAAI;oBAAEC,WAAW;gBAAE;gBAAGC,SAASnB;0BAAoB;;;;AAK7G"}
1
+ {"version":3,"sources":["../../src/TransformsEditor/TransformsEditor.tsx"],"sourcesContent":["// Copyright 2024 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Transform } from '@perses-dev/core';\nimport { Button, Stack, StackProps } from '@mui/material';\nimport { ReactElement, useState } from 'react';\nimport AddIcon from 'mdi-material-ui/Plus';\nimport { TransformEditorContainer } from './TransformEditorContainer';\n\nexport interface TransformsEditorProps extends Omit<StackProps, 'onChange'> {\n value: Transform[];\n onChange: (transforms: Transform[]) => void;\n}\n\nexport function TransformsEditor({ value, onChange, ...props }: TransformsEditorProps): ReactElement {\n const [transformsCollapsed, setTransformsCollapsed] = useState(value.map(() => true));\n\n function handleTransformChange(index: number, transform: Transform): void {\n const updatedTransforms = [...value];\n updatedTransforms[index] = transform;\n onChange(updatedTransforms);\n }\n\n function handleTransformAdd(): void {\n const updatedTransforms = [...value];\n // @ts-expect-error: Unknown transform\n updatedTransforms.push({ kind: '', spec: {} });\n onChange(updatedTransforms);\n setTransformsCollapsed((prev) => {\n prev.push(false);\n return [...prev];\n });\n }\n\n function handleTransformDelete(index: number): void {\n const updatedTransforms = [...value];\n updatedTransforms.splice(index, 1);\n onChange(updatedTransforms);\n setTransformsCollapsed((prev) => {\n prev.splice(index, 1);\n return [...prev];\n });\n }\n\n function handleTransformCollapseExpand(index: number, collapsed: boolean): void {\n setTransformsCollapsed((prev) => {\n prev[index] = collapsed;\n return [...prev];\n });\n }\n\n return (\n <Stack gap={1} {...props}>\n {value.map((transform, i) => (\n <TransformEditorContainer\n key={i}\n index={i}\n value={transform}\n isCollapsed={transformsCollapsed[i] ?? true}\n onChange={(updatedTransform: Transform) => handleTransformChange(i, updatedTransform)}\n onDelete={() => handleTransformDelete(i)}\n onCollapse={(collapsed) => handleTransformCollapseExpand(i, collapsed)}\n />\n ))}\n\n <Button variant=\"contained\" startIcon={<AddIcon />} sx={{ marginTop: 1 }} onClick={handleTransformAdd}>\n Add Transformation\n </Button>\n </Stack>\n );\n}\n"],"names":["Button","Stack","useState","AddIcon","TransformEditorContainer","TransformsEditor","value","onChange","props","transformsCollapsed","setTransformsCollapsed","map","handleTransformChange","index","transform","updatedTransforms","handleTransformAdd","push","kind","spec","prev","handleTransformDelete","splice","handleTransformCollapseExpand","collapsed","gap","i","isCollapsed","updatedTransform","onDelete","onCollapse","variant","startIcon","sx","marginTop","onClick"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;AAGjC,SAASA,MAAM,EAAEC,KAAK,QAAoB,gBAAgB;AAC1D,SAAuBC,QAAQ,QAAQ,QAAQ;AAC/C,OAAOC,aAAa,uBAAuB;AAC3C,SAASC,wBAAwB,QAAQ,6BAA6B;AAOtE,OAAO,SAASC,iBAAiB,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGC,OAA8B;IACnF,MAAM,CAACC,qBAAqBC,uBAAuB,GAAGR,SAASI,MAAMK,GAAG,CAAC,IAAM;IAE/E,SAASC,sBAAsBC,KAAa,EAAEC,SAAoB;QAChE,MAAMC,oBAAoB;eAAIT;SAAM;QACpCS,iBAAiB,CAACF,MAAM,GAAGC;QAC3BP,SAASQ;IACX;IAEA,SAASC;QACP,MAAMD,oBAAoB;eAAIT;SAAM;QACpC,sCAAsC;QACtCS,kBAAkBE,IAAI,CAAC;YAAEC,MAAM;YAAIC,MAAM,CAAC;QAAE;QAC5CZ,SAASQ;QACTL,uBAAuB,CAACU;YACtBA,KAAKH,IAAI,CAAC;YACV,OAAO;mBAAIG;aAAK;QAClB;IACF;IAEA,SAASC,sBAAsBR,KAAa;QAC1C,MAAME,oBAAoB;eAAIT;SAAM;QACpCS,kBAAkBO,MAAM,CAACT,OAAO;QAChCN,SAASQ;QACTL,uBAAuB,CAACU;YACtBA,KAAKE,MAAM,CAACT,OAAO;YACnB,OAAO;mBAAIO;aAAK;QAClB;IACF;IAEA,SAASG,8BAA8BV,KAAa,EAAEW,SAAkB;QACtEd,uBAAuB,CAACU;YACtBA,IAAI,CAACP,MAAM,GAAGW;YACd,OAAO;mBAAIJ;aAAK;QAClB;IACF;IAEA,qBACE,MAACnB;QAAMwB,KAAK;QAAI,GAAGjB,KAAK;;YACrBF,MAAMK,GAAG,CAAC,CAACG,WAAWY,kBACrB,KAACtB;oBAECS,OAAOa;oBACPpB,OAAOQ;oBACPa,aAAalB,mBAAmB,CAACiB,EAAE,IAAI;oBACvCnB,UAAU,CAACqB,mBAAgChB,sBAAsBc,GAAGE;oBACpEC,UAAU,IAAMR,sBAAsBK;oBACtCI,YAAY,CAACN,YAAcD,8BAA8BG,GAAGF;mBANvDE;0BAUT,KAAC1B;gBAAO+B,SAAQ;gBAAYC,yBAAW,KAAC7B;gBAAY8B,IAAI;oBAAEC,WAAW;gBAAE;gBAAGC,SAASnB;0BAAoB;;;;AAK7G"}
@@ -18,8 +18,6 @@ import { OptionsColorPicker } from '../ColorPicker/OptionsColorPicker';
18
18
  const ConditionEditor = ({ mapping, onChange, ...props })=>{
19
19
  switch(mapping.kind){
20
20
  case 'Value':
21
- var _mapping_spec;
22
- var _mapping_spec_value;
23
21
  return /*#__PURE__*/ _jsx(Stack, {
24
22
  gap: 1,
25
23
  direction: "row",
@@ -27,7 +25,7 @@ const ConditionEditor = ({ mapping, onChange, ...props })=>{
27
25
  children: /*#__PURE__*/ _jsx(TextField, {
28
26
  label: "Value",
29
27
  placeholder: "Exact value",
30
- value: (_mapping_spec_value = (_mapping_spec = mapping.spec) === null || _mapping_spec === void 0 ? void 0 : _mapping_spec.value) !== null && _mapping_spec_value !== void 0 ? _mapping_spec_value : '',
28
+ value: mapping.spec?.value ?? '',
31
29
  onChange: (e)=>onChange({
32
30
  ...mapping,
33
31
  spec: {
@@ -39,8 +37,6 @@ const ConditionEditor = ({ mapping, onChange, ...props })=>{
39
37
  })
40
38
  });
41
39
  case 'Range':
42
- var _mapping_spec1, _mapping_spec2;
43
- var _mapping_spec_from, _mapping_spec_to;
44
40
  return /*#__PURE__*/ _jsxs(Stack, {
45
41
  gap: 1,
46
42
  direction: "row",
@@ -49,7 +45,7 @@ const ConditionEditor = ({ mapping, onChange, ...props })=>{
49
45
  /*#__PURE__*/ _jsx(TextField, {
50
46
  label: "From",
51
47
  placeholder: "Start of range",
52
- value: (_mapping_spec_from = (_mapping_spec1 = mapping.spec) === null || _mapping_spec1 === void 0 ? void 0 : _mapping_spec1.from) !== null && _mapping_spec_from !== void 0 ? _mapping_spec_from : '',
48
+ value: mapping.spec?.from ?? '',
53
49
  onChange: (e)=>onChange({
54
50
  ...mapping,
55
51
  spec: {
@@ -62,7 +58,7 @@ const ConditionEditor = ({ mapping, onChange, ...props })=>{
62
58
  /*#__PURE__*/ _jsx(TextField, {
63
59
  label: "To",
64
60
  placeholder: "End of range (inclusive)",
65
- value: (_mapping_spec_to = (_mapping_spec2 = mapping.spec) === null || _mapping_spec2 === void 0 ? void 0 : _mapping_spec2.to) !== null && _mapping_spec_to !== void 0 ? _mapping_spec_to : '',
61
+ value: mapping.spec?.to ?? '',
66
62
  onChange: (e)=>onChange({
67
63
  ...mapping,
68
64
  spec: {
@@ -75,8 +71,6 @@ const ConditionEditor = ({ mapping, onChange, ...props })=>{
75
71
  ]
76
72
  });
77
73
  case 'Regex':
78
- var _mapping_spec3;
79
- var _mapping_spec_pattern;
80
74
  return /*#__PURE__*/ _jsx(Stack, {
81
75
  gap: 1,
82
76
  direction: "row",
@@ -84,7 +78,7 @@ const ConditionEditor = ({ mapping, onChange, ...props })=>{
84
78
  children: /*#__PURE__*/ _jsx(TextField, {
85
79
  label: "Regular Expression",
86
80
  placeholder: "JavaScript regular expression",
87
- value: (_mapping_spec_pattern = (_mapping_spec3 = mapping.spec) === null || _mapping_spec3 === void 0 ? void 0 : _mapping_spec3.pattern) !== null && _mapping_spec_pattern !== void 0 ? _mapping_spec_pattern : '',
81
+ value: mapping.spec?.pattern ?? '',
88
82
  onChange: (e)=>onChange({
89
83
  ...mapping,
90
84
  spec: {
@@ -96,8 +90,6 @@ const ConditionEditor = ({ mapping, onChange, ...props })=>{
96
90
  })
97
91
  });
98
92
  case 'Misc':
99
- var _mapping_spec4;
100
- var _mapping_spec_value1;
101
93
  return /*#__PURE__*/ _jsx(Stack, {
102
94
  gap: 1,
103
95
  direction: "row",
@@ -105,7 +97,7 @@ const ConditionEditor = ({ mapping, onChange, ...props })=>{
105
97
  children: /*#__PURE__*/ _jsxs(TextField, {
106
98
  select: true,
107
99
  label: "Value",
108
- value: (_mapping_spec_value1 = (_mapping_spec4 = mapping.spec) === null || _mapping_spec4 === void 0 ? void 0 : _mapping_spec4.value) !== null && _mapping_spec_value1 !== void 0 ? _mapping_spec_value1 : '',
100
+ value: mapping.spec?.value ?? '',
109
101
  onChange: (e)=>onChange({
110
102
  ...mapping,
111
103
  spec: {
@@ -210,7 +202,6 @@ const ConditionEditor = ({ mapping, onChange, ...props })=>{
210
202
  }
211
203
  };
212
204
  export const ValueMappingEditor = ({ mapping, onChange, onDelete, ...props })=>{
213
- var _mapping_spec_result, _mapping_spec, _mapping_spec_result1, _mapping_spec1;
214
205
  const handleColorChange = (color)=>{
215
206
  onChange({
216
207
  ...mapping,
@@ -223,7 +214,6 @@ export const ValueMappingEditor = ({ mapping, onChange, onDelete, ...props })=>{
223
214
  }
224
215
  });
225
216
  };
226
- var _mapping_spec_result_value, _mapping_spec_result_color;
227
217
  return /*#__PURE__*/ _jsxs(Grid, {
228
218
  container: true,
229
219
  spacing: 2,
@@ -326,20 +316,17 @@ export const ValueMappingEditor = ({ mapping, onChange, onDelete, ...props })=>{
326
316
  },
327
317
  children: /*#__PURE__*/ _jsx(TextField, {
328
318
  label: "Display text",
329
- value: (_mapping_spec_result_value = (_mapping_spec = mapping.spec) === null || _mapping_spec === void 0 ? void 0 : (_mapping_spec_result = _mapping_spec.result) === null || _mapping_spec_result === void 0 ? void 0 : _mapping_spec_result.value) !== null && _mapping_spec_result_value !== void 0 ? _mapping_spec_result_value : '',
330
- onChange: (e)=>{
331
- var _mapping_spec;
332
- return onChange({
319
+ value: mapping.spec?.result?.value ?? '',
320
+ onChange: (e)=>onChange({
333
321
  ...mapping,
334
322
  spec: {
335
323
  ...mapping.spec,
336
324
  result: {
337
- ...(_mapping_spec = mapping.spec) === null || _mapping_spec === void 0 ? void 0 : _mapping_spec.result,
325
+ ...mapping.spec?.result,
338
326
  value: e.target.value
339
327
  }
340
328
  }
341
- });
342
- },
329
+ }),
343
330
  fullWidth: true
344
331
  })
345
332
  }),
@@ -351,9 +338,9 @@ export const ValueMappingEditor = ({ mapping, onChange, onDelete, ...props })=>{
351
338
  direction: "row",
352
339
  justifyContent: "center",
353
340
  gap: 1,
354
- children: ((_mapping_spec1 = mapping.spec) === null || _mapping_spec1 === void 0 ? void 0 : (_mapping_spec_result1 = _mapping_spec1.result) === null || _mapping_spec_result1 === void 0 ? void 0 : _mapping_spec_result1.color) ? /*#__PURE__*/ _jsx(OptionsColorPicker, {
341
+ children: mapping.spec?.result?.color ? /*#__PURE__*/ _jsx(OptionsColorPicker, {
355
342
  label: "Color",
356
- color: (_mapping_spec_result_color = mapping.spec.result.color) !== null && _mapping_spec_result_color !== void 0 ? _mapping_spec_result_color : '#000',
343
+ color: mapping.spec.result.color ?? '#000',
357
344
  onColorChange: handleColorChange,
358
345
  onClear: ()=>handleColorChange(undefined)
359
346
  }) : /*#__PURE__*/ _jsx(IconButton, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ValueMappingEditor/ValueMappingEditor.tsx"],"sourcesContent":["// Copyright 2024 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport {\n Grid2Props as GridProps,\n IconButton,\n MenuItem,\n Stack,\n StackProps,\n TextField,\n Tooltip,\n Typography,\n Grid2 as Grid,\n} from '@mui/material';\nimport DeleteIcon from 'mdi-material-ui/DeleteOutline';\nimport PlusIcon from 'mdi-material-ui/Plus';\nimport { ValueMapping } from '@perses-dev/core';\nimport { FC } from 'react';\nimport { OptionsColorPicker } from '../ColorPicker/OptionsColorPicker';\n\ninterface ValueMappingConditionEditorProps extends Omit<StackProps, 'onChange'> {\n mapping: ValueMapping;\n onChange: (condition: ValueMapping) => void;\n}\n\nconst ConditionEditor: FC<ValueMappingConditionEditorProps> = ({ mapping, onChange, ...props }) => {\n switch (mapping.kind) {\n case 'Value':\n return (\n <Stack gap={1} direction=\"row\" {...props}>\n <TextField\n label=\"Value\"\n placeholder=\"Exact value\"\n value={mapping.spec?.value ?? ''}\n onChange={(e) =>\n onChange({\n ...mapping,\n spec: { ...mapping.spec, value: e.target.value },\n })\n }\n fullWidth\n />\n </Stack>\n );\n case 'Range':\n return (\n <Stack gap={1} direction=\"row\" {...props}>\n <TextField\n label=\"From\"\n placeholder=\"Start of range\"\n value={mapping.spec?.from ?? ''}\n onChange={(e) =>\n onChange({\n ...mapping,\n spec: { ...mapping.spec, from: e.target.value === '' ? undefined : +e.target.value },\n })\n }\n fullWidth\n />\n <TextField\n label=\"To\"\n placeholder=\"End of range (inclusive)\"\n value={mapping.spec?.to ?? ''}\n onChange={(e) =>\n onChange({\n ...mapping,\n spec: { ...mapping.spec, to: e.target.value === '' ? undefined : +e.target.value },\n })\n }\n fullWidth\n />\n </Stack>\n );\n case 'Regex':\n return (\n <Stack gap={1} direction=\"row\" {...props}>\n <TextField\n label=\"Regular Expression\"\n placeholder=\"JavaScript regular expression\"\n value={mapping.spec?.pattern ?? ''}\n onChange={(e) => onChange({ ...mapping, spec: { ...mapping.spec, pattern: e.target.value } })}\n fullWidth\n />\n </Stack>\n );\n case 'Misc':\n return (\n <Stack gap={1} direction=\"row\" {...props}>\n <TextField\n select\n label=\"Value\"\n value={mapping.spec?.value ?? ''}\n onChange={(e) => onChange({ ...mapping, spec: { value: e.target.value } } as ValueMapping)}\n SelectProps={{\n renderValue: (selected) => {\n switch (selected) {\n case 'empty':\n return 'Empty';\n case 'null':\n return 'Null';\n case 'NaN':\n return 'NaN';\n case 'true':\n return 'True';\n case 'false':\n return 'False';\n default:\n return String(selected);\n }\n },\n }}\n fullWidth\n >\n <MenuItem value=\"empty\">\n <Stack>\n <Typography>Empty</Typography>\n <Typography variant=\"caption\">Matches empty string</Typography>\n </Stack>\n </MenuItem>\n <MenuItem value=\"null\">\n <Stack>\n <Typography>Null</Typography>\n <Typography variant=\"caption\">Matches null or undefined</Typography>\n </Stack>\n </MenuItem>\n <MenuItem value=\"NaN\">\n <Stack>\n <Typography>NaN</Typography>\n <Typography variant=\"caption\">Matches Not a Number value</Typography>\n </Stack>\n </MenuItem>\n <MenuItem value=\"true\">\n <Stack>\n <Typography>True</Typography>\n <Typography variant=\"caption\">Matches true boolean</Typography>\n </Stack>\n </MenuItem>\n <MenuItem value=\"false\">\n <Stack>\n <Typography>False</Typography>\n <Typography variant=\"caption\">Matches false boolean</Typography>\n </Stack>\n </MenuItem>\n </TextField>\n </Stack>\n );\n default:\n return null;\n }\n};\nexport interface ValueMappingEditorProps extends Omit<GridProps, 'onChange'> {\n mapping: ValueMapping;\n onChange: (mapping: ValueMapping) => void;\n onDelete: () => void;\n}\n\nexport const ValueMappingEditor: FC<ValueMappingEditorProps> = ({ mapping, onChange, onDelete, ...props }) => {\n const handleColorChange = (color?: string): void => {\n onChange({\n ...mapping,\n spec: {\n ...mapping.spec,\n result: {\n ...mapping.spec.result,\n color,\n },\n },\n } as ValueMapping);\n };\n return (\n <Grid container spacing={2} {...props}>\n <Grid size={{ xs: 5 }}>\n <Stack direction=\"row\" gap={1} width=\"100%\">\n <TextField\n select\n label=\"Type\"\n value={mapping.kind}\n onChange={(e) => onChange({ ...mapping, kind: e.target.value } as ValueMapping)}\n required\n sx={{ width: '120px' }}\n >\n <MenuItem value=\"Value\">\n <Stack>\n <Typography>Value</Typography>\n {mapping.kind !== 'Value' && <Typography variant=\"caption\">Matches an exact text value</Typography>}\n </Stack>\n </MenuItem>\n <MenuItem value=\"Range\">\n <Stack>\n <Typography>Range</Typography>\n {mapping.kind !== 'Range' && (\n <Typography variant=\"caption\">Matches against a numerical range</Typography>\n )}\n </Stack>\n </MenuItem>\n <MenuItem value=\"Regex\">\n <Stack>\n <Typography>Regex</Typography>\n {mapping.kind !== 'Regex' && (\n <Typography variant=\"caption\">Matches against a regular expression</Typography>\n )}\n </Stack>\n </MenuItem>\n <MenuItem value=\"Misc\">\n <Stack>\n <Typography>Misc</Typography>\n {mapping.kind !== 'Misc' && (\n <Typography variant=\"caption\">Matches against empty, null and NaN values</Typography>\n )}\n </Stack>\n </MenuItem>\n </TextField>\n <ConditionEditor\n width=\"100%\"\n mapping={mapping}\n onChange={(updatedMapping) => onChange({ ...mapping, ...updatedMapping })}\n />\n </Stack>\n </Grid>\n <Grid size={{ xs: 4 }}>\n <TextField\n label=\"Display text\"\n value={mapping.spec?.result?.value ?? ''}\n onChange={(e) =>\n onChange({\n ...mapping,\n spec: {\n ...mapping.spec,\n result: {\n ...mapping.spec?.result,\n value: e.target.value,\n },\n },\n } as ValueMapping)\n }\n fullWidth\n />\n </Grid>\n <Grid size={{ xs: 1 }}>\n <Stack direction=\"row\" justifyContent=\"center\" gap={1}>\n {mapping.spec?.result?.color ? (\n <OptionsColorPicker\n label=\"Color\"\n color={mapping.spec.result.color ?? '#000'}\n onColorChange={handleColorChange}\n onClear={() => handleColorChange(undefined)}\n />\n ) : (\n <IconButton onClick={() => handleColorChange('#000')}>\n <PlusIcon />\n </IconButton>\n )}\n </Stack>\n </Grid>\n <Grid size={{ xs: 1 }} textAlign=\"end\">\n <Tooltip title=\"Remove mapping settings\" placement=\"top\">\n <IconButton size=\"small\" sx={{ marginLeft: 'auto' }} onClick={onDelete}>\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n </Grid>\n </Grid>\n );\n};\n"],"names":["IconButton","MenuItem","Stack","TextField","Tooltip","Typography","Grid2","Grid","DeleteIcon","PlusIcon","OptionsColorPicker","ConditionEditor","mapping","onChange","props","kind","gap","direction","label","placeholder","value","spec","e","target","fullWidth","from","undefined","to","pattern","select","SelectProps","renderValue","selected","String","variant","ValueMappingEditor","onDelete","handleColorChange","color","result","container","spacing","size","xs","width","required","sx","updatedMapping","justifyContent","onColorChange","onClear","onClick","textAlign","title","placement","marginLeft"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/ValueMappingEditor/ValueMappingEditor.tsx"],"sourcesContent":["// Copyright 2024 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport {\n Grid2Props as GridProps,\n IconButton,\n MenuItem,\n Stack,\n StackProps,\n TextField,\n Tooltip,\n Typography,\n Grid2 as Grid,\n} from '@mui/material';\nimport DeleteIcon from 'mdi-material-ui/DeleteOutline';\nimport PlusIcon from 'mdi-material-ui/Plus';\nimport { ValueMapping } from '@perses-dev/core';\nimport { FC } from 'react';\nimport { OptionsColorPicker } from '../ColorPicker/OptionsColorPicker';\n\ninterface ValueMappingConditionEditorProps extends Omit<StackProps, 'onChange'> {\n mapping: ValueMapping;\n onChange: (condition: ValueMapping) => void;\n}\n\nconst ConditionEditor: FC<ValueMappingConditionEditorProps> = ({ mapping, onChange, ...props }) => {\n switch (mapping.kind) {\n case 'Value':\n return (\n <Stack gap={1} direction=\"row\" {...props}>\n <TextField\n label=\"Value\"\n placeholder=\"Exact value\"\n value={mapping.spec?.value ?? ''}\n onChange={(e) =>\n onChange({\n ...mapping,\n spec: { ...mapping.spec, value: e.target.value },\n })\n }\n fullWidth\n />\n </Stack>\n );\n case 'Range':\n return (\n <Stack gap={1} direction=\"row\" {...props}>\n <TextField\n label=\"From\"\n placeholder=\"Start of range\"\n value={mapping.spec?.from ?? ''}\n onChange={(e) =>\n onChange({\n ...mapping,\n spec: { ...mapping.spec, from: e.target.value === '' ? undefined : +e.target.value },\n })\n }\n fullWidth\n />\n <TextField\n label=\"To\"\n placeholder=\"End of range (inclusive)\"\n value={mapping.spec?.to ?? ''}\n onChange={(e) =>\n onChange({\n ...mapping,\n spec: { ...mapping.spec, to: e.target.value === '' ? undefined : +e.target.value },\n })\n }\n fullWidth\n />\n </Stack>\n );\n case 'Regex':\n return (\n <Stack gap={1} direction=\"row\" {...props}>\n <TextField\n label=\"Regular Expression\"\n placeholder=\"JavaScript regular expression\"\n value={mapping.spec?.pattern ?? ''}\n onChange={(e) => onChange({ ...mapping, spec: { ...mapping.spec, pattern: e.target.value } })}\n fullWidth\n />\n </Stack>\n );\n case 'Misc':\n return (\n <Stack gap={1} direction=\"row\" {...props}>\n <TextField\n select\n label=\"Value\"\n value={mapping.spec?.value ?? ''}\n onChange={(e) => onChange({ ...mapping, spec: { value: e.target.value } } as ValueMapping)}\n SelectProps={{\n renderValue: (selected) => {\n switch (selected) {\n case 'empty':\n return 'Empty';\n case 'null':\n return 'Null';\n case 'NaN':\n return 'NaN';\n case 'true':\n return 'True';\n case 'false':\n return 'False';\n default:\n return String(selected);\n }\n },\n }}\n fullWidth\n >\n <MenuItem value=\"empty\">\n <Stack>\n <Typography>Empty</Typography>\n <Typography variant=\"caption\">Matches empty string</Typography>\n </Stack>\n </MenuItem>\n <MenuItem value=\"null\">\n <Stack>\n <Typography>Null</Typography>\n <Typography variant=\"caption\">Matches null or undefined</Typography>\n </Stack>\n </MenuItem>\n <MenuItem value=\"NaN\">\n <Stack>\n <Typography>NaN</Typography>\n <Typography variant=\"caption\">Matches Not a Number value</Typography>\n </Stack>\n </MenuItem>\n <MenuItem value=\"true\">\n <Stack>\n <Typography>True</Typography>\n <Typography variant=\"caption\">Matches true boolean</Typography>\n </Stack>\n </MenuItem>\n <MenuItem value=\"false\">\n <Stack>\n <Typography>False</Typography>\n <Typography variant=\"caption\">Matches false boolean</Typography>\n </Stack>\n </MenuItem>\n </TextField>\n </Stack>\n );\n default:\n return null;\n }\n};\nexport interface ValueMappingEditorProps extends Omit<GridProps, 'onChange'> {\n mapping: ValueMapping;\n onChange: (mapping: ValueMapping) => void;\n onDelete: () => void;\n}\n\nexport const ValueMappingEditor: FC<ValueMappingEditorProps> = ({ mapping, onChange, onDelete, ...props }) => {\n const handleColorChange = (color?: string): void => {\n onChange({\n ...mapping,\n spec: {\n ...mapping.spec,\n result: {\n ...mapping.spec.result,\n color,\n },\n },\n } as ValueMapping);\n };\n return (\n <Grid container spacing={2} {...props}>\n <Grid size={{ xs: 5 }}>\n <Stack direction=\"row\" gap={1} width=\"100%\">\n <TextField\n select\n label=\"Type\"\n value={mapping.kind}\n onChange={(e) => onChange({ ...mapping, kind: e.target.value } as ValueMapping)}\n required\n sx={{ width: '120px' }}\n >\n <MenuItem value=\"Value\">\n <Stack>\n <Typography>Value</Typography>\n {mapping.kind !== 'Value' && <Typography variant=\"caption\">Matches an exact text value</Typography>}\n </Stack>\n </MenuItem>\n <MenuItem value=\"Range\">\n <Stack>\n <Typography>Range</Typography>\n {mapping.kind !== 'Range' && (\n <Typography variant=\"caption\">Matches against a numerical range</Typography>\n )}\n </Stack>\n </MenuItem>\n <MenuItem value=\"Regex\">\n <Stack>\n <Typography>Regex</Typography>\n {mapping.kind !== 'Regex' && (\n <Typography variant=\"caption\">Matches against a regular expression</Typography>\n )}\n </Stack>\n </MenuItem>\n <MenuItem value=\"Misc\">\n <Stack>\n <Typography>Misc</Typography>\n {mapping.kind !== 'Misc' && (\n <Typography variant=\"caption\">Matches against empty, null and NaN values</Typography>\n )}\n </Stack>\n </MenuItem>\n </TextField>\n <ConditionEditor\n width=\"100%\"\n mapping={mapping}\n onChange={(updatedMapping) => onChange({ ...mapping, ...updatedMapping })}\n />\n </Stack>\n </Grid>\n <Grid size={{ xs: 4 }}>\n <TextField\n label=\"Display text\"\n value={mapping.spec?.result?.value ?? ''}\n onChange={(e) =>\n onChange({\n ...mapping,\n spec: {\n ...mapping.spec,\n result: {\n ...mapping.spec?.result,\n value: e.target.value,\n },\n },\n } as ValueMapping)\n }\n fullWidth\n />\n </Grid>\n <Grid size={{ xs: 1 }}>\n <Stack direction=\"row\" justifyContent=\"center\" gap={1}>\n {mapping.spec?.result?.color ? (\n <OptionsColorPicker\n label=\"Color\"\n color={mapping.spec.result.color ?? '#000'}\n onColorChange={handleColorChange}\n onClear={() => handleColorChange(undefined)}\n />\n ) : (\n <IconButton onClick={() => handleColorChange('#000')}>\n <PlusIcon />\n </IconButton>\n )}\n </Stack>\n </Grid>\n <Grid size={{ xs: 1 }} textAlign=\"end\">\n <Tooltip title=\"Remove mapping settings\" placement=\"top\">\n <IconButton size=\"small\" sx={{ marginLeft: 'auto' }} onClick={onDelete}>\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n </Grid>\n </Grid>\n );\n};\n"],"names":["IconButton","MenuItem","Stack","TextField","Tooltip","Typography","Grid2","Grid","DeleteIcon","PlusIcon","OptionsColorPicker","ConditionEditor","mapping","onChange","props","kind","gap","direction","label","placeholder","value","spec","e","target","fullWidth","from","undefined","to","pattern","select","SelectProps","renderValue","selected","String","variant","ValueMappingEditor","onDelete","handleColorChange","color","result","container","spacing","size","xs","width","required","sx","updatedMapping","justifyContent","onColorChange","onClear","onClick","textAlign","title","placement","marginLeft"],"mappings":"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"}
@@ -36,7 +36,7 @@ const ColorPicker = ({ color, onChange, onClear, palette })=>{
36
36
  const [value, setValue] = (0, _react.useState)(color);
37
37
  const handleColorChange = (color)=>{
38
38
  setValue(color);
39
- onChange === null || onChange === void 0 ? void 0 : onChange(color);
39
+ onChange?.(color);
40
40
  };
41
41
  // we should update this if https://github.com/omgovich/react-colorful/issues/157 is resolved
42
42
  const handleInputChange = (e)=>{
@@ -44,7 +44,7 @@ const ColorPicker = ({ color, onChange, onClear, palette })=>{
44
44
  setValue(`#${inputValue}`); // always prefix input value with # to indicate hex format
45
45
  // only set color if input value is a valid hex color
46
46
  if (isValidHex(e.target.value)) {
47
- onChange === null || onChange === void 0 ? void 0 : onChange(e.target.value);
47
+ onChange?.(e.target.value);
48
48
  }
49
49
  };
50
50
  return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Stack, {
@@ -48,7 +48,7 @@ const PANEL_HEIGHT_LG_BREAKPOINT = 300;
48
48
  const LEGEND_HEIGHT_SM = 40;
49
49
  const LEGEND_HEIGHT_LG = 100;
50
50
  function getContentWithLegendLayout({ width, height, legendProps, legendSize, minChildrenHeight, minChildrenWidth, spacing, theme }) {
51
- const legendOptions = legendProps === null || legendProps === void 0 ? void 0 : legendProps.options;
51
+ const legendOptions = legendProps?.options;
52
52
  const hasLegend = !!legendOptions;
53
53
  const noLegendLayout = {
54
54
  legend: {
@@ -84,10 +84,9 @@ function getContentWithLegendLayout({ width, height, legendProps, legendSize, mi
84
84
  legendHeight = LEGEND_HEIGHT_LG;
85
85
  }
86
86
  } else {
87
- var _legendProps_tableProps;
88
87
  // Table mode
89
88
  const tableLayout = (0, _Table.getTableCellLayout)(theme, 'compact');
90
- const tableColumns = (legendProps === null || legendProps === void 0 ? void 0 : (_legendProps_tableProps = legendProps.tableProps) === null || _legendProps_tableProps === void 0 ? void 0 : _legendProps_tableProps.columns) || [];
89
+ const tableColumns = legendProps?.tableProps?.columns || [];
91
90
  const columnsWidth = tableColumns.reduce((total, col)=>{
92
91
  if (typeof col.width === 'number') {
93
92
  total += col.width;
@@ -72,7 +72,7 @@ const DragButton = /*#__PURE__*/ (0, _react.forwardRef)(function DragButton({ on
72
72
  }
73
73
  function handleMove(callback) {
74
74
  setAnchorEl(null);
75
- callback === null || callback === void 0 ? void 0 : callback();
75
+ callback?.();
76
76
  }
77
77
  return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
78
78
  children: [
@@ -36,7 +36,7 @@ const Drawer = ({ anchor = 'right', isOpen, onClose, PaperProps, children, ...re
36
36
  sx: (0, _utils.combineSx)({
37
37
  width: isSmaller ? '100%' : `${DRAWER_DEFAULT_WIDTH}px`,
38
38
  overflow: 'hidden'
39
- }, PaperProps === null || PaperProps === void 0 ? void 0 : PaperProps.sx)
39
+ }, PaperProps?.sx)
40
40
  },
41
41
  children: children
42
42
  });
@@ -26,11 +26,26 @@ const _core = require("echarts/core");
26
26
  const _material = require("@mui/material");
27
27
  const _isEqual = /*#__PURE__*/ _interop_require_default(require("lodash/isEqual"));
28
28
  const _debounce = /*#__PURE__*/ _interop_require_default(require("lodash/debounce"));
29
+ const _charts = require("echarts/charts");
30
+ const _components = require("echarts/components");
31
+ const _renderers = require("echarts/renderers");
29
32
  function _interop_require_default(obj) {
30
33
  return obj && obj.__esModule ? obj : {
31
34
  default: obj
32
35
  };
33
36
  }
37
+ // Loading the ECharts extensions should happen in the respective plugin (in this case, the scatterplot plugin).
38
+ // This is a workaround for https://github.com/perses/plugins/issues/83.
39
+ (0, _core.use)([
40
+ _components.DatasetComponent,
41
+ _components.DataZoomComponent,
42
+ _components.LegendComponent,
43
+ _charts.ScatterChart,
44
+ _components.GridComponent,
45
+ _components.TitleComponent,
46
+ _components.TooltipComponent,
47
+ _renderers.CanvasRenderer
48
+ ]);
34
49
  const mouseEvents = [
35
50
  'click',
36
51
  'dblclick',
@@ -56,11 +71,11 @@ const EChart = /*#__PURE__*/ (0, _react.memo)(function EChart({ option, theme, r
56
71
  (0, _react.useLayoutEffect)(()=>{
57
72
  if (containerRef.current === null || chartElement.current !== null) return;
58
73
  chartElement.current = (0, _core.init)(containerRef.current, theme, {
59
- renderer: renderer !== null && renderer !== void 0 ? renderer : 'canvas'
74
+ renderer: renderer ?? 'canvas'
60
75
  });
61
76
  if (chartElement.current === undefined) return;
62
77
  chartElement.current.setOption(initialOption.current, true);
63
- onChartInitialized === null || onChartInitialized === void 0 ? void 0 : onChartInitialized(chartElement.current);
78
+ onChartInitialized?.(chartElement.current);
64
79
  if (_instance !== undefined) {
65
80
  _instance.current = chartElement.current;
66
81
  }
@@ -160,8 +175,7 @@ function bindEvents(instance, events) {
160
175
  }
161
176
  for(const eventName in events){
162
177
  if (Object.prototype.hasOwnProperty.call(events, eventName)) {
163
- var _events_eventName;
164
- const customEvent = (_events_eventName = events[eventName]) !== null && _events_eventName !== void 0 ? _events_eventName : null;
178
+ const customEvent = events[eventName] ?? null;
165
179
  if (customEvent) {
166
180
  bindEvent(eventName, customEvent);
167
181
  }
@@ -51,11 +51,9 @@ function GaugeChart(props) {
51
51
  const chartsTheme = (0, _context.useChartsTheme)();
52
52
  // useDeepMemo ensures value size util does not rerun everytime you hover on the chart
53
53
  const option = (0, _core.useDeepMemo)(()=>{
54
- var _chartsTheme_echartsTheme_textStyle;
55
54
  if (data.value === undefined) return chartsTheme.noDataOption;
56
55
  // adjusts fontSize depending on number of characters
57
56
  const valueSizeClamp = getResponsiveValueSize(data.value, format, width, height);
58
- var _chartsTheme_echartsTheme_textStyle_color;
59
57
  return {
60
58
  title: {
61
59
  show: false
@@ -185,7 +183,7 @@ function GaugeChart(props) {
185
183
  // https://echarts.apache.org/en/option.html#series-gauge.data.title
186
184
  title: {
187
185
  show: true,
188
- color: (_chartsTheme_echartsTheme_textStyle_color = (_chartsTheme_echartsTheme_textStyle = chartsTheme.echartsTheme.textStyle) === null || _chartsTheme_echartsTheme_textStyle === void 0 ? void 0 : _chartsTheme_echartsTheme_textStyle.color) !== null && _chartsTheme_echartsTheme_textStyle_color !== void 0 ? _chartsTheme_echartsTheme_textStyle_color : 'inherit',
186
+ color: chartsTheme.echartsTheme.textStyle?.color ?? 'inherit',
189
187
  offsetCenter: [
190
188
  0,
191
189
  '55%'
@@ -223,8 +221,7 @@ function getResponsiveValueSize(value, format, width, height) {
223
221
  const MAX_SIZE = 24;
224
222
  const SIZE_MULTIPLIER = 0.7;
225
223
  const formattedValue = typeof value === 'number' ? (0, _core.formatValue)(value, format) : `${value}`;
226
- var _formattedValue_length;
227
- const valueCharacters = (_formattedValue_length = formattedValue.length) !== null && _formattedValue_length !== void 0 ? _formattedValue_length : 2;
224
+ const valueCharacters = formattedValue.length ?? 2;
228
225
  const valueSize = Math.min(width, height) / valueCharacters * SIZE_MULTIPLIER;
229
226
  return `clamp(${MIN_SIZE}px, ${valueSize}px, ${MAX_SIZE}px)`;
230
227
  }
@@ -35,13 +35,13 @@ const InfoTooltip = ({ id, title, description, placement, children, enterDelay,
35
35
  return /*#__PURE__*/ (0, _jsxruntime.jsx)(StyledTooltip, {
36
36
  arrow: true,
37
37
  id: id,
38
- placement: placement !== null && placement !== void 0 ? placement : 'top',
38
+ placement: placement ?? 'top',
39
39
  title: /*#__PURE__*/ (0, _jsxruntime.jsx)(TooltipContent, {
40
40
  title: title,
41
41
  description: description
42
42
  }),
43
- enterDelay: enterDelay !== null && enterDelay !== void 0 ? enterDelay : 500,
44
- enterNextDelay: enterNextDelay !== null && enterNextDelay !== void 0 ? enterNextDelay : 500,
43
+ enterDelay: enterDelay ?? 500,
44
+ enterNextDelay: enterNextDelay ?? 500,
45
45
  children: wrappedChildren
46
46
  });
47
47
  };
@@ -59,7 +59,8 @@ const TooltipContent = ({ title, description })=>{
59
59
  /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Typography, {
60
60
  variant: "caption",
61
61
  sx: (theme)=>({
62
- color: theme.palette.text.primary
62
+ color: theme.palette.text.primary,
63
+ whiteSpace: 'pre-line'
63
64
  }),
64
65
  children: description
65
66
  })
@@ -38,9 +38,8 @@ const ListLegendItemBase = /*#__PURE__*/ (0, _react.forwardRef)(function ListLeg
38
38
  }
39
39
  }
40
40
  const handleClick = (e)=>{
41
- var _item_onClick;
42
41
  onClick(e, item.id);
43
- (_item_onClick = item.onClick) === null || _item_onClick === void 0 ? void 0 : _item_onClick.call(item, e);
42
+ item.onClick?.(e);
44
43
  };
45
44
  return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.ListItemButton, {
46
45
  ...others,
@@ -51,11 +50,11 @@ const ListLegendItemBase = /*#__PURE__*/ (0, _react.forwardRef)(function ListLeg
51
50
  }, sx),
52
51
  dense: true,
53
52
  onClick: handleClick,
54
- onMouseOver: (e)=>onMouseOver === null || onMouseOver === void 0 ? void 0 : onMouseOver(e, {
53
+ onMouseOver: (e)=>onMouseOver?.(e, {
55
54
  id: item.id,
56
55
  index
57
56
  }),
58
- onMouseOut: (e)=>onMouseOut === null || onMouseOut === void 0 ? void 0 : onMouseOut(e, {
57
+ onMouseOut: (e)=>onMouseOut?.(e, {
59
58
  id: item.id,
60
59
  index
61
60
  }),