Skip to content

feat(ui): tag rendering + overflow, label typography and theme-token consistency sweep - #122

Merged
ddutchie merged 3 commits into
mainfrom
ddutchie/tagcleanup
Aug 11, 2026
Merged

ddutchie merged 3 commits into
mainfrom
ddutchie/tagcleanup

Conversation

@ddutchie

@ddutchie ddutchie commented Aug 11, 2026 •

Copy link
Copy Markdown
Owner

What does this PR do?

A UX/UI consistency sweep. The notes-hierarchy tag rendering was messy (busy filter, cramped row badges), so I audited tag/overflow/label/color usage across the whole app and standardized the patterns:

  • Tags: notes filter sorted by usage + capped behind a +N pill; note rows put tags below the date at xs; same +N treatment across project headers, pinned notes, kanban cards, editor tag bar, and mobile.
  • Overflow: generalized the tag pill into a shared OverflowPill used for automation-run artifacts, task-flow previews, usage-by-model and recent agent sessions — no more silent drops or bare +Ns.
  • Typography: new MicroLabel / SectionLabel components collapse ~6 ad-hoc micro font sizes down to two canonical scales; removed all remaining pixel-based font classes.
  • Theme tokens: fixed stray hardcoded colours (green-400, hex fallbacks, rgba() in the dashboard template) and an undefined --purple-500 token that left an onboarding card's selected state invisible.

Type of change

  • Bug fix
  • New feature
  • Refactor / code quality
  • Docs / changelog
  • Tests

Screenshots / recording

UI changes; before/after captures for the notes sidebar tag filter and note rows can be added on request — this pass was driven by a live audit rather than screenshots.

Checklist

  • npm run type-check:all passes
  • npm run lint passes
  • npm test passes (runs npm run compile first so electron/bundle-guard.test.ts actually executes — npm run test:bundle to run just that)
  • npm run test:e2e passes (run before merging UI changes or cutting a release)
  • If this ships a major, user-facing feature: added an entry to scripts/features.config.js so it appears in the "What's New" modal (generated JSON — run node scripts/generate-features.js)
  • No hardcoded colours — CSS variables only (var(--accent), var(--text-primary), etc.)
  • No text-[Npx] pixel font classes — rem equivalents only (text-[0.714rem], text-xs, etc.)
  • New IPC handlers wrapped in handle() and return IpcResult<T>
  • New DB migrations appended (not edited) in schema.ts
  • New SQL goes in electron/db/queries.ts — single source of truth (imported by both Electron main process and MCP server); never construct a Database instance outside db/client.ts (Electron) or mcp-server.ts (MCP runtime)
  • New dependencies or devDependencies added to ROLE_MAP in scripts/generate-licenses.js and licenses.json regenerated
  • New MCP tools registered in electron/mcp/tools/index.ts dispatch + electron/lib/tool-schemas.ts Zod schema
  • If you added/removed a --external:<pkg> flag in the compile script: updated the appropriate allowlist group (RUNTIME_PROVIDED / OPTIONAL_TRANSITIVE / SUBPROCESS_ONLY / SHIPPED_NATIVE) in electron/bundle-guard.test.ts and (if SHIPPED_NATIVE) shipped the package via electron-builder.yml

Notes for reviewer

  • The fixed code-block/mermaid palettes were intentionally left on their own dark/light scheme (not app theme tokens) — only the copy-state success colour was touched.
  • Calendar grid headers (MonthGrid/WeekGrid) and SVG canvas labels keep their smaller scales on purpose (cramped cells / chart density) and were excluded from the label normalization.
  • A follow-up PR is planned to unify the ~30 hand-rolled empty states into a shared primitive.

Summary by CodeRabbit

  • New Features

    • Added consistent +N overflow indicators for tags, sessions, tasks, notes, and models, with expandable details where applicable.
    • Improved tag ordering based on usage across project and note views.
    • Added consistent section headings and compact field labels throughout the interface.
  • Style

    • Refined typography, spacing, badge sizing, and responsive font units across multiple screens.
    • Updated colors and highlights to follow the active theme, including success states, accents, legends, and priority badges.
    • Improved local AI setup selection styling.

