@sentry/junior-dashboard 0.264.0 → 0.265.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 (191) 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/BottomSheet.tsx +12 -2
  14. package/src/client/components/CopyButton.tsx +83 -0
  15. package/src/client/components/DetailsPanel.tsx +133 -0
  16. package/src/client/components/Drawer.tsx +15 -24
  17. package/src/client/components/FilterBar.tsx +16 -31
  18. package/src/client/components/Metric.tsx +33 -23
  19. package/src/client/components/PageContentSkeleton.tsx +1 -1
  20. package/src/client/components/Pagination.tsx +1 -1
  21. package/src/client/components/ParticipantAvatarStack.tsx +40 -36
  22. package/src/client/components/ProfileMenu.tsx +27 -93
  23. package/src/client/components/README.md +86 -77
  24. package/src/client/components/SegmentedNav.tsx +1 -1
  25. package/src/client/components/ShimmerText.tsx +2 -6
  26. package/src/client/components/ThemeSwitcher.tsx +19 -15
  27. package/src/client/components/charts/ActivityChart.tsx +173 -288
  28. package/src/client/components/charts/CacheWrites.tsx +63 -50
  29. package/src/client/components/charts/InputCacheChart.tsx +137 -131
  30. package/src/client/components/charts/README.md +4 -4
  31. package/src/client/components/charts/SystemMetricCharts.tsx +68 -95
  32. package/src/client/components/charts/WorkspaceUsageChart.tsx +42 -62
  33. package/src/client/components/controls/DirectorySortSelect.tsx +3 -3
  34. package/src/client/components/controls/TimeRangeSelector.tsx +10 -15
  35. package/src/client/components/layout/DashboardHeader.tsx +44 -90
  36. package/src/client/components/layout/SecondaryNavigation.tsx +2 -1
  37. package/src/client/components/layout/VisualViewportShell.tsx +2 -2
  38. package/src/client/components/ui/accordion.tsx +77 -0
  39. package/src/client/components/ui/alert-dialog.tsx +89 -0
  40. package/src/client/components/ui/button.tsx +85 -0
  41. package/src/client/components/ui/chart.tsx +74 -0
  42. package/src/client/components/ui/checkbox.tsx +26 -0
  43. package/src/client/components/ui/collapsible.tsx +22 -0
  44. package/src/client/components/ui/field.tsx +49 -0
  45. package/src/client/components/ui/input.tsx +35 -0
  46. package/src/client/components/ui/native-select.tsx +57 -0
  47. package/src/client/components/ui/popover.tsx +67 -0
  48. package/src/client/components/ui/radio-group.tsx +32 -0
  49. package/src/client/components/ui/sheet.tsx +13 -3
  50. package/src/client/components/ui/skeleton.tsx +19 -0
  51. package/src/client/components/ui/table.tsx +80 -0
  52. package/src/client/components/ui/tabs.tsx +75 -0
  53. package/src/client/components/ui/textarea.tsx +17 -0
  54. package/src/client/components/ui/toast.tsx +215 -0
  55. package/src/client/components/ui/toggle-group.tsx +36 -0
  56. package/src/client/components/ui/toggle.tsx +37 -0
  57. package/src/client/components/ui/tooltip.tsx +168 -0
  58. package/src/client/components/ui/trace.tsx +96 -0
  59. package/src/client/conversations/ChatLayout.tsx +7 -3
  60. package/src/client/conversations/ConversationBrief.tsx +17 -6
  61. package/src/client/conversations/ConversationComposer.tsx +26 -12
  62. package/src/client/conversations/ConversationDetails.tsx +147 -62
  63. package/src/client/conversations/ConversationEventDetails.tsx +141 -0
  64. package/src/client/conversations/ConversationEventLog.tsx +150 -129
  65. package/src/client/conversations/ConversationHeader.tsx +8 -3
  66. package/src/client/conversations/ConversationHeaderActions.tsx +90 -82
  67. package/src/client/conversations/ConversationHomeList.tsx +1 -1
  68. package/src/client/conversations/ConversationLinkedWork.tsx +118 -0
  69. package/src/client/conversations/ConversationMeta.tsx +55 -88
  70. package/src/client/conversations/ConversationPage.tsx +220 -101
  71. package/src/client/conversations/ConversationSidebar.tsx +48 -29
  72. package/src/client/conversations/ConversationWatches.tsx +165 -0
  73. package/src/client/conversations/ConversationWorkspace.tsx +12 -22
  74. package/src/client/conversations/ConversationWorkspaceLoading.tsx +1 -1
  75. package/src/client/conversations/DetailsList.tsx +124 -0
  76. package/src/client/conversations/EventDetails.tsx +42 -8
  77. package/src/client/conversations/ForkConversationButton.tsx +27 -16
  78. package/src/client/conversations/ObjectCard.tsx +20 -8
  79. package/src/client/conversations/PendingMailboxStack.tsx +52 -33
  80. package/src/client/conversations/README.md +86 -13
  81. package/src/client/conversations/ShareConversationButton.tsx +25 -13
  82. package/src/client/conversations/SubagentTranscriptDrawer.tsx +21 -15
  83. package/src/client/conversations/ToolFrame.tsx +36 -52
  84. package/src/client/conversations/TranscriptActivityGroup.tsx +13 -4
  85. package/src/client/conversations/TranscriptAutomationTriggerView.tsx +5 -4
  86. package/src/client/conversations/TranscriptContextEventView.tsx +25 -11
  87. package/src/client/conversations/TranscriptHeadingRow.tsx +7 -7
  88. package/src/client/conversations/TranscriptLoading.tsx +1 -1
  89. package/src/client/conversations/TranscriptMarkdown.tsx +25 -20
  90. package/src/client/conversations/TranscriptMessageContextView.tsx +8 -2
  91. package/src/client/conversations/TranscriptMessageView.tsx +6 -1
  92. package/src/client/conversations/TranscriptReasoningView.tsx +54 -68
  93. package/src/client/conversations/TranscriptTimestamp.tsx +9 -7
  94. package/src/client/conversations/TranscriptToolView.tsx +1 -1
  95. package/src/client/conversations/TranscriptTurnContextView.tsx +99 -27
  96. package/src/client/conversations/TranscriptView.tsx +63 -27
  97. package/src/client/conversations/eventLog.ts +57 -0
  98. package/src/client/conversations/eventTime.ts +60 -0
  99. package/src/client/conversations/queries.ts +29 -0
  100. package/src/client/conversations/transcriptBottomPinning.ts +34 -0
  101. package/src/client/format.ts +5 -0
  102. package/src/client/pages/ConnectionsPage.tsx +2 -2
  103. package/src/client/pages/PersonalTokensPage.tsx +4 -4
  104. package/src/client/pages/SettingsPage.tsx +9 -10
  105. package/src/client/pages/admin/ServiceAccountsSection.tsx +2 -2
  106. package/src/client/pages/automations/AutomationCostChart.tsx +50 -71
  107. package/src/client/pages/automations/AutomationDeleteDialog.tsx +87 -0
  108. package/src/client/pages/automations/AutomationDetails.tsx +193 -0
  109. package/src/client/pages/automations/AutomationEditPage.tsx +7 -8
  110. package/src/client/pages/automations/AutomationEditor.tsx +41 -29
  111. package/src/client/pages/automations/AutomationEditorLoading.tsx +1 -1
  112. package/src/client/pages/automations/AutomationEventFields.tsx +202 -119
  113. package/src/client/pages/automations/AutomationExecutionChart.tsx +51 -64
  114. package/src/client/pages/automations/AutomationExecutionStatusChart.tsx +47 -70
  115. package/src/client/pages/automations/AutomationExecutionsPage.tsx +150 -126
  116. package/src/client/pages/automations/AutomationFilters.tsx +189 -74
  117. package/src/client/pages/automations/AutomationLifecycle.tsx +109 -78
  118. package/src/client/pages/automations/AutomationOutcomeFields.tsx +26 -24
  119. package/src/client/pages/automations/AutomationRecentRuns.tsx +143 -0
  120. package/src/client/pages/automations/AutomationRow.tsx +12 -138
  121. package/src/client/pages/automations/AutomationRunDetails.tsx +307 -0
  122. package/src/client/pages/automations/AutomationRunsPage.tsx +119 -94
  123. package/src/client/pages/automations/AutomationScheduleFields.tsx +51 -51
  124. package/src/client/pages/automations/AutomationStatus.tsx +201 -0
  125. package/src/client/pages/automations/AutomationVersionsPage.tsx +65 -28
  126. package/src/client/pages/automations/AutomationsPage.tsx +80 -68
  127. package/src/client/pages/automations/AutomationsPageLayout.tsx +46 -14
  128. package/src/client/pages/automations/README.md +57 -0
  129. package/src/client/pages/automations/TriggerFilters.tsx +22 -0
  130. package/src/client/pages/automations/automationFormat.ts +37 -23
  131. package/src/client/pages/code/CodeActivityChart.tsx +59 -101
  132. package/src/client/pages/code/CodePage.tsx +52 -55
  133. package/src/client/pages/code/RepositoryPage.tsx +6 -8
  134. package/src/client/pages/locations/LocationActivityChart.tsx +53 -70
  135. package/src/client/pages/locations/LocationDirectoryActivityChart.tsx +60 -80
  136. package/src/client/pages/memory/MemoryCostChart.tsx +79 -103
  137. package/src/client/pages/memory/MemoryDetails.tsx +218 -0
  138. package/src/client/pages/memory/MemoryPage.tsx +168 -112
  139. package/src/client/pages/memory/MemoryPageLayout.tsx +33 -9
  140. package/src/client/pages/memory/MemoryTimeline.tsx +46 -69
  141. package/src/client/pages/memory/memoryRecord.ts +1 -1
  142. package/src/client/pages/people/ContributionGrid.tsx +23 -16
  143. package/src/client/pages/people/PeopleActivityChart.tsx +68 -107
  144. package/src/client/pages/people/ProfileCodeChanges.tsx +5 -5
  145. package/src/client/pages/system/BaseSandboxCard.tsx +1 -1
  146. package/src/client/pages/system/ConversationActivityChart.tsx +49 -67
  147. package/src/client/pages/system/GuardianActivity.tsx +1 -2
  148. package/src/client/pages/system/PluginBarChart.tsx +106 -87
  149. package/src/client/pages/system/PluginReportRecordSet.tsx +25 -24
  150. package/src/client/pages/system/README.md +23 -0
  151. package/src/client/pages/system/SystemNavigation.tsx +5 -1
  152. package/src/client/pages/system/WorkspaceDeleteDialog.tsx +111 -0
  153. package/src/client/pages/system/WorkspaceDetails.tsx +200 -43
  154. package/src/client/pages/system/WorkspaceEditor.tsx +59 -61
  155. package/src/client/pages/system/WorkspaceFormPage.tsx +23 -47
  156. package/src/client/pages/system/WorkspaceList.tsx +20 -30
  157. package/src/client/pages/system/WorkspacesPage.tsx +117 -119
  158. package/src/client/pages/system/sandboxSize.ts +8 -0
  159. package/src/client/pages/system/workspaceQueries.ts +53 -0
  160. package/src/client/pages/user/PluginUserPage.tsx +51 -2
  161. package/src/client/pages/user/pluginUserPageData.ts +1 -6
  162. package/src/client/styles.ts +4 -0
  163. package/src/client.tsx +7 -1
  164. package/src/mock-reporting/automation-collection.ts +4 -2
  165. package/src/mock-reporting/fixtures.ts +23 -7
  166. package/src/mock-reporting/routes.ts +12 -0
  167. package/src/mock-reporting/watches.ts +94 -0
  168. package/src/shell.ts +4 -9
  169. package/src/tailwind.css +0 -10
  170. package/src/client/components/Button.tsx +0 -118
  171. package/src/client/components/Field.tsx +0 -53
  172. package/src/client/components/SegmentedTabs.tsx +0 -119
  173. package/src/client/components/Select.tsx +0 -52
  174. package/src/client/components/Skeleton.tsx +0 -17
  175. package/src/client/components/TextInput.tsx +0 -58
  176. package/src/client/components/Tooltip.tsx +0 -216
  177. package/src/client/components/charts/useChartLayout.ts +0 -27
  178. package/src/client/components/ui/sheet.LICENSE +0 -21
  179. package/src/client/conversations/ConversationDetailsFrame.tsx +0 -119
  180. package/src/client/conversations/CopyMarkdownButton.tsx +0 -65
  181. package/src/client/pages/automations/AutomationDetailsDrawer.tsx +0 -219
  182. package/src/client/pages/dev/ChartFixtures.tsx +0 -325
  183. package/src/client/pages/dev/ComponentsPage.tsx +0 -899
  184. package/src/client/pages/dev/ConversationFixture.tsx +0 -231
  185. package/src/client/pages/dev/ObjectFixtures.tsx +0 -138
  186. package/src/client/pages/dev/SegmentedFixtures.tsx +0 -59
  187. package/src/client/pages/dev/SelectFixtures.tsx +0 -62
  188. package/src/client/pages/dev/TranscriptActivityFixtures.tsx +0 -206
  189. package/src/client/pages/memory/MemoryDetailsDrawer.tsx +0 -167
  190. package/src/client/pages/system/SandboxSizeSummary.tsx +0 -47
  191. 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.