@perses-dev/components 0.55.0-beta.0 → 0.55.0-beta.10

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 (818) hide show
  1. package/dist/AlignSelector/AlignSelector.d.ts +2 -2
  2. package/dist/AlignSelector/AlignSelector.d.ts.map +1 -1
  3. package/dist/AlignSelector/AlignSelector.js +2 -2
  4. package/dist/AlignSelector/AlignSelector.js.map +1 -1
  5. package/dist/AlignSelector/index.js +1 -1
  6. package/dist/AlignSelector/index.js.map +1 -1
  7. package/dist/ColorPicker/ColorPicker.d.ts +1 -1
  8. package/dist/ColorPicker/ColorPicker.d.ts.map +1 -1
  9. package/dist/ColorPicker/ColorPicker.js +5 -5
  10. package/dist/ColorPicker/ColorPicker.js.map +1 -1
  11. package/dist/ColorPicker/OptionsColorPicker.d.ts +1 -1
  12. package/dist/ColorPicker/OptionsColorPicker.d.ts.map +1 -1
  13. package/dist/ColorPicker/OptionsColorPicker.js +5 -5
  14. package/dist/ColorPicker/OptionsColorPicker.js.map +1 -1
  15. package/dist/ColorPicker/index.js +2 -2
  16. package/dist/ColorPicker/index.js.map +1 -1
  17. package/dist/ContentWithLegend/ContentWithLegend.d.ts +2 -2
  18. package/dist/ContentWithLegend/ContentWithLegend.d.ts.map +1 -1
  19. package/dist/ContentWithLegend/ContentWithLegend.js +5 -5
  20. package/dist/ContentWithLegend/ContentWithLegend.js.map +1 -1
  21. package/dist/ContentWithLegend/index.js +1 -1
  22. package/dist/ContentWithLegend/index.js.map +1 -1
  23. package/dist/ContentWithLegend/model/content-with-legend-model.d.ts +3 -4
  24. package/dist/ContentWithLegend/model/content-with-legend-model.d.ts.map +1 -1
  25. package/dist/ContentWithLegend/model/content-with-legend-model.js +2 -2
  26. package/dist/ContentWithLegend/model/content-with-legend-model.js.map +1 -1
  27. package/dist/DensitySelector/DensitySelector.d.ts +1 -1
  28. package/dist/DensitySelector/DensitySelector.d.ts.map +1 -1
  29. package/dist/DensitySelector/DensitySelector.js +2 -2
  30. package/dist/DensitySelector/DensitySelector.js.map +1 -1
  31. package/dist/DensitySelector/index.js +1 -1
  32. package/dist/DensitySelector/index.js.map +1 -1
  33. package/dist/Dialog/Dialog.d.ts +4 -3
  34. package/dist/Dialog/Dialog.d.ts.map +1 -1
  35. package/dist/Dialog/Dialog.js +3 -3
  36. package/dist/Dialog/Dialog.js.map +1 -1
  37. package/dist/Dialog/DiscardChangesConfirmationDialog.d.ts +1 -1
  38. package/dist/Dialog/DiscardChangesConfirmationDialog.d.ts.map +1 -1
  39. package/dist/Dialog/DiscardChangesConfirmationDialog.js +2 -2
  40. package/dist/Dialog/DiscardChangesConfirmationDialog.js.map +1 -1
  41. package/dist/Dialog/index.js +2 -2
  42. package/dist/Dialog/index.js.map +1 -1
  43. package/dist/DragAndDrop/DragAndDropList.d.ts +1 -1
  44. package/dist/DragAndDrop/DragAndDropList.d.ts.map +1 -1
  45. package/dist/DragAndDrop/DragAndDropList.js +8 -8
  46. package/dist/DragAndDrop/DragAndDropList.js.map +1 -1
  47. package/dist/DragAndDrop/DragButton.d.ts +1 -2
  48. package/dist/DragAndDrop/DragButton.d.ts.map +1 -1
  49. package/dist/DragAndDrop/DragButton.js +4 -4
  50. package/dist/DragAndDrop/DragButton.js.map +1 -1
  51. package/dist/DragAndDrop/DropIndicator.d.ts +1 -1
  52. package/dist/DragAndDrop/DropIndicator.d.ts.map +1 -1
  53. package/dist/DragAndDrop/DropIndicator.js +1 -1
  54. package/dist/DragAndDrop/DropIndicator.js.map +1 -1
  55. package/dist/DragAndDrop/index.js +3 -3
  56. package/dist/DragAndDrop/index.js.map +1 -1
  57. package/dist/DragAndDrop/model.d.ts +1 -1
  58. package/dist/DragAndDrop/model.d.ts.map +1 -1
  59. package/dist/DragAndDrop/model.js.map +1 -1
  60. package/dist/Drawer/Drawer.d.ts +2 -2
  61. package/dist/Drawer/Drawer.d.ts.map +1 -1
  62. package/dist/Drawer/Drawer.js +3 -3
  63. package/dist/Drawer/Drawer.js.map +1 -1
  64. package/dist/Drawer/index.js +1 -1
  65. package/dist/Drawer/index.js.map +1 -1
  66. package/dist/EChart/EChart.d.ts +7 -7
  67. package/dist/EChart/EChart.d.ts.map +1 -1
  68. package/dist/EChart/EChart.js +10 -10
  69. package/dist/EChart/EChart.js.map +1 -1
  70. package/dist/EChart/index.js +2 -2
  71. package/dist/EChart/index.js.map +1 -1
  72. package/dist/EChart/timezone-formatter.js +1 -1
  73. package/dist/ErrorAlert.d.ts +1 -1
  74. package/dist/ErrorAlert.d.ts.map +1 -1
  75. package/dist/ErrorAlert.js +1 -1
  76. package/dist/ErrorAlert.js.map +1 -1
  77. package/dist/ErrorBoundary.js +1 -1
  78. package/dist/ExemplarMetadata/ExemplarMetadataTooltip.d.ts +27 -0
  79. package/dist/ExemplarMetadata/ExemplarMetadataTooltip.d.ts.map +1 -0
  80. package/dist/ExemplarMetadata/ExemplarMetadataTooltip.js +239 -0
  81. package/dist/ExemplarMetadata/ExemplarMetadataTooltip.js.map +1 -0
  82. package/dist/ExemplarMetadata/index.d.ts +2 -0
  83. package/dist/ExemplarMetadata/index.d.ts.map +1 -0
  84. package/dist/{cjs/model/thresholds.js → ExemplarMetadata/index.js} +3 -5
  85. package/dist/ExemplarMetadata/index.js.map +1 -0
  86. package/dist/FontSizeSelector/FontSizeSelector.d.ts +1 -1
  87. package/dist/FontSizeSelector/FontSizeSelector.d.ts.map +1 -1
  88. package/dist/FontSizeSelector/FontSizeSelector.js +2 -2
  89. package/dist/FontSizeSelector/FontSizeSelector.js.map +1 -1
  90. package/dist/FontSizeSelector/index.js +1 -1
  91. package/dist/FontSizeSelector/index.js.map +1 -1
  92. package/dist/FormEditor/FormActions.d.ts +3 -3
  93. package/dist/FormEditor/FormActions.d.ts.map +1 -1
  94. package/dist/FormEditor/FormActions.js +2 -2
  95. package/dist/FormEditor/FormActions.js.map +1 -1
  96. package/dist/FormEditor/index.js +1 -1
  97. package/dist/FormEditor/index.js.map +1 -1
  98. package/dist/FormatControls/FormatControls.d.ts +2 -2
  99. package/dist/FormatControls/FormatControls.d.ts.map +1 -1
  100. package/dist/FormatControls/FormatControls.js +6 -6
  101. package/dist/FormatControls/FormatControls.js.map +1 -1
  102. package/dist/FormatControls/UnitSelector.d.ts +2 -2
  103. package/dist/FormatControls/UnitSelector.d.ts.map +1 -1
  104. package/dist/FormatControls/UnitSelector.js +35 -6
  105. package/dist/FormatControls/UnitSelector.js.map +1 -1
  106. package/dist/FormatControls/index.js +2 -2
  107. package/dist/FormatControls/index.js.map +1 -1
  108. package/dist/InfoTooltip/InfoTooltip.d.ts +1 -1
  109. package/dist/InfoTooltip/InfoTooltip.d.ts.map +1 -1
  110. package/dist/InfoTooltip/InfoTooltip.js +1 -1
  111. package/dist/InfoTooltip/InfoTooltip.js.map +1 -1
  112. package/dist/InfoTooltip/index.js +1 -1
  113. package/dist/InfoTooltip/index.js.map +1 -1
  114. package/dist/JSONEditor.d.ts +2 -2
  115. package/dist/JSONEditor.d.ts.map +1 -1
  116. package/dist/JSONEditor.js +5 -5
  117. package/dist/JSONEditor.js.map +1 -1
  118. package/dist/Legend/CompactLegend.d.ts +3 -3
  119. package/dist/Legend/CompactLegend.d.ts.map +1 -1
  120. package/dist/Legend/CompactLegend.js +3 -3
  121. package/dist/Legend/CompactLegend.js.map +1 -1
  122. package/dist/Legend/Legend.d.ts +4 -4
  123. package/dist/Legend/Legend.d.ts.map +1 -1
  124. package/dist/Legend/Legend.js +6 -6
  125. package/dist/Legend/Legend.js.map +1 -1
  126. package/dist/Legend/LegendColorBadge.d.ts +3 -3
  127. package/dist/Legend/LegendColorBadge.d.ts.map +1 -1
  128. package/dist/Legend/LegendColorBadge.js +4 -4
  129. package/dist/Legend/LegendColorBadge.js.map +1 -1
  130. package/dist/Legend/ListLegend.d.ts +3 -3
  131. package/dist/Legend/ListLegend.d.ts.map +1 -1
  132. package/dist/Legend/ListLegend.js +7 -6
  133. package/dist/Legend/ListLegend.js.map +1 -1
  134. package/dist/Legend/ListLegendItem.d.ts +3 -3
  135. package/dist/Legend/ListLegendItem.d.ts.map +1 -1
  136. package/dist/Legend/ListLegendItem.js +8 -7
  137. package/dist/Legend/ListLegendItem.js.map +1 -1
  138. package/dist/Legend/TableLegend.d.ts +3 -3
  139. package/dist/Legend/TableLegend.d.ts.map +1 -1
  140. package/dist/Legend/TableLegend.js +3 -3
  141. package/dist/Legend/TableLegend.js.map +1 -1
  142. package/dist/Legend/index.js +2 -2
  143. package/dist/Legend/index.js.map +1 -1
  144. package/dist/Legend/legend-model.d.ts +2 -2
  145. package/dist/Legend/legend-model.d.ts.map +1 -1
  146. package/dist/Legend/legend-model.js.map +1 -1
  147. package/dist/LinksEditor/LinkEditorForm.d.ts +1 -1
  148. package/dist/LinksEditor/LinkEditorForm.d.ts.map +1 -1
  149. package/dist/LinksEditor/LinkEditorForm.js +2 -2
  150. package/dist/LinksEditor/LinkEditorForm.js.map +1 -1
  151. package/dist/LinksEditor/index.js +1 -1
  152. package/dist/LinksEditor/index.js.map +1 -1
  153. package/dist/ModeSelector/ModeSelector.d.ts +1 -1
  154. package/dist/ModeSelector/ModeSelector.d.ts.map +1 -1
  155. package/dist/ModeSelector/ModeSelector.js +2 -2
  156. package/dist/ModeSelector/ModeSelector.js.map +1 -1
  157. package/dist/ModeSelector/index.js +1 -1
  158. package/dist/ModeSelector/index.js.map +1 -1
  159. package/dist/OptionsEditorLayout/OptionsEditorColumn.d.ts +1 -1
  160. package/dist/OptionsEditorLayout/OptionsEditorColumn.d.ts.map +1 -1
  161. package/dist/OptionsEditorLayout/OptionsEditorColumn.js +1 -1
  162. package/dist/OptionsEditorLayout/OptionsEditorColumn.js.map +1 -1
  163. package/dist/OptionsEditorLayout/OptionsEditorControl.d.ts +2 -2
  164. package/dist/OptionsEditorLayout/OptionsEditorControl.d.ts.map +1 -1
  165. package/dist/OptionsEditorLayout/OptionsEditorControl.js +6 -6
  166. package/dist/OptionsEditorLayout/OptionsEditorControl.js.map +1 -1
  167. package/dist/OptionsEditorLayout/OptionsEditorGrid.d.ts +1 -1
  168. package/dist/OptionsEditorLayout/OptionsEditorGrid.d.ts.map +1 -1
  169. package/dist/OptionsEditorLayout/OptionsEditorGrid.js +1 -1
  170. package/dist/OptionsEditorLayout/OptionsEditorGrid.js.map +1 -1
  171. package/dist/OptionsEditorLayout/OptionsEditorGroup.d.ts +2 -1
  172. package/dist/OptionsEditorLayout/OptionsEditorGroup.d.ts.map +1 -1
  173. package/dist/OptionsEditorLayout/OptionsEditorGroup.js +2 -2
  174. package/dist/OptionsEditorLayout/OptionsEditorGroup.js.map +1 -1
  175. package/dist/OptionsEditorLayout/index.js +4 -4
  176. package/dist/OptionsEditorLayout/index.js.map +1 -1
  177. package/dist/Overlay/Overlay.d.ts +2 -2
  178. package/dist/Overlay/Overlay.d.ts.map +1 -1
  179. package/dist/Overlay/Overlay.js +2 -2
  180. package/dist/Overlay/Overlay.js.map +1 -1
  181. package/dist/Overlay/index.js +1 -1
  182. package/dist/Overlay/index.js.map +1 -1
  183. package/dist/RefreshIntervalPicker/RefreshIntervalPicker.d.ts +3 -3
  184. package/dist/RefreshIntervalPicker/RefreshIntervalPicker.d.ts.map +1 -1
  185. package/dist/RefreshIntervalPicker/RefreshIntervalPicker.js +2 -2
  186. package/dist/RefreshIntervalPicker/RefreshIntervalPicker.js.map +1 -1
  187. package/dist/RefreshIntervalPicker/index.js +1 -1
  188. package/dist/RefreshIntervalPicker/index.js.map +1 -1
  189. package/dist/RepeatGrid/RepeatGrid.d.ts +15 -0
  190. package/dist/RepeatGrid/RepeatGrid.d.ts.map +1 -0
  191. package/dist/RepeatGrid/RepeatGrid.js +68 -0
  192. package/dist/RepeatGrid/RepeatGrid.js.map +1 -0
  193. package/dist/RepeatGrid/index.d.ts +2 -0
  194. package/dist/RepeatGrid/index.d.ts.map +1 -0
  195. package/dist/{cjs/model/types.js → RepeatGrid/index.js} +3 -4
  196. package/dist/RepeatGrid/index.js.map +1 -0
  197. package/dist/SettingsAutocomplete/SettingsAutocomplete.d.ts +2 -2
  198. package/dist/SettingsAutocomplete/SettingsAutocomplete.d.ts.map +1 -1
  199. package/dist/SettingsAutocomplete/SettingsAutocomplete.js +2 -2
  200. package/dist/SettingsAutocomplete/SettingsAutocomplete.js.map +1 -1
  201. package/dist/SettingsAutocomplete/index.js +1 -1
  202. package/dist/SettingsAutocomplete/index.js.map +1 -1
  203. package/dist/SortSelector/SortSelector.d.ts +1 -1
  204. package/dist/SortSelector/SortSelector.d.ts.map +1 -1
  205. package/dist/SortSelector/SortSelector.js +2 -2
  206. package/dist/SortSelector/SortSelector.js.map +1 -1
  207. package/dist/SortSelector/SortSelectorButtons.d.ts +3 -3
  208. package/dist/SortSelector/SortSelectorButtons.d.ts.map +1 -1
  209. package/dist/SortSelector/SortSelectorButtons.js +2 -2
  210. package/dist/SortSelector/SortSelectorButtons.js.map +1 -1
  211. package/dist/SortSelector/index.js +2 -2
  212. package/dist/SortSelector/index.js.map +1 -1
  213. package/dist/Table/InnerTable.d.ts +2 -3
  214. package/dist/Table/InnerTable.d.ts.map +1 -1
  215. package/dist/Table/InnerTable.js +3 -3
  216. package/dist/Table/InnerTable.js.map +1 -1
  217. package/dist/Table/Table.d.ts +2 -2
  218. package/dist/Table/Table.d.ts.map +1 -1
  219. package/dist/Table/Table.js +7 -7
  220. package/dist/Table/Table.js.map +1 -1
  221. package/dist/Table/TableBody.d.ts +1 -2
  222. package/dist/Table/TableBody.d.ts.map +1 -1
  223. package/dist/Table/TableBody.js +3 -3
  224. package/dist/Table/TableBody.js.map +1 -1
  225. package/dist/Table/TableCell.d.ts +3 -3
  226. package/dist/Table/TableCell.d.ts.map +1 -1
  227. package/dist/Table/TableCell.js +5 -5
  228. package/dist/Table/TableCell.js.map +1 -1
  229. package/dist/Table/TableCheckbox.d.ts +3 -3
  230. package/dist/Table/TableCheckbox.d.ts.map +1 -1
  231. package/dist/Table/TableCheckbox.js +2 -2
  232. package/dist/Table/TableCheckbox.js.map +1 -1
  233. package/dist/Table/TableFoot.d.ts +1 -2
  234. package/dist/Table/TableFoot.d.ts.map +1 -1
  235. package/dist/Table/TableFoot.js +3 -3
  236. package/dist/Table/TableFoot.js.map +1 -1
  237. package/dist/Table/TableHead.d.ts +1 -2
  238. package/dist/Table/TableHead.d.ts.map +1 -1
  239. package/dist/Table/TableHead.js +3 -3
  240. package/dist/Table/TableHead.js.map +1 -1
  241. package/dist/Table/TableHeaderCell.d.ts +3 -3
  242. package/dist/Table/TableHeaderCell.d.ts.map +1 -1
  243. package/dist/Table/TableHeaderCell.js +2 -2
  244. package/dist/Table/TableHeaderCell.js.map +1 -1
  245. package/dist/Table/TableRow.d.ts +2 -3
  246. package/dist/Table/TableRow.d.ts.map +1 -1
  247. package/dist/Table/TableRow.js +3 -3
  248. package/dist/Table/TableRow.js.map +1 -1
  249. package/dist/Table/TableToolbar.d.ts +2 -2
  250. package/dist/Table/TableToolbar.d.ts.map +1 -1
  251. package/dist/Table/TableToolbar.js +8 -8
  252. package/dist/Table/TableToolbar.js.map +1 -1
  253. package/dist/Table/VirtualizedTable.d.ts +4 -4
  254. package/dist/Table/VirtualizedTable.d.ts.map +1 -1
  255. package/dist/Table/VirtualizedTable.js +14 -14
  256. package/dist/Table/VirtualizedTable.js.map +1 -1
  257. package/dist/Table/VirtualizedTableContainer.d.ts +1 -2
  258. package/dist/Table/VirtualizedTableContainer.d.ts.map +1 -1
  259. package/dist/Table/VirtualizedTableContainer.js +4 -4
  260. package/dist/Table/VirtualizedTableContainer.js.map +1 -1
  261. package/dist/Table/hooks/useFuzzySearch.d.ts +3 -3
  262. package/dist/Table/hooks/useFuzzySearch.d.ts.map +1 -1
  263. package/dist/Table/hooks/useFuzzySearch.js +3 -3
  264. package/dist/Table/hooks/useFuzzySearch.js.map +1 -1
  265. package/dist/Table/hooks/useTableKeyboardNav.d.ts +1 -1
  266. package/dist/Table/hooks/useTableKeyboardNav.d.ts.map +1 -1
  267. package/dist/Table/hooks/useTableKeyboardNav.js +4 -4
  268. package/dist/Table/hooks/useTableKeyboardNav.js.map +1 -1
  269. package/dist/Table/hooks/useVirtualizedTableKeyboardNav.d.ts +3 -3
  270. package/dist/Table/hooks/useVirtualizedTableKeyboardNav.d.ts.map +1 -1
  271. package/dist/Table/hooks/useVirtualizedTableKeyboardNav.js +1 -1
  272. package/dist/Table/hooks/useVirtualizedTableKeyboardNav.js.map +1 -1
  273. package/dist/Table/index.js +2 -2
  274. package/dist/Table/index.js.map +1 -1
  275. package/dist/Table/model/table-model.d.ts +5 -5
  276. package/dist/Table/model/table-model.d.ts.map +1 -1
  277. package/dist/Table/model/table-model.js.map +1 -1
  278. package/dist/ThresholdsEditor/ThresholdInput.d.ts +2 -2
  279. package/dist/ThresholdsEditor/ThresholdInput.d.ts.map +1 -1
  280. package/dist/ThresholdsEditor/ThresholdInput.js +4 -4
  281. package/dist/ThresholdsEditor/ThresholdInput.js.map +1 -1
  282. package/dist/ThresholdsEditor/ThresholdsEditor.d.ts +2 -2
  283. package/dist/ThresholdsEditor/ThresholdsEditor.d.ts.map +1 -1
  284. package/dist/ThresholdsEditor/ThresholdsEditor.js +11 -11
  285. package/dist/ThresholdsEditor/ThresholdsEditor.js.map +1 -1
  286. package/dist/ThresholdsEditor/index.js +1 -1
  287. package/dist/ThresholdsEditor/index.js.map +1 -1
  288. package/dist/TimeRangeSelector/DateTimeRangePicker.d.ts +2 -2
  289. package/dist/TimeRangeSelector/DateTimeRangePicker.d.ts.map +1 -1
  290. package/dist/TimeRangeSelector/DateTimeRangePicker.js +8 -8
  291. package/dist/TimeRangeSelector/DateTimeRangePicker.js.map +1 -1
  292. package/dist/TimeRangeSelector/TimeRangeSelector.d.ts +4 -4
  293. package/dist/TimeRangeSelector/TimeRangeSelector.d.ts.map +1 -1
  294. package/dist/TimeRangeSelector/TimeRangeSelector.js +12 -19
  295. package/dist/TimeRangeSelector/TimeRangeSelector.js.map +1 -1
  296. package/dist/TimeRangeSelector/index.js +2 -2
  297. package/dist/TimeRangeSelector/index.js.map +1 -1
  298. package/dist/TimeRangeSelector/utils.d.ts +1 -1
  299. package/dist/TimeRangeSelector/utils.d.ts.map +1 -1
  300. package/dist/TimeRangeSelector/utils.js +3 -3
  301. package/dist/TimeRangeSelector/utils.js.map +1 -1
  302. package/dist/TimeSeriesTooltip/SeriesInfo.d.ts +1 -1
  303. package/dist/TimeSeriesTooltip/SeriesInfo.d.ts.map +1 -1
  304. package/dist/TimeSeriesTooltip/SeriesInfo.js +4 -4
  305. package/dist/TimeSeriesTooltip/SeriesInfo.js.map +1 -1
  306. package/dist/TimeSeriesTooltip/SeriesLabelsStack.d.ts +1 -1
  307. package/dist/TimeSeriesTooltip/SeriesLabelsStack.d.ts.map +1 -1
  308. package/dist/TimeSeriesTooltip/SeriesLabelsStack.js +2 -2
  309. package/dist/TimeSeriesTooltip/SeriesLabelsStack.js.map +1 -1
  310. package/dist/TimeSeriesTooltip/SeriesMarker.d.ts +2 -2
  311. package/dist/TimeSeriesTooltip/SeriesMarker.d.ts.map +1 -1
  312. package/dist/TimeSeriesTooltip/SeriesMarker.js +3 -3
  313. package/dist/TimeSeriesTooltip/SeriesMarker.js.map +1 -1
  314. package/dist/TimeSeriesTooltip/TimeChartTooltip.d.ts +6 -6
  315. package/dist/TimeSeriesTooltip/TimeChartTooltip.d.ts.map +1 -1
  316. package/dist/TimeSeriesTooltip/TimeChartTooltip.js +8 -8
  317. package/dist/TimeSeriesTooltip/TimeChartTooltip.js.map +1 -1
  318. package/dist/TimeSeriesTooltip/TooltipContent.d.ts +2 -2
  319. package/dist/TimeSeriesTooltip/TooltipContent.d.ts.map +1 -1
  320. package/dist/TimeSeriesTooltip/TooltipContent.js +4 -4
  321. package/dist/TimeSeriesTooltip/TooltipContent.js.map +1 -1
  322. package/dist/TimeSeriesTooltip/TooltipHeader.d.ts +2 -3
  323. package/dist/TimeSeriesTooltip/TooltipHeader.d.ts.map +1 -1
  324. package/dist/TimeSeriesTooltip/TooltipHeader.js +6 -6
  325. package/dist/TimeSeriesTooltip/TooltipHeader.js.map +1 -1
  326. package/dist/TimeSeriesTooltip/index.js +10 -10
  327. package/dist/TimeSeriesTooltip/index.js.map +1 -1
  328. package/dist/TimeSeriesTooltip/nearby-series.d.ts +5 -5
  329. package/dist/TimeSeriesTooltip/nearby-series.d.ts.map +1 -1
  330. package/dist/TimeSeriesTooltip/nearby-series.js +5 -5
  331. package/dist/TimeSeriesTooltip/nearby-series.js.map +1 -1
  332. package/dist/TimeSeriesTooltip/tooltip-model.d.ts +1 -1
  333. package/dist/TimeSeriesTooltip/tooltip-model.d.ts.map +1 -1
  334. package/dist/TimeSeriesTooltip/tooltip-model.js +1 -1
  335. package/dist/TimeSeriesTooltip/tooltip-model.js.map +1 -1
  336. package/dist/TimeSeriesTooltip/utils.d.ts +4 -4
  337. package/dist/TimeSeriesTooltip/utils.d.ts.map +1 -1
  338. package/dist/TimeSeriesTooltip/utils.js +1 -1
  339. package/dist/TimeSeriesTooltip/utils.js.map +1 -1
  340. package/dist/TimeZoneSelector.d.ts +3 -3
  341. package/dist/TimeZoneSelector.d.ts.map +1 -1
  342. package/dist/TimeZoneSelector.js +8 -5
  343. package/dist/TimeZoneSelector.js.map +1 -1
  344. package/dist/ToolbarIconButton/ToolbarIconButton.d.ts +1 -2
  345. package/dist/ToolbarIconButton/ToolbarIconButton.d.ts.map +1 -1
  346. package/dist/ToolbarIconButton/ToolbarIconButton.js +3 -3
  347. package/dist/ToolbarIconButton/ToolbarIconButton.js.map +1 -1
  348. package/dist/ToolbarIconButton/index.js +1 -1
  349. package/dist/ToolbarIconButton/index.js.map +1 -1
  350. package/dist/TransformsEditor/TransformEditor.d.ts +3 -3
  351. package/dist/TransformsEditor/TransformEditor.d.ts.map +1 -1
  352. package/dist/TransformsEditor/TransformEditor.js +3 -3
  353. package/dist/TransformsEditor/TransformEditor.js.map +1 -1
  354. package/dist/TransformsEditor/TransformEditorContainer.d.ts +2 -2
  355. package/dist/TransformsEditor/TransformEditorContainer.d.ts.map +1 -1
  356. package/dist/TransformsEditor/TransformEditorContainer.js +8 -8
  357. package/dist/TransformsEditor/TransformEditorContainer.js.map +1 -1
  358. package/dist/TransformsEditor/TransformsEditor.d.ts +3 -3
  359. package/dist/TransformsEditor/TransformsEditor.d.ts.map +1 -1
  360. package/dist/TransformsEditor/TransformsEditor.js +5 -5
  361. package/dist/TransformsEditor/TransformsEditor.js.map +1 -1
  362. package/dist/TransformsEditor/index.js +1 -1
  363. package/dist/TransformsEditor/index.js.map +1 -1
  364. package/dist/ValueMappingEditor/ValueMappingEditor.d.ts +3 -3
  365. package/dist/ValueMappingEditor/ValueMappingEditor.d.ts.map +1 -1
  366. package/dist/ValueMappingEditor/ValueMappingEditor.js +5 -5
  367. package/dist/ValueMappingEditor/ValueMappingEditor.js.map +1 -1
  368. package/dist/ValueMappingEditor/ValueMappingsEditor.d.ts +2 -2
  369. package/dist/ValueMappingEditor/ValueMappingsEditor.d.ts.map +1 -1
  370. package/dist/ValueMappingEditor/ValueMappingsEditor.js +4 -4
  371. package/dist/ValueMappingEditor/ValueMappingsEditor.js.map +1 -1
  372. package/dist/ValueMappingEditor/index.js +1 -1
  373. package/dist/ValueMappingEditor/index.js.map +1 -1
  374. package/dist/YAxisLabel.d.ts +1 -1
  375. package/dist/YAxisLabel.d.ts.map +1 -1
  376. package/dist/YAxisLabel.js +1 -1
  377. package/dist/YAxisLabel.js.map +1 -1
  378. package/dist/context/ChartsProvider.d.ts +4 -3
  379. package/dist/context/ChartsProvider.d.ts.map +1 -1
  380. package/dist/context/ChartsProvider.js +2 -2
  381. package/dist/context/ChartsProvider.js.map +1 -1
  382. package/dist/context/ItemActionsProvider.d.ts +1 -1
  383. package/dist/context/ItemActionsProvider.d.ts.map +1 -1
  384. package/dist/context/ItemActionsProvider.js +2 -2
  385. package/dist/context/ItemActionsProvider.js.map +1 -1
  386. package/dist/context/SelectionProvider.d.ts +1 -1
  387. package/dist/context/SelectionProvider.d.ts.map +1 -1
  388. package/dist/context/SelectionProvider.js +2 -2
  389. package/dist/context/SelectionProvider.js.map +1 -1
  390. package/dist/context/SnackbarProvider.d.ts +2 -1
  391. package/dist/context/SnackbarProvider.d.ts.map +1 -1
  392. package/dist/context/SnackbarProvider.js +3 -3
  393. package/dist/context/SnackbarProvider.js.map +1 -1
  394. package/dist/context/TimeZoneProvider.d.ts +2 -1
  395. package/dist/context/TimeZoneProvider.d.ts.map +1 -1
  396. package/dist/context/TimeZoneProvider.js +3 -3
  397. package/dist/context/TimeZoneProvider.js.map +1 -1
  398. package/dist/context/index.js +5 -5
  399. package/dist/context/index.js.map +1 -1
  400. package/dist/controls/TextField.d.ts +1 -2
  401. package/dist/controls/TextField.d.ts.map +1 -1
  402. package/dist/controls/TextField.js +4 -4
  403. package/dist/controls/TextField.js.map +1 -1
  404. package/dist/controls/index.js +1 -1
  405. package/dist/controls/index.js.map +1 -1
  406. package/dist/index.d.ts +2 -0
  407. package/dist/index.d.ts.map +1 -1
  408. package/dist/index.js +40 -38
  409. package/dist/index.js.map +1 -1
  410. package/dist/model/action.d.ts +1 -1
  411. package/dist/model/action.d.ts.map +1 -1
  412. package/dist/model/action.js.map +1 -1
  413. package/dist/model/bits.d.ts +1 -1
  414. package/dist/model/bits.d.ts.map +1 -1
  415. package/dist/model/bits.js +4 -4
  416. package/dist/model/bits.js.map +1 -1
  417. package/dist/model/bytes.d.ts +1 -1
  418. package/dist/model/bytes.d.ts.map +1 -1
  419. package/dist/model/bytes.js +4 -4
  420. package/dist/model/bytes.js.map +1 -1
  421. package/dist/model/currency.d.ts +1 -1
  422. package/dist/model/currency.d.ts.map +1 -1
  423. package/dist/model/currency.js +4 -4
  424. package/dist/model/currency.js.map +1 -1
  425. package/dist/model/date.d.ts +1 -1
  426. package/dist/model/date.d.ts.map +1 -1
  427. package/dist/model/date.js.map +1 -1
  428. package/dist/model/decimal.d.ts +1 -1
  429. package/dist/model/decimal.d.ts.map +1 -1
  430. package/dist/model/decimal.js +3 -3
  431. package/dist/model/decimal.js.map +1 -1
  432. package/dist/model/formatterCache.js.map +1 -1
  433. package/dist/model/graph.d.ts +3 -3
  434. package/dist/model/graph.d.ts.map +1 -1
  435. package/dist/model/graph.js.map +1 -1
  436. package/dist/model/index.js +21 -21
  437. package/dist/model/index.js.map +1 -1
  438. package/dist/model/legend.d.ts +3 -3
  439. package/dist/model/legend.d.ts.map +1 -1
  440. package/dist/model/percent.d.ts +1 -1
  441. package/dist/model/percent.d.ts.map +1 -1
  442. package/dist/model/percent.js +3 -3
  443. package/dist/model/percent.js.map +1 -1
  444. package/dist/model/temperature.d.ts +1 -1
  445. package/dist/model/temperature.d.ts.map +1 -1
  446. package/dist/model/temperature.js +3 -3
  447. package/dist/model/temperature.js.map +1 -1
  448. package/dist/model/theme.d.ts +1 -1
  449. package/dist/model/theme.d.ts.map +1 -1
  450. package/dist/model/theme.js.map +1 -1
  451. package/dist/model/throughput.d.ts +1 -1
  452. package/dist/model/throughput.d.ts.map +1 -1
  453. package/dist/model/throughput.js +5 -5
  454. package/dist/model/throughput.js.map +1 -1
  455. package/dist/model/time.d.ts +1 -1
  456. package/dist/model/time.d.ts.map +1 -1
  457. package/dist/model/time.js +3 -3
  458. package/dist/model/time.js.map +1 -1
  459. package/dist/model/timeOption.d.ts +1 -1
  460. package/dist/model/timeOption.d.ts.map +1 -1
  461. package/dist/model/timeOption.js +2 -2
  462. package/dist/model/timeOption.js.map +1 -1
  463. package/dist/model/transforms.d.ts.map +1 -1
  464. package/dist/model/types.d.ts +3 -3
  465. package/dist/model/types.d.ts.map +1 -1
  466. package/dist/model/types.js.map +1 -1
  467. package/dist/model/units.d.ts +51 -51
  468. package/dist/model/units.d.ts.map +1 -1
  469. package/dist/model/units.js +9 -9
  470. package/dist/model/units.js.map +1 -1
  471. package/dist/test/index.js +1 -1
  472. package/dist/test/index.js.map +1 -1
  473. package/dist/test/render.d.ts +2 -2
  474. package/dist/test/render.d.ts.map +1 -1
  475. package/dist/test/render.js +2 -2
  476. package/dist/test/render.js.map +1 -1
  477. package/dist/test/setup-tests.d.ts +1 -1
  478. package/dist/test/setup-tests.d.ts.map +1 -1
  479. package/dist/test/setup-tests.js +3 -2
  480. package/dist/test/setup-tests.js.map +1 -1
  481. package/dist/test-utils/index.js +1 -1
  482. package/dist/test-utils/index.js.map +1 -1
  483. package/dist/test-utils/theme.d.ts +2 -2
  484. package/dist/test-utils/theme.d.ts.map +1 -1
  485. package/dist/test-utils/theme.js +2 -2
  486. package/dist/test-utils/theme.js.map +1 -1
  487. package/dist/theme/component-overrides/alert.d.ts +1 -1
  488. package/dist/theme/component-overrides/alert.d.ts.map +1 -1
  489. package/dist/theme/component-overrides/alert.js +1 -1
  490. package/dist/theme/component-overrides/alert.js.map +1 -1
  491. package/dist/theme/component-overrides/paper.d.ts +1 -1
  492. package/dist/theme/component-overrides/paper.d.ts.map +1 -1
  493. package/dist/theme/component-overrides/paper.js.map +1 -1
  494. package/dist/theme/index.d.ts +1 -1
  495. package/dist/theme/index.d.ts.map +1 -1
  496. package/dist/theme/index.js +2 -2
  497. package/dist/theme/index.js.map +1 -1
  498. package/dist/theme/palette/background.d.ts +1 -1
  499. package/dist/theme/palette/background.d.ts.map +1 -1
  500. package/dist/theme/palette/background.js +1 -1
  501. package/dist/theme/palette/background.js.map +1 -1
  502. package/dist/theme/palette/colors/blue.d.ts +1 -1
  503. package/dist/theme/palette/colors/blue.d.ts.map +1 -1
  504. package/dist/theme/palette/colors/blue.js.map +1 -1
  505. package/dist/theme/palette/colors/green.d.ts +1 -1
  506. package/dist/theme/palette/colors/green.d.ts.map +1 -1
  507. package/dist/theme/palette/colors/green.js.map +1 -1
  508. package/dist/theme/palette/colors/grey.d.ts +1 -1
  509. package/dist/theme/palette/colors/grey.d.ts.map +1 -1
  510. package/dist/theme/palette/colors/grey.js.map +1 -1
  511. package/dist/theme/palette/colors/index.js +8 -8
  512. package/dist/theme/palette/colors/index.js.map +1 -1
  513. package/dist/theme/palette/colors/orange.d.ts +1 -1
  514. package/dist/theme/palette/colors/orange.d.ts.map +1 -1
  515. package/dist/theme/palette/colors/orange.js.map +1 -1
  516. package/dist/theme/palette/colors/purple.d.ts +1 -1
  517. package/dist/theme/palette/colors/purple.d.ts.map +1 -1
  518. package/dist/theme/palette/colors/purple.js.map +1 -1
  519. package/dist/theme/palette/colors/red.d.ts +1 -1
  520. package/dist/theme/palette/colors/red.d.ts.map +1 -1
  521. package/dist/theme/palette/colors/red.js.map +1 -1
  522. package/dist/theme/palette/error.d.ts +1 -1
  523. package/dist/theme/palette/error.d.ts.map +1 -1
  524. package/dist/theme/palette/error.js +1 -1
  525. package/dist/theme/palette/error.js.map +1 -1
  526. package/dist/theme/palette/grey.d.ts +1 -1
  527. package/dist/theme/palette/grey.d.ts.map +1 -1
  528. package/dist/theme/palette/grey.js +1 -1
  529. package/dist/theme/palette/grey.js.map +1 -1
  530. package/dist/theme/palette/index.js +1 -1
  531. package/dist/theme/palette/index.js.map +1 -1
  532. package/dist/theme/palette/palette-options.d.ts +1 -1
  533. package/dist/theme/palette/palette-options.d.ts.map +1 -1
  534. package/dist/theme/palette/palette-options.js +10 -10
  535. package/dist/theme/palette/palette-options.js.map +1 -1
  536. package/dist/theme/palette/primary.d.ts +1 -1
  537. package/dist/theme/palette/primary.d.ts.map +1 -1
  538. package/dist/theme/palette/primary.js +1 -1
  539. package/dist/theme/palette/primary.js.map +1 -1
  540. package/dist/theme/palette/secondary.d.ts +1 -1
  541. package/dist/theme/palette/secondary.d.ts.map +1 -1
  542. package/dist/theme/palette/secondary.js +1 -1
  543. package/dist/theme/palette/secondary.js.map +1 -1
  544. package/dist/theme/palette/success.d.ts +1 -1
  545. package/dist/theme/palette/success.d.ts.map +1 -1
  546. package/dist/theme/palette/success.js +1 -1
  547. package/dist/theme/palette/success.js.map +1 -1
  548. package/dist/theme/palette/text.d.ts +1 -1
  549. package/dist/theme/palette/text.d.ts.map +1 -1
  550. package/dist/theme/palette/text.js +1 -1
  551. package/dist/theme/palette/text.js.map +1 -1
  552. package/dist/theme/palette/warning.d.ts +1 -1
  553. package/dist/theme/palette/warning.d.ts.map +1 -1
  554. package/dist/theme/palette/warning.js +1 -1
  555. package/dist/theme/palette/warning.js.map +1 -1
  556. package/dist/theme/theme.d.ts +2 -1
  557. package/dist/theme/theme.d.ts.map +1 -1
  558. package/dist/theme/theme.js +5 -5
  559. package/dist/theme/theme.js.map +1 -1
  560. package/dist/theme/types/ThemeExtension.d.js +2 -1
  561. package/dist/theme/types/ThemeExtension.d.js.map +1 -1
  562. package/dist/{cjs/model/theme.js → theme/types/fonts.d.js} +2 -4
  563. package/dist/theme/types/fonts.d.js.map +1 -0
  564. package/dist/theme/typography.d.ts +1 -1
  565. package/dist/theme/typography.d.ts.map +1 -1
  566. package/dist/theme/typography.js +6 -6
  567. package/dist/theme/typography.js.map +1 -1
  568. package/dist/utils/axis.d.ts +1 -1
  569. package/dist/utils/axis.d.ts.map +1 -1
  570. package/dist/utils/axis.js +2 -2
  571. package/dist/utils/axis.js.map +1 -1
  572. package/dist/utils/browser-storage.js +1 -1
  573. package/dist/utils/browser-storage.js.map +1 -1
  574. package/dist/utils/chart-actions.d.ts +3 -3
  575. package/dist/utils/chart-actions.d.ts.map +1 -1
  576. package/dist/utils/chart-actions.js +1 -1
  577. package/dist/utils/chart-actions.js.map +1 -1
  578. package/dist/utils/combine-sx.d.ts +1 -1
  579. package/dist/utils/combine-sx.d.ts.map +1 -1
  580. package/dist/utils/combine-sx.js.map +1 -1
  581. package/dist/utils/component-ids.js +1 -1
  582. package/dist/utils/data-field-interpolation.js +1 -1
  583. package/dist/utils/data-field-interpolation.js.map +1 -1
  584. package/dist/utils/format.js +8 -3
  585. package/dist/utils/format.js.map +1 -1
  586. package/dist/utils/index.js +19 -19
  587. package/dist/utils/index.js.map +1 -1
  588. package/dist/utils/mathjs.d.ts +1 -1
  589. package/dist/utils/mathjs.js +1 -1
  590. package/dist/utils/memo.d.ts +1 -1
  591. package/dist/utils/memo.d.ts.map +1 -1
  592. package/dist/utils/memo.js +2 -2
  593. package/dist/utils/memo.js.map +1 -1
  594. package/dist/utils/regexp.js +3 -1
  595. package/dist/utils/regexp.js.map +1 -1
  596. package/dist/utils/request-interpolation.d.ts +2 -2
  597. package/dist/utils/request-interpolation.d.ts.map +1 -1
  598. package/dist/utils/request-interpolation.js +2 -2
  599. package/dist/utils/request-interpolation.js.map +1 -1
  600. package/dist/utils/selection-interpolation.d.ts +2 -2
  601. package/dist/utils/selection-interpolation.d.ts.map +1 -1
  602. package/dist/utils/selection-interpolation.js +2 -2
  603. package/dist/utils/selection-interpolation.js.map +1 -1
  604. package/dist/utils/text.d.ts +1 -1
  605. package/dist/utils/text.d.ts.map +1 -1
  606. package/dist/utils/text.js.map +1 -1
  607. package/dist/utils/theme-gen.d.ts +2 -2
  608. package/dist/utils/theme-gen.d.ts.map +1 -1
  609. package/dist/utils/theme-gen.js +1 -1
  610. package/dist/utils/theme-gen.js.map +1 -1
  611. package/dist/utils/time-series-data.d.ts +1 -1
  612. package/dist/utils/time-series-data.d.ts.map +1 -1
  613. package/dist/utils/time-series-data.js +1 -1
  614. package/dist/utils/time-series-data.js.map +1 -1
  615. package/dist/utils/trace-data.d.ts +2 -2
  616. package/dist/utils/trace-data.d.ts.map +1 -1
  617. package/dist/utils/trace-data.js.map +1 -1
  618. package/dist/utils/transform-data.d.ts +1 -1
  619. package/dist/utils/transform-data.d.ts.map +1 -1
  620. package/dist/utils/transform-data.js +1 -1
  621. package/dist/utils/transform-data.js.map +1 -1
  622. package/dist/utils/value-mapping.d.ts +1 -1
  623. package/dist/utils/value-mapping.d.ts.map +1 -1
  624. package/dist/utils/value-mapping.js +1 -1
  625. package/dist/utils/value-mapping.js.map +1 -1
  626. package/dist/utils/variable-interpolation.d.ts +9 -1
  627. package/dist/utils/variable-interpolation.d.ts.map +1 -1
  628. package/dist/utils/variable-interpolation.js +13 -1
  629. package/dist/utils/variable-interpolation.js.map +1 -1
  630. package/package.json +12 -12
  631. package/dist/cjs/AlignSelector/AlignSelector.js +0 -50
  632. package/dist/cjs/AlignSelector/index.js +0 -30
  633. package/dist/cjs/ColorPicker/ColorPicker.js +0 -106
  634. package/dist/cjs/ColorPicker/OptionsColorPicker.js +0 -92
  635. package/dist/cjs/ColorPicker/index.js +0 -31
  636. package/dist/cjs/ContentWithLegend/ContentWithLegend.js +0 -71
  637. package/dist/cjs/ContentWithLegend/index.js +0 -30
  638. package/dist/cjs/ContentWithLegend/model/content-with-legend-model.js +0 -122
  639. package/dist/cjs/DensitySelector/DensitySelector.js +0 -54
  640. package/dist/cjs/DensitySelector/index.js +0 -30
  641. package/dist/cjs/Dialog/Dialog.js +0 -102
  642. package/dist/cjs/Dialog/DiscardChangesConfirmationDialog.js +0 -55
  643. package/dist/cjs/Dialog/index.js +0 -31
  644. package/dist/cjs/DragAndDrop/DragAndDropList.js +0 -159
  645. package/dist/cjs/DragAndDrop/DragButton.js +0 -123
  646. package/dist/cjs/DragAndDrop/DropIndicator.js +0 -52
  647. package/dist/cjs/DragAndDrop/index.js +0 -32
  648. package/dist/cjs/DragAndDrop/model.js +0 -25
  649. package/dist/cjs/Drawer/Drawer.js +0 -44
  650. package/dist/cjs/Drawer/index.js +0 -30
  651. package/dist/cjs/EChart/EChart.js +0 -203
  652. package/dist/cjs/EChart/index.js +0 -31
  653. package/dist/cjs/EChart/timezone-formatter.js +0 -49
  654. package/dist/cjs/ErrorAlert.js +0 -31
  655. package/dist/cjs/ErrorBoundary.js +0 -24
  656. package/dist/cjs/FontSizeSelector/FontSizeSelector.js +0 -132
  657. package/dist/cjs/FontSizeSelector/index.js +0 -30
  658. package/dist/cjs/FormEditor/FormActions.js +0 -83
  659. package/dist/cjs/FormEditor/index.js +0 -30
  660. package/dist/cjs/FormatControls/FormatControls.js +0 -119
  661. package/dist/cjs/FormatControls/UnitSelector.js +0 -55
  662. package/dist/cjs/FormatControls/index.js +0 -31
  663. package/dist/cjs/InfoTooltip/InfoTooltip.js +0 -86
  664. package/dist/cjs/InfoTooltip/index.js +0 -30
  665. package/dist/cjs/JSONEditor.js +0 -69
  666. package/dist/cjs/Legend/CompactLegend.js +0 -56
  667. package/dist/cjs/Legend/Legend.js +0 -131
  668. package/dist/cjs/Legend/LegendColorBadge.js +0 -39
  669. package/dist/cjs/Legend/ListLegend.js +0 -54
  670. package/dist/cjs/Legend/ListLegendItem.js +0 -84
  671. package/dist/cjs/Legend/TableLegend.js +0 -98
  672. package/dist/cjs/Legend/index.js +0 -31
  673. package/dist/cjs/Legend/legend-model.js +0 -27
  674. package/dist/cjs/LinksEditor/LinkEditorForm.js +0 -95
  675. package/dist/cjs/LinksEditor/index.js +0 -30
  676. package/dist/cjs/ModeSelector/ModeSelector.js +0 -51
  677. package/dist/cjs/ModeSelector/index.js +0 -30
  678. package/dist/cjs/OptionsEditorLayout/OptionsEditorColumn.js +0 -34
  679. package/dist/cjs/OptionsEditorLayout/OptionsEditorControl.js +0 -95
  680. package/dist/cjs/OptionsEditorLayout/OptionsEditorGrid.js +0 -31
  681. package/dist/cjs/OptionsEditorLayout/OptionsEditorGroup.js +0 -59
  682. package/dist/cjs/OptionsEditorLayout/index.js +0 -33
  683. package/dist/cjs/Overlay/Overlay.js +0 -71
  684. package/dist/cjs/Overlay/index.js +0 -30
  685. package/dist/cjs/RefreshIntervalPicker/RefreshIntervalPicker.js +0 -68
  686. package/dist/cjs/RefreshIntervalPicker/index.js +0 -30
  687. package/dist/cjs/SettingsAutocomplete/SettingsAutocomplete.js +0 -82
  688. package/dist/cjs/SettingsAutocomplete/index.js +0 -30
  689. package/dist/cjs/SortSelector/SortSelector.js +0 -50
  690. package/dist/cjs/SortSelector/SortSelectorButtons.js +0 -50
  691. package/dist/cjs/SortSelector/index.js +0 -31
  692. package/dist/cjs/Table/InnerTable.js +0 -47
  693. package/dist/cjs/Table/Table.js +0 -222
  694. package/dist/cjs/Table/TableBody.js +0 -31
  695. package/dist/cjs/Table/TableCell.js +0 -153
  696. package/dist/cjs/Table/TableCheckbox.js +0 -57
  697. package/dist/cjs/Table/TableFoot.js +0 -31
  698. package/dist/cjs/Table/TableHead.js +0 -31
  699. package/dist/cjs/Table/TableHeaderCell.js +0 -93
  700. package/dist/cjs/Table/TableRow.js +0 -37
  701. package/dist/cjs/Table/TableToolbar.js +0 -151
  702. package/dist/cjs/Table/VirtualizedTable.js +0 -284
  703. package/dist/cjs/Table/VirtualizedTableContainer.js +0 -36
  704. package/dist/cjs/Table/hooks/useFuzzySearch.js +0 -67
  705. package/dist/cjs/Table/hooks/useTableKeyboardNav.js +0 -108
  706. package/dist/cjs/Table/hooks/useVirtualizedTableKeyboardNav.js +0 -89
  707. package/dist/cjs/Table/index.js +0 -31
  708. package/dist/cjs/Table/model/table-model.js +0 -138
  709. package/dist/cjs/ThresholdsEditor/ThresholdInput.js +0 -80
  710. package/dist/cjs/ThresholdsEditor/ThresholdsEditor.js +0 -282
  711. package/dist/cjs/ThresholdsEditor/index.js +0 -30
  712. package/dist/cjs/TimeRangeSelector/DateTimeRangePicker.js +0 -204
  713. package/dist/cjs/TimeRangeSelector/TimeRangeSelector.js +0 -271
  714. package/dist/cjs/TimeRangeSelector/index.js +0 -31
  715. package/dist/cjs/TimeRangeSelector/utils.js +0 -72
  716. package/dist/cjs/TimeSeriesTooltip/SeriesInfo.js +0 -98
  717. package/dist/cjs/TimeSeriesTooltip/SeriesLabelsStack.js +0 -107
  718. package/dist/cjs/TimeSeriesTooltip/SeriesMarker.js +0 -41
  719. package/dist/cjs/TimeSeriesTooltip/TimeChartTooltip.js +0 -113
  720. package/dist/cjs/TimeSeriesTooltip/TooltipContent.js +0 -58
  721. package/dist/cjs/TimeSeriesTooltip/TooltipHeader.js +0 -168
  722. package/dist/cjs/TimeSeriesTooltip/index.js +0 -39
  723. package/dist/cjs/TimeSeriesTooltip/nearby-series.js +0 -454
  724. package/dist/cjs/TimeSeriesTooltip/tooltip-model.js +0 -148
  725. package/dist/cjs/TimeSeriesTooltip/types.js +0 -16
  726. package/dist/cjs/TimeSeriesTooltip/utils.js +0 -199
  727. package/dist/cjs/TimeZoneSelector.js +0 -63
  728. package/dist/cjs/ToolbarIconButton/ToolbarIconButton.js +0 -40
  729. package/dist/cjs/ToolbarIconButton/index.js +0 -30
  730. package/dist/cjs/TransformsEditor/TransformEditor.js +0 -297
  731. package/dist/cjs/TransformsEditor/TransformEditorContainer.js +0 -131
  732. package/dist/cjs/TransformsEditor/TransformsEditor.js +0 -103
  733. package/dist/cjs/TransformsEditor/index.js +0 -30
  734. package/dist/cjs/ValueMappingEditor/ValueMappingEditor.js +0 -387
  735. package/dist/cjs/ValueMappingEditor/ValueMappingsEditor.js +0 -131
  736. package/dist/cjs/ValueMappingEditor/index.js +0 -30
  737. package/dist/cjs/YAxisLabel.js +0 -50
  738. package/dist/cjs/context/ChartsProvider.js +0 -114
  739. package/dist/cjs/context/ItemActionsProvider.js +0 -111
  740. package/dist/cjs/context/SelectionProvider.js +0 -128
  741. package/dist/cjs/context/SnackbarProvider.js +0 -126
  742. package/dist/cjs/context/TimeZoneProvider.js +0 -98
  743. package/dist/cjs/context/index.js +0 -34
  744. package/dist/cjs/controls/TextField.js +0 -54
  745. package/dist/cjs/controls/index.js +0 -30
  746. package/dist/cjs/index.js +0 -67
  747. package/dist/cjs/model/action.js +0 -43
  748. package/dist/cjs/model/bits.js +0 -113
  749. package/dist/cjs/model/bytes.js +0 -115
  750. package/dist/cjs/model/constants.js +0 -23
  751. package/dist/cjs/model/currency.js +0 -126
  752. package/dist/cjs/model/date.js +0 -297
  753. package/dist/cjs/model/decimal.js +0 -72
  754. package/dist/cjs/model/formatterCache.js +0 -120
  755. package/dist/cjs/model/graph.js +0 -59
  756. package/dist/cjs/model/index.js +0 -50
  757. package/dist/cjs/model/legend.js +0 -101
  758. package/dist/cjs/model/percent.js +0 -82
  759. package/dist/cjs/model/temperature.js +0 -72
  760. package/dist/cjs/model/throughput.js +0 -161
  761. package/dist/cjs/model/time.js +0 -178
  762. package/dist/cjs/model/timeOption.js +0 -34
  763. package/dist/cjs/model/timeZoneOption.js +0 -34
  764. package/dist/cjs/model/transforms.js +0 -29
  765. package/dist/cjs/model/units.js +0 -186
  766. package/dist/cjs/model/utils.js +0 -48
  767. package/dist/cjs/model/value-mapping.js +0 -16
  768. package/dist/cjs/test/index.js +0 -30
  769. package/dist/cjs/test/render.js +0 -38
  770. package/dist/cjs/test/setup-tests.js +0 -20
  771. package/dist/cjs/test-utils/index.js +0 -30
  772. package/dist/cjs/test-utils/theme.js +0 -61
  773. package/dist/cjs/theme/component-overrides/alert.js +0 -104
  774. package/dist/cjs/theme/component-overrides/paper.js +0 -29
  775. package/dist/cjs/theme/index.js +0 -31
  776. package/dist/cjs/theme/palette/background.js +0 -46
  777. package/dist/cjs/theme/palette/colors/blue.js +0 -37
  778. package/dist/cjs/theme/palette/colors/common.js +0 -32
  779. package/dist/cjs/theme/palette/colors/green.js +0 -37
  780. package/dist/cjs/theme/palette/colors/grey.js +0 -37
  781. package/dist/cjs/theme/palette/colors/index.js +0 -37
  782. package/dist/cjs/theme/palette/colors/orange.js +0 -37
  783. package/dist/cjs/theme/palette/colors/purple.js +0 -37
  784. package/dist/cjs/theme/palette/colors/red.js +0 -37
  785. package/dist/cjs/theme/palette/colors/types.js +0 -16
  786. package/dist/cjs/theme/palette/error.js +0 -34
  787. package/dist/cjs/theme/palette/grey.js +0 -50
  788. package/dist/cjs/theme/palette/index.js +0 -30
  789. package/dist/cjs/theme/palette/palette-options.js +0 -61
  790. package/dist/cjs/theme/palette/primary.js +0 -34
  791. package/dist/cjs/theme/palette/secondary.js +0 -34
  792. package/dist/cjs/theme/palette/success.js +0 -34
  793. package/dist/cjs/theme/palette/text.js +0 -44
  794. package/dist/cjs/theme/palette/warning.js +0 -34
  795. package/dist/cjs/theme/theme.js +0 -90
  796. package/dist/cjs/theme/types/ThemeExtension.d.js +0 -17
  797. package/dist/cjs/theme/typography.js +0 -99
  798. package/dist/cjs/utils/axis.js +0 -122
  799. package/dist/cjs/utils/browser-storage.js +0 -62
  800. package/dist/cjs/utils/chart-actions.js +0 -180
  801. package/dist/cjs/utils/combine-sx.js +0 -31
  802. package/dist/cjs/utils/component-ids.js +0 -33
  803. package/dist/cjs/utils/data-field-interpolation.js +0 -230
  804. package/dist/cjs/utils/format.js +0 -127
  805. package/dist/cjs/utils/index.js +0 -48
  806. package/dist/cjs/utils/mathjs.js +0 -38
  807. package/dist/cjs/utils/memo.js +0 -64
  808. package/dist/cjs/utils/regexp.js +0 -54
  809. package/dist/cjs/utils/request-interpolation.js +0 -99
  810. package/dist/cjs/utils/selection-interpolation.js +0 -69
  811. package/dist/cjs/utils/text.js +0 -52
  812. package/dist/cjs/utils/theme-gen.js +0 -274
  813. package/dist/cjs/utils/time-series-data.js +0 -141
  814. package/dist/cjs/utils/trace-data.js +0 -25
  815. package/dist/cjs/utils/transform-data.js +0 -157
  816. package/dist/cjs/utils/types.js +0 -16
  817. package/dist/cjs/utils/value-mapping.js +0 -105
  818. package/dist/cjs/utils/variable-interpolation.js +0 -198
@@ -11,10 +11,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
- import { useState } from 'react';
15
- import { Stack, FormLabel, TextField, IconButton, Box } from '@mui/material';
16
- import DeleteIcon from 'mdi-material-ui/DeleteOutline';
17
- import { OptionsColorPicker } from '../ColorPicker/OptionsColorPicker';
14
+ import { Stack, FormLabel, TextField, IconButton, Box } from "@mui/material";
15
+ import DeleteIcon from "mdi-material-ui/DeleteOutline";
16
+ import { useState } from "react";
17
+ import { OptionsColorPicker } from "../ColorPicker/OptionsColorPicker.js";
18
18
  export function ThresholdInput({ inputRef, label, color, value, mode, onChange, onColorChange, onBlur, onDelete }) {
19
19
  const [key, setKey] = useState(0); // use key to cause input to lose focus when pressing enter
20
20
  return /*#__PURE__*/ _jsxs(Stack, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ThresholdsEditor/ThresholdInput.tsx"],"sourcesContent":["// Copyright 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 { ReactElement, RefObject, useState } from 'react';\nimport { Stack, FormLabel, TextField, IconButton, Box } from '@mui/material';\nimport DeleteIcon from 'mdi-material-ui/DeleteOutline';\nimport { OptionsColorPicker } from '../ColorPicker/OptionsColorPicker';\nimport { ThresholdOptions } from '../model';\n\nexport interface ThresholdInputProps {\n label: string;\n color: string;\n value: number;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onColorChange: (color: string) => void;\n onBlur: () => void;\n onDelete: () => void;\n inputRef?: RefObject<HTMLInputElement | null>;\n mode?: ThresholdOptions['mode'];\n}\n\nexport function ThresholdInput({\n inputRef,\n label,\n color,\n value,\n mode,\n onChange,\n onColorChange,\n onBlur,\n onDelete,\n}: ThresholdInputProps): ReactElement {\n const [key, setKey] = useState(0); // use key to cause input to lose focus when pressing enter\n return (\n <Stack flex={1} direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\" spacing={1}>\n <OptionsColorPicker label={label} color={color} onColorChange={onColorChange} />\n <FormLabel htmlFor={label}>{label}</FormLabel>\n <TextField\n id={label}\n key={key}\n inputRef={inputRef}\n type=\"number\"\n value={value === 0 ? '' : value}\n placeholder=\"0\"\n onChange={onChange}\n onBlur={onBlur}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n onBlur();\n setKey(key + 1);\n }\n }}\n InputProps={{\n endAdornment: mode === 'percent' ? <Box paddingX={1}>%</Box> : undefined,\n }}\n />\n <IconButton aria-label={`delete threshold ${label}`} size=\"small\" onClick={onDelete}>\n <DeleteIcon />\n </IconButton>\n </Stack>\n );\n}\n"],"names":["useState","Stack","FormLabel","TextField","IconButton","Box","DeleteIcon","OptionsColorPicker","ThresholdInput","inputRef","label","color","value","mode","onChange","onColorChange","onBlur","onDelete","key","setKey","flex","direction","alignItems","justifyContent","spacing","htmlFor","id","type","placeholder","onKeyDown","e","InputProps","endAdornment","paddingX","undefined","aria-label","size","onClick"],"mappings":";AAAA,+BAA+B;AAC/B,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,SAAkCA,QAAQ,QAAQ,QAAQ;AAC1D,SAASC,KAAK,EAAEC,SAAS,EAAEC,SAAS,EAAEC,UAAU,EAAEC,GAAG,QAAQ,gBAAgB;AAC7E,OAAOC,gBAAgB,gCAAgC;AACvD,SAASC,kBAAkB,QAAQ,oCAAoC;AAevE,OAAO,SAASC,eAAe,EAC7BC,QAAQ,EACRC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,aAAa,EACbC,MAAM,EACNC,QAAQ,EACY;IACpB,MAAM,CAACC,KAAKC,OAAO,GAAGnB,SAAS,IAAI,2DAA2D;IAC9F,qBACE,MAACC;QAAMmB,MAAM;QAAGC,WAAU;QAAMC,YAAW;QAASC,gBAAe;QAAgBC,SAAS;;0BAC1F,KAACjB;gBAAmBG,OAAOA;gBAAOC,OAAOA;gBAAOI,eAAeA;;0BAC/D,KAACb;gBAAUuB,SAASf;0BAAQA;;0BAC5B,KAACP;gBACCuB,IAAIhB;gBAEJD,UAAUA;gBACVkB,MAAK;gBACLf,OAAOA,UAAU,IAAI,KAAKA;gBAC1BgB,aAAY;gBACZd,UAAUA;gBACVE,QAAQA;gBACRa,WAAW,CAACC;oBACV,IAAIA,EAAEZ,GAAG,KAAK,SAAS;wBACrBF;wBACAG,OAAOD,MAAM;oBACf;gBACF;gBACAa,YAAY;oBACVC,cAAcnB,SAAS,0BAAY,KAACR;wBAAI4B,UAAU;kCAAG;yBAAUC;gBACjE;eAfKhB;0BAiBP,KAACd;gBAAW+B,cAAY,CAAC,iBAAiB,EAAEzB,OAAO;gBAAE0B,MAAK;gBAAQC,SAASpB;0BACzE,cAAA,KAACX;;;;AAIT"}
1
+ {"version":3,"sources":["../../src/ThresholdsEditor/ThresholdInput.tsx"],"sourcesContent":["// Copyright 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 { Stack, FormLabel, TextField, IconButton, Box } from '@mui/material';\nimport DeleteIcon from 'mdi-material-ui/DeleteOutline';\nimport type { ReactElement, RefObject } from 'react';\nimport { useState } from 'react';\n\nimport { OptionsColorPicker } from '../ColorPicker/OptionsColorPicker';\nimport type { ThresholdOptions } from '../model';\n\nexport interface ThresholdInputProps {\n label: string;\n color: string;\n value: number;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onColorChange: (color: string) => void;\n onBlur: () => void;\n onDelete: () => void;\n inputRef?: RefObject<HTMLInputElement | null>;\n mode?: ThresholdOptions['mode'];\n}\n\nexport function ThresholdInput({\n inputRef,\n label,\n color,\n value,\n mode,\n onChange,\n onColorChange,\n onBlur,\n onDelete,\n}: ThresholdInputProps): ReactElement {\n const [key, setKey] = useState(0); // use key to cause input to lose focus when pressing enter\n return (\n <Stack flex={1} direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\" spacing={1}>\n <OptionsColorPicker label={label} color={color} onColorChange={onColorChange} />\n <FormLabel htmlFor={label}>{label}</FormLabel>\n <TextField\n id={label}\n key={key}\n inputRef={inputRef}\n type=\"number\"\n value={value === 0 ? '' : value}\n placeholder=\"0\"\n onChange={onChange}\n onBlur={onBlur}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n onBlur();\n setKey(key + 1);\n }\n }}\n InputProps={{\n endAdornment: mode === 'percent' ? <Box paddingX={1}>%</Box> : undefined,\n }}\n />\n <IconButton aria-label={`delete threshold ${label}`} size=\"small\" onClick={onDelete}>\n <DeleteIcon />\n </IconButton>\n </Stack>\n );\n}\n"],"names":["Stack","FormLabel","TextField","IconButton","Box","DeleteIcon","useState","OptionsColorPicker","ThresholdInput","inputRef","label","color","value","mode","onChange","onColorChange","onBlur","onDelete","key","setKey","flex","direction","alignItems","justifyContent","spacing","htmlFor","id","type","placeholder","onKeyDown","e","InputProps","endAdornment","paddingX","undefined","aria-label","size","onClick"],"mappings":";AAAA,+BAA+B;AAC/B,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,SAASA,KAAK,EAAEC,SAAS,EAAEC,SAAS,EAAEC,UAAU,EAAEC,GAAG,QAAQ,gBAAgB;AAC7E,OAAOC,gBAAgB,gCAAgC;AAEvD,SAASC,QAAQ,QAAQ,QAAQ;AAEjC,SAASC,kBAAkB,QAAQ,uCAAoC;AAevE,OAAO,SAASC,eAAe,EAC7BC,QAAQ,EACRC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,aAAa,EACbC,MAAM,EACNC,QAAQ,EACY;IACpB,MAAM,CAACC,KAAKC,OAAO,GAAGb,SAAS,IAAI,2DAA2D;IAC9F,qBACE,MAACN;QAAMoB,MAAM;QAAGC,WAAU;QAAMC,YAAW;QAASC,gBAAe;QAAgBC,SAAS;;0BAC1F,KAACjB;gBAAmBG,OAAOA;gBAAOC,OAAOA;gBAAOI,eAAeA;;0BAC/D,KAACd;gBAAUwB,SAASf;0BAAQA;;0BAC5B,KAACR;gBACCwB,IAAIhB;gBAEJD,UAAUA;gBACVkB,MAAK;gBACLf,OAAOA,UAAU,IAAI,KAAKA;gBAC1BgB,aAAY;gBACZd,UAAUA;gBACVE,QAAQA;gBACRa,WAAW,CAACC;oBACV,IAAIA,EAAEZ,GAAG,KAAK,SAAS;wBACrBF;wBACAG,OAAOD,MAAM;oBACf;gBACF;gBACAa,YAAY;oBACVC,cAAcnB,SAAS,0BAAY,KAACT;wBAAI6B,UAAU;kCAAG;yBAAUC;gBACjE;eAfKhB;0BAiBP,KAACf;gBAAWgC,cAAY,CAAC,iBAAiB,EAAEzB,OAAO;gBAAE0B,MAAK;gBAAQC,SAASpB;0BACzE,cAAA,KAACZ;;;;AAIT"}
@@ -1,5 +1,5 @@
1
- import { ReactElement } from 'react';
2
- import { ThresholdOptions } from '../model';
1
+ import type { ReactElement } from 'react';
2
+ import type { ThresholdOptions } from '../model';
3
3
  export interface ThresholdsEditorProps {
4
4
  onChange: (thresholds: ThresholdOptions) => void;
5
5
  thresholds?: ThresholdOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"ThresholdsEditor.d.ts","sourceRoot":"","sources":["../../src/ThresholdsEditor/ThresholdsEditor.tsx"],"names":[],"mappings":"AAaA,OAAc,EAAE,YAAY,EAAqB,MAAM,OAAO,CAAC;AAS/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG5C,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,CAAC,UAAU,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACjD,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAID,wBAAgB,gBAAgB,CAAC,EAC/B,UAAU,EACV,QAAQ,EACR,WAAW,EACX,kBAAkB,GACnB,EAAE,qBAAqB,GAAG,YAAY,CA0LtC"}
1
+ {"version":3,"file":"ThresholdsEditor.d.ts","sourceRoot":"","sources":["../../src/ThresholdsEditor/ThresholdsEditor.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAM1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIjD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,CAAC,UAAU,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACjD,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAID,wBAAgB,gBAAgB,CAAC,EAC/B,UAAU,EACV,QAAQ,EACR,WAAW,EACX,kBAAkB,GACnB,EAAE,qBAAqB,GAAG,YAAY,CA0LtC"}
@@ -11,16 +11,16 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
- import React, { useEffect, useRef } from 'react';
15
- import { produce } from 'immer';
16
- import { IconButton, ToggleButton, ToggleButtonGroup, Typography } from '@mui/material';
17
- import PlusIcon from 'mdi-material-ui/Plus';
18
- import { Stack } from '@mui/system';
19
- import { useChartsTheme } from '../context/ChartsProvider';
20
- import { OptionsEditorControl, OptionsEditorGroup } from '../OptionsEditorLayout';
21
- import { InfoTooltip } from '../InfoTooltip';
22
- import { OptionsColorPicker } from '../ColorPicker/OptionsColorPicker';
23
- import { ThresholdInput } from './ThresholdInput';
14
+ import { IconButton, ToggleButton, ToggleButtonGroup, Typography } from "@mui/material";
15
+ import { Stack } from "@mui/system";
16
+ import { produce } from "immer";
17
+ import PlusIcon from "mdi-material-ui/Plus";
18
+ import React, { useEffect, useRef } from "react";
19
+ import { OptionsColorPicker } from "../ColorPicker/OptionsColorPicker.js";
20
+ import { useChartsTheme } from "../context/ChartsProvider.js";
21
+ import { InfoTooltip } from "../InfoTooltip/index.js";
22
+ import { OptionsEditorControl, OptionsEditorGroup } from "../OptionsEditorLayout/index.js";
23
+ import { ThresholdInput } from "./ThresholdInput.js";
24
24
  const DEFAULT_STEP = 10;
25
25
  export function ThresholdsEditor({ thresholds, onChange, hideDefault, disablePercentMode }) {
26
26
  const chartsTheme = useChartsTheme();
@@ -200,7 +200,7 @@ export function ThresholdsEditor({ thresholds, onChange, hideDefault, disablePer
200
200
  deleteThreshold(i);
201
201
  },
202
202
  onBlur: handleThresholdBlur
203
- }, i)).reverse(),
203
+ }, i)).toReversed(),
204
204
  !hideDefault && /*#__PURE__*/ _jsxs(Stack, {
205
205
  flex: 1,
206
206
  direction: "row",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ThresholdsEditor/ThresholdsEditor.tsx"],"sourcesContent":["// Copyright 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 React, { ReactElement, useEffect, useRef } from 'react';\nimport { produce } from 'immer';\nimport { IconButton, ToggleButton, ToggleButtonGroup, Typography } from '@mui/material';\nimport PlusIcon from 'mdi-material-ui/Plus';\nimport { Stack } from '@mui/system';\nimport { useChartsTheme } from '../context/ChartsProvider';\nimport { OptionsEditorControl, OptionsEditorGroup } from '../OptionsEditorLayout';\nimport { InfoTooltip } from '../InfoTooltip';\nimport { OptionsColorPicker } from '../ColorPicker/OptionsColorPicker';\nimport { ThresholdOptions } from '../model';\nimport { ThresholdInput } from './ThresholdInput';\n\nexport interface ThresholdsEditorProps {\n onChange: (thresholds: ThresholdOptions) => void;\n thresholds?: ThresholdOptions;\n hideDefault?: boolean;\n disablePercentMode?: boolean;\n}\n\nconst DEFAULT_STEP = 10;\n\nexport function ThresholdsEditor({\n thresholds,\n onChange,\n hideDefault,\n disablePercentMode,\n}: ThresholdsEditorProps): ReactElement {\n const chartsTheme = useChartsTheme();\n const {\n thresholds: { defaultColor, palette },\n } = chartsTheme;\n const defaultThresholdColor = thresholds?.defaultColor ?? defaultColor;\n\n const steps = thresholds?.steps;\n // every time a new threshold is added, we want to focus the recently added input\n const recentlyAddedInputRef = useRef<HTMLInputElement | null>(null);\n const focusRef = useRef(false);\n useEffect(() => {\n if (!recentlyAddedInputRef.current || !focusRef.current) return;\n recentlyAddedInputRef.current?.focus();\n focusRef.current = false;\n }, [steps?.length]);\n\n const handleThresholdValueChange = (e: React.ChangeEvent<HTMLInputElement>, i: number): void => {\n if (thresholds !== undefined) {\n onChange(\n produce(thresholds, (draft) => {\n const step = draft.steps?.[i];\n if (step) {\n step.value = Number(e.target.value);\n }\n })\n );\n }\n };\n\n const handleThresholdColorChange = (color: string, i: number): void => {\n if (thresholds !== undefined) {\n onChange(\n produce(thresholds, (draft) => {\n if (draft.steps !== undefined) {\n const step = draft.steps[i];\n if (step) {\n step.color = color;\n }\n }\n })\n );\n }\n };\n\n const handleDefaultColorChange = (color: string): void => {\n if (thresholds !== undefined) {\n onChange(\n produce(thresholds, (draft) => {\n draft.defaultColor = color;\n })\n );\n } else {\n onChange({\n defaultColor: color,\n });\n }\n };\n\n // sort thresholds in ascending order every time an input blurs\n const handleThresholdBlur = (): void => {\n if (steps !== undefined) {\n const sortedSteps = [...steps];\n sortedSteps.sort((a, b) => a.value - b.value);\n if (thresholds !== undefined) {\n onChange(\n produce(thresholds, (draft) => {\n draft.steps = sortedSteps;\n })\n );\n }\n }\n };\n\n const deleteThreshold = (i: number): void => {\n if (thresholds !== undefined) {\n const updatedThresholds = produce(thresholds, (draft) => {\n if (draft.steps) {\n draft.steps.splice(i, 1);\n }\n });\n onChange(updatedThresholds);\n }\n };\n\n const addThresholdInput = (): void => {\n focusRef.current = true;\n if (thresholds === undefined) {\n onChange({\n steps: [{ value: DEFAULT_STEP }],\n });\n } else if (thresholds && thresholds.steps === undefined) {\n onChange(\n produce(thresholds, (draft) => {\n draft.steps = [{ value: DEFAULT_STEP }];\n })\n );\n } else {\n onChange(\n produce(thresholds, (draft) => {\n const steps = draft.steps;\n if (steps?.length) {\n const lastStep = steps[steps.length - 1];\n const color = palette[steps.length] ?? getRandomColor(); // we will assign color from the palette first, then generate random color\n steps.push({ color, value: (lastStep?.value ?? 0) + DEFAULT_STEP }); // set new threshold value to last step value + 10\n } else if (steps) {\n steps.push({ value: DEFAULT_STEP });\n }\n })\n );\n }\n };\n\n const handleModeChange = (event: React.MouseEvent, value: string): void => {\n const mode = value === 'percent' ? 'percent' : undefined;\n if (thresholds !== undefined) {\n onChange(\n produce(thresholds, (draft) => {\n draft.mode = mode;\n })\n );\n } else {\n onChange({ mode });\n }\n };\n\n return (\n <OptionsEditorGroup\n title=\"Thresholds\"\n icon={\n <InfoTooltip description=\"Add threshold\">\n <IconButton size=\"small\" aria-label=\"add threshold\" onClick={addThresholdInput}>\n <PlusIcon />\n </IconButton>\n </InfoTooltip>\n }\n >\n <OptionsEditorControl\n label=\"Mode\"\n description=\"Percentage means thresholds relative to min & max\"\n control={\n <ToggleButtonGroup\n exclusive\n disabled={disablePercentMode}\n value={thresholds?.mode ?? 'absolute'}\n onChange={handleModeChange}\n sx={{ height: '36px', marginLeft: 'auto' }}\n >\n <ToggleButton aria-label=\"absolute\" value=\"absolute\" sx={{ fontWeight: 500 }}>\n Absolute\n </ToggleButton>\n <ToggleButton aria-label=\"percent\" value=\"percent\" sx={{ fontWeight: 500 }}>\n Percent\n </ToggleButton>\n </ToggleButtonGroup>\n }\n />\n {steps &&\n steps\n .map((step, i) => (\n <ThresholdInput\n inputRef={i === steps.length - 1 ? recentlyAddedInputRef : undefined}\n key={i}\n label={`T${i + 1}`}\n color={step.color ?? palette[i] ?? defaultThresholdColor}\n value={step.value}\n mode={thresholds?.mode}\n onColorChange={(color) => handleThresholdColorChange(color, i)}\n onChange={(e) => {\n handleThresholdValueChange(e, i);\n }}\n onDelete={() => {\n deleteThreshold(i);\n }}\n onBlur={handleThresholdBlur}\n />\n ))\n .reverse()}\n {!hideDefault && (\n <Stack flex={1} direction=\"row\" alignItems=\"center\" spacing={1}>\n <OptionsColorPicker label=\"default\" color={defaultThresholdColor} onColorChange={handleDefaultColorChange} />\n <Typography>Default</Typography>\n </Stack>\n )}\n </OptionsEditorGroup>\n );\n}\n\n// https://www.paulirish.com/2009/random-hex-color-code-snippets/\nconst getRandomColor = (): string => {\n return (\n '#' +\n Math.floor(Math.random() * 16777216)\n .toString(16)\n .padStart(6, '0')\n );\n};\n"],"names":["React","useEffect","useRef","produce","IconButton","ToggleButton","ToggleButtonGroup","Typography","PlusIcon","Stack","useChartsTheme","OptionsEditorControl","OptionsEditorGroup","InfoTooltip","OptionsColorPicker","ThresholdInput","DEFAULT_STEP","ThresholdsEditor","thresholds","onChange","hideDefault","disablePercentMode","chartsTheme","defaultColor","palette","defaultThresholdColor","steps","recentlyAddedInputRef","focusRef","current","focus","length","handleThresholdValueChange","e","i","undefined","draft","step","value","Number","target","handleThresholdColorChange","color","handleDefaultColorChange","handleThresholdBlur","sortedSteps","sort","a","b","deleteThreshold","updatedThresholds","splice","addThresholdInput","lastStep","getRandomColor","push","handleModeChange","event","mode","title","icon","description","size","aria-label","onClick","label","control","exclusive","disabled","sx","height","marginLeft","fontWeight","map","inputRef","onColorChange","onDelete","onBlur","reverse","flex","direction","alignItems","spacing","Math","floor","random","toString","padStart"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/ThresholdsEditor/ThresholdsEditor.tsx"],"sourcesContent":["// Copyright 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 { IconButton, ToggleButton, ToggleButtonGroup, Typography } from '@mui/material';\nimport { Stack } from '@mui/system';\nimport { produce } from 'immer';\nimport PlusIcon from 'mdi-material-ui/Plus';\nimport type { ReactElement } from 'react';\nimport React, { useEffect, useRef } from 'react';\n\nimport { OptionsColorPicker } from '../ColorPicker/OptionsColorPicker';\nimport { useChartsTheme } from '../context/ChartsProvider';\nimport { InfoTooltip } from '../InfoTooltip';\nimport type { ThresholdOptions } from '../model';\nimport { OptionsEditorControl, OptionsEditorGroup } from '../OptionsEditorLayout';\nimport { ThresholdInput } from './ThresholdInput';\n\nexport interface ThresholdsEditorProps {\n onChange: (thresholds: ThresholdOptions) => void;\n thresholds?: ThresholdOptions;\n hideDefault?: boolean;\n disablePercentMode?: boolean;\n}\n\nconst DEFAULT_STEP = 10;\n\nexport function ThresholdsEditor({\n thresholds,\n onChange,\n hideDefault,\n disablePercentMode,\n}: ThresholdsEditorProps): ReactElement {\n const chartsTheme = useChartsTheme();\n const {\n thresholds: { defaultColor, palette },\n } = chartsTheme;\n const defaultThresholdColor = thresholds?.defaultColor ?? defaultColor;\n\n const steps = thresholds?.steps;\n // every time a new threshold is added, we want to focus the recently added input\n const recentlyAddedInputRef = useRef<HTMLInputElement | null>(null);\n const focusRef = useRef(false);\n useEffect(() => {\n if (!recentlyAddedInputRef.current || !focusRef.current) return;\n recentlyAddedInputRef.current?.focus();\n focusRef.current = false;\n }, [steps?.length]);\n\n const handleThresholdValueChange = (e: React.ChangeEvent<HTMLInputElement>, i: number): void => {\n if (thresholds !== undefined) {\n onChange(\n produce(thresholds, (draft) => {\n const step = draft.steps?.[i];\n if (step) {\n step.value = Number(e.target.value);\n }\n }),\n );\n }\n };\n\n const handleThresholdColorChange = (color: string, i: number): void => {\n if (thresholds !== undefined) {\n onChange(\n produce(thresholds, (draft) => {\n if (draft.steps !== undefined) {\n const step = draft.steps[i];\n if (step) {\n step.color = color;\n }\n }\n }),\n );\n }\n };\n\n const handleDefaultColorChange = (color: string): void => {\n if (thresholds !== undefined) {\n onChange(\n produce(thresholds, (draft) => {\n draft.defaultColor = color;\n }),\n );\n } else {\n onChange({\n defaultColor: color,\n });\n }\n };\n\n // sort thresholds in ascending order every time an input blurs\n const handleThresholdBlur = (): void => {\n if (steps !== undefined) {\n const sortedSteps = [...steps];\n sortedSteps.sort((a, b) => a.value - b.value);\n if (thresholds !== undefined) {\n onChange(\n produce(thresholds, (draft) => {\n draft.steps = sortedSteps;\n }),\n );\n }\n }\n };\n\n const deleteThreshold = (i: number): void => {\n if (thresholds !== undefined) {\n const updatedThresholds = produce(thresholds, (draft) => {\n if (draft.steps) {\n draft.steps.splice(i, 1);\n }\n });\n onChange(updatedThresholds);\n }\n };\n\n const addThresholdInput = (): void => {\n focusRef.current = true;\n if (thresholds === undefined) {\n onChange({\n steps: [{ value: DEFAULT_STEP }],\n });\n } else if (thresholds && thresholds.steps === undefined) {\n onChange(\n produce(thresholds, (draft) => {\n draft.steps = [{ value: DEFAULT_STEP }];\n }),\n );\n } else {\n onChange(\n produce(thresholds, (draft) => {\n const steps = draft.steps;\n if (steps?.length) {\n const lastStep = steps[steps.length - 1];\n const color = palette[steps.length] ?? getRandomColor(); // we will assign color from the palette first, then generate random color\n steps.push({ color, value: (lastStep?.value ?? 0) + DEFAULT_STEP }); // set new threshold value to last step value + 10\n } else if (steps) {\n steps.push({ value: DEFAULT_STEP });\n }\n }),\n );\n }\n };\n\n const handleModeChange = (event: React.MouseEvent, value: string): void => {\n const mode = value === 'percent' ? 'percent' : undefined;\n if (thresholds !== undefined) {\n onChange(\n produce(thresholds, (draft) => {\n draft.mode = mode;\n }),\n );\n } else {\n onChange({ mode });\n }\n };\n\n return (\n <OptionsEditorGroup\n title=\"Thresholds\"\n icon={\n <InfoTooltip description=\"Add threshold\">\n <IconButton size=\"small\" aria-label=\"add threshold\" onClick={addThresholdInput}>\n <PlusIcon />\n </IconButton>\n </InfoTooltip>\n }\n >\n <OptionsEditorControl\n label=\"Mode\"\n description=\"Percentage means thresholds relative to min & max\"\n control={\n <ToggleButtonGroup\n exclusive\n disabled={disablePercentMode}\n value={thresholds?.mode ?? 'absolute'}\n onChange={handleModeChange}\n sx={{ height: '36px', marginLeft: 'auto' }}\n >\n <ToggleButton aria-label=\"absolute\" value=\"absolute\" sx={{ fontWeight: 500 }}>\n Absolute\n </ToggleButton>\n <ToggleButton aria-label=\"percent\" value=\"percent\" sx={{ fontWeight: 500 }}>\n Percent\n </ToggleButton>\n </ToggleButtonGroup>\n }\n />\n {steps &&\n steps\n .map((step, i) => (\n <ThresholdInput\n inputRef={i === steps.length - 1 ? recentlyAddedInputRef : undefined}\n key={i}\n label={`T${i + 1}`}\n color={step.color ?? palette[i] ?? defaultThresholdColor}\n value={step.value}\n mode={thresholds?.mode}\n onColorChange={(color) => handleThresholdColorChange(color, i)}\n onChange={(e) => {\n handleThresholdValueChange(e, i);\n }}\n onDelete={() => {\n deleteThreshold(i);\n }}\n onBlur={handleThresholdBlur}\n />\n ))\n .toReversed()}\n {!hideDefault && (\n <Stack flex={1} direction=\"row\" alignItems=\"center\" spacing={1}>\n <OptionsColorPicker label=\"default\" color={defaultThresholdColor} onColorChange={handleDefaultColorChange} />\n <Typography>Default</Typography>\n </Stack>\n )}\n </OptionsEditorGroup>\n );\n}\n\n// https://www.paulirish.com/2009/random-hex-color-code-snippets/\nconst getRandomColor = (): string => {\n return (\n '#' +\n Math.floor(Math.random() * 16777216)\n .toString(16)\n .padStart(6, '0')\n );\n};\n"],"names":["IconButton","ToggleButton","ToggleButtonGroup","Typography","Stack","produce","PlusIcon","React","useEffect","useRef","OptionsColorPicker","useChartsTheme","InfoTooltip","OptionsEditorControl","OptionsEditorGroup","ThresholdInput","DEFAULT_STEP","ThresholdsEditor","thresholds","onChange","hideDefault","disablePercentMode","chartsTheme","defaultColor","palette","defaultThresholdColor","steps","recentlyAddedInputRef","focusRef","current","focus","length","handleThresholdValueChange","e","i","undefined","draft","step","value","Number","target","handleThresholdColorChange","color","handleDefaultColorChange","handleThresholdBlur","sortedSteps","sort","a","b","deleteThreshold","updatedThresholds","splice","addThresholdInput","lastStep","getRandomColor","push","handleModeChange","event","mode","title","icon","description","size","aria-label","onClick","label","control","exclusive","disabled","sx","height","marginLeft","fontWeight","map","inputRef","onColorChange","onDelete","onBlur","toReversed","flex","direction","alignItems","spacing","Math","floor","random","toString","padStart"],"mappings":"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"}
@@ -10,6 +10,6 @@
10
10
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  // See the License for the specific language governing permissions and
12
12
  // limitations under the License.
13
- export * from './ThresholdsEditor';
13
+ export * from "./ThresholdsEditor.js";
14
14
 
15
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ThresholdsEditor/index.ts"],"sourcesContent":["// Copyright 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\nexport * from './ThresholdsEditor';\n"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,cAAc,qBAAqB"}
1
+ {"version":3,"sources":["../../src/ThresholdsEditor/index.ts"],"sourcesContent":["// Copyright 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\nexport * from './ThresholdsEditor';\n"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,cAAc,wBAAqB"}
@@ -1,5 +1,5 @@
1
- import { ReactElement } from 'react';
2
- import { AbsoluteTimeRange } from '@perses-dev/spec';
1
+ import type { AbsoluteTimeRange } from '@perses-dev/spec';
2
+ import type { ReactElement } from 'react';
3
3
  export interface AbsoluteTimeFormProps {
4
4
  initialTimeRange: AbsoluteTimeRange;
5
5
  onChange: (timeRange: AbsoluteTimeRange) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimeRangePicker.d.ts","sourceRoot":"","sources":["../../src/TimeRangeSelector/DateTimeRangePicker.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,YAAY,EAAY,MAAM,OAAO,CAAC;AAI/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAMrD,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,QAAQ,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,wDAK7B,qBAAqB,KAAG,YAuJ1B,CAAC"}
1
+ {"version":3,"file":"DateTimeRangePicker.d.ts","sourceRoot":"","sources":["../../src/TimeRangeSelector/DateTimeRangePicker.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAO1C,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,QAAQ,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,wDAK7B,qBAAqB,KAAG,YAuJ1B,CAAC"}
@@ -11,14 +11,14 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
- import { useState } from 'react';
15
- import { Box, Stack, Typography, Button } from '@mui/material';
16
- import { DateTimeField, LocalizationProvider, StaticDateTimePicker } from '@mui/x-date-pickers';
17
- import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';
18
- import { TZDate } from '@date-fns/tz';
19
- import { ErrorBoundary } from '../ErrorBoundary';
20
- import { ErrorAlert } from '../ErrorAlert';
21
- import { DATE_TIME_FORMAT, validateDateRange } from './utils';
14
+ import { TZDate } from "@date-fns/tz";
15
+ import { Box, Stack, Typography, Button } from "@mui/material";
16
+ import { DateTimeField, LocalizationProvider, StaticDateTimePicker } from "@mui/x-date-pickers";
17
+ import { AdapterDateFns } from "@mui/x-date-pickers/AdapterDateFnsV3";
18
+ import { useState } from "react";
19
+ import { ErrorAlert } from "../ErrorAlert.js";
20
+ import { ErrorBoundary } from "../ErrorBoundary.js";
21
+ import { DATE_TIME_FORMAT, validateDateRange } from "./utils.js";
22
22
  /**
23
23
  * Start and End datetime picker, allowing use to select a specific time range selecting two absolute dates and times.
24
24
  * TODO: Use directly the MUI X ``DateTimePicker`` for datetime selection which is better. https://next.mui.com/x/react-date-pickers/date-time-picker/
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/TimeRangeSelector/DateTimeRangePicker.tsx"],"sourcesContent":["// Copyright 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 { ReactElement, useState } from 'react';\nimport { Box, Stack, Typography, Button } from '@mui/material';\nimport { DateTimeField, LocalizationProvider, StaticDateTimePicker } from '@mui/x-date-pickers';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';\nimport { AbsoluteTimeRange } from '@perses-dev/spec';\nimport { TZDate } from '@date-fns/tz';\nimport { ErrorBoundary } from '../ErrorBoundary';\nimport { ErrorAlert } from '../ErrorAlert';\nimport { DATE_TIME_FORMAT, validateDateRange } from './utils';\n\nexport interface AbsoluteTimeFormProps {\n initialTimeRange: AbsoluteTimeRange;\n onChange: (timeRange: AbsoluteTimeRange) => void;\n onCancel: () => void;\n timeZone: string;\n}\n\n/**\n * Start and End datetime picker, allowing use to select a specific time range selecting two absolute dates and times.\n * TODO: Use directly the MUI X ``DateTimePicker`` for datetime selection which is better. https://next.mui.com/x/react-date-pickers/date-time-picker/\n * Use ``DateTimeRangePicker`` directly would be cool but paid https://next.mui.com/x/react-date-pickers/date-time-range-picker/\n * @param initialTimeRange initial time range to pre-select.\n * @param onChange event received when start and end has been selected (click on apply)\n * @param onCancel event received when user click on cancel\n * @constructor\n */\nexport const DateTimeRangePicker = ({\n initialTimeRange,\n onChange,\n onCancel,\n timeZone,\n}: AbsoluteTimeFormProps): ReactElement => {\n const stdTimeZone = ['local', 'browser'].includes(timeZone.toLowerCase())\n ? Intl.DateTimeFormat().resolvedOptions().timeZone\n : timeZone;\n const [timeRange, setTimeRange] = useState<AbsoluteTimeRange>(initialTimeRange);\n const [showStartCalendar, setShowStartCalendar] = useState<boolean>(true);\n\n const changeTimeRange = (newTime: Date, segment: keyof AbsoluteTimeRange): void => {\n setTimeRange((prevTimeRange) => {\n return {\n ...prevTimeRange,\n [segment]: newTime,\n };\n });\n };\n\n const onChangeStartTime = (newStartTime: Date): void => {\n changeTimeRange(newStartTime, 'start');\n };\n\n const onChangeEndTime = (newEndTime: Date): void => {\n changeTimeRange(newEndTime, 'end');\n };\n\n const updateDateRange = (): { start: Date; end: Date } | undefined => {\n const newDates = {\n start: timeRange.start,\n end: timeRange.end,\n };\n const isValidDateRange = validateDateRange(newDates.start, newDates.end);\n if (isValidDateRange) {\n return newDates;\n }\n };\n\n const onApply = (): void => {\n const newDates = updateDateRange();\n if (newDates) {\n onChange(newDates);\n }\n };\n\n return (\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <Stack\n spacing={2}\n sx={(theme) => ({\n padding: theme.spacing(1, 0, 2),\n })}\n >\n {showStartCalendar && (\n <Box\n sx={(theme) => ({\n // TODO: create separate reusable calendar component\n '.MuiPickersLayout-contentWrapper': {\n backgroundColor: theme.palette.background.default,\n },\n })}\n >\n <Typography variant=\"h3\" padding={1} paddingLeft={2}>\n Select Start Time\n </Typography>\n <StaticDateTimePicker\n timezone={stdTimeZone}\n displayStaticWrapperAs=\"desktop\"\n openTo=\"day\"\n disableHighlightToday={true}\n value={new TZDate(timeRange.start, stdTimeZone)}\n onChange={(newValue) => {\n if (newValue === null) return;\n onChangeStartTime(newValue);\n }}\n onAccept={() => {\n setShowStartCalendar(false);\n }}\n />\n </Box>\n )}\n {!showStartCalendar && (\n <Box\n sx={(theme) => ({\n '.MuiPickersLayout-contentWrapper': {\n backgroundColor: theme.palette.background.default,\n },\n })}\n >\n <Typography variant=\"h3\" padding={1} paddingLeft={2}>\n Select End Time\n </Typography>\n <StaticDateTimePicker\n timezone={stdTimeZone}\n displayStaticWrapperAs=\"desktop\"\n openTo=\"day\"\n disableHighlightToday={true}\n value={new TZDate(timeRange.end, stdTimeZone)}\n minDateTime={new TZDate(timeRange.start, stdTimeZone)}\n onChange={(newValue) => {\n if (newValue === null) return;\n onChangeEndTime(newValue);\n }}\n onAccept={(newValue) => {\n if (newValue === null) return;\n setShowStartCalendar(true);\n onChangeEndTime(newValue);\n }}\n />\n </Box>\n )}\n <Stack direction=\"row\" alignItems=\"center\" gap={1} pl={1} pr={1}>\n <ErrorBoundary FallbackComponent={ErrorAlert}>\n <DateTimeField\n data-testid=\"start_time_input\"\n timezone={stdTimeZone}\n label=\"Start Time\"\n value={new TZDate(timeRange.start, stdTimeZone)}\n onChange={(event: Date | null) => {\n if (event) {\n onChangeStartTime(event);\n }\n }}\n onBlur={() => updateDateRange()}\n format={DATE_TIME_FORMAT}\n />\n </ErrorBoundary>\n <ErrorBoundary FallbackComponent={ErrorAlert}>\n <DateTimeField\n data-testid=\"end_time_input\"\n timezone={stdTimeZone}\n label=\"End Time\"\n value={new TZDate(timeRange.end, stdTimeZone)}\n onChange={(event: Date | null) => {\n if (event) {\n onChangeEndTime(event);\n }\n }}\n onBlur={() => updateDateRange()}\n format={DATE_TIME_FORMAT}\n />\n </ErrorBoundary>\n </Stack>\n <Stack direction=\"row\" sx={{ padding: (theme) => theme.spacing(0, 1) }} gap={1}>\n <Button variant=\"contained\" onClick={() => onApply()} fullWidth>\n Apply\n </Button>\n <Button variant=\"outlined\" onClick={() => onCancel()} fullWidth>\n Cancel\n </Button>\n </Stack>\n </Stack>\n </LocalizationProvider>\n );\n};\n"],"names":["useState","Box","Stack","Typography","Button","DateTimeField","LocalizationProvider","StaticDateTimePicker","AdapterDateFns","TZDate","ErrorBoundary","ErrorAlert","DATE_TIME_FORMAT","validateDateRange","DateTimeRangePicker","initialTimeRange","onChange","onCancel","timeZone","stdTimeZone","includes","toLowerCase","Intl","DateTimeFormat","resolvedOptions","timeRange","setTimeRange","showStartCalendar","setShowStartCalendar","changeTimeRange","newTime","segment","prevTimeRange","onChangeStartTime","newStartTime","onChangeEndTime","newEndTime","updateDateRange","newDates","start","end","isValidDateRange","onApply","dateAdapter","spacing","sx","theme","padding","backgroundColor","palette","background","default","variant","paddingLeft","timezone","displayStaticWrapperAs","openTo","disableHighlightToday","value","newValue","onAccept","minDateTime","direction","alignItems","gap","pl","pr","FallbackComponent","data-testid","label","event","onBlur","format","onClick","fullWidth"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/TimeRangeSelector/DateTimeRangePicker.tsx"],"sourcesContent":["// Copyright 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 { TZDate } from '@date-fns/tz';\nimport { Box, Stack, Typography, Button } from '@mui/material';\nimport { DateTimeField, LocalizationProvider, StaticDateTimePicker } from '@mui/x-date-pickers';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';\nimport type { AbsoluteTimeRange } from '@perses-dev/spec';\nimport type { ReactElement } from 'react';\nimport { useState } from 'react';\n\nimport { ErrorAlert } from '../ErrorAlert';\nimport { ErrorBoundary } from '../ErrorBoundary';\nimport { DATE_TIME_FORMAT, validateDateRange } from './utils';\n\nexport interface AbsoluteTimeFormProps {\n initialTimeRange: AbsoluteTimeRange;\n onChange: (timeRange: AbsoluteTimeRange) => void;\n onCancel: () => void;\n timeZone: string;\n}\n\n/**\n * Start and End datetime picker, allowing use to select a specific time range selecting two absolute dates and times.\n * TODO: Use directly the MUI X ``DateTimePicker`` for datetime selection which is better. https://next.mui.com/x/react-date-pickers/date-time-picker/\n * Use ``DateTimeRangePicker`` directly would be cool but paid https://next.mui.com/x/react-date-pickers/date-time-range-picker/\n * @param initialTimeRange initial time range to pre-select.\n * @param onChange event received when start and end has been selected (click on apply)\n * @param onCancel event received when user click on cancel\n * @constructor\n */\nexport const DateTimeRangePicker = ({\n initialTimeRange,\n onChange,\n onCancel,\n timeZone,\n}: AbsoluteTimeFormProps): ReactElement => {\n const stdTimeZone = ['local', 'browser'].includes(timeZone.toLowerCase())\n ? Intl.DateTimeFormat().resolvedOptions().timeZone\n : timeZone;\n const [timeRange, setTimeRange] = useState<AbsoluteTimeRange>(initialTimeRange);\n const [showStartCalendar, setShowStartCalendar] = useState<boolean>(true);\n\n const changeTimeRange = (newTime: Date, segment: keyof AbsoluteTimeRange): void => {\n setTimeRange((prevTimeRange) => {\n return {\n ...prevTimeRange,\n [segment]: newTime,\n };\n });\n };\n\n const onChangeStartTime = (newStartTime: Date): void => {\n changeTimeRange(newStartTime, 'start');\n };\n\n const onChangeEndTime = (newEndTime: Date): void => {\n changeTimeRange(newEndTime, 'end');\n };\n\n const updateDateRange = (): { start: Date; end: Date } | undefined => {\n const newDates = {\n start: timeRange.start,\n end: timeRange.end,\n };\n const isValidDateRange = validateDateRange(newDates.start, newDates.end);\n if (isValidDateRange) {\n return newDates;\n }\n };\n\n const onApply = (): void => {\n const newDates = updateDateRange();\n if (newDates) {\n onChange(newDates);\n }\n };\n\n return (\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <Stack\n spacing={2}\n sx={(theme) => ({\n padding: theme.spacing(1, 0, 2),\n })}\n >\n {showStartCalendar && (\n <Box\n sx={(theme) => ({\n // TODO: create separate reusable calendar component\n '.MuiPickersLayout-contentWrapper': {\n backgroundColor: theme.palette.background.default,\n },\n })}\n >\n <Typography variant=\"h3\" padding={1} paddingLeft={2}>\n Select Start Time\n </Typography>\n <StaticDateTimePicker\n timezone={stdTimeZone}\n displayStaticWrapperAs=\"desktop\"\n openTo=\"day\"\n disableHighlightToday={true}\n value={new TZDate(timeRange.start, stdTimeZone)}\n onChange={(newValue) => {\n if (newValue === null) return;\n onChangeStartTime(newValue);\n }}\n onAccept={() => {\n setShowStartCalendar(false);\n }}\n />\n </Box>\n )}\n {!showStartCalendar && (\n <Box\n sx={(theme) => ({\n '.MuiPickersLayout-contentWrapper': {\n backgroundColor: theme.palette.background.default,\n },\n })}\n >\n <Typography variant=\"h3\" padding={1} paddingLeft={2}>\n Select End Time\n </Typography>\n <StaticDateTimePicker\n timezone={stdTimeZone}\n displayStaticWrapperAs=\"desktop\"\n openTo=\"day\"\n disableHighlightToday={true}\n value={new TZDate(timeRange.end, stdTimeZone)}\n minDateTime={new TZDate(timeRange.start, stdTimeZone)}\n onChange={(newValue) => {\n if (newValue === null) return;\n onChangeEndTime(newValue);\n }}\n onAccept={(newValue) => {\n if (newValue === null) return;\n setShowStartCalendar(true);\n onChangeEndTime(newValue);\n }}\n />\n </Box>\n )}\n <Stack direction=\"row\" alignItems=\"center\" gap={1} pl={1} pr={1}>\n <ErrorBoundary FallbackComponent={ErrorAlert}>\n <DateTimeField\n data-testid=\"start_time_input\"\n timezone={stdTimeZone}\n label=\"Start Time\"\n value={new TZDate(timeRange.start, stdTimeZone)}\n onChange={(event: Date | null) => {\n if (event) {\n onChangeStartTime(event);\n }\n }}\n onBlur={() => updateDateRange()}\n format={DATE_TIME_FORMAT}\n />\n </ErrorBoundary>\n <ErrorBoundary FallbackComponent={ErrorAlert}>\n <DateTimeField\n data-testid=\"end_time_input\"\n timezone={stdTimeZone}\n label=\"End Time\"\n value={new TZDate(timeRange.end, stdTimeZone)}\n onChange={(event: Date | null) => {\n if (event) {\n onChangeEndTime(event);\n }\n }}\n onBlur={() => updateDateRange()}\n format={DATE_TIME_FORMAT}\n />\n </ErrorBoundary>\n </Stack>\n <Stack direction=\"row\" sx={{ padding: (theme) => theme.spacing(0, 1) }} gap={1}>\n <Button variant=\"contained\" onClick={() => onApply()} fullWidth>\n Apply\n </Button>\n <Button variant=\"outlined\" onClick={() => onCancel()} fullWidth>\n Cancel\n </Button>\n </Stack>\n </Stack>\n </LocalizationProvider>\n );\n};\n"],"names":["TZDate","Box","Stack","Typography","Button","DateTimeField","LocalizationProvider","StaticDateTimePicker","AdapterDateFns","useState","ErrorAlert","ErrorBoundary","DATE_TIME_FORMAT","validateDateRange","DateTimeRangePicker","initialTimeRange","onChange","onCancel","timeZone","stdTimeZone","includes","toLowerCase","Intl","DateTimeFormat","resolvedOptions","timeRange","setTimeRange","showStartCalendar","setShowStartCalendar","changeTimeRange","newTime","segment","prevTimeRange","onChangeStartTime","newStartTime","onChangeEndTime","newEndTime","updateDateRange","newDates","start","end","isValidDateRange","onApply","dateAdapter","spacing","sx","theme","padding","backgroundColor","palette","background","default","variant","paddingLeft","timezone","displayStaticWrapperAs","openTo","disableHighlightToday","value","newValue","onAccept","minDateTime","direction","alignItems","gap","pl","pr","FallbackComponent","data-testid","label","event","onBlur","format","onClick","fullWidth"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { TimeRangeValue } from '@perses-dev/spec';
2
- import { ReactElement } from 'react';
3
- import { TimeZoneOption } from '../model/timeZoneOption';
4
- import { TimeOption } from '../model';
1
+ import type { TimeRangeValue } from '@perses-dev/spec';
2
+ import type { ReactElement } from 'react';
3
+ import type { TimeOption } from '../model';
4
+ import type { TimeZoneOption } from '../model/timeZoneOption';
5
5
  interface TimeRangeSelectorProps {
6
6
  /**
7
7
  * The current value of the time range.
@@ -1 +1 @@
1
- {"version":3,"file":"TimeRangeSelector.d.ts","sourceRoot":"","sources":["../../src/TimeRangeSelector/TimeRangeSelector.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAE,cAAc,EAA+D,MAAM,kBAAkB,CAAC;AAC/G,OAAO,EAAE,YAAY,EAA6B,MAAM,OAAO,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAsB,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAMtC,UAAU,sBAAsB;IAC9B;;OAEG;IACH,KAAK,EAAE,cAAc,CAAC;IACtB;;;OAGG;IACH,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1C;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CACvD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,WAAW,EACX,QAAQ,EACR,MAAM,EACN,mBAA0B,EAC1B,QAAQ,EAAE,YAAY,EACtB,eAAe,EACf,gBAAgB,GACjB,EAAE,sBAAsB,GAAG,YAAY,CA0JvC"}
1
+ {"version":3,"file":"TimeRangeSelector.d.ts","sourceRoot":"","sources":["../../src/TimeRangeSelector/TimeRangeSelector.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,kBAAkB,CAAC;AAI1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAO9D,UAAU,sBAAsB;IAC9B;;OAEG;IACH,KAAK,EAAE,cAAc,CAAC;IACtB;;;OAGG;IACH,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1C;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CACvD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,WAAW,EACX,QAAQ,EACR,MAAM,EACN,mBAA0B,EAC1B,QAAQ,EAAE,YAAY,EACtB,eAAe,EACf,gBAAgB,GACjB,EAAE,sBAAsB,GAAG,YAAY,CAsJvC"}
@@ -11,17 +11,17 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
- import { Box, MenuItem, Popover, Select, IconButton, TextField, Stack } from '@mui/material';
15
- import Calendar from 'mdi-material-ui/Calendar';
16
- import EarthIcon from 'mdi-material-ui/Earth';
17
- import { isRelativeTimeRange, toAbsoluteTimeRange } from '@perses-dev/spec';
18
- import { useMemo, useRef, useState } from 'react';
19
- import { useTimeZone } from '../context';
20
- import { getTimeZoneOptions } from '../model/timeZoneOption';
21
- import { SettingsAutocomplete } from '../SettingsAutocomplete';
22
- import { getGMTOffset } from '../utils/format';
23
- import { DateTimeRangePicker } from './DateTimeRangePicker';
24
- import { buildCustomTimeOption, formatTimeRange } from './utils';
14
+ import { Box, MenuItem, Popover, Select, IconButton, TextField, Stack } from "@mui/material";
15
+ import { isRelativeTimeRange, toAbsoluteTimeRange } from "@perses-dev/spec";
16
+ import Calendar from "mdi-material-ui/Calendar";
17
+ import EarthIcon from "mdi-material-ui/Earth";
18
+ import { useMemo, useRef, useState } from "react";
19
+ import { useTimeZone } from "../context/index.js";
20
+ import { getTimeZoneOptions } from "../model/timeZoneOption.js";
21
+ import { SettingsAutocomplete } from "../SettingsAutocomplete/index.js";
22
+ import { getGMTOffset } from "../utils/format.js";
23
+ import { DateTimeRangePicker } from "./DateTimeRangePicker.js";
24
+ import { buildCustomTimeOption, formatTimeRange } from "./utils.js";
25
25
  /**
26
26
  * Date & time selection component to customize what data renders on dashboard.
27
27
  * This includes relative shortcuts and the ability to pick absolute start and end times.
@@ -52,14 +52,7 @@ import { buildCustomTimeOption, formatTimeRange } from './utils';
52
52
  id: o.value,
53
53
  label: o.display
54
54
  }));
55
- let tzAutocompleteValue = undefined;
56
- {
57
- const current = tzOptions.find((o)=>o.value === timeZone);
58
- if (current) tzAutocompleteValue = {
59
- id: current.value,
60
- label: current.display
61
- };
62
- }
55
+ const tzAutocompleteValue = tzAutocompleteOptions.find((option)=>option.id === timeZone);
63
56
  return /*#__PURE__*/ _jsxs(_Fragment, {
64
57
  children: [
65
58
  /*#__PURE__*/ _jsx(Popover, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/TimeRangeSelector/TimeRangeSelector.tsx"],"sourcesContent":["// Copyright 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 { Box, MenuItem, Popover, Select, IconButton, TextField, Stack } from '@mui/material';\nimport Calendar from 'mdi-material-ui/Calendar';\nimport EarthIcon from 'mdi-material-ui/Earth';\nimport { TimeRangeValue, isRelativeTimeRange, AbsoluteTimeRange, toAbsoluteTimeRange } from '@perses-dev/spec';\nimport { ReactElement, useMemo, useRef, useState } from 'react';\nimport { useTimeZone } from '../context';\nimport { TimeZoneOption, getTimeZoneOptions } from '../model/timeZoneOption';\nimport { TimeOption } from '../model';\nimport { SettingsAutocomplete, SettingsAutocompleteOption } from '../SettingsAutocomplete';\nimport { getGMTOffset } from '../utils/format';\nimport { DateTimeRangePicker } from './DateTimeRangePicker';\nimport { buildCustomTimeOption, formatTimeRange } from './utils';\n\ninterface TimeRangeSelectorProps {\n /**\n * The current value of the time range.\n */\n value: TimeRangeValue;\n /**\n * The list of time options to display in the dropdown.\n * The component will automatically add the last two options as a zoom out x2 and a custom absolute time range.\n */\n timeOptions: TimeOption[];\n /**\n * The callback to call when the time range changes.\n */\n onChange: (value: TimeRangeValue) => void;\n /**\n * Custom line height for the select component.\n */\n height?: string;\n /**\n * Whether to show the custom time range option.\n * Defaults to true.\n */\n showCustomTimeRange?: boolean;\n /** Optional explicit timezone and change handler to enable changing tz from the selector */\n timeZone?: string;\n timeZoneOptions?: TimeZoneOption[];\n onTimeZoneChange?: (timeZone: TimeZoneOption) => void;\n}\n\n/**\n * Date & time selection component to customize what data renders on dashboard.\n * This includes relative shortcuts and the ability to pick absolute start and end times.\n * @param props\n * @constructor\n */\nexport function TimeRangeSelector({\n value,\n timeOptions,\n onChange,\n height,\n showCustomTimeRange = true,\n timeZone: timeZoneProp,\n timeZoneOptions,\n onTimeZoneChange,\n}: TimeRangeSelectorProps): ReactElement {\n const { timeZone: ctxTimeZone } = useTimeZone();\n const timeZone = timeZoneProp ?? ctxTimeZone;\n\n const anchorEl = useRef();\n const [showCustomDateSelector, setShowCustomDateSelector] = useState(false);\n\n const convertedTimeRange = useMemo(() => {\n return isRelativeTimeRange(value) ? toAbsoluteTimeRange(value) : value;\n }, [value]);\n\n const lastOption = useMemo(\n () => buildCustomTimeOption(isRelativeTimeRange(value) ? undefined : value, timeZone),\n [value, timeZone]\n );\n\n const [open, setOpen] = useState(false);\n const tzOptions = timeZoneOptions ?? getTimeZoneOptions();\n const [tzAnchorEl, setTzAnchorEl] = useState<HTMLElement | null>(null);\n const tzOpen = Boolean(tzAnchorEl);\n const tzLabel = tzOptions.find((o) => o.value === timeZone)?.display ?? timeZone;\n const tzOffset = getGMTOffset(timeZone);\n const localOffset = getGMTOffset('local');\n const tzAutocompleteOptions = tzOptions.map((o) => ({ id: o.value, label: o.display }));\n let tzAutocompleteValue: SettingsAutocompleteOption | undefined = undefined;\n {\n const current = tzOptions.find((o) => o.value === timeZone);\n if (current) tzAutocompleteValue = { id: current.value, label: current.display };\n }\n\n return (\n <>\n <Popover\n anchorEl={tzAnchorEl}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n open={tzOpen}\n onClose={() => setTzAnchorEl(null)}\n sx={(theme) => ({ padding: theme.spacing(1) })}\n >\n <Box\n sx={{ p: 1, minWidth: 260 }}\n onClick={(e) => {\n e.stopPropagation();\n }}\n >\n <SettingsAutocomplete\n options={tzAutocompleteOptions}\n value={tzAutocompleteValue}\n onChange={(_e, option) => {\n if (option) {\n const selected = tzOptions.find((o) => o.value === option.id);\n if (selected) onTimeZoneChange?.(selected);\n }\n setTzAnchorEl(null);\n }}\n disableClearable\n renderInput={(params) => <TextField {...params} placeholder=\"Search timezones\" size=\"small\" />}\n />\n </Box>\n </Popover>\n <Popover\n anchorEl={anchorEl.current}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}\n open={showCustomDateSelector}\n onClose={() => setShowCustomDateSelector(false)}\n sx={(theme) => ({ padding: theme.spacing(2) })}\n >\n <DateTimeRangePicker\n initialTimeRange={convertedTimeRange}\n onChange={(value: AbsoluteTimeRange) => {\n onChange(value);\n setShowCustomDateSelector(false);\n setOpen(false);\n }}\n onCancel={() => setShowCustomDateSelector(false)}\n timeZone={timeZone}\n />\n </Popover>\n <Box ref={anchorEl}>\n <Select\n open={open}\n value={formatTimeRange(value, timeZone)}\n onClick={() => setOpen(!open)}\n IconComponent={Calendar}\n renderValue={() => (\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <span>\n {timeOptions.find((opt) => formatTimeRange(opt.value, timeZone) === formatTimeRange(value, timeZone))\n ?.display ?? formatTimeRange(value, timeZone)}\n </span>\n {tzOffset !== localOffset && (\n <Box sx={{ typography: 'caption', color: 'text.secondary' }}>· {tzOffset}</Box>\n )}\n </Stack>\n )}\n inputProps={{ 'aria-label': `Select time range. Currently set to ${value}` }}\n sx={{\n '.MuiSelect-icon': { marginTop: '1px', transform: 'none' },\n '.MuiSelect-select.MuiSelect-outlined.MuiInputBase-input': { paddingRight: '36px' },\n '.MuiSelect-select': height ? { lineHeight: height, paddingY: 0 } : {},\n }}\n >\n <MenuItem\n disableRipple\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n sx={{ cursor: 'default', '&:hover': { backgroundColor: 'transparent' }, py: 0.5, px: 1 }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', width: '100%', justifyContent: 'space-between' }}>\n <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'flex-start' }}>\n <Box sx={{ typography: 'subtitle1' }}>Time Range</Box>\n <Box sx={{ color: 'text.secondary', typography: 'caption', mt: 0.25 }}>Timezone: {tzLabel}</Box>\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', pr: 1, ml: 1.5 }}>\n <IconButton\n size=\"small\"\n aria-label=\"Select timezone\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setTzAnchorEl(e.currentTarget);\n }}\n >\n <EarthIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n </Box>\n </MenuItem>\n {timeOptions.map((item, idx) => (\n <MenuItem\n key={idx}\n value={formatTimeRange(item.value, timeZone)}\n onClick={() => {\n onChange(item.value);\n }}\n >\n {item.display}\n </MenuItem>\n ))}\n {showCustomTimeRange && (\n <MenuItem\n value={formatTimeRange(lastOption.value, timeZone)}\n onClick={() => setShowCustomDateSelector(true)}\n >\n {lastOption.display}\n </MenuItem>\n )}\n </Select>\n </Box>\n </>\n );\n}\n"],"names":["Box","MenuItem","Popover","Select","IconButton","TextField","Stack","Calendar","EarthIcon","isRelativeTimeRange","toAbsoluteTimeRange","useMemo","useRef","useState","useTimeZone","getTimeZoneOptions","SettingsAutocomplete","getGMTOffset","DateTimeRangePicker","buildCustomTimeOption","formatTimeRange","TimeRangeSelector","value","timeOptions","onChange","height","showCustomTimeRange","timeZone","timeZoneProp","timeZoneOptions","onTimeZoneChange","ctxTimeZone","anchorEl","showCustomDateSelector","setShowCustomDateSelector","convertedTimeRange","lastOption","undefined","open","setOpen","tzOptions","tzAnchorEl","setTzAnchorEl","tzOpen","Boolean","tzLabel","find","o","display","tzOffset","localOffset","tzAutocompleteOptions","map","id","label","tzAutocompleteValue","current","anchorOrigin","vertical","horizontal","transformOrigin","onClose","sx","theme","padding","spacing","p","minWidth","onClick","e","stopPropagation","options","_e","option","selected","disableClearable","renderInput","params","placeholder","size","initialTimeRange","onCancel","ref","IconComponent","renderValue","direction","alignItems","span","opt","typography","color","inputProps","marginTop","transform","paddingRight","lineHeight","paddingY","disableRipple","preventDefault","cursor","backgroundColor","py","px","width","justifyContent","flexDirection","mt","pr","ml","aria-label","currentTarget","fontSize","item","idx"],"mappings":";AAAA,+BAA+B;AAC/B,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,SAASA,GAAG,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,MAAM,EAAEC,UAAU,EAAEC,SAAS,EAAEC,KAAK,QAAQ,gBAAgB;AAC7F,OAAOC,cAAc,2BAA2B;AAChD,OAAOC,eAAe,wBAAwB;AAC9C,SAAyBC,mBAAmB,EAAqBC,mBAAmB,QAAQ,mBAAmB;AAC/G,SAAuBC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AAChE,SAASC,WAAW,QAAQ,aAAa;AACzC,SAAyBC,kBAAkB,QAAQ,0BAA0B;AAE7E,SAASC,oBAAoB,QAAoC,0BAA0B;AAC3F,SAASC,YAAY,QAAQ,kBAAkB;AAC/C,SAASC,mBAAmB,QAAQ,wBAAwB;AAC5D,SAASC,qBAAqB,EAAEC,eAAe,QAAQ,UAAU;AA+BjE;;;;;CAKC,GACD,OAAO,SAASC,kBAAkB,EAChCC,KAAK,EACLC,WAAW,EACXC,QAAQ,EACRC,MAAM,EACNC,sBAAsB,IAAI,EAC1BC,UAAUC,YAAY,EACtBC,eAAe,EACfC,gBAAgB,EACO;IACvB,MAAM,EAAEH,UAAUI,WAAW,EAAE,GAAGjB;IAClC,MAAMa,WAAWC,gBAAgBG;IAEjC,MAAMC,WAAWpB;IACjB,MAAM,CAACqB,wBAAwBC,0BAA0B,GAAGrB,SAAS;IAErE,MAAMsB,qBAAqBxB,QAAQ;QACjC,OAAOF,oBAAoBa,SAASZ,oBAAoBY,SAASA;IACnE,GAAG;QAACA;KAAM;IAEV,MAAMc,aAAazB,QACjB,IAAMQ,sBAAsBV,oBAAoBa,SAASe,YAAYf,OAAOK,WAC5E;QAACL;QAAOK;KAAS;IAGnB,MAAM,CAACW,MAAMC,QAAQ,GAAG1B,SAAS;IACjC,MAAM2B,YAAYX,mBAAmBd;IACrC,MAAM,CAAC0B,YAAYC,cAAc,GAAG7B,SAA6B;IACjE,MAAM8B,SAASC,QAAQH;IACvB,MAAMI,UAAUL,UAAUM,IAAI,CAAC,CAACC,IAAMA,EAAEzB,KAAK,KAAKK,WAAWqB,WAAWrB;IACxE,MAAMsB,WAAWhC,aAAaU;IAC9B,MAAMuB,cAAcjC,aAAa;IACjC,MAAMkC,wBAAwBX,UAAUY,GAAG,CAAC,CAACL,IAAO,CAAA;YAAEM,IAAIN,EAAEzB,KAAK;YAAEgC,OAAOP,EAAEC,OAAO;QAAC,CAAA;IACpF,IAAIO,sBAA8DlB;IAClE;QACE,MAAMmB,UAAUhB,UAAUM,IAAI,CAAC,CAACC,IAAMA,EAAEzB,KAAK,KAAKK;QAClD,IAAI6B,SAASD,sBAAsB;YAAEF,IAAIG,QAAQlC,KAAK;YAAEgC,OAAOE,QAAQR,OAAO;QAAC;IACjF;IAEA,qBACE;;0BACE,KAAC9C;gBACC8B,UAAUS;gBACVgB,cAAc;oBAAEC,UAAU;oBAAUC,YAAY;gBAAQ;gBACxDC,iBAAiB;oBAAEF,UAAU;oBAAOC,YAAY;gBAAQ;gBACxDrB,MAAMK;gBACNkB,SAAS,IAAMnB,cAAc;gBAC7BoB,IAAI,CAACC,QAAW,CAAA;wBAAEC,SAASD,MAAME,OAAO,CAAC;oBAAG,CAAA;0BAE5C,cAAA,KAACjE;oBACC8D,IAAI;wBAAEI,GAAG;wBAAGC,UAAU;oBAAI;oBAC1BC,SAAS,CAACC;wBACRA,EAAEC,eAAe;oBACnB;8BAEA,cAAA,KAACtD;wBACCuD,SAASpB;wBACT7B,OAAOiC;wBACP/B,UAAU,CAACgD,IAAIC;4BACb,IAAIA,QAAQ;gCACV,MAAMC,WAAWlC,UAAUM,IAAI,CAAC,CAACC,IAAMA,EAAEzB,KAAK,KAAKmD,OAAOpB,EAAE;gCAC5D,IAAIqB,UAAU5C,mBAAmB4C;4BACnC;4BACAhC,cAAc;wBAChB;wBACAiC,gBAAgB;wBAChBC,aAAa,CAACC,uBAAW,KAACxE;gCAAW,GAAGwE,MAAM;gCAAEC,aAAY;gCAAmBC,MAAK;;;;;0BAI1F,KAAC7E;gBACC8B,UAAUA,SAASwB,OAAO;gBAC1BC,cAAc;oBAAEC,UAAU;oBAAUC,YAAY;gBAAS;gBACzDrB,MAAML;gBACN4B,SAAS,IAAM3B,0BAA0B;gBACzC4B,IAAI,CAACC,QAAW,CAAA;wBAAEC,SAASD,MAAME,OAAO,CAAC;oBAAG,CAAA;0BAE5C,cAAA,KAAC/C;oBACC8D,kBAAkB7C;oBAClBX,UAAU,CAACF;wBACTE,SAASF;wBACTY,0BAA0B;wBAC1BK,QAAQ;oBACV;oBACA0C,UAAU,IAAM/C,0BAA0B;oBAC1CP,UAAUA;;;0BAGd,KAAC3B;gBAAIkF,KAAKlD;0BACR,cAAA,MAAC7B;oBACCmC,MAAMA;oBACNhB,OAAOF,gBAAgBE,OAAOK;oBAC9ByC,SAAS,IAAM7B,QAAQ,CAACD;oBACxB6C,eAAe5E;oBACf6E,aAAa,kBACX,MAAC9E;4BAAM+E,WAAU;4BAAMC,YAAW;4BAASrB,SAAS;;8CAClD,KAACsB;8CACEhE,YAAYuB,IAAI,CAAC,CAAC0C,MAAQpE,gBAAgBoE,IAAIlE,KAAK,EAAEK,cAAcP,gBAAgBE,OAAOK,YACvFqB,WAAW5B,gBAAgBE,OAAOK;;gCAEvCsB,aAAaC,6BACZ,MAAClD;oCAAI8D,IAAI;wCAAE2B,YAAY;wCAAWC,OAAO;oCAAiB;;wCAAG;wCAAGzC;;;;;oBAItE0C,YAAY;wBAAE,cAAc,CAAC,oCAAoC,EAAErE,OAAO;oBAAC;oBAC3EwC,IAAI;wBACF,mBAAmB;4BAAE8B,WAAW;4BAAOC,WAAW;wBAAO;wBACzD,2DAA2D;4BAAEC,cAAc;wBAAO;wBAClF,qBAAqBrE,SAAS;4BAAEsE,YAAYtE;4BAAQuE,UAAU;wBAAE,IAAI,CAAC;oBACvE;;sCAEA,KAAC/F;4BACCgG,aAAa;4BACb7B,SAAS,CAACC;gCACRA,EAAE6B,cAAc;gCAChB7B,EAAEC,eAAe;4BACnB;4BACAR,IAAI;gCAAEqC,QAAQ;gCAAW,WAAW;oCAAEC,iBAAiB;gCAAc;gCAAGC,IAAI;gCAAKC,IAAI;4BAAE;sCAEvF,cAAA,MAACtG;gCAAI8D,IAAI;oCAAEd,SAAS;oCAAQsC,YAAY;oCAAUiB,OAAO;oCAAQC,gBAAgB;gCAAgB;;kDAC/F,MAACxG;wCAAI8D,IAAI;4CAAEd,SAAS;4CAAQyD,eAAe;4CAAUnB,YAAY;wCAAa;;0DAC5E,KAACtF;gDAAI8D,IAAI;oDAAE2B,YAAY;gDAAY;0DAAG;;0DACtC,MAACzF;gDAAI8D,IAAI;oDAAE4B,OAAO;oDAAkBD,YAAY;oDAAWiB,IAAI;gDAAK;;oDAAG;oDAAW7D;;;;;kDAEpF,KAAC7C;wCAAI8D,IAAI;4CAAEd,SAAS;4CAAQsC,YAAY;4CAAUqB,IAAI;4CAAGC,IAAI;wCAAI;kDAC/D,cAAA,KAACxG;4CACC2E,MAAK;4CACL8B,cAAW;4CACXzC,SAAS,CAACC;gDACRA,EAAE6B,cAAc;gDAChB7B,EAAEC,eAAe;gDACjB5B,cAAc2B,EAAEyC,aAAa;4CAC/B;sDAEA,cAAA,KAACtG;gDAAUuG,UAAS;;;;;;;wBAK3BxF,YAAY6B,GAAG,CAAC,CAAC4D,MAAMC,oBACtB,KAAChH;gCAECqB,OAAOF,gBAAgB4F,KAAK1F,KAAK,EAAEK;gCACnCyC,SAAS;oCACP5C,SAASwF,KAAK1F,KAAK;gCACrB;0CAEC0F,KAAKhE,OAAO;+BANRiE;wBASRvF,qCACC,KAACzB;4BACCqB,OAAOF,gBAAgBgB,WAAWd,KAAK,EAAEK;4BACzCyC,SAAS,IAAMlC,0BAA0B;sCAExCE,WAAWY,OAAO;;;;;;;AAOjC"}
1
+ {"version":3,"sources":["../../src/TimeRangeSelector/TimeRangeSelector.tsx"],"sourcesContent":["// Copyright 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 { Box, MenuItem, Popover, Select, IconButton, TextField, Stack } from '@mui/material';\nimport type { TimeRangeValue, AbsoluteTimeRange } from '@perses-dev/spec';\nimport { isRelativeTimeRange, toAbsoluteTimeRange } from '@perses-dev/spec';\nimport Calendar from 'mdi-material-ui/Calendar';\nimport EarthIcon from 'mdi-material-ui/Earth';\nimport type { ReactElement } from 'react';\nimport { useMemo, useRef, useState } from 'react';\n\nimport { useTimeZone } from '../context';\nimport type { TimeOption } from '../model';\nimport type { TimeZoneOption } from '../model/timeZoneOption';\nimport { getTimeZoneOptions } from '../model/timeZoneOption';\nimport { SettingsAutocomplete } from '../SettingsAutocomplete';\nimport { getGMTOffset } from '../utils/format';\nimport { DateTimeRangePicker } from './DateTimeRangePicker';\nimport { buildCustomTimeOption, formatTimeRange } from './utils';\n\ninterface TimeRangeSelectorProps {\n /**\n * The current value of the time range.\n */\n value: TimeRangeValue;\n /**\n * The list of time options to display in the dropdown.\n * The component will automatically add the last two options as a zoom out x2 and a custom absolute time range.\n */\n timeOptions: TimeOption[];\n /**\n * The callback to call when the time range changes.\n */\n onChange: (value: TimeRangeValue) => void;\n /**\n * Custom line height for the select component.\n */\n height?: string;\n /**\n * Whether to show the custom time range option.\n * Defaults to true.\n */\n showCustomTimeRange?: boolean;\n /** Optional explicit timezone and change handler to enable changing tz from the selector */\n timeZone?: string;\n timeZoneOptions?: TimeZoneOption[];\n onTimeZoneChange?: (timeZone: TimeZoneOption) => void;\n}\n\n/**\n * Date & time selection component to customize what data renders on dashboard.\n * This includes relative shortcuts and the ability to pick absolute start and end times.\n * @param props\n * @constructor\n */\nexport function TimeRangeSelector({\n value,\n timeOptions,\n onChange,\n height,\n showCustomTimeRange = true,\n timeZone: timeZoneProp,\n timeZoneOptions,\n onTimeZoneChange,\n}: TimeRangeSelectorProps): ReactElement {\n const { timeZone: ctxTimeZone } = useTimeZone();\n const timeZone = timeZoneProp ?? ctxTimeZone;\n\n const anchorEl = useRef();\n const [showCustomDateSelector, setShowCustomDateSelector] = useState(false);\n\n const convertedTimeRange = useMemo(() => {\n return isRelativeTimeRange(value) ? toAbsoluteTimeRange(value) : value;\n }, [value]);\n\n const lastOption = useMemo(\n () => buildCustomTimeOption(isRelativeTimeRange(value) ? undefined : value, timeZone),\n [value, timeZone],\n );\n\n const [open, setOpen] = useState(false);\n const tzOptions = timeZoneOptions ?? getTimeZoneOptions();\n const [tzAnchorEl, setTzAnchorEl] = useState<HTMLElement | null>(null);\n const tzOpen = Boolean(tzAnchorEl);\n const tzLabel = tzOptions.find((o) => o.value === timeZone)?.display ?? timeZone;\n const tzOffset = getGMTOffset(timeZone);\n const localOffset = getGMTOffset('local');\n const tzAutocompleteOptions = tzOptions.map((o) => ({ id: o.value, label: o.display }));\n const tzAutocompleteValue = tzAutocompleteOptions.find((option) => option.id === timeZone);\n\n return (\n <>\n <Popover\n anchorEl={tzAnchorEl}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n open={tzOpen}\n onClose={() => setTzAnchorEl(null)}\n sx={(theme) => ({ padding: theme.spacing(1) })}\n >\n <Box\n sx={{ p: 1, minWidth: 260 }}\n onClick={(e) => {\n e.stopPropagation();\n }}\n >\n <SettingsAutocomplete\n options={tzAutocompleteOptions}\n value={tzAutocompleteValue}\n onChange={(_e, option) => {\n if (option) {\n const selected = tzOptions.find((o) => o.value === option.id);\n if (selected) onTimeZoneChange?.(selected);\n }\n setTzAnchorEl(null);\n }}\n disableClearable\n renderInput={(params) => <TextField {...params} placeholder=\"Search timezones\" size=\"small\" />}\n />\n </Box>\n </Popover>\n <Popover\n anchorEl={anchorEl.current}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}\n open={showCustomDateSelector}\n onClose={() => setShowCustomDateSelector(false)}\n sx={(theme) => ({ padding: theme.spacing(2) })}\n >\n <DateTimeRangePicker\n initialTimeRange={convertedTimeRange}\n onChange={(value: AbsoluteTimeRange) => {\n onChange(value);\n setShowCustomDateSelector(false);\n setOpen(false);\n }}\n onCancel={() => setShowCustomDateSelector(false)}\n timeZone={timeZone}\n />\n </Popover>\n <Box ref={anchorEl}>\n <Select\n open={open}\n value={formatTimeRange(value, timeZone)}\n onClick={() => setOpen(!open)}\n IconComponent={Calendar}\n renderValue={() => (\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <span>\n {timeOptions.find((opt) => formatTimeRange(opt.value, timeZone) === formatTimeRange(value, timeZone))\n ?.display ?? formatTimeRange(value, timeZone)}\n </span>\n {tzOffset !== localOffset && (\n <Box sx={{ typography: 'caption', color: 'text.secondary' }}>· {tzOffset}</Box>\n )}\n </Stack>\n )}\n inputProps={{ 'aria-label': `Select time range. Currently set to ${value}` }}\n sx={{\n '.MuiSelect-icon': { marginTop: '1px', transform: 'none' },\n '.MuiSelect-select.MuiSelect-outlined.MuiInputBase-input': { paddingRight: '36px' },\n '.MuiSelect-select': height ? { lineHeight: height, paddingY: 0 } : {},\n }}\n >\n <MenuItem\n disableRipple\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n sx={{ cursor: 'default', '&:hover': { backgroundColor: 'transparent' }, py: 0.5, px: 1 }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', width: '100%', justifyContent: 'space-between' }}>\n <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'flex-start' }}>\n <Box sx={{ typography: 'subtitle1' }}>Time Range</Box>\n <Box sx={{ color: 'text.secondary', typography: 'caption', mt: 0.25 }}>Timezone: {tzLabel}</Box>\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', pr: 1, ml: 1.5 }}>\n <IconButton\n size=\"small\"\n aria-label=\"Select timezone\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setTzAnchorEl(e.currentTarget);\n }}\n >\n <EarthIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n </Box>\n </MenuItem>\n {timeOptions.map((item, idx) => (\n <MenuItem\n key={idx}\n value={formatTimeRange(item.value, timeZone)}\n onClick={() => {\n onChange(item.value);\n }}\n >\n {item.display}\n </MenuItem>\n ))}\n {showCustomTimeRange && (\n <MenuItem\n value={formatTimeRange(lastOption.value, timeZone)}\n onClick={() => setShowCustomDateSelector(true)}\n >\n {lastOption.display}\n </MenuItem>\n )}\n </Select>\n </Box>\n </>\n );\n}\n"],"names":["Box","MenuItem","Popover","Select","IconButton","TextField","Stack","isRelativeTimeRange","toAbsoluteTimeRange","Calendar","EarthIcon","useMemo","useRef","useState","useTimeZone","getTimeZoneOptions","SettingsAutocomplete","getGMTOffset","DateTimeRangePicker","buildCustomTimeOption","formatTimeRange","TimeRangeSelector","value","timeOptions","onChange","height","showCustomTimeRange","timeZone","timeZoneProp","timeZoneOptions","onTimeZoneChange","ctxTimeZone","anchorEl","showCustomDateSelector","setShowCustomDateSelector","convertedTimeRange","lastOption","undefined","open","setOpen","tzOptions","tzAnchorEl","setTzAnchorEl","tzOpen","Boolean","tzLabel","find","o","display","tzOffset","localOffset","tzAutocompleteOptions","map","id","label","tzAutocompleteValue","option","anchorOrigin","vertical","horizontal","transformOrigin","onClose","sx","theme","padding","spacing","p","minWidth","onClick","e","stopPropagation","options","_e","selected","disableClearable","renderInput","params","placeholder","size","current","initialTimeRange","onCancel","ref","IconComponent","renderValue","direction","alignItems","span","opt","typography","color","inputProps","marginTop","transform","paddingRight","lineHeight","paddingY","disableRipple","preventDefault","cursor","backgroundColor","py","px","width","justifyContent","flexDirection","mt","pr","ml","aria-label","currentTarget","fontSize","item","idx"],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  // See the License for the specific language governing permissions and
12
12
  // limitations under the License.
13
- export * from './TimeRangeSelector';
14
- export * from './DateTimeRangePicker';
13
+ export * from "./TimeRangeSelector.js";
14
+ export * from "./DateTimeRangePicker.js";
15
15
 
16
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/TimeRangeSelector/index.ts"],"sourcesContent":["// Copyright 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\nexport * from './TimeRangeSelector';\nexport * from './DateTimeRangePicker';\n"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,cAAc,sBAAsB;AACpC,cAAc,wBAAwB"}
1
+ {"version":3,"sources":["../../src/TimeRangeSelector/index.ts"],"sourcesContent":["// Copyright 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\nexport * from './TimeRangeSelector';\nexport * from './DateTimeRangePicker';\n"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,cAAc,yBAAsB;AACpC,cAAc,2BAAwB"}
@@ -1,4 +1,4 @@
1
- import { AbsoluteTimeRange, TimeRangeValue } from '@perses-dev/spec';
1
+ import type { AbsoluteTimeRange, TimeRangeValue } from '@perses-dev/spec';
2
2
  export declare const DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
3
3
  export interface CustomTimeOption {
4
4
  value: TimeRangeValue | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/TimeRangeSelector/utils.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,iBAAiB,EAAuB,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG1F,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,cAAc,GAAG,SAAS,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAE9G;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,OAAO,CAWzE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAI/G;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK3F"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/TimeRangeSelector/utils.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAM1E,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,cAAc,GAAG,SAAS,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAE9G;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,OAAO,CAWzE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAI/G;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK3F"}
@@ -10,9 +10,9 @@
10
10
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  // See the License for the specific language governing permissions and
12
12
  // limitations under the License.
13
- import { isBefore, isValid } from 'date-fns';
14
- import { isRelativeTimeRange } from '@perses-dev/spec';
15
- import { formatWithTimeZone } from '../utils';
13
+ import { isRelativeTimeRange } from "@perses-dev/spec";
14
+ import { isBefore, isValid } from "date-fns";
15
+ import { formatWithTimeZone } from "../utils/index.js";
16
16
  export const DATE_TIME_FORMAT = 'yyyy-MM-dd HH:mm:ss';
17
17
  export function buildCustomTimeOption(value, timeZone) {
18
18
  return {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/TimeRangeSelector/utils.ts"],"sourcesContent":["// Copyright 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 { isBefore, isValid } from 'date-fns';\nimport { AbsoluteTimeRange, isRelativeTimeRange, TimeRangeValue } from '@perses-dev/spec';\nimport { formatWithTimeZone } from '../utils';\n\nexport const DATE_TIME_FORMAT = 'yyyy-MM-dd HH:mm:ss';\n\nexport interface CustomTimeOption {\n value: TimeRangeValue | undefined;\n display: string;\n}\n\nexport function buildCustomTimeOption(value: AbsoluteTimeRange | undefined, timeZone: string): CustomTimeOption {\n return { value, display: formatTimeRange(value, timeZone) };\n}\n\n/**\n * Date validation and check if end is after start\n */\nexport function validateDateRange(startDate: Date, endDate: Date): boolean {\n // TODO: display error as helperText\n if (!isValid(startDate) || !isValid(endDate)) {\n console.error('Invalid Date');\n return false;\n }\n if (!isBefore(startDate, endDate)) {\n console.error('End Time is before Start Time');\n return false;\n }\n return true;\n}\n\n/**\n * Format start and end time based on provided date format\n * @param timeRange absolute time range with a start and end datetime\n * @param dateFormat date format string\n * @param timeZone\n */\nexport function formatAbsoluteRange(timeRange: AbsoluteTimeRange, dateFormat: string, timeZone?: string): string {\n const formattedStart = formatWithTimeZone(timeRange.start, dateFormat, timeZone);\n const formattedEnd = formatWithTimeZone(timeRange.end, dateFormat, timeZone);\n return `${formattedStart} - ${formattedEnd}`;\n}\n\n/**\n * Format the time range for display purpose only (e.g. in the selector)\n * @param value\n * @param timeZone\n */\nexport function formatTimeRange(value: TimeRangeValue | undefined, timeZone: string): string {\n if (!value) {\n return 'Custom Time Range';\n }\n return !isRelativeTimeRange(value) ? formatAbsoluteRange(value, DATE_TIME_FORMAT, timeZone) : value.pastDuration;\n}\n"],"names":["isBefore","isValid","isRelativeTimeRange","formatWithTimeZone","DATE_TIME_FORMAT","buildCustomTimeOption","value","timeZone","display","formatTimeRange","validateDateRange","startDate","endDate","console","error","formatAbsoluteRange","timeRange","dateFormat","formattedStart","start","formattedEnd","end","pastDuration"],"mappings":"AAAA,+BAA+B;AAC/B,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,SAASA,QAAQ,EAAEC,OAAO,QAAQ,WAAW;AAC7C,SAA4BC,mBAAmB,QAAwB,mBAAmB;AAC1F,SAASC,kBAAkB,QAAQ,WAAW;AAE9C,OAAO,MAAMC,mBAAmB,sBAAsB;AAOtD,OAAO,SAASC,sBAAsBC,KAAoC,EAAEC,QAAgB;IAC1F,OAAO;QAAED;QAAOE,SAASC,gBAAgBH,OAAOC;IAAU;AAC5D;AAEA;;CAEC,GACD,OAAO,SAASG,kBAAkBC,SAAe,EAAEC,OAAa;IAC9D,oCAAoC;IACpC,IAAI,CAACX,QAAQU,cAAc,CAACV,QAAQW,UAAU;QAC5CC,QAAQC,KAAK,CAAC;QACd,OAAO;IACT;IACA,IAAI,CAACd,SAASW,WAAWC,UAAU;QACjCC,QAAQC,KAAK,CAAC;QACd,OAAO;IACT;IACA,OAAO;AACT;AAEA;;;;;CAKC,GACD,OAAO,SAASC,oBAAoBC,SAA4B,EAAEC,UAAkB,EAAEV,QAAiB;IACrG,MAAMW,iBAAiBf,mBAAmBa,UAAUG,KAAK,EAAEF,YAAYV;IACvE,MAAMa,eAAejB,mBAAmBa,UAAUK,GAAG,EAAEJ,YAAYV;IACnE,OAAO,GAAGW,eAAe,GAAG,EAAEE,cAAc;AAC9C;AAEA;;;;CAIC,GACD,OAAO,SAASX,gBAAgBH,KAAiC,EAAEC,QAAgB;IACjF,IAAI,CAACD,OAAO;QACV,OAAO;IACT;IACA,OAAO,CAACJ,oBAAoBI,SAASS,oBAAoBT,OAAOF,kBAAkBG,YAAYD,MAAMgB,YAAY;AAClH"}
1
+ {"version":3,"sources":["../../src/TimeRangeSelector/utils.ts"],"sourcesContent":["// Copyright 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 type { AbsoluteTimeRange, TimeRangeValue } from '@perses-dev/spec';\nimport { isRelativeTimeRange } from '@perses-dev/spec';\nimport { isBefore, isValid } from 'date-fns';\n\nimport { formatWithTimeZone } from '../utils';\n\nexport const DATE_TIME_FORMAT = 'yyyy-MM-dd HH:mm:ss';\n\nexport interface CustomTimeOption {\n value: TimeRangeValue | undefined;\n display: string;\n}\n\nexport function buildCustomTimeOption(value: AbsoluteTimeRange | undefined, timeZone: string): CustomTimeOption {\n return { value, display: formatTimeRange(value, timeZone) };\n}\n\n/**\n * Date validation and check if end is after start\n */\nexport function validateDateRange(startDate: Date, endDate: Date): boolean {\n // TODO: display error as helperText\n if (!isValid(startDate) || !isValid(endDate)) {\n console.error('Invalid Date');\n return false;\n }\n if (!isBefore(startDate, endDate)) {\n console.error('End Time is before Start Time');\n return false;\n }\n return true;\n}\n\n/**\n * Format start and end time based on provided date format\n * @param timeRange absolute time range with a start and end datetime\n * @param dateFormat date format string\n * @param timeZone\n */\nexport function formatAbsoluteRange(timeRange: AbsoluteTimeRange, dateFormat: string, timeZone?: string): string {\n const formattedStart = formatWithTimeZone(timeRange.start, dateFormat, timeZone);\n const formattedEnd = formatWithTimeZone(timeRange.end, dateFormat, timeZone);\n return `${formattedStart} - ${formattedEnd}`;\n}\n\n/**\n * Format the time range for display purpose only (e.g. in the selector)\n * @param value\n * @param timeZone\n */\nexport function formatTimeRange(value: TimeRangeValue | undefined, timeZone: string): string {\n if (!value) {\n return 'Custom Time Range';\n }\n return !isRelativeTimeRange(value) ? formatAbsoluteRange(value, DATE_TIME_FORMAT, timeZone) : value.pastDuration;\n}\n"],"names":["isRelativeTimeRange","isBefore","isValid","formatWithTimeZone","DATE_TIME_FORMAT","buildCustomTimeOption","value","timeZone","display","formatTimeRange","validateDateRange","startDate","endDate","console","error","formatAbsoluteRange","timeRange","dateFormat","formattedStart","start","formattedEnd","end","pastDuration"],"mappings":"AAAA,+BAA+B;AAC/B,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAGjC,SAASA,mBAAmB,QAAQ,mBAAmB;AACvD,SAASC,QAAQ,EAAEC,OAAO,QAAQ,WAAW;AAE7C,SAASC,kBAAkB,QAAQ,oBAAW;AAE9C,OAAO,MAAMC,mBAAmB,sBAAsB;AAOtD,OAAO,SAASC,sBAAsBC,KAAoC,EAAEC,QAAgB;IAC1F,OAAO;QAAED;QAAOE,SAASC,gBAAgBH,OAAOC;IAAU;AAC5D;AAEA;;CAEC,GACD,OAAO,SAASG,kBAAkBC,SAAe,EAAEC,OAAa;IAC9D,oCAAoC;IACpC,IAAI,CAACV,QAAQS,cAAc,CAACT,QAAQU,UAAU;QAC5CC,QAAQC,KAAK,CAAC;QACd,OAAO;IACT;IACA,IAAI,CAACb,SAASU,WAAWC,UAAU;QACjCC,QAAQC,KAAK,CAAC;QACd,OAAO;IACT;IACA,OAAO;AACT;AAEA;;;;;CAKC,GACD,OAAO,SAASC,oBAAoBC,SAA4B,EAAEC,UAAkB,EAAEV,QAAiB;IACrG,MAAMW,iBAAiBf,mBAAmBa,UAAUG,KAAK,EAAEF,YAAYV;IACvE,MAAMa,eAAejB,mBAAmBa,UAAUK,GAAG,EAAEJ,YAAYV;IACnE,OAAO,GAAGW,eAAe,GAAG,EAAEE,cAAc;AAC9C;AAEA;;;;CAIC,GACD,OAAO,SAASX,gBAAgBH,KAAiC,EAAEC,QAAgB;IACjF,IAAI,CAACD,OAAO;QACV,OAAO;IACT;IACA,OAAO,CAACN,oBAAoBM,SAASS,oBAAoBT,OAAOF,kBAAkBG,YAAYD,MAAMgB,YAAY;AAClH"}
@@ -1,4 +1,4 @@
1
- import { ReactElement } from 'react';
1
+ import type { ReactElement } from 'react';
2
2
  export interface SeriesInfoProps {
3
3
  seriesName: string;
4
4
  y: number;
@@ -1 +1 @@
1
- {"version":3,"file":"SeriesInfo.d.ts","sourceRoot":"","sources":["../../src/TimeSeriesTooltip/SeriesInfo.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAKrC,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,CA0E/D"}
1
+ {"version":3,"file":"SeriesInfo.d.ts","sourceRoot":"","sources":["../../src/TimeSeriesTooltip/SeriesInfo.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAM1C,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,CA0E/D"}
@@ -11,10 +11,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
- import { Box } from '@mui/material';
15
- import { SeriesMarker } from './SeriesMarker';
16
- import { SeriesLabelsStack } from './SeriesLabelsStack';
17
- import { TOOLTIP_LABELS_MAX_WIDTH, EMPHASIZED_SERIES_DESCRIPTION, NEARBY_SERIES_DESCRIPTION } from './tooltip-model';
14
+ import { Box } from "@mui/material";
15
+ import { SeriesLabelsStack } from "./SeriesLabelsStack.js";
16
+ import { SeriesMarker } from "./SeriesMarker.js";
17
+ import { TOOLTIP_LABELS_MAX_WIDTH, EMPHASIZED_SERIES_DESCRIPTION, NEARBY_SERIES_DESCRIPTION } from "./tooltip-model.js";
18
18
  export function SeriesInfo(props) {
19
19
  const { seriesName, formattedY, markerColor, totalSeries, emphasizeText = false, wrapLabels = true } = props;
20
20
  // metric __name__ comes before opening curly brace, ignore if not populated
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/TimeSeriesTooltip/SeriesInfo.tsx"],"sourcesContent":["// Copyright 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 { Box } from '@mui/material';\nimport { ReactElement } from 'react';\nimport { SeriesMarker } from './SeriesMarker';\nimport { SeriesLabelsStack } from './SeriesLabelsStack';\nimport { TOOLTIP_LABELS_MAX_WIDTH, EMPHASIZED_SERIES_DESCRIPTION, NEARBY_SERIES_DESCRIPTION } from './tooltip-model';\n\nexport interface SeriesInfoProps {\n seriesName: string;\n y: number;\n formattedY: string;\n markerColor: string;\n totalSeries: number;\n emphasizeText?: boolean;\n wrapLabels?: boolean;\n}\n\nexport function SeriesInfo(props: SeriesInfoProps): ReactElement {\n const { seriesName, formattedY, markerColor, totalSeries, emphasizeText = false, wrapLabels = true } = props;\n\n // metric __name__ comes before opening curly brace, ignore if not populated\n // ex with metric name: node_load15{env=\"demo\",job=\"node\"}\n // ex without metric name: {env=\"demo\",job=\"node\"}\n const splitName = seriesName.split('{');\n const seriesLabels = splitName[1] ?? seriesName;\n\n // remove curly braces that wrap labels\n const formattedSeriesLabels = seriesLabels.replace(/[{}]/g, '');\n\n // determine whether to show labels on separate lines\n const splitLabels = formattedSeriesLabels.split(',');\n if (totalSeries === 1 && splitLabels.length > 1) {\n const metricName = splitName[0] ? `${splitName[0]}:` : 'value:';\n return (\n <SeriesLabelsStack\n formattedY={formattedY}\n metricName={metricName}\n metricLabels={splitLabels}\n markerColor={markerColor}\n />\n );\n }\n\n // add space after commas so wrapLabels works\n const formattedSeriesInfo = seriesName.replace(/[,]/g, ', ');\n\n return (\n <Box\n sx={{\n display: 'table-row',\n paddingTop: 0.5,\n }}\n >\n <Box\n sx={{\n display: 'table-cell',\n maxWidth: '520px',\n }}\n >\n <SeriesMarker markerColor={markerColor} sx={{ marginTop: 0.5 }} />\n <Box\n component=\"span\"\n sx={(theme) => ({\n display: 'inline-block',\n width: 'calc(100% - 20px)',\n minWidth: 150,\n maxWidth: TOOLTIP_LABELS_MAX_WIDTH,\n overflow: 'hidden',\n color: theme.palette.common.white,\n fontWeight: emphasizeText ? theme.typography.fontWeightBold : theme.typography.fontWeightRegular,\n textOverflow: 'ellipsis',\n whiteSpace: wrapLabels ? 'normal' : 'nowrap',\n })}\n aria-label={emphasizeText ? EMPHASIZED_SERIES_DESCRIPTION : NEARBY_SERIES_DESCRIPTION}\n >\n {formattedSeriesInfo}\n </Box>\n </Box>\n <Box\n sx={(theme) => ({\n display: 'table-cell',\n paddingLeft: 1.5,\n textAlign: 'right',\n verticalAlign: 'top',\n fontWeight: emphasizeText ? theme.typography.fontWeightBold : theme.typography.fontWeightRegular,\n })}\n >\n {formattedY}\n </Box>\n </Box>\n );\n}\n"],"names":["Box","SeriesMarker","SeriesLabelsStack","TOOLTIP_LABELS_MAX_WIDTH","EMPHASIZED_SERIES_DESCRIPTION","NEARBY_SERIES_DESCRIPTION","SeriesInfo","props","seriesName","formattedY","markerColor","totalSeries","emphasizeText","wrapLabels","splitName","split","seriesLabels","formattedSeriesLabels","replace","splitLabels","length","metricName","metricLabels","formattedSeriesInfo","sx","display","paddingTop","maxWidth","marginTop","component","theme","width","minWidth","overflow","color","palette","common","white","fontWeight","typography","fontWeightBold","fontWeightRegular","textOverflow","whiteSpace","aria-label","paddingLeft","textAlign","verticalAlign"],"mappings":";AAAA,+BAA+B;AAC/B,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,SAASA,GAAG,QAAQ,gBAAgB;AAEpC,SAASC,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,iBAAiB,QAAQ,sBAAsB;AACxD,SAASC,wBAAwB,EAAEC,6BAA6B,EAAEC,yBAAyB,QAAQ,kBAAkB;AAYrH,OAAO,SAASC,WAAWC,KAAsB;IAC/C,MAAM,EAAEC,UAAU,EAAEC,UAAU,EAAEC,WAAW,EAAEC,WAAW,EAAEC,gBAAgB,KAAK,EAAEC,aAAa,IAAI,EAAE,GAAGN;IAEvG,4EAA4E;IAC5E,0DAA0D;IAC1D,kDAAkD;IAClD,MAAMO,YAAYN,WAAWO,KAAK,CAAC;IACnC,MAAMC,eAAeF,SAAS,CAAC,EAAE,IAAIN;IAErC,uCAAuC;IACvC,MAAMS,wBAAwBD,aAAaE,OAAO,CAAC,SAAS;IAE5D,qDAAqD;IACrD,MAAMC,cAAcF,sBAAsBF,KAAK,CAAC;IAChD,IAAIJ,gBAAgB,KAAKQ,YAAYC,MAAM,GAAG,GAAG;QAC/C,MAAMC,aAAaP,SAAS,CAAC,EAAE,GAAG,GAAGA,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG;QACvD,qBACE,KAACZ;YACCO,YAAYA;YACZY,YAAYA;YACZC,cAAcH;YACdT,aAAaA;;IAGnB;IAEA,6CAA6C;IAC7C,MAAMa,sBAAsBf,WAAWU,OAAO,CAAC,QAAQ;IAEvD,qBACE,MAAClB;QACCwB,IAAI;YACFC,SAAS;YACTC,YAAY;QACd;;0BAEA,MAAC1B;gBACCwB,IAAI;oBACFC,SAAS;oBACTE,UAAU;gBACZ;;kCAEA,KAAC1B;wBAAaS,aAAaA;wBAAac,IAAI;4BAAEI,WAAW;wBAAI;;kCAC7D,KAAC5B;wBACC6B,WAAU;wBACVL,IAAI,CAACM,QAAW,CAAA;gCACdL,SAAS;gCACTM,OAAO;gCACPC,UAAU;gCACVL,UAAUxB;gCACV8B,UAAU;gCACVC,OAAOJ,MAAMK,OAAO,CAACC,MAAM,CAACC,KAAK;gCACjCC,YAAY1B,gBAAgBkB,MAAMS,UAAU,CAACC,cAAc,GAAGV,MAAMS,UAAU,CAACE,iBAAiB;gCAChGC,cAAc;gCACdC,YAAY9B,aAAa,WAAW;4BACtC,CAAA;wBACA+B,cAAYhC,gBAAgBR,gCAAgCC;kCAE3DkB;;;;0BAGL,KAACvB;gBACCwB,IAAI,CAACM,QAAW,CAAA;wBACdL,SAAS;wBACToB,aAAa;wBACbC,WAAW;wBACXC,eAAe;wBACfT,YAAY1B,gBAAgBkB,MAAMS,UAAU,CAACC,cAAc,GAAGV,MAAMS,UAAU,CAACE,iBAAiB;oBAClG,CAAA;0BAEChC;;;;AAIT"}
1
+ {"version":3,"sources":["../../src/TimeSeriesTooltip/SeriesInfo.tsx"],"sourcesContent":["// Copyright 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 { Box } from '@mui/material';\nimport type { ReactElement } from 'react';\n\nimport { SeriesLabelsStack } from './SeriesLabelsStack';\nimport { SeriesMarker } from './SeriesMarker';\nimport { TOOLTIP_LABELS_MAX_WIDTH, EMPHASIZED_SERIES_DESCRIPTION, NEARBY_SERIES_DESCRIPTION } from './tooltip-model';\n\nexport interface SeriesInfoProps {\n seriesName: string;\n y: number;\n formattedY: string;\n markerColor: string;\n totalSeries: number;\n emphasizeText?: boolean;\n wrapLabels?: boolean;\n}\n\nexport function SeriesInfo(props: SeriesInfoProps): ReactElement {\n const { seriesName, formattedY, markerColor, totalSeries, emphasizeText = false, wrapLabels = true } = props;\n\n // metric __name__ comes before opening curly brace, ignore if not populated\n // ex with metric name: node_load15{env=\"demo\",job=\"node\"}\n // ex without metric name: {env=\"demo\",job=\"node\"}\n const splitName = seriesName.split('{');\n const seriesLabels = splitName[1] ?? seriesName;\n\n // remove curly braces that wrap labels\n const formattedSeriesLabels = seriesLabels.replace(/[{}]/g, '');\n\n // determine whether to show labels on separate lines\n const splitLabels = formattedSeriesLabels.split(',');\n if (totalSeries === 1 && splitLabels.length > 1) {\n const metricName = splitName[0] ? `${splitName[0]}:` : 'value:';\n return (\n <SeriesLabelsStack\n formattedY={formattedY}\n metricName={metricName}\n metricLabels={splitLabels}\n markerColor={markerColor}\n />\n );\n }\n\n // add space after commas so wrapLabels works\n const formattedSeriesInfo = seriesName.replace(/[,]/g, ', ');\n\n return (\n <Box\n sx={{\n display: 'table-row',\n paddingTop: 0.5,\n }}\n >\n <Box\n sx={{\n display: 'table-cell',\n maxWidth: '520px',\n }}\n >\n <SeriesMarker markerColor={markerColor} sx={{ marginTop: 0.5 }} />\n <Box\n component=\"span\"\n sx={(theme) => ({\n display: 'inline-block',\n width: 'calc(100% - 20px)',\n minWidth: 150,\n maxWidth: TOOLTIP_LABELS_MAX_WIDTH,\n overflow: 'hidden',\n color: theme.palette.common.white,\n fontWeight: emphasizeText ? theme.typography.fontWeightBold : theme.typography.fontWeightRegular,\n textOverflow: 'ellipsis',\n whiteSpace: wrapLabels ? 'normal' : 'nowrap',\n })}\n aria-label={emphasizeText ? EMPHASIZED_SERIES_DESCRIPTION : NEARBY_SERIES_DESCRIPTION}\n >\n {formattedSeriesInfo}\n </Box>\n </Box>\n <Box\n sx={(theme) => ({\n display: 'table-cell',\n paddingLeft: 1.5,\n textAlign: 'right',\n verticalAlign: 'top',\n fontWeight: emphasizeText ? theme.typography.fontWeightBold : theme.typography.fontWeightRegular,\n })}\n >\n {formattedY}\n </Box>\n </Box>\n );\n}\n"],"names":["Box","SeriesLabelsStack","SeriesMarker","TOOLTIP_LABELS_MAX_WIDTH","EMPHASIZED_SERIES_DESCRIPTION","NEARBY_SERIES_DESCRIPTION","SeriesInfo","props","seriesName","formattedY","markerColor","totalSeries","emphasizeText","wrapLabels","splitName","split","seriesLabels","formattedSeriesLabels","replace","splitLabels","length","metricName","metricLabels","formattedSeriesInfo","sx","display","paddingTop","maxWidth","marginTop","component","theme","width","minWidth","overflow","color","palette","common","white","fontWeight","typography","fontWeightBold","fontWeightRegular","textOverflow","whiteSpace","aria-label","paddingLeft","textAlign","verticalAlign"],"mappings":";AAAA,+BAA+B;AAC/B,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,SAASA,GAAG,QAAQ,gBAAgB;AAGpC,SAASC,iBAAiB,QAAQ,yBAAsB;AACxD,SAASC,YAAY,QAAQ,oBAAiB;AAC9C,SAASC,wBAAwB,EAAEC,6BAA6B,EAAEC,yBAAyB,QAAQ,qBAAkB;AAYrH,OAAO,SAASC,WAAWC,KAAsB;IAC/C,MAAM,EAAEC,UAAU,EAAEC,UAAU,EAAEC,WAAW,EAAEC,WAAW,EAAEC,gBAAgB,KAAK,EAAEC,aAAa,IAAI,EAAE,GAAGN;IAEvG,4EAA4E;IAC5E,0DAA0D;IAC1D,kDAAkD;IAClD,MAAMO,YAAYN,WAAWO,KAAK,CAAC;IACnC,MAAMC,eAAeF,SAAS,CAAC,EAAE,IAAIN;IAErC,uCAAuC;IACvC,MAAMS,wBAAwBD,aAAaE,OAAO,CAAC,SAAS;IAE5D,qDAAqD;IACrD,MAAMC,cAAcF,sBAAsBF,KAAK,CAAC;IAChD,IAAIJ,gBAAgB,KAAKQ,YAAYC,MAAM,GAAG,GAAG;QAC/C,MAAMC,aAAaP,SAAS,CAAC,EAAE,GAAG,GAAGA,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG;QACvD,qBACE,KAACb;YACCQ,YAAYA;YACZY,YAAYA;YACZC,cAAcH;YACdT,aAAaA;;IAGnB;IAEA,6CAA6C;IAC7C,MAAMa,sBAAsBf,WAAWU,OAAO,CAAC,QAAQ;IAEvD,qBACE,MAAClB;QACCwB,IAAI;YACFC,SAAS;YACTC,YAAY;QACd;;0BAEA,MAAC1B;gBACCwB,IAAI;oBACFC,SAAS;oBACTE,UAAU;gBACZ;;kCAEA,KAACzB;wBAAaQ,aAAaA;wBAAac,IAAI;4BAAEI,WAAW;wBAAI;;kCAC7D,KAAC5B;wBACC6B,WAAU;wBACVL,IAAI,CAACM,QAAW,CAAA;gCACdL,SAAS;gCACTM,OAAO;gCACPC,UAAU;gCACVL,UAAUxB;gCACV8B,UAAU;gCACVC,OAAOJ,MAAMK,OAAO,CAACC,MAAM,CAACC,KAAK;gCACjCC,YAAY1B,gBAAgBkB,MAAMS,UAAU,CAACC,cAAc,GAAGV,MAAMS,UAAU,CAACE,iBAAiB;gCAChGC,cAAc;gCACdC,YAAY9B,aAAa,WAAW;4BACtC,CAAA;wBACA+B,cAAYhC,gBAAgBR,gCAAgCC;kCAE3DkB;;;;0BAGL,KAACvB;gBACCwB,IAAI,CAACM,QAAW,CAAA;wBACdL,SAAS;wBACToB,aAAa;wBACbC,WAAW;wBACXC,eAAe;wBACfT,YAAY1B,gBAAgBkB,MAAMS,UAAU,CAACC,cAAc,GAAGV,MAAMS,UAAU,CAACE,iBAAiB;oBAClG,CAAA;0BAEChC;;;;AAIT"}
@@ -1,4 +1,4 @@
1
- import { ReactElement } from 'react';
1
+ import type { ReactElement } from 'react';
2
2
  export interface SeriesLabelsStackProps {
3
3
  formattedY: string;
4
4
  metricName: string;