Skip to content
+

Base concepts

Understand the fundamental concepts of Toolpad Core to effectively integrate and use it in your projects.

Imports

Toolpad Core components can be imported directly from the @toolpad/core package. This allows you to use them alongside your existing Material UI or other components.

import Button from '@mui/material/Button';
import { DashboardLayout } from '@toolpad/core/DashboardLayout';

Component hierarchy

The Toolpad Core library is designed to work under different React runtimes such as Next.js, Vite, or even your custom setup. Many of its components rely on functionality of the specific runtime they are used under. The key component in making the components runtime-aware is the AppProvider.

App Provider

The AppProvider acts as a bridge between your application's runtime and Toolpad components. It should wrap your entire application or the part of your application where you want to use Toolpad components.

import { AppProvider } from '@toolpad/core/AppProvider';

function MyApp({ Component, pageProps }) {
  return (
    <AppProvider>
      <Component {...pageProps} />
    </AppProvider>
  );
}

By wrapping your application with AppProvider, you ensure that all other Toolpad components you use have access to the necessary context and functionality.

The AppProvider component accepts props to configure the app's navigation, theme, branding, router, authentication, and session, like so:

<AppProvider
  navigation={NAVIGATION}
  theme={theme}
  branding={BRANDING}
  router={router}
  authentication={AUTHENTICATION}
  session={session}
>
  {props.children}
</AppProvider>

Head over to the AppProvider page for more details and examples of the usage of all props.

Slots

Toolpad Core uses slots for component customization. Slots allow you to override specific parts of a component, providing flexibility in styling and functionality. You can also pass additional props to specific slots using the slotProps prop.

Here's an example using the SignInPage component:

import { SignInPage } from '@toolpad/core/SignInPage';
function MyComponent() {
  return (
    <SignInPage
      slots={{
        emailField: CustomEmailField,

      }}
      slotProps={{
        passwordField: {
          variant: 'outlined',
        },
      }}
    >
      Custom Button
    </Button>
  );
}

In this example:

  • The slots prop allows you to replace entire parts of the component.
  • The slotProps prop lets you pass additional props to specific slots.