Sort filter chips by usage, cap them behind a +N pill with a Show-all
toggle, move note-row tags below the date at xs size, shrink the editor
tag bar, cap project headers/pinned notes, and add +N overflow to mobile
rows. Overflow tooltips preview the first few names instead of dumping all.
- Generalize TagOverflow into a shared OverflowPill and use it for
  automation-run artifacts, task-flow previews, usage-by-model and
  recent agent sessions so capped lists always reveal hidden items.
- Add MicroLabel/SectionLabel components and normalize the ad-hoc micro
  font sizes; convert remaining pixel-based font sizes to the rem scale.
- Replace stray theme-token violations (green-400, hex fallbacks,
  rgba in dashboard template) and fix the onboarding provider card's
  undefined --purple-500 token.
@coderabbitai

coderabbitai Bot commented Aug 11, 2026 •

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@ddutchie, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 16 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 460b3695-0f32-440f-b4f4-0425489e5d0d

📥 Commits

Reviewing files that changed from the base of the PR and between a134729 and cff3a99.

📒 Files selected for processing (4)
  • mobile/src/components/TagChips.tsx
  • src/components/kanban/card.tsx
  • src/components/notes/notes-view.tsx
  • src/components/ui/overflow-pill.tsx
📝 Walkthrough

Walkthrough

The PR adds shared tag overflow and label components, applies capped rendering across web and mobile views, standardizes theme colors, and converts selected typography values to shared rem or utility styles.

Changes

UI standardization

