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 .github/workflows/labeler.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: PR Labeler
on:
pull_request_target:
pull_request:
jobs:
label:
runs-on: ubuntu-latest
Expand Down
22 changes: 11 additions & 11 deletions src/app/dashboard/settings/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -691,7 +691,7 @@ function SettingsPageContent() {
</div>

{/* Toggle Switch */}
<label className="flex items-center cursor-pointer select-none">
<label className="flex items-center cursor-pointer select-none"><span className="sr-only">Toggle setting</span>
<div className="relative">
<input
type="checkbox"
Expand Down Expand Up @@ -726,7 +726,7 @@ function SettingsPageContent() {
type="text"
value={`${window.location.origin}/u/${settings.github_login}`}
readOnly
className="flex-1 rounded-lg border border-[var(--border)] bg-[var(--control)] px-4 py-2 text-sm text-[var(--card-foreground)] focus:outline-none"
className="flex-1 rounded-lg border border-[var(--border)] bg-[var(--control)] px-4 py-2 text-sm text-[var(--card-foreground)] focus-visible:outline-none"
/>
<button
type="button"
Expand Down Expand Up @@ -821,7 +821,7 @@ function SettingsPageContent() {
maxLength={500}
rows={5}
placeholder="Write a short bio with **bold**, _italic_, `code`, or links."
className="w-full resize-y rounded-lg border border-[var(--border)] bg-[var(--control)] px-4 py-3 text-sm text-[var(--card-foreground)] focus:outline-none focus:ring-2 focus:ring-[var(--accent)]"
className="w-full resize-y rounded-lg border border-[var(--border)] bg-[var(--control)] px-4 py-3 text-sm text-[var(--card-foreground)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]"
/>

{showBioPreview && (
Expand Down Expand Up @@ -883,7 +883,7 @@ function SettingsPageContent() {
setTheme("default");
setIsDirty(true);
}}
className="accent-[var(--accent)] focus:ring-[var(--accent)]"
className="accent-[var(--accent)] focus-visible:ring-[var(--accent)]"
/>
</label>
<label className="flex cursor-pointer items-center justify-between rounded-lg border border-[var(--border)] bg-[var(--control)] px-4 py-3 text-[var(--foreground)]">
Expand All @@ -897,7 +897,7 @@ function SettingsPageContent() {
setTheme("colour-blind-friendly");
setIsDirty(true);
}}
className="accent-[var(--accent)] focus:ring-[var(--accent)]"
className="accent-[var(--accent)] focus-visible:ring-[var(--accent)]"
/>
</label>
</div>
Expand Down Expand Up @@ -944,7 +944,7 @@ function SettingsPageContent() {
</p>
</div>

<label className="flex items-center cursor-pointer select-none">
<label className="flex items-center cursor-pointer select-none"><span className="sr-only">Toggle setting</span>
<div className="relative">
<input
type="checkbox"
Expand Down Expand Up @@ -1058,7 +1058,7 @@ function SettingsPageContent() {
onChange={(e) => setRepoSearchQuery(e.target.value)}
placeholder="Type to search your repositories..."
aria-label="Search repositories to pin"
className="w-full rounded-lg border border-[var(--border)] bg-[var(--control)] px-4 py-2 text-sm text-[var(--card-foreground)] placeholder:text-[var(--muted-foreground)] focus:outline-none focus:ring-2 focus:ring-[var(--accent)] mb-4"
className="w-full rounded-lg border border-[var(--border)] bg-[var(--control)] px-4 py-2 text-sm text-[var(--card-foreground)] placeholder:text-[var(--muted-foreground)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] mb-4"
/>

{loadingRepos ? (
Expand Down Expand Up @@ -1118,7 +1118,7 @@ function SettingsPageContent() {
</p>
</div>

<label className="flex items-center cursor-pointer select-none">
<label className="flex items-center cursor-pointer select-none"><span className="sr-only">Toggle setting</span>
<div className="relative">
<input
type="checkbox"
Expand Down Expand Up @@ -1247,7 +1247,7 @@ function SettingsPageContent() {
}}
placeholder={settings.has_wakatime_key ? "•••••••••••••••• (Configured)" : "Enter your Wakatime API key"}
autoComplete="new-password"
className="flex-1 rounded-lg border border-[var(--border)] bg-[var(--control)] px-4 py-2 text-sm text-[var(--card-foreground)] focus:outline-none focus:ring-2 focus:ring-[var(--accent)]"
className="flex-1 rounded-lg border border-[var(--border)] bg-[var(--control)] px-4 py-2 text-sm text-[var(--card-foreground)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]"
/>
<button
type="button"
Expand Down Expand Up @@ -1292,7 +1292,7 @@ function SettingsPageContent() {
setIsDirty(true);
}}
placeholder="https://discord.com/api/webhooks/..."
className="flex-1 rounded-lg border border-[var(--border)] bg-[var(--control)] px-4 py-2 text-sm text-[var(--card-foreground)] focus:outline-none focus:ring-2 focus:ring-[var(--accent)]"
className="flex-1 rounded-lg border border-[var(--border)] bg-[var(--control)] px-4 py-2 text-sm text-[var(--card-foreground)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]"
/>
</div>
</div>
Expand All @@ -1308,7 +1308,7 @@ function SettingsPageContent() {
setTimezone(e.target.value);
setIsDirty(true);
}}
className="w-full rounded-lg border border-[var(--border)] bg-[var(--control)] px-4 py-2 text-sm text-[var(--card-foreground)] focus:outline-none focus:ring-2 focus:ring-[var(--accent)]"
className="w-full rounded-lg border border-[var(--border)] bg-[var(--control)] px-4 py-2 text-sm text-[var(--card-foreground)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]"
>
<option value="UTC">UTC</option>
<option value="America/New_York">Eastern Time (ET)</option>
Expand Down
2 changes: 1 addition & 1 deletion src/components/ActivityRingChart.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ export default function ActivityRingChart() {
<select
value={days}
onChange={(e) => setDays(Number(e.target.value))}
className="rounded-lg border border-[var(--border)] bg-[var(--card)] px-2 py-1 text-sm text-[var(--card-foreground)] focus:outline-none focus:border-[var(--accent)]"
className="rounded-lg border border-[var(--border)] bg-[var(--card)] px-2 py-1 text-sm text-[var(--card-foreground)] focus-visible:outline-none focus:border-[var(--accent)]"
>
<option value={7}>Last 7d</option>
<option value={30}>Last 30d</option>
Expand Down
2 changes: 1 addition & 1 deletion src/components/CodingActivityInsightsCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ export default function CodingActivityInsightsCard() {
</p>
</div>

<button
<button aria-label="Refresh"
type="button"
onClick={fetchInsights}
disabled={loading}
Expand Down
2 changes: 1 addition & 1 deletion src/components/CommitSearchPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ export default function CommitSearchPanel({ commits, loading }: CommitSearchPane
onChange={(e) => setSearchQuery(e.target.value)}
placeholder="Search commits..."
aria-label="Search commits by message or repository"
className="w-full rounded-lg border border-[var(--border)] bg-[var(--background)] py-2 pl-10 pr-10 text-sm text-[var(--foreground)] placeholder:text-[var(--muted-foreground)] focus:outline-none focus:ring-2 focus:ring-[var(--accent)] focus:border-transparent transition-colors"
className="w-full rounded-lg border border-[var(--border)] bg-[var(--background)] py-2 pl-10 pr-10 text-sm text-[var(--foreground)] placeholder:text-[var(--muted-foreground)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus:border-transparent transition-colors"
/>
{searchQuery && (
<button
Expand Down
2 changes: 1 addition & 1 deletion src/components/CommitTimeChart.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ export default function CommitTimeChart() {
<select
value={days}
onChange={(e) => setDays(Number(e.target.value))}
className="rounded-lg border border-[var(--border)] bg-[var(--control)] px-2 py-1 text-sm text-[var(--card-foreground)] focus:outline-none focus:border-[var(--accent)]"
className="rounded-lg border border-[var(--border)] bg-[var(--control)] px-2 py-1 text-sm text-[var(--card-foreground)] focus-visible:outline-none focus:border-[var(--accent)]"
>
<option value={7}>Last 7d</option>
<option value={30}>Last 30d</option>
Expand Down
5 changes: 3 additions & 2 deletions src/components/ConfirmModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ export default function ConfirmModal({
<div
className="fixed inset-0 bg-black/60 backdrop-blur-sm transition-opacity"
onClick={onCancel}
aria-hidden="true"
/>

{/* Modal Content */}
Expand All @@ -72,14 +73,14 @@ export default function ConfirmModal({
<button
type="button"
onClick={onCancel}
className="w-full sm:w-auto rounded-xl border border-[var(--border)] bg-[var(--control)] px-5 py-2.5 text-sm font-semibold text-[var(--card-foreground)] transition-all hover:bg-[var(--card-muted)] active:scale-95 focus:outline-none focus:ring-2 focus:ring-[var(--accent)]"
className="w-full sm:w-auto rounded-xl border border-[var(--border)] bg-[var(--control)] px-5 py-2.5 text-sm font-semibold text-[var(--card-foreground)] transition-all hover:bg-[var(--card-muted)] active:scale-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]"
>
{cancelLabel}
</button>
<button
type="button"
onClick={onConfirm}
className="w-full sm:w-auto rounded-xl bg-[var(--accent)] px-5 py-2.5 text-sm font-semibold text-[var(--accent-foreground)] transition-all hover:opacity-90 active:scale-95 shadow-lg shadow-[var(--accent)]/20 focus:outline-none focus:ring-2 focus:ring-[var(--accent)]"
className="w-full sm:w-auto rounded-xl bg-[var(--accent)] px-5 py-2.5 text-sm font-semibold text-[var(--accent-foreground)] transition-all hover:opacity-90 active:scale-95 shadow-lg shadow-[var(--accent)]/20 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]"
>
{confirmLabel}
</button>
Expand Down
2 changes: 1 addition & 1 deletion src/components/ContributionHeatmap.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -536,7 +536,7 @@ export default function ContributionHeatmap({
aria-label={isFuture ? `${cell.dateKey}: future date` : tooltip}
disabled={isFuture}
onClick={() => !isFuture && setSelectedDate(cell.dateKey)}
className={`group relative z-0 h-4 w-4 rounded-[3px] border transition-transform hover:z-20 hover:scale-110 focus:z-20 focus:outline-none focus:ring-2 focus:ring-[var(--heatmap-focus-ring)] disabled:cursor-default disabled:opacity-20 ${
className={`group relative z-0 h-4 w-4 rounded-[3px] border transition-transform hover:z-20 hover:scale-110 focus:z-20 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--heatmap-focus-ring)] disabled:cursor-default disabled:opacity-20 ${
cell.inRange ? "opacity-100" : "opacity-40"
}`}
style={{
Expand Down
4 changes: 4 additions & 0 deletions src/components/GoalTracker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1379,6 +1379,10 @@ export default function GoalTracker() {
)}

{/* Recurrence Picker */}
<div role="group" aria-labelledby="recurrence-label">
<span id="recurrence-label" className="mb-1 block text-xs font-medium uppercase tracking-wide text-[var(--muted-foreground)]">
Recurrence
</span>
<div>
<label className="mb-1 block text-xs font-medium uppercase tracking-wide text-[var(--muted-foreground)]">
Recurrence
Expand Down
2 changes: 1 addition & 1 deletion src/components/InactiveRepositoriesCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ export default function InactiveRepositoriesCard() {
value={thresholdDays}
onChange={(event) => setThresholdDays(Number(event.target.value) as ThresholdDays)}
aria-label="Select inactivity threshold"
className="rounded-lg border border-[var(--border)] bg-[var(--control)] px-2 py-1 text-sm text-[var(--card-foreground)] focus:border-[var(--accent)] focus:outline-none"
className="rounded-lg border border-[var(--border)] bg-[var(--control)] px-2 py-1 text-sm text-[var(--card-foreground)] focus:border-[var(--accent)] focus-visible:outline-none"
>
{THRESHOLDS.map((days) => (
<option key={days} value={days}>
Expand Down
24 changes: 16 additions & 8 deletions src/components/ProjectMetrics.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -175,11 +175,12 @@ export default function ProjectMetrics() {
</h3>
<form onSubmit={handleConnect} className="space-y-4">
<div>
<label className="block text-sm font-medium mb-1 text-[var(--foreground)]">
<label htmlFor="jiraDomain" className="block text-sm font-medium mb-1 text-[var(--foreground)]">
Jira Domain
</label>
<input
type="text"
id="jiraDomain"
placeholder="your-company.atlassian.net"
value={formData.jiraDomain}
onChange={(e) =>
Expand All @@ -190,10 +191,11 @@ export default function ProjectMetrics() {
/>
</div>
<div>
<label className="block text-sm font-medium mb-1 text-[var(--foreground)]">
<label htmlFor="email" className="block text-sm font-medium mb-1 text-[var(--foreground)]">
Email
</label>
<input
id="email"
type="email"
value={formData.email}
onChange={(e) =>
Expand All @@ -204,10 +206,11 @@ export default function ProjectMetrics() {
/>
</div>
<div>
<label className="block text-sm font-medium mb-1 text-[var(--foreground)]">
<label htmlFor="apiToken" className="block text-sm font-medium mb-1 text-[var(--foreground)]">
API Token
</label>
<input
id="apiToken"
type="password"
placeholder="Get from id.atlassian.com/manage-profile"
value={formData.apiToken}
Expand All @@ -219,11 +222,12 @@ export default function ProjectMetrics() {
/>
</div>
<div>
<label className="block text-sm font-medium mb-1 text-[var(--foreground)]">
<label htmlFor="projectKey" className="block text-sm font-medium mb-1 text-[var(--foreground)]">
Project Key (optional)
</label>
<input
type="text"
id="projectKey"
placeholder="e.g. PROJ"
value={formData.projectKey}
onChange={(e) =>
Expand Down Expand Up @@ -293,11 +297,12 @@ export default function ProjectMetrics() {
</h3>
<form onSubmit={handleConnect} className="space-y-4">
<div>
<label className="block text-sm font-medium mb-1 text-[var(--foreground)]">
<label htmlFor="jiraDomain" className="block text-sm font-medium mb-1 text-[var(--foreground)]">
Jira Domain
</label>
<input
type="text"
id="jiraDomain"
placeholder="your-company.atlassian.net"
value={formData.jiraDomain}
onChange={(e) =>
Expand All @@ -308,10 +313,11 @@ export default function ProjectMetrics() {
/>
</div>
<div>
<label className="block text-sm font-medium mb-1 text-[var(--foreground)]">
<label htmlFor="email" className="block text-sm font-medium mb-1 text-[var(--foreground)]">
Email
</label>
<input
id="email"
type="email"
value={formData.email}
onChange={(e) =>
Expand All @@ -322,10 +328,11 @@ export default function ProjectMetrics() {
/>
</div>
<div>
<label className="block text-sm font-medium mb-1 text-[var(--foreground)]">
<label htmlFor="apiToken" className="block text-sm font-medium mb-1 text-[var(--foreground)]">
API Token
</label>
<input
id="apiToken"
type="password"
placeholder="Get from id.atlassian.com/manage-profile"
value={formData.apiToken}
Expand All @@ -337,11 +344,12 @@ export default function ProjectMetrics() {
/>
</div>
<div>
<label className="block text-sm font-medium mb-1 text-[var(--foreground)]">
<label htmlFor="projectKey" className="block text-sm font-medium mb-1 text-[var(--foreground)]">
Project Key (optional)
</label>
<input
type="text"
id="projectKey"
placeholder="e.g. PROJ"
value={formData.projectKey}
onChange={(e) =>
Expand Down
Loading
Loading