Skip to content

[Dashboard] migrate Box to shadcn #7125

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

jnsdls
Copy link
Member

@jnsdls jnsdls commented May 22, 2025

Summary

  • replace Chakra <Box> with divs across dashboard
  • convert custom Card component to Tailwind
  • update contract publish form and claim components
  • tweak marketplace listing form

Testing

  • pnpm biome check --apply (fails: The number of diagnostics exceeds the number allowed by Biome)
  • pnpm test (fails: spawn anvil ENOENT)

PR-Codex overview

This PR focuses on updating the styling of various Card components across multiple files in the project by replacing inline styles with Tailwind CSS classes, enhancing consistency and maintainability.

Detailed summary

  • Replaced bgColor and p props with Tailwind CSS classes for Card components.
  • Changed Box components to div with appropriate Tailwind classes.
  • Updated Card styling to use className for layout and design consistency.
  • Removed unnecessary props and improved overall code readability.

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

Summary by CodeRabbit

  • Style
    • Updated multiple UI components to use Tailwind CSS utility classes and native HTML elements instead of Chakra UI components and props. This affects cards, layout containers, media wrappers, and form elements across the dashboard, resulting in consistent styling and improved maintainability.
  • Refactor
    • Simplified and standardized the Card component and related interfaces, removing Chakra UI dependencies and streamlining property usage. No changes to component logic or functionality.
  • Chores
    • Removed unused imports and replaced Chakra UI wrappers with equivalent HTML elements for cleaner code. No impact on exported component interfaces.
  • New Features
    • Improved keyboard accessibility for NFT selection with focus, role, and key event handling enhancements.

@jnsdls jnsdls requested review from a team as code owners May 22, 2025 06:34
@jnsdls jnsdls added the codex label May 22, 2025 — with ChatGPT Connector
Copy link

changeset-bot bot commented May 22, 2025

⚠️ No Changeset found

Latest commit: 7ad4fee

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

Copy link

vercel bot commented May 22, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
thirdweb-www ✅ Ready (Inspect) Visit Preview 💬 Add feedback May 22, 2025 7:30am
4 Skipped Deployments
Name Status Preview Comments Updated (UTC)
docs-v2 ⬜️ Skipped (Inspect) May 22, 2025 7:30am
login ⬜️ Skipped (Inspect) May 22, 2025 7:30am
thirdweb_playground ⬜️ Skipped (Inspect) May 22, 2025 7:30am
wallet-ui ⬜️ Skipped (Inspect) May 22, 2025 7:30am

@vercel vercel bot temporarily deployed to Preview – thirdweb_playground May 22, 2025 06:34 Inactive
@vercel vercel bot temporarily deployed to Preview – login May 22, 2025 06:34 Inactive
@vercel vercel bot temporarily deployed to Preview – wallet-ui May 22, 2025 06:34 Inactive
@vercel vercel bot temporarily deployed to Preview – docs-v2 May 22, 2025 06:34 Inactive
Copy link
Contributor

graphite-app bot commented May 22, 2025

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.

Copy link

coderabbitai bot commented May 22, 2025

Walkthrough

This set of changes refactors various UI components across the dashboard application, removing dependencies on Chakra UI's Box, Card, Flex, and Stat components. These are replaced with native HTML elements styled using Tailwind CSS utility classes. The Card component is reimplemented to use standard HTML and Tailwind, and related props/interfaces are updated accordingly. Accessibility improvements were added in some components. No changes are made to component logic or exported APIs except for CardProps.

Changes

File(s) Change Summary
.../components/list-form.tsx
.../Inputs/ClaimPriceInput.tsx
.../Inputs/ClaimerSelection.tsx
.../claim-conditions-form/index.tsx
.../custom-factory.tsx
.../contract-publish-form/index.tsx
.../contract-publish-form/landing-fieldset.tsx
.../solidity-inputs/address-input.tsx
.../solidity-inputs/string-input.tsx
.../batch-upload/batch-table.tsx
Removed Chakra UI Box imports and usages, replacing them with native HTML elements (div, span, video) styled with Tailwind CSS classes. Layout and responsive behaviors are preserved using Tailwind utilities. Accessibility improvements were added in some components (e.g., keyboard handlers and ARIA attributes in list-form.tsx). The FileVideo component was refactored to use a native <video> element with explicit props instead of Chakra UI Box.
.../account/components/account-balance.tsx
.../accounts/components/accounts-count.tsx
.../proposals/ContractProposalsPage.tsx
.../split/ContractSplitPage.tsx
Removed Chakra UI Stat usage; Card components no longer use as={Stat} and instead apply [&>*]:m-0 class to remove margins from children. Inline or prop-based sizing is replaced with Tailwind or inline styles.
.../account-signer.tsx
.../settings/components/metadata.tsx
.../settings/components/platform-fees.tsx
.../settings/components/primary-sale.tsx
.../settings/components/royalties.tsx
Replaced Chakra UI prop-based styling on Card components (p, position, overflow) with Tailwind CSS class names for equivalent layout and appearance.
.../permissions/ContractPermissionsPage.tsx
.../published-contract/index.tsx
.../contract-functions/contract-function.tsx
.../smart-wallets/SponsorshipPolicies/index.tsx
Replaced Chakra UI Flex and Box wrappers with native HTML elements and Tailwind CSS classes for flex layouts and alignment.
.../events/events-feed.tsx
.../contract-subscriptions-table.tsx
.../metrics/components/EngineSystemMetrics.tsx
Replaced Chakra UI prop-based layout and background color usage on Card components with Tailwind CSS class names for padding, background, and layout.
.../tw-components/card.tsx Refactored the Card component to remove Chakra UI dependencies. Now uses a plain div with Tailwind CSS classes. The CardProps interface extends standard HTML div attributes. The outline border effect is reimplemented using nested divs and background gradients. The border radius logic and Chakra-specific props are removed.

Sequence Diagram(s)

sequenceDiagram
    participant UI as UI Component
    participant Card as Card (refactored)
    Note right of Card: Card now uses div + Tailwind<br>for styling and outline effect
    UI->>Card: Render Card with props (including outlineBorder)
    alt outlineBorder enabled
        Card->>Card: Wrap content with outer div for outline
        Card->>Card: Render inner div with Tailwind classes
    else outlineBorder disabled
        Card->>Card: Render single div with Tailwind classes
    end
    Card-->>UI: Rendered content
Loading

Suggested reviewers

  • MananTank

Suggested labels

Portal

Note

⚡️ AI Code Reviews for VS Code, Cursor, Windsurf

CodeRabbit now has a plugin for VS Code, Cursor and Windsurf. This brings AI code reviews directly in the code editor. Each commit is reviewed immediately, finding bugs before the PR is raised. Seamless context handoff to your AI code agent ensures that you can easily incorporate review feedback.
Learn more here.


Note

⚡️ Faster reviews with caching

CodeRabbit now supports caching for code and dependencies, helping speed up reviews. This means quicker feedback, reduced wait times, and a smoother review experience overall. Cached data is encrypted and stored securely. This feature will be automatically enabled for all accounts on May 30th. To opt out, configure Review - Disable Cache at either the organization or repository level. If you prefer to disable all data retention across your organization, simply turn off the Data Retention setting under your Organization Settings.
Enjoy the performance boost—your workflow just got faster.

✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions github-actions bot added the Dashboard Involves changes to the Dashboard. label May 22, 2025
Copy link

codecov bot commented May 22, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 55.58%. Comparing base (dcd6b99) to head (7ad4fee).
Report is 3 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #7125      +/-   ##
==========================================
- Coverage   55.62%   55.58%   -0.04%     
==========================================
  Files         902      902              
  Lines       58135    58162      +27     
  Branches     4087     4086       -1     
==========================================
- Hits        32337    32329       -8     
- Misses      25693    25731      +38     
+ Partials      105      102       -3     
Flag Coverage Δ
packages 55.58% <ø> (-0.04%) ⬇️

see 18 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

@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: 2

🧹 Nitpick comments (8)
apps/dashboard/src/core-ui/batch-upload/batch-table.tsx (1)

4-8: Remove unused Chakra BoxProps import or refactor its usage
Since you’ve replaced the Chakra <Box as="video"> wrapper with a native <video> element, the BoxProps type and its import are no longer needed for styling. Either remove the BoxProps import and drop it from the FileVideo signature, or convert your styling props into appropriate HTML/video attributes or Tailwind CSS classes.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/primary-sale.tsx (1)

70-71: Ensure Tailwind p-0 overrides default padding
The Card component applies default px-4 py-4 classes. Adding p-0 may not override those utilities due to Tailwind’s CSS ordering, so padding might persist. Consider using the !p-0 modifier for a forced override or extending Card with a prop (e.g., noPadding) to disable default padding.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/platform-fees.tsx (1)

78-79: Ensure Tailwind p-0 overrides default padding
As with the primary sale card, the Card component’s default px-4 py-4 classes may override your added p-0. To guarantee zero padding, use !p-0 or introduce a boolean prop on Card to disable its built-in padding.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/split/ContractSplitPage.tsx (1)

147-151: Consider using Tailwind classes for max-width instead of inline styles.

While the migration from Chakra's as={Stat} and maxWidth="2xs" works as intended, using inline styles for max-width can lead to inconsistency. Consider using Tailwind's max-width utility classes (e.g., max-w-xs) instead.

 <Card
   className="[&>*]:m-0"
   key={balance.token_address}
-  style={{ maxWidth: "20rem" }}
+  className="[&>*]:m-0 max-w-xs"
 >
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/proposals/ContractProposalsPage.tsx (1)

64-68: Consider using Tailwind classes for max-width instead of inline styles.

Similar to other components, using inline styles for max-width can lead to inconsistency. Consider using Tailwind's max-width utility classes instead for better maintainability and consistency with the design system.

 <Card
   className="[&>*]:m-0"
   key={balance.address}
-  style={{ maxWidth: 240 }}
+  className="[&>*]:m-0 max-w-[240px]"
 >
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx (1)

541-546: Sort Tailwind classes for better maintainability.

Sort the Tailwind classes alphabetically to improve code readability and maintainability.

 <div
   className={cn(
-    "rounded-lg overflow-hidden cursor-pointer",
+    "cursor-pointer overflow-hidden rounded-lg",
     isSelected(nft) &&
       "outline outline-3 outline-purple-500",
   )}
🧰 Tools
🪛 Biome (1.9.4)

[error] 541-552: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.

Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.

(lint/a11y/useKeyWithClickEvents)


[error] 543-543: These CSS classes should be sorted.

Unsafe fix: Sort the classes.

(lint/nursery/useSortedClasses)

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/ClaimPriceInput.tsx (1)

39-45: Box component successfully replaced with div and Tailwind classes

The Chakra UI Box component has been properly replaced with a standard HTML div element using appropriate Tailwind CSS utility classes.

According to the static analysis hints, the CSS classes should be sorted. Consider reordering them:

-<div className="min-w-[70px] w-full md:w-1/2">
+<div className="w-full min-w-[70px] md:w-1/2">
🧰 Tools
🪛 Biome (1.9.4)

[error] 39-39: These CSS classes should be sorted.

Unsafe fix: Sort the classes.

(lint/nursery/useSortedClasses)

apps/dashboard/src/tw-components/card.tsx (1)

22-37: Good implementation of outline border with pure CSS

The outline border implementation using nested divs and absolute positioning is a clean approach that replaces the Chakra UI styling method.

Note: The static analysis tool suggests sorting CSS classes on line 29.

-          className="absolute inset-0 -z-10"
+          className="-z-10 absolute inset-0"
🧰 Tools
🪛 Biome (1.9.4)

[error] 29-29: These CSS classes should be sorted.

Unsafe fix: Sort the classes.

(lint/nursery/useSortedClasses)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 376bdb2 and f358fe7.

📒 Files selected for processing (27)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/ClaimPriceInput.tsx (3 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/ClaimerSelection.tsx (2 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/index.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account-permissions/components/account-signer.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account/components/account-balance.tsx (2 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/accounts/components/accounts-count.tsx (2 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/events/events-feed.tsx (7 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/permissions/ContractPermissionsPage.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/proposals/ContractProposalsPage.tsx (2 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/metadata.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/platform-fees.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/primary-sale.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/royalties.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/split/ContractSplitPage.tsx (2 hunks)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/dedicated/(instance)/[engineId]/contract-subscriptions/components/contract-subscriptions-table.tsx (2 hunks)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/dedicated/(instance)/[engineId]/metrics/components/EngineSystemMetrics.tsx (3 hunks)
  • apps/dashboard/src/components/contract-components/contract-publish-form/custom-factory.tsx (2 hunks)
  • apps/dashboard/src/components/contract-components/contract-publish-form/index.tsx (6 hunks)
  • apps/dashboard/src/components/contract-components/contract-publish-form/landing-fieldset.tsx (2 hunks)
  • apps/dashboard/src/components/contract-components/published-contract/index.tsx (2 hunks)
  • apps/dashboard/src/components/contract-functions/contract-function.tsx (4 hunks)
  • apps/dashboard/src/components/smart-wallets/SponsorshipPolicies/index.tsx (1 hunks)
  • apps/dashboard/src/contract-ui/components/solidity-inputs/address-input.tsx (2 hunks)
  • apps/dashboard/src/contract-ui/components/solidity-inputs/string-input.tsx (2 hunks)
  • apps/dashboard/src/core-ui/batch-upload/batch-table.tsx (1 hunks)
  • apps/dashboard/src/tw-components/card.tsx (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (13)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/primary-sale.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account-permissions/components/account-signer.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/accounts/components/accounts-count.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/permissions/ContractPermissionsPage.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/dedicated/(instance)/[engineId]/metrics/components/EngineSystemMetrics.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/proposals/ContractProposalsPage.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/events/events-feed.tsx (2)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/playground-web/src/components/code/code.client.tsx (1)
  • CodeClient (27-54)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/metadata.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account/components/account-balance.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/platform-fees.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/royalties.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/dedicated/(instance)/[engineId]/contract-subscriptions/components/contract-subscriptions-table.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx (1)
apps/dashboard/src/tw-components/nft-media.tsx (1)
  • NFTMediaWithEmptyState (8-64)
🪛 Biome (1.9.4)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/ClaimPriceInput.tsx

[error] 39-39: These CSS classes should be sorted.

Unsafe fix: Sort the classes.

(lint/nursery/useSortedClasses)

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx

[error] 541-552: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.

Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.

(lint/a11y/useKeyWithClickEvents)


[error] 543-543: These CSS classes should be sorted.

Unsafe fix: Sort the classes.

(lint/nursery/useSortedClasses)

apps/dashboard/src/tw-components/card.tsx

[error] 29-29: These CSS classes should be sorted.

Unsafe fix: Sort the classes.

(lint/nursery/useSortedClasses)

⏰ Context from checks skipped due to timeout of 90000ms (8)
  • GitHub Check: Unit Tests
  • GitHub Check: Build Packages
  • GitHub Check: Size
  • GitHub Check: E2E Tests (pnpm, esbuild)
  • GitHub Check: Lint Packages
  • GitHub Check: E2E Tests (pnpm, webpack)
  • GitHub Check: E2E Tests (pnpm, vite)
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (43)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/dedicated/(instance)/[engineId]/metrics/components/EngineSystemMetrics.tsx (3)

42-42: Chakra UI props replaced with Tailwind className correctly.

The p={8} prop has been appropriately replaced with className="p-8" to align with the refactored Card component that now uses Tailwind CSS for styling.


68-68: Tailwind padding class matches semantic intent.

The padding has been increased from p-8 to p-16 for the successful system metrics panel, which correctly provides more space for the detailed metrics content.


109-109: Consistent styling pattern applied correctly.

The p={8} prop has been properly replaced with className="p-8" for the queue metrics panel, maintaining visual consistency with the error state panel.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/index.tsx (1)

647-650: Box component successfully replaced with native div element.

The Chakra UI <Box pb={5} /> has been appropriately replaced with a standard <div className="pb-5" />, aligning with the PR objective of migrating away from Chakra UI components.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/metadata.tsx (1)

145-145: Multiple Chakra UI props consolidated into a single Tailwind className.

The multiple Chakra UI props (p={0} position="relative" overflow="hidden") have been correctly replaced with equivalent Tailwind classes in a single className attribute. This approach is more maintainable and consistent with the project's migration to Tailwind CSS.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account-permissions/components/account-signer.tsx (1)

37-37: Card styling successfully migrated to Tailwind classes.

The Chakra UI props position="relative" p={8} have been properly replaced with Tailwind CSS classes "relative p-8". This change aligns with the Card component's refactoring to use Tailwind CSS instead of Chakra UI's prop-based styling.

apps/dashboard/src/components/contract-components/contract-publish-form/landing-fieldset.tsx (1)

95-113: Box to div transition looks good

The conversion from Chakra UI's Box component to a standard HTML div with Tailwind CSS styling (w-[141px]) maintains the same functionality while aligning with the project's migration to shadcn.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account/components/account-balance.tsx (3)

4-4: Import cleanup looks good

Properly removed the Stat import from Chakra UI while keeping the necessary components.


24-27: Card styling transition looks good

Successfully replaced the Chakra UI as={Stat} prop with Tailwind CSS styling. The [&>*]:m-0 class effectively removes margins from all child elements, maintaining the same visual appearance as the original Stat component.


31-34: Card styling transition in map function looks good

Consistent application of the same pattern as above, replacing as={Stat} with Tailwind's [&>*]:m-0 class while correctly maintaining the key prop for mapped elements.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/royalties.tsx (1)

91-91: Card styling conversion looks good

Successfully replaced Chakra UI prop-based styling (p={0} position="relative" overflow="hidden") with equivalent Tailwind CSS classes (relative overflow-hidden p-0). This maintains the same visual appearance while moving toward the project's goal of using Tailwind CSS for styling.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/permissions/ContractPermissionsPage.tsx (1)

28-28: Flex container styling conversion looks good

Successfully replaced Chakra UI's Flex container properties with equivalent Tailwind CSS utility classes (flex flex-col gap-3). This maintains the same layout and spacing while aligning with the migration to Tailwind CSS styling.

apps/dashboard/src/components/smart-wallets/SponsorshipPolicies/index.tsx (1)

711-719: Migration to native <div> is correct
Replacing the Chakra <Box alignSelf="flex-end"> with <div className="self-end"> accurately preserves the alignSelf="flex-end" behavior within the surrounding Flex container. Layout and functionality remain unchanged.

apps/dashboard/src/components/contract-components/contract-publish-form/custom-factory.tsx (1)

79-102: Box-to-div migration is consistent
Converting the former <Box> wrappers to <div className="w-full md:w-[40%]"> and <div className="w-full"> faithfully replicates the Chakra w="full" and responsive md:w="40%" props. The form layout and Flex structure remain intact.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/ClaimerSelection.tsx (2)

2-2: Successfully removed the Box import from Chakra UI

The Box component import has been removed from the Chakra UI imports, keeping only the necessary Flex and Select components.


150-150: Excellent migration from Chakra's Box to native div with Tailwind

The Chakra UI Box component has been successfully replaced with a standard HTML div element using equivalent Tailwind CSS classes. The responsive behavior is properly preserved:

  • hidden replaces display={{ base: "none" }}
  • md:block replaces md: "block" }}
  • w-full replaces w={{ base: "100%" }}
  • md:w-1/2 replaces md: "50%" }}

This change aligns with the PR's objective of migrating away from Chakra UI's Box component.

apps/dashboard/src/components/contract-components/contract-publish-form/index.tsx (2)

5-5: Successfully removed the Box import from Chakra UI

The Box component import has been removed from the Chakra UI imports, keeping only the necessary components.


368-368: Successfully replaced empty Box components with standard divs

All empty Chakra UI Box components used as layout placeholders have been consistently replaced with standard HTML div elements. Since these are just spacer elements with no styling or content, this straightforward replacement maintains the same layout structure while reducing dependencies on Chakra UI.

Also applies to: 374-374, 387-387, 400-400, 414-414, 426-426

apps/dashboard/src/contract-ui/components/solidity-inputs/string-input.tsx (2)

3-3: Successfully removed the Box import from Chakra UI

The Box component import has been removed from the Chakra UI imports, keeping only the necessary InputGroup and InputRightElement components.


69-69: Excellent migration from Chakra's Box to native span with Tailwind

The Chakra UI Box component has been successfully replaced with a more semantically appropriate HTML span element using equivalent Tailwind CSS classes:

  • hidden md:block correctly replaces display={{ base: "none", md: "block" }}
  • mr-1 correctly replaces mr={1}

Using a span instead of Box is better for this inline text content within the button.

apps/dashboard/src/contract-ui/components/solidity-inputs/address-input.tsx (2)

4-4: Successfully removed the Box import from Chakra UI

The Box component import has been removed from the Chakra UI imports, keeping only the necessary Spinner component.


119-119: Clean replacement of Box with semantic span elements

The Chakra UI Box components set to render as spans with monospace font have been replaced with native span elements using Tailwind's font-mono class. This improves HTML semantics while maintaining the same visual styling for displaying ENS addresses and names.

Also applies to: 121-121

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/split/ContractSplitPage.tsx (1)

123-123: Card styling migration looks good.

The change from as={Stat} to using a CSS class [&>*]:m-0 correctly maintains the styling by zeroing out margins for all direct children of the Card component.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/proposals/ContractProposalsPage.tsx (1)

4-4: Import cleanup looks good.

Properly removed the unused Stat import while keeping the other necessary Chakra UI components.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/events/events-feed.tsx (5)

116-116: Clean migration to Tailwind classes.

Good replacement of Chakra UI's prop-based styling with equivalent Tailwind CSS classes.


200-231: Proper Box to div conversion with appropriate Tailwind classes.

The replacement of Chakra UI's Box components with standard div elements styled with Tailwind CSS classes preserves the layout and styling intentions well.


207-212: Good migration of Card props to Tailwind classes.

Successfully replaced Chakra UI's bgColor, px, and py props with equivalent Tailwind CSS classes.


264-273: Clean Box to div migration with preserved layout.

The replacement of Box with div elements maintains the original layout structure while transitioning to Tailwind's utility classes.


355-358: Consistent migration pattern for tooltips.

The Card styling within the tooltip follows the same pattern as other Card components in this file, maintaining consistency in the migration approach.

apps/dashboard/src/components/contract-components/published-contract/index.tsx (3)

125-125: Good conversion from Chakra UI to Tailwind CSS

The Card component's styling has been successfully migrated from Chakra UI props to Tailwind CSS classes, maintaining the same visual appearance and layout structure while reducing dependencies.


131-131: Appropriate styling migration for Card component

The Card styling has been correctly converted from Chakra UI's as={Flex} with flexDir="column" and gap props to equivalent Tailwind CSS utility classes flex flex-col gap-2 p-0.


144-144: Simplification of Card component styling

Good simplification by replacing Chakra UI styling props with the minimal necessary Tailwind CSS class p-0.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/ClaimPriceInput.tsx (2)

1-1: Successfully removed Box import from Chakra UI

Good job removing the unnecessary Box import while maintaining the required Flex import.


46-58: Good implementation of conditional styling with cn utility

The Box component has been properly replaced with a div element using the cn utility for conditional class application, which is a good practice for dynamic styling.

apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/dedicated/(instance)/[engineId]/contract-subscriptions/components/contract-subscriptions-table.tsx (2)

290-290: Successfully migrated from Chakra UI bgColor prop to Tailwind class

The Card component's background color styling has been correctly transitioned from Chakra UI's bgColor prop to Tailwind's bg-backgroundHighlight class.


408-408: Comprehensive Flex styling migration to Tailwind

The Card component's layout styling has been successfully migrated from multiple Chakra UI props (as={Flex}, flexDir="column", gap={4}) to a single Tailwind CSS class string flex flex-col gap-4, which maintains the same visual appearance while simplifying the code.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/accounts/components/accounts-count.tsx (2)

3-3: Cleaned up unnecessary Chakra UI imports

Good job removing the unused Stat component from imports while maintaining the necessary components.


17-17: Effectively replaced Chakra UI Stat with Tailwind styling

The migration from as={Stat} to using the Tailwind CSS class [&>*]:m-0 effectively maintains the same styling for direct children without the Chakra UI dependency. This is an elegant solution for preserving the visual appearance while simplifying the component hierarchy.

apps/dashboard/src/components/contract-functions/contract-function.tsx (2)

212-213: Chakra UI Box replaced with div + Tailwind: Good implementation

The replacement of Chakra UI's Box with a div styled using Tailwind CSS classes maintains the same functionality while aligning with the migration goal.

Also applies to: 260-260


475-476: Box to div migration looks good

The Box component wrapper for the events list has been successfully replaced with a div using appropriate Tailwind classes for overflow control and padding.

Also applies to: 484-484

apps/dashboard/src/tw-components/card.tsx (3)

1-9: Clean migration of Card component dependencies

The component imports and interface have been properly simplified by removing Chakra UI dependencies and extending from standard React HTML attributes.


17-20: Well-structured base classes with Tailwind

The baseClasses definition using the cn utility properly combines the default Tailwind classes with any custom className passed as a prop.


38-42: Clean standard rendering path

The standard rendering path (without outline border) has been properly simplified to use a div with Tailwind classes.

Copy link

@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

🔭 Outside diff range comments (1)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/ClaimPriceInput.tsx (1)

46-59: ⚠️ Potential issue

Missing cn import for className utility.

There's a reference to cn() utility function, but the import statement is missing from the file.

Add the following import at the top of the file:

+import { cn } from "@/lib/utils";
import { Flex } from "@chakra-ui/react";
import { CurrencySelector } from "components/shared/CurrencySelector";
🧹 Nitpick comments (1)
apps/dashboard/src/tw-components/card.tsx (1)

29-30: Fix the CSS class ordering in className prop

The static analysis tool has flagged an issue with the CSS class ordering in this line.

-          className="absolute inset-0 -z-10"
+          className="-z-10 absolute inset-0"
🧰 Tools
🪛 Biome (1.9.4)

[error] 29-29: These CSS classes should be sorted.

Unsafe fix: Sort the classes.

(lint/nursery/useSortedClasses)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 376bdb2 and f358fe7.

📒 Files selected for processing (27)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/ClaimPriceInput.tsx (3 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/ClaimerSelection.tsx (2 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/index.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account-permissions/components/account-signer.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account/components/account-balance.tsx (2 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/accounts/components/accounts-count.tsx (2 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/events/events-feed.tsx (7 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/permissions/ContractPermissionsPage.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/proposals/ContractProposalsPage.tsx (2 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/metadata.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/platform-fees.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/primary-sale.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/royalties.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/split/ContractSplitPage.tsx (2 hunks)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/dedicated/(instance)/[engineId]/contract-subscriptions/components/contract-subscriptions-table.tsx (2 hunks)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/dedicated/(instance)/[engineId]/metrics/components/EngineSystemMetrics.tsx (3 hunks)
  • apps/dashboard/src/components/contract-components/contract-publish-form/custom-factory.tsx (2 hunks)
  • apps/dashboard/src/components/contract-components/contract-publish-form/index.tsx (6 hunks)
  • apps/dashboard/src/components/contract-components/contract-publish-form/landing-fieldset.tsx (2 hunks)
  • apps/dashboard/src/components/contract-components/published-contract/index.tsx (2 hunks)
  • apps/dashboard/src/components/contract-functions/contract-function.tsx (4 hunks)
  • apps/dashboard/src/components/smart-wallets/SponsorshipPolicies/index.tsx (1 hunks)
  • apps/dashboard/src/contract-ui/components/solidity-inputs/address-input.tsx (2 hunks)
  • apps/dashboard/src/contract-ui/components/solidity-inputs/string-input.tsx (2 hunks)
  • apps/dashboard/src/core-ui/batch-upload/batch-table.tsx (1 hunks)
  • apps/dashboard/src/tw-components/card.tsx (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (12)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx (1)
apps/dashboard/src/tw-components/nft-media.tsx (1)
  • NFTMediaWithEmptyState (8-64)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/royalties.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/proposals/ContractProposalsPage.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/dedicated/(instance)/[engineId]/metrics/components/EngineSystemMetrics.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account-permissions/components/account-signer.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/platform-fees.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/primary-sale.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account/components/account-balance.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/metadata.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/permissions/ContractPermissionsPage.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/events/events-feed.tsx (4)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
apps/dashboard/src/@/components/ui/tooltip.tsx (1)
  • Tooltip (30-30)
apps/playground-web/src/components/code/code.client.tsx (1)
  • CodeClient (27-54)
packages/thirdweb/src/exports/utils.ts (1)
  • stringify (165-165)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/dedicated/(instance)/[engineId]/contract-subscriptions/components/contract-subscriptions-table.tsx (1)
apps/dashboard/src/tw-components/card.tsx (1)
  • Card (11-43)
🪛 Biome (1.9.4)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx

[error] 541-552: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.

Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.

(lint/a11y/useKeyWithClickEvents)


[error] 543-543: These CSS classes should be sorted.

Unsafe fix: Sort the classes.

(lint/nursery/useSortedClasses)

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/ClaimPriceInput.tsx

[error] 39-39: These CSS classes should be sorted.

Unsafe fix: Sort the classes.

(lint/nursery/useSortedClasses)

apps/dashboard/src/tw-components/card.tsx

[error] 29-29: These CSS classes should be sorted.

Unsafe fix: Sort the classes.

(lint/nursery/useSortedClasses)

⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: Size
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (47)
apps/dashboard/src/tw-components/card.tsx (4)

1-9: Clean migration from Chakra UI props to standard React props

The updated CardProps interface correctly extends React's native HTMLAttributes<HTMLDivElement> instead of Chakra UI's BoxProps, which aligns with the migration goal of removing Chakra UI dependencies. This allows for a more standardized component API.


11-21: Good implementation of Tailwind-based styling

The component now uses the cn utility function to combine base Tailwind classes with any custom classes passed through the className prop. This approach maintains flexibility while providing sensible defaults for the card styling.


22-37: Well-implemented outline border feature

The outline border implementation using nested divs with absolute positioning is a good approach for creating the gradient border effect without Chakra UI. The structure with a relative container, absolute background layer, and content layer is clean and maintainable.

🧰 Tools
🪛 Biome (1.9.4)

[error] 29-29: These CSS classes should be sorted.

Unsafe fix: Sort the classes.

(lint/nursery/useSortedClasses)


38-43: Clean fallback rendering

The default rendering path (when no outline border is needed) is straightforward and passes all props correctly to the div element, maintaining component composability.

apps/dashboard/src/components/smart-wallets/SponsorshipPolicies/index.tsx (1)

711-719: Good replacement of Chakra Box with Tailwind-styled div

The replacement of <Box alignSelf="flex-end"> with <div className="self-end"> is correctly implemented. The Tailwind self-end class provides the same functionality as alignSelf="flex-end" in Chakra UI, maintaining the original layout while removing the Chakra dependency.

apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/dedicated/(instance)/[engineId]/metrics/components/EngineSystemMetrics.tsx (3)

42-42: Good migration from Chakra prop to Tailwind class

The change from the Chakra UI p prop to using a Tailwind p-8 class is correctly implemented and maintains the same padding size.


68-68: Good migration from Chakra prop to Tailwind class

The replacement of the Chakra UI p prop with the Tailwind p-16 class is correctly implemented and maintains the same padding size for the system metrics panel.


109-109: Good migration from Chakra prop to Tailwind class

The replacement of the Chakra UI p prop with the Tailwind p-8 class is correctly implemented and maintains the same padding size for the queue metrics panel.

apps/dashboard/src/components/contract-components/contract-publish-form/landing-fieldset.tsx (1)

95-114: Good replacement of Chakra Box with Tailwind-styled div

The replacement of the Chakra UI Box component with a div using the Tailwind class w-[141px] correctly maintains the width constraint for the image upload component. This change aligns with the project goal of migrating from Chakra UI to native HTML elements with Tailwind styling.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account-permissions/components/account-signer.tsx (1)

37-37: Styling update looks good

Successfully migrated from Chakra UI's prop-based styling to Tailwind CSS classes while maintaining the same visual styling.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/permissions/ContractPermissionsPage.tsx (1)

28-28: Flexbox styling migration looks good

Successfully converted from Chakra UI's as={Flex} pattern to equivalent Tailwind CSS utility classes, maintaining the same layout structure.

apps/dashboard/src/core-ui/batch-upload/batch-table.tsx (1)

52-52: Direct HTML element usage improves code clarity

Good replacement of Chakra UI's Box as="video" with a native HTML <video> element. This simplifies the component tree and improves readability.

apps/dashboard/src/contract-ui/components/solidity-inputs/address-input.tsx (2)

4-4: Import cleanup looks good

Correctly removed the unused Box import from Chakra UI.


119-119: Simplified DOM structure with native elements

Good conversion from Chakra UI's Box as="span" pattern to standard HTML <span> elements with Tailwind classes. This maintains the same styling while simplifying the component structure.

Also applies to: 121-121

apps/dashboard/src/contract-ui/components/solidity-inputs/string-input.tsx (2)

3-3: Removed unused Chakra UI Box import and streamlined imports: The removal of Box and retention of only the needed imports (InputGroup and InputRightElement) is correct and cleans up unused dependencies.


69-69: Use span with Tailwind classes for responsive visibility: The replacement of the Chakra <Box> with a <span> using mr-1 hidden md:block correctly replicates the responsive display and margin behavior.

apps/dashboard/src/components/contract-components/published-contract/index.tsx (3)

125-128: Consistent migration to Tailwind-based Card for README section: Applying relative flex flex-col gap-2 p-6 on Card accurately mirrors the previous Chakra Flex props (flexDir="column", gap={2}, p={6}, position: relative).


131-141: Tailwind replacement for changelog Card styling: The flex flex-col gap-2 p-0 classes correctly reflect the former as={Flex}, flexDir="column", gap={2} and p={0} usage on the changelog card.


144-152: Align Card padding for functions overview: The p-0 class on the Card removes all padding as intended, matching the original Chakra padding props.

apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/dedicated/(instance)/[engineId]/contract-subscriptions/components/contract-subscriptions-table.tsx (2)

290-293: Use Tailwind class for background highlight: The className="bg-backgroundHighlight" on Card correctly replaces the Chakra bgColor="backgroundHighlight" prop and aligns with the new Card API.


408-414: Migrate Flex-based Card layout to Tailwind classes: Converting Card to use className="flex flex-col gap-4" preserves the original Flex layout (flexDir="column", gap={4}) inside the modal and removes the Chakra as={Flex} usage.

apps/dashboard/src/components/contract-functions/contract-function.tsx (2)

212-213: Replace Chakra Box with div for inputs table container: Using <div className="relative overflow-x-auto rounded-t-lg p-0"> aligns with the previous Box layout properties (overflowX, roundedTop, p={0}) and reduces dependency on Chakra.


475-485: Use div for events list container with Tailwind utility classes: The replacement of Box with <div className="overflow-x-hidden px-4 pt-2"> correctly preserves horizontal overflow behavior and padding for the events list.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/events/events-feed.tsx (5)

116-116: Migrate Card header to use Tailwind classes: The Card wrapper with className="overflow-hidden p-0" cleanly replaces the previous Chakra p={0} and overflow="hidden" props.


200-231: Convert grid columns to Tailwind divs: The <div className="col-span-3"> and <div className="col-span-1" /> replacements preserve the original Chakra grid layout for transaction hash cells.


264-273: Adjust block number cell with Tailwind grid classes: Changing to <div className="col-span-3"> retains the grid column span and flex layout for the block number display.


314-322: Replace event data columns with Tailwind divs: Using <div className="col-span-3"> and <div className="col-span-9"> correctly matches the previous column spans for event name and JSON arguments.


355-358: Use Tailwind classes for tooltip Card content: The Card with className="bg-backgroundHighlight px-4 py-2" replicates the previous Chakra tooltip styling (background, padding).

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/index.tsx (1)

647-650: Fallback UI updated to use native div with Tailwind classes
Replacing the Chakra UI Box with a <div className="pb-5" /> preserves the padding-bottom styling while removing the dependency.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/platform-fees.tsx (1)

78-78: Card styling migrated to Tailwind CSS classes
Switching from Chakra UI props (p={0}, position="relative", overflow="hidden") to a combined className leverages the refactored Card component’s Tailwind CSS support and ensures consistent styling.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/royalties.tsx (1)

91-91: Card styling migrated to Tailwind CSS classes
Using className="relative overflow-hidden p-0" aligns with the updated Card API, replacing Chakra props without altering the visual layout.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/primary-sale.tsx (1)

70-70: Card styling migrated to Tailwind CSS classes
The Card now receives className="relative overflow-hidden p-0", removing Chakra UI style props and keeping the same styling via Tailwind.

apps/dashboard/src/components/contract-components/contract-publish-form/index.tsx (2)

5-5: Removed Chakra UI Box import
Box is no longer used after migrating placeholders to <div />. This cleanup removes an unused import.


368-368: Replaced Chakra UI Box placeholders with native <div /> elements
All empty placeholder components within the footer’s Flex have been converted from <Box /> to <div />, eliminating the Chakra dependency. Please verify in the browser that these <div />s maintain the intended flex-item spacing; if any layout shifts occur, consider adding appropriate flex utilities (e.g., flex-auto or grow).

Also applies to: 374-374, 387-387, 400-400, 414-414, 426-426

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/metadata.tsx (1)

145-145: Chakra UI style props replaced with Tailwind CSS classes.

The change from Chakra UI style props (p={0} position="relative" overflow="hidden") to Tailwind CSS classes (className="relative overflow-hidden p-0") aligns with the PR objective of migrating away from Chakra UI's Box component.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account/components/account-balance.tsx (3)

4-4: Removed Stat import from Chakra UI.

The Stat component is no longer needed as it's being replaced with a Tailwind CSS approach.


24-24: Replaced Chakra UI Stat with Tailwind CSS class.

The as={Stat} prop is replaced with className="[&>*]:m-0" which removes margins from all direct children, effectively mimicking the Stat component's styling behavior.


31-31: Replaced Chakra UI Stat with Tailwind CSS class in mapped components.

Similar to the previous change, this replaces as={Stat} with className="[&>*]:m-0" for consistent styling across all balance cards.

apps/dashboard/src/components/contract-components/contract-publish-form/custom-factory.tsx (2)

79-95: Replaced Chakra UI Box with styled div element.

The Chakra UI Box component with responsive width props has been replaced with a standard div element using Tailwind's responsive width classes (w-full md:w-[40%]).


96-102: Replaced Chakra UI Box with styled div element.

The Chakra UI Box component with width prop has been replaced with a standard div element using Tailwind's width class (w-full).

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/split/ContractSplitPage.tsx (2)

123-123: Replaced Chakra UI Stat with Tailwind CSS class.

The as={Stat} prop is replaced with className="[&>*]:m-0" which removes margins from all direct children, maintaining the same visual appearance.


147-151: Replaced Chakra UI styling with Tailwind CSS and inline style.

The changes include:

  1. Replacing as={Stat} with className="[&>*]:m-0"
  2. Converting Chakra UI's maxWidth="2xs" to an equivalent inline style style={{ maxWidth: "20rem" }}

This maintains the same visual appearance while reducing dependency on Chakra UI.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/proposals/ContractProposalsPage.tsx (1)

64-68: Properly migrated from Chakra to Tailwind styling.

The Card component has been updated to use Tailwind CSS styling instead of Chakra UI's as={Stat} prop. The added className [&>*]:m-0 ensures all child elements have no margin, and the inline style sets the maximum width to maintain the original layout.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/ClaimerSelection.tsx (1)

150-150: Successfully replaced Box with standard div element.

The Chakra UI Box component has been properly replaced with a standard div element using equivalent Tailwind CSS classes for responsive behavior.

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/ClaimPriceInput.tsx (1)

39-46: Box components successfully replaced with divs.

The Chakra UI Box components have been properly replaced with standard div elements using Tailwind CSS classes for responsive styling. The functionality is maintained with the responsive widths properly translated to Tailwind equivalents.

🧰 Tools
🪛 Biome (1.9.4)

[error] 39-39: These CSS classes should be sorted.

Unsafe fix: Sort the classes.

(lint/nursery/useSortedClasses)

apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/accounts/components/accounts-count.tsx (2)

3-3: Approved: Simplified Chakra UI imports

The import statement has been cleaned up by removing the explicit import of Stat component, which is no longer needed after the refactoring.


17-17: Good implementation of Chakra UI to Tailwind migration

The as={Stat} prop has been removed and replaced with a Tailwind CSS utility class [&>*]:m-0 that achieves the same styling effect by removing margins from all direct children. This change is consistent with the PR objective of migrating from Chakra UI components to standard HTML elements with Tailwind styling.

Copy link
Contributor

github-actions bot commented May 22, 2025

size-limit report 📦

Path Size Loading time (3g) Running time (snapdragon) Total time
thirdweb (esm) 56.62 KB (0%) 1.2 s (0%) 182 ms (+76.88% 🔺) 1.4 s
thirdweb (cjs) 309.13 KB (0%) 6.2 s (0%) 835 ms (-2.88% 🔽) 7.1 s
thirdweb (minimal + tree-shaking) 5.69 KB (0%) 114 ms (0%) 57 ms (+755.71% 🔺) 171 ms
thirdweb/chains (tree-shaking) 531 B (0%) 11 ms (0%) 23 ms (+298.94% 🔺) 33 ms
thirdweb/react (minimal + tree-shaking) 19.5 KB (0%) 390 ms (0%) 107 ms (+531.48% 🔺) 497 ms

@vercel vercel bot temporarily deployed to Preview – thirdweb_playground May 22, 2025 06:50 Inactive
@vercel vercel bot temporarily deployed to Preview – login May 22, 2025 06:50 Inactive
@vercel vercel bot temporarily deployed to Preview – docs-v2 May 22, 2025 06:50 Inactive
@vercel vercel bot temporarily deployed to Preview – wallet-ui May 22, 2025 06:50 Inactive
Copy link

@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/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx (1)

542-546: CSS classes should be sorted.

According to Biome linting rules, the CSS classes should be sorted alphabetically.

 className={cn(
-  "rounded-lg overflow-hidden cursor-pointer",
+  "cursor-pointer overflow-hidden rounded-lg",
   isSelected(nft) &&
     "outline outline-3 outline-purple-500",
 )}
🧰 Tools
🪛 Biome (1.9.4)

[error] 543-543: These CSS classes should be sorted.

Unsafe fix: Sort the classes.

(lint/nursery/useSortedClasses)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f358fe7 and cf1a965.

📒 Files selected for processing (1)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx (1)
apps/dashboard/src/tw-components/nft-media.tsx (1)
  • NFTMediaWithEmptyState (8-64)
🪛 Biome (1.9.4)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx

[error] 543-543: These CSS classes should be sorted.

Unsafe fix: Sort the classes.

(lint/nursery/useSortedClasses)

⏰ Context from checks skipped due to timeout of 90000ms (7)
  • GitHub Check: Size
  • GitHub Check: E2E Tests (pnpm, esbuild)
  • GitHub Check: Build Packages
  • GitHub Check: E2E Tests (pnpm, webpack)
  • GitHub Check: E2E Tests (pnpm, vite)
  • GitHub Check: Unit Tests
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (2)
apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx (2)

541-570: Great job migrating from Chakra UI Box to div with Tailwind CSS!

The Box component has been successfully replaced with a standard div element using Tailwind CSS for styling. I appreciate the inclusion of keyboard accessibility features as suggested in previous reviews.

🧰 Tools
🪛 Biome (1.9.4)

[error] 543-543: These CSS classes should be sorted.

Unsafe fix: Sort the classes.

(lint/nursery/useSortedClasses)


552-562: Well-implemented accessibility features!

The addition of keyboard navigation support with onKeyDown, tabIndex, role="button", and aria-pressed makes the component fully accessible to keyboard users, which is excellent for maintaining web accessibility standards.

@jnsdls jnsdls force-pushed the codex/replace-chakra-box-with-shadcn-and-tailwindcss branch from cf1a965 to 558155a Compare May 22, 2025 06:57
@vercel vercel bot temporarily deployed to Preview – login May 22, 2025 06:57 Inactive
@vercel vercel bot temporarily deployed to Preview – wallet-ui May 22, 2025 06:57 Inactive
@vercel vercel bot temporarily deployed to Preview – docs-v2 May 22, 2025 06:57 Inactive
@vercel vercel bot temporarily deployed to Preview – thirdweb_playground May 22, 2025 06:57 Inactive
Copy link
Member Author

jnsdls commented May 22, 2025


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.

Copy link

@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/tw-components/card.tsx (1)

22-37: Effective implementation of the outline border feature.

The nested div structure with minimal inline styles is a good approach for implementing the gradient border effect. Using absolute positioning with z-index ensures the border appears behind the content without affecting the layout.

One minor suggestion would be to consider extracting the outline border into a separate component if this pattern is used elsewhere in the codebase.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cf1a965 and 558155a.

📒 Files selected for processing (3)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx (2 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/ClaimPriceInput.tsx (3 hunks)
  • apps/dashboard/src/tw-components/card.tsx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/ClaimPriceInput.tsx
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx
⏰ Context from checks skipped due to timeout of 90000ms (6)
  • GitHub Check: E2E Tests (pnpm, esbuild)
  • GitHub Check: E2E Tests (pnpm, webpack)
  • GitHub Check: Size
  • GitHub Check: E2E Tests (pnpm, vite)
  • GitHub Check: Lint Packages
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (5)
apps/dashboard/src/tw-components/card.tsx (5)

1-2: Solid import updates for the Tailwind migration.

The addition of the cn utility import and the switch to type-only React import are appropriate changes for this migration. The cn utility is a common pattern when using Tailwind CSS to combine conditional class names.


4-4: Good simplification of the component props interface.

The change from Chakra UI's BoxProps to standard React HTMLAttributes<HTMLDivElement> is a good choice that reduces framework dependencies and improves maintainability.


12-15: Props destructuring looks good.

Explicit destructuring of className makes it easier to combine with default classes, and the spread operator captures remaining props properly.


17-20: Clean implementation of base styling with Tailwind.

Using the cn utility to combine Tailwind classes is the right approach. The classes chosen provide equivalent styling to the previous Chakra implementation while making the styling more explicit and maintainable.


39-41: Clean implementation of the base case.

The direct rendering of a div with the baseClasses is straightforward and effective.

@jnsdls jnsdls force-pushed the codex/replace-chakra-box-with-shadcn-and-tailwindcss branch from 558155a to 80026c6 Compare May 22, 2025 07:01
@vercel vercel bot temporarily deployed to Preview – docs-v2 May 22, 2025 07:01 Inactive
@vercel vercel bot temporarily deployed to Preview – wallet-ui May 22, 2025 07:01 Inactive
@vercel vercel bot temporarily deployed to Preview – login May 22, 2025 07:01 Inactive
@vercel vercel bot temporarily deployed to Preview – thirdweb_playground May 22, 2025 07:01 Inactive
@jnsdls jnsdls force-pushed the codex/replace-chakra-box-with-shadcn-and-tailwindcss branch from 80026c6 to 7ad4fee Compare May 22, 2025 07:23
@vercel vercel bot temporarily deployed to Preview – docs-v2 May 22, 2025 07:23 Inactive
@vercel vercel bot temporarily deployed to Preview – wallet-ui May 22, 2025 07:23 Inactive
@vercel vercel bot temporarily deployed to Preview – thirdweb_playground May 22, 2025 07:23 Inactive
@vercel vercel bot temporarily deployed to Preview – login May 22, 2025 07:23 Inactive
Copy link

@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/core-ui/batch-upload/lazy-mint-form/select-option.tsx (1)

2-5: Consider extending Chakra UI migration to remaining components.

While the Card component has been migrated to use Tailwind CSS, there are still several Chakra UI components in use (Flex, Radio, Tooltip). For a more complete migration and to maintain consistency, consider replacing these with their HTML/Tailwind equivalents in a future update.

For example, the Flex component could be replaced with:

- <Flex flexDirection="row" justifyContent="space-between">
+ <div className="flex flex-row justify-between">

And similarly for other Chakra components.

Also applies to: 53-63

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 80026c6 and 7ad4fee.

📒 Files selected for processing (8)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx (2 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/ClaimPriceInput.tsx (3 hunks)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account/components/deposit-native.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/dedicated/(instance)/[engineId]/webhooks/components/webhooks-table.tsx (1 hunks)
  • apps/dashboard/src/components/contract-functions/interactive-abi-function.tsx (1 hunks)
  • apps/dashboard/src/core-ui/batch-upload/batch-table.tsx (3 hunks)
  • apps/dashboard/src/core-ui/batch-upload/lazy-mint-form/select-option.tsx (3 hunks)
  • apps/dashboard/src/tw-components/card.tsx (1 hunks)
✅ Files skipped from review due to trivial changes (3)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/dedicated/(instance)/[engineId]/webhooks/components/webhooks-table.tsx
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account/components/deposit-native.tsx
  • apps/dashboard/src/components/contract-functions/interactive-abi-function.tsx
🚧 Files skipped from review as they are similar to previous changes (4)
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/ClaimPriceInput.tsx
  • apps/dashboard/src/tw-components/card.tsx
  • apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx
  • apps/dashboard/src/core-ui/batch-upload/batch-table.tsx
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Unit Tests
  • GitHub Check: Size
  • GitHub Check: Lint Packages
🔇 Additional comments (3)
apps/dashboard/src/core-ui/batch-upload/lazy-mint-form/select-option.tsx (3)

32-32: Good migration to Tailwind CSS for Card background.

The change to use a Tailwind class for background styling is consistent with the PR objective of migrating away from Chakra UI props to Tailwind CSS.


43-50: Excellent implementation of Tailwind styling for the Card component.

The migration from Chakra UI props to Tailwind CSS classes for the Card component is well done. The conditional styling for disabled and active states has been properly implemented using the cn utility.


88-88: Good consistency in Tailwind styling for tooltip Card.

The styling approach is consistent with the earlier Card component, maintaining a unified styling pattern throughout the component.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
codex Dashboard Involves changes to the Dashboard.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant