@urmzd/github-insights 2.0.1 → 2.2.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 (103) hide show
  1. package/.githooks/commit-msg +4 -0
  2. package/.githooks/pre-commit +4 -0
  3. package/AGENTS.md +32 -19
  4. package/CHANGELOG.md +54 -0
  5. package/CONTRIBUTING.md +18 -19
  6. package/README.md +21 -24
  7. package/action.yml +1 -1
  8. package/assets/insights/index.svg +45 -4
  9. package/assets/insights/metrics-constellation.svg +55 -0
  10. package/assets/insights/metrics-impact.svg +55 -0
  11. package/assets/insights/metrics-rhythm.svg +55 -0
  12. package/assets/insights/metrics-velocity.svg +55 -0
  13. package/examples/classic/README.md +36 -2
  14. package/examples/classic/index.svg +45 -4
  15. package/examples/classic/metrics-constellation.svg +55 -0
  16. package/examples/classic/metrics-impact.svg +55 -0
  17. package/examples/classic/metrics-rhythm.svg +55 -0
  18. package/examples/classic/metrics-velocity.svg +55 -0
  19. package/examples/ecosystem/README.md +39 -28
  20. package/examples/ecosystem/index.svg +45 -4
  21. package/examples/ecosystem/metrics-constellation.svg +55 -0
  22. package/examples/ecosystem/metrics-impact.svg +55 -0
  23. package/examples/ecosystem/metrics-rhythm.svg +55 -0
  24. package/examples/ecosystem/metrics-velocity.svg +55 -0
  25. package/examples/minimal/README.md +36 -2
  26. package/examples/minimal/index.svg +45 -4
  27. package/examples/minimal/metrics-constellation.svg +55 -0
  28. package/examples/minimal/metrics-impact.svg +55 -0
  29. package/examples/minimal/metrics-rhythm.svg +55 -0
  30. package/examples/minimal/metrics-velocity.svg +55 -0
  31. package/examples/modern/README.md +62 -50
  32. package/examples/modern/index.svg +45 -4
  33. package/examples/modern/metrics-constellation.svg +55 -0
  34. package/examples/modern/metrics-impact.svg +55 -0
  35. package/examples/modern/metrics-rhythm.svg +55 -0
  36. package/examples/modern/metrics-velocity.svg +55 -0
  37. package/llms.txt +4 -4
  38. package/package.json +1 -1
  39. package/skills/github-insights/SKILL.md +35 -81
  40. package/sr.yaml +9 -0
  41. package/src/api.ts +3 -141
  42. package/src/components/contribution-rhythm.tsx +152 -0
  43. package/src/components/full-svg.test.tsx +4 -1
  44. package/src/components/full-svg.tsx +14 -7
  45. package/src/components/impact-trail.tsx +90 -0
  46. package/src/components/language-velocity.tsx +181 -0
  47. package/src/components/project-constellation.tsx +97 -0
  48. package/src/components/section.test.tsx +5 -3
  49. package/src/components/section.tsx +5 -13
  50. package/src/components/style-defs.tsx +44 -3
  51. package/src/index.ts +34 -47
  52. package/src/metrics.test.ts +50 -57
  53. package/src/metrics.ts +293 -97
  54. package/src/readme.test.ts +2 -4
  55. package/src/templates.test.ts +116 -16
  56. package/src/templates.ts +68 -27
  57. package/src/theme.ts +11 -1
  58. package/src/types.ts +31 -7
  59. package/assets/insights/metrics-calendar.svg +0 -14
  60. package/assets/insights/metrics-complexity.svg +0 -14
  61. package/assets/insights/metrics-contributions.svg +0 -14
  62. package/assets/insights/metrics-expertise.svg +0 -14
  63. package/assets/insights/metrics-languages.svg +0 -14
  64. package/assets/insights/metrics-pulse.svg +0 -14
  65. package/examples/classic/metrics-calendar.svg +0 -14
  66. package/examples/classic/metrics-complexity.svg +0 -14
  67. package/examples/classic/metrics-contributions.svg +0 -14
  68. package/examples/classic/metrics-expertise.svg +0 -14
  69. package/examples/classic/metrics-languages.svg +0 -14
  70. package/examples/classic/metrics-pulse.svg +0 -14
  71. package/examples/ecosystem/metrics-calendar.svg +0 -14
  72. package/examples/ecosystem/metrics-complexity.svg +0 -14
  73. package/examples/ecosystem/metrics-contributions.svg +0 -14
  74. package/examples/ecosystem/metrics-expertise.svg +0 -14
  75. package/examples/ecosystem/metrics-languages.svg +0 -14
  76. package/examples/ecosystem/metrics-pulse.svg +0 -14
  77. package/examples/minimal/metrics-calendar.svg +0 -14
  78. package/examples/minimal/metrics-complexity.svg +0 -14
  79. package/examples/minimal/metrics-contributions.svg +0 -14
  80. package/examples/minimal/metrics-expertise.svg +0 -14
  81. package/examples/minimal/metrics-languages.svg +0 -14
  82. package/examples/minimal/metrics-pulse.svg +0 -14
  83. package/examples/modern/metrics-calendar.svg +0 -14
  84. package/examples/modern/metrics-complexity.svg +0 -14
  85. package/examples/modern/metrics-contributions.svg +0 -14
  86. package/examples/modern/metrics-expertise.svg +0 -14
  87. package/examples/modern/metrics-languages.svg +0 -14
  88. package/examples/modern/metrics-pulse.svg +0 -14
  89. package/src/components/bar-chart.test.tsx +0 -38
  90. package/src/components/bar-chart.tsx +0 -54
  91. package/src/components/contribution-calendar.test.tsx +0 -44
  92. package/src/components/contribution-calendar.tsx +0 -94
  93. package/src/components/contribution-cards.test.tsx +0 -36
  94. package/src/components/contribution-cards.tsx +0 -58
  95. package/src/components/donut-chart.test.tsx +0 -36
  96. package/src/components/donut-chart.tsx +0 -102
  97. package/src/components/project-cards.test.tsx +0 -46
  98. package/src/components/project-cards.tsx +0 -66
  99. package/src/components/stat-cards.test.tsx +0 -32
  100. package/src/components/stat-cards.tsx +0 -57
  101. package/src/components/tech-highlights.test.tsx +0 -63
  102. package/src/components/tech-highlights.tsx +0 -109
  103. package/teasr.toml +0 -14
