Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
239b206
feat(actions): redesigns to workflow summary cards with failure emphasis
wgordon17 Mar 25, 2026
9d00632
feat(shared): adds SortDropdown component for toolbar sort controls
wgordon17 Mar 25, 2026
6eb0212
feat(dashboard): constrains content area to max-w-6xl for readability
wgordon17 Mar 25, 2026
20e9d65
feat(issues): collapse-with-summary repo groups and sort dropdown
wgordon17 Mar 25, 2026
f1c681b
feat(pull-requests): collapse-with-summary repo groups and sort dropdown
wgordon17 Mar 25, 2026
45849ba
fix(dashboard): address review findings for a11y and consistency
wgordon17 Mar 25, 2026
47eaec1
fix(dashboard): removes double px-4 padding and aligns ActionsTab sum…
wgordon17 Mar 25, 2026
49aeb9e
style: adds dark-mode scrollbar colors
wgordon17 Mar 25, 2026
cbbb6c7
fix(layout): cleanup padding and alignment
wgordon17 Mar 26, 2026
47acc58
feat(ui): installs daisyUI and Kobalte, configures theme infrastructure
wgordon17 Mar 26, 2026
56a3627
feat(settings): refactors settings page with daisyUI, theme picker, a…
wgordon17 Mar 26, 2026
01e9b03
feat(layout): migrate header, tabs, filter bar to daisyUI
wgordon17 Mar 26, 2026
adc522e
feat(shared): migrates display components to daisyUI styling
wgordon17 Mar 26, 2026
b69a343
feat(onboarding): migrate onboarding and login pages to daisyUI
wgordon17 Mar 26, 2026
770e6e3
feat(shared): migrates interactive components to Kobalte Select and d…
wgordon17 Mar 26, 2026
0d80869
feat(notifications): migrate toast and drawer to Kobalte and corvu
wgordon17 Mar 26, 2026
d6a8810
feat(dashboard): migrates row components and popover to daisyUI and K…
wgordon17 Mar 26, 2026
8e7c4a9
feat(dashboard): migrates dashboard pages and tabs to daisyUI tokens
wgordon17 Mar 26, 2026
80d8818
chore(ui): removes legacy dark mode system and unused components
wgordon17 Mar 26, 2026
0449af3
fix(ui): addresses review findings for semantic color consistency
wgordon17 Mar 26, 2026
7133ffc
fix(ui): improves daisyUI visual integration with proper component st…
wgordon17 Mar 26, 2026
f419cb3
fix(ui): adds visual depth with shadows and borders
wgordon17 Mar 26, 2026
31c9881
fix(test): updates Header rate limit tests for daisyUI class tokens
wgordon17 Mar 26, 2026
201aeb3
refactor(ui): moves rate limit from header to footer
wgordon17 Mar 26, 2026
b059ea1
feat(theme): adds auto system detection, reorders theme picker
wgordon17 Mar 26, 2026
79cdf67
refactor(ui): moves rate limit to footer with daisyUI tooltip
wgordon17 Mar 26, 2026
3544b1f
fix(e2e): updates tests for Kobalte Tabs and ThemePicker buttons
wgordon17 Mar 26, 2026
4392b16
fix(settings): links org access to authorized apps page
wgordon17 Mar 26, 2026
5da37d8
feat(ui): adds slow pulse animation for in-progress status dot
wgordon17 Mar 26, 2026
8271cf4
feat(ui): adds merge conflict detection and visible badge
wgordon17 Mar 26, 2026
b151073
feat(ui): shows conflict badge in collapsed repo summary
wgordon17 Mar 26, 2026
d72b81a
feat(ui): links status dot to checks tab, +/- to files tab
wgordon17 Mar 26, 2026
a31f1c5
fix: maps all mergeStateStatus values, restores per-app org URL
wgordon17 Mar 26, 2026
f0be348
feat(dashboard): auto-syncs orgs on dashboard load
wgordon17 Mar 26, 2026
cb249a8
feat(dashboard): auto-discovers repos for newly synced orgs
wgordon17 Mar 26, 2026
0a68652
fix(dashboard): auto-syncs orgs only, not repos
wgordon17 Mar 26, 2026
61dbea3
fix(api): stops mapping BLOCKED mergeStateStatus as conflict
wgordon17 Mar 26, 2026
d74117a
chore: adds debug logging to notification dispatch
wgordon17 Mar 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
10 changes: 5 additions & 5 deletions e2e/settings.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,18 +87,18 @@ test("back link navigates to dashboard", async ({ page }) => {

// ── Theme change ─────────────────────────────────────────────────────────────

test("changing theme to dark adds dark class to html element", async ({
test("changing theme to dark applies data-theme attribute", async ({
page,
}) => {
await setupAuth(page);
await page.goto("/settings");

// Locate the Theme setting row by its label text, then find its <select> child.
const themeSelect = page.getByRole("combobox").filter({ has: page.locator('option[value="dark"]') });
await themeSelect.selectOption("dark");
// ThemePicker uses buttons with aria-label "Theme: <name>"
const darkBtn = page.getByRole("button", { name: "Theme: dark" });
await darkBtn.click();

const htmlElement = page.locator("html");
await expect(htmlElement).toHaveClass(/dark/);
await expect(htmlElement).toHaveAttribute("data-theme", "dark");
});

// ── Sign out ─────────────────────────────────────────────────────────────────
Expand Down
32 changes: 16 additions & 16 deletions e2e/smoke.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,35 +134,35 @@ test("dashboard loads with tab bar visible", async ({ page }) => {
await setupAuth(page);
await page.goto("/dashboard");

const nav = page.getByRole("navigation", { name: /dashboard tabs/i });
await expect(nav).toBeVisible();
const tablist = page.getByRole("tablist");
await expect(tablist).toBeVisible();

await expect(page.getByRole("button", { name: /^issues/i })).toBeVisible();
await expect(page.getByRole("tab", { name: /^issues/i })).toBeVisible();
await expect(
page.getByRole("button", { name: /^pull requests/i })
page.getByRole("tab", { name: /^pull requests/i })
).toBeVisible();
await expect(page.getByRole("button", { name: /^actions/i })).toBeVisible();
await expect(page.getByRole("tab", { name: /^actions/i })).toBeVisible();
});

test("switching tabs changes active tab indicator", async ({ page }) => {
await setupAuth(page);
await page.goto("/dashboard");

const issuesBtn = page.getByRole("button", { name: /^issues/i });
const prBtn = page.getByRole("button", { name: /^pull requests/i });
const actionsBtn = page.getByRole("button", { name: /^actions/i });
const issuesTab = page.getByRole("tab", { name: /^issues/i });
const prTab = page.getByRole("tab", { name: /^pull requests/i });
const actionsTab = page.getByRole("tab", { name: /^actions/i });

// Default tab should be issues (or whatever config says; we didn't set defaultTab)
await expect(issuesBtn).toBeVisible();
await expect(issuesTab).toBeVisible();

// Click Pull Requests tab
await prBtn.click();
await expect(prBtn).toHaveAttribute("aria-current", "page");
await expect(issuesBtn).not.toHaveAttribute("aria-current", "page");
await prTab.click();
await expect(prTab).toHaveAttribute("aria-selected", "true");
await expect(issuesTab).not.toHaveAttribute("aria-selected", "true");

// Click Actions tab
await actionsBtn.click();
await expect(actionsBtn).toHaveAttribute("aria-current", "page");
await actionsTab.click();
await expect(actionsTab).toHaveAttribute("aria-selected", "true");
});

test("dashboard shows empty state with no data", async ({ page }) => {
Expand All @@ -171,8 +171,8 @@ test("dashboard shows empty state with no data", async ({ page }) => {

// With empty mocked responses the dashboard should not show a loading spinner
// indefinitely — wait for the tab bar to appear then confirm no data rows
const nav = page.getByRole("navigation", { name: /dashboard tabs/i });
await expect(nav).toBeVisible();
const tablist = page.getByRole("tablist");
await expect(tablist).toBeVisible();

// The issues tab content area should render (even if empty)
await expect(page.getByRole("main")).toBeVisible();
Expand Down
3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,13 @@
"test:e2e": "E2E_PORT=$(node -e \"const s=require('net').createServer();s.listen(0,()=>{console.log(s.address().port);s.close()})\") playwright test"
},
"dependencies": {
"@kobalte/core": "^0.13.11",
"@octokit/core": "^7.0.6",
"@octokit/plugin-paginate-rest": "^14.0.0",
"@octokit/plugin-retry": "^8.1.0",
"@octokit/plugin-throttling": "^11.0.3",
"@solidjs/router": "^0.16.1",
"corvu": "^0.7.2",
"idb": "^8.0.3",
"solid-js": "^1.9.11",
"zod": "^4.3.6"
Expand All @@ -31,6 +33,7 @@
"@solidjs/testing-library": "^0.8.10",
"@tailwindcss/vite": "^4.2.2",
"@testing-library/user-event": "^14.6.1",
"daisyui": "^5.5.19",
"fake-indexeddb": "^6.2.5",
"happy-dom": "^20.8.4",
"tailwindcss": "^4.2.2",
Expand Down
Loading
Loading