Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
ba0e920
add pr review
Steven-Harris Sep 7, 2025
529963c
view comments
Steven-Harris Sep 7, 2025
0af2531
update layout
Steven-Harris Sep 7, 2025
b3066b9
fix expand/collapse
Steven-Harris Sep 7, 2025
59e88d9
comment section
Steven-Harris Sep 8, 2025
0c1686a
submitting review
Steven-Harris Sep 8, 2025
359d3f6
add comment ability
Steven-Harris Sep 8, 2025
8ad2010
fix errors and warnings
Steven-Harris Sep 15, 2025
f450636
refactor
Steven-Harris Sep 16, 2025
857f613
update docs
Steven-Harris Sep 16, 2025
74edb28
add more components
Steven-Harris Sep 16, 2025
043d29e
fix line comments
Steven-Harris Sep 16, 2025
2aa54be
add review thread
Steven-Harris Sep 16, 2025
15f51b8
adjust indentation
Steven-Harris Sep 21, 2025
e4bf118
fix theme
Steven-Harris Jan 12, 2026
0327113
fix theme
Steven-Harris Jan 12, 2026
7e5c683
fix the theme
Steven-Harris Jan 12, 2026
7b9dddb
fix alignment in files changes
Steven-Harris Jan 12, 2026
fd794bf
fix scrolling browsing files
Steven-Harris Jan 12, 2026
b5a9d19
more theming
Steven-Harris Jan 12, 2026
d5139a8
themes
Steven-Harris Jan 12, 2026
5a921f3
comments and replies
Steven-Harris Jan 13, 2026
4f0abfd
move controls
Steven-Harris Jan 13, 2026
a4a725e
sticky controls
Steven-Harris Jan 13, 2026
393cfa0
background color
Steven-Harris Jan 13, 2026
0cf1831
styling
Steven-Harris Jan 13, 2026
08b56cc
sticky controls
Steven-Harris Jan 13, 2026
37bc6ca
force inline
Steven-Harris Jan 13, 2026
7e73fce
file review
Steven-Harris Jan 14, 2026
8fb5e33
fix load scroll
Steven-Harris Jan 14, 2026
b58ced0
redo review process
Steven-Harris Jan 14, 2026
2411493
updates
Steven-Harris Jan 14, 2026
fddef77
link to github
Steven-Harris Jan 14, 2026
cf301e3
delete plans
Steven-Harris Jan 16, 2026
6e29395
Merge branch 'main' into add-pr-review
Steven-Harris Jan 22, 2026
92e6bc1
fix after merge
Steven-Harris Jan 22, 2026
6f92ff0
fix liniting errors
Steven-Harris Jan 22, 2026
5a7583d
more linit
Steven-Harris Jan 22, 2026
0fb4ccf
addd merge
Steven-Harris Jan 22, 2026
df7440f
remove default load
Steven-Harris Jan 22, 2026
867fac4
comment polling
Steven-Harris Jan 22, 2026
e662c88
show resolved comments
Steven-Harris Jan 22, 2026
a5a28ba
more merge stuff
Steven-Harris Jan 22, 2026
5f4e49e
troubleshoot merging
Steven-Harris Jan 22, 2026
633e5de
updates
Steven-Harris Feb 9, 2026
2209877
refactor
Steven-Harris Feb 9, 2026
3c81ba2
use octokit
Steven-Harris Feb 13, 2026
19df433
octokit migration
Steven-Harris Feb 13, 2026
f68a57c
octokit migration
Steven-Harris Feb 13, 2026
8a11bd2
fix merge
Steven-Harris Feb 13, 2026
a8525b0
fix approval
Steven-Harris Feb 22, 2026
247df8d
updates
Steven-Harris Feb 26, 2026
733cf72
fix update
Steven-Harris Feb 26, 2026
73641fd
update merged notice
Steven-Harris Feb 26, 2026
5b42556
update dependencies
Steven-Harris Feb 26, 2026
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
59 changes: 32 additions & 27 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"version": "2.0.0",
"private": true,
"type": "module",
"packageManager": "pnpm@10.17.0",
"packageManager": "pnpm@10.16.1",
"scripts": {
"dev": "vite",
"test": "vitest run",
Expand Down Expand Up @@ -39,52 +39,57 @@
"pnpm": ">=9.0.0"
},
"dependencies": {
"@sentry/browser": "^10.34.0",
"@sentry/svelte": "^10.34.0",
"@sentry/sveltekit": "^10.34.0",
"@sentry/vite-plugin": "^4.6.2",
"firebase": "^12.8.0",
"graphql": "^16.12.0",
"tailwindcss": "^4.1.18"
"@octokit/core": "^7.0.6",
"@octokit/plugin-retry": "^8.1.0",
"@octokit/plugin-throttling": "^11.0.3",
"@sentry/browser": "^10.40.0",
"@sentry/svelte": "^10.40.0",
"@sentry/sveltekit": "^10.40.0",
"@sentry/vite-plugin": "^4.9.1",
"firebase": "^12.9.0",
"highlight.js": "^11.11.1",
"marked": "^16.4.2",
"tailwindcss": "^4.2.1"
},
"devDependencies": {
"@eslint/js": "^9.39.2",
"@playwright/test": "^1.57.0",
"@eslint/js": "^9.39.3",
"@octokit/types": "^16.0.0",
"@playwright/test": "^1.58.2",
"@sveltejs/adapter-static": "^3.0.10",
"@sveltejs/kit": "^2.50.0",
"@sveltejs/kit": "^2.53.2",
"@sveltejs/vite-plugin-svelte": "^6.2.4",
"@tailwindcss/vite": "^4.1.18",
"@tailwindcss/vite": "^4.2.1",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/svelte": "^5.3.1",
"@tsconfig/svelte": "5.0.6",
"@typescript-eslint/eslint-plugin": "^8.53.0",
"@typescript-eslint/parser": "^8.53.0",
"@typescript-eslint/eslint-plugin": "^8.56.1",
"@typescript-eslint/parser": "^8.56.1",
"@vite-pwa/assets-generator": "^1.0.2",
"@vite-pwa/sveltekit": "^1.1.0",
"@vitest/coverage-v8": "^4.0.17",
"@vitest/ui": "^4.0.17",
"eslint": "^9.39.2",
"@vitest/coverage-v8": "^4.0.18",
"@vitest/ui": "^4.0.18",
"eslint": "^9.39.3",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.5",
"eslint-plugin-svelte": "^3.14.0",
"firebase-tools": "^15.3.1",
"eslint-plugin-svelte": "^3.15.0",
"firebase-tools": "^15.8.0",
"jsdom": "^27.4.0",
"msw": "^2.12.7",
"prettier": "^3.8.0",
"prettier-plugin-svelte": "^3.4.1",
"msw": "^2.12.10",
"prettier": "^3.8.1",
"prettier-plugin-svelte": "^3.5.0",
"sharp": "0.34.5",
"sharp-ico": "0.1.5",
"svelte": "^5.47.0",
"svelte-check": "^4.3.5",
"svelte-eslint-parser": "^1.4.1",
"svelte": "^5.53.5",
"svelte-check": "^4.4.4",
"svelte-eslint-parser": "^1.5.1",
"svelte-preprocess": "^6.0.3",
"tslib": "2.8.1",
"typescript": "^5.9.3",
"typescript-eslint": "^8.53.0",
"typescript-eslint": "^8.56.1",
"vite": "^7.3.1",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-pwa": "^1.2.0",
"vitest": "^4.0.17",
"vitest": "^4.0.18",
"workbox-window": "^7.4.0"
},
"pnpm": {
Expand Down
4,397 changes: 2,316 additions & 2,081 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

9 changes: 5 additions & 4 deletions src/features/actions/List.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@

let { org, repo, workflowRuns = [] } = $props();

const repoKey = `${org}/${repo}`;
const repoKey = $derived(`${org}/${repo}`);
const isCollapsed = $derived(repositoryCollapseStore.isCollapsed(repoKey, $repositoryCollapseStore));

function toggleCollapse() {
repositoryCollapseStore.toggle(repoKey);
Expand All @@ -19,9 +20,9 @@
<button
onclick={toggleCollapse}
class="text-[#8b949e] hover:text-[#c9d1d9] transition-colors p-1 rounded hover:bg-[#21262d]"
title={repositoryCollapseStore.isCollapsed(repoKey, $repositoryCollapseStore) ? 'Expand repository' : 'Collapse repository'}
title={isCollapsed ? 'Expand repository' : 'Collapse repository'}
>
{#if repositoryCollapseStore.isCollapsed(repoKey, $repositoryCollapseStore)}
{#if isCollapsed}
<!-- Expand icon (chevron right) -->
<svg width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 1 1-1.06-1.06L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06z"/>
Expand Down Expand Up @@ -50,7 +51,7 @@
</div>
</div>

{#if !repositoryCollapseStore.isCollapsed(repoKey, $repositoryCollapseStore)}
{#if !isCollapsed}
{#if workflowRuns?.length > 0}
<div class="divide-y divide-[#21262d]">
{#each workflowRuns as run, index (index)}
Expand Down
2 changes: 1 addition & 1 deletion src/features/actions/RepositoryCard.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

let { org, repo, isLoaded, workflowRuns = [], filterHint = '' } = $props();

const repoKey = `${org}/${repo}`;
const repoKey = $derived(`${org}/${repo}`);

function toggleCollapse() {
repositoryCollapseStore.toggle(repoKey);
Expand Down
2 changes: 1 addition & 1 deletion src/features/config/ConfigList.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@
{/if}

{#if editingIndex === -1}
<button class="flex items-center {$isMobile ? 'p-2 px-3' : 'p-3 px-4'} glass-container hover:border-[#388bfd44] w-full mb-4 transition-all duration-200" onclick={() => (editingIndex = -2)}>
<button class="flex items-center {$isMobile ? 'p-2 px-3' : 'p-3 px-4'} glass-container hover:border-[#388bfd44] w-full mb-4 transition-all duration-200" onclick={() => (editingIndex = -2)} aria-label="Add configuration">
<span class="text-xl mr-1 text-[#3fb950]">+</span>
<span>Add Repository</span>
</button>
Expand Down
4 changes: 2 additions & 2 deletions src/features/config/LabelFilter.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@
{#each filters as filter, i (i)}
<span class="chip">
{getDisplayName(filter)}
<button type="button" onclick={() => onRemove(filter)} aria-label="Remove {filter} filter">×</button>
<button type="button" onclick={() => onRemove(filter)} aria-label={`Remove ${filter} filter`}>×</button>
</span>
{/each}
</div>
Expand Down Expand Up @@ -153,7 +153,7 @@
{#if loading}
<p class="text-xs text-[#8b949e] mt-1">Loading {title.toLowerCase()}...</p>
{:else if noOptionsAvailable}
<button type="button" class="text-xs text-[#58a6ff] mt-1 hover:underline" onclick={onLoadOptions}>
<button type="button" class="text-xs text-[#58a6ff] mt-1 hover:underline" onclick={onLoadOptions} aria-label={`Load ${title} options`}>
Refresh {title.toLowerCase()} list
</button>
{/if}
Expand Down
2 changes: 1 addition & 1 deletion src/features/config/OrganizationManager.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
<button
class="text-[#8b949e] hover:text-[#f85149] transition-colors duration-200 cursor-pointer flex items-center justify-center w-6 h-6"
title="Remove organization"
aria-label="delete {org.name}"
aria-label={`Delete ${org.name}`}
onclick={() => deleteOrganization(i)}
>
<img src={deleteSVG} alt="Delete" width="14" height="14" />
Expand Down
5 changes: 3 additions & 2 deletions src/features/config/directives/useDraggable.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import type { Mock } from 'vitest';
import { useDraggable } from './useDraggable';

// Mock console methods to avoid clutter during tests
Expand All @@ -9,7 +10,7 @@ vi.mock('console', () => ({

describe('useDraggable', () => {
let container: HTMLElement;
let mockOnReorder: ReturnType<typeof vi.fn>;
let mockOnReorder: Mock<(fromIndex: number, toIndex: number) => void>;
let directive: ReturnType<typeof useDraggable>;

beforeEach(() => {
Expand All @@ -23,7 +24,7 @@ describe('useDraggable', () => {
document.body.appendChild(container);

// Mock the onReorder callback
mockOnReorder = vi.fn();
mockOnReorder = vi.fn<(fromIndex: number, toIndex: number) => void>();

// Initialize the directive
directive = useDraggable(container, { onReorder: mockOnReorder });
Expand Down
6 changes: 3 additions & 3 deletions src/features/config/directives/useDraggable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export const useDraggable: Action<HTMLElement, DraggableOptions> = (node, option
const SCROLL_SPEED = 30; // Pixels per frame for auto-scroll (increased from 15)
const SCROLL_INTERVAL = 16; // Milliseconds between scroll updates (60fps)

function findScrollContainer(element: HTMLElement): HTMLElement | null {
function findScrollContainer(_element: HTMLElement): HTMLElement | null {
// For auto-scroll, we always want to use window scrolling when the list is long
// So we'll return document.body to indicate we should use window.scrollBy
return document.body;
Expand Down Expand Up @@ -199,7 +199,7 @@ export const useDraggable: Action<HTMLElement, DraggableOptions> = (node, option
}

// Add wheel event listener to stop auto-scroll when user manually scrolls
function handleWheel(event: WheelEvent): void {
function handleWheel(_event: WheelEvent): void {
if (state.isDragging) {
stopAutoScroll();
// Don't prevent default to allow manual scrolling
Expand All @@ -208,7 +208,7 @@ export const useDraggable: Action<HTMLElement, DraggableOptions> = (node, option
}

// Add touch event listeners for mobile scrolling
function handleTouchStart(event: TouchEvent): void {
function handleTouchStart(_event: TouchEvent): void {
if (state.isDragging) {
stopAutoScroll();
// Don't prevent default to allow manual scrolling
Expand Down
10 changes: 5 additions & 5 deletions src/features/config/services/config-page.service.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { derived, type Readable, get } from 'svelte/store';
import { derived, type Readable } from 'svelte/store';
import { eventBus } from '$shared/stores/event-bus.store';
import { configService } from '$features/config/services/config.service';
import { repositoryFacade } from '$shared/stores/repository.facade';
Expand Down Expand Up @@ -83,7 +83,7 @@ export class ConfigPageService {
}

getErrorMessage(): Readable<string | null> {
return derived(eventBus, ($eventBus) => {
return derived(eventBus, (_eventBus) => {
// This would be enhanced with actual error handling
return null;
});
Expand All @@ -103,7 +103,7 @@ export class ConfigPageService {
// Clear loading state on error
eventBus.set('');

const errorResult = errorService.handleError(error, {
errorService.handleError(error, {
component: 'ConfigPageService',
action: 'loadConfigurations',
});
Expand All @@ -130,7 +130,7 @@ export class ConfigPageService {
// Clear save state on error
eventBus.set('');

const errorResult = errorService.handleError(error, {
errorService.handleError(error, {
component: 'ConfigPageService',
action: 'saveConfigurations',
});
Expand All @@ -147,7 +147,7 @@ export class ConfigPageService {
try {
const validation = configService.validateConfigurations(configs);
return validation.isValid;
} catch (error) {
} catch (_error) {
return false;
}
}
Expand Down
1 change: 0 additions & 1 deletion src/features/config/services/config.service.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { captureException } from '$integrations/sentry';
import { eventBus } from '$shared/stores/event-bus.store';
import { killSwitch } from '$shared/stores/kill-switch.store';
import { repositoryFacade } from '$shared/stores/repository.facade';
import { get } from 'svelte/store';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ describe('RepositorySearchService', () => {

mockSearchRepositories.mockResolvedValue(mockResults);

let stateUpdates: any[] = [];
const stateUpdates: any[] = [];
const onStateUpdate = (updates: any) => {
stateUpdates.push(updates);
};
Expand Down Expand Up @@ -65,7 +65,7 @@ describe('RepositorySearchService', () => {

mockSearchRepositories.mockResolvedValue(mockResults);

let stateUpdates: any[] = [];
const stateUpdates: any[] = [];
const onStateUpdate = (updates: any) => {
stateUpdates.push(updates);
};
Expand Down Expand Up @@ -135,7 +135,7 @@ describe('RepositorySearchService', () => {
const repoName = 'repo';
const existingRepos = [];

let stateUpdates: any[] = [];
const stateUpdates: any[] = [];
const onStateUpdate = (updates: any) => {
stateUpdates.push(updates);
};
Expand All @@ -158,7 +158,7 @@ describe('RepositorySearchService', () => {

mockSearchRepositories.mockRejectedValue(new Error('API Error'));

let stateUpdates: any[] = [];
const stateUpdates: any[] = [];
const onStateUpdate = (updates: any) => {
stateUpdates.push(updates);
};
Expand Down
Loading
Loading