@sentry/junior-dashboard 0.264.0 → 0.266.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +2 -5
  3. package/dist/app.js +119 -35
  4. package/dist/client.js +145 -136
  5. package/dist/index.d.ts +0 -1
  6. package/dist/index.js +119 -35
  7. package/dist/tailwind.css +1 -1
  8. package/package.json +5 -4
  9. package/src/api/schema.ts +0 -1
  10. package/src/app.ts +5 -20
  11. package/src/client/App.tsx +29 -31
  12. package/src/client/api.ts +7 -0
  13. package/src/client/components/ActorAvatar.tsx +10 -22
  14. package/src/client/components/BottomSheet.tsx +12 -2
  15. package/src/client/components/ConnectionBanner.tsx +4 -3
  16. package/src/client/components/CopyButton.tsx +82 -0
  17. package/src/client/components/DetailsPanel.tsx +133 -0
  18. package/src/client/components/Drawer.tsx +15 -24
  19. package/src/client/components/EmptyTelemetry.tsx +5 -3
  20. package/src/client/components/FilterBar.tsx +16 -31
  21. package/src/client/components/ImageAttachment.tsx +49 -63
  22. package/src/client/components/InlineError.tsx +8 -4
  23. package/src/client/components/Metric.tsx +33 -23
  24. package/src/client/components/Notice.tsx +19 -26
  25. package/src/client/components/PageContentSkeleton.tsx +1 -1
  26. package/src/client/components/Pagination.tsx +27 -27
  27. package/src/client/components/ParticipantAvatarStack.tsx +43 -39
  28. package/src/client/components/ProfileMenu.tsx +27 -93
  29. package/src/client/components/README.md +103 -78
  30. package/src/client/components/SearchInput.tsx +51 -41
  31. package/src/client/components/SegmentedNav.tsx +1 -1
  32. package/src/client/components/ShimmerText.tsx +2 -6
  33. package/src/client/components/ThemeSwitcher.tsx +19 -15
  34. package/src/client/components/VersionDriftBanner.tsx +9 -7
  35. package/src/client/components/charts/ActivityChart.tsx +173 -288
  36. package/src/client/components/charts/CacheWrites.tsx +59 -37
  37. package/src/client/components/charts/InputCacheChart.tsx +137 -131
  38. package/src/client/components/charts/README.md +4 -4
  39. package/src/client/components/charts/SystemMetricCharts.tsx +68 -95
  40. package/src/client/components/charts/WorkspaceUsageChart.tsx +42 -62
  41. package/src/client/components/controls/DirectorySortSelect.tsx +3 -3
  42. package/src/client/components/controls/TimeRangeSelector.tsx +10 -15
  43. package/src/client/components/layout/DashboardHeader.tsx +44 -90
  44. package/src/client/components/layout/SecondaryNavigation.tsx +2 -1
  45. package/src/client/components/layout/VisualViewportShell.tsx +2 -2
  46. package/src/client/components/ui/accordion.tsx +77 -0
  47. package/src/client/components/ui/alert-dialog.tsx +89 -0
  48. package/src/client/components/ui/alert.tsx +64 -0
  49. package/src/client/components/ui/avatar.tsx +53 -0
  50. package/src/client/components/ui/button.tsx +86 -0
  51. package/src/client/components/ui/chart.tsx +74 -0
  52. package/src/client/components/ui/checkbox.tsx +26 -0
  53. package/src/client/components/ui/collapsible.tsx +22 -0
  54. package/src/client/components/ui/dialog.tsx +66 -0
  55. package/src/client/components/ui/empty.tsx +32 -0
  56. package/src/client/components/ui/field.tsx +49 -0
  57. package/src/client/components/ui/input-group.tsx +96 -0
  58. package/src/client/components/ui/input.tsx +35 -0
  59. package/src/client/components/ui/native-select.tsx +57 -0
  60. package/src/client/components/ui/pagination.tsx +60 -0
  61. package/src/client/components/ui/popover.tsx +67 -0
  62. package/src/client/components/ui/radio-group.tsx +32 -0
  63. package/src/client/components/ui/sheet.tsx +13 -3
  64. package/src/client/components/ui/skeleton.tsx +19 -0
  65. package/src/client/components/ui/spinner.tsx +21 -0
  66. package/src/client/components/ui/table.tsx +101 -0
  67. package/src/client/components/ui/tabs.tsx +75 -0
  68. package/src/client/components/ui/textarea.tsx +17 -0
  69. package/src/client/components/ui/toast.tsx +215 -0
  70. package/src/client/components/ui/toggle-group.tsx +36 -0
  71. package/src/client/components/ui/toggle.tsx +37 -0
  72. package/src/client/components/ui/tooltip.tsx +168 -0
  73. package/src/client/components/ui/trace.tsx +96 -0
  74. package/src/client/conversations/ChatLayout.tsx +7 -3
  75. package/src/client/conversations/ConversationBrief.tsx +17 -6
  76. package/src/client/conversations/ConversationChildAgents.tsx +5 -5
  77. package/src/client/conversations/ConversationComposer.tsx +26 -12
  78. package/src/client/conversations/ConversationDetails.tsx +147 -62
  79. package/src/client/conversations/ConversationEventDetails.tsx +141 -0
  80. package/src/client/conversations/ConversationEventLog.tsx +150 -129
  81. package/src/client/conversations/ConversationHeader.tsx +13 -7
  82. package/src/client/conversations/ConversationHeaderActions.tsx +97 -93
  83. package/src/client/conversations/ConversationHomeList.tsx +1 -1
  84. package/src/client/conversations/ConversationLinkedWork.tsx +118 -0
  85. package/src/client/conversations/ConversationMeta.tsx +55 -88
  86. package/src/client/conversations/ConversationPage.tsx +220 -101
  87. package/src/client/conversations/ConversationSidebar.tsx +49 -29
  88. package/src/client/conversations/ConversationUsageBreakdown.tsx +108 -65
  89. package/src/client/conversations/ConversationWatches.tsx +173 -0
  90. package/src/client/conversations/ConversationWorkspace.tsx +12 -22
  91. package/src/client/conversations/ConversationWorkspaceLoading.tsx +1 -1
  92. package/src/client/conversations/DetailsList.tsx +139 -0
  93. package/src/client/conversations/EventDetails.tsx +42 -8
  94. package/src/client/conversations/EventUsage.tsx +99 -74
  95. package/src/client/conversations/ForkConversationButton.tsx +27 -16
  96. package/src/client/conversations/ObjectCard.tsx +20 -8
  97. package/src/client/conversations/PendingMailboxStack.tsx +52 -38
  98. package/src/client/conversations/README.md +89 -13
  99. package/src/client/conversations/ShareConversationButton.tsx +28 -17
  100. package/src/client/conversations/SubagentTranscriptDrawer.tsx +21 -15
  101. package/src/client/conversations/ToolFrame.tsx +36 -52
  102. package/src/client/conversations/TranscriptActivityGroup.tsx +13 -4
  103. package/src/client/conversations/TranscriptAutomationTriggerView.tsx +5 -4
  104. package/src/client/conversations/TranscriptContextEventView.tsx +25 -11
  105. package/src/client/conversations/TranscriptEventView.tsx +35 -16
  106. package/src/client/conversations/TranscriptHeadingRow.tsx +7 -7
  107. package/src/client/conversations/TranscriptLoading.tsx +1 -1
  108. package/src/client/conversations/TranscriptMarkdown.tsx +25 -20
  109. package/src/client/conversations/TranscriptMessageContextView.tsx +35 -18
  110. package/src/client/conversations/TranscriptMessageView.tsx +6 -1
  111. package/src/client/conversations/TranscriptReasoningView.tsx +54 -68
  112. package/src/client/conversations/TranscriptStructuredEventView.tsx +25 -15
  113. package/src/client/conversations/TranscriptSummary.tsx +34 -2
  114. package/src/client/conversations/TranscriptTimestamp.tsx +9 -7
  115. package/src/client/conversations/TranscriptToolView.tsx +1 -1
  116. package/src/client/conversations/TranscriptTurnContextView.tsx +144 -65
  117. package/src/client/conversations/TranscriptView.tsx +63 -27
  118. package/src/client/conversations/eventLog.ts +58 -0
  119. package/src/client/conversations/eventTime.ts +60 -0
  120. package/src/client/conversations/queries.ts +29 -0
  121. package/src/client/conversations/transcriptBottomPinning.ts +34 -0
  122. package/src/client/conversations/transcriptMentions.tsx +18 -5
  123. package/src/client/format.ts +5 -0
  124. package/src/client/pages/ConnectionsPage.tsx +2 -2
  125. package/src/client/pages/PersonalTokensPage.tsx +4 -4
  126. package/src/client/pages/SettingsPage.tsx +9 -10
  127. package/src/client/pages/admin/ServiceAccountsSection.tsx +2 -2
  128. package/src/client/pages/automations/AutomationCostChart.tsx +50 -71
  129. package/src/client/pages/automations/AutomationDeleteDialog.tsx +87 -0
  130. package/src/client/pages/automations/AutomationDetails.tsx +193 -0
  131. package/src/client/pages/automations/AutomationEditPage.tsx +7 -8
  132. package/src/client/pages/automations/AutomationEditor.tsx +41 -29
  133. package/src/client/pages/automations/AutomationEditorLoading.tsx +1 -1
  134. package/src/client/pages/automations/AutomationEventFields.tsx +202 -119
  135. package/src/client/pages/automations/AutomationExecutionChart.tsx +51 -64
  136. package/src/client/pages/automations/AutomationExecutionStatusChart.tsx +47 -70
  137. package/src/client/pages/automations/AutomationExecutionsPage.tsx +150 -126
  138. package/src/client/pages/automations/AutomationFilters.tsx +189 -74
  139. package/src/client/pages/automations/AutomationLifecycle.tsx +109 -78
  140. package/src/client/pages/automations/AutomationOutcomeFields.tsx +26 -24
  141. package/src/client/pages/automations/AutomationRecentRuns.tsx +143 -0
  142. package/src/client/pages/automations/AutomationRow.tsx +12 -138
  143. package/src/client/pages/automations/AutomationRunDetails.tsx +307 -0
  144. package/src/client/pages/automations/AutomationRunsPage.tsx +119 -94
  145. package/src/client/pages/automations/AutomationScheduleFields.tsx +51 -51
  146. package/src/client/pages/automations/AutomationStatus.tsx +201 -0
  147. package/src/client/pages/automations/AutomationVersionsPage.tsx +65 -28
  148. package/src/client/pages/automations/AutomationsPage.tsx +80 -68
  149. package/src/client/pages/automations/AutomationsPageLayout.tsx +46 -14
  150. package/src/client/pages/automations/README.md +57 -0
  151. package/src/client/pages/automations/TriggerFilters.tsx +22 -0
  152. package/src/client/pages/automations/automationFormat.ts +37 -23
  153. package/src/client/pages/code/CodeActivityChart.tsx +59 -101
  154. package/src/client/pages/code/CodePage.tsx +52 -55
  155. package/src/client/pages/code/RepositoryPage.tsx +6 -8
  156. package/src/client/pages/locations/LocationActivityChart.tsx +53 -70
  157. package/src/client/pages/locations/LocationDirectoryActivityChart.tsx +60 -80
  158. package/src/client/pages/memory/MemoryCostChart.tsx +79 -103
  159. package/src/client/pages/memory/MemoryDetails.tsx +218 -0
  160. package/src/client/pages/memory/MemoryPage.tsx +168 -112
  161. package/src/client/pages/memory/MemoryPageLayout.tsx +33 -9
  162. package/src/client/pages/memory/MemoryTimeline.tsx +46 -69
  163. package/src/client/pages/memory/memoryRecord.ts +1 -1
  164. package/src/client/pages/people/ContributionGrid.tsx +23 -16
  165. package/src/client/pages/people/PeopleActivityChart.tsx +68 -107
  166. package/src/client/pages/people/ProfileCodeChanges.tsx +5 -5
  167. package/src/client/pages/system/BaseSandboxCard.tsx +1 -1
  168. package/src/client/pages/system/ConversationActivityChart.tsx +49 -67
  169. package/src/client/pages/system/GuardianActivity.tsx +1 -2
  170. package/src/client/pages/system/PluginBarChart.tsx +106 -87
  171. package/src/client/pages/system/PluginReportRecordSet.tsx +25 -24
  172. package/src/client/pages/system/README.md +23 -0
  173. package/src/client/pages/system/SystemNavigation.tsx +5 -1
  174. package/src/client/pages/system/WorkspaceDeleteDialog.tsx +111 -0
  175. package/src/client/pages/system/WorkspaceDetails.tsx +200 -43
  176. package/src/client/pages/system/WorkspaceEditor.tsx +59 -61
  177. package/src/client/pages/system/WorkspaceFormPage.tsx +23 -47
  178. package/src/client/pages/system/WorkspaceList.tsx +20 -30
  179. package/src/client/pages/system/WorkspacesPage.tsx +117 -119
  180. package/src/client/pages/system/sandboxSize.ts +8 -0
  181. package/src/client/pages/system/workspaceQueries.ts +53 -0
  182. package/src/client/pages/user/PluginUserPage.tsx +51 -2
  183. package/src/client/pages/user/pluginUserPageData.ts +1 -6
  184. package/src/client/styles.ts +4 -0
  185. package/src/client.tsx +7 -1
  186. package/src/mock-reporting/automation-collection.ts +4 -2
  187. package/src/mock-reporting/fixtures.ts +23 -7
  188. package/src/mock-reporting/routes.ts +12 -0
  189. package/src/mock-reporting/watches.ts +94 -0
  190. package/src/shell.ts +4 -9
  191. package/src/tailwind.css +0 -10
  192. package/src/client/components/Button.tsx +0 -118
  193. package/src/client/components/Field.tsx +0 -53
  194. package/src/client/components/SegmentedTabs.tsx +0 -119
  195. package/src/client/components/Select.tsx +0 -52
  196. package/src/client/components/Skeleton.tsx +0 -17
  197. package/src/client/components/TextInput.tsx +0 -58
  198. package/src/client/components/Tooltip.tsx +0 -216
  199. package/src/client/components/charts/useChartLayout.ts +0 -27
  200. package/src/client/components/ui/sheet.LICENSE +0 -21
  201. package/src/client/conversations/ConversationDetailsFrame.tsx +0 -119
  202. package/src/client/conversations/CopyMarkdownButton.tsx +0 -65
  203. package/src/client/pages/automations/AutomationDetailsDrawer.tsx +0 -219
  204. package/src/client/pages/dev/ChartFixtures.tsx +0 -325
  205. package/src/client/pages/dev/ComponentsPage.tsx +0 -899
  206. package/src/client/pages/dev/ConversationFixture.tsx +0 -231
  207. package/src/client/pages/dev/ObjectFixtures.tsx +0 -138
  208. package/src/client/pages/dev/SegmentedFixtures.tsx +0 -59
  209. package/src/client/pages/dev/SelectFixtures.tsx +0 -62
  210. package/src/client/pages/dev/TranscriptActivityFixtures.tsx +0 -206
  211. package/src/client/pages/memory/MemoryDetailsDrawer.tsx +0 -167
  212. package/src/client/pages/system/SandboxSizeSummary.tsx +0 -47
  213. package/src/client/pages/system/SnapshotSummary.tsx +0 -78
@@ -4,21 +4,23 @@ import {
4
4
  type TimeRangeDays,
5
5
  } from "../../components/controls/TimeRangeSelector";
6
6
  import type { AutomationExecutionDay } from "@sentry/junior/api/schema";
7
+ import { Bar, BarChart, CartesianGrid } from "recharts";
7
8
  import {
8
9
  ActivityChartAverageLine,
9
- ActivityChartDateLabels,
10
- ActivityChartGrid,
11
10
  activityChartAverage,
12
- ActivityChartTooltip,
13
- ActivityTooltipRows,
14
- ChartSvg,
15
- createActivityChartLayout,
11
+ activityChartMargin,
12
+ ActivityChartTooltipContent,
13
+ ActivityChartXAxis,
14
+ ActivityChartYAxis,
16
15
  } from "../../components/charts/ActivityChart";
16
+ import { ChartContainer, ChartTooltip } from "../../components/ui/chart";
17
17
 
18
18
  import { Card } from "../../components/layout/Card";
19
19
  import { formatActivityChartAverage } from "../../format";
20
20
 
21
- const EXECUTION_COLOR = "var(--color-amber-400)";
21
+ const chartConfig = {
22
+ total: { color: "var(--color-amber-400)", label: "Executions" },
23
+ };
22
24
 
