Commit Graph
66 Commits
Author SHA1 Message Date
iamdoubz 3402a4552f feat(vault): vault API bindings (T8.8) 2026-07-03 08:06:06 -05:00
iamdoubz 435c4beb84 feat(ui): wire Link-provider button to real OAuth flow + status (T9.9) 2026-07-03 07:54:42 -05:00
iamdoubz fedef1788d feat(sync): linkOauth flow + target reload on sync://linked (T9.9) 2026-07-03 07:54:41 -05:00
iamdoubz bfcdc5b6f4 feat(sync): beginOauthLink authUrl return + onSyncLinked event (T9.9) 2026-07-03 07:54:41 -05:00
iamdoubz 22eb010309 feat(ui): Sync section — Upload now button + per-artifact job status/retry (T9.5) 2026-07-03 07:42:03 -05:00
iamdoubz a8a511097c feat(sync): upload-now + live job status in meetings store (T9.5) 2026-07-03 07:42:02 -05:00
iamdoubz e1893daee2 feat(sync): type SyncJobInfo + sync_status; extend sync://job event type (T9.5) 2026-07-03 07:42:02 -05:00
iamdoubz 906c800b2a fix(sync): align test_sync_target arg with the config param 2026-07-02 21:56:58 -05:00
iamdoubz 60fed63bc3 feat(ui): NPU detection + download indicator in Settings hardware (T3.4) 2026-07-02 17:16:51 -05:00
iamdoubz b23b00490a feat(ui): NPU package download API + npu://download events (T3.4) 2026-07-02 17:16:44 -05:00
iamdoubz 11c0dde8a3 fix(ui): remove the bright edge around the app in dark mode
html/body sit above .app in the DOM tree and were left with the
browser default (white background + 8px UA-stylesheet margin) — a gap
invisible against the light theme but a bright white outline around
the whole window in dark mode. Mirrors data-theme onto <html> (so the
dark token overrides actually apply up there) and zeroes the
html/body margin.
2026-07-02 13:03:58 -05:00
iamdoubz 7ac49e68fc style(ui): use the shared radius token in LevelMeter 2026-07-02 12:57:47 -05:00
iamdoubz 7427165229 feat(ui): polish the recording-consent notice
Replaces a hardcoded blue (#2563eb) primary button with the semantic
accent token, adds a ShieldAlert icon + heading, and gives it proper
elevation (shadow + radius) to read as a deliberate dialog rather than
a plain bordered box.
2026-07-02 12:57:42 -05:00
iamdoubz df82b0636d feat(ui): icon nav tabs + elevation for the Settings modal
Recording/Hardware/Storage/Calendar/Sync/Privacy nav tabs get matching
icons; the active tab now uses the accent color instead of an inverted
fg/bg swap. Check/X/AlertTriangle icons replace ✓/✗/✕/⚠ throughout
(connection test result, close button, third-party-cloud warning
banner, no-egress confirmation). The modal itself gets proper
elevation (shadow + larger radius) instead of a flat bordered box.
2026-07-02 12:57:36 -05:00
iamdoubz ecf38d5313 feat(ui): icon section headers + primary-button styling in the summary panel
Tags/Summary/Action items/Calendar event/Participants/Speakers each
get a matching icon and a consistent uppercase section-header style;
"Generate summary" becomes a proper primary (accent-filled) button;
the reminder bell emoji becomes a Lucide Bell icon that highlights in
the warning color once checked.
2026-07-02 12:57:27 -05:00
iamdoubz 1dd9d57b0f feat(ui): icon-based formatting toolbar for the notes editor
Bold/Italic/Heading1/Heading2/List/ListChecks Lucide icons replace the
letter/glyph toolbar buttons (bullet "•" and checkbox "☑" in
particular); export buttons get matching icons. Section labels for
Transcript/Notes get icons too, and the reprocess spinner animates
(respecting prefers-reduced-motion).
2026-07-02 12:57:19 -05:00
iamdoubz 9052d69912 feat(ui): polish the meetings list — icons, accent colors, hover states
Search icon inside the input, Trash2/Download/RotateCcw replacing
emoji, tag chips and the selected-item state now use the semantic
accent tokens instead of a hardcoded blue hex, and list rows get a
hover state + an accent-colored left border when selected.
2026-07-02 12:57:09 -05:00
iamdoubz d50342d865 feat(ui): rebuild header + design tokens
- Full semantic color token system (surfaces, text, borders, one
  accent color) replacing the previous 4-variable set — light/dark
  designed together, every pairing checked to >=4.5:1 (WCAG AA).
- Global custom scrollbar styling (thin, theme-aware) — the default
  OS scrollbar looked out of place against the app's own chrome.
- ThemeToggle replaces the plain theme <select>.
- Record/Stop buttons and the settings/warning icons are now Lucide
  SVG icons instead of Unicode glyphs (●■⚙⚠); the recording indicator
  is an animated pulsing dot (paused under prefers-reduced-motion)
  instead of a static red dot.
- Elevation (shadow tokens) and consistent radius scale.
2026-07-02 12:57:00 -05:00
iamdoubz 7ae146f99f feat(ui): add ThemeToggle — segmented Monitor/Sun/Moon control
Replaces the plain <select> theme dropdown with three icon buttons.
Defaults to "system" (Monitor), matching the existing behavior of
following the OS preference until the user picks an explicit override.
2026-07-02 12:56:51 -05:00
iamdoubz 0f7526770d feat(ui): due-date input + remind-me checkbox per action item (T8.6, FR-CAL-5)
The due-date input is new too — action items previously had no way to
set one, which would have made the reminder checkbox unusable (a
reminder needs a due date to schedule against).
2026-07-02 11:59:34 -05:00
iamdoubz f27c19d8de feat(ui): add ActionItem.reminder_set to the TS type (T8.6, FR-CAL-5) 2026-07-02 11:59:27 -05:00
iamdoubz 5f033e90f2 feat(ui): bulk export button, reusing the tag/date filter state (T8.5, FR-STORE-4) 2026-07-02 11:35:46 -05:00
iamdoubz 3a4b1a5d2f feat(ui): add bulkExportMeetings client wrapper (T8.5, FR-STORE-4) 2026-07-02 11:35:41 -05:00
iamdoubz db838d9741 feat(ui): note-template picker before starting a recording (T8.1, FR-NOTE-5) 2026-07-02 11:26:20 -05:00
iamdoubz 21d2b40961 feat(ui): thread templateId through recording.start() (T8.1, FR-NOTE-5) 2026-07-02 11:26:14 -05:00
iamdoubz 181e874a2a feat(ui): add NoteTemplate type, listNoteTemplates, templateId param (T8.1, FR-NOTE-5) 2026-07-02 11:26:09 -05:00
iamdoubz fd220641ac feat(ui): add Export PDF / Export Word buttons (T8.4, FR-NOTE-4) 2026-07-02 11:03:01 -05:00
iamdoubz 7b03b12f25 feat(ui): extend exportMeeting's format type to include pdf/docx (T8.4, FR-NOTE-4) 2026-07-02 11:02:57 -05:00
iamdoubz 8f08b17be6 feat(ui): editable tags section in the meeting detail panel (T8.3, FR-SEARCH-2) 2026-07-02 10:38:59 -05:00
iamdoubz bf74a3cc92 feat(ui): tag/date filters and tag chips in the meetings list (T8.3, FR-SEARCH-2) 2026-07-02 10:38:54 -05:00
iamdoubz eb17cc68e0 feat(ui): add filter/tag state and setTags/loadTags to the meetings store (T8.3, FR-SEARCH-2) 2026-07-02 10:38:50 -05:00
iamdoubz 15f72aaca6 feat(ui): add MeetingFilter type + setTags/listTags wrappers (T8.3, FR-SEARCH-2) 2026-07-02 10:38:45 -05:00
iamdoubz 66d4c614bb feat(ui): replace title-only filter with full-text search (T8.2, FR-SEARCH-1)
The search box now searches transcripts + notes (not just titles) and
shows a matched snippet per result. FTS5 is word-based rather than
substring-based, a deliberate tradeoff for gaining full-content search.
2026-07-02 10:08:12 -05:00
iamdoubz 3d1129ff1e feat(ui): add search state + method to the meetings store (T8.2, FR-SEARCH-1) 2026-07-02 10:08:02 -05:00
iamdoubz 354588e1ab feat(ui): add SearchHit type + search() client wrapper (T8.2, FR-SEARCH-1) 2026-07-02 10:07:55 -05:00
iamdoubz 4d59e7f646 fix(ui): show a loading state for the meetings list (T7.1, FR-UX-1)
meetings.loading existed in the store but nothing read it — the list
briefly showed "No meetings yet" on first load before data arrived.
2026-07-02 07:45:18 -05:00
iamdoubz a0a4cf12b5 feat(ui): wire real summary + action-item rendering into SummaryPanel (T7.1, FR-UX-1)
Replaces the static "Summary"/"Action items" placeholder text with:
generate button (hidden behind a "configure an LLM provider" message
when none is set), live token streaming while generating, rendered
summary + decisions once done, and an editable action-item checklist
with a save step before anything gets confirmed as a task.
2026-07-02 07:45:11 -05:00
iamdoubz 6dc68ac92c feat(ui): summary generation + action-item confirmation in the meetings store (T7.1)
Streams tokens for whichever meeting is generating (gated by
summarizingId so a stale stream can't clobber a summary if the user
switches selection mid-generation), and refreshes the selected meeting
once llm://done or confirm_action_items lands.
2026-07-02 07:45:03 -05:00
iamdoubz 075eec6a95 feat(ui): add summary/action-item types + errorMessage() helper (T7.1, FR-LLM-2/3/4)
Types for SummaryFile/ActionItem/LlmStatus and a confirmActionItems
wrapper + onLlmDone listener, so the frontend can consume what
generate_summary/confirm_action_items already produce on the backend.

Also adds errorMessage(): every backend command rejects with
{ kind, message } (see src-tauri/src/error.rs), not a native Error, so
`e instanceof Error` is always false for it and `String(e)` renders as
the literal text "[object Object]" — found by actually clicking
"Generate summary" against an unreachable Ollama endpoint.
2026-07-02 07:44:56 -05:00
iamdoubz b2d423e3ec refactor(ui): use the shared renderMarkdown() in TranscriptNotes (T7.1) 2026-07-02 07:44:47 -05:00
iamdoubz 4609d93faf refactor(ui): extract shared sanitized-Markdown renderer (T7.1)
Notes and LLM-generated summaries both render untrusted Markdown via
{@html} into a webview with an IPC bridge to the Rust backend, so the
DOMPurify sanitization step is a real security boundary, not cosmetic —
worth one shared implementation instead of a second inline copy that
could drift out of sync.
2026-07-02 07:44:41 -05:00
iamdoubz 5f8ba8253e feat(ui): focus trap for consent dialog + recording-state live region (T7.5, FR-UX-4)
Traps focus in the recording-consent overlay the same way as Settings.
Adds a visually-hidden aria-live region announcing "Recording
started/paused/stopped" — previously nothing in the header was a live
region, so a non-visual user had no way to learn recording had begun.
2026-07-02 07:31:13 -05:00
iamdoubz d94472f476 fix(ui): label the symbol-only notes-toolbar buttons (T7.5, FR-UX-4)
Bold/Italic/Bullet-list/Checkbox buttons rendered a bare glyph with
only a title tooltip; add matching aria-label so a screen reader
announces the action rather than the raw Unicode character name.
2026-07-02 07:31:07 -05:00
iamdoubz 6629b692ca fix(ui): add accessible name to the meetings search input (T7.5, FR-UX-4)
A placeholder isn't a reliable accessible name (it disappears on input
and isn't consistently exposed) — add an explicit aria-label.
2026-07-02 07:31:00 -05:00
iamdoubz 8d1a0047ee feat(ui): trap focus in the Settings dialog (T7.5, FR-UX-4) 2026-07-02 07:30:54 -05:00
iamdoubz 90e59ee186 feat(ui): add trapFocus action for modal dialogs (T7.5, FR-UX-4)
Moves focus into the dialog on mount, cycles Tab/Shift+Tab within its
focusable elements, and restores focus to whatever had it before the
dialog opened once it closes.
2026-07-02 07:30:48 -05:00
iamdoubz b95ffa5bc1 feat(ui): global keyboard shortcuts for record toggle + Settings (T7.4, FR-UX-3)
Ctrl+Shift+R toggles recording, Ctrl+, toggles Settings, Escape closes
whichever overlay (consent notice, then Settings) is open. Shortcuts
never hijack typing in an input/textarea/select/contenteditable target;
Escape is exempt from that guard so it always closes an open modal.

"Template apply" from the roadmap item isn't included — there's no
template-selection UI yet (that lands with T8.1 in Phase 8).
2026-07-01 22:38:09 -05:00
iamdoubz bbe8a28144 feat(ui): wire LevelMeter and device notice into the header (T7.3) 2026-07-01 21:09:59 -05:00
iamdoubz ff5144e9f0 feat(ui): add LevelMeter component + device notice in the header (T7.3, FR-CAP-5/6)
A simple rms-fill + peak-marker bar rather than a scrolling waveform —
either satisfies the requirement with far less state. Shows a warning
banner while a capture device reconnect is in progress.
2026-07-01 21:09:54 -05:00
iamdoubz 9df6331ecb feat(ui): track live level + device notice in the recording store (T7.3) 2026-07-01 21:09:48 -05:00