Skip to content

web: adopt Notra UI components - #860

Open
devin-ai-integration[bot] wants to merge 3 commits into
mainfrom
feat/notra-ui-components
Open

devin-ai-integration[bot] wants to merge 3 commits into
mainfrom
feat/notra-ui-components

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Switches the dashboard's component primitives to Notra UI (a shadcn registry, registered as @notra in components.json). The Notra components are built on Base UI (@base-ui/react, added as a dep), so they sit alongside the existing radix-ui primitives rather than replacing them everywhere.

Swapped / added components:

  • Button — Depth gradient + squircle variants, plus loading and progress states (button-content.tsx carries the animations). Added an asChild shim that maps onto Base UI's render prop so the ~40 existing <Button asChild><Link/></Button> call sites keep working untouched.
  • Tooltip — Depth surface; inside a TooltipProvider all triggers share one popup that glides between them.
  • Sonner — Depth-styled toasts; wired to our useTheme hook (.dark on <html>) instead of next-themes.
  • IconTabs — new segmented selector; replaces the hand-rolled role="tablist" button row on the session detail page (Conversation / Events / Files).
  • Shimmer — sweeps the "Working" chip in session-conversation and "Streaming response…" in Session.tsx.
  • ChatMinimap — new rail on the session conversation: one line per turn, hover previews, click-to-scroll, active line driven by a viewport IntersectionObserver (the page scrolls, not the panel, so the bundled scroll-spy hook — which needs a scrollable root — stays for later use).

Also:

  • ui/hover-card and ui/card come from Notra's Base UI sources (the registry resolved them from the default shadcn registry in the Radix variant, which the chat-minimap render-prop API needs Base UI for).
  • New public /ui-demo route renders every swapped component with mock data — buttons incl. loading/progress, icon tabs, gliding tooltips, shimmer, toasts, and a mock conversation with the minimap. Handy for design iteration and review without a backend session.
  • ui/table, ui/checkbox, ui/skeleton refreshed to the radix-nova styles Notra's registry ships; theme tokens for the new animations live in index.css.

Verified: npm run typecheck, npm test (343), npm run lint (clean on touched files; repo has ~17 pre-existing errors elsewhere), npm run build, and visual check of /ui-demo in light + dark.

Test plan

  • Open /ui-demo and click through each section (toast buttons need a click, tooltip/minimap need a hover)
  • Open a managed session with several turns — icon tabs should slide the indicator, the right-hand minimap rail should scroll to a turn on click and highlight the on-screen turn while scrolling
  • Trigger an action in the app — toast should use the Depth surface and follow the current theme

Link to Devin session: https://app.devin.ai/sessions/a68d4d0e1ceb4f5682af00658ed3d9ad
Open in Devin Desktop: https://app.devin.ai/desktop/session/a68d4d0e1ceb4f5682af00658ed3d9ad?variant=devin
Requested by: @motatoes


Devin Review

Polylane reviews this pull request when you ask:

Review with Polylane

…himmer, chat-minimap)

Registers the ui.usenotra.com shadcn registry and swaps the dashboard's
primitives for Notra's Base UI variants:

- button: Depth gradient + squircle styles, loading/progress states; an
  asChild shim maps to Base UI's render prop so existing call sites keep
  working unchanged.
- tooltip: Depth surface with a shared popup that glides between triggers.
- sonner: Depth-styled toasts wired to our useTheme hook instead of
  next-themes.
- icon-tabs: replaces the hand-rolled Conversation/Events/Files tablist on
  the session detail page.
- shimmer: sweeps the 'Working' chip and 'Streaming response' text.
- chat-minimap: rail of turns on the session conversation with a viewport
  scroll-spy and click-to-scroll.

Also adds a public /ui-demo playground page exercising every swapped
component (mock session conversation, toasts, theme toggle).

Co-Authored-By: Mohamed <mo@digger.dev>
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".

  • Disable automatic comment, CI, and merge conflict monitoring

@socket-security

socket-security Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addednpm/​@​base-ui/​react@​1.8.0721008992100
Addednpm/​cn@​0.4.0861009994100

View full report

@devin-ai-integration devin-ai-integration Bot left a comment •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

✅ Devin resolved all 2 findings on c18092f

Fixed by Devin (2)

  • Minimap loses scroll tracking after tab switch
  • Minimap highlights later visible turns

View all findings in Devin Review

Devin Review

devin-ai-integration Bot and others added 2 commits October 8, 2026 20:36
…bility

- Re-run the IntersectionObserver effect on activeTab so remounted turn
  elements are observed again after returning to the Conversation tab.
- Track all intersecting turns in a Set and highlight the smallest index
  (topmost) instead of whichever entry fired last in the batch.

Co-Authored-By: Mohamed <mo@digger.dev>
- Replace the bare text+button row in the Deploy from GitHub panel with the
  shared EmptyState (icon, title, description, action) in both Settings and
  the per-environment GitHub panel.
- Render the 'managed GitHub App is not configured' notice as a bordered
  callout with an icon instead of raw destructive text.

Co-Authored-By: Mohamed <mo@digger.dev>

This branch has not been deployed

No deployments
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