Skip to content

Add custom themed dashboard example with migration guide #121

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 1 commit into
base: main
Choose a base branch
from

Conversation

alanhlwang
Copy link

@alanhlwang alanhlwang commented Jun 22, 2025

Summary by CodeRabbit

  • New Features

    • Added a customizable dashboard example page with light/dark theme switching and accessible toggle button.
    • Introduced dynamic theme application using CSS variables for both light and dark modes.
    • Provided a dedicated layout for the dashboard example with consistent background styling.
  • Documentation

    • Added comprehensive migration and setup guides to help users replicate the dashboard and UI components in a new Next.js app.

Copy link

vercel bot commented Jun 22, 2025

@alanhlwang is attempting to deploy a commit to the tweakcn OSS program Team on Vercel.

A member of the Team first needs to authorize it.

Copy link

coderabbitai bot commented Jun 22, 2025

Walkthrough

This update introduces comprehensive documentation and new React components to facilitate the migration and application of a custom themed dashboard in a Next.js 15+ environment. It adds detailed migration and file-copy guides, a dynamic theme applier, a dashboard layout wrapper, and an interactive dashboard page with theme toggling functionality.

Changes

File(s) Change Summary
DASHBOARD_MIGRATION_GUIDE.md, FILES_TO_COPY.md Added detailed migration and file-copy guides for setting up the custom themed dashboard in Next.js.
app/examples/dashboard/custom-theme-applier.tsx Introduced CustomThemeApplier component for dynamic CSS variable theming based on light/dark mode.
app/examples/dashboard/layout.tsx Added DashboardExampleLayout component to provide styled layout for dashboard pages.
app/examples/dashboard/page.tsx Added DashboardExamplePage component with theme toggle button and integration of dashboard and theme applier.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant DashboardExamplePage
    participant CustomThemeApplier
    participant ThemeProvider

    User->>DashboardExamplePage: Loads page
    DashboardExamplePage->>CustomThemeApplier: Mounts component
    CustomThemeApplier->>CustomThemeApplier: Applies theme CSS variables
    CustomThemeApplier->>CustomThemeApplier: Observes for theme changes
    User->>DashboardExamplePage: Clicks theme toggle button
    DashboardExamplePage->>ThemeProvider: Calls toggleTheme with click coordinates
    ThemeProvider->>CustomThemeApplier: Theme context updates, triggers CSS variable update
Loading

Poem

🐇
A dashboard hops into the light,
With guides and themes both clear and bright.
Buttons to toggle day or night,
CSS waves shimmer just right.
New docs and layouts, all in view—
Next.js bunnies, this one's for you!
🌗✨

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

app/examples/dashboard/custom-theme-applier.tsx

Oops! Something went wrong! :(

ESLint: 9.24.0

ESLint couldn't find the plugin "eslint-plugin-react-hooks".

(The package "eslint-plugin-react-hooks" was not found when loaded as a Node module from the directory "".)

It's likely that the plugin isn't installed correctly. Try reinstalling by running the following:

npm install eslint-plugin-react-hooks@latest --save-dev

The plugin "eslint-plugin-react-hooks" was referenced from the config file in " » eslint-config-next/core-web-vitals » /node_modules/.pnpm/[email protected][email protected][email protected][email protected]/node_modules/eslint-config-next/index.js".

If you still can't figure out the problem, please see https://eslint.org/docs/latest/use/troubleshooting.

app/examples/dashboard/layout.tsx

Oops! Something went wrong! :(

ESLint: 9.24.0

ESLint couldn't find the plugin "eslint-plugin-react-hooks".

(The package "eslint-plugin-react-hooks" was not found when loaded as a Node module from the directory "".)

It's likely that the plugin isn't installed correctly. Try reinstalling by running the following:

npm install eslint-plugin-react-hooks@latest --save-dev

The plugin "eslint-plugin-react-hooks" was referenced from the config file in " » eslint-config-next/core-web-vitals » /node_modules/.pnpm/[email protected][email protected][email protected][email protected]/node_modules/eslint-config-next/index.js".

If you still can't figure out the problem, please see https://eslint.org/docs/latest/use/troubleshooting.

app/examples/dashboard/page.tsx

Oops! Something went wrong! :(

ESLint: 9.24.0

ESLint couldn't find the plugin "eslint-plugin-react-hooks".

(The package "eslint-plugin-react-hooks" was not found when loaded as a Node module from the directory "".)

It's likely that the plugin isn't installed correctly. Try reinstalling by running the following:

npm install eslint-plugin-react-hooks@latest --save-dev

The plugin "eslint-plugin-react-hooks" was referenced from the config file in " » eslint-config-next/core-web-vitals » /node_modules/.pnpm/[email protected][email protected][email protected][email protected]/node_modules/eslint-config-next/index.js".

If you still can't figure out the problem, please see https://eslint.org/docs/latest/use/troubleshooting.

✨ Finishing Touches
  • 📝 Generate Docstrings

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

❤️ Share
🪧 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.

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 (3)
app/examples/dashboard/custom-theme-applier.tsx (1)

5-101: Consider extracting theme variables to improve maintainability.

The theme variables object is quite large (~95 lines) and could benefit from being extracted to a separate configuration file. This would improve code organization and make the theme easier to maintain and customize.

Consider this refactor:

+// Create themes/config.ts
+export const customThemeVariables = {
+  light: { /* move light theme here */ },
+  dark: { /* move dark theme here */ }
+};

-const customThemeVariables = {
-  light: { /* ... */ },
-  dark: { /* ... */ }
-};
+import { customThemeVariables } from '@/themes/config';
DASHBOARD_MIGRATION_GUIDE.md (2)

440-440: Minor grammatical improvement needed.

There's a missing comma in the troubleshooting section.

-1. Make sure the `"use client"` directive is at the top of `components/ui/sidebar.tsx` 2. Verify the...
+1. Make sure the `"use client"` directive is at the top of `components/ui/sidebar.tsx`, 2. Verify the...

79-84: Consider adding browser support information for experimental API.

The code uses document.startViewTransition which is an experimental API. Consider adding a note about browser support to help users understand when the enhanced animation will work vs. the fallback behavior.

    // @ts-ignore
+   // Note: startViewTransition is experimental - falls back gracefully if unsupported
    if (!document.startViewTransition) {
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between b8144ee and 64f132a.

📒 Files selected for processing (5)
  • DASHBOARD_MIGRATION_GUIDE.md (1 hunks)
  • FILES_TO_COPY.md (1 hunks)
  • app/examples/dashboard/custom-theme-applier.tsx (1 hunks)
  • app/examples/dashboard/layout.tsx (1 hunks)
  • app/examples/dashboard/page.tsx (1 hunks)
🧰 Additional context used
🪛 LanguageTool
DASHBOARD_MIGRATION_GUIDE.md

[uncategorized] ~440-~440: Possible missing comma found.
Context: ... "use client" directive is at the top of components/ui/sidebar.tsx 2. Verify t...

(AI_HYDRA_LEO_MISSING_COMMA)

🔇 Additional comments (5)
app/examples/dashboard/layout.tsx (1)

1-3: Clean and straightforward layout implementation.

The layout component follows React best practices with a simple, focused responsibility of providing background styling and minimum height for the dashboard pages.

app/examples/dashboard/page.tsx (1)

9-36: Well-structured dashboard page with proper theme management.

The component effectively integrates theme management with a clean UI structure. The coordinate-based theme toggle suggests smooth transition animations, and the component composition separates concerns appropriately.

app/examples/dashboard/custom-theme-applier.tsx (1)

103-137: Excellent implementation of dynamic theme application.

The MutationObserver usage is implemented correctly with proper cleanup, and the useEffect follows React best practices. The component effectively handles theme changes by watching the document root element's class changes.

FILES_TO_COPY.md (1)

1-198: Comprehensive and well-organized migration documentation.

The file provides excellent guidance with clear directory structure, exact copy commands, and important reminders about manual steps. This will significantly help users successfully migrate the dashboard components.

DASHBOARD_MIGRATION_GUIDE.md (1)

1-451: Outstanding comprehensive migration guide.

This documentation is exceptionally thorough and well-structured, covering all aspects of the dashboard migration including dependencies, file setup, configuration, and troubleshooting. It provides complete, working code examples that users can directly copy and use.

@jnsahaj
Copy link
Owner

jnsahaj commented Jun 23, 2025

Hi!
If I understand this correctly, it is a guide to create a custom theme switcher in your own Next.js application?

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

Successfully merging this pull request may close these issues.

2 participants