Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .astro/data-store.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
[["Map",1,2],"meta::meta",["Map",3,4,5,6],"astro-version","5.3.0","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[]},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":\"shiki\",\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"responsiveImages\":false,\"serializeConfig\":false},\"legacy\":{\"collections\":false}}"]
[["Map",1,2],"meta::meta",["Map",3,4,5,6],"astro-version","5.18.1","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true,\"allowedDomains\":[],\"actionBodySizeLimit\":1048576},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false,\"staticImportMetaEnv\":false,\"chromeDevtoolsWorkspace\":false,\"failOnPrerenderConflict\":false,\"svgo\":false},\"legacy\":{\"collections\":false}}"]
2 changes: 1 addition & 1 deletion .astro/settings.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"_variables": {
"lastUpdateCheck": 1759260475499
"lastUpdateCheck": 1777380175180
}
}
1 change: 0 additions & 1 deletion .astro/types.d.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
/// <reference types="astro/client" />
/// <reference path="content.d.ts" />
6 changes: 4 additions & 2 deletions src/components/App.astro
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,19 @@ import SocialShare from './SocialShare.astro';

<style>
.App {
background-color: #0a0a0a;
background-color: var(--bg-primary);
text-align: center;
display: flex;
justify-content: center;
flex-direction: column;
min-height: 100vh;
transition: background-color 0.3s ease;
}

.App-header {
padding: 20px;
color: white;
color: var(--text-primary);
transition: color 0.3s ease;
}

.App-header a {
Expand Down
126 changes: 126 additions & 0 deletions src/components/DarkModeToggle.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
---
// Dark mode toggle component
---

<button class="dark-mode-toggle" id="darkModeToggle" aria-label="Toggle dark mode">
<svg class="sun-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
<svg class="moon-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
</button>

<script>
// Initialize dark mode
function initDarkMode() {
const toggle = document.getElementById('darkModeToggle');
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)');

// Check localStorage or system preference
const isDarkMode = localStorage.getItem('darkMode') === 'true' ||
(localStorage.getItem('darkMode') === null && prefersDark.matches);

if (isDarkMode) {
document.documentElement.classList.add('dark');
} else {
document.documentElement.classList.remove('dark');
}

// Toggle dark mode on button click
toggle?.addEventListener('click', () => {
const isDark = document.documentElement.classList.toggle('dark');
localStorage.setItem('darkMode', isDark);
});

// Listen for system preference changes
prefersDark.addEventListener('change', (e) => {
if (localStorage.getItem('darkMode') === null) {
if (e.matches) {
document.documentElement.classList.add('dark');
} else {
document.documentElement.classList.remove('dark');
}
}
});
}

// Run on page load
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initDarkMode);
} else {
initDarkMode();
}
</script>

<style>
.dark-mode-toggle {
background: none;
border: none;
color: var(--text-primary);
cursor: pointer;
padding: 0.5rem;
display: flex;
align-items: center;
justify-content: center;
border-radius: 8px;
transition: background-color 0.3s ease, color 0.3s ease;
width: 40px;
height: 40px;
}

.dark-mode-toggle:hover {
background-color: rgba(0, 0, 0, 0.1);
}

:global(.dark) .dark-mode-toggle:hover {
background-color: rgba(255, 255, 255, 0.1);
}

.dark-mode-toggle svg {
width: 24px;
height: 24px;
position: absolute;
transition: opacity 0.3s ease, transform 0.3s ease;
}

.sun-icon {
opacity: 1;
transform: rotate(0deg);
}

.moon-icon {
opacity: 0;
transform: rotate(-180deg);
}

:global(.dark) .sun-icon {
opacity: 0;
transform: rotate(180deg);
}

:global(.dark) .moon-icon {
opacity: 1;
transform: rotate(0deg);
}

@media (max-width: 768px) {
.dark-mode-toggle {
width: 36px;
height: 36px;
}

.dark-mode-toggle svg {
width: 20px;
height: 20px;
}
}
</style>
84 changes: 53 additions & 31 deletions src/components/IssueList.astro
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ if (repoInfo) {
</div>
</div>
<div class="Issue-Labels">
<span class="Issue-Label {issue.priority === 'good first issue' ? 'good-first-issue' : 'help-wanted'}">
<span class={`Issue-Label ${issue.priority === 'good first issue' ? 'good-first-issue' : 'help-wanted'}`}>
{issue.priority === 'good first issue' ? 'Good First Issue' : 'Help Wanted'}
</span>
</div>
Expand All @@ -152,6 +152,15 @@ if (repoInfo) {
margin-top: 1rem;
padding-top: 1rem;
border-top: 1px solid rgba(255, 255, 255, 0.1);
transition: border-color 0.3s ease;
}

:global(.dark) .Card-Issues {
border-top-color: rgba(255, 255, 255, 0.1);
}

:global:not(.dark) .Card-Issues {
border-top-color: rgba(0, 0, 0, 0.1);
}

.Issues-Header {
Expand All @@ -164,7 +173,7 @@ if (repoInfo) {
.Issues-Title {
font-size: 0.9rem;
font-weight: 600;
color: rgba(255, 255, 255, 0.9);
color: var(--text-primary);
margin: 0;
}

Expand Down Expand Up @@ -193,39 +202,63 @@ if (repoInfo) {
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 12px;
text-decoration: none;
color: inherit;
color: var(--text-primary);
transition: all 0.2s ease;
gap: 0.75rem;
}

:global(.dark) .Issue-Card {
background: rgba(255, 255, 255, 0.05);
border-color: rgba(255, 255, 255, 0.1);
}

:global:not(.dark) .Issue-Card {
background: rgba(0, 0, 0, 0.03);
border-color: rgba(0, 0, 0, 0.1);
}

.Issue-Card:hover {
background: rgba(255, 255, 255, 0.08);
border-color: rgba(102, 126, 234, 0.3);
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
box-shavar(--text-primary);
margin: 0 0 0.5rem 0;
line-height: 1.4;
font-weight: 500;
}

.Issue-Content {
flex: 1;
min-width: 0;
.Issue-Meta {
display: flex;
gap: 0.75rem;
align-items: center;
font-size: 0.75rem;
color: var(--text-secondary);
}

.Issue-Title {
font-size: 0.85rem;
color: rgba(255, 255, 255, 0.95);
margin: 0 0 0.5rem 0;
line-height: 1.4;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
line-height: 1.2;
font-weight: 500;
}

.Issue-Meta {
display: flex;
gap: 0.75rem;
align-items: center;
.Issue-Number {
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
background: rgba(255, 255, 255, 0.1);
padding: 0.125rem 0.375rem;
border-radius: 6px;
font-size: 0.7rem;
transition: background-color 0.3s ease;
}

:global(.dark) .Issue-Number {
background: rgba(255, 255, 255, 0.1);
}

:global:not(.dark) .Issue-Number {
background: rgba(0, 0, 0, 0.1)er;
font-size: 0.75rem;
color: rgba(255, 255, 255, 0.6);
}
Expand Down Expand Up @@ -264,25 +297,14 @@ if (repoInfo) {
}

.Issue-Label.help-wanted {
background: linear-gradient(135deg, rgba(59, 130, 246, 0.2) 0%, rgba(59, 130, 246, 0.1) 100%);
color: #60a5fa;
border: 1px solid rgba(59, 130, 246, 0.3);
box-shadow: 0 2px 4px rgba(59, 130, 246, 0.1);
}

.no-issues {
text-align: center;
padding: 2rem 1rem;
color: rgba(255, 255, 255, 0.6);
}

.no-issues-icon {
font-size: 2rem;
margin-bottom: 0.75rem;
opacity: 0.7;
backgrovar(--text-secondary);
}

.no-issues-text {
font-size: 0.9rem;
font-weight: 500;
margin-bottom: 0.25rem;
color: var(--text-primary)t {
font-size: 0.9rem;
font-weight: 500;
margin-bottom: 0.25rem;
Expand Down
Loading