Skip to content

Conversation

MananTank
Copy link
Member

@MananTank MananTank commented Oct 9, 2025


PR-Codex overview

This PR primarily focuses on cleaning up the code by removing unused components and making adjustments to the styling and structure of existing components in the apps/dashboard directory. It also updates dependencies in the package.json file.

Detailed summary

  • Deleted DarkVeil.tsx and BridgeVeil.tsx components.
  • Removed the <BridgeVeil /> component from BridgePage.
  • Adjusted padding and margin in PageHeader and BridgePage.
  • Updated button size and class names in BuyAndSwapEmbed.
  • Changed heading styles in BridgePage.
  • Updated DataPill and DotsBackgroundPattern styles.
  • Updated dependency versions in package.json.

✨ Ask PR-Codex anything about this PR by commenting with /codex {your question}

Summary by CodeRabbit

  • Style

    • Removed animated veil background and simplified header visuals; tightened responsive typography, spacing, borders, paddings, and colors for improved contrast.
    • Added a small dot icon beside the first pill on mobile, improved pill layout and muted pill text color on larger screens.
    • Made tab buttons smaller and refined active-state styling.
  • Refactor

    • Removed legacy veil background components to simplify the UI.
  • Chores

    • Removed an unused graphics dependency from the dashboard.

Copy link

linear bot commented Oct 9, 2025

Copy link

vercel bot commented Oct 9, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
docs-v2 Ready Ready Preview Comment Oct 13, 2025 9:52pm
nebula Ready Ready Preview Comment Oct 13, 2025 9:52pm
thirdweb_playground Ready Ready Preview Comment Oct 13, 2025 9:52pm
thirdweb-www Ready Ready Preview Comment Oct 13, 2025 9:52pm
wallet-ui Ready Ready Preview Comment Oct 13, 2025 9:52pm

Copy link

changeset-bot bot commented Oct 9, 2025

⚠️ No Changeset found

Latest commit: 43b0680

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@github-actions github-actions bot added the Dashboard Involves changes to the Dashboard. label Oct 9, 2025
Copy link
Member Author


How to use the Graphite Merge Queue

Add either label to this PR to merge it via the merge queue:

  • merge-queue - adds this PR to the back of the merge queue
  • hotfix - for urgent hot fixes, skip the queue and merge this PR next

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

This stack of pull requests is managed by Graphite. Learn more about stacking.

@MananTank MananTank marked this pull request as ready for review October 9, 2025 10:36
@MananTank MananTank requested review from a team as code owners October 9, 2025 10:36
Copy link
Contributor

coderabbitai bot commented Oct 9, 2025

Walkthrough

Removed the ogl dependency and deleted the DarkVeil and BridgeVeil components; updated Bridge page/header styles and a Button size/class in BuyAndSwapEmbed. No runtime control-flow changes beyond removing the veil render path.

Changes

Cohort / File(s) Summary of changes
Veil / dependency removal
apps/dashboard/package.json, apps/dashboard/src/@/components/DarkVeil.tsx, apps/dashboard/src/app/bridge/components/BridgeVeil.tsx
Removed ogl from package.json dependencies. Deleted DarkVeil component (WebGL/ogl shaders, program, uniforms, mesh, renderer, resize/animation lifecycle) and its Props type. Deleted BridgeVeil wrapper that selected theme-based props and rendered DarkVeil.
Bridge page & header adjustments
apps/dashboard/src/app/bridge/page.tsx, apps/dashboard/src/app/bridge/components/header.tsx
Removed BridgeVeil import/usage. Added DotIcon between pills on small screens. Tightened header spacing and reduced title size on small screens (lg unchanged). Adjusted pills layout, color tokens, visibility rules, and removed border-border/50 modifier.
Buy & Swap embed UI tweak
apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx
TabButton now passes size="sm" to Button. Button class changed: px-5px-4; active border class border-foregroundborder-foreground/50. No logic changes.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant Page as Bridge Page
  participant UI as UI Layout
  participant Veil as BridgeVeil (was)
  participant Dark as DarkVeil (was)

  rect rgba(220,230,241,0.35)
    Note over Page,UI: Previous flow (before changes)
    Page->>UI: render header & content
    UI->>Veil: include BridgeVeil
    Veil->>Dark: mount DarkVeil (WebGL / ogl)
    Dark-->>Veil: render loop / uniforms
    Veil-->>UI: visual overlay
  end

  rect rgba(237,245,233,0.35)
    Note over Page,UI: New flow (after changes)
    Page->>UI: render header & content (no veil)
    UI-->>Page: No BridgeVeil / DarkVeil included
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Pre-merge checks and finishing touches

❌ Failed checks (3 warnings)
Check name Status Explanation Resolution
Out of Scope Changes Check ⚠️ Warning Beyond the Bridge page refactor, the PR removes the ogl dependency from the dashboard package.json and alters styling in the BuyAndSwapEmbed component, which are unrelated to the MNY-242 goal and thus constitute out-of-scope changes. Please separate dependency cleanup and BuyAndSwapEmbed styling updates into a distinct PR or provide justification for including these changes alongside the Bridge page simplification.
Description Check ⚠️ Warning The PR description retains the unfilled template comments and provides a PR-Codex overview but does not populate the required “## title”, “## Notes for the reviewer”, or “## How to test” sections with actual content, leaving essential context and testing instructions missing. Please remove the placeholder template comments and fill in the “## title”, “## Notes for the reviewer”, and “## How to test” sections with the actual title, review notes, and testing instructions.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Title Check ✅ Passed The title accurately reflects the core change of removing the animated background from the Bridge page and includes the issue tag, making it concise, specific, and focused on the primary modification.
Linked Issues Check ✅ Passed The PR fully addresses the MNY-242 objectives by removing the animated DarkVeil and BridgeVeil backgrounds on the Bridge page, simplifying the layout and styling to emphasize utility, fixing mobile spacing to prevent overlap, and refining component styles for a cleaner, functionality-focused UI.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch mny-242

Warning

Review ran into problems

🔥 Problems

Errors were encountered while retrieving linked issues.

Errors (1)
  • TEAM-0000: Entity not found: Issue - Could not find referenced Issue.

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

Copy link
Contributor

github-actions bot commented Oct 9, 2025

size-limit report 📦

Path Size Loading time (3g) Running time (snapdragon) Total time
thirdweb (esm) 64.51 KB (0%) 1.3 s (0%) 1.6 s (-2.95% 🔽) 2.9 s
thirdweb (cjs) 366.04 KB (0%) 7.4 s (0%) 13.9 s (-5.4% 🔽) 21.2 s
thirdweb (minimal + tree-shaking) 5.73 KB (0%) 115 ms (0%) 255 ms (+136.34% 🔺) 370 ms
thirdweb/chains (tree-shaking) 526 B (0%) 11 ms (0%) 62 ms (+26.67% 🔺) 72 ms
thirdweb/react (minimal + tree-shaking) 19.13 KB (0%) 383 ms (0%) 128 ms (+72.76% 🔺) 511 ms

Copy link

codecov bot commented Oct 9, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 55.03%. Comparing base (cccbde9) to head (43b0680).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #8219   +/-   ##
=======================================
  Coverage   55.02%   55.03%           
=======================================
  Files         919      919           
  Lines       60583    60583           
  Branches     4127     4131    +4     
=======================================
+ Hits        33335    33341    +6     
+ Misses      27145    27138    -7     
- Partials      103      104    +1     
Flag Coverage Δ
packages 55.03% <ø> (+<0.01%) ⬆️
see 2 files with indirect coverage changes
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (2)
apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx (1)

235-253: Consider exposing a className prop on TabButton.

Per the coding guidelines for dashboard components, every component should expose a className prop on its root element to allow style composition when needed. While not critical, adding this would align with the established pattern.

Apply this diff to add className support:

 function TabButton(props: {
   label: string;
   onClick: () => void;
   isActive: boolean;
+  className?: string;
 }) {
   return (
     <Button
       onClick={props.onClick}
       size="sm"
       className={cn(
         "rounded-full text-muted-foreground px-4 bg-accent",
         props.isActive && "text-foreground border-foreground/50",
+        props.className,
       )}
       variant="outline"
     >
       {props.label}
     </Button>
   );
 }

As per coding guidelines.

apps/dashboard/src/app/bridge/page.tsx (1)

70-75: Add aria-hidden to decorative DotIcon.

The DotIcon serves as a visual separator on mobile and is appropriately hidden on large screens with lg:hidden. However, since it's purely decorative, it should include aria-hidden="true" to prevent screen readers from announcing it.

Apply this diff:

-              <DotIcon className="size-3 text-muted-foreground lg:hidden" />
+              <DotIcon className="size-3 text-muted-foreground lg:hidden" aria-hidden="true" />
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between ed110bd and 498fc20.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (6)
  • apps/dashboard/package.json (0 hunks)
  • apps/dashboard/src/@/components/DarkVeil.tsx (0 hunks)
  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx (1 hunks)
  • apps/dashboard/src/app/bridge/components/BridgeVeil.tsx (0 hunks)
  • apps/dashboard/src/app/bridge/components/header.tsx (1 hunks)
  • apps/dashboard/src/app/bridge/page.tsx (4 hunks)
💤 Files with no reviewable changes (3)
  • apps/dashboard/src/@/components/DarkVeil.tsx
  • apps/dashboard/src/app/bridge/components/BridgeVeil.tsx
  • apps/dashboard/package.json
🧰 Additional context used
📓 Path-based instructions (5)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx}: Write idiomatic TypeScript with explicit function declarations and return types
Limit each file to one stateless, single-responsibility function for clarity
Re-use shared types from @/types or local types.ts barrels
Prefer type aliases over interface except for nominal shapes
Avoid any and unknown unless unavoidable; narrow generics when possible
Choose composition over inheritance; leverage utility types (Partial, Pick, etc.)
Comment only ambiguous logic; avoid restating TypeScript in prose

**/*.{ts,tsx}: Use explicit function declarations and explicit return types in TypeScript
Limit each file to one stateless, single‑responsibility function
Re‑use shared types from @/types where applicable
Prefer type aliases over interface except for nominal shapes
Avoid any and unknown unless unavoidable; narrow generics when possible
Prefer composition over inheritance; use utility types (Partial, Pick, etc.)
Lazy‑import optional features and avoid top‑level side‑effects to reduce bundle size

Files:

  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx
  • apps/dashboard/src/app/bridge/page.tsx
  • apps/dashboard/src/app/bridge/components/header.tsx
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Load heavy dependencies inside async paths to keep initial bundle lean (lazy loading)

Files:

  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx
  • apps/dashboard/src/app/bridge/page.tsx
  • apps/dashboard/src/app/bridge/components/header.tsx
apps/{dashboard,playground-web}/**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

apps/{dashboard,playground-web}/**/*.{ts,tsx}: Import UI primitives from @/components/ui/* (Button, Input, Select, Tabs, Card, Sidebar, Badge, Separator) in dashboard and playground apps
Use NavLink for internal navigation with automatic active states in dashboard and playground apps
Use Tailwind CSS only – no inline styles or CSS modules
Use cn() from @/lib/utils for conditional class logic
Use design system tokens (e.g., bg-card, border-border, text-muted-foreground)
Server Components (Node edge): Start files with import "server-only";
Client Components (browser): Begin files with 'use client';
Always call getAuthToken() to retrieve JWT from cookies on server side
Use Authorization: Bearer header – never embed tokens in URLs
Return typed results (e.g., Project[], User[]) – avoid any
Wrap client-side data fetching calls in React Query (@tanstack/react-query)
Use descriptive, stable queryKeys for React Query cache hits
Configure staleTime/cacheTime in React Query based on freshness (default ≥ 60s)
Keep tokens secret via internal API routes or server actions
Never import posthog-js in server components

Files:

  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx
  • apps/dashboard/src/app/bridge/page.tsx
  • apps/dashboard/src/app/bridge/components/header.tsx
apps/{dashboard,playground}/**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

apps/{dashboard,playground}/**/*.{ts,tsx}: Import UI primitives from @/components/ui/_ (e.g., Button, Input, Tabs, Card)
Use NavLink for internal navigation to get active state handling
Use Tailwind CSS for styling; no inline styles
Merge class names with cn() from @/lib/utils for conditional classes
Stick to design tokens (e.g., bg-card, border-border, text-muted-foreground)
Server Components must start with import "server-only"; use next/headers, server‑only env, heavy data fetching, and redirect() where appropriate
Client Components must start with 'use client'; handle interactivity with hooks and browser APIs
Server-side data fetching: call getAuthToken() from cookies, send Authorization: Bearer <token> header, and return typed results (avoid any)
Client-side data fetching: wrap calls in React Query with descriptive, stable queryKeys and set sensible staleTime/cacheTime (≥ 60s default); keep tokens secret via internal routes or server actions
Do not import posthog-js in server components (client-side only)

Files:

  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx
  • apps/dashboard/src/app/bridge/page.tsx
  • apps/dashboard/src/app/bridge/components/header.tsx
apps/{dashboard,playground}/**/*.tsx

📄 CodeRabbit inference engine (AGENTS.md)

Expose a className prop on the root element of every component

Files:

  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx
  • apps/dashboard/src/app/bridge/page.tsx
  • apps/dashboard/src/app/bridge/components/header.tsx
🧠 Learnings (1)
📚 Learning: 2025-07-18T19:20:32.530Z
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-07-18T19:20:32.530Z
Learning: Applies to dashboard/**/*.{tsx,jsx} : Prefer composable primitives over custom markup: `Button`, `Input`, `Select`, `Tabs`, `Card`, `Sidebar`, `Separator`, `Badge`.

Applied to files:

  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
  • GitHub Check: E2E Tests (pnpm, vite)
  • GitHub Check: E2E Tests (pnpm, esbuild)
  • GitHub Check: E2E Tests (pnpm, webpack)
  • GitHub Check: Size
  • GitHub Check: Unit Tests
  • GitHub Check: Build Packages
  • GitHub Check: Lint Packages
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (7)
apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx (1)

243-246: LGTM! Button styling refined for cleaner UI.

The changes—adding size="sm", reducing padding from px-5 to px-4, and making the active border more subtle with border-foreground/50—align well with the PR's objective to simplify and modernize the interface.

apps/dashboard/src/app/bridge/components/header.tsx (1)

9-9: LGTM! Border simplification aligns with PR objectives.

Removing the border opacity modifier (border-border/50border-border) simplifies the visual hierarchy and aligns with the goal of creating a cleaner, more utility-focused interface.

apps/dashboard/src/app/bridge/page.tsx (5)

2-2: LGTM! Valid import from lucide-react.

The DotIcon import follows the recommended tree-shakable pattern for lucide-react and is properly utilized on line 72.

Based on learnings


61-61: Mobile spacing optimization looks good; verify large-screen value consistency.

The reduction from h-20 to h-12 on mobile screens improves the mobile experience by reducing excessive whitespace. However, note the inconsistency in large-screen spacing values:

  • Line 61: lg:h-20
  • Line 78: lg:h-16

Verify whether the different large-screen spacing values (h-20 vs h-16) are intentional design choices or should be standardized for consistency.

Also applies to: 78-78


65-68: LGTM! Responsive typography improves mobile readability.