Layer / File(s) Summary
Shared overflow and tag utilities
src/components/ui/overflow-pill.tsx, src/components/ui/labels.tsx, src/lib/tag-utils.ts, src/lib/tag-utils.test.ts
Adds reusable overflow and label components, tag sorting and capping utilities, and utility tests.
Web overflow integrations
src/components/layout/project-overview/..., src/components/notes/..., src/components/kanban/..., src/components/agent/..., src/components/usage/UsageView.tsx
Caps visible tags, sessions, models, cards, notes, and artifacts. Hidden items use OverflowPill.
Mobile tag overflow integration
mobile/src/components/TagChips.tsx, mobile/src/components/calendar/DayDetailRow.tsx, mobile/src/screens/project/NoteRowItem.tsx
Adds maximum tag counts and overflow chips to mobile tag displays.
Label, theme, and typography standardization
src/components/agent/..., src/components/onboarding/..., src/components/settings/..., src/components/ui/model-picker.tsx, src/components/flow/NodeEditModal.tsx, src/components/notes/..., src/components/graph/MatrixCanvas.tsx, changelogs/v2.6.11.md
Replaces inline labels with shared components, applies theme tokens, and updates selected font sizes and priority backgrounds.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant View
  participant TagUtils
  participant OverflowPill
  View->>TagUtils: Sort and cap tags
  TagUtils-->>View: Return visible and hidden tags
  View->>OverflowPill: Pass hidden count and names
  OverflowPill-->>View: Render overflow indicator
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 48.84% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main UI changes: tag overflow handling, label typography, and theme-token consistency.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ddutchie/tagcleanup

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@mobile/src/components/TagChips.tsx`:
- Around line 10-16: Normalize max to a non-negative integer before calculating
capped, shown, and overflow in TagChips; use the normalized value consistently
so fractional or invalid inputs cannot produce non-integer overflow labels.

In `@src/components/kanban/card.tsx`:
- Line 165: Update the tag preparation in the card component so tag IDs are
resolved and unresolved entries filtered before applying the visible-tag cap.
Derive the visible and extra tag arrays from the resolved tags, then calculate
the overflow count and names from the extra array so unresolved IDs cannot
produce empty tooltip entries or hide later valid tags.

In `@src/components/notes/notes-view.tsx`:
- Around line 325-334: Update hiddenProjectTags to derive hidden tags by
excluding the identifiers present in shownProjectTags, rather than slicing
sortedProjectTags by shownProjectTags.length. Preserve the existing
shownProjectTags behavior, including retaining an active tag appended from
outside the initial cap, so the active tag is never reported as hidden.

In `@src/components/ui/overflow-pill.tsx`:
- Around line 37-46: Update the overflow pill component to render a native
button with type="button" when onClick is provided, while preserving the
non-interactive span variant. Remove the manual role, tabIndex, and onKeyDown
handling, and keep the existing click styling and className behavior.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ec9770ae-f92b-4ee8-b5d6-f7e8e46e5da9

📥 Commits

Reviewing files that changed from the base of the PR and between f94ba5a and a134729.

📒 Files selected for processing (39)
  • changelogs/v2.6.11.md
  • mobile/src/components/TagChips.tsx
  • mobile/src/components/calendar/DayDetailRow.tsx
  • mobile/src/screens/project/NoteRowItem.tsx
  • src/components/agent/AgentEmptyState.tsx
  • src/components/agent/ArchitectureSidebar.tsx
  • src/components/agent/ArchitectureView.tsx
  • src/components/agent/GitView.tsx
  • src/components/agent/PlanApprovalCard.tsx
  • src/components/agent/git/FileSection.tsx
  • src/components/calendar/UnscheduledTray.tsx
  • src/components/chat/chat-panel/ChatMessageBubble.tsx
  • src/components/flow/NodeEditModal.tsx
  • src/components/graph/MatrixCanvas.tsx
  • src/components/kanban/card-detail-body.tsx
  • src/components/kanban/card.tsx
  • src/components/kanban/column.tsx
  • src/components/layout/conflict-resolution-modal.tsx
  • src/components/layout/project-overview/index.tsx
  • src/components/layout/project-overview/primitives.tsx
  • src/components/layout/project-overview/sections.tsx
  • src/components/notes/BacklinksPanel.tsx
  • src/components/notes/CodeBlock.tsx
  • src/components/notes/DashboardTemplateModal.tsx
  • src/components/notes/dashboard-view.tsx
  • src/components/notes/notes-view.tsx
  • src/components/notes/notes-view/NoteListItem.tsx
  • src/components/onboarding/StepAISetup.tsx
  • src/components/onboarding/StepCreateProject.tsx
  • src/components/settings/LlamaServerConsole.tsx
  • src/components/settings/MobileSettings.tsx
  • src/components/settings/tools/BrowseCommunityModal.tsx
  • src/components/shared/ConnectorToolCard.tsx
  • src/components/ui/labels.tsx
  • src/components/ui/model-picker.tsx
  • src/components/ui/overflow-pill.tsx
  • src/components/usage/UsageView.tsx
  • src/lib/tag-utils.test.ts
  • src/lib/tag-utils.ts

Comment thread mobile/src/components/TagChips.tsx Outdated
Comment thread src/components/kanban/card.tsx
Comment thread src/components/notes/notes-view.tsx Outdated
Comment thread src/components/ui/overflow-pill.tsx Outdated
- TagChips: normalize max to a non-negative integer before capping so
  fractional/invalid inputs can't render non-integer +N overflow labels.
- kanban card: resolve all tag ids and filter unresolved entries before
  applying the visible-tag cap, so a dead id can't hide a later valid tag
  and overflow count/names stay in sync.
- notes-view: derive hidden filter tags by excluding shown ids instead of
  slicing by shown length, so a promoted active tag is never listed as hidden.
- overflow-pill: render a native <button type=button> when interactive
  instead of a span with role/tabIndex/onKeyDown shims.
@ddutchie
ddutchie merged commit fcf2b90 into main Aug 11, 2026
6 checks passed
@ddutchie
ddutchie deleted the ddutchie/tagcleanup branch August 11, 2026 01:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant