UNPKG

@tabnews/ui

Version:
119 lines (85 loc) 3.1 kB
# @tabnews/ui A React component library for [tabnews.com.br](https://www.tabnews.com.br/). ## Installation To install the package, use: ```bash npm i @tabnews/ui ``` ## Configure Next.js In your `next.config.js`, add `@primer/react` and `@tabnews/ui` to `transpilePackages`: ```js // next.config.js module.exports = { transpilePackages: ['@primer/react', '@tabnews/ui'], }; ``` ## Theme Setup To configure theming, first import the global CSS file in your main application file: ```js // app/layout.js (App Router) or pages/_app.js (Pages Router) import '@tabnews/ui/css'; ``` The library provides two properties for theme control: - `colorMode`: Sets a fixed theme, such as "dark" or "light", preventing automatic switching. - `defaultColorMode`: Enables automatic switching based on the user’s preference (light/dark mode). The usage of these properties depends on which **Next.js router** you are using: ### App Router In the **App Router**, wrap your app with `PrimerRoot`. This component creates the base structure for the `<html>`, so it also accepts the `lang` attribute. You can use either `defaultColorMode` (for automatic switching) or `colorMode` (for a fixed theme): ```js // app/layout.js import { PrimerRoot } from '@tabnews/ui'; import '@tabnews/ui/css'; export default function Layout({ children }) { return ( <PrimerRoot lang="en" defaultColorMode="dark" // Enables theme switching // colorMode="dark" // Uses a fixed theme > {children} </PrimerRoot> ); } ``` ### Pages Router In **Pages Router**, you must add `_document.js` to ensure proper theme setup: ```js // pages/_document.js export { Document as default } from '@tabnews/ui/document'; ``` In `_app.js`, you can use either `AutoThemeProvider` or `ThemeProvider`: 1. If you want to use **theme switching**, wrap your app with `AutoThemeProvider` and pass the `defaultColorMode` property: ```js // pages/_app.js import { AutoThemeProvider } from '@tabnews/ui'; import '@tabnews/ui/css'; export default function NextApp({ Component, pageProps }) { return ( <AutoThemeProvider defaultColorMode="dark"> <Component {...pageProps} /> </AutoThemeProvider> ); } ``` 2. If you want to use a **fixed theme**, wrap your app with `ThemeProvider` and pass the `colorMode` property: ```js // pages/_app.js import { ThemeProvider } from '@tabnews/ui'; import '@tabnews/ui/css'; export default function NextApp({ Component, pageProps }) { return ( <ThemeProvider colorMode="dark"> <Component {...pageProps} /> </ThemeProvider> ); } ``` > **Note**: Although `AutoThemeProvider` supports setting a fixed theme using `colorMode`, it is recommended to use `ThemeProvider` instead when a fixed theme is required. This ensures that the theme is applied immediately. ## Configure Vitest In `vitest.config.js`, set `test.server.deps.inline` to `true`: ```js // vitest.config.js test.server.deps.inline: true ``` ## Examples See examples in the [`examples`](https://github.com/aprendendofelipe/tabnews/tree/main/examples) directory.