commit-report 1.0.1 → 1.0.2
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/README.md +2 -2
- package/dist/index.js +1794 -463
- package/dist/index.js.map +1 -1
- package/package.json +5 -3
- package/templates/report-scripts/00-advanced-derived.html +462 -0
- package/templates/report-scripts/00-filter-state.html +374 -0
- package/templates/report-scripts/00-report-controls.html +272 -0
- package/templates/report-scripts/01-core.html +255 -0
- package/templates/report-scripts/02-commit-details.html +275 -0
- package/templates/report-scripts/03-basic-charts.html +378 -0
- package/templates/report-scripts/04-trend-charts.html +309 -0
- package/templates/report-scripts/05-tables-team-stability.html +372 -0
- package/templates/report-scripts/06-pressure-churn.html +339 -0
- package/templates/report-scripts/07-collab-debt-ai.html +534 -0
- package/templates/report-scripts/08-engineering.html +200 -0
- package/templates/report-scripts/09-extensions.html +313 -0
- package/templates/report-scripts/10-runtime.html +54 -0
- package/templates/report-sections/01-overview.html +342 -0
- package/templates/report-sections/02-advanced.html +406 -0
- package/templates/report.html +40 -1998
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
<!-- Header -->
|
|
2
|
+
<header class="flex flex-col md:flex-row md:items-center md:justify-between gap-4 mb-6">
|
|
3
|
+
<div>
|
|
4
|
+
<h1 class="text-3xl font-bold text-slate-900 dark:text-white">
|
|
5
|
+
<span class="text-primary-500">commitx</span> Report
|
|
6
|
+
</h1>
|
|
7
|
+
<p class="text-sm text-slate-500 dark:text-slate-400 mt-1" id="meta-info"></p>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="flex items-center gap-4">
|
|
10
|
+
<span class="text-sm text-slate-500 dark:text-slate-400" id="time-range"></span>
|
|
11
|
+
<button id="theme-toggle"
|
|
12
|
+
class="p-2 rounded-lg bg-slate-200 dark:bg-slate-700 hover:bg-slate-300 dark:hover:bg-slate-600 transition-colors"
|
|
13
|
+
title="切换主题">
|
|
14
|
+
<svg id="icon-sun" class="w-5 h-5 hidden dark:block" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
15
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z" />
|
|
16
|
+
</svg>
|
|
17
|
+
<svg id="icon-moon" class="w-5 h-5 block dark:hidden" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
18
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z" />
|
|
19
|
+
</svg>
|
|
20
|
+
</button>
|
|
21
|
+
</div>
|
|
22
|
+
</header>
|
|
23
|
+
|
|
24
|
+
<!-- Global Controls -->
|
|
25
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-4 shadow-sm border border-slate-200 dark:border-slate-700 mb-4">
|
|
26
|
+
<div class="flex flex-col xl:flex-row xl:items-end xl:justify-between gap-4">
|
|
27
|
+
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-[1fr_1fr_auto] gap-3 flex-1">
|
|
28
|
+
<label class="text-sm">
|
|
29
|
+
<span class="block text-slate-500 dark:text-slate-400 mb-1">全局作者</span>
|
|
30
|
+
<select id="global-author-filter"
|
|
31
|
+
class="w-full px-3 py-2 rounded-lg bg-slate-50 dark:bg-slate-700 border border-slate-200 dark:border-slate-600 focus:outline-none focus:ring-2 focus:ring-primary-500">
|
|
32
|
+
<option value="">全部作者</option>
|
|
33
|
+
</select>
|
|
34
|
+
</label>
|
|
35
|
+
<label class="text-sm">
|
|
36
|
+
<span class="block text-slate-500 dark:text-slate-400 mb-1">全局目录</span>
|
|
37
|
+
<select id="global-directory-filter"
|
|
38
|
+
class="w-full px-3 py-2 rounded-lg bg-slate-50 dark:bg-slate-700 border border-slate-200 dark:border-slate-600 focus:outline-none focus:ring-2 focus:ring-primary-500">
|
|
39
|
+
<option value="">全部目录</option>
|
|
40
|
+
</select>
|
|
41
|
+
</label>
|
|
42
|
+
<button id="global-filter-reset" type="button"
|
|
43
|
+
class="inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg border border-slate-200 dark:border-slate-700 text-sm text-slate-600 dark:text-slate-300 hover:text-primary-500 hover:border-primary-300 transition-colors">
|
|
44
|
+
<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
45
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v6h6M20 20v-6h-6M5 19A9 9 0 0019 5M19 5h-5m5 0v5" />
|
|
46
|
+
</svg>
|
|
47
|
+
重置筛选
|
|
48
|
+
</button>
|
|
49
|
+
</div>
|
|
50
|
+
<div class="flex flex-col sm:flex-row sm:items-center gap-3">
|
|
51
|
+
<div id="global-filter-meta" class="text-xs text-slate-500 dark:text-slate-400 sm:text-right"></div>
|
|
52
|
+
<div class="flex items-center gap-2">
|
|
53
|
+
<button id="export-json" type="button"
|
|
54
|
+
class="inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg bg-slate-900 text-white dark:bg-slate-100 dark:text-slate-900 text-sm hover:opacity-90 transition-opacity">
|
|
55
|
+
<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
56
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 10v6m0 0l-3-3m3 3l3-3M5 4h14a2 2 0 012 2v12a2 2 0 01-2 2H5a2 2 0 01-2-2V6a2 2 0 012-2z" />
|
|
57
|
+
</svg>
|
|
58
|
+
JSON
|
|
59
|
+
</button>
|
|
60
|
+
<button id="export-csv" type="button"
|
|
61
|
+
class="inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg bg-primary-500 text-white text-sm hover:bg-primary-600 transition-colors">
|
|
62
|
+
<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
63
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 17v-6m4 6V7m4 10v-4M5 19h14M5 5h14" />
|
|
64
|
+
</svg>
|
|
65
|
+
CSV
|
|
66
|
+
</button>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
<!-- Summary Cards -->
|
|
73
|
+
<div class="grid grid-cols-2 md:grid-cols-4 gap-4 mb-4" id="summary-cards">
|
|
74
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-5 shadow-sm border border-slate-200 dark:border-slate-700">
|
|
75
|
+
<div class="text-3xl font-bold text-primary-500" id="card-commits">0</div>
|
|
76
|
+
<div class="text-sm text-slate-500 dark:text-slate-400 mt-1">提交次数</div>
|
|
77
|
+
</div>
|
|
78
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-5 shadow-sm border border-slate-200 dark:border-slate-700">
|
|
79
|
+
<div class="text-3xl font-bold text-emerald-500" id="card-added">0</div>
|
|
80
|
+
<div class="text-sm text-slate-500 dark:text-slate-400 mt-1">新增行数</div>
|
|
81
|
+
</div>
|
|
82
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-5 shadow-sm border border-slate-200 dark:border-slate-700">
|
|
83
|
+
<div class="text-3xl font-bold text-rose-500" id="card-deleted">0</div>
|
|
84
|
+
<div class="text-sm text-slate-500 dark:text-slate-400 mt-1">删除行数</div>
|
|
85
|
+
</div>
|
|
86
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-5 shadow-sm border border-slate-200 dark:border-slate-700">
|
|
87
|
+
<div class="text-3xl font-bold text-amber-500" id="card-files">0</div>
|
|
88
|
+
<div class="text-sm text-slate-500 dark:text-slate-400 mt-1">变更文件数</div>
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
<!-- Quality Cards -->
|
|
93
|
+
<div class="grid grid-cols-2 md:grid-cols-4 gap-4 mb-4" id="quality-cards">
|
|
94
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-5 shadow-sm border border-slate-200 dark:border-slate-700">
|
|
95
|
+
<div class="text-3xl font-bold text-violet-500" id="card-avg-files">0</div>
|
|
96
|
+
<div class="text-sm text-slate-500 dark:text-slate-400 mt-1">平均文件/提交</div>
|
|
97
|
+
</div>
|
|
98
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-5 shadow-sm border border-slate-200 dark:border-slate-700">
|
|
99
|
+
<div class="text-3xl font-bold text-cyan-500" id="card-avg-lines">0</div>
|
|
100
|
+
<div class="text-sm text-slate-500 dark:text-slate-400 mt-1">平均行数/提交</div>
|
|
101
|
+
</div>
|
|
102
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-5 shadow-sm border border-slate-200 dark:border-slate-700">
|
|
103
|
+
<div class="text-3xl font-bold text-orange-500" id="card-churn">0%</div>
|
|
104
|
+
<div class="text-sm text-slate-500 dark:text-slate-400 mt-1">代码流失率</div>
|
|
105
|
+
</div>
|
|
106
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-5 shadow-sm border border-slate-200 dark:border-slate-700">
|
|
107
|
+
<div class="text-3xl font-bold text-pink-500" id="card-streak">0</div>
|
|
108
|
+
<div class="text-sm text-slate-500 dark:text-slate-400 mt-1">最长连续天数</div>
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
|
|
112
|
+
<!-- AI Usage Card -->
|
|
113
|
+
<div class="grid grid-cols-1 gap-4 mb-8" id="ai-usage-card" style="display: none;">
|
|
114
|
+
<div class="bg-gradient-to-br from-purple-50 to-blue-50 dark:from-purple-900/20 dark:to-blue-900/20 rounded-xl p-6 shadow-sm border border-purple-200 dark:border-purple-700">
|
|
115
|
+
<div class="flex items-center justify-between">
|
|
116
|
+
<div class="flex items-center gap-4">
|
|
117
|
+
<div class="p-3 rounded-xl bg-white/80 dark:bg-slate-800/80 text-purple-600 dark:text-purple-400">
|
|
118
|
+
<svg class="w-9 h-9" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
119
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
|
|
120
|
+
</svg>
|
|
121
|
+
</div>
|
|
122
|
+
<div>
|
|
123
|
+
<div class="text-4xl font-bold text-purple-600 dark:text-purple-400" id="card-ai-percentage">0%</div>
|
|
124
|
+
<div class="text-sm text-slate-600 dark:text-slate-300 mt-1">AI 代码占比(估算)</div>
|
|
125
|
+
<div class="text-xs text-slate-500 dark:text-slate-400 mt-1">
|
|
126
|
+
<span id="card-ai-lines">0</span> / <span id="card-total-lines">0</span> 行
|
|
127
|
+
</div>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
<div class="text-right">
|
|
131
|
+
<div class="text-2xl font-semibold text-slate-700 dark:text-slate-300" id="card-suspicious-commits">0</div>
|
|
132
|
+
<div class="text-xs text-slate-500 dark:text-slate-400 mt-1">可疑提交数</div>
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
|
|
138
|
+
<!-- Health Summary -->
|
|
139
|
+
<section id="health-summary" class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-200 dark:border-slate-700 mb-6">
|
|
140
|
+
<div class="flex flex-col lg:flex-row lg:items-start lg:justify-between gap-5">
|
|
141
|
+
<div class="lg:max-w-sm">
|
|
142
|
+
<div class="text-sm text-slate-500 dark:text-slate-400 mb-2">健康度总评</div>
|
|
143
|
+
<div class="flex items-end gap-3">
|
|
144
|
+
<div id="health-summary-grade" class="text-5xl font-bold text-primary-500">-</div>
|
|
145
|
+
<div>
|
|
146
|
+
<div id="health-summary-score" class="text-xl font-semibold text-slate-800 dark:text-slate-100">0 / 100</div>
|
|
147
|
+
<div id="health-summary-label" class="text-sm text-slate-500 dark:text-slate-400">等待分析</div>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
</div>
|
|
151
|
+
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 flex-1">
|
|
152
|
+
<div class="rounded-lg bg-emerald-50 dark:bg-emerald-900/10 border border-emerald-100 dark:border-emerald-900/30 p-4">
|
|
153
|
+
<div class="flex items-center gap-2 text-sm font-semibold text-emerald-700 dark:text-emerald-300 mb-3">
|
|
154
|
+
<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
155
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" />
|
|
156
|
+
</svg>
|
|
157
|
+
本期亮点
|
|
158
|
+
</div>
|
|
159
|
+
<ul id="health-summary-highlights" class="space-y-2 text-sm text-slate-600 dark:text-slate-300"></ul>
|
|
160
|
+
</div>
|
|
161
|
+
<div class="rounded-lg bg-rose-50 dark:bg-rose-900/10 border border-rose-100 dark:border-rose-900/30 p-4">
|
|
162
|
+
<div class="flex items-center gap-2 text-sm font-semibold text-rose-700 dark:text-rose-300 mb-3">
|
|
163
|
+
<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
164
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01M5.07 19h13.86c1.54 0 2.5-1.67 1.73-3L13.73 4c-.77-1.33-2.69-1.33-3.46 0L3.34 16c-.77 1.33.19 3 1.73 3z" />
|
|
165
|
+
</svg>
|
|
166
|
+
风险提醒
|
|
167
|
+
</div>
|
|
168
|
+
<ul id="health-summary-risks" class="space-y-2 text-sm text-slate-600 dark:text-slate-300"></ul>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
</section>
|
|
173
|
+
|
|
174
|
+
<!-- Heatmap -->
|
|
175
|
+
<div id="detail-section" class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-200 dark:border-slate-700 mb-6">
|
|
176
|
+
<h2 class="text-lg font-semibold mb-4">提交热力图</h2>
|
|
177
|
+
<div id="heatmap" class="overflow-x-auto"></div>
|
|
178
|
+
</div>
|
|
179
|
+
|
|
180
|
+
<!-- Personal Commit Details -->
|
|
181
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-200 dark:border-slate-700 mb-6">
|
|
182
|
+
<div class="flex flex-col lg:flex-row lg:items-end lg:justify-between gap-4 mb-5">
|
|
183
|
+
<div>
|
|
184
|
+
<h2 class="text-lg font-semibold">个人提交明细</h2>
|
|
185
|
+
<p class="text-sm text-slate-500 dark:text-slate-400 mt-1">按作者和时间区间查看每次提交的文件变更</p>
|
|
186
|
+
</div>
|
|
187
|
+
<div class="grid grid-cols-1 sm:grid-cols-3 gap-3 w-full lg:w-auto">
|
|
188
|
+
<label class="text-sm">
|
|
189
|
+
<span class="block text-slate-500 dark:text-slate-400 mb-1">作者</span>
|
|
190
|
+
<select id="detail-author"
|
|
191
|
+
class="w-full sm:w-48 px-3 py-2 rounded-lg bg-slate-50 dark:bg-slate-700 border border-slate-200 dark:border-slate-600 focus:outline-none focus:ring-2 focus:ring-primary-500">
|
|
192
|
+
</select>
|
|
193
|
+
</label>
|
|
194
|
+
<label class="text-sm">
|
|
195
|
+
<span class="block text-slate-500 dark:text-slate-400 mb-1">开始日期</span>
|
|
196
|
+
<input id="detail-from" type="date"
|
|
197
|
+
class="w-full px-3 py-2 rounded-lg bg-slate-50 dark:bg-slate-700 border border-slate-200 dark:border-slate-600 focus:outline-none focus:ring-2 focus:ring-primary-500" />
|
|
198
|
+
</label>
|
|
199
|
+
<label class="text-sm">
|
|
200
|
+
<span class="block text-slate-500 dark:text-slate-400 mb-1">结束日期</span>
|
|
201
|
+
<input id="detail-to" type="date"
|
|
202
|
+
class="w-full px-3 py-2 rounded-lg bg-slate-50 dark:bg-slate-700 border border-slate-200 dark:border-slate-600 focus:outline-none focus:ring-2 focus:ring-primary-500" />
|
|
203
|
+
</label>
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
|
|
207
|
+
<div class="grid grid-cols-2 md:grid-cols-4 gap-3 mb-5">
|
|
208
|
+
<div class="p-4 rounded-lg bg-slate-50 dark:bg-slate-700/50">
|
|
209
|
+
<div id="detail-total" class="text-2xl font-bold text-primary-500">0</div>
|
|
210
|
+
<div class="text-xs text-slate-500 dark:text-slate-400 mt-1">提交次数</div>
|
|
211
|
+
</div>
|
|
212
|
+
<div class="p-4 rounded-lg bg-slate-50 dark:bg-slate-700/50">
|
|
213
|
+
<div id="detail-days" class="text-2xl font-bold text-amber-500">0</div>
|
|
214
|
+
<div class="text-xs text-slate-500 dark:text-slate-400 mt-1">提交天数</div>
|
|
215
|
+
</div>
|
|
216
|
+
<div class="p-4 rounded-lg bg-slate-50 dark:bg-slate-700/50">
|
|
217
|
+
<div id="detail-added" class="text-2xl font-bold text-emerald-500">+0</div>
|
|
218
|
+
<div class="text-xs text-slate-500 dark:text-slate-400 mt-1">新增行数</div>
|
|
219
|
+
</div>
|
|
220
|
+
<div class="p-4 rounded-lg bg-slate-50 dark:bg-slate-700/50">
|
|
221
|
+
<div id="detail-deleted" class="text-2xl font-bold text-rose-500">-0</div>
|
|
222
|
+
<div class="text-xs text-slate-500 dark:text-slate-400 mt-1">删除行数</div>
|
|
223
|
+
</div>
|
|
224
|
+
</div>
|
|
225
|
+
|
|
226
|
+
<div class="grid grid-cols-1 lg:grid-cols-3 gap-5">
|
|
227
|
+
<div class="lg:col-span-1">
|
|
228
|
+
<h3 class="text-sm font-semibold text-slate-600 dark:text-slate-300 mb-3">几点提交</h3>
|
|
229
|
+
<div id="detail-hourly" class="space-y-2"></div>
|
|
230
|
+
</div>
|
|
231
|
+
<div class="lg:col-span-2">
|
|
232
|
+
<h3 class="text-sm font-semibold text-slate-600 dark:text-slate-300 mb-3">每天提交</h3>
|
|
233
|
+
<div id="detail-daily" class="space-y-3 max-h-[360px] overflow-y-auto pr-1"></div>
|
|
234
|
+
</div>
|
|
235
|
+
</div>
|
|
236
|
+
|
|
237
|
+
<div class="mt-6">
|
|
238
|
+
<div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2 mb-3">
|
|
239
|
+
<h3 class="text-sm font-semibold text-slate-600 dark:text-slate-300">每次提交变更</h3>
|
|
240
|
+
<div id="detail-list-meta" class="text-xs text-slate-500 dark:text-slate-400"></div>
|
|
241
|
+
</div>
|
|
242
|
+
<div id="detail-commits" class="space-y-3 max-h-[520px] overflow-y-auto pr-1"></div>
|
|
243
|
+
<div id="detail-pagination" class="flex items-center justify-end gap-2 mt-3"></div>
|
|
244
|
+
</div>
|
|
245
|
+
</div>
|
|
246
|
+
|
|
247
|
+
<!-- AI Usage Trend -->
|
|
248
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-200 dark:border-slate-700 mb-6" id="ai-trend-section" style="display: none;">
|
|
249
|
+
<h2 class="text-lg font-semibold mb-4">AI 使用趋势</h2>
|
|
250
|
+
<div id="ai-trend-chart"></div>
|
|
251
|
+
</div>
|
|
252
|
+
|
|
253
|
+
<!-- Two column charts -->
|
|
254
|
+
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
|
|
255
|
+
<!-- Weekly Trend -->
|
|
256
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-200 dark:border-slate-700">
|
|
257
|
+
<h2 class="text-lg font-semibold mb-4">周趋势图</h2>
|
|
258
|
+
<div id="weekly-trend-chart"></div>
|
|
259
|
+
</div>
|
|
260
|
+
|
|
261
|
+
<!-- Cumulative Lines -->
|
|
262
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-200 dark:border-slate-700">
|
|
263
|
+
<h2 class="text-lg font-semibold mb-4">累计代码量曲线</h2>
|
|
264
|
+
<div id="cumulative-chart"></div>
|
|
265
|
+
</div>
|
|
266
|
+
</div>
|
|
267
|
+
|
|
268
|
+
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
|
|
269
|
+
<!-- Hourly Distribution -->
|
|
270
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-200 dark:border-slate-700">
|
|
271
|
+
<h2 class="text-lg font-semibold mb-4">提交时间分布 (24h)</h2>
|
|
272
|
+
<div id="hourly-chart"></div>
|
|
273
|
+
</div>
|
|
274
|
+
|
|
275
|
+
<!-- Weekday Distribution -->
|
|
276
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-200 dark:border-slate-700">
|
|
277
|
+
<h2 class="text-lg font-semibold mb-4">周几分布</h2>
|
|
278
|
+
<div id="weekday-chart"></div>
|
|
279
|
+
</div>
|
|
280
|
+
</div>
|
|
281
|
+
|
|
282
|
+
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
|
|
283
|
+
<!-- File Types -->
|
|
284
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-200 dark:border-slate-700">
|
|
285
|
+
<h2 class="text-lg font-semibold mb-4">文件类型占比</h2>
|
|
286
|
+
<div id="filetype-chart" class="flex justify-center"></div>
|
|
287
|
+
</div>
|
|
288
|
+
|
|
289
|
+
<!-- Commit Type Distribution -->
|
|
290
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-200 dark:border-slate-700">
|
|
291
|
+
<h2 class="text-lg font-semibold mb-4">提交类型分布</h2>
|
|
292
|
+
<div id="commit-type-chart" class="flex justify-center"></div>
|
|
293
|
+
</div>
|
|
294
|
+
</div>
|
|
295
|
+
|
|
296
|
+
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
|
|
297
|
+
<!-- Author Ranking -->
|
|
298
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-200 dark:border-slate-700">
|
|
299
|
+
<h2 class="text-lg font-semibold mb-4">作者贡献排行</h2>
|
|
300
|
+
<div id="author-chart"></div>
|
|
301
|
+
</div>
|
|
302
|
+
|
|
303
|
+
<!-- Directory Ranking -->
|
|
304
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-200 dark:border-slate-700">
|
|
305
|
+
<h2 class="text-lg font-semibold mb-4">活跃目录 TOP 10</h2>
|
|
306
|
+
<div id="directory-chart"></div>
|
|
307
|
+
</div>
|
|
308
|
+
</div>
|
|
309
|
+
|
|
310
|
+
<!-- Busiest Day & Extra Stats -->
|
|
311
|
+
<div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-200 dark:border-slate-700 mb-6">
|
|
312
|
+
<h2 class="text-lg font-semibold mb-4">更多统计</h2>
|
|
313
|
+
<div class="grid grid-cols-1 md:grid-cols-3 gap-4 text-sm">
|
|
314
|
+
<div class="flex items-center gap-3 p-3 bg-slate-50 dark:bg-slate-700/50 rounded-lg">
|
|
315
|
+
<svg class="w-6 h-6 text-primary-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
316
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" />
|
|
317
|
+
</svg>
|
|
318
|
+
<div>
|
|
319
|
+
<div class="text-slate-500 dark:text-slate-400">最繁忙的一天</div>
|
|
320
|
+
<div class="font-semibold" id="stat-busiest-day">-</div>
|
|
321
|
+
</div>
|
|
322
|
+
</div>
|
|
323
|
+
<div class="flex items-center gap-3 p-3 bg-slate-50 dark:bg-slate-700/50 rounded-lg">
|
|
324
|
+
<svg class="w-6 h-6 text-primary-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
325
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
|
|
326
|
+
</svg>
|
|
327
|
+
<div>
|
|
328
|
+
<div class="text-slate-500 dark:text-slate-400">最早提交</div>
|
|
329
|
+
<div class="font-semibold" id="stat-first-commit">-</div>
|
|
330
|
+
</div>
|
|
331
|
+
</div>
|
|
332
|
+
<div class="flex items-center gap-3 p-3 bg-slate-50 dark:bg-slate-700/50 rounded-lg">
|
|
333
|
+
<svg class="w-6 h-6 text-primary-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
334
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
|
|
335
|
+
</svg>
|
|
336
|
+
<div>
|
|
337
|
+
<div class="text-slate-500 dark:text-slate-400">最近提交</div>
|
|
338
|
+
<div class="font-semibold" id="stat-last-commit">-</div>
|
|
339
|
+
</div>
|
|
340
|
+
</div>
|
|
341
|
+
</div>
|
|
342
|
+
</div>
|