diff --git a/.circleci/config.yml b/.circleci/config.yml
index d7c6792f7..cfd5014b2 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -30,6 +30,7 @@ aliases:
mkdir -p packages/autocomplete-plugin-algolia-insights/dist
mkdir -p packages/autocomplete-plugin-recent-searches/dist
mkdir -p packages/autocomplete-plugin-query-suggestions/dist
+ mkdir -p packages/autocomplete-layout-classic/dist
cp -R /tmp/workspace/packages/autocomplete-shared/dist packages/autocomplete-shared
cp -R /tmp/workspace/packages/autocomplete-core/dist packages/autocomplete-core
@@ -38,6 +39,7 @@ aliases:
cp -R /tmp/workspace/packages/autocomplete-plugin-algolia-insights/dist packages/autocomplete-plugin-algolia-insights
cp -R /tmp/workspace/packages/autocomplete-plugin-recent-searches/dist packages/autocomplete-plugin-recent-searches
cp -R /tmp/workspace/packages/autocomplete-plugin-query-suggestions/dist packages/autocomplete-plugin-query-suggestions
+ cp -R /tmp/workspace/packages/autocomplete-layout-classic/dist packages/autocomplete-layout-classic
defaults: &defaults
working_directory: ~/autocomplete
@@ -82,6 +84,7 @@ jobs:
mkdir -p /tmp/workspace/packages/autocomplete-plugin-algolia-insights/dist
mkdir -p /tmp/workspace/packages/autocomplete-plugin-recent-searches/dist
mkdir -p /tmp/workspace/packages/autocomplete-plugin-query-suggestions/dist
+ mkdir -p /tmp/workspace/packages/autocomplete-layout-classic/dist
cp -R packages/autocomplete-shared/dist /tmp/workspace/packages/autocomplete-shared
cp -R packages/autocomplete-core/dist /tmp/workspace/packages/autocomplete-core
@@ -90,6 +93,7 @@ jobs:
cp -R packages/autocomplete-plugin-algolia-insights/dist /tmp/workspace/packages/autocomplete-plugin-algolia-insights
cp -R packages/autocomplete-plugin-recent-searches/dist /tmp/workspace/packages/autocomplete-plugin-recent-searches
cp -R packages/autocomplete-plugin-query-suggestions/dist /tmp/workspace/packages/autocomplete-plugin-query-suggestions
+ cp -R packages/autocomplete-layout-classic/dist /tmp/workspace/packages/autocomplete-layout-classic
- persist_to_workspace:
root: *workspace_root
paths:
diff --git a/.codesandbox/ci.json b/.codesandbox/ci.json
index c311604a3..78cf009f7 100644
--- a/.codesandbox/ci.json
+++ b/.codesandbox/ci.json
@@ -4,6 +4,7 @@
"^": "buildCommand is false because `yarn prepare` is going to build packages anyway.",
"sandboxes": [
"/examples/github-repositories-custom-plugin",
+ "/examples/layouts",
"/examples/playground",
"/examples/query-suggestions-with-categories",
"/examples/query-suggestions-with-hits",
diff --git a/bundlesize.config.json b/bundlesize.config.json
index be73143ad..d1b3c3e2e 100644
--- a/bundlesize.config.json
+++ b/bundlesize.config.json
@@ -24,6 +24,10 @@
"path": "packages/autocomplete-plugin-query-suggestions/dist/umd/index.production.js",
"maxSize": "4 kB"
},
+ {
+ "path": "packages/autocomplete-layout-classic/dist/umd/index.production.js",
+ "maxSize": "4.25 kB"
+ },
{
"path": "packages/autocomplete-theme-classic/dist/theme.css",
"maxSize": "4.25 kB"
diff --git a/examples/layouts/README.md b/examples/layouts/README.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/examples/layouts/app.tsx b/examples/layouts/app.tsx
new file mode 100644
index 000000000..8bebe2e92
--- /dev/null
+++ b/examples/layouts/app.tsx
@@ -0,0 +1,58 @@
+/** @jsx h */
+import { autocomplete } from '@algolia/autocomplete-js';
+import {
+ NavigationCommands,
+ SearchByAlgolia,
+} from '@algolia/autocomplete-layout-classic';
+import { createQuerySuggestionsPlugin } from '@algolia/autocomplete-plugin-query-suggestions';
+import algoliasearch from 'algoliasearch/lite';
+import { h, render } from 'preact';
+
+import '@algolia/autocomplete-theme-classic';
+
+const appId = 'latency';
+const apiKey = '6be0576ff61c053d5f9a3225e2a90f76';
+const searchClient = algoliasearch(appId, apiKey);
+
+const querySuggestionsPlugin = createQuerySuggestionsPlugin({
+ searchClient,
+ indexName: 'instant_search_demo_query_suggestions',
+ getSearchParams() {
+ return {
+ hitsPerPage: 10,
+ };
+ },
+});
+
+autocomplete({
+ container: '#autocomplete',
+ placeholder: 'Search',
+ openOnFocus: true,
+ plugins: [querySuggestionsPlugin],
+ components: {
+ NavigationCommands,
+ SearchByAlgolia,
+ },
+ render({ sections, Fragment, components }, root) {
+ render(
+
+ {sections}
+
+ ,
+ root
+ );
+ },
+});
diff --git a/examples/layouts/env.ts b/examples/layouts/env.ts
new file mode 100644
index 000000000..e289f63b2
--- /dev/null
+++ b/examples/layouts/env.ts
@@ -0,0 +1,10 @@
+import * as preact from 'preact';
+
+// Parcel picks the `source` field of the monorepo packages and thus doesn't
+// apply the Babel config to replace our `__DEV__` global expression.
+// We therefore need to manually override it in the example app.
+// See https://twitter.com/devongovett/status/1134231234605830144
+(global as any).__DEV__ = process.env.NODE_ENV !== 'production';
+(global as any).__TEST__ = false;
+(global as any).h = preact.h;
+(global as any).React = preact;
diff --git a/examples/layouts/favicon.png b/examples/layouts/favicon.png
new file mode 100644
index 000000000..f305dca76
Binary files /dev/null and b/examples/layouts/favicon.png differ
diff --git a/examples/layouts/index.html b/examples/layouts/index.html
new file mode 100644
index 000000000..df0fe276a
--- /dev/null
+++ b/examples/layouts/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+ Layouts Examples
+
+
+
+
+
+
+
+
+
diff --git a/examples/layouts/package.json b/examples/layouts/package.json
new file mode 100644
index 000000000..a6c9e4b6e
--- /dev/null
+++ b/examples/layouts/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "@algolia/autocomplete-example-layouts",
+ "description": "Autocomplete layouts example",
+ "version": "1.0.0-alpha.44",
+ "private": true,
+ "license": "MIT",
+ "main": "index.html",
+ "scripts": {
+ "build": "parcel build index.html",
+ "start": "parcel index.html"
+ },
+ "dependencies": {
+ "@algolia/autocomplete-js": "1.0.0-alpha.44",
+ "@algolia/autocomplete-plugin-query-suggestions": "1.0.0-alpha.44",
+ "@algolia/autocomplete-theme-classic": "1.0.0-alpha.44",
+ "@algolia/autocomplete-layout-classic": "1.0.0-alpha.44",
+ "algoliasearch": "4.8.6",
+ "preact": "10.5.13"
+ },
+ "devDependencies": {
+ "parcel-bundler": "1.12.4"
+ },
+ "keywords": [
+ "algolia",
+ "autocomplete",
+ "javascript"
+ ]
+}
diff --git a/examples/layouts/style.css b/examples/layouts/style.css
new file mode 100644
index 000000000..a4d3906cf
--- /dev/null
+++ b/examples/layouts/style.css
@@ -0,0 +1,20 @@
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: rgb(244, 244, 249);
+ color: rgb(65, 65, 65);
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
+ 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
+ sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ padding: 1rem;
+}
+
+.container {
+ margin: 0 auto;
+ max-width: 640px;
+ width: 100%;
+}
diff --git a/packages/autocomplete-layout-classic/README.md b/packages/autocomplete-layout-classic/README.md
new file mode 100644
index 000000000..257316f4e
--- /dev/null
+++ b/packages/autocomplete-layout-classic/README.md
@@ -0,0 +1,15 @@
+# @algolia/autocomplete-layout-classic
+
+Classic layout for Algolia Autocomplete.
+
+## Installation
+
+```sh
+yarn add @algolia/autocomplete-layout-classic@alpha
+# or
+npm install @algolia/autocomplete-layout-classic@alpha
+```
+
+## Documentation
+
+[Read documentation →](https://autocomplete.algolia.com/docs/autocomplete-layout-classic)
diff --git a/packages/autocomplete-layout-classic/package.json b/packages/autocomplete-layout-classic/package.json
new file mode 100644
index 000000000..4c267a01a
--- /dev/null
+++ b/packages/autocomplete-layout-classic/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "@algolia/autocomplete-layout-classic",
+ "description": "Classic layout for Algolia Autocomplete.",
+ "version": "1.0.0-alpha.44",
+ "license": "MIT",
+ "homepage": "https://github.com/algolia/autocomplete",
+ "repository": "algolia/autocomplete",
+ "author": {
+ "name": "Algolia, Inc.",
+ "url": "https://www.algolia.com"
+ },
+ "sideEffects": false,
+ "files": [
+ "dist/"
+ ],
+ "source": "src/index.ts",
+ "types": "dist/esm/index.d.ts",
+ "module": "dist/esm/index.js",
+ "main": "dist/umd/index.production.js",
+ "umd:main": "dist/umd/index.production.js",
+ "unpkg": "dist/umd/index.production.js",
+ "jsdelivr": "dist/umd/index.production.js",
+ "scripts": {
+ "build:clean": "rm -rf ./dist",
+ "build:esm": "babel src --root-mode upward --extensions '.ts,.tsx' --out-dir dist/esm --ignore '**/*/__tests__/'",
+ "build:types": "tsc -p ./tsconfig.declaration.json --outDir ./dist/esm",
+ "build:umd": "rollup --config",
+ "build": "yarn build:clean && yarn build:umd && yarn build:esm && yarn build:types",
+ "on:change": "concurrently \"yarn build:esm\" \"yarn build:types\"",
+ "prepare": "yarn build:esm && yarn build:types",
+ "watch": "watch \"yarn on:change\" --ignoreDirectoryPattern \"/dist/\""
+ },
+ "dependencies": {
+ "preact": "^10.0.0"
+ },
+ "devDependencies": {
+ "@algolia/autocomplete-js": "1.0.0-alpha.44"
+ }
+}
diff --git a/packages/autocomplete-layout-classic/rollup.config.js b/packages/autocomplete-layout-classic/rollup.config.js
new file mode 100644
index 000000000..099ce0e3a
--- /dev/null
+++ b/packages/autocomplete-layout-classic/rollup.config.js
@@ -0,0 +1,5 @@
+import { createRollupConfigs } from '../../scripts/rollup/config';
+
+import pkg from './package.json';
+
+export default createRollupConfigs({ pkg });
diff --git a/packages/autocomplete-layout-classic/src/NavigationCommands.d.ts b/packages/autocomplete-layout-classic/src/NavigationCommands.d.ts
new file mode 100644
index 000000000..9538171cb
--- /dev/null
+++ b/packages/autocomplete-layout-classic/src/NavigationCommands.d.ts
@@ -0,0 +1,7 @@
+import { NavigationCommandsProps } from './NavigationCommands';
+
+declare module '@algolia/autocomplete-js' {
+ export interface AutocompleteComponents {
+ NavigationCommands: (props: NavigationCommandsProps) => JSX.Element;
+ }
+}
diff --git a/packages/autocomplete-layout-classic/src/NavigationCommands.tsx b/packages/autocomplete-layout-classic/src/NavigationCommands.tsx
new file mode 100644
index 000000000..57e0bb4cd
--- /dev/null
+++ b/packages/autocomplete-layout-classic/src/NavigationCommands.tsx
@@ -0,0 +1,109 @@
+/** @jsx createElement */
+import type { AutocompleteRenderer } from '@algolia/autocomplete-js';
+import {
+ createElement as preactCreateElement,
+ Fragment as PreactFragment,
+} from 'preact';
+
+type NavigationCommandsTranslations = {
+ toSelect: string;
+ toNavigate: string;
+ toClose: string;
+};
+
+const defaultTranslations: NavigationCommandsTranslations = {
+ toSelect: 'to select',
+ toNavigate: 'to navigate',
+ toClose: 'to close',
+};
+
+export type NavigationCommandsProps = {
+ translations?: NavigationCommandsTranslations;
+};
+
+export function createNavigationCommandsComponent({
+ createElement,
+}: AutocompleteRenderer) {
+ return function NavigationCommands({
+ translations = defaultTranslations,
+ }: NavigationCommandsProps): JSX.Element {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ {translations.toSelect}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {translations.toNavigate}
+
+
+
+
+
+
+
+
+
+
+
+ {translations.toClose}
+
+
+
+
+ );
+ };
+}
+
+export const NavigationCommands = createNavigationCommandsComponent({
+ createElement: preactCreateElement,
+ Fragment: PreactFragment,
+});
diff --git a/packages/autocomplete-layout-classic/src/SearchByAlgolia.d.ts b/packages/autocomplete-layout-classic/src/SearchByAlgolia.d.ts
new file mode 100644
index 000000000..97864841c
--- /dev/null
+++ b/packages/autocomplete-layout-classic/src/SearchByAlgolia.d.ts
@@ -0,0 +1,7 @@
+import { SearchByAlgoliaProps } from './SearchByAlgolia';
+
+declare module '@algolia/autocomplete-js' {
+ export interface AutocompleteComponents {
+ SearchByAlgolia: (props: SearchByAlgoliaProps) => JSX.Element;
+ }
+}
diff --git a/packages/autocomplete-layout-classic/src/SearchByAlgolia.tsx b/packages/autocomplete-layout-classic/src/SearchByAlgolia.tsx
new file mode 100644
index 000000000..0a49981e4
--- /dev/null
+++ b/packages/autocomplete-layout-classic/src/SearchByAlgolia.tsx
@@ -0,0 +1,54 @@
+/** @jsx createElement */
+import type { AutocompleteRenderer } from '@algolia/autocomplete-js';
+import {
+ createElement as preactCreateElement,
+ Fragment as PreactFragment,
+} from 'preact';
+
+type SearchByAlgoliaTranslations = {
+ searchBy: string;
+};
+
+const defaultTranslations: SearchByAlgoliaTranslations = {
+ searchBy: 'Search by',
+};
+
+export type SearchByAlgoliaProps = {
+ translations?: SearchByAlgoliaTranslations;
+};
+
+export function createSearchByAlgoliaComponent({
+ createElement,
+}: AutocompleteRenderer) {
+ return function NavigationCommands({
+ translations = defaultTranslations,
+ }: SearchByAlgoliaProps): JSX.Element {
+ return (
+
+ {translations.searchBy}
+
+
+
+
+ );
+ };
+}
+
+export const SearchByAlgolia = createSearchByAlgoliaComponent({
+ createElement: preactCreateElement,
+ Fragment: PreactFragment,
+});
diff --git a/packages/autocomplete-layout-classic/src/index.ts b/packages/autocomplete-layout-classic/src/index.ts
new file mode 100644
index 000000000..acaf27b00
--- /dev/null
+++ b/packages/autocomplete-layout-classic/src/index.ts
@@ -0,0 +1,2 @@
+export * from './NavigationCommands';
+export * from './SearchByAlgolia';
diff --git a/packages/autocomplete-layout-classic/tsconfig.declaration.json b/packages/autocomplete-layout-classic/tsconfig.declaration.json
new file mode 100644
index 000000000..1e0c6449f
--- /dev/null
+++ b/packages/autocomplete-layout-classic/tsconfig.declaration.json
@@ -0,0 +1,3 @@
+{
+ "extends": "../../tsconfig.declaration"
+}
diff --git a/packages/autocomplete-theme-classic/src/theme.scss b/packages/autocomplete-theme-classic/src/theme.scss
index c62c7c3a1..46f02fb4f 100644
--- a/packages/autocomplete-theme-classic/src/theme.scss
+++ b/packages/autocomplete-theme-classic/src/theme.scss
@@ -10,6 +10,7 @@
// 9. Detached Mode
// 10. Gradients
// 11. Utilities
+// 12. Layouts
// ----------------
// Note:
@@ -80,9 +81,16 @@
--aa-overlay-color-rgb: 115, 114, 129;
--aa-overlay-color-alpha: 0.4;
- // Shadows
+ // Shadows & Gradients
--aa-panel-shadow: 0 0 0 1px rgba(35, 38, 59, 0.1),
0 6px 16px -4px rgba(35, 38, 59, 0.15);
+ --aa-key-shadow: inset 0 -2px 0 0 rgba(205, 205, 230, 1),
+ inset 0 0 1px 1px #fff, 0 1px 2px 1px rgba(30, 35, 90, 0.4);
+ --aa-key-background: linear-gradient(
+ -225deg,
+ rgb(213, 219, 228),
+ rgb(248, 248, 248)
+ );
// Scrollbar
--aa-scrollbar-width: 13px;
@@ -108,7 +116,7 @@ body {
// Text colors
--aa-text-color-rgb: 183, 192, 199;
--aa-primary-color-rgb: 146, 138, 255;
- --aa-muted-color-rgb: 146, 138, 255;
+ --aa-muted-color-rgb: 136, 138, 155;
// Background colors
--aa-input-background-color-rgb: 0, 3, 9;
@@ -124,6 +132,13 @@ body {
// Shadows
--aa-panel-shadow: inset 1px 1px 0 0 rgb(44, 46, 64),
0 3px 8px 0 rgb(0, 3, 9);
+ --aa-key-shadow: inset 0 -2px 0 0 rgb(40, 45, 85),
+ inset 0 0 1px 1px rgb(81, 87, 125), 0 2px 2px 0 rgba(3, 4, 9, 0.3);
+ --aa-key-background: linear-gradient(
+ -26.5deg,
+ rgb(86, 88, 114),
+ rgb(49, 53, 91)
+ );
// Scrollbar
--aa-scrollbar-track-background-color-rgb: 44, 46, 64;
@@ -768,13 +783,13 @@ body {
rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha))
);
content: '';
- height: var(--aa-spacing);
+ height: var(--aa-spacing-half);
left: 0;
opacity: 0.12;
pointer-events: none;
position: absolute;
right: 0;
- top: calc(var(--aa-spacing) * -1);
+ top: calc(var(--aa-spacing-half) * -1);
z-index: calc(var(--aa-base-z-index) - 1);
}
}
@@ -976,3 +991,61 @@ body {
display: none;
}
}
+
+//----------------
+// 12. Layouts
+//----------------
+@media (hover: none) and (pointer: coarse) {
+ .aa-NavigationCommands > * {
+ display: none;
+ }
+}
+
+.aa-NavigationCommandList {
+ display: grid;
+ gap: var(--aa-spacing);
+ grid-template-columns: repeat(3, auto);
+ margin: 0;
+ padding: 0;
+}
+
+.aa-NavigationCommandListItem {
+ align-items: center;
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+}
+
+.aa-NavigationCommandLabel,
+.aa-SearchByAlgoliaLabel {
+ color: rgba(var(--aa-muted-color-rgb),1);
+ font-size: 0.75em;
+ line-height: 1.6em;
+}
+
+.aa-SearchByAlgolia {
+ align-items: center;
+ display: grid;
+ gap: var(--aa-spacing-half);
+ grid-template-columns: repeat(2, auto);
+ text-decoration: none;
+}
+
+.aa-SearchByAlgoliaLogo {
+ color: rgb(84, 104, 255);
+}
+
+.aa-Key {
+ align-items: center;
+ background: var(--aa-key-background);
+ border-radius: 3px;
+ box-shadow: var(--aa-key-shadow);
+ color: rgba(var(--aa-muted-color-rgb),1);
+ display: flex;
+ height: 20px;
+ justify-content: center;
+ margin-right: 8px;
+ position: relative;
+ top: -1px;
+ width: 20px;
+}
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 | 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
new file mode 100644
index 000000000..f41093fb3
--- /dev/null
+++ b/packages/website/docs/autocomplete-layout-classic.md
@@ -0,0 +1,210 @@
+---
+id: autocomplete-layout-classic
+---
+
+The Classic layout provides components for Autocomplete experiences.
+
+This layout relies on the [Autocomplete Classic Theme](autocomplete-theme-classic). Make sure to install it as well.
+
+## Installation
+
+First, you need to install the layout.
+
+```bash
+yarn add @algolia/autocomplete-layout-classic@alpha
+# or
+npm install @algolia/autocomplete-layout-classic@alpha
+```
+
+Then import it in your project:
+
+```js
+import {
+ NavigationCommands,
+ SearchByAlgolia,
+} from '@algolia/autocomplete-layout-classic';
+```
+
+If you don't use a package manager, you can use a standalone endpoint:
+
+```html
+
+```
+
+## Examples
+
+With default translations:
+
+```tsx
+/** @jsx h */
+import { autocomplete } from '@algolia/autocomplete-js';
+import {
+ NavigationCommands,
+ SearchByAlgolia,
+} from '@algolia/autocomplete-layout-classic';
+import { h, render } from 'preact';
+
+import '@algolia/autocomplete-theme-classic';
+
+autocomplete({
+ // ...
+ components: {
+ NavigationCommands,
+ SearchByAlgolia,
+ },
+ render({ sections, Fragment, components }, root) {
+ render(
+
+ {sections}
+
+ ,
+ root
+ );
+ },
+});
+```
+
+With French translations:
+
+```tsx
+/** @jsx h */
+import { autocomplete } from '@algolia/autocomplete-js';
+import {
+ NavigationCommands,
+ SearchByAlgolia,
+} from '@algolia/autocomplete-layout-classic';
+import { h, render } from 'preact';
+
+import '@algolia/autocomplete-theme-classic';
+
+autocomplete({
+ // ...
+ components: {
+ NavigationCommands,
+ SearchByAlgolia,
+ },
+ render({ sections, Fragment, components }, root) {
+ render(
+
+ {sections}
+
+ ,
+ root
+ );
+ },
+});
+```
+
+With a custom renderer:
+
+```tsx
+import { autocomplete } from '@algolia/autocomplete-js';
+import {
+ createNavigationCommandsComponent,
+ createSearchByAlgoliaComponent,
+} from '@algolia/autocomplete-layout-classic';
+import React, { createElement, Fragment } from 'react';
+
+import '@algolia/autocomplete-theme-classic';
+
+const renderer = { createElement, Fragment };
+
+autocomplete({
+ // ...
+ renderer,
+ components: {
+ NavigationCommands: createNavigationCommandsComponent(renderer),
+ SearchByAlgolia: createSearchByAlgoliaComponent(renderer),
+ },
+ render({ sections, Fragment, components }, root) {
+ render(
+
+ {sections}
+
+ ,
+ root
+ );
+ },
+});
+```
+
+## Reference
+
+### `NavigationCommands`
+
+#### `translations`
+
+> `NavigationCommandsTranslations` | defaults to English strings
+
+The translations to display.
+
+```ts
+type NavigationCommandsTranslations = {
+ toSelect: string;
+ toNavigate: string;
+ toClose: string;
+};
+```
+
+Defaults to:
+
+```ts
+const translations = {
+ toSelect: 'to select',
+ toNavigate: 'to navigate',
+ toClose: 'to close',
+};
+```
+
+### `SearchByAlgolia`
+
+#### `translations`
+
+> `SearchByAlgoliaTranslations` | defaults to English strings
+
+The translations to display.
+
+```ts
+type SearchByAlgoliaTranslations = {
+ searchBy: string;
+};
+```
+
+Defaults to:
+
+```ts
+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).
diff --git a/packages/website/sidebars.js b/packages/website/sidebars.js
index 1862906a2..d213c598f 100644
--- a/packages/website/sidebars.js
+++ b/packages/website/sidebars.js
@@ -75,6 +75,7 @@ module.exports = {
],
},
'autocomplete-theme-classic',
+ 'autocomplete-layout-classic',
],
},
};
diff --git a/ship.config.js b/ship.config.js
index beaa5e8ed..57b6cdc44 100644
--- a/ship.config.js
+++ b/ship.config.js
@@ -9,6 +9,7 @@ module.exports = {
packagesToPublish: [
'packages/autocomplete-core',
'packages/autocomplete-js',
+ 'packages/autocomplete-layout-classic',
'packages/autocomplete-plugin-algolia-insights',
'packages/autocomplete-plugin-query-suggestions',
'packages/autocomplete-plugin-recent-searches',