@git-snitch/renderer 0.0.9 → 0.0.11

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.
package/dist/charts.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { CommitRecord, ContributorSummary, RepoReportData, ScanProjectReport, ScanReportData } from "@git-snitch/core";
1
+ import type { AiUsageBreakdownItem, CommitRecord, ContributorSummary, RepoReportData, ScanProjectReport, ScanReportData } from "@git-snitch/core";
2
2
  export type CommitActivityPoint = {
3
3
  readonly period: string;
4
4
  readonly commits: number;
@@ -55,6 +55,12 @@ export type ActivityHeatmapCell = {
55
55
  readonly hour: string;
56
56
  readonly commits: number;
57
57
  };
58
+ export type AiUsageBreakdownPoint = {
59
+ readonly name: string;
60
+ readonly messages: number;
61
+ readonly tokens: number;
62
+ readonly cost: number;
63
+ };
58
64
  export declare function deriveCommitActivityData(report: Pick<RepoReportData, "analysis">): readonly CommitActivityPoint[];
59
65
  export declare function deriveContributorPieData(contributors: readonly ContributorSummary[]): readonly ContributorPieSlice[];
60
66
  export declare function deriveLanguageDistributionData(report: Pick<RepoReportData | ScanReportData, "analysis">): readonly LanguageDistributionSlice[];
@@ -66,6 +72,7 @@ export declare function deriveContributionCalendarData(commits: readonly CommitR
66
72
  export declare function deriveVelocityData(report: Pick<RepoReportData, "analysis">): readonly VelocityPoint[];
67
73
  export declare function deriveCodeOwnershipData(contributors: readonly ContributorSummary[]): readonly CodeOwnershipPoint[];
68
74
  export declare function deriveProjectsComparisonData(projects: readonly ScanProjectReport[]): readonly ProjectComparisonPoint[];
75
+ export declare function deriveAiUsageBreakdownData(rows: readonly AiUsageBreakdownItem[]): readonly AiUsageBreakdownPoint[];
69
76
  export declare function deriveActivityHeatmapData(commits: readonly CommitRecord[]): readonly ActivityHeatmapCell[];
70
77
  export declare function CommitActivityChart({ data }: {
71
78
  readonly data: readonly CommitActivityPoint[];
@@ -100,6 +107,11 @@ export declare function CodeOwnershipChart({ data }: {
100
107
  export declare function ProjectsComparisonChart({ data }: {
101
108
  readonly data: readonly ProjectComparisonPoint[];
102
109
  }): import("react/jsx-runtime").JSX.Element;
110
+ export declare function AiUsageBreakdownChart({ title, description, data }: {
111
+ readonly title: string;
112
+ readonly description: string;
113
+ readonly data: readonly AiUsageBreakdownPoint[];
114
+ }): import("react/jsx-runtime").JSX.Element;
103
115
  export declare function ActivityHeatmap({ data }: {
104
116
  readonly data: readonly ActivityHeatmapCell[];
105
117
  }): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../src/charts.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAS5H,MAAM,MAAM,mBAAmB,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AACxF,MAAM,MAAM,mBAAmB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AACtF,MAAM,MAAM,yBAAyB,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACtH,MAAM,MAAM,yBAAyB,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAC5H,MAAM,MAAM,gBAAgB,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AACpF,MAAM,MAAM,mBAAmB,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AACrF,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AACjF,MAAM,MAAM,uBAAuB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1F,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAC5G,MAAM,MAAM,kBAAkB,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AACnJ,MAAM,MAAM,sBAAsB,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1J,MAAM,MAAM,mBAAmB,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AA4C5G,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,GAAG,SAAS,mBAAmB,EAAE,CAEjH;AAED,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,SAAS,kBAAkB,EAAE,GAAG,SAAS,mBAAmB,EAAE,CAKpH;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,GAAG,cAAc,EAAE,UAAU,CAAC,GAAG,SAAS,yBAAyB,EAAE,CAK9I;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,yBAAyB,EAAE,CAUrH;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,gBAAgB,EAAE,CAgB9G;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,mBAAmB,EAAE,CAUzG;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,cAAc,EAAE,CAU/F;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,uBAAuB,EAAE,CAsBnH;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,GAAG,SAAS,aAAa,EAAE,CAOrG;AAED,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,SAAS,kBAAkB,EAAE,GAAG,SAAS,kBAAkB,EAAE,CAUlH;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,GAAG,SAAS,sBAAsB,EAAE,CAStH;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,mBAAmB,EAAE,CAe1G;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,mBAAmB,EAAE,CAAA;CAAE,2CAoB9F;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,mBAAmB,EAAE,CAAA;CAAE,2CAqB9F;AAED,wBAAgB,yBAAyB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,yBAAyB,EAAE,CAAA;CAAE,2CAoB1G;AAED,wBAAgB,yBAAyB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,yBAAyB,EAAE,CAAA;CAAE,2CAqB1G;AAED,wBAAgB,2BAA2B,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAAE,2CAoBnG;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,mBAAmB,EAAE,CAAA;CAAE,2CAc9F;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,2CAcpF;AAED,wBAAgB,oBAAoB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,uBAAuB,EAAE,CAAA;CAAE,2CA6BnG;AAED,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,CAAA;CAAE,2CAelF;AAED,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,kBAAkB,EAAE,CAAA;CAAE,2CAa5F;AAED,wBAAgB,uBAAuB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,sBAAsB,EAAE,CAAA;CAAE,2CAerG;AAED,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,mBAAmB,EAAE,CAAA;CAAE,2CAY1F"}
1
+ {"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../src/charts.tsx"],"names":[],"mappings":"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"}
package/dist/charts.js CHANGED
@@ -144,6 +144,13 @@ export function deriveProjectsComparisonData(projects) {
144
144
  }))
145
145
  .sort((left, right) => right.commits - left.commits || left.project.localeCompare(right.project));
146
146
  }
147
+ export function deriveAiUsageBreakdownData(rows) {
148
+ return rows
149
+ .filter((row) => row.records > 0 || row.tokens.total > 0 || row.cost > 0)
150
+ .map((row) => ({ name: row.key, messages: row.records, tokens: row.tokens.total, cost: row.cost }))
151
+ .sort((left, right) => right.tokens - left.tokens || right.messages - left.messages || left.name.localeCompare(right.name))
152
+ .slice(0, 8);
153
+ }
147
154
  export function deriveActivityHeatmapData(commits) {
148
155
  const counts = new Map();
149
156
  for (const commit of commits) {
@@ -195,6 +202,9 @@ export function CodeOwnershipChart({ data }) {
195
202
  export function ProjectsComparisonChart({ data }) {
196
203
  return (_jsx(ChartPanel, { title: "Projects comparison", description: "Repository activity across a scan.", isEmpty: !hasPositiveValue(data, (item) => [item.commits, item.contributors, item.filesChanged]), emptyTitle: "No projects to compare", emptyDescription: "Project comparison needs at least one scanned repository with activity.", children: _jsx(ChartContainer, { config: { commits: { label: "Commits", color: chartPalette[1] }, contributors: { label: "Contributors", color: chartPalette[3] } }, className: "h-72 w-full", children: _jsxs(BarChart, { data: data, layout: "vertical", margin: { left: 8, right: 16, top: 8, bottom: 0 }, children: [_jsx(CartesianGrid, { horizontal: false }), _jsx(XAxis, { type: "number", hide: true }), _jsx(YAxis, { dataKey: "project", type: "category", width: 112, tickLine: false, axisLine: false }), _jsx(ChartTooltip, { content: _jsx(ChartTooltipContent, {}) }), _jsx(Bar, { dataKey: "commits", fill: "var(--color-commits)", radius: [0, 3, 3, 0], ...staticChartProps }), _jsx(Bar, { dataKey: "contributors", fill: "var(--color-contributors)", radius: [0, 3, 3, 0], ...staticChartProps })] }) }) }));
197
204
  }
205
+ export function AiUsageBreakdownChart({ title, description, data }) {
206
+ return (_jsx(ChartPanel, { title: title, description: description, isEmpty: !hasPositiveValue(data, (item) => [item.messages, item.tokens]), emptyTitle: `No ${title.toLowerCase()} to chart`, emptyDescription: "AI usage charts need matched local assistant records with model or harness metadata.", children: _jsx(ChartContainer, { config: { tokens: { label: "Tokens", color: chartPalette[2] }, messages: { label: "Messages", color: chartPalette[4] } }, className: "h-72 w-full", children: _jsxs(BarChart, { data: data, layout: "vertical", margin: { left: 8, right: 16, top: 8, bottom: 0 }, children: [_jsx(CartesianGrid, { horizontal: false }), _jsx(XAxis, { type: "number", hide: true }), _jsx(YAxis, { dataKey: "name", type: "category", width: 124, tickLine: false, axisLine: false }), _jsx(ChartTooltip, { content: _jsx(ChartTooltipContent, {}) }), _jsx(Bar, { dataKey: "tokens", fill: "var(--color-tokens)", radius: [0, 3, 3, 0], ...staticChartProps }), _jsx(Bar, { dataKey: "messages", fill: "var(--color-messages)", radius: [0, 3, 3, 0], ...staticChartProps })] }) }) }));
207
+ }
198
208
  export function ActivityHeatmap({ data }) {
199
209
  return (_jsx(ChartPanel, { title: "Activity heatmap", description: "UTC weekday and hour density.", isEmpty: !hasPositiveValue(data, (item) => [item.commits]), emptyTitle: "No activity heatmap to show", emptyDescription: "The heatmap needs at least one dated commit.", children: _jsx("div", { className: "grid grid-flow-dense grid-cols-[repeat(24,minmax(0,1fr))] gap-1", "aria-label": "Activity heatmap by day and hour", children: data.map((cell) => (_jsx("div", { title: `${cell.day} ${cell.hour}: ${cell.commits} commits`, className: cn("h-4 rounded-[2px] border", heatClass(cell.commits)), children: _jsx("span", { className: "sr-only", children: `${cell.day} ${cell.hour}: ${cell.commits} commits` }) }, `${cell.day}-${cell.hour}`))) }) }));
200
210
  }