@dudousxd/nestjs-telescope-ui 2.0.0 → 3.0.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 (266) hide show
  1. package/CHANGELOG.md +771 -0
  2. package/README.md +35 -0
  3. package/dist/client/console-url.d.ts +11 -0
  4. package/dist/client/console-url.d.ts.map +1 -0
  5. package/dist/client/console-url.js +21 -0
  6. package/dist/client/console-url.js.map +1 -0
  7. package/dist/client/index.d.ts +3 -2
  8. package/dist/client/index.d.ts.map +1 -1
  9. package/dist/client/index.js +4 -1
  10. package/dist/client/index.js.map +1 -1
  11. package/dist/client/telescope-client.d.ts +82 -11
  12. package/dist/client/telescope-client.d.ts.map +1 -1
  13. package/dist/client/telescope-client.js +101 -54
  14. package/dist/client/telescope-client.js.map +1 -1
  15. package/dist/client/types.d.ts +431 -30
  16. package/dist/client/types.d.ts.map +1 -1
  17. package/dist/react/components/batch-timeline.js +2 -2
  18. package/dist/react/components/batch-timeline.js.map +1 -1
  19. package/dist/react/components/cache-badge.d.ts +14 -6
  20. package/dist/react/components/cache-badge.d.ts.map +1 -1
  21. package/dist/react/components/cache-badge.js +26 -12
  22. package/dist/react/components/cache-badge.js.map +1 -1
  23. package/dist/react/components/charts/area-chart-card.d.ts +11 -3
  24. package/dist/react/components/charts/area-chart-card.d.ts.map +1 -1
  25. package/dist/react/components/charts/area-chart-card.js +33 -6
  26. package/dist/react/components/charts/area-chart-card.js.map +1 -1
  27. package/dist/react/components/charts/bar-chart-card.d.ts +18 -7
  28. package/dist/react/components/charts/bar-chart-card.d.ts.map +1 -1
  29. package/dist/react/components/charts/bar-chart-card.js +18 -9
  30. package/dist/react/components/charts/bar-chart-card.js.map +1 -1
  31. package/dist/react/components/charts/breakdown-card.d.ts +17 -0
  32. package/dist/react/components/charts/breakdown-card.d.ts.map +1 -0
  33. package/dist/react/components/charts/breakdown-card.js +43 -0
  34. package/dist/react/components/charts/breakdown-card.js.map +1 -0
  35. package/dist/react/components/charts/chart-card.d.ts +7 -0
  36. package/dist/react/components/charts/chart-card.d.ts.map +1 -1
  37. package/dist/react/components/charts/chart-card.js +10 -3
  38. package/dist/react/components/charts/chart-card.js.map +1 -1
  39. package/dist/react/components/charts/chart-selection.d.ts +44 -0
  40. package/dist/react/components/charts/chart-selection.d.ts.map +1 -0
  41. package/dist/react/components/charts/chart-selection.js +36 -0
  42. package/dist/react/components/charts/chart-selection.js.map +1 -0
  43. package/dist/react/components/charts/chart-theme.d.ts +62 -19
  44. package/dist/react/components/charts/chart-theme.d.ts.map +1 -1
  45. package/dist/react/components/charts/chart-theme.js +72 -13
  46. package/dist/react/components/charts/chart-theme.js.map +1 -1
  47. package/dist/react/components/charts/distribution-chart-card.d.ts +17 -0
  48. package/dist/react/components/charts/distribution-chart-card.d.ts.map +1 -0
  49. package/dist/react/components/charts/distribution-chart-card.js +46 -0
  50. package/dist/react/components/charts/distribution-chart-card.js.map +1 -0
  51. package/dist/react/components/charts/gauge-card.d.ts +12 -0
  52. package/dist/react/components/charts/gauge-card.d.ts.map +1 -0
  53. package/dist/react/components/charts/gauge-card.js +17 -0
  54. package/dist/react/components/charts/gauge-card.js.map +1 -0
  55. package/dist/react/components/charts/index.d.ts +1 -0
  56. package/dist/react/components/charts/index.d.ts.map +1 -1
  57. package/dist/react/components/charts/index.js +1 -0
  58. package/dist/react/components/charts/index.js.map +1 -1
  59. package/dist/react/components/charts/stacked-area-chart-card.d.ts +17 -3
  60. package/dist/react/components/charts/stacked-area-chart-card.d.ts.map +1 -1
  61. package/dist/react/components/charts/stacked-area-chart-card.js +31 -8
  62. package/dist/react/components/charts/stacked-area-chart-card.js.map +1 -1
  63. package/dist/react/components/entries-table.d.ts.map +1 -1
  64. package/dist/react/components/entries-table.js +17 -3
  65. package/dist/react/components/entries-table.js.map +1 -1
  66. package/dist/react/components/entry-detail.d.ts +2 -0
  67. package/dist/react/components/entry-detail.d.ts.map +1 -1
  68. package/dist/react/components/entry-detail.js +186 -20
  69. package/dist/react/components/entry-detail.js.map +1 -1
  70. package/dist/react/components/entry-insights.d.ts.map +1 -1
  71. package/dist/react/components/entry-insights.js +28 -17
  72. package/dist/react/components/entry-insights.js.map +1 -1
  73. package/dist/react/components/entry-types.d.ts +29 -0
  74. package/dist/react/components/entry-types.d.ts.map +1 -1
  75. package/dist/react/components/entry-types.js +60 -0
  76. package/dist/react/components/entry-types.js.map +1 -1
  77. package/dist/react/components/export-json-toolbar.js +2 -2
  78. package/dist/react/components/export-json-toolbar.js.map +1 -1
  79. package/dist/react/components/extensions/panel-column-menu.d.ts +19 -0
  80. package/dist/react/components/extensions/panel-column-menu.d.ts.map +1 -0
  81. package/dist/react/components/extensions/panel-column-menu.js +47 -0
  82. package/dist/react/components/extensions/panel-column-menu.js.map +1 -0
  83. package/dist/react/components/extensions/panel-renderer.d.ts +46 -0
  84. package/dist/react/components/extensions/panel-renderer.d.ts.map +1 -0
  85. package/dist/react/components/extensions/panel-renderer.js +122 -0
  86. package/dist/react/components/extensions/panel-renderer.js.map +1 -0
  87. package/dist/react/components/extensions/panel-table-header.d.ts +18 -0
  88. package/dist/react/components/extensions/panel-table-header.d.ts.map +1 -0
  89. package/dist/react/components/extensions/panel-table-header.js +82 -0
  90. package/dist/react/components/extensions/panel-table-header.js.map +1 -0
  91. package/dist/react/components/extensions/panel-table.d.ts +27 -0
  92. package/dist/react/components/extensions/panel-table.d.ts.map +1 -0
  93. package/dist/react/components/extensions/panel-table.js +87 -0
  94. package/dist/react/components/extensions/panel-table.js.map +1 -0
  95. package/dist/react/components/extensions/stat-card.d.ts +18 -0
  96. package/dist/react/components/extensions/stat-card.d.ts.map +1 -0
  97. package/dist/react/components/extensions/stat-card.js +44 -0
  98. package/dist/react/components/extensions/stat-card.js.map +1 -0
  99. package/dist/react/components/extensions/table-columns.d.ts +32 -0
  100. package/dist/react/components/extensions/table-columns.d.ts.map +1 -0
  101. package/dist/react/components/extensions/table-columns.js +51 -0
  102. package/dist/react/components/extensions/table-columns.js.map +1 -0
  103. package/dist/react/components/extensions/table-features.d.ts +47 -0
  104. package/dist/react/components/extensions/table-features.d.ts.map +1 -0
  105. package/dist/react/components/extensions/table-features.js +45 -0
  106. package/dist/react/components/extensions/table-features.js.map +1 -0
  107. package/dist/react/components/extensions/table-query.d.ts +53 -0
  108. package/dist/react/components/extensions/table-query.d.ts.map +1 -0
  109. package/dist/react/components/extensions/table-query.js +51 -0
  110. package/dist/react/components/extensions/table-query.js.map +1 -0
  111. package/dist/react/components/flamegraph-view.d.ts +18 -0
  112. package/dist/react/components/flamegraph-view.d.ts.map +1 -0
  113. package/dist/react/components/flamegraph-view.js +48 -0
  114. package/dist/react/components/flamegraph-view.js.map +1 -0
  115. package/dist/react/components/flamegraph.d.ts +34 -0
  116. package/dist/react/components/flamegraph.d.ts.map +1 -0
  117. package/dist/react/components/flamegraph.js +54 -0
  118. package/dist/react/components/flamegraph.js.map +1 -0
  119. package/dist/react/components/inertia-badge.d.ts +33 -0
  120. package/dist/react/components/inertia-badge.d.ts.map +1 -0
  121. package/dist/react/components/inertia-badge.js +72 -0
  122. package/dist/react/components/inertia-badge.js.map +1 -0
  123. package/dist/react/components/inertia-body.d.ts +11 -0
  124. package/dist/react/components/inertia-body.d.ts.map +1 -0
  125. package/dist/react/components/inertia-body.js +127 -0
  126. package/dist/react/components/inertia-body.js.map +1 -0
  127. package/dist/react/components/official-event.d.ts +16 -0
  128. package/dist/react/components/official-event.d.ts.map +1 -0
  129. package/dist/react/components/official-event.js +88 -0
  130. package/dist/react/components/official-event.js.map +1 -0
  131. package/dist/react/components/pulse-panel.d.ts.map +1 -1
  132. package/dist/react/components/pulse-panel.js +6 -6
  133. package/dist/react/components/pulse-panel.js.map +1 -1
  134. package/dist/react/components/queues/EnqueueJobForm.d.ts.map +1 -1
  135. package/dist/react/components/queues/EnqueueJobForm.js +2 -1
  136. package/dist/react/components/queues/EnqueueJobForm.js.map +1 -1
  137. package/dist/react/components/queues/JobActions.d.ts.map +1 -1
  138. package/dist/react/components/queues/JobActions.js +11 -9
  139. package/dist/react/components/queues/JobActions.js.map +1 -1
  140. package/dist/react/components/queues/JobDetailDrawer.d.ts.map +1 -1
  141. package/dist/react/components/queues/JobDetailDrawer.js +8 -13
  142. package/dist/react/components/queues/JobDetailDrawer.js.map +1 -1
  143. package/dist/react/components/queues/JobTable.d.ts.map +1 -1
  144. package/dist/react/components/queues/JobTable.js +0 -0
  145. package/dist/react/components/queues/JobTable.js.map +1 -1
  146. package/dist/react/components/queues/QueueList.d.ts.map +1 -1
  147. package/dist/react/components/queues/QueueList.js +6 -6
  148. package/dist/react/components/queues/QueueList.js.map +1 -1
  149. package/dist/react/components/queues/QueueStateTabs.d.ts.map +1 -1
  150. package/dist/react/components/queues/QueueStateTabs.js +9 -7
  151. package/dist/react/components/queues/QueueStateTabs.js.map +1 -1
  152. package/dist/react/components/queues/queue-format.d.ts +5 -1
  153. package/dist/react/components/queues/queue-format.d.ts.map +1 -1
  154. package/dist/react/components/queues/queue-format.js +11 -7
  155. package/dist/react/components/queues/queue-format.js.map +1 -1
  156. package/dist/react/components/queues-panel.js +1 -1
  157. package/dist/react/components/queues-panel.js.map +1 -1
  158. package/dist/react/components/request-timeline.d.ts.map +1 -1
  159. package/dist/react/components/request-timeline.js +2 -2
  160. package/dist/react/components/request-timeline.js.map +1 -1
  161. package/dist/react/components/retention-indicator.d.ts.map +1 -1
  162. package/dist/react/components/retention-indicator.js +1 -1
  163. package/dist/react/components/retention-indicator.js.map +1 -1
  164. package/dist/react/components/sparkline.d.ts.map +1 -1
  165. package/dist/react/components/sparkline.js +1 -1
  166. package/dist/react/components/sparkline.js.map +1 -1
  167. package/dist/react/components/tag-autocomplete.d.ts +21 -4
  168. package/dist/react/components/tag-autocomplete.d.ts.map +1 -1
  169. package/dist/react/components/tag-autocomplete.js +57 -29
  170. package/dist/react/components/tag-autocomplete.js.map +1 -1
  171. package/dist/react/components/to-csv.d.ts +25 -0
  172. package/dist/react/components/to-csv.d.ts.map +1 -0
  173. package/dist/react/components/to-csv.js +78 -0
  174. package/dist/react/components/to-csv.js.map +1 -0
  175. package/dist/react/components/user-tag.d.ts +15 -0
  176. package/dist/react/components/user-tag.d.ts.map +1 -1
  177. package/dist/react/components/user-tag.js +19 -0
  178. package/dist/react/components/user-tag.js.map +1 -1
  179. package/dist/react/components/waterfall-view.d.ts +13 -0
  180. package/dist/react/components/waterfall-view.d.ts.map +1 -0
  181. package/dist/react/components/waterfall-view.js +58 -0
  182. package/dist/react/components/waterfall-view.js.map +1 -0
  183. package/dist/react/components/window-select.d.ts.map +1 -1
  184. package/dist/react/components/window-select.js +6 -2
  185. package/dist/react/components/window-select.js.map +1 -1
  186. package/dist/react/index.d.ts +7 -1
  187. package/dist/react/index.d.ts.map +1 -1
  188. package/dist/react/index.js +11 -1
  189. package/dist/react/index.js.map +1 -1
  190. package/dist/react/ui/badge.d.ts +16 -0
  191. package/dist/react/ui/badge.d.ts.map +1 -0
  192. package/dist/react/ui/badge.js +28 -0
  193. package/dist/react/ui/badge.js.map +1 -0
  194. package/dist/react/ui/button.d.ts +17 -0
  195. package/dist/react/ui/button.d.ts.map +1 -0
  196. package/dist/react/ui/button.js +35 -0
  197. package/dist/react/ui/button.js.map +1 -0
  198. package/dist/react/ui/chart.d.ts +116 -0
  199. package/dist/react/ui/chart.d.ts.map +1 -0
  200. package/dist/react/ui/chart.js +191 -0
  201. package/dist/react/ui/chart.js.map +1 -0
  202. package/dist/react/ui/cn.d.ts +8 -0
  203. package/dist/react/ui/cn.d.ts.map +1 -0
  204. package/dist/react/ui/cn.js +11 -0
  205. package/dist/react/ui/cn.js.map +1 -0
  206. package/dist/react/ui/dialog.d.ts +26 -0
  207. package/dist/react/ui/dialog.d.ts.map +1 -0
  208. package/dist/react/ui/dialog.js +40 -0
  209. package/dist/react/ui/dialog.js.map +1 -0
  210. package/dist/react/ui/index.d.ts +24 -0
  211. package/dist/react/ui/index.d.ts.map +1 -0
  212. package/dist/react/ui/index.js +24 -0
  213. package/dist/react/ui/index.js.map +1 -0
  214. package/dist/react/ui/input.d.ts +3 -0
  215. package/dist/react/ui/input.d.ts.map +1 -0
  216. package/dist/react/ui/input.js +8 -0
  217. package/dist/react/ui/input.js.map +1 -0
  218. package/dist/react/ui/select.d.ts +20 -0
  219. package/dist/react/ui/select.d.ts.map +1 -0
  220. package/dist/react/ui/select.js +27 -0
  221. package/dist/react/ui/select.js.map +1 -0
  222. package/dist/react/ui/table.d.ts +27 -0
  223. package/dist/react/ui/table.d.ts.map +1 -0
  224. package/dist/react/ui/table.js +22 -0
  225. package/dist/react/ui/table.js.map +1 -0
  226. package/dist/react/ui/tabs.d.ts +12 -0
  227. package/dist/react/ui/tabs.d.ts.map +1 -0
  228. package/dist/react/ui/tabs.js +20 -0
  229. package/dist/react/ui/tabs.js.map +1 -0
  230. package/dist/react/ui/tooltip.d.ts +10 -0
  231. package/dist/react/ui/tooltip.d.ts.map +1 -0
  232. package/dist/react/ui/tooltip.js +12 -0
  233. package/dist/react/ui/tooltip.js.map +1 -0
  234. package/dist/react/use-telescope-queries.d.ts +129 -130
  235. package/dist/react/use-telescope-queries.d.ts.map +1 -1
  236. package/dist/react/use-telescope-queries.js +146 -1
  237. package/dist/react/use-telescope-queries.js.map +1 -1
  238. package/dist/react/use-telescope-stream.d.ts +10 -0
  239. package/dist/react/use-telescope-stream.d.ts.map +1 -0
  240. package/dist/react/use-telescope-stream.js +40 -0
  241. package/dist/react/use-telescope-stream.js.map +1 -0
  242. package/dist/server/index.d.ts +3 -1
  243. package/dist/server/index.d.ts.map +1 -1
  244. package/dist/server/index.js +5 -0
  245. package/dist/server/index.js.map +1 -1
  246. package/dist/server/telescope-ui.controller.d.ts.map +1 -1
  247. package/dist/server/telescope-ui.controller.js +3 -1
  248. package/dist/server/telescope-ui.controller.js.map +1 -1
  249. package/dist/server/telescope-ui.module.d.ts +28 -1
  250. package/dist/server/telescope-ui.module.d.ts.map +1 -1
  251. package/dist/server/telescope-ui.module.js +48 -4
  252. package/dist/server/telescope-ui.module.js.map +1 -1
  253. package/dist/server/telescope-ui.options.d.ts +63 -0
  254. package/dist/server/telescope-ui.options.d.ts.map +1 -1
  255. package/dist/server/telescope-ui.options.js.map +1 -1
  256. package/dist/spa/assets/index-BfyQ_2IN.css +1 -0
  257. package/dist/spa/assets/index-EBJiTdQF.js +159 -0
  258. package/dist/spa/index.html +2 -2
  259. package/package.json +75 -36
  260. package/skills/telescope-ui-dashboard/SKILL.md +203 -0
  261. package/dist/react/components/type-tabs.d.ts +0 -5
  262. package/dist/react/components/type-tabs.d.ts.map +0 -1
  263. package/dist/react/components/type-tabs.js +0 -8
  264. package/dist/react/components/type-tabs.js.map +0 -1
  265. package/dist/spa/assets/index-CCzTpxj3.css +0 -1
  266. package/dist/spa/assets/index-w0XTI5OM.js +0 -135
@@ -1,41 +1,84 @@
1
+ import type { ChartConfig } from '../../ui/chart.js';
1
2
  /**
2
- * Shared dark theme tokens for the Recharts chart cards. Centralizing these keeps
3
- * the chart layer consistent with the dashboard's zinc/emerald palette and makes
4
- * the rest of the app chart-library-agnostic (only this folder imports Recharts).
3
+ * Series colours for the chart cards. This file is the ONE place a chart decides
4
+ * what colour a series is; the chrome around it (grid, axes, tick text, brush,
5
+ * tooltip, legend) belongs to the vendored `ChartContainer` in `../../ui/chart.tsx`.
6
+ *
7
+ * That split is the point. Colours here are DATA — one hue per entry type, chosen
8
+ * to be mutually distinguishable — and deliberately do not go through the Aviary
9
+ * status tokens: a `request` series is not "healthy", it is just requests (see
10
+ * AVIARY-UI.md, "Categorical data hues are not tokens"). Chrome does follow the
11
+ * tokens, so it themes with the rest of the console.
12
+ *
13
+ * Recharts takes plain colour strings rather than classes, so anything token-based
14
+ * reads as `var(--x)`; SVG resolves the custom property at paint time.
5
15
  */
6
16
  /** Resolved hex colors for known entry types (matches the `fill-*` tokens used elsewhere). */
7
17
  export declare const TYPE_HEX: Record<string, string>;
8
- export declare const ACCENT_HEX = "#34d399";
18
+ /** Primary throughput accent — the console `--accent`, not a status hue. */
19
+ export declare const ACCENT_HEX = "var(--accent)";
9
20
  export declare function hexForType(type: string, fallbackIndex?: number): string;
21
+ /**
22
+ * Colour for one breakdown/pie segment: an author's explicit `color` wins, then
23
+ * the entry-type hue when the segment is named after a known type, then the
24
+ * palette by position.
25
+ *
26
+ * The {@link TYPE_HEX} step is why this is not just an array index: a breakdown
27
+ * of `request`/`query`/`exception` used to draw them green/amber/red purely by
28
+ * position, so the same `exception` was red in one card and amber in the next.
29
+ */
30
+ export declare function hexForSegment(label: string, index: number, override?: string): string;
31
+ /**
32
+ * Build a {@link ChartConfig} for a set of series keys. Every card goes through
33
+ * here so the tooltip, the legend and the marks all read the same colour from the
34
+ * same place — the shadcn chart layer resolves labels and swatches from the
35
+ * config, and a colour passed straight to a `<Bar>` would leave both blank.
36
+ */
37
+ export declare function chartConfig(keys: string[], colorFor: (key: string, index: number) => string, labelFor?: (key: string) => string): ChartConfig;
38
+ /**
39
+ * Chrome colours for the handful of places a Recharts prop is the only way in
40
+ * (a `cursor`, a gradient stop).
41
+ *
42
+ * @deprecated The grid/axis/tooltip/legend entries are now applied by
43
+ * `ChartContainer`'s token classes; a card should not pass them. Kept exported
44
+ * because this is a published module and removing names from it is a breaking
45
+ * change.
46
+ */
10
47
  export declare const chartTheme: {
11
- readonly gridStroke: "#ffffff10";
12
- readonly axisStroke: "#3f3f46";
13
- readonly axisTick: "#71717a";
14
- readonly tooltipBg: "#18181b";
15
- readonly tooltipBorder: "#27272a";
16
- readonly tooltipText: "#e4e4e7";
17
- readonly tooltipLabel: "#a1a1aa";
18
- readonly legendText: "#a1a1aa";
48
+ readonly gridStroke: "color-mix(in srgb, var(--line) 70%, transparent)";
49
+ readonly axisStroke: "var(--line)";
50
+ readonly axisTick: "var(--muted)";
51
+ readonly tooltipBg: "var(--panel-2)";
52
+ readonly tooltipBorder: "var(--line)";
53
+ readonly tooltipText: "var(--text)";
54
+ readonly tooltipLabel: "var(--muted)";
55
+ readonly legendText: "var(--muted)";
19
56
  };
20
- /** Shared `contentStyle` for Recharts `<Tooltip>` so every chart looks identical. */
57
+ /**
58
+ * @deprecated Superseded by `ChartTooltipContent`, which renders a real hover card
59
+ * instead of Recharts' single line of text. Kept for API compatibility.
60
+ */
21
61
  export declare const tooltipContentStyle: {
22
- readonly background: "#18181b";
23
- readonly border: "1px solid #27272a";
62
+ readonly background: "var(--panel-2)";
63
+ readonly border: "1px solid var(--line)";
24
64
  readonly borderRadius: 6;
25
65
  readonly fontSize: 11;
26
- readonly color: "#e4e4e7";
66
+ readonly color: "var(--text)";
27
67
  };
68
+ /** @deprecated See {@link tooltipContentStyle}. */
28
69
  export declare const tooltipLabelStyle: {
29
- readonly color: "#a1a1aa";
70
+ readonly color: "var(--muted)";
30
71
  readonly fontSize: 10;
31
72
  readonly textTransform: "uppercase";
32
73
  readonly letterSpacing: "0.05em";
33
74
  };
75
+ /** @deprecated See {@link tooltipContentStyle}. */
34
76
  export declare const tooltipItemStyle: {
35
- readonly color: "#e4e4e7";
77
+ readonly color: "var(--text)";
36
78
  };
79
+ /** @deprecated Tick text is filled by `ChartContainer`'s token classes. */
37
80
  export declare const axisTickStyle: {
38
- readonly fill: "#71717a";
81
+ readonly fill: "var(--muted)";
39
82
  readonly fontSize: 10;
40
83
  };
41
84
  //# sourceMappingURL=chart-theme.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chart-theme.d.ts","sourceRoot":"","sources":["../../../../src/react/components/charts/chart-theme.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8FAA8F;AAC9F,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAO3C,CAAC;AAKF,eAAO,MAAM,UAAU,YAAY,CAAC;AAEpC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,SAAI,GAAG,MAAM,CAGlE;AAED,eAAO,MAAM,UAAU;;;;;;;;;CASb,CAAC;AAEX,qFAAqF;AACrF,eAAO,MAAM,mBAAmB;;;;;;CAMtB,CAAC;AAEX,eAAO,MAAM,iBAAiB;;;;;CAKpB,CAAC;AAEX,eAAO,MAAM,gBAAgB;;CAEnB,CAAC;AAEX,eAAO,MAAM,aAAa;;;CAGhB,CAAC"}
1
+ {"version":3,"file":"chart-theme.d.ts","sourceRoot":"","sources":["../../../../src/react/components/charts/chart-theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;;;;;;;;;GAaG;AAEH,8FAA8F;AAC9F,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAO3C,CAAC;AAYF,4EAA4E;AAC5E,eAAO,MAAM,UAAU,kBAAkB,CAAC;AAE1C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,SAAI,GAAG,MAAM,CAGlE;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAIrF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EAAE,EACd,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,EAChD,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GACjC,WAAW,CAMb;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU;;;;;;;;;CASb,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;CAMtB,CAAC;AAEX,mDAAmD;AACnD,eAAO,MAAM,iBAAiB;;;;;CAKpB,CAAC;AAEX,mDAAmD;AACnD,eAAO,MAAM,gBAAgB;;CAEnB,CAAC;AAEX,2EAA2E;AAC3E,eAAO,MAAM,aAAa;;;CAGhB,CAAC"}
@@ -1,7 +1,16 @@
1
1
  /**
2
- * Shared dark theme tokens for the Recharts chart cards. Centralizing these keeps
3
- * the chart layer consistent with the dashboard's zinc/emerald palette and makes
4
- * the rest of the app chart-library-agnostic (only this folder imports Recharts).
2
+ * Series colours for the chart cards. This file is the ONE place a chart decides
3
+ * what colour a series is; the chrome around it (grid, axes, tick text, brush,
4
+ * tooltip, legend) belongs to the vendored `ChartContainer` in `../../ui/chart.tsx`.
5
+ *
6
+ * That split is the point. Colours here are DATA — one hue per entry type, chosen
7
+ * to be mutually distinguishable — and deliberately do not go through the Aviary
8
+ * status tokens: a `request` series is not "healthy", it is just requests (see
9
+ * AVIARY-UI.md, "Categorical data hues are not tokens"). Chrome does follow the
10
+ * tokens, so it themes with the rest of the console.
11
+ *
12
+ * Recharts takes plain colour strings rather than classes, so anything token-based
13
+ * reads as `var(--x)`; SVG resolves the custom property at paint time.
5
14
  */
6
15
  /** Resolved hex colors for known entry types (matches the `fill-*` tokens used elsewhere). */
7
16
  export const TYPE_HEX = {
@@ -14,22 +23,69 @@ export const TYPE_HEX = {
14
23
  };
15
24
  /** Ordered palette for series whose type is not in {@link TYPE_HEX}. */
16
25
  const FALLBACK_PALETTE = ['#71717a', '#a1a1aa', '#22d3ee', '#c084fc', '#fb923c', '#4ade80'];
17
- export const ACCENT_HEX = '#34d399'; // emerald-400 — primary throughput accent
26
+ /**
27
+ * Ordered palette for breakdown segments, which are usually an outcome split
28
+ * (ok / retried / failed) rather than a set of entry types — so it opens on the
29
+ * good/warn/bad progression instead of {@link FALLBACK_PALETTE}'s neutrals.
30
+ */
31
+ const SEGMENT_PALETTE = ['#34d399', '#fbbf24', '#f87171', '#38bdf8', '#a78bfa'];
32
+ /** Primary throughput accent — the console `--accent`, not a status hue. */
33
+ export const ACCENT_HEX = 'var(--accent)';
18
34
  export function hexForType(type, fallbackIndex = 0) {
19
35
  const fallback = FALLBACK_PALETTE[fallbackIndex % FALLBACK_PALETTE.length];
20
36
  return TYPE_HEX[type] ?? fallback ?? '#71717a';
21
37
  }
38
+ /**
39
+ * Colour for one breakdown/pie segment: an author's explicit `color` wins, then
40
+ * the entry-type hue when the segment is named after a known type, then the
41
+ * palette by position.
42
+ *
43
+ * The {@link TYPE_HEX} step is why this is not just an array index: a breakdown
44
+ * of `request`/`query`/`exception` used to draw them green/amber/red purely by
45
+ * position, so the same `exception` was red in one card and amber in the next.
46
+ */
47
+ export function hexForSegment(label, index, override) {
48
+ if (override)
49
+ return override;
50
+ const palette = SEGMENT_PALETTE[index % SEGMENT_PALETTE.length];
51
+ return TYPE_HEX[label] ?? palette ?? '#71717a';
52
+ }
53
+ /**
54
+ * Build a {@link ChartConfig} for a set of series keys. Every card goes through
55
+ * here so the tooltip, the legend and the marks all read the same colour from the
56
+ * same place — the shadcn chart layer resolves labels and swatches from the
57
+ * config, and a colour passed straight to a `<Bar>` would leave both blank.
58
+ */
59
+ export function chartConfig(keys, colorFor, labelFor) {
60
+ const config = {};
61
+ keys.forEach((key, index) => {
62
+ config[key] = { label: labelFor?.(key) ?? key, color: colorFor(key, index) };
63
+ });
64
+ return config;
65
+ }
66
+ /**
67
+ * Chrome colours for the handful of places a Recharts prop is the only way in
68
+ * (a `cursor`, a gradient stop).
69
+ *
70
+ * @deprecated The grid/axis/tooltip/legend entries are now applied by
71
+ * `ChartContainer`'s token classes; a card should not pass them. Kept exported
72
+ * because this is a published module and removing names from it is a breaking
73
+ * change.
74
+ */
22
75
  export const chartTheme = {
23
- gridStroke: '#ffffff10',
24
- axisStroke: '#3f3f46', // zinc-700
25
- axisTick: '#71717a', // zinc-500
26
- tooltipBg: '#18181b', // zinc-900
27
- tooltipBorder: '#27272a', // zinc-800
28
- tooltipText: '#e4e4e7', // zinc-200
29
- tooltipLabel: '#a1a1aa', // zinc-400
30
- legendText: '#a1a1aa', // zinc-400
76
+ gridStroke: 'color-mix(in srgb, var(--line) 70%, transparent)',
77
+ axisStroke: 'var(--line)',
78
+ axisTick: 'var(--muted)',
79
+ tooltipBg: 'var(--panel-2)',
80
+ tooltipBorder: 'var(--line)',
81
+ tooltipText: 'var(--text)',
82
+ tooltipLabel: 'var(--muted)',
83
+ legendText: 'var(--muted)',
31
84
  };
32
- /** Shared `contentStyle` for Recharts `<Tooltip>` so every chart looks identical. */
85
+ /**
86
+ * @deprecated Superseded by `ChartTooltipContent`, which renders a real hover card
87
+ * instead of Recharts' single line of text. Kept for API compatibility.
88
+ */
33
89
  export const tooltipContentStyle = {
34
90
  background: chartTheme.tooltipBg,
35
91
  border: `1px solid ${chartTheme.tooltipBorder}`,
@@ -37,15 +93,18 @@ export const tooltipContentStyle = {
37
93
  fontSize: 11,
38
94
  color: chartTheme.tooltipText,
39
95
  };
96
+ /** @deprecated See {@link tooltipContentStyle}. */
40
97
  export const tooltipLabelStyle = {
41
98
  color: chartTheme.tooltipLabel,
42
99
  fontSize: 10,
43
100
  textTransform: 'uppercase',
44
101
  letterSpacing: '0.05em',
45
102
  };
103
+ /** @deprecated See {@link tooltipContentStyle}. */
46
104
  export const tooltipItemStyle = {
47
105
  color: chartTheme.tooltipText,
48
106
  };
107
+ /** @deprecated Tick text is filled by `ChartContainer`'s token classes. */
49
108
  export const axisTickStyle = {
50
109
  fill: chartTheme.axisTick,
51
110
  fontSize: 10,
@@ -1 +1 @@
1
- {"version":3,"file":"chart-theme.js","sourceRoot":"","sources":["../../../../src/react/components/charts/chart-theme.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8FAA8F;AAC9F,MAAM,CAAC,MAAM,QAAQ,GAA2B;IAC9C,OAAO,EAAE,SAAS,EAAE,cAAc;IAClC,KAAK,EAAE,SAAS,EAAE,UAAU;IAC5B,GAAG,EAAE,SAAS,EAAE,aAAa;IAC7B,SAAS,EAAE,SAAS,EAAE,UAAU;IAChC,WAAW,EAAE,SAAS,EAAE,YAAY;IACpC,IAAI,EAAE,SAAS,EAAE,WAAW;CAC7B,CAAC;AAEF,wEAAwE;AACxE,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAE5F,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,0CAA0C;AAE/E,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,aAAa,GAAG,CAAC;IACxD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC3E,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,IAAI,SAAS,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,UAAU,EAAE,WAAW;IACvB,UAAU,EAAE,SAAS,EAAE,WAAW;IAClC,QAAQ,EAAE,SAAS,EAAE,WAAW;IAChC,SAAS,EAAE,SAAS,EAAE,WAAW;IACjC,aAAa,EAAE,SAAS,EAAE,WAAW;IACrC,WAAW,EAAE,SAAS,EAAE,WAAW;IACnC,YAAY,EAAE,SAAS,EAAE,WAAW;IACpC,UAAU,EAAE,SAAS,EAAE,WAAW;CAC1B,CAAC;AAEX,qFAAqF;AACrF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,UAAU,EAAE,UAAU,CAAC,SAAS;IAChC,MAAM,EAAE,aAAa,UAAU,CAAC,aAAa,EAAE;IAC/C,YAAY,EAAE,CAAC;IACf,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,UAAU,CAAC,WAAW;CACrB,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,KAAK,EAAE,UAAU,CAAC,YAAY;IAC9B,QAAQ,EAAE,EAAE;IACZ,aAAa,EAAE,WAAW;IAC1B,aAAa,EAAE,QAAQ;CACf,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,UAAU,CAAC,WAAW;CACrB,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,UAAU,CAAC,QAAQ;IACzB,QAAQ,EAAE,EAAE;CACJ,CAAC"}
1
+ {"version":3,"file":"chart-theme.js","sourceRoot":"","sources":["../../../../src/react/components/charts/chart-theme.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { JSX } from 'react';
2
+ import { type ChartSelection } from './chart-selection.js';
3
+ /** Latency histogram with p50/p95/p99 chips above it. */
4
+ export declare function DistributionChartCard({ title, buckets, p50, p95, p99, height, onSelect, }: {
5
+ title: string;
6
+ buckets: {
7
+ label: string;
8
+ count: number;
9
+ }[];
10
+ p50?: number;
11
+ p95?: number;
12
+ p99?: number;
13
+ height?: number;
14
+ /** Drill-down: called with the bucket under a click. Omit and the chart is inert. */
15
+ onSelect?: (selection: ChartSelection) => void;
16
+ }): JSX.Element;
17
+ //# sourceMappingURL=distribution-chart-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distribution-chart-card.d.ts","sourceRoot":"","sources":["../../../../src/react/components/charts/distribution-chart-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAUjC,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,sBAAsB,CAAC;AAoB3E,yDAAyD;AACzD,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,OAAO,EACP,GAAG,EACH,GAAG,EACH,GAAG,EACH,MAAY,EACZ,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC;CAChD,GAAG,GAAG,CAAC,OAAO,CAgEd"}
@@ -0,0 +1,46 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { Bar, BarChart, CartesianGrid, XAxis, YAxis } from 'recharts';
4
+ import { ChartContainer, ChartTooltip, ChartTooltipContent, chartColorVar, } from '../../ui/chart.js';
5
+ import { ChartCard, ChartEmptyState } from './chart-card.js';
6
+ import { chartSelection } from './chart-selection.js';
7
+ import { chartConfig } from './chart-theme.js';
8
+ function formatDuration(ms) {
9
+ return ms >= 1000 ? `${(ms / 1000).toFixed(1)}s` : `${Math.round(ms)}ms`;
10
+ }
11
+ /**
12
+ * The percentile chips. `tint-*` rather than three inline colour strings: the
13
+ * tint classes are the console's single source of truth for a tinted chip, and
14
+ * they carry a `--good`/`--warn`/`--bad` that flips with the theme — the old
15
+ * `${color}22` concatenation only worked because the colours were hard-coded
16
+ * hexes, and would have produced an invalid colour the moment one became a token.
17
+ */
18
+ const MARKER_TINT = {
19
+ p50: 'tint-good',
20
+ p95: 'tint-warn',
21
+ p99: 'tint-bad',
22
+ };
23
+ /** Latency histogram with p50/p95/p99 chips above it. */
24
+ export function DistributionChartCard({ title, buckets, p50, p95, p99, height = 220, onSelect, }) {
25
+ const chips = [];
26
+ if (p50 !== undefined)
27
+ chips.push([p50, 'p50']);
28
+ if (p95 !== undefined)
29
+ chips.push([p95, 'p95']);
30
+ if (p99 !== undefined)
31
+ chips.push([p99, 'p99']);
32
+ const bodyHeight = height - 64;
33
+ const config = useMemo(() => chartConfig(['count'], () => 'var(--live)'), []);
34
+ const clickProps = onSelect
35
+ ? {
36
+ onClick: (_datum, index) => {
37
+ const bucket = buckets[index];
38
+ if (bucket)
39
+ onSelect(chartSelection({ label: bucket.label, value: bucket.count }));
40
+ },
41
+ cursor: 'pointer',
42
+ }
43
+ : {};
44
+ return (_jsx(ChartCard, { title: title, height: bodyHeight, children: _jsxs("div", { className: "flex h-full flex-col", children: [chips.length > 0 && (_jsx("div", { className: "mb-1.5 flex flex-wrap gap-2", children: chips.map(([value, name]) => (_jsxs("span", { className: `rounded border px-1.5 text-[10px] tabular-nums ${MARKER_TINT[name]}`, children: [name, ": ", formatDuration(value)] }, name))) })), _jsx("div", { className: "min-h-0 flex-1", children: buckets.length === 0 ? (_jsx(ChartEmptyState, {})) : (_jsx(ChartContainer, { config: config, children: _jsxs(BarChart, { data: buckets, margin: { top: 4, right: 8, bottom: 0, left: -16 }, children: [_jsx(CartesianGrid, { vertical: false }), _jsx(XAxis, { dataKey: "label", tickLine: false }), _jsx(YAxis, { tickLine: false, allowDecimals: false, width: 40 }), _jsx(ChartTooltip, { cursor: { fill: 'color-mix(in srgb, var(--text) 5%, transparent)' }, content: _jsx(ChartTooltipContent, {}) }), _jsx(Bar, { dataKey: "count", name: "count", fill: chartColorVar('count'), radius: [3, 3, 0, 0], isAnimationActive: false, ...clickProps })] }) })) })] }) }));
45
+ }
46
+ //# sourceMappingURL=distribution-chart-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distribution-chart-card.js","sourceRoot":"","sources":["../../../../src/react/components/charts/distribution-chart-card.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { JSX } from 'react';
2
+ /** Half-dial gauge: one value against a min/max, with the reading over the arc. */
3
+ export declare function GaugeCard({ title, value, min, max, label, color, height, }: {
4
+ title: string;
5
+ value: number;
6
+ min?: number;
7
+ max?: number;
8
+ label?: string;
9
+ color?: string;
10
+ height?: number;
11
+ }): JSX.Element;
12
+ //# sourceMappingURL=gauge-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gauge-card.d.ts","sourceRoot":"","sources":["../../../../src/react/components/charts/gauge-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAOjC,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,KAAK,EACL,GAAO,EACP,GAAO,EACP,KAAK,EACL,KAAqB,EACrB,MAAY,GACb,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,GAAG,CAAC,OAAO,CAiDd"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { PolarAngleAxis, RadialBar, RadialBarChart } from 'recharts';
4
+ import { ChartContainer, chartColorVar } from '../../ui/chart.js';
5
+ import { ChartCard } from './chart-card.js';
6
+ import { chartConfig } from './chart-theme.js';
7
+ /** Half-dial gauge: one value against a min/max, with the reading over the arc. */
8
+ export function GaugeCard({ title, value, min = 0, max = 1, label, color = 'var(--good)', height = 220, }) {
9
+ const range = max - min;
10
+ const pct = range === 0 ? 0 : Math.max(0, Math.min(1, (value - min) / range));
11
+ const displayLabel = label ?? `${Math.round(pct * 100)}%`;
12
+ const bodyHeight = height - 64;
13
+ const config = useMemo(() => chartConfig(['value'], () => color, () => title), [color, title]);
14
+ const data = [{ value: pct * 100 }];
15
+ return (_jsx(ChartCard, { title: title, height: bodyHeight, children: _jsxs("div", { className: "relative h-full", children: [_jsx(ChartContainer, { config: config, children: _jsxs(RadialBarChart, { innerRadius: "60%", outerRadius: "100%", data: data, startAngle: 180, endAngle: 0, barSize: 16, children: [_jsx(PolarAngleAxis, { type: "number", domain: [0, 100], tick: false, axisLine: false }), _jsx(RadialBar, { dataKey: "value", fill: chartColorVar('value'), background: true, cornerRadius: 4, isAnimationActive: false })] }) }), _jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center pt-[40%]", children: _jsx("span", { className: "text-xl font-semibold tabular-nums text-foreground", children: displayLabel }) })] }) }));
16
+ }
17
+ //# sourceMappingURL=gauge-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gauge-card.js","sourceRoot":"","sources":["../../../../src/react/components/charts/gauge-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,mFAAmF;AACnF,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,KAAK,EACL,GAAG,GAAG,CAAC,EACP,GAAG,GAAG,CAAC,EACP,KAAK,EACL,KAAK,GAAG,aAAa,EACrB,MAAM,GAAG,GAAG,GASb;IACC,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;IACxB,MAAM,GAAG,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAC1D,MAAM,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CACH,WAAW,CACT,CAAC,OAAO,CAAC,EACT,GAAG,EAAE,CAAC,KAAK,EACX,GAAG,EAAE,CAAC,KAAK,CACZ,EACH,CAAC,KAAK,EAAE,KAAK,CAAC,CACf,CAAC;IAEF,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;IAEpC,OAAO,CACL,KAAC,SAAS,IAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,YACzC,eAAK,SAAS,EAAC,iBAAiB,aAC9B,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,YAC5B,MAAC,cAAc,IACb,WAAW,EAAC,KAAK,EACjB,WAAW,EAAC,MAAM,EAClB,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,GAAG,EACf,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,EAAE,aAMX,KAAC,cAAc,IAAC,IAAI,EAAC,QAAQ,EAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,GAAI,EAChF,KAAC,SAAS,IACR,OAAO,EAAC,OAAO,EACf,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAC5B,UAAU,QACV,YAAY,EAAE,CAAC,EACf,iBAAiB,EAAE,KAAK,GACxB,IACa,GACF,EACjB,cAAK,SAAS,EAAC,gFAAgF,YAC7F,eAAM,SAAS,EAAC,oDAAoD,YAAE,YAAY,GAAQ,GACtF,IACF,GACI,CACb,CAAC;AACJ,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from './chart-theme.js';
2
+ export * from './chart-selection.js';
2
3
  export * from './chart-card.js';
3
4
  export * from './area-chart-card.js';
4
5
  export * from './stacked-area-chart-card.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/react/components/charts/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/react/components/charts/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from './chart-theme.js';
2
+ export * from './chart-selection.js';
2
3
  export * from './chart-card.js';
3
4
  export * from './area-chart-card.js';
4
5
  export * from './stacked-area-chart-card.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/react/components/charts/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/react/components/charts/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC"}
@@ -1,14 +1,28 @@
1
+ import type { JSX, ReactNode } from 'react';
2
+ import { type ChartSelection } from './chart-selection.js';
1
3
  /** Each row carries the x-axis `label` plus one numeric key per series. */
2
4
  export type StackedAreaRow = {
3
5
  label: string;
4
6
  } & Record<string, string | number>;
5
- /** Multi-series stacked area chart with a legend, colored per entry type. */
6
- export declare function StackedAreaChartCard({ title, data, series, right, height, }: {
7
+ /**
8
+ * Multi-series stacked area chart, coloured per entry type, with a legend whose
9
+ * entries toggle their series and a brush for narrowing a long window.
10
+ *
11
+ * Hiding a series restacks the rest, which is the point: with six types stacked,
12
+ * the only way to read the two small ones is to switch the big ones off.
13
+ */
14
+ export declare function StackedAreaChartCard({ title, data, series, right, height, brush, onSelect, colors, }: {
7
15
  title: string;
8
16
  data: StackedAreaRow[];
9
17
  /** Ordered list of series keys (e.g. entry types) to stack. */
10
18
  series: string[];
11
- right?: React.ReactNode;
19
+ right?: ReactNode;
12
20
  height?: number;
21
+ /** Force the range brush on or off. Defaults to on once the series is long. */
22
+ brush?: boolean;
23
+ /** Drill-down: called with the bucket under a click. Omit and the chart is inert. */
24
+ onSelect?: (selection: ChartSelection) => void;
25
+ /** Explicit series colours; series not listed fall back to the entry-type palette. */
26
+ colors?: Record<string, string>;
13
27
  }): JSX.Element;
14
28
  //# sourceMappingURL=stacked-area-chart-card.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stacked-area-chart-card.d.ts","sourceRoot":"","sources":["../../../../src/react/components/charts/stacked-area-chart-card.tsx"],"names":[],"mappings":"AAoBA,2EAA2E;AAC3E,MAAM,MAAM,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAEjF,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,IAAI,EACJ,MAAM,EACN,KAAK,EACL,MAAY,GACb,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,+DAA+D;IAC/D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,GAAG,CAAC,OAAO,CAyDd"}
1
+ {"version":3,"file":"stacked-area-chart-card.d.ts","sourceRoot":"","sources":["../../../../src/react/components/charts/stacked-area-chart-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAc5C,OAAO,EAAE,KAAK,cAAc,EAAoC,MAAM,sBAAsB,CAAC;AAG7F,2EAA2E;AAC3E,MAAM,MAAM,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAKjF;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,IAAI,EACJ,MAAM,EACN,KAAK,EACL,MAAY,EACZ,KAAK,EACL,QAAQ,EACR,MAAM,GACP,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,+DAA+D;IAC/D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC;IAC/C,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,GAAG,GAAG,CAAC,OAAO,CA0Dd"}
@@ -1,13 +1,36 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Area, AreaChart, CartesianGrid, Legend, ResponsiveContainer, Tooltip, XAxis, YAxis, } from 'recharts';
2
+ import { useMemo } from 'react';
3
+ import { Area, AreaChart, Brush, CartesianGrid, XAxis, YAxis } from 'recharts';
4
+ import { ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent, chartBrushProps, chartColorVar, useSeriesToggle, } from '../../ui/chart.js';
3
5
  import { ChartCard, ChartEmptyState } from './chart-card.js';
4
- import { axisTickStyle, chartTheme, hexForType, tooltipContentStyle, tooltipItemStyle, tooltipLabelStyle, } from './chart-theme.js';
5
- /** Multi-series stacked area chart with a legend, colored per entry type. */
6
- export function StackedAreaChartCard({ title, data, series, right, height = 240, }) {
6
+ import { activeChartLabel, chartSelection } from './chart-selection.js';
7
+ import { chartConfig, hexForType } from './chart-theme.js';
8
+ /** Points past which the chart gets a range brush — see `area-chart-card.tsx`. */
9
+ const BRUSH_MIN_POINTS = 24;
10
+ /**
11
+ * Multi-series stacked area chart, coloured per entry type, with a legend whose
12
+ * entries toggle their series and a brush for narrowing a long window.
13
+ *
14
+ * Hiding a series restacks the rest, which is the point: with six types stacked,
15
+ * the only way to read the two small ones is to switch the big ones off.
16
+ */
17
+ export function StackedAreaChartCard({ title, data, series, right, height = 240, brush, onSelect, colors, }) {
7
18
  const bodyHeight = height - 64;
8
- return (_jsx(ChartCard, { title: title, right: right, height: bodyHeight, children: data.length === 0 || series.length === 0 ? (_jsx(ChartEmptyState, { height: bodyHeight })) : (_jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(AreaChart, { data: data, margin: { top: 4, right: 8, bottom: 0, left: -16 }, children: [_jsx(CartesianGrid, { stroke: chartTheme.gridStroke, vertical: false }), _jsx(XAxis, { dataKey: "label", tick: axisTickStyle, stroke: chartTheme.axisStroke, tickLine: false, minTickGap: 24 }), _jsx(YAxis, { tick: axisTickStyle, stroke: chartTheme.axisStroke, tickLine: false, width: 40, allowDecimals: false }), _jsx(Tooltip, { contentStyle: tooltipContentStyle, labelStyle: tooltipLabelStyle, itemStyle: tooltipItemStyle, cursor: { stroke: chartTheme.axisStroke } }), _jsx(Legend, { iconType: "circle", iconSize: 8, wrapperStyle: { fontSize: 10, color: chartTheme.legendText } }), series.map((key, index) => {
9
- const color = hexForType(key, index);
10
- return (_jsx(Area, { type: "monotone", dataKey: key, name: key, stackId: "1", stroke: color, strokeWidth: 1.5, fill: color, fillOpacity: 0.25, isAnimationActive: false }, key));
11
- })] }) })) }));
19
+ const config = useMemo(() => chartConfig(series, (key, index) => colors?.[key] ?? hexForType(key, index)), [series, colors]);
20
+ const { hidden, toggle, isHidden } = useSeriesToggle();
21
+ const showBrush = brush ?? data.length >= BRUSH_MIN_POINTS;
22
+ // See `area-chart-card.tsx` for why the handler is spread rather than passed
23
+ // as a possibly-undefined prop.
24
+ const clickProps = onSelect
25
+ ? {
26
+ onClick: (state) => {
27
+ const label = activeChartLabel(state);
28
+ if (label !== undefined)
29
+ onSelect(chartSelection({ label }));
30
+ },
31
+ className: 'cursor-pointer',
32
+ }
33
+ : {};
34
+ return (_jsx(ChartCard, { title: title, right: right, height: bodyHeight, children: data.length === 0 || series.length === 0 ? (_jsx(ChartEmptyState, { height: bodyHeight })) : (_jsx(ChartContainer, { config: config, children: _jsxs(AreaChart, { data: data, margin: { top: 4, right: 8, bottom: 0, left: -16 }, ...clickProps, children: [_jsx(CartesianGrid, { vertical: false }), _jsx(XAxis, { dataKey: "label", tickLine: false, minTickGap: 24 }), _jsx(YAxis, { tickLine: false, width: 40, allowDecimals: false }), _jsx(ChartTooltip, { cursor: { stroke: 'var(--line)' }, content: _jsx(ChartTooltipContent, {}) }), _jsx(ChartLegend, { content: _jsx(ChartLegendContent, { hidden: hidden, onToggle: toggle }) }), series.map((key) => (_jsx(Area, { type: "monotone", dataKey: key, name: key, stackId: "1", stroke: chartColorVar(key), strokeWidth: 1.5, fill: chartColorVar(key), fillOpacity: 0.25, hide: isHidden(key), isAnimationActive: false }, key))), showBrush && _jsx(Brush, { ...chartBrushProps, dataKey: "label" })] }) })) }));
12
35
  }
13
36
  //# sourceMappingURL=stacked-area-chart-card.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stacked-area-chart-card.js","sourceRoot":"","sources":["../../../../src/react/components/charts/stacked-area-chart-card.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,IAAI,EACJ,SAAS,EACT,aAAa,EACb,MAAM,EACN,mBAAmB,EACnB,OAAO,EACP,KAAK,EACL,KAAK,GACN,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAK1B,6EAA6E;AAC7E,MAAM,UAAU,oBAAoB,CAAC,EACnC,KAAK,EACL,IAAI,EACJ,MAAM,EACN,KAAK,EACL,MAAM,GAAG,GAAG,GAQb;IACC,MAAM,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC;IAC/B,OAAO,CACL,KAAC,SAAS,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,YACtD,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1C,KAAC,eAAe,IAAC,MAAM,EAAE,UAAU,GAAI,CACxC,CAAC,CAAC,CAAC,CACF,KAAC,mBAAmB,IAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,YAC7C,MAAC,SAAS,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,aACvE,KAAC,aAAa,IAAC,MAAM,EAAE,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,GAAI,EACjE,KAAC,KAAK,IACJ,OAAO,EAAC,OAAO,EACf,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,UAAU,CAAC,UAAU,EAC7B,QAAQ,EAAE,KAAK,EACf,UAAU,EAAE,EAAE,GACd,EACF,KAAC,KAAK,IACJ,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,UAAU,CAAC,UAAU,EAC7B,QAAQ,EAAE,KAAK,EACf,KAAK,EAAE,EAAE,EACT,aAAa,EAAE,KAAK,GACpB,EACF,KAAC,OAAO,IACN,YAAY,EAAE,mBAAmB,EACjC,UAAU,EAAE,iBAAiB,EAC7B,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,UAAU,EAAE,GACzC,EACF,KAAC,MAAM,IACL,QAAQ,EAAC,QAAQ,EACjB,QAAQ,EAAE,CAAC,EACX,YAAY,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,EAAE,GAC5D,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;wBACzB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;wBACrC,OAAO,CACL,KAAC,IAAI,IAEH,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,GAAG,EACT,OAAO,EAAC,GAAG,EACX,MAAM,EAAE,KAAK,EACb,WAAW,EAAE,GAAG,EAChB,IAAI,EAAE,KAAK,EACX,WAAW,EAAE,IAAI,EACjB,iBAAiB,EAAE,KAAK,IATnB,GAAG,CAUR,CACH,CAAC;oBACJ,CAAC,CAAC,IACQ,GACQ,CACvB,GACS,CACb,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"stacked-area-chart-card.js","sourceRoot":"","sources":["../../../../src/react/components/charts/stacked-area-chart-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,EACL,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAuB,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAK3D,kFAAkF;AAClF,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACnC,KAAK,EACL,IAAI,EACJ,MAAM,EACN,KAAK,EACL,MAAM,GAAG,GAAG,EACZ,KAAK,EACL,QAAQ,EACR,MAAM,GAcP;IACC,MAAM,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAClF,CAAC,MAAM,EAAE,MAAM,CAAC,CACjB,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,EAAE,CAAC;IACvD,MAAM,SAAS,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,gBAAgB,CAAC;IAE3D,6EAA6E;IAC7E,gCAAgC;IAChC,MAAM,UAAU,GAAG,QAAQ;QACzB,CAAC,CAAC;YACE,OAAO,EAAE,CAAC,KAAc,EAAE,EAAE;gBAC1B,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACtC,IAAI,KAAK,KAAK,SAAS;oBAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAC/D,CAAC;YACD,SAAS,EAAE,gBAAgB;SAC5B;QACH,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,CACL,KAAC,SAAS,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,YACtD,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1C,KAAC,eAAe,IAAC,MAAM,EAAE,UAAU,GAAI,CACxC,CAAC,CAAC,CAAC,CACF,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,YAC5B,MAAC,SAAS,IACR,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAC9C,UAAU,aAEd,KAAC,aAAa,IAAC,QAAQ,EAAE,KAAK,GAAI,EAClC,KAAC,KAAK,IAAC,OAAO,EAAC,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,GAAI,EAC1D,KAAC,KAAK,IAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,GAAI,EAC3D,KAAC,YAAY,IAAC,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,KAAC,mBAAmB,KAAG,GAAI,EACrF,KAAC,WAAW,IAAC,OAAO,EAAE,KAAC,kBAAkB,IAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAI,GAAI,EACjF,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACnB,KAAC,IAAI,IAEH,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,GAAG,EACT,OAAO,EAAC,GAAG,EACX,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,EAC1B,WAAW,EAAE,GAAG,EAChB,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,EACxB,WAAW,EAAE,IAAI,EACjB,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,EACnB,iBAAiB,EAAE,KAAK,IAVnB,GAAG,CAWR,CACH,CAAC,EACD,SAAS,IAAI,KAAC,KAAK,OAAK,eAAe,EAAE,OAAO,EAAC,OAAO,GAAG,IAClD,GACG,CAClB,GACS,CACb,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"entries-table.d.ts","sourceRoot":"","sources":["../../../src/react/components/entries-table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAInD,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAkC/C;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAItD;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CASvD;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,QAAQ,GACT,EAAE;IAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAqErE"}
1
+ {"version":3,"file":"entries-table.d.ts","sourceRoot":"","sources":["../../../src/react/components/entries-table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAOnD,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CA4C/C;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAItD;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CASvD;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,QAAQ,GACT,EAAE;IAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAsErE"}
@@ -1,5 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../ui/index.js';
2
3
  import { CacheBadge } from './cache-badge.js';
4
+ import { InertiaBadge } from './inertia-badge.js';
5
+ import { isOfficialEventType, officialEventLabel } from './official-event.js';
3
6
  import { buildUserActivityHref, findUserTag, userTagId } from './user-tag.js';
4
7
  export function entryLabel(entry) {
5
8
  const content = entry.content;
@@ -20,6 +23,12 @@ export function entryLabel(entry) {
20
23
  }
21
24
  if (entry.type === 'event' && typeof record.name === 'string')
22
25
  return record.name;
26
+ if (isOfficialEventType(entry.type))
27
+ return officialEventLabel(entry.type, record);
28
+ if (entry.type === 'mail' && typeof record.status === 'string') {
29
+ const subject = typeof record.subject === 'string' ? record.subject : '(no subject)';
30
+ return `[${record.status}] ${subject}`;
31
+ }
23
32
  if (entry.type === 'model' && typeof record.action === 'string') {
24
33
  const entity = typeof record.entity === 'string' ? record.entity : '';
25
34
  const id = record.id === null || record.id === undefined ? '' : `#${String(record.id)}`;
@@ -28,6 +37,11 @@ export function entryLabel(entry) {
28
37
  if (entry.type === 'redis' && typeof record.command === 'string') {
29
38
  return `${record.command} ${redisArgsPreview(record.args)}`.trim();
30
39
  }
40
+ if (entry.type === 'inertia' && typeof record.component === 'string') {
41
+ const method = typeof record.method === 'string' ? record.method : '';
42
+ const partial = record.isPartial === true ? ' (partial)' : '';
43
+ return `${method} → ${record.component}${partial}`.trim();
44
+ }
31
45
  if (entry.type === 'log' && typeof record.message === 'string') {
32
46
  const level = typeof record.level === 'string' ? record.level : 'log';
33
47
  return `[${level}] ${record.message}`;
@@ -61,13 +75,13 @@ export function dumpValuePreview(value) {
61
75
  return text.length > 80 ? `${text.slice(0, 80)}…` : text;
62
76
  }
63
77
  export function EntriesTable({ entries, onSelect, }) {
64
- return (_jsxs("table", { className: "w-full text-left text-xs", children: [_jsx("thead", { className: "text-zinc-500", children: _jsxs("tr", { children: [_jsx("th", { className: "py-2 font-normal", children: "Time" }), _jsx("th", { className: "font-normal", children: "Type" }), _jsx("th", { className: "font-normal", children: "Summary" }), _jsx("th", { className: "font-normal", children: "Duration" }), _jsx("th", { className: "font-normal", children: "Tags" })] }) }), _jsx("tbody", { children: entries.map((entry) => {
78
+ return (_jsxs(Table, { className: "text-left", children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { className: "px-0 py-2", children: "Time" }), _jsx(TableHead, { className: "px-0", children: "Type" }), _jsx(TableHead, { className: "px-0", children: "Summary" }), _jsx(TableHead, { className: "px-0", children: "Duration" }), _jsx(TableHead, { className: "px-0", children: "Tags" })] }) }), _jsx(TableBody, { children: entries.map((entry) => {
65
79
  const userTag = findUserTag(entry.tags);
66
80
  const otherTags = entry.tags.filter((tag) => tag !== userTag);
67
- return (_jsxs("tr", { onClick: () => onSelect?.(entry.id), onKeyDown: (event) => {
81
+ return (_jsxs(TableRow, { onClick: () => onSelect?.(entry.id), onKeyDown: (event) => {
68
82
  if (event.key === 'Enter' || event.key === ' ')
69
83
  onSelect?.(entry.id);
70
- }, className: "cursor-pointer border-t border-zinc-900 hover:bg-zinc-900", children: [_jsx("td", { className: "py-1.5 text-zinc-500", children: new Date(entry.createdAt).toLocaleTimeString() }), _jsx("td", { className: "text-emerald-400", children: entry.type }), _jsx("td", { className: "max-w-md truncate text-zinc-300", children: _jsxs("span", { className: "inline-flex items-center gap-1.5", children: [entry.type === 'cache' ? _jsx(CacheBadge, { content: entry.content }) : null, _jsx("span", { className: "truncate", children: entryLabel(entry) })] }) }), _jsx("td", { className: "text-zinc-400", children: entry.durationMs != null ? `${entry.durationMs}ms` : '—' }), _jsx("td", { className: "text-zinc-600", children: _jsxs("span", { className: "inline-flex items-center gap-1.5", children: [entry.traceId !== null && (_jsxs("a", { href: `#/traces/${entry.traceId}`, title: `View trace ${entry.traceId}`, onClick: (event) => event.stopPropagation(), className: "rounded bg-zinc-900 px-1.5 py-0.5 font-mono text-[10px] text-sky-400 hover:bg-zinc-800", children: ["trace:", entry.traceId.slice(0, 6)] })), userTag !== null && (_jsx("a", { href: buildUserActivityHref(userTag), title: `View all activity for user ${userTagId(userTag)}`, onClick: (event) => event.stopPropagation(), className: "rounded bg-zinc-900 px-1.5 py-0.5 font-mono text-[10px] text-emerald-400 hover:bg-zinc-800", children: userTag })), otherTags.length > 0 && _jsx("span", { children: otherTags.join(' ') })] }) })] }, entry.id));
84
+ }, className: "cursor-pointer hover:bg-panel", children: [_jsx(TableCell, { className: "px-0 py-1.5 align-middle text-muted-foreground", children: new Date(entry.createdAt).toLocaleTimeString() }), _jsx(TableCell, { className: "px-0 py-1.5 align-middle text-brand", children: entry.type }), _jsx(TableCell, { className: "max-w-md truncate px-0 py-1.5 align-middle text-foreground", children: _jsxs("span", { className: "inline-flex items-center gap-1.5", children: [entry.type === 'cache' ? _jsx(CacheBadge, { content: entry.content }) : null, entry.type === 'inertia' ? _jsx(InertiaBadge, { content: entry.content }) : null, _jsx("span", { className: "truncate", children: entryLabel(entry) })] }) }), _jsx(TableCell, { className: "px-0 py-1.5 align-middle text-muted-foreground", children: entry.durationMs != null ? `${entry.durationMs}ms` : '—' }), _jsx(TableCell, { className: "px-0 py-1.5 align-middle text-muted-foreground", children: _jsxs("span", { className: "inline-flex items-center gap-1.5", children: [entry.traceId !== null && (_jsxs("a", { href: `#/traces/${entry.traceId}`, title: `View trace ${entry.traceId}`, onClick: (event) => event.stopPropagation(), className: "rounded bg-panel px-1.5 py-0.5 font-mono text-[10px] text-brand hover:bg-panel-2", children: ["trace:", entry.traceId.slice(0, 6)] })), userTag !== null && (_jsx("a", { href: buildUserActivityHref(userTag), title: `View all activity for user ${userTagId(userTag)}`, onClick: (event) => event.stopPropagation(), className: "rounded bg-panel px-1.5 py-0.5 font-mono text-[10px] text-good hover:bg-panel-2", children: userTag })), otherTags.length > 0 && _jsx("span", { children: otherTags.join(' ') })] }) })] }, entry.id));
71
85
  }) })] }));
72
86
  }
73
87
  //# sourceMappingURL=entries-table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entries-table.js","sourceRoot":"","sources":["../../../src/react/components/entries-table.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entries-table.js","sourceRoot":"","sources":["../../../src/react/components/entries-table.tsx"],"names":[],"mappings":"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"}