23
25
  /** Render completed automation executions over a trailing window. */
24
26
  export function AutomationExecutionChart(props: {
@@ -29,12 +31,11 @@ export function AutomationExecutionChart(props: {
29
31
  }) {
30
32
  const bucketUnit = props.bucketUnit ?? "day";
31
33
 
32
- const days = props.days;
33
- const layout = createActivityChartLayout(200);
34
- const step =
35
- days.length > 0 ? layout.plotWidth / days.length : layout.plotWidth;
36
- const barWidth = Math.max(2, Math.min(13, step * 0.68));
37
- const totals = days.map((day) => day.scheduled + day.event);
34
+ const days = props.days.map((day) => ({
35
+ date: day.date,
36
+ total: day.scheduled + day.event,
37
+ }));
38
+ const totals = days.map((day) => day.total);
38
39
  const maximum = Math.max(1, ...totals);
39
40
  const average = activityChartAverage(totals);
40
41
  const hasExecutions = totals.some((total) => total > 0);
@@ -51,58 +52,44 @@ export function AutomationExecutionChart(props: {
51
52
  </div>
52
53
 
53
54
  <div className="relative mt-5 overflow-hidden">
54
- <ChartSvg
55
- aria-label={`Automation executions during the last ${props.range === 1 ? "24 hours" : `${props.range} days`}`}
56
- className="min-h-40"
57
- layout={layout}
55
+ <ChartContainer
56
+ className="aspect-auto h-50 w-full"
57
+ config={chartConfig}
58
58
  >
59
- <ActivityChartGrid layout={layout} maximum={maximum} />
60
- {days.map((day, dayIndex) => {
61
- const x = layout.left + dayIndex * step + (step - barWidth) / 2;
62
- const total = totals[dayIndex] ?? 0;
63
- const height = (total / maximum) * layout.plotHeight;
64
- return (
65
- <ActivityChartTooltip
66
- key={day.date}
67
- content={<ActivityTooltipRows rows={[["executions", total]]} />}
68
- date={day.date}
69
- summary={`${total} executions`}
70
- >
71
- <g tabIndex={0}>
72
- <rect
73
- fill={EXECUTION_COLOR}
74
- height={height}
75
- opacity={0.82}
76
- rx="1"
77
- width={barWidth}
78
- x={x}
79
- y={layout.top + layout.plotHeight - height}
80
- />
81
- <rect
82
- fill="transparent"
83
- height={layout.plotHeight}
84
- width={Math.max(barWidth, 8)}
85
- x={x - (Math.max(barWidth, 8) - barWidth) / 2}
86
- y={layout.top}
87
- />
88
- </g>
89
- </ActivityChartTooltip>
90
- );
91
- })}
92
- <ActivityChartAverageLine
93
- unit={timeRangeBucketAverageUnit(bucketUnit)}
94
- average={average}
95
- format={formatActivityChartAverage}
96
- layout={layout}
97
- maximum={maximum}
98
- stroke="var(--color-slate-200)"
99
- />
100
- <ActivityChartDateLabels
101
- dates={days.map((day) => day.date)}
102
- layout={layout}
103
- xPosition={(index) => layout.left + index * step + step / 2}
104
- />
105
- </ChartSvg>
59
+ <BarChart
60
+ aria-label={`Automation executions during the last ${props.range === 1 ? "24 hours" : `${props.range} days`}`}
61
+ data={days}
62
+ margin={activityChartMargin}
63
+ role="img"
64
+ >
65
+ <CartesianGrid strokeDasharray="3 5" vertical={false} />
66
+ <ActivityChartYAxis maximum={maximum} />
67
+ <ActivityChartXAxis keys={days.map((day) => day.date)} />
68
+ <ChartTooltip
69
+ content={
70
+ <ActivityChartTooltipContent
71
+ rows={(day: (typeof days)[number]) => [
72
+ ["executions", day.total],
73
+ ]}
74
+ />
75
+ }
76
+ />
77
+ <Bar
78
+ dataKey="total"
79
+ fill="var(--color-total)"
80
+ fillOpacity={0.82}
81
+ isAnimationActive={false}
82
+ maxBarSize={13}
83
+ radius={1}
84
+ />
85
+ <ActivityChartAverageLine
86
+ unit={timeRangeBucketAverageUnit(bucketUnit)}
87
+ average={average}
88
+ format={formatActivityChartAverage}
89
+ stroke="var(--color-slate-200)"
90
+ />
91
+ </BarChart>
92
+ </ChartContainer>
106
93
  {!hasExecutions ? (
107
94
  <div className="pointer-events-none absolute inset-0 grid place-items-center pt-12 font-sans text-xs text-dashboard-text-muted">
108
95
  No automation executions in this period.
@@ -1,11 +1,10 @@
1
1
  import type { AutomationExecutionStatusDay } from "@sentry/junior/api/schema";
2
+ import { Bar, BarChart, CartesianGrid } from "recharts";
2
3
  import {
3
- ActivityChartDateLabels,
4
- ActivityChartGrid,
5
- ActivityChartTooltip,
6
- ActivityTooltipRows,
7
- ChartSvg,
8
- createActivityChartLayout,
4
+ activityChartMargin,
5
+ ActivityChartTooltipContent,
6
+ ActivityChartXAxis,
7
+ ActivityChartYAxis,
9
8
  } from "../../components/charts/ActivityChart";
10
9
  import { ChartLegend } from "../../components/charts/ChartLegend";
11
10
  import {
@@ -13,6 +12,7 @@ import {
13
12
  type TimeRangeDays,
14
13
  } from "../../components/controls/TimeRangeSelector";
15
14
  import { Card } from "../../components/layout/Card";
15
+ import { ChartContainer, ChartTooltip } from "../../components/ui/chart";
16
16
 
17
17
  const series = [
18
18
  { color: "var(--color-emerald-300)", key: "completed", label: "Completed" },
@@ -20,6 +20,10 @@ const series = [
20
20
  { color: "var(--color-amber-300)", key: "blocked", label: "Blocked" },
21
21
  ] as const;
22
22
 
23
+ const chartConfig = Object.fromEntries(
24
+ series.map((item) => [item.key, { color: item.color, label: item.label }]),
25
+ );
26
+
23
27
  /** Render one automation's terminal executions by status over a trailing window. */
24
28
  export function AutomationExecutionStatusChart(props: {
25
29
  bucketUnit?: TimeRangeBucketUnit;
@@ -30,12 +34,8 @@ export function AutomationExecutionStatusChart(props: {
30
34
  const bucketUnit = props.bucketUnit ?? "day";
31
35
 
32
36
  const days = props.days;
33
- const layout = createActivityChartLayout(220);
34
37
  const totals = days.map((day) => day.completed + day.failed + day.blocked);
35
38
  const maximum = Math.max(1, ...totals);
36
- const step =
37
- days.length > 0 ? layout.plotWidth / days.length : layout.plotWidth;
38
- const barWidth = Math.max(2, Math.min(13, step * 0.68));
39
39
  const hasExecutions = totals.some((total) => total > 0);
40
40
 
41
41
  return (
@@ -59,67 +59,44 @@ export function AutomationExecutionStatusChart(props: {
59
59
  />
60
60
 
61
61
  <div className="relative mt-3 overflow-hidden">
62
- <ChartSvg
63
- aria-label={`Automation executions during the last ${props.range === 1 ? "24 hours" : `${props.range} days`}`}
64
- className="min-h-40"
65
- layout={layout}
62
+ <ChartContainer
63
+ className="aspect-auto h-55 w-full"
64
+ config={chartConfig}
66
65
  >
67
- <ActivityChartGrid layout={layout} maximum={maximum} />
68
- {days.map((day, dayIndex) => {
69
- let stackedHeight = 0;
70
- const x = layout.left + dayIndex * step + (step - barWidth) / 2;
71
- const total = totals[dayIndex] ?? 0;
72
- return (
73
- <ActivityChartTooltip
74
- key={day.date}
75
- content={
76
- <ActivityTooltipRows
77
- rows={[
78
- ["completed", day.completed],
79
- ["failed", day.failed],
80
- ["blocked", day.blocked],
81
- ["total", total],
82
- ]}
83
- />
84
- }
85
- date={day.date}
86
- summary={`${day.completed} completed, ${day.failed} failed, ${day.blocked} blocked, ${total} total`}
87
- >
88
- <g tabIndex={0}>
89
- {series.map((item) => {
90
- const value = day[item.key];
91
- const segmentHeight = (value / maximum) * layout.plotHeight;
92
- stackedHeight += segmentHeight;
93
- return (
94
- <rect
95
- fill={item.color}
96
- height={segmentHeight}
97
- key={item.key}
98
- opacity={0.82}
99
- rx="1"
100
- width={barWidth}
101
- x={x}
102
- y={layout.top + layout.plotHeight - stackedHeight}
103
- />
104
- );
105
- })}
106
- <rect
107
- fill="transparent"
108
- height={layout.plotHeight}
109
- width={Math.max(barWidth, 8)}
110
- x={x - (Math.max(barWidth, 8) - barWidth) / 2}
111
- y={layout.top}
112
- />
113
- </g>
114
- </ActivityChartTooltip>
115
- );
116
- })}
117
- <ActivityChartDateLabels
118
- dates={days.map((day) => day.date)}
119
- layout={layout}
120
- xPosition={(index) => layout.left + index * step + step / 2}
121
- />
122
- </ChartSvg>
66
+ <BarChart
67
+ aria-label={`Automation executions during the last ${props.range === 1 ? "24 hours" : `${props.range} days`}`}
68
+ data={days}
69
+ margin={activityChartMargin}
70
+ role="img"
71
+ >
72
+ <CartesianGrid strokeDasharray="3 5" vertical={false} />
73
+ <ActivityChartYAxis maximum={maximum} />
74
+ <ActivityChartXAxis keys={days.map((day) => day.date)} />
75
+ <ChartTooltip
76
+ content={
77
+ <ActivityChartTooltipContent
78
+ rows={(day: AutomationExecutionStatusDay) => [
79
+ ["completed", day.completed],
80
+ ["failed", day.failed],
81
+ ["blocked", day.blocked],
82
+ ["total", day.completed + day.failed + day.blocked],
83
+ ]}
84
+ />
85
+ }
86
+ />
87
+ {series.map((item) => (
88
+ <Bar
89
+ dataKey={item.key}
90
+ fill={`var(--color-${item.key})`}
91
+ fillOpacity={0.82}
92
+ isAnimationActive={false}
93
+ key={item.key}
94
+ maxBarSize={13}
95
+ stackId="status"
96
+ />
97
+ ))}
98
+ </BarChart>
99
+ </ChartContainer>
123
100
  {!hasExecutions ? (
124
101
  <div className="pointer-events-none absolute inset-0 grid place-items-center pt-12 font-sans text-xs text-dashboard-text-muted">
125
102
  No automation executions in this period.