@@ -1,109 +0,0 @@
1
- import { Fragment, h } from "../jsx-factory.js";
2
- import { escapeXml, truncate, wrapText } from "../svg-utils.js";
3
- import { BAR_COLORS, LAYOUT } from "../theme.js";
4
- import type { RenderResult, TechHighlight } from "../types.js";
5
-
6
- export function renderTechHighlights(
7
- highlights: TechHighlight[],
8
- y: number,
9
- ): RenderResult {
10
- if (highlights.length === 0) return { svg: "", height: 0 };
11
-
12
- const { padX, barHeight, barMaxWidth } = LAYOUT;
13
- const labelMaxChars = 60;
14
- const skillMaxChars = 120;
15
- const skillLineHeight = 16;
16
- const labelLineHeight = 26;
17
- const scoreX = padX + barMaxWidth + 10;
18
- const skillY = 16;
19
- const rowGap = 14;
20
-
21
- let svg = "";
22
- let height = 0;
23
-
24
- for (let hi = 0; hi < highlights.length; hi++) {
25
- const group = highlights[hi];
26
- const color = BAR_COLORS[hi % BAR_COLORS.length];
27
- const score = Math.max(0, Math.min(100, group.score));
28
- const fillWidth = (score / 100) * barMaxWidth;
29
-
30
- const baseY = y + height;
31
-
32
- // Category label (uppercase, left-aligned, on its own line)
33
- svg += (
34
- <text x={padX} y={baseY + 14} className="t t-subhdr">
35
- {escapeXml(truncate(group.category.toUpperCase(), labelMaxChars))}
36
- </text>
37
- );
38
-
39
- // Bar track (full width, low opacity)
40
- svg += (
41
- <rect
42
- x={padX}
43
- y={baseY + labelLineHeight}
44
- width={barMaxWidth}
45
- height={barHeight}
46
- rx={4}
47
- fill={color}
48
- fill-opacity="0.15"
49
- />
50
- );
51
-
52
- // Bar fill (proportional to score)
53
- if (fillWidth > 0) {
54
- svg += (
55
- <rect
56
- x={padX}
57
- y={baseY + labelLineHeight}
58
- width={fillWidth}
59
- height={barHeight}
60
- rx={4}
61
- fill={color}
62
- fill-opacity="0.85"
63
- />
64
- );
65
- }
66
-
67
- // Score label (right of bar)
68
- svg += (
69
- <text
70
- x={scoreX}
71
- y={baseY + labelLineHeight + barHeight / 2 + 4}
72
- className="t t-value"
73
- >
74
- {`${score}%`}
75
- </text>
76
- );
77
-
78
- // Skill items text (below bar, muted, wrapped to avoid overflow)
79
- const skillText = group.items
80
- .map((item) => truncate(item, 30))
81
- .join(" \u00B7 ");
82
-
83
- const skillLines = wrapText(skillText, skillMaxChars);
84
- for (let li = 0; li < skillLines.length; li++) {
85
- svg += (
86
- <text
87
- x={padX}
88
- y={
89
- baseY + labelLineHeight + barHeight + skillY + li * skillLineHeight
90
- }
91
- className="t t-card-detail"
92
- >
93
- {escapeXml(skillLines[li])}
94
- </text>
95
- );
96
- }
97
-
98
- height +=
99
- labelLineHeight +
100
- barHeight +
101
- skillY +
102
- (skillLines.length - 1) * skillLineHeight +
103
- rowGap;
104
- }
105
-
106
- return { svg, height };
107
- }
108
-
109
- void Fragment;
package/teasr.toml DELETED
@@ -1,14 +0,0 @@
1
- [server]
2
- command = "npx serve metrics --listen 3123"
3
- url = "http://localhost:3123"
4
- timeout = 10000
5
-
6
- [output]
7
- dir = "./showcase"
8
- formats = ["png"]
9
-
10
- [[scenes]]
11
- type = "web"
12
- url = "/index.svg"
13
- name = "metrics-svg"
14
- viewport = { width = 1200, height = 900 }