The headline size reduction on mobile (from text-5xl to text-3xl) while maintaining md:text-6xl for larger screens creates a better mobile experience. The explicit leading classes (leading-8 lg:leading-none) provide precise vertical rhythm control.


132-138: Excellent mobile-first responsive pattern.

The DataPill implementation follows best practices by rendering as plain text on mobile and progressively enhancing with card styling, backdrop blur, and borders on large screens. This approach reduces visual clutter on smaller viewports while maintaining rich styling on desktop.

The use of design tokens (text-muted-foreground, bg-card, border-border) and the lg: prefix pattern aligns with the coding guidelines.

As per coding guidelines


140-155: LGTM! Background pattern changes align perfectly with PR objectives.

The DotsBackgroundPattern updates address the core PR goals:

  1. Removes distracting colors: Pink accent colors replaced with neutral, theme-aware tokens (text-foreground/20, text-muted-foreground/20)
  2. Fixes mobile layout: Pattern hidden on mobile with hidden lg:block, eliminating overlap issues mentioned in the PR objectives
  3. Maintains desktop utility: Pattern remains visible on large screens at appropriate opacity

This change delivers the cleaner, utility-focused UI specified in the requirements.

Copy link
Contributor

graphite-app bot commented Oct 11, 2025

Merge activity

  • Oct 11, 12:50 AM UTC: This pull request can not be added to the Graphite merge queue. Please try rebasing and resubmitting to merge when ready.
  • Oct 11, 12:50 AM UTC: Graphite disabled "merge when ready" on this PR due to: a merge conflict with the target branch; resolve the conflict and try again..
  • Oct 13, 9:43 PM UTC: MananTank added this pull request to the Graphite merge queue.
  • Oct 13, 9:52 PM UTC: Merged by the Graphite merge queue.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (1)
apps/dashboard/src/app/bridge/page.tsx (1)

132-138: Responsive styling looks good; consider adding className prop.

The responsive design is well-implemented, showing plain text on mobile and styled pills on desktop. However, per coding guidelines, all components in dashboard apps should expose a className prop on the root element.

As per coding guidelines, consider adding a className prop:

-function DataPill(props: { children: React.ReactNode }) {
+function DataPill(props: { children: React.ReactNode; className?: string }) {
   return (
-    <p className="lg:bg-card flex items-center gap-1.5 text-muted-foreground text-xs lg:backdrop-blur-lg lg:border lg:border-border/70 rounded-full lg:px-3 lg:py-1.5 hover:text-foreground transition-colors duration-300">
+    <p className={cn("lg:bg-card flex items-center gap-1.5 text-muted-foreground text-xs lg:backdrop-blur-lg lg:border lg:border-border/70 rounded-full lg:px-3 lg:py-1.5 hover:text-foreground transition-colors duration-300", props.className)}>
       {props.children}
     </p>
   );
 }
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 498fc20 and 642c3f5.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (6)
  • apps/dashboard/package.json (0 hunks)
  • apps/dashboard/src/@/components/DarkVeil.tsx (0 hunks)
  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx (1 hunks)
  • apps/dashboard/src/app/bridge/components/BridgeVeil.tsx (0 hunks)
  • apps/dashboard/src/app/bridge/components/header.tsx (1 hunks)
  • apps/dashboard/src/app/bridge/page.tsx (4 hunks)
💤 Files with no reviewable changes (3)
  • apps/dashboard/package.json
  • apps/dashboard/src/app/bridge/components/BridgeVeil.tsx
  • apps/dashboard/src/@/components/DarkVeil.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx
🧰 Additional context used
📓 Path-based instructions (5)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx}: Write idiomatic TypeScript with explicit function declarations and return types
Limit each file to one stateless, single-responsibility function for clarity
Re-use shared types from @/types or local types.ts barrels
Prefer type aliases over interface except for nominal shapes
Avoid any and unknown unless unavoidable; narrow generics when possible
Choose composition over inheritance; leverage utility types (Partial, Pick, etc.)
Comment only ambiguous logic; avoid restating TypeScript in prose

**/*.{ts,tsx}: Use explicit function declarations and explicit return types in TypeScript
Limit each file to one stateless, single‑responsibility function
Re‑use shared types from @/types where applicable
Prefer type aliases over interface except for nominal shapes
Avoid any and unknown unless unavoidable; narrow generics when possible
Prefer composition over inheritance; use utility types (Partial, Pick, etc.)
Lazy‑import optional features and avoid top‑level side‑effects to reduce bundle size

Files:

  • apps/dashboard/src/app/bridge/page.tsx
  • apps/dashboard/src/app/bridge/components/header.tsx
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Load heavy dependencies inside async paths to keep initial bundle lean (lazy loading)

Files:

  • apps/dashboard/src/app/bridge/page.tsx
  • apps/dashboard/src/app/bridge/components/header.tsx
apps/{dashboard,playground-web}/**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

apps/{dashboard,playground-web}/**/*.{ts,tsx}: Import UI primitives from @/components/ui/* (Button, Input, Select, Tabs, Card, Sidebar, Badge, Separator) in dashboard and playground apps
Use NavLink for internal navigation with automatic active states in dashboard and playground apps
Use Tailwind CSS only – no inline styles or CSS modules
Use cn() from @/lib/utils for conditional class logic
Use design system tokens (e.g., bg-card, border-border, text-muted-foreground)
Server Components (Node edge): Start files with import "server-only";
Client Components (browser): Begin files with 'use client';
Always call getAuthToken() to retrieve JWT from cookies on server side
Use Authorization: Bearer header – never embed tokens in URLs
Return typed results (e.g., Project[], User[]) – avoid any
Wrap client-side data fetching calls in React Query (@tanstack/react-query)
Use descriptive, stable queryKeys for React Query cache hits
Configure staleTime/cacheTime in React Query based on freshness (default ≥ 60s)
Keep tokens secret via internal API routes or server actions
Never import posthog-js in server components

Files:

  • apps/dashboard/src/app/bridge/page.tsx
  • apps/dashboard/src/app/bridge/components/header.tsx
apps/{dashboard,playground}/**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

apps/{dashboard,playground}/**/*.{ts,tsx}: Import UI primitives from @/components/ui/_ (e.g., Button, Input, Tabs, Card)
Use NavLink for internal navigation to get active state handling
Use Tailwind CSS for styling; no inline styles
Merge class names with cn() from @/lib/utils for conditional classes
Stick to design tokens (e.g., bg-card, border-border, text-muted-foreground)
Server Components must start with import "server-only"; use next/headers, server‑only env, heavy data fetching, and redirect() where appropriate
Client Components must start with 'use client'; handle interactivity with hooks and browser APIs
Server-side data fetching: call getAuthToken() from cookies, send Authorization: Bearer <token> header, and return typed results (avoid any)
Client-side data fetching: wrap calls in React Query with descriptive, stable queryKeys and set sensible staleTime/cacheTime (≥ 60s default); keep tokens secret via internal routes or server actions
Do not import posthog-js in server components (client-side only)

Files:

  • apps/dashboard/src/app/bridge/page.tsx
  • apps/dashboard/src/app/bridge/components/header.tsx
apps/{dashboard,playground}/**/*.tsx

📄 CodeRabbit inference engine (AGENTS.md)

Expose a className prop on the root element of every component

Files:

  • apps/dashboard/src/app/bridge/page.tsx
  • apps/dashboard/src/app/bridge/components/header.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
  • GitHub Check: E2E Tests (pnpm, webpack)
  • GitHub Check: E2E Tests (pnpm, esbuild)
  • GitHub Check: E2E Tests (pnpm, vite)
  • GitHub Check: Size
  • GitHub Check: Unit Tests
  • GitHub Check: Build Packages
  • GitHub Check: Lint Packages
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (6)
apps/dashboard/src/app/bridge/components/header.tsx (1)

9-9: LGTM! Simplified border styling.

Removing the opacity modifier simplifies the styling and aligns with the PR's goal of cleaning up the UI.

apps/dashboard/src/app/bridge/page.tsx (5)

2-2: LGTM! Valid icon import.

DotIcon is correctly imported from lucide-react and used as a visual separator in the pills section.


61-61: LGTM! Responsive spacing improvements.

The reduced vertical spacing on mobile creates a more compact layout, addressing the mobile layout issues mentioned in the PR objectives.

Also applies to: 78-78


65-65: LGTM! Improved mobile typography.

The reduced heading size on mobile (text-3xl) with appropriate line-height adjustments improves readability and aligns with the simplified design direction.


70-75: Verify the asymmetric dot placement.

The DotIcon appears only between the first two pills (85+ Chains and 4500+ Tokens) but not between the second and third pills. This creates an asymmetric layout on mobile.

Is this intentional, or should dots separate all pills consistently?


140-155: LGTM! Improved design tokens and mobile visibility.

The pattern now uses proper design system tokens and is hidden on mobile, creating a cleaner mobile experience while maintaining visual interest on desktop.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between eff213c and 7409750.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (6)
  • apps/dashboard/package.json (0 hunks)
  • apps/dashboard/src/@/components/DarkVeil.tsx (0 hunks)
  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx (1 hunks)
  • apps/dashboard/src/app/bridge/components/BridgeVeil.tsx (0 hunks)
  • apps/dashboard/src/app/bridge/components/header.tsx (1 hunks)
  • apps/dashboard/src/app/bridge/page.tsx (4 hunks)
💤 Files with no reviewable changes (3)
  • apps/dashboard/src/app/bridge/components/BridgeVeil.tsx
  • apps/dashboard/package.json
  • apps/dashboard/src/@/components/DarkVeil.tsx
🚧 Files skipped from review as they are similar to previous changes (2)
  • apps/dashboard/src/app/bridge/components/header.tsx
  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx
🧰 Additional context used
📓 Path-based instructions (5)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx}: Write idiomatic TypeScript with explicit function declarations and return types
Limit each file to one stateless, single-responsibility function for clarity
Re-use shared types from @/types or local types.ts barrels
Prefer type aliases over interface except for nominal shapes
Avoid any and unknown unless unavoidable; narrow generics when possible
Choose composition over inheritance; leverage utility types (Partial, Pick, etc.)
Comment only ambiguous logic; avoid restating TypeScript in prose

**/*.{ts,tsx}: Use explicit function declarations and explicit return types in TypeScript
Limit each file to one stateless, single‑responsibility function
Re‑use shared types from @/types where applicable
Prefer type aliases over interface except for nominal shapes
Avoid any and unknown unless unavoidable; narrow generics when possible
Prefer composition over inheritance; use utility types (Partial, Pick, etc.)
Lazy‑import optional features and avoid top‑level side‑effects to reduce bundle size

Files:

  • apps/dashboard/src/app/bridge/page.tsx
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Load heavy dependencies inside async paths to keep initial bundle lean (lazy loading)

Files:

  • apps/dashboard/src/app/bridge/page.tsx
apps/{dashboard,playground-web}/**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

apps/{dashboard,playground-web}/**/*.{ts,tsx}: Import UI primitives from @/components/ui/* (Button, Input, Select, Tabs, Card, Sidebar, Badge, Separator) in dashboard and playground apps
Use NavLink for internal navigation with automatic active states in dashboard and playground apps
Use Tailwind CSS only – no inline styles or CSS modules
Use cn() from @/lib/utils for conditional class logic
Use design system tokens (e.g., bg-card, border-border, text-muted-foreground)
Server Components (Node edge): Start files with import "server-only";
Client Components (browser): Begin files with 'use client';
Always call getAuthToken() to retrieve JWT from cookies on server side
Use Authorization: Bearer header – never embed tokens in URLs
Return typed results (e.g., Project[], User[]) – avoid any
Wrap client-side data fetching calls in React Query (@tanstack/react-query)
Use descriptive, stable queryKeys for React Query cache hits
Configure staleTime/cacheTime in React Query based on freshness (default ≥ 60s)
Keep tokens secret via internal API routes or server actions
Never import posthog-js in server components

Files:

  • apps/dashboard/src/app/bridge/page.tsx
apps/{dashboard,playground}/**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

apps/{dashboard,playground}/**/*.{ts,tsx}: Import UI primitives from @/components/ui/_ (e.g., Button, Input, Tabs, Card)
Use NavLink for internal navigation to get active state handling
Use Tailwind CSS for styling; no inline styles
Merge class names with cn() from @/lib/utils for conditional classes
Stick to design tokens (e.g., bg-card, border-border, text-muted-foreground)
Server Components must start with import "server-only"; use next/headers, server‑only env, heavy data fetching, and redirect() where appropriate
Client Components must start with 'use client'; handle interactivity with hooks and browser APIs
Server-side data fetching: call getAuthToken() from cookies, send Authorization: Bearer <token> header, and return typed results (avoid any)
Client-side data fetching: wrap calls in React Query with descriptive, stable queryKeys and set sensible staleTime/cacheTime (≥ 60s default); keep tokens secret via internal routes or server actions
Do not import posthog-js in server components (client-side only)

Files:

  • apps/dashboard/src/app/bridge/page.tsx
apps/{dashboard,playground}/**/*.tsx

📄 CodeRabbit inference engine (AGENTS.md)

Expose a className prop on the root element of every component

Files:

  • apps/dashboard/src/app/bridge/page.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
  • GitHub Check: Size
  • GitHub Check: E2E Tests (pnpm, webpack)
  • GitHub Check: E2E Tests (pnpm, vite)
  • GitHub Check: E2E Tests (pnpm, esbuild)
  • GitHub Check: Lint Packages
  • GitHub Check: Build Packages
  • GitHub Check: Unit Tests
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (5)
apps/dashboard/src/app/bridge/page.tsx (5)

2-2: LGTM!

The DotIcon import follows lucide-react best practices with a named import for optimal tree-shaking. Based on learnings, version 0.525.0 includes this icon.


61-61: Excellent responsive spacing improvements.

Reducing header and section heights on mobile (h-12 vs h-20/h-16 on desktop) directly addresses the mobile layout issues mentioned in PR objectives while preserving desktop spacing.

Also applies to: 78-78


65-65: Well-executed responsive typography.

The title now scales appropriately from mobile (text-3xl) to desktop (md:text-6xl) with proper line-height control (leading-8 lg:leading-none). The text-balance utility improves text wrapping across viewport sizes.


134-134: Excellent responsive pill pattern.

The DataPill styling elegantly handles mobile vs desktop: plain text on small screens (lightweight), full pill styling on large screens (lg: prefixed classes). This follows design system tokens and aligns perfectly with the PR's goal to simplify mobile UI while maintaining visual polish on desktop.


144-144: Perfect alignment with PR objectives.

Hiding the dots pattern on mobile (hidden lg:block) directly addresses the goal to "remove or tone down the moving gradient/animated background" that was overlapping the widget on mobile. The subtle opacity (foreground/20) on desktop keeps visual interest without distraction.

Comment on lines +70 to 75
<div className="flex flex-wrap gap-2 items-center justify-center">
<DataPill>85+ Chains Supported</DataPill>
<DotIcon className="size-3 text-muted-foreground lg:hidden" />
<DataPill>4500+ Tokens Supported</DataPill>
<DataPill>9+ Million Routes Available</DataPill>
</div>
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Add aria-hidden to the DotIcon and verify separator placement.

Two concerns:

  1. Accessibility: The DotIcon is purely decorative and should include aria-hidden="true" to prevent screen readers from announcing it.

  2. Asymmetric separator: Only one DotIcon appears between the first two pills, but not between the second and third. Is this intentional grouping, or should separators appear between all pills on small screens?

Apply this diff to add aria-hidden:

-              <DotIcon className="size-3 text-muted-foreground lg:hidden" />
+              <DotIcon className="size-3 text-muted-foreground lg:hidden" aria-hidden="true" />

To verify whether the separator placement is intentional or if additional separators are needed, please clarify the design intent for pill grouping on mobile.


📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<div className="flex flex-wrap gap-2 items-center justify-center">
<DataPill>85+ Chains Supported</DataPill>
<DotIcon className="size-3 text-muted-foreground lg:hidden" />
<DataPill>4500+ Tokens Supported</DataPill>
<DataPill>9+ Million Routes Available</DataPill>
</div>
<div className="flex flex-wrap gap-2 items-center justify-center">
<DataPill>85+ Chains Supported</DataPill>
<DotIcon className="size-3 text-muted-foreground lg:hidden" aria-hidden="true" />
<DataPill>4500+ Tokens Supported</DataPill>
<DataPill>9+ Million Routes Available</DataPill>
</div>
🤖 Prompt for AI Agents
In apps/dashboard/src/app/bridge/page.tsx around lines 70-75, the DotIcon is
decorative so add aria-hidden="true" to the element, and for consistent
small-screen separators insert the same DotIcon (with className="size-3
text-muted-foreground lg:hidden" and aria-hidden="true") between each DataPill
(i.e., after the first and second pills) so separators appear uniformly on small
screens while remaining hidden on large screens.

<!--

## title your PR with this format: "[SDK/Dashboard/Portal] Feature/Fix: Concise title for the changes"

If you did not copy the branch name from Linear, paste the issue tag here (format is TEAM-0000):

## Notes for the reviewer

Anything important to call out? Be sure to also clarify these in your comments.

## How to test

Unit tests, playground, etc.

-->

<!-- start pr-codex -->

---

## PR-Codex overview
This PR primarily focuses on code cleanup and improvements in the `apps/dashboard` project. It removes unused components and makes adjustments to existing components for better styling and functionality.

### Detailed summary
- Deleted `DarkVeil` and `BridgeVeil` components.
- Adjusted the styling of the `PageHeader` component.
- Modified button size and styles in `BuyAndSwapEmbed`.
- Updated `BridgePage` component layout and header styles.
- Improved `DataPill` component styles.
- Refined `DotsBackgroundPattern` visibility and styles.
- Updated dependency versions in `package.json` and `pnpm-lock.yaml`.

> ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}`

<!-- end pr-codex -->

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

* **Style**
  * Removed animated veil background and simplified header visuals; adjusted responsive typography, spacing, borders, paddings, and colors for improved light/dark contrast.
  * Added a small dot icon beside the first pill on mobile, improved pill layout and muted pill text color on larger screens.
  * Made tab buttons smaller and refined active-state styling.

* **Refactor**
  * Removed legacy veil background components to simplify the UI.

* **Chores**
  * Removed an unused graphics dependency from the dashboard.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (1)
apps/dashboard/src/app/bridge/page.tsx (1)

70-75: Existing accessibility concern already flagged in previous review.

A prior review comment already identified that the DotIcon at line 72 should include aria-hidden="true" since it's decorative. Please address that feedback.

🧹 Nitpick comments (1)
apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx (1)

241-252: Align padding with the sm size variant
The sm variant already applies px-3; your explicit px-4 will override it. Remove the custom px-4 (or switch to the default size) to rely on the variant’s padding.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 7409750 and 43b0680.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (6)
  • apps/dashboard/package.json (0 hunks)
  • apps/dashboard/src/@/components/DarkVeil.tsx (0 hunks)
  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx (1 hunks)
  • apps/dashboard/src/app/bridge/components/BridgeVeil.tsx (0 hunks)
  • apps/dashboard/src/app/bridge/components/header.tsx (1 hunks)
  • apps/dashboard/src/app/bridge/page.tsx (4 hunks)
💤 Files with no reviewable changes (3)
  • apps/dashboard/src/@/components/DarkVeil.tsx
  • apps/dashboard/package.json
  • apps/dashboard/src/app/bridge/components/BridgeVeil.tsx
🧰 Additional context used
📓 Path-based instructions (5)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx}: Write idiomatic TypeScript with explicit function declarations and return types
Limit each file to one stateless, single-responsibility function for clarity
Re-use shared types from @/types or local types.ts barrels
Prefer type aliases over interface except for nominal shapes
Avoid any and unknown unless unavoidable; narrow generics when possible
Choose composition over inheritance; leverage utility types (Partial, Pick, etc.)
Comment only ambiguous logic; avoid restating TypeScript in prose

**/*.{ts,tsx}: Use explicit function declarations and explicit return types in TypeScript
Limit each file to one stateless, single‑responsibility function
Re‑use shared types from @/types where applicable
Prefer type aliases over interface except for nominal shapes
Avoid any and unknown unless unavoidable; narrow generics when possible
Prefer composition over inheritance; use utility types (Partial, Pick, etc.)
Lazy‑import optional features and avoid top‑level side‑effects to reduce bundle size

Files:

  • apps/dashboard/src/app/bridge/components/header.tsx
  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx
  • apps/dashboard/src/app/bridge/page.tsx
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Load heavy dependencies inside async paths to keep initial bundle lean (lazy loading)

Files:

  • apps/dashboard/src/app/bridge/components/header.tsx
  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx
  • apps/dashboard/src/app/bridge/page.tsx
apps/{dashboard,playground-web}/**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

apps/{dashboard,playground-web}/**/*.{ts,tsx}: Import UI primitives from @/components/ui/* (Button, Input, Select, Tabs, Card, Sidebar, Badge, Separator) in dashboard and playground apps
Use NavLink for internal navigation with automatic active states in dashboard and playground apps
Use Tailwind CSS only – no inline styles or CSS modules
Use cn() from @/lib/utils for conditional class logic
Use design system tokens (e.g., bg-card, border-border, text-muted-foreground)
Server Components (Node edge): Start files with import "server-only";
Client Components (browser): Begin files with 'use client';
Always call getAuthToken() to retrieve JWT from cookies on server side
Use Authorization: Bearer header – never embed tokens in URLs
Return typed results (e.g., Project[], User[]) – avoid any
Wrap client-side data fetching calls in React Query (@tanstack/react-query)
Use descriptive, stable queryKeys for React Query cache hits
Configure staleTime/cacheTime in React Query based on freshness (default ≥ 60s)
Keep tokens secret via internal API routes or server actions
Never import posthog-js in server components

Files:

  • apps/dashboard/src/app/bridge/components/header.tsx
  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx
  • apps/dashboard/src/app/bridge/page.tsx
apps/{dashboard,playground}/**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

apps/{dashboard,playground}/**/*.{ts,tsx}: Import UI primitives from @/components/ui/_ (e.g., Button, Input, Tabs, Card)
Use NavLink for internal navigation to get active state handling
Use Tailwind CSS for styling; no inline styles
Merge class names with cn() from @/lib/utils for conditional classes
Stick to design tokens (e.g., bg-card, border-border, text-muted-foreground)
Server Components must start with import "server-only"; use next/headers, server‑only env, heavy data fetching, and redirect() where appropriate
Client Components must start with 'use client'; handle interactivity with hooks and browser APIs
Server-side data fetching: call getAuthToken() from cookies, send Authorization: Bearer <token> header, and return typed results (avoid any)
Client-side data fetching: wrap calls in React Query with descriptive, stable queryKeys and set sensible staleTime/cacheTime (≥ 60s default); keep tokens secret via internal routes or server actions
Do not import posthog-js in server components (client-side only)

Files:

  • apps/dashboard/src/app/bridge/components/header.tsx
  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx
  • apps/dashboard/src/app/bridge/page.tsx
apps/{dashboard,playground}/**/*.tsx

📄 CodeRabbit inference engine (AGENTS.md)

Expose a className prop on the root element of every component

Files:

  • apps/dashboard/src/app/bridge/components/header.tsx
  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx
  • apps/dashboard/src/app/bridge/page.tsx
🧠 Learnings (1)
📚 Learning: 2025-07-18T19:20:32.530Z
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-07-18T19:20:32.530Z
Learning: Applies to dashboard/**/*.{tsx,jsx} : Prefer composable primitives over custom markup: `Button`, `Input`, `Select`, `Tabs`, `Card`, `Sidebar`, `Separator`, `Badge`.

Applied to files:

  • apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Size
  • GitHub Check: Lint Packages
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (7)
apps/dashboard/src/app/bridge/components/header.tsx (1)

9-9: LGTM!

Removing the opacity modifier makes the border more prominent, aligning with the PR's goal to simplify the page design.

apps/dashboard/src/app/bridge/page.tsx (6)

2-2: LGTM!

The DotIcon import from lucide-react is correctly added to support the separator icon between data pills.

Based on learnings.


61-61: LGTM!

Reducing the header spacer height on small screens (h-12) while maintaining the original height on large screens (lg:h-20) improves the mobile layout by conserving vertical space.


65-68: LGTM!

The responsive typography adjustments improve readability across screen sizes:

  • Smaller base size (text-3xl) for mobile devices
  • Larger size (md:text-6xl) for medium+ screens
  • Preserved line-height control and text balancing

78-78: LGTM!

Consistent with the header spacer change, this reduces vertical spacing on small screens while maintaining the original spacing on large screens.


132-138: LGTM!

The responsive styling for DataPill is well-structured:

  • Base styling (text, gap, hover) applies to all sizes
  • Card background, backdrop blur, border, and padding apply only on large screens (lg: prefix)
  • This creates a cleaner, text-only appearance on mobile while maintaining the pill visual on desktop

140-155: LGTM!

The DotsBackgroundPattern changes align with the PR objectives:

  • Updated to use semantic color tokens (text-foreground/20 and dark:text-muted-foreground/20)
  • Hidden on small screens (hidden lg:block) to reduce visual clutter on mobile
  • Maintains the pattern effect on larger screens where it doesn't interfere with the widget

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Dashboard Involves changes to the Dashboard.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants