Fix styling

This commit is contained in:
2025-12-12 22:41:21 +00:00
parent a5b522c996
commit a5d69ccb86
29 changed files with 610 additions and 542 deletions
+67 -66
View File
@@ -1,6 +1,7 @@
<script setup>
import { ref, computed, onMounted, watch, inject } from 'vue'
import { useRoute, RouterLink } from 'vue-router'
import Card from '../components/Card.vue'
import PageHeader from '../components/PageHeader.vue'
import LoadingState from '../components/LoadingState.vue'
import ErrorState from '../components/ErrorState.vue'
@@ -98,27 +99,27 @@ watch(globalData, loadContributor)
:src="contributor.avatar_url"
:name="contributor.login"
size="2xl"
class="shadow-modern"
class="shadow-lg"
/>
<div class="text-center md:text-left">
<h1 class="text-4xl font-bold gradient-text">
<h1 class="text-4xl font-bold bg-gradient-to-r from-primary-600 to-accent-600 dark:from-primary-400 dark:to-accent-400 bg-clip-text text-transparent">
{{ contributor.name || contributor.login }}
</h1>
<p class="text-xl text-gray-500 dark:text-gray-400 mt-1">
<p class="text-xl text-gray-600 dark:text-gray-400 mt-1">
<GithubLink :url="`https://github.com/${contributor.login}`">
@{{ contributor.login }}
</GithubLink>
</p>
<div class="flex items-center justify-center md:justify-start space-x-4 mt-4">
<div class="score-card rounded-lg px-4 py-2">
<span class="text-sm text-gray-500 dark:text-gray-400">Score:</span>
<span class="text-2xl font-bold gradient-text ml-2">
<div class="bg-gradient-to-r from-pink-400/10 to-purple-400/10 dark:from-pink-400/5 dark:to-purple-400/5 border border-pink-400/20 dark:border-pink-400/10 rounded-lg px-4 py-2">
<span class="text-sm text-gray-600 dark:text-gray-400">Score:</span>
<span class="text-2xl font-bold bg-gradient-to-r from-primary-600 to-accent-600 dark:from-primary-400 dark:to-accent-400 bg-clip-text text-transparent ml-2">
{{ formatNumber(contributor.score?.total || contributor.score || 0) }}
</span>
</div>
<div v-if="contributor.score?.rank" class="text-sm text-gray-500 dark:text-gray-400">
<div v-if="contributor.score?.rank" class="text-sm text-gray-600 dark:text-gray-400">
Rank #{{ contributor.score.rank }}
<span v-if="contributor.score?.percentile_rank">
(Top {{ formatPercent(contributor.score.percentile_rank) }})
@@ -177,136 +178,136 @@ watch(globalData, loadContributor)
<div class="container mx-auto">
<div class="grid md:grid-cols-2 gap-6">
<!-- Code Stats -->
<div class="card">
<h3 class="text-lg font-semibold text-gray-800 dark:text-white mb-4">
<Card>
<h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-4">
<i class="fas fa-code text-green-500 mr-2"></i>Code Contributions
</h3>
<div class="space-y-4">
<div class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Lines Added</span>
<span class="text-gray-700 dark:text-gray-300">Lines Added</span>
<span class="text-green-500 font-semibold">
+{{ formatNumber(contributor.lines_added || 0) }}
</span>
</div>
<div class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Lines Deleted</span>
<span class="text-gray-700 dark:text-gray-300">Lines Deleted</span>
<span class="text-red-500 font-semibold">
-{{ formatNumber(contributor.lines_deleted || 0) }}
</span>
</div>
<div v-if="contributor.meaningful_lines_added !== undefined" class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Meaningful Lines Added</span>
<span class="text-gray-700 dark:text-gray-300">Meaningful Lines Added</span>
<span class="text-emerald-500 font-semibold">
+{{ formatNumber(contributor.meaningful_lines_added || 0) }}
</span>
</div>
<div v-if="contributor.meaningful_lines_deleted !== undefined" class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Meaningful Lines Deleted</span>
<span class="text-gray-700 dark:text-gray-300">Meaningful Lines Deleted</span>
<span class="text-rose-500 font-semibold">
-{{ formatNumber(contributor.meaningful_lines_deleted || 0) }}
</span>
</div>
<div v-if="contributor.comment_lines_added !== undefined" class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Comment Lines Added</span>
<span class="text-gray-700 dark:text-gray-300">Comment Lines Added</span>
<span class="text-cyan-500 font-semibold">
+{{ formatNumber(contributor.comment_lines_added || 0) }}
</span>
</div>
<div v-if="contributor.comment_lines_deleted !== undefined" class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Comment Lines Deleted</span>
<span class="text-gray-700 dark:text-gray-300">Comment Lines Deleted</span>
<span class="text-amber-500 font-semibold">
-{{ formatNumber(contributor.comment_lines_deleted || 0) }}
</span>
</div>
<div class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Files Changed</span>
<span class="text-gray-800 dark:text-white font-semibold">
<span class="text-gray-700 dark:text-gray-300">Files Changed</span>
<span class="text-gray-900 dark:text-white font-semibold">
{{ formatNumber(contributor.files_changed || 0) }}
</span>
</div>
<div v-if="contributor.avg_pr_size" class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Avg PR Size</span>
<span class="text-gray-800 dark:text-white font-semibold">
<span class="text-gray-700 dark:text-gray-300">Avg PR Size</span>
<span class="text-gray-900 dark:text-white font-semibold">
{{ formatNumber(Math.round(contributor.avg_pr_size)) }} lines
</span>
</div>
</div>
</div>
</Card>
<!-- Review Stats -->
<div class="card">
<h3 class="text-lg font-semibold text-gray-800 dark:text-white mb-4">
<Card>
<h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-4">
<i class="fas fa-comments text-purple-500 mr-2"></i>Review Activity
</h3>
<div class="space-y-4">
<div class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Reviews Given</span>
<span class="text-gray-800 dark:text-white font-semibold">
<span class="text-gray-700 dark:text-gray-300">Reviews Given</span>
<span class="text-gray-900 dark:text-white font-semibold">
{{ formatNumber(contributor.reviews_given || 0) }}
</span>
</div>
<div class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Approvals</span>
<span class="text-gray-700 dark:text-gray-300">Approvals</span>
<span class="text-green-500 font-semibold">
{{ formatNumber(contributor.approvals_given || 0) }}
</span>
</div>
<div class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Changes Requested</span>
<span class="text-gray-700 dark:text-gray-300">Changes Requested</span>
<span class="text-orange-500 font-semibold">
{{ formatNumber(contributor.changes_requested || 0) }}
</span>
</div>
<div class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Review Comments</span>
<span class="text-gray-800 dark:text-white font-semibold">
<span class="text-gray-700 dark:text-gray-300">Review Comments</span>
<span class="text-gray-900 dark:text-white font-semibold">
{{ formatNumber(contributor.review_comments || 0) }}
</span>
</div>
<div v-if="contributor.avg_review_time_hours" class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Avg Review Time</span>
<span class="text-gray-800 dark:text-white font-semibold">
<span class="text-gray-700 dark:text-gray-300">Avg Review Time</span>
<span class="text-gray-900 dark:text-white font-semibold">
{{ formatDuration(contributor.avg_review_time_hours) }}
</span>
</div>
</div>
</div>
</Card>
<!-- Issue Stats -->
<div v-if="contributor.issues_opened || contributor.issues_closed || contributor.issue_comments || contributor.issue_references_in_commits" class="card">
<h3 class="text-lg font-semibold text-gray-800 dark:text-white mb-4">
<Card v-if="contributor.issues_opened || contributor.issues_closed || contributor.issue_comments || contributor.issue_references_in_commits">
<h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-4">
<i class="fas fa-bug text-red-500 mr-2"></i>Issue Activity
</h3>
<div class="space-y-4">
<div class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Issues Opened</span>
<span class="text-gray-700 dark:text-gray-300">Issues Opened</span>
<span class="text-red-500 font-semibold">
{{ formatNumber(contributor.issues_opened || 0) }}
</span>
</div>
<div class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Issues Closed</span>
<span class="text-gray-700 dark:text-gray-300">Issues Closed</span>
<span class="text-green-500 font-semibold">
{{ formatNumber(contributor.issues_closed || 0) }}
</span>
</div>
<div class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Issue Comments</span>
<span class="text-gray-700 dark:text-gray-300">Issue Comments</span>
<span class="text-blue-500 font-semibold">
{{ formatNumber(contributor.issue_comments || 0) }}
</span>
</div>
<div class="flex items-center justify-between">
<span class="text-gray-600 dark:text-gray-300">Issue References in Commits</span>
<span class="text-gray-700 dark:text-gray-300">Issue References in Commits</span>
<span class="text-purple-500 font-semibold">
{{ formatNumber(contributor.issue_references_in_commits || 0) }}
</span>
</div>
</div>
</div>
</Card>
</div>
</div>
</section>
@@ -314,9 +315,9 @@ watch(globalData, loadContributor)
<!-- Score Breakdown -->
<section v-if="contributor.score?.breakdown" class="py-8 px-4">
<div class="container mx-auto">
<div class="card">
<h3 class="text-lg font-semibold text-gray-800 dark:text-white mb-4">
<i class="fas fa-chart-pie gradient-text mr-2"></i>Score Breakdown
<Card>
<h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-4">
<i class="fas fa-chart-pie bg-gradient-to-r from-primary-600 to-accent-600 dark:from-primary-400 dark:to-accent-400 bg-clip-text text-transparent mr-2"></i>Score Breakdown
</h3>
<div class="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-8 gap-4">
@@ -324,60 +325,60 @@ watch(globalData, loadContributor)
<div class="text-2xl font-bold text-green-500">
{{ formatNumber(contributor.score.breakdown.commits || 0) }}
</div>
<div class="text-xs text-gray-500 dark:text-gray-400 mt-1">Commits</div>
<div class="text-xs text-gray-400 dark:text-gray-500">{{ contributor.commit_count || 0 }} × 10 pts</div>
<div class="text-xs text-gray-600 dark:text-gray-400 mt-1">Commits</div>
<div class="text-xs text-gray-600 dark:text-gray-400">{{ contributor.commit_count || 0 }} × 10 pts</div>
</div>
<div class="text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50">
<div class="text-2xl font-bold text-blue-500">
{{ formatNumber(contributor.score.breakdown.prs || 0) }}
</div>
<div class="text-xs text-gray-500 dark:text-gray-400 mt-1">PRs</div>
<div class="text-xs text-gray-400 dark:text-gray-500">{{ contributor.prs_opened || 0 }} opened + {{ contributor.prs_merged || 0 }} merged</div>
<div class="text-xs text-gray-600 dark:text-gray-400 mt-1">PRs</div>
<div class="text-xs text-gray-600 dark:text-gray-400">{{ contributor.prs_opened || 0 }} opened + {{ contributor.prs_merged || 0 }} merged</div>
</div>
<div class="text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50">
<div class="text-2xl font-bold text-purple-500">
{{ formatNumber(contributor.score.breakdown.reviews || 0) }}
</div>
<div class="text-xs text-gray-500 dark:text-gray-400 mt-1">Reviews</div>
<div class="text-xs text-gray-400 dark:text-gray-500">{{ contributor.reviews_given || 0 }} × 30 pts</div>
<div class="text-xs text-gray-600 dark:text-gray-400 mt-1">Reviews</div>
<div class="text-xs text-gray-600 dark:text-gray-400">{{ contributor.reviews_given || 0 }} × 30 pts</div>
</div>
<div class="text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50">
<div class="text-2xl font-bold text-pink-500">
{{ formatNumber(contributor.score.breakdown.comments || 0) }}
</div>
<div class="text-xs text-gray-500 dark:text-gray-400 mt-1">Comments</div>
<div class="text-xs text-gray-400 dark:text-gray-500">{{ contributor.review_comments || 0 }} × 5 pts</div>
<div class="text-xs text-gray-600 dark:text-gray-400 mt-1">Comments</div>
<div class="text-xs text-gray-600 dark:text-gray-400">{{ contributor.review_comments || 0 }} × 5 pts</div>
</div>
<div class="text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50">
<div class="text-2xl font-bold text-red-500">
{{ formatNumber(contributor.score.breakdown.issues || 0) }}
</div>
<div class="text-xs text-gray-500 dark:text-gray-400 mt-1">Issues</div>
<div class="text-xs text-gray-400 dark:text-gray-500">opened, closed, comments, refs</div>
<div class="text-xs text-gray-600 dark:text-gray-400 mt-1">Issues</div>
<div class="text-xs text-gray-600 dark:text-gray-400">opened, closed, comments, refs</div>
</div>
<div class="text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50">
<div class="text-2xl font-bold text-orange-500">
{{ formatNumber(contributor.score.breakdown.line_changes || 0) }}
</div>
<div class="text-xs text-gray-500 dark:text-gray-400 mt-1">Line Changes</div>
<div class="text-xs text-gray-400 dark:text-gray-500">meaningful lines × 0.1 pts</div>
<div class="text-xs text-gray-600 dark:text-gray-400 mt-1">Line Changes</div>
<div class="text-xs text-gray-600 dark:text-gray-400">meaningful lines × 0.1 pts</div>
</div>
<div class="text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50">
<div class="text-2xl font-bold text-yellow-500">
{{ formatNumber(contributor.score.breakdown.response_bonus || 0) }}
</div>
<div class="text-xs text-gray-500 dark:text-gray-400 mt-1">Response Bonus</div>
<div class="text-xs text-gray-400 dark:text-gray-500">fast review bonus</div>
<div class="text-xs text-gray-600 dark:text-gray-400 mt-1">Response Bonus</div>
<div class="text-xs text-gray-600 dark:text-gray-400">fast review bonus</div>
</div>
<div class="text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50">
<div class="text-2xl font-bold text-indigo-500">
{{ formatNumber(contributor.score.breakdown.out_of_hours || 0) }}
</div>
<div class="text-xs text-gray-500 dark:text-gray-400 mt-1">Out of Hours</div>
<div class="text-xs text-gray-400 dark:text-gray-500">{{ contributor.out_of_hours_count || 0 }} × 2 pts</div>
<div class="text-xs text-gray-600 dark:text-gray-400 mt-1">Out of Hours</div>
<div class="text-xs text-gray-600 dark:text-gray-400">{{ contributor.out_of_hours_count || 0 }} × 2 pts</div>
</div>
</div>
</div>
</Card>
</div>
</section>
@@ -386,10 +387,10 @@ watch(globalData, loadContributor)
<div class="container mx-auto">
<div class="grid md:grid-cols-2 gap-6">
<!-- Earned Achievements -->
<div v-if="contributor.achievements?.length" class="card">
<Card v-if="contributor.achievements?.length">
<div class="flex items-center justify-between mb-6">
<h3 class="text-lg font-semibold text-gray-800 dark:text-white">
<i class="fas fa-award gradient-text mr-2"></i>Achievements Earned
<h3 class="text-lg font-semibold text-gray-900 dark:text-white">
<i class="fas fa-award bg-gradient-to-r from-primary-600 to-accent-600 dark:from-primary-400 dark:to-accent-400 bg-clip-text text-transparent mr-2"></i>Achievements Earned
</h3>
<span class="px-2.5 py-1 rounded-full bg-gradient-to-r from-yellow-400 to-amber-500 text-white text-sm font-bold shadow-md">
{{ contributor.achievements.length }}
@@ -409,11 +410,11 @@ watch(globalData, loadContributor)
/>
</div>
</div>
</div>
</Card>
<!-- Progress to Next Achievements -->
<div class="card">
<h3 class="text-lg font-semibold text-gray-800 dark:text-white mb-6">
<Card>
<h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-6">
<i class="fas fa-chart-line text-primary-500 mr-2"></i>Next Achievements
</h3>
@@ -421,7 +422,7 @@ watch(globalData, loadContributor)
:contributor="contributor"
:max-display="6"
/>
</div>
</Card>
</div>
</div>
</section>
@@ -442,7 +443,7 @@ watch(globalData, loadContributor)
:to="`/repos/${repo}`"
class="inline-flex items-center px-3 py-1.5 rounded-full text-sm bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-primary-100 dark:hover:bg-primary-900/30 hover:text-primary-700 dark:hover:text-primary-300 transition-colors"
>
<i class="fas fa-code-branch text-gray-400 mr-2"></i>
<i class="fas fa-code-branch text-gray-600 dark:text-gray-400 mr-2"></i>
{{ repo }}
</RouterLink>
</div>