diff --git a/packages/website/docs/autocomplete-js.md b/packages/website/docs/autocomplete-js.md
index 90ab3fb52..baaf9f7c0 100644
--- a/packages/website/docs/autocomplete-js.md
+++ b/packages/website/docs/autocomplete-js.md
@@ -303,7 +303,7 @@ autocomplete({
 
 > `(type: any, props: Record<string, any> | null, ...children: ComponentChildren[]) => VNode` | defaults to `preact.createElement`
 
-The function that create virtual nodes.
+The function to create virtual nodes.
 
 It uses [Preact 10](https://preactjs.com/guide/v10/whats-new/)'s `createElement` by default, but you can provide your own implementation.
 
diff --git a/packages/website/docs/autocomplete-layout-classic.md b/packages/website/docs/autocomplete-layout-classic.md
index bd7693fc7..f41093fb3 100644
--- a/packages/website/docs/autocomplete-layout-classic.md
+++ b/packages/website/docs/autocomplete-layout-classic.md
@@ -20,8 +20,8 @@ Then import it in your project:
 
 ```js
 import {
-  NavigationCommandsLayout,
-  SearchByAlgoliaLayout,
+  NavigationCommands,
+  SearchByAlgolia,
 } from '@algolia/autocomplete-layout-classic';
 ```
 
@@ -39,8 +39,8 @@ With default translations:
 /** @jsx h */
 import { autocomplete } from '@algolia/autocomplete-js';
 import {
-  NavigationCommandsLayout,
-  SearchByAlgoliaLayout,
+  NavigationCommands,
+  SearchByAlgolia,
 } from '@algolia/autocomplete-layout-classic';
 import { h, render } from 'preact';
 
@@ -48,13 +48,17 @@ import '@algolia/autocomplete-theme-classic';
 
 autocomplete({
   // ...
-  render({ sections, createElement, Fragment }, root) {
+  components: {
+    NavigationCommands,
+    SearchByAlgolia,
+  },
+  render({ sections, Fragment, components }, root) {
     render(
       <Fragment>
-        <div className="aa-PanelLayout">{sections}</div>
+        <div className="aa-PanelLayout aa-Panel--scrollable">{sections}</div>
         <footer className="aa-PanelFooter">
-          {NavigationCommandsLayout({ createElement, Fragment })}
-          {SearchByAlgoliaLayout({ createElement, Fragment })}
+          <components.NavigationCommands />
+          <components.SearchByAlgolia />
         </footer>
       </Fragment>,
       root
@@ -69,8 +73,8 @@ With French translations:
 /** @jsx h */
 import { autocomplete } from '@algolia/autocomplete-js';
 import {
-  NavigationCommandsLayout,
-  SearchByAlgoliaLayout,
+  NavigationCommands,
+  SearchByAlgolia,
 } from '@algolia/autocomplete-layout-classic';
 import { h, render } from 'preact';
 
@@ -78,27 +82,27 @@ import '@algolia/autocomplete-theme-classic';
 
 autocomplete({
   // ...
-  render({ sections, createElement, Fragment }, root) {
+  components: {
+    NavigationCommands,
+    SearchByAlgolia,
+  },
+  render({ sections, Fragment, components }, root) {
     render(
       <Fragment>
-        <div className="aa-PanelLayout">{sections}</div>
+        <div className="aa-PanelLayout aa-Panel--scrollable">{sections}</div>
         <footer className="aa-PanelFooter">
-          {NavigationCommandsLayout({
-            createElement,
-            Fragment,
-            translations: {
+          <components.NavigationCommands
+            translations={{
               toClose: 'pour fermer',
               toNavigate: 'pour naviguer',
               toSelect: 'pour sélectionner',
-            },
-          })}
-          {SearchByAlgoliaLayout({
-            createElement,
-            Fragment,
-            translations: {
+            }}
+          />
+          <components.SearchByAlgolia
+            translations={{
               searchBy: 'Recherche par',
-            },
-          })}
+            }}
+          />
         </footer>
       </Fragment>,
       root
@@ -107,28 +111,54 @@ autocomplete({
 });
 ```
 
-## Layouts
+With a custom renderer:
 
-### `NavigationCommandsLayout`
+```tsx
+import { autocomplete } from '@algolia/autocomplete-js';
+import {
+  createNavigationCommandsComponent,
+  createSearchByAlgoliaComponent,
+} from '@algolia/autocomplete-layout-classic';
+import React, { createElement, Fragment } from 'react';
 
-#### `createElement`
+import '@algolia/autocomplete-theme-classic';
 
-> `(type: any, props: Record<string, any> | null, ...children: ComponentChildren[]) => VNode`
+const renderer = { createElement, Fragment };
 
-The function that create virtual nodes.
+autocomplete({
+  // ...
+  renderer,
+  components: {
+    NavigationCommands: createNavigationCommandsComponent(renderer),
+    SearchByAlgolia: createSearchByAlgoliaComponent(renderer),
+  },
+  render({ sections, Fragment, components }, root) {
+    render(
+      <Fragment>
+        <div className="aa-PanelLayout aa-Panel--scrollable">{sections}</div>
+        <footer className="aa-PanelFooter">
+          <components.NavigationCommands />
+          <components.SearchByAlgolia />
+        </footer>
+      </Fragment>,
+      root
+    );
+  },
+});
+```
 
-#### `Fragment`
+## Reference
 
-The component to use to create fragments.
+### `NavigationCommands`
 
 #### `translations`
 
-> `NavigationCommandsLayoutTranslations` | defaults to English strings
+> `NavigationCommandsTranslations` | defaults to English strings
 
 The translations to display.
 
 ```ts
-type NavigationCommandsLayoutTranslations = {
+type NavigationCommandsTranslations = {
   toSelect: string;
   toNavigate: string;
   toClose: string;
@@ -145,17 +175,7 @@ const translations = {
 };
 ```
 
-### `SearchByAlgoliaLayout`
-
-#### `createElement`
-
-> `(type: any, props: Record<string, any> | null, ...children: ComponentChildren[]) => VNode`
-
-The function that create virtual nodes.
-
-#### `Fragment`
-
-The component to use to create fragments.
+### `SearchByAlgolia`
 
 #### `translations`
 
@@ -176,3 +196,15 @@ const translations = {
   searchBy: 'Search by',
 };
 ```
+
+### `createNavigationCommandsComponent`
+
+> `(renderer: AutocompleteRenderer) => JSX.Element`
+
+The function accepts a [renderer](/docs/autocomplete-js/#renderer) and returns the [`NavigationCommands`](#navigationcommands) component. It's useful when using a framework like [React](/docs/using-react) or [Vue](/docs/using-vue).
+
+### `createSearchByAlgoliaComponent`
+
+> `(renderer: AutocompleteRenderer) => JSX.Element`
+
+The function accepts a [renderer](/docs/autocomplete-js/#renderer) and returns the [`SearchByAlgolia`](#searchbyalgolia) component. It's useful when using a framework like [React](/docs/using-react) or [Vue](/docs/using-vue).