Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
0e0ed5d
feat(notes): add workspace note tabs
koreyba Aug 1, 2026
e02669f
Merge remote-tracking branch 'origin/codex/notes-tabs' into codex/not…
koreyba Aug 1, 2026
6ff1dcd
fix(notes): harden workspace tab lifecycle
koreyba Aug 1, 2026
6b915cb
fix(notes): preserve reading scroll and editor selection
koreyba Aug 2, 2026
56d4136
fix(notes): avoid empty tab e2e locator collision
koreyba Aug 2, 2026
8e9c214
fix(notes): remove invalid tablist semantics
koreyba Aug 2, 2026
76bbc10
fix(notes): disambiguate empty tab accessibility name
koreyba Aug 2, 2026
e54879a
fix(notes): complete mobile workspace tab flow
koreyba Aug 2, 2026
5474ed8
fix(qodana): remove new notes test findings
koreyba Aug 2, 2026
f0cc5aa
feat(notes): improve browser-like tab capacity
koreyba Aug 2, 2026
aaf63ca
fix(notes-tabs): clean up Qodana findings
koreyba Aug 2, 2026
9960a6b
fix(notes-tabs): share Cypress note save flow
koreyba Aug 3, 2026
2e76626
fix(notes-tabs): resolve final review findings
denyskoreiba Aug 20, 2026
9f0c9ed
fix(notes-tabs): stop draft echo from cancelling autosave
denyskoreiba Aug 20, 2026
cc80d5d
fix(notes-tabs): cap tab strip width and clear deleted-note tab draft
denyskoreiba Aug 20, 2026
e7992c7
Merge remote-tracking branch 'origin/main' into claude/pr-187-layout-…
denyskoreiba Sep 10, 2026
6dffe51
fix(notes-tabs): make the tab strip scrollable instead of capped, flo…
denyskoreiba Sep 10, 2026
c6e9bda
fix(notes): stop the note action bar overflowing on phones
denyskoreiba Sep 10, 2026
eabfaaa
fix(notes-tabs): scope the persisted workspace to the signed-in account
denyskoreiba Sep 10, 2026
d4ac5b9
feat(settings): add a sign out control to the account tab
denyskoreiba Sep 10, 2026
cea5b12
refactor(ui): move icons from lucide-react to @phosphor-icons/react
denyskoreiba Sep 10, 2026
dce48ea
fix(notes-tabs): confirm a discarded failed save in the app's own dialog
denyskoreiba Sep 10, 2026
f5f8dd2
test(notes-tabs): cover the discard-failed-save dialog
denyskoreiba Sep 10, 2026
b9aaa35
fix(notes-tabs): keep persisting the workspace when it outgrows the b…
denyskoreiba Sep 10, 2026
b2469ef
feat(notes-tabs): animate a closing tab out instead of snapping it away
denyskoreiba Sep 10, 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
2 changes: 1 addition & 1 deletion app/auth/callback/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import { useEffect } from "react"
import { useRouter } from "next/navigation"
import { Loader2 } from "lucide-react"
import { CircleNotch as Loader2 } from "@phosphor-icons/react"

Check notice on line 5 in app/auth/callback/page.tsx

View workflow job for this annotation

GitHub Actions / Qodana for JS

Deprecated symbol used

Deprecated symbol used, consult docs for better alternative

Check notice on line 5 in app/auth/callback/page.tsx

View workflow job for this annotation

GitHub Actions / Qodana for JS

Deprecated symbol used

Deprecated symbol used, consult docs for better alternative

import { webSupabaseClientFactory } from "@ui/web/adapters/supabaseClient"
import { webStorageAdapter } from "@ui/web/adapters/storage"
Expand Down
45 changes: 45 additions & 0 deletions app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,57 @@ button,
/* Color scheme meta for browser optimization */
:root {
color-scheme: light;

/* Height of the note action bar. NoteEditor overwrites this on its own root
from the measured bar, so the sticky formatting toolbar parks flush
underneath it; this default covers every other RichTextEditor host. */
--note-editor-header-h: 69px;
}

.dark {
color-scheme: dark;
}

/* Workspace tabs: a closed tab plays this out while it is still mounted, so
the strip closes the gap instead of snapping. A keyframe animation is used
rather than a transition because the element is created already in its end
state — a transition would have nothing to run from. */
@keyframes note-tab-collapse-x {
from { max-width: 14rem; min-width: 7.5rem; opacity: 1; margin-right: 0; }
to { max-width: 0; min-width: 0; opacity: 0; margin-right: -0.25rem; }
}

/* 3rem sits just above a single-line row (~2.25rem) so the collapse starts
almost at once; rows always truncate to one line. */
@keyframes note-tab-collapse-y {
from { max-height: 3rem; opacity: 1; }
to { max-height: 0; opacity: 0; }
}

.note-tab-closing {
animation: note-tab-collapse-x var(--note-tab-motion, 150ms) ease-out forwards;
overflow: hidden;
pointer-events: none;
}

.note-tab-row-closing {
animation: note-tab-collapse-y var(--note-tab-motion, 150ms) ease-out forwards;
overflow: hidden;
pointer-events: none;
}

/* Honour the OS-level request for less motion across the whole app. */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}

/* Hide scrollbar utility */
.scrollbar-none {
-ms-overflow-style: none !important;
Expand Down
2 changes: 1 addition & 1 deletion app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"use client"

import { useEffect, useEffectEvent } from "react"
import { Loader2 } from "lucide-react"
import { CircleNotch as Loader2 } from "@phosphor-icons/react"

Check notice on line 4 in app/page.tsx

View workflow job for this annotation

GitHub Actions / Qodana for JS

Deprecated symbol used

Deprecated symbol used, consult docs for better alternative

Check notice on line 4 in app/page.tsx

View workflow job for this annotation

GitHub Actions / Qodana for JS

Deprecated symbol used

Deprecated symbol used, consult docs for better alternative
import { toast } from "sonner"

import { AuthShell } from "@/components/features/auth/AuthShell"
Expand Down
Loading