diff --git a/.circleci/config.yml b/.circleci/config.yml
index 6d691087dd..dc3b6382ae 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -150,13 +150,7 @@ jobs:
- packages/instantsearch.js/dist
- packages/react-instantsearch/dist
- packages/react-instantsearch-core/dist
- - packages/react-instantsearch-dom/dist
- - packages/react-instantsearch-dom-maps/dist
- - packages/react-instantsearch-native/dist
- - packages/react-instantsearch-hooks/dist
- - packages/react-instantsearch-hooks-web/dist
- - packages/react-instantsearch-hooks-router-nextjs/dist
- - packages/react-instantsearch-hooks-server/dist
+ - packages/react-instantsearch-router-nextjs/dist
- packages/vue-instantsearch/vue2
- packages/vue-instantsearch/vue3
diff --git a/.codesandbox/ci.json b/.codesandbox/ci.json
index 63bdb294e1..03ffbfc08e 100644
--- a/.codesandbox/ci.json
+++ b/.codesandbox/ci.json
@@ -2,17 +2,14 @@
"sandboxes": [
"instantsearchjs-es-template-pcw1k",
"github/algolia/instantsearch.js/tree/templates/react-instantsearch",
- "/examples/react-hooks/default-theme",
+ "/examples/react/default-theme",
"/examples/vue/default-theme"
],
"buildCommand": "build --no-private --ignore *-maps --ignore *-native",
"packages": [
"packages/instantsearch.js",
+ "packages/react-instantsearch",
"packages/react-instantsearch-core",
- "packages/react-instantsearch-dom",
- "packages/react-instantsearch-hooks",
- "packages/react-instantsearch-hooks-web",
- "packages/react-instantsearch-hooks-server",
"packages/vue-instantsearch",
"packages/instantsearch.css"
],
diff --git a/.eslintignore b/.eslintignore
index 73aed5b1bd..5c6e52ee58 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -21,9 +21,9 @@ coverage
# Non-lintable source files
## React-Native TypeScript wasn't supporting the mix of react 18 and 17
-examples/react-hooks/react-native
+examples/react/react-native
## Excluded from global typescript config
-examples/react-hooks/next/next-env.d.ts
+examples/react/next/next-env.d.ts
## templates that don't get installed
packages/create-instantsearch-app/src/templates
## test fixtures for codemods
diff --git a/.eslintrc.js b/.eslintrc.js
index b2faaa6001..07617403a0 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -122,14 +122,7 @@ const config = {
caseInsensitive: true,
},
'newlines-between': 'always',
- groups: [
- 'builtin',
- 'external',
- 'parent',
- 'sibling',
- 'index',
- 'type',
- ],
+ groups: ['builtin', 'external', 'parent', 'sibling', 'index', 'type'],
pathGroups: [
{
pattern: '@/**/*',
@@ -200,8 +193,8 @@ const config = {
},
{
files: [
- 'packages/react-instantsearch-hooks/**/*',
- 'packages/react-instantsearch-hooks-*/**/*',
+ 'packages/react-instantsearch/**/*',
+ 'packages/react-instantsearch-*/**/*',
],
rules: {
'@typescript-eslint/consistent-type-assertions': 'off',
@@ -250,25 +243,6 @@ const config = {
},
},
// Disable stricter rules introduced for the next versions of the libraries.
- {
- files: [
- 'packages/react-instantsearch-core/**/*',
- 'packages/react-instantsearch-dom/**/*',
- ],
- rules: {
- '@typescript-eslint/consistent-type-assertions': 'off',
- '@typescript-eslint/ban-types': 'off',
- },
- },
- {
- files: [
- 'examples/react-hooks/react-native/**/*.ts',
- 'examples/react-hooks/react-native/**/*.tsx',
- ],
- parserOptions: {
- project: 'examples/react-hooks/react-native/tsconfig.json',
- },
- },
{
files: [
'packages/instantsearch.js/src/**/*.ts',
@@ -373,12 +347,9 @@ const config = {
},
},
{
- files: [
- 'packages/react-instantsearch-hooks-router-nextjs/__tests__/e2e/**/*',
- ],
+ files: ['packages/react-instantsearch-router-nextjs/__tests__/e2e/**/*'],
parserOptions: {
- project:
- 'packages/react-instantsearch-hooks-router-nextjs/tsconfig.json',
+ project: 'packages/react-instantsearch-router-nextjs/tsconfig.json',
},
},
{
diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml
index f0f7083648..5a818ea6e2 100644
--- a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml
+++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml
@@ -36,7 +36,6 @@ body:
Sandboxes |
InstantSearch.js |
React InstantSearch |
- React InstantSearch Hooks |
Vue InstantSearch |
Angular InstantSearch |
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 45823c294f..a3c25ce9ac 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -127,15 +127,8 @@ Here are the main files and folders of the project.
```
▸ examples/ << Examples, grouped per flavor
▸ packages/ << Packages of the project
- ▸ react-instantsearch/ << Bundled React InstantSearch library
- ▸ react-instantsearch-core/ << Runtime-independent React InstantSearch version
- ▸ react-instantsearch-dom/ << DOM-specific React InstantSearch version
- ▸ react-instantsearch-native/ << React Native-specific InstantSearch version
- ▸ react-instantsearch-dom-maps/ << DOM-specific React InstantSearch version with Google Maps
-
- ▸ react-instantsearch-hooks/ << React InstantSearch Hooks library
- ▸ react-instantsearch-hooks-web/ << DOM-specific React InstantSearch Hooks version
- ▸ react-instantsearch-hooks-server/ << Server-specific React InstantSearch Hooks version
+ ▸ react-instantsearch/ << Bundled React InstantSearch library
+ ▸ react-instantsearch-core/ << Runtime-independent React InstantSearch version
▸ instantsearch.js/ << The InstantSearch.js library
▸ tests/ << The test utilites
@@ -163,7 +156,7 @@ This monorepo has as goal to be used for all InstantSearch flavors and tools. To
8. replace commit messages which refer to issues/PRs with #xxx by also referencing the original repo: `git filter-branch --msg-filter 'sed -E "s/(#[[:digit:]]+)/algolia\/myproject\1/"' master..feat/import-myproject`
9. make any changes necessary to make the project work in the monorepo and commit those
10. make a pull request and _merge using rebase or merge_ (if you merge using squash the history will be lost)
-11. manually tag and push the latest release commit from the imported project to let shipjs know which version to take into account during the next release process
+11. manually tag and push the latest release commit from the imported project to let shipjs know which version to take into account during the next release process
## Tests
@@ -171,7 +164,7 @@ The general philosophy of testing in InstantSearch follows [Testing Library's gu
>The more your tests resemble the way your software is used, the more confidence they can give you.
-We rely on [Jest](https://jestjs.io/) for unit tests on all flavors of InstantSearch. In addition, [React Testing Library](https://testing-library.com/docs/react-testing-library/intro/) is used to test interactions in React InstantSearch Hooks.
+We rely on [Jest](https://jestjs.io/) for unit tests on all flavors of InstantSearch. In addition, [React Testing Library](https://testing-library.com/docs/react-testing-library/intro/) is used to test interactions in React InstantSearch.
### How to write a test
diff --git a/README.md b/README.md
index d1c9d6c55f..b5ec2ccf84 100644
--- a/README.md
+++ b/README.md
@@ -44,14 +44,8 @@ It is part of the InstantSearch family which is designed for different platforms
| [`create-instantsearch-app`](packages/create-instantsearch-app) | [](https://npmjs.org/package/create-instantsearch-app) | Command-line utility to quickly bootstrap a project with InstantSearch |
| [`instantsearch.css`](packages/instantsearch.css) | [](https://npmjs.org/package/instantsearch.css) | Default CSS themes for InstantSearch |
| [`instantsearch.js`](packages/instantsearch.js) | [](https://npmjs.org/package/instantsearch.js) | InstantSearch.js |
-| [`react-instantsearch`](packages/react-instantsearch) | [](https://npmjs.org/package/react-instantsearch)| React InstantSearch (prefer using `react-instantsearch-hooks-web` instead) |
-| [`react-instantsearch-core`](packages/react-instantsearch-core) | [](https://npmjs.org/package/react-instantsearch-core) | React InstantSearch Core (prefer using `react-instantsearch-hooks` instead) |
-| [`react-instantsearch-dom`](packages/react-instantsearch-dom) | [](https://npmjs.org/package/react-instantsearch-dom) | React InstantSearch DOM (prefer using `react-instantsearch-hooks-web` instead) |
-| [`react-instantsearch-dom-maps`](packages/react-instantsearch-dom-maps) | [](https://npmjs.org/package/react-instantsearch-dom-maps)| GeoSearch widget for React InstantSearch DOM |
-| [`react-instantsearch-hooks`](packages/react-instantsearch-hooks) | [](https://npmjs.org/package/react-instantsearch-hooks) | React InstantSearch Hooks |
-| [`react-instantsearch-hooks-server`](packages/react-instantsearch-hooks-server) | [](https://npmjs.org/package/react-instantsearch-hooks-server) | Utilities to do server-side rendering with React InstantSearch Hooks |
-| [`react-instantsearch-hooks-web`](packages/react-instantsearch-hooks-web) | [](https://npmjs.org/package/react-instantsearch-hooks-web) | React InstantSearch Hooks bundled with UI components |
-| [`react-instantsearch-native`](packages/react-instantsearch-native) | [](https://npmjs.org/package/react-instantsearch-native) | React InstantSearch Native (prefer using `react-instantsearch-hooks` instead) |
+| [`react-instantsearch`](packages/react-instantsearch) | [](https://npmjs.org/package/react-instantsearch)| React InstantSearch bundled library |
+| [`react-instantsearch-core`](packages/react-instantsearch-core) | [](https://npmjs.org/package/react-instantsearch-core) | Runtime-independent React InstantSearch version |
| [`vue-instantsearch`](packages/vue-instantsearch) | [](https://npmjs.org/package/vue-instantsearch) | Vue InstantSearch |
## Contributing
@@ -68,7 +62,7 @@ To start contributing to code, you need to:
1. [Fork the project](https://help.github.com/articles/fork-a-repo/)
1. [Clone the repository](https://help.github.com/articles/cloning-a-repository/)
1. Install the dependencies: `yarn`
-1. [Pick a package to work on](#packages) and cd into it (e.g. `cd packages/react-instantsearch-hooks`)
+1. [Pick a package to work on](#packages) and cd into it (e.g. `cd packages/react-instantsearch`)
Please read [our contribution process](CONTRIBUTING.md) to learn more.
@@ -87,7 +81,7 @@ InstantSearch is [MIT licensed][license-url].
[algolia-website]: https://www.algolia.com/?utm_source=instantsearch.js&utm_campaign=repository "Algolia's website"
[instantsearch-docs]: https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/?utm_source=instantsearch.js&utm_campaign=repository "InstantSearch.js documentation"
-[react-instantsearch-docs]: https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/react-hooks/?utm_source=instantsearch.js&utm_campaign=repository "React InstantSearch documentation"
+[react-instantsearch-docs]: https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/react/?utm_source=instantsearch.js&utm_campaign=repository "React InstantSearch documentation"
[vue-instantsearch-docs]: https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/vue/?utm_source=instantsearch.js&utm_campaign=repository "Vue InstantSearch documentation"
[angular-instantsearch-docs]: https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/angular/?utm_source=instantsearch.js&utm_campaign=repository "Angular InstantSearch documentation"
[instantsearch-android-github]: https://github.com/algolia/instantsearch-android
diff --git a/babel.config.js b/babel.config.js
index c07aace4b9..114bb8d518 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -119,13 +119,6 @@ module.exports = (api) => {
],
],
},
- {
- test: 'packages/react-instantsearch-dom-maps',
- plugins: clean([
- '@babel/plugin-syntax-dynamic-import',
- !isRollup && 'babel-plugin-dynamic-import-node',
- ]),
- },
],
// jsx is transpiled, so the comment should no longer be present in the final files
shouldPrintComment: (value) => value !== '* @jsx h ',
diff --git a/bundlesize.config.json b/bundlesize.config.json
index 4b8dfb8540..8d83809581 100644
--- a/bundlesize.config.json
+++ b/bundlesize.config.json
@@ -16,38 +16,14 @@
"path": "./packages/instantsearch.js/dist/instantsearch.development.js",
"maxSize": "165 kB"
},
- {
- "path": "packages/react-instantsearch/dist/umd/Core.min.js",
- "maxSize": "3.50 kB"
- },
- {
- "path": "packages/react-instantsearch/dist/umd/Connectors.min.js",
- "maxSize": "26 kB"
- },
- {
- "path": "packages/react-instantsearch/dist/umd/Dom.min.js",
- "maxSize": "44.50 kB"
- },
{
"path": "packages/react-instantsearch-core/dist/umd/ReactInstantSearchCore.min.js",
- "maxSize": "29.50 kB"
- },
- {
- "path": "packages/react-instantsearch-hooks/dist/umd/ReactInstantSearchHooks.min.js",
"maxSize": "46.25 kB"
},
{
- "path": "packages/react-instantsearch-hooks-web/dist/umd/ReactInstantSearchHooksDOM.min.js",
+ "path": "packages/react-instantsearch/dist/umd/ReactInstantSearch.min.js",
"maxSize": "56 kB"
},
- {
- "path": "packages/react-instantsearch-dom/dist/umd/ReactInstantSearchDOM.min.js",
- "maxSize": "44.75 kB"
- },
- {
- "path": "packages/react-instantsearch-dom-maps/dist/umd/ReactInstantSearchDOMMaps.min.js",
- "maxSize": "7.25 kB"
- },
{
"path": "packages/vue-instantsearch/vue2/umd/index.js",
"maxSize": "63 kB"
diff --git a/examples/react-hooks/default-theme/index.html b/examples/react-hooks/default-theme/index.html
deleted file mode 100644
index 536b79cc4e..0000000000
--- a/examples/react-hooks/default-theme/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
- React InstantSearch - Hooks
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/react-hooks/default-theme/package.json b/examples/react-hooks/default-theme/package.json
deleted file mode 100644
index 44055a11b4..0000000000
--- a/examples/react-hooks/default-theme/package.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "name": "example-react-instantsearch-hooks-default-theme",
- "version": "6.50.0",
- "private": true,
- "scripts": {
- "build": "BABEL_ENV=parcel parcel build index.html",
- "start": "BABEL_ENV=parcel parcel index.html"
- },
- "dependencies": {
- "algoliasearch": "4.14.3",
- "instantsearch.js": "4.56.8",
- "react": "18.1.0",
- "react-dom": "18.1.0",
- "react-instantsearch-hooks-web": "6.47.3"
- },
- "devDependencies": {
- "@parcel/core": "2.8.0",
- "@parcel/packager-raw-url": "2.8.0",
- "@parcel/transformer-webmanifest": "2.8.0",
- "parcel": "2.8.0",
- "typescript": "5.1.3"
- }
-}
diff --git a/examples/react-hooks/e-commerce/App.css b/examples/react-hooks/e-commerce/App.css
deleted file mode 100644
index b426e86e8e..0000000000
--- a/examples/react-hooks/e-commerce/App.css
+++ /dev/null
@@ -1,341 +0,0 @@
-* {
- box-sizing: border-box;
-}
-
-body,
-h1,
-h2 {
- margin: 0;
- padding: 0;
-}
-
-body {
- font-family: Open Sans, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
- Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
- 'Segoe UI Symbol';
- -webkit-font-smoothing: antialiased;
-}
-
-h2 {
- color: #21243d;
- font-family: Hind, sans-serif;
- font-size: 1.5rem;
- font-weight: bold;
-}
-
-/* Header */
-
-.header {
- align-items: center;
- background: linear-gradient(to bottom, #fbc300, #c98a00);
- background-image: url('./assets/cover.png');
- background-image: url('./assets/cover.png'),
- linear-gradient(to bottom, #fbc300, #c98a00);
- background-position: center;
- background-size: cover;
- color: #fff;
- display: flex;
- flex-direction: column;
- justify-content: center;
- min-height: 368px;
- padding: 0.5rem 1rem;
- text-align: center;
-}
-
-.header-logo {
- margin: 0;
-}
-
-.header-logo svg {
- height: 24px;
- width: 92px;
-}
-
-.header-title {
- font-size: 38px;
- font-weight: 300;
-}
-
-/* Containers */
-
-.container {
- display: flex;
- margin: 0 auto;
- max-width: 1300px;
- padding: 2rem 1rem;
-}
-
-.container-filters {
- flex: 1;
- margin-right: 60px;
- max-width: 260px;
-}
-
-.container-header {
- align-items: center;
- display: flex;
- justify-content: space-between;
- min-height: 80px;
-}
-
-.container-results {
- flex: 3;
-}
-
-.container-options {
- border-bottom: 1px solid #ebecf3;
- display: flex;
- justify-content: flex-end;
- margin-bottom: 30px;
- padding: 30px 0;
-}
-
-.container-options .container-option:not(:first-child) {
- margin-left: 48px;
-}
-
-.container-options select {
- min-width: 100px;
-}
-
-.container-footer {
- margin: 4rem 0;
-}
-
-/* Styles the SFFV highlightings */
-
-em {
- font-style: normal;
-}
-
-em,
-mark {
- background: rgba(226, 164, 0, 0.4);
-}
-
-/* Clear refinements container */
-
-.clear-filters {
- align-items: center;
- display: flex;
-}
-
-.clear-filters svg {
- margin-right: 8px;
-}
-
-/* Panel */
-
-.container-body .ais-Panel {
- border-top: 1px solid #ebecf3;
- padding-bottom: 2rem;
- padding-top: 2rem;
-}
-
-.ais-Panel-header {
- font-family: Hind, sans-serif;
-}
-
-/* Search box */
-
-.header .ais-SearchBox {
- height: 64px;
- width: 740px;
-}
-
-.header .ais-SearchBox .ais-SearchBox-input {
- background-color: #fff;
- border-radius: 8px;
- box-shadow: 0 4px 48px 0 rgba(0, 0, 0, 0.2);
- font-family: Hind, sans-serif;
- height: 64px;
- /*
- The "Hind" font family is vertically off-balance.
- Adding 4px of padding top makes it more vertically aligned.
- */
- padding: 4px 48px 0 64px;
-}
-
-.header .ais-SearchBox-submit {
- padding: 0 1rem 0 2rem;
- width: 64px;
-}
-
-.header .ais-SearchBox .ais-SearchBox-input::placeholder {
- color: rgba(33, 36, 61, 0.24);
- opacity: 1; /* Firefox */
-}
-
-.ais-SearchBox-input:-ms-input-placeholder {
- color: rgba(33, 36, 61, 0.24);
-}
-
-.ais-SearchBox-input::-ms-input-placeholder {
- color: rgba(33, 36, 61, 0.24);
-}
-
-.ais-SearchBox-submit {
- color: #e2a400;
-}
-
-.ais-RefinementList .ais-SearchBox-input {
- font-family: Hind, sans-serif;
- /*
- The "Hind" font family is vertically off-balance.
- Adding some padding top makes it more vertically aligned.
- */
- padding-top: 2px;
-}
-
-/* Hits */
-
-.hit {
- color: #21243d;
- font-size: 14px;
- line-height: 18px;
-}
-
-.hit h1 {
- font-size: 14px;
-}
-
-.hit-category {
- color: #21243d;
- font-size: 12px;
- font-weight: 600;
- line-height: 1;
- margin-bottom: 8px;
- opacity: 0.7;
- text-transform: uppercase;
-}
-
-.hit-description {
- margin-top: 2px;
-}
-
-.hit-info-container {
- overflow-wrap: break-word;
- word-break: break-word;
-}
-
-.hit-image-container {
- align-items: center;
- display: flex;
- height: 174px;
- justify-content: center;
- margin: auto;
- width: 174px;
-}
-
-.hit-image {
- height: auto;
- max-height: 100%;
- max-width: 100%;
-}
-
-.hit-em {
- color: #e2a400;
- font-size: 11px;
- font-weight: 600;
-}
-
-.hit-rating {
- border: 1px solid rgba(226, 164, 0, 0.5);
- border-radius: 4px;
- margin-left: 4px;
- padding: 0 4px;
-}
-
-.hits-empty-state {
- align-items: center;
- display: flex;
- flex-direction: column;
- margin: auto;
- max-width: 300px;
-}
-
-.hits-empty-state-title {
- font-family: Hind;
- font-size: 1.5rem;
- font-weight: bold;
- margin-bottom: 0;
- text-align: center;
-}
-
-.hits-empty-state-description {
- color: rgba(35, 37, 51, 0.6);
- font-size: 0.875rem;
- text-align: center;
-}
-
-.hits-empty-state .ais-ClearRefinements {
- margin-top: 1rem;
-}
-
-.hits-empty-state .ais-ClearRefinements-button--disabled {
- display: none;
-}
-
-.hits-empty-state .ais-ClearRefinements-button {
- background: rgba(10, 8, 41, 0.04);
- border-radius: 3px;
- color: #21243d;
- min-height: 48px;
- padding: 16px 24px;
-}
-
-/* ToggleRefinement */
-
-.ais-ToggleRefinement-label {
- display: flex;
- flex-direction: row-reverse;
- justify-content: space-between;
-}
-
-.ais-ToggleRefinement-checkbox {
- font: inherit;
- margin-left: 1rem;
- margin-right: 0;
- position: relative;
-}
-
-.ais-ToggleRefinement-checkbox:checked::before {
- color: #e2a400;
-}
-
-.ais-ToggleRefinement-checkbox::before {
- align-items: center;
- color: rgba(33, 36, 61, 0.32);
- content: 'No';
- display: flex;
- font-size: 0.8rem;
- height: 16px;
- position: absolute;
- right: 38px;
-}
-
-.ais-ToggleRefinement-checkbox:checked::before {
- content: 'Yes';
-}
-
-.ais-ToggleRefinement-count {
- display: none;
-}
-
-/* RatingMenu */
-
-.ais-RatingMenu-item:not(.ais-RatingMenu-item--selected) {
- opacity: 0.5;
-}
-
-.ais-RatingMenu-starIcon {
- margin-right: 0.5rem;
-}
-
-/* Hide all mobile-specific design on desktop */
-
-@media (min-width: 900px) {
- [data-layout='mobile'] {
- display: none;
- }
-}
diff --git a/examples/react-hooks/e-commerce/App.mobile.css b/examples/react-hooks/e-commerce/App.mobile.css
deleted file mode 100644
index 339c08cbc7..0000000000
--- a/examples/react-hooks/e-commerce/App.mobile.css
+++ /dev/null
@@ -1,264 +0,0 @@
-@media (max-width: 899px) {
- /* Filters overlay */
-
- .container-filters {
- background: #fff;
- border-radius: 16px;
- left: 0;
- max-width: initial;
- padding-bottom: 4rem;
- position: fixed;
- top: 0;
- transform: translateY(120vh);
- transition: transform 300ms cubic-bezier(0.465, 0.183, 0.153, 0.946);
- width: 100%;
- will-change: transform;
- z-index: 1;
- }
-
- .container-filters .container-header,
- .container-filters .container-body {
- padding: 2rem 2rem 0 2rem;
- }
-
- .filtering .header {
- /*
- Closing panel on outter click didn't work on mobile safari.
- This is one of the workarounds from the following:
- https://developer.mozilla.org/en-US/docs/Web/API/Element/click_event#Safari_Mobile
- */
- cursor: pointer;
- }
-
- .filtering .header-logo {
- left: 50%;
- pointer-events: none;
- position: absolute;
- top: 1.5rem;
- transform: translateX(-50%);
- }
-
- .filtering .header-title,
- .filtering .container-results,
- .container-filters-footer {
- display: none;
- }
-
- .filtering .container-filters {
- position: absolute;
- transform: translateY(4rem);
- }
-
- .filtering .container-filters-footer {
- background-color: #fff;
- border-top: 1px solid #ebecf3;
- bottom: 0;
- display: flex;
- justify-content: space-between;
- margin: 0 -2rem;
- padding: 1rem;
- position: fixed;
- width: 100%;
- z-index: 5; /* avoid collision with slider UI */
- }
-
- .container-filters-footer-button-wrapper {
- width: calc(50% - 0.5rem);
- }
-
- .container-filters-footer .ais-ClearRefinements-button,
- .container-filters-footer .button {
- background-color: rgba(65, 66, 71, 0.08);
- border: none;
- border-radius: 8px;
- cursor: pointer;
- display: flex;
- font: inherit;
- font-size: 0.75rem;
- font-weight: bold;
- justify-content: center;
- padding: 12px;
- text-align: center;
- width: 100%;
- }
-
- .container-filters-footer .button-primary {
- background-color: #e2a400;
- color: #fff;
- }
-
- /* Filters button that triggers the overlay */
-
- .filtering .filters-button {
- display: none;
- }
-
- .filters-button {
- align-items: center;
- background-color: #e2a400;
- border: none;
- border-radius: 8px;
- bottom: 2rem;
- box-shadow: 0 4px 22px 0 rgba(185, 135, 0, 0.5);
- color: #fff;
- cursor: pointer;
- display: flex;
- font: inherit;
- font-size: 0.875rem;
- font-weight: bold;
- justify-content: center;
- left: 50%;
- min-height: 40px;
- min-width: 112px;
- position: fixed;
- transform: translateX(-50%);
- }
-
- .filters-button svg {
- height: 14px;
- margin-right: 8px;
- width: 16px;
- }
-
- .container {
- padding: 4rem 2rem;
- }
-
- .container-options {
- display: none;
- }
-
- .header {
- background: linear-gradient(to bottom, #ae8600, #885b01);
- background-image: url('./assets/cover-mobile.png');
- background-image: url('./assets/cover-mobile.png'),
- linear-gradient(to bottom, #ae8600, #885b01);
- background-position: bottom;
- background-size: cover;
- min-height: 300px;
- position: relative;
- transition: transform 200ms ease-out;
- }
-
- /* SearchBox */
-
- .header .ais-SearchBox {
- bottom: 0;
- left: 0;
- position: absolute;
- transform: translateY(50%);
- width: 100vw;
- }
-
- .header .ais-SearchBox .ais-SearchBox-form {
- margin: auto;
- max-width: 90%;
- }
-
- .ais-SearchBox .ais-SearchBox-input,
- .ais-RefinementList .ais-SearchBox-input {
- font-size: 1rem;
- }
-
- .ais-RefinementList .ais-SearchBox-input {
- min-height: 48px;
- }
-
- /* RefinementList */
-
- .ais-RefinementList-list {
- display: grid;
- grid-auto-flow: column;
- grid-gap: 0 2rem;
- grid-template-rows: repeat(5, 1fr);
- }
-
- .ais-RefinementList-item {
- flex: 50%;
- }
-
- .ais-RefinementList-checkbox {
- height: 1.5rem;
- min-width: 1.5rem;
- }
-
- .ais-RefinementList-item--selected .ais-RefinementList-checkbox::after {
- align-items: center;
- background: none;
- content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='12' height='9'%3E%3Cdefs%3E%3Cpath id='a' d='M0 0h24v24H0z'/%3E%3C/defs%3E%3Cg fill='none' fill-rule='evenodd' transform='translate(-6 -8)'%3E%3Cmask id='b' fill='%23fff'%3E%3Cuse xlink:href='%23a'/%3E%3C/mask%3E%3Cpath fill='%23fff' fill-rule='nonzero' d='M16.5 8.5L18 10l-6.99 7-4.51-4.5L8 11l3.01 3z' mask='url(%23b)'/%3E%3C/g%3E%3C/svg%3E");
- display: flex;
- height: 100%;
- justify-content: center;
- left: initial;
- position: relative;
- top: initial;
- transform: initial;
- width: initial;
- }
-
- /* HierarchicalMenu */
-
- .ais-HierarchicalMenu-link::before {
- background-color: rgba(65, 66, 71, 0.08);
- border-radius: 50%;
- padding: 8px;
- }
-
- /* ToggleRefinement */
-
- .ais-ToggleRefinement-checkbox {
- min-width: 47px;
- position: relative;
- }
-
- .ais-ToggleRefinement-checkbox {
- margin-left: 2rem;
- }
-
- .ais-ToggleRefinement-checkbox::after {
- height: 1.5rem;
- top: -4px;
- width: 1.5rem;
- }
-
- .ais-ToggleRefinement-checkbox::before {
- right: 54px;
- }
-
- /* RatingMenu */
-
- .ais-RatingMenu-starIcon {
- height: 1.5rem;
- margin-right: 1rem;
- width: 1.5rem;
- }
-
- /* Hits */
-
- .ais-Hits-list {
- grid-gap: 1rem;
- }
-
- .hit {
- display: flex;
- }
-
- .hit-image-container {
- flex: 1;
- margin-right: 2rem;
- }
-
- .hit-info-container {
- flex: 2;
- }
-
- .hits-empty-state-image {
- display: none;
- }
-
- /* Hide all desktop-specific design on mobile */
-
- [data-layout='desktop'] {
- display: none;
- }
-}
diff --git a/examples/react-hooks/e-commerce/Theme.css b/examples/react-hooks/e-commerce/Theme.css
deleted file mode 100644
index 263d67f06d..0000000000
--- a/examples/react-hooks/e-commerce/Theme.css
+++ /dev/null
@@ -1,544 +0,0 @@
-/* Global */
-
-[class^='ais-'] {
- box-sizing: border-box;
- font-size: 0.9rem;
-}
-
-a[class^='ais-'] {
- color: #21243d;
- text-decoration: none;
-}
-
-/*
- We need to target the root element because Angular InstantSearch
- creates web components which are not targetable with the `*` selector.
-*/
-[class^='ais-'][class$='--disabled'],
-/*
- We need to target all elements for widgets containing
- multiple sub elements (e.g. RangeSlider)
-*/
-[class^='ais-'][class$='--disabled'] * {
- cursor: not-allowed;
-}
-
-.ais-Breadcrumb,
-.ais-ClearRefinements,
-.ais-CurrentRefinements,
-.ais-ClearRefinements-button,
-.ais-GeoSearch,
-.ais-HierarchicalMenu,
-.ais-Hits,
-.ais-Results,
-.ais-HitsPerPage,
-.ais-ResultsPerPage,
-.ais-InfiniteHits,
-.ais-InfiniteResults,
-.ais-Menu,
-.ais-MenuSelect,
-.ais-NumericMenu,
-.ais-NumericSelector,
-.ais-Pagination,
-.ais-Panel,
-.ais-PoweredBy,
-.ais-RangeInput,
-.ais-RangeSlider,
-.ais-RatingMenu,
-.ais-RefinementList,
-.ais-SearchBox,
-.ais-SortBy,
-.ais-SortBy-select,
-.ais-HitsPerPage-select,
-.ais-Stats,
-.ais-ToggleRefinement {
- color: #21243d;
- font-size: 0.75rem;
-}
-
-/* Highlighting */
-
-.ais-Highlight-highlighted,
-.ais-Snippet-highlighted {
- background: rgba(226, 164, 0, 0.4);
-}
-
-/* Hits */
-
-.ais-Hits-list {
- display: grid;
- grid-gap: 40px;
- grid-template-columns: 1fr;
-}
-
-@media (min-width: 680px) {
- .ais-Hits-list {
- grid-template-columns: 1fr 1fr;
- }
-}
-
-@media (min-width: 900px) {
- .ais-Hits-list {
- grid-template-columns: 1fr 1fr 1fr;
- }
-}
-
-@media (min-width: 1200px) {
- .ais-Hits-list {
- grid-template-columns: 1fr 1fr 1fr 1fr;
- }
-}
-
-/* Menus */
-
-.ais-RefinementList-item,
-.ais-Menu-item,
-.ais-HierarchicalMenu-item,
-.ais-RatingMenu-item {
- -moz-user-select: none;
- -webkit-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-.ais-RefinementList-item,
-/*
- The refinement list item in InstantSearch.js contains a wrapping `div` because of
- the template behavior. We therefore need to apply the styles to all the elements
- in a refinement list.
-*/
-.ais-RefinementList-item *,
-.ais-RatingMenu-item {
- cursor: pointer;
-}
-
-.ais-HierarchicalMenu-link,
-.ais-RatingMenu-item,
-.ais-RefinementList-item {
- padding-bottom: 1rem;
-}
-
-.ais-Breadcrumb-item--selected,
-.ais-HierarchicalMenu-item--selected,
-.ais-Menu-item--selected {
- font-weight: bold;
-}
-
-.ais-RatingMenu-starIcon--full {
- fill: #e2a400;
-}
-
-.ais-RatingMenu-starIcon--empty {
- fill: rgba(0, 0, 0, 0.08);
-}
-
-/* Panel */
-
-.ais-Panel--collapsible {
- position: relative;
-}
-
-.ais-Panel--collapsed .ais-Panel-body,
-.ais-Panel--collapsed .ais-Panel-footer {
- display: none;
-}
-
-.ais-Panel-collapseButton {
- background: none;
- border: none;
- cursor: pointer;
- padding: 0;
- position: absolute;
- right: 0;
-}
-
-.ais-Panel-header {
- border: none;
- color: #21243d;
- font-size: 0.678rem;
- font-weight: 600;
- letter-spacing: 0.08rem;
- line-height: 1.6;
- padding-bottom: 1rem;
- text-transform: uppercase;
-}
-
-/* Search box */
-
-.ais-SearchBox-form {
- position: relative;
-}
-
-.ais-SearchBox-input {
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- background-color: rgba(65, 66, 71, 0.06);
- border: none;
- border-radius: 3px;
- color: rgba(33, 36, 61, 0.8);
- font-family: inherit;
- min-height: 54px;
- outline: none;
- padding-left: 56px;
- width: 100%;
-}
-
-.ais-SearchBox-input::placeholder {
- color: rgba(33, 36, 61, 0.5);
- opacity: 1; /* Firefox */
-}
-
-.ais-SearchBox-input:-ms-input-placeholder {
- color: rgba(33, 36, 61, 0.5);
-}
-
-.ais-SearchBox-input::-ms-input-placeholder {
- color: rgba(33, 36, 61, 0.5);
-}
-
-.ais-SearchBox-reset,
-.ais-SearchBox-loadingIndicator,
-.ais-SearchBox-submit {
- align-items: center;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- display: flex;
- height: 100%;
- justify-content: center;
- position: absolute;
- top: 50%;
- transform: translateY(-50%);
- width: 48px;
-}
-
-.ais-SearchBox-reset[hidden],
-.ais-SearchBox-loadingIndicator[hidden] {
- display: none;
-}
-
-.ais-SearchBox-submit {
- left: 0;
-}
-
-.ais-SearchBox-reset,
-.ais-SearchBox-loadingIndicator {
- right: 0;
-}
-
-.ais-SearchBox-resetIcon {
- height: 10px;
- width: 10px;
-}
-
-/* SFFV search box */
-
-.ais-RefinementList .ais-SearchBox-input {
- border-radius: 3px;
- color: rgba(33, 36, 61, 0.8);
- font-size: 0.8rem;
- min-height: 40px;
- padding: 0 44px;
-}
-
-.ais-RefinementList .ais-SearchBox-form {
- margin-bottom: 1rem;
-}
-
-/* Menus */
-
-.ais-HierarchicalMenu-link,
-.ais-RatingMenu-link,
-.ais-RefinementList-label {
- align-items: center;
- display: flex;
-}
-
-.ais-RefinementList-checkbox {
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- background-color: rgba(65, 66, 71, 0.08);
- border: none;
- border-radius: 2px;
- height: 1rem;
- margin: 0;
- margin-right: 1rem;
- position: relative;
- width: 1rem;
-}
-
-.ais-RefinementList-item--selected {
- font-weight: bold;
-}
-
-.ais-RefinementList-item--selected .ais-RefinementList-checkbox {
- background-color: #e2a400;
-}
-
-.ais-RefinementList-item--selected .ais-RefinementList-checkbox::after {
- background-color: #fff;
- border-radius: 4px;
- content: '';
- height: 4px;
- left: 50%;
- position: absolute;
- top: 50%;
- transform: translateX(-2px) translateY(-2px);
- width: 4px;
-}
-
-.ais-HierarchicalMenu-count,
-.ais-Menu-count,
-.ais-RefinementList-count,
-.ais-ToggleRefinement-count,
-.ais-RatingMenu-count {
- align-items: center;
- background-color: rgba(65, 66, 71, 0.08);
- border-radius: 4px;
- color: rgba(33, 36, 61, 0.8);
- display: flex;
- font-size: 0.64rem;
- font-weight: 600;
- letter-spacing: 1.1px;
- margin-left: 8px;
- padding: 0 4px;
-}
-
-.ais-HierarchicalMenu-showMore,
-.ais-Menu-showMore,
-.ais-RefinementList-showMore {
- margin-top: 1rem;
-}
-
-.ais-HierarchicalMenu-list {
- font-weight: normal;
-}
-
-.ais-HierarchicalMenu-link::before {
- align-items: center;
- content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath fill='%2390919E' fill-rule='nonzero' d='M0 4l4-4 4 4z'/%3E%3C/svg%3E%0A");
- display: flex;
- height: 8px;
- justify-content: center;
- margin-right: 1rem;
- width: 8px;
-}
-
-.ais-HierarchicalMenu-item--selected .ais-HierarchicalMenu-link::before {
- transform: rotate(180deg);
-}
-
-.ais-HierarchicalMenu-item--selected
- .ais-HierarchicalMenu-item:not(.ais-HierarchicalMenu-item--selected)
- .ais-HierarchicalMenu-link::before {
- transform: rotate(0);
-}
-
-/* ClearRefinements */
-
-.ais-ClearRefinements,
-.ais-ClearRefinements-button {
- color: rgba(33, 36, 61, 0.7);
-}
-
-.ais-ClearRefinements-button--disabled {
- color: rgba(33, 36, 61, 0.5);
-}
-
-/* ToggleRefinement */
-
-.ais-ToggleRefinement-label {
- cursor: pointer;
- display: flex;
-}
-
-.ais-ToggleRefinement-checkbox {
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- background: rgba(65, 66, 71, 0.08);
- border: none;
- border-radius: 8px;
- cursor: pointer;
- height: 16px;
- margin-right: 16px;
- min-width: 30px;
- transition: background 150ms ease-out;
-}
-
-.ais-ToggleRefinement-checkbox:checked {
- background: #e2a400;
-}
-
-.ais-ToggleRefinement-checkbox::after {
- background-image: linear-gradient(to top, #f5f5fa, #fff);
- border-radius: 100%;
- box-shadow: 0 4px 11px 0 rgba(37, 44, 97, 0.15),
- 0 2px 3px 0 rgba(93, 100, 148, 0.2);
- content: '';
- height: 16px;
- position: absolute;
- transition: transform 150ms ease-out;
- width: 16px;
-}
-
-.ais-ToggleRefinement-checkbox:checked::after {
- transform: translateX(100%);
-}
-
-/* Selectors */
-
-.ais-SortBy,
-.ais-HitsPerPage {
- position: relative;
-}
-
-.ais-SortBy::after,
-.ais-HitsPerPage::after {
- content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='7' viewBox='0 0 12 7'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M14-5v16H-2V-5z'/%3E%3Cpath fill='%23000' stroke='%23FFF' stroke-width='.5' d='M2.228 1.332a.664.664 0 0 0-.942.001.665.665 0 0 0-.002.941l4.247 4.247c.259.26.679.26.938 0l4.247-4.247a.664.664 0 0 0-.002-.94.666.666 0 0 0-.942-.002L6 5.105 2.228 1.332z'/%3E%3C/g%3E%3C/svg%3E%0A");
- display: inline-block;
-}
-
-.ais-SortBy-select,
-.ais-HitsPerPage-select {
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- background: none;
- border: none;
- color: #21243d;
- font-family: inherit;
-}
-
-/* Sliders */
-
-.ais-RangeSlider .rheostat-horizontal {
- cursor: pointer;
- width: calc(100% - 10px);
-}
-
-.ais-RangeSlider .rheostat-background {
- background-color: rgba(65, 66, 71, 0.08);
- border: none;
- border-radius: 3px;
- height: 3px;
-}
-
-.ais-RangeSlider .rheostat-progress {
- background-color: #e2a400;
- border-radius: 3px;
- height: 3px;
- top: 0;
-}
-
-.ais-RangeSlider .rheostat-tooltip {
- font-weight: bold;
- -moz-user-select: none;
- -webkit-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-.ais-RangeSlider .rheostat-handle {
- background-image: linear-gradient(to top, #f5f5fa, #fff);
- border: none;
- box-shadow: 0 4px 11px 0 rgba(37, 44, 97, 0.15),
- 0 2px 3px 0 rgba(93, 100, 148, 0.2);
- margin-left: -5px;
- top: -9px;
-}
-
-.ais-RangeSlider .rheostat-marker {
- background-color: rgba(65, 66, 71, 0.08);
-}
-
-/* RangeInput */
-
-.ais-RangeInput-input {
- background: none;
- border: none;
- border-bottom: 1px solid #ebecf3;
- color: #21243d;
- font-family: inherit;
- font-size: 0.875rem;
- font-weight: 600;
- min-width: none;
- padding: 0;
- padding-bottom: 3px;
-}
-
-.ais-RangeInput-label:first-of-type {
- margin-right: 6px;
-}
-
-.ais-RangeInput-label:last-of-type {
- margin-left: 6px;
-}
-
-/* Pagination */
-
-.ais-Pagination-list {
- justify-content: center;
-}
-
-.ais-Pagination-item,
-.ais-Pagination-link {
- align-items: center;
- display: flex;
- justify-content: center;
-}
-
-.ais-Pagination-item {
- height: 38px;
- width: 38px;
-}
-
-.ais-Pagination-item {
- background-color: rgba(65, 66, 71, 0.08);
- border-radius: 4px;
- color: #414247;
-}
-
-.ais-Pagination-item--selected {
- background-color: #e2a400;
- background-image: linear-gradient(
- to bottom,
- rgba(255, 255, 255, 0.34),
- rgba(255, 255, 255, 0)
- );
- font-weight: bold;
-}
-
-.ais-Pagination-item--firstPage,
-.ais-Pagination-item--previousPage,
-.ais-Pagination-item--nextPage,
-.ais-Pagination-item--lastPage {
- background: none;
-}
-
-.ais-Pagination-item--disabled {
- opacity: 0.33;
-}
-
-.ais-Pagination-item--selected a {
- color: #fff;
-}
-
-.ais-Pagination-item.ais-Pagination-item--page {
- margin-right: 4px;
-}
-
-.ais-Pagination-item.ais-Pagination-item--previousPage {
- margin-right: 1rem;
-}
-
-.ais-Pagination-item.ais-Pagination-item--nextPage {
- margin-left: calc(1rem - 4px);
-}
-
-.ais-Pagination-link {
- height: 100%;
- width: 100%;
-}
diff --git a/examples/react-hooks/e-commerce/assets/cover-mobile.png b/examples/react-hooks/e-commerce/assets/cover-mobile.png
deleted file mode 100755
index 0692219458..0000000000
Binary files a/examples/react-hooks/e-commerce/assets/cover-mobile.png and /dev/null differ
diff --git a/examples/react-hooks/e-commerce/assets/cover.png b/examples/react-hooks/e-commerce/assets/cover.png
deleted file mode 100755
index 0487aa31c9..0000000000
Binary files a/examples/react-hooks/e-commerce/assets/cover.png and /dev/null differ
diff --git a/examples/react-hooks/e-commerce/assets/favicon.png b/examples/react-hooks/e-commerce/assets/favicon.png
deleted file mode 100644
index b9cee152b2..0000000000
Binary files a/examples/react-hooks/e-commerce/assets/favicon.png and /dev/null differ
diff --git a/examples/react-hooks/e-commerce/assets/manifest.webmanifest b/examples/react-hooks/e-commerce/assets/manifest.webmanifest
deleted file mode 100644
index 44df3f507f..0000000000
--- a/examples/react-hooks/e-commerce/assets/manifest.webmanifest
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "short_name": "E-commerce",
- "name": "React InstantSearch Hooks E-commerce Demo",
- "icons": [
- {
- "src": "favicon.png",
- "sizes": "64x64 32x32 24x24 16x16",
- "type": "image/x-icon"
- }
- ],
- "start_url": "../index.html",
- "display": "standalone",
- "theme_color": "#e2a400",
- "background_color": "#fff"
-}
diff --git a/examples/react-hooks/e-commerce/index.html b/examples/react-hooks/e-commerce/index.html
deleted file mode 100644
index 99f84643df..0000000000
--- a/examples/react-hooks/e-commerce/index.html
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- React InstantSearch Hooks - e-commerce
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/react-hooks/e-commerce/package.json b/examples/react-hooks/e-commerce/package.json
deleted file mode 100644
index 93dde9d812..0000000000
--- a/examples/react-hooks/e-commerce/package.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "example-react-instantsearch-hooks-e-commerce",
- "version": "6.38.26",
- "private": true,
- "scripts": {
- "build": "BABEL_ENV=parcel parcel build index.html",
- "website:examples": "BABEL_ENV=parcel parcel build index.html --public-url . --dist-dir=../../../website/examples/react-hooks/e-commerce",
- "start": "BABEL_ENV=parcel parcel index.html"
- },
- "browserslist": "firefox 68, chrome 78, IE 11",
- "dependencies": {
- "algoliasearch": "4.14.3",
- "instantsearch.js": "4.56.8",
- "react": "18.1.0",
- "react-compound-slider": "3.4.0",
- "react-dom": "18.1.0",
- "react-instantsearch-hooks-web": "6.47.3"
- },
- "devDependencies": {
- "@parcel/core": "2.8.0",
- "@parcel/packager-raw-url": "2.8.0",
- "@parcel/transformer-webmanifest": "2.8.0",
- "parcel": "2.8.0",
- "typescript": "5.1.3"
- }
-}
diff --git a/examples/react-hooks/getting-started/.editorconfig b/examples/react-hooks/getting-started/.editorconfig
deleted file mode 100644
index dd7255e8a4..0000000000
--- a/examples/react-hooks/getting-started/.editorconfig
+++ /dev/null
@@ -1,8 +0,0 @@
-root = true
-
-[*]
-indent_style = space
-indent_size = 2
-end_of_line = lf
-insert_final_newline = true
-trim_trailing_whitespace = true
diff --git a/examples/react-hooks/getting-started/.gitignore b/examples/react-hooks/getting-started/.gitignore
deleted file mode 100644
index bf78c5a78c..0000000000
--- a/examples/react-hooks/getting-started/.gitignore
+++ /dev/null
@@ -1,23 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
-
-node_modules
-dist
-.parcel-cache
-*.local
-
-# Editor directories and files
-.vscode
-.idea
-.DS_Store
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
diff --git a/examples/react-hooks/getting-started/README.md b/examples/react-hooks/getting-started/README.md
deleted file mode 100644
index b8c281d6af..0000000000
--- a/examples/react-hooks/getting-started/README.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# react-instantsearch-hooks-app
-
-[](https://codesandbox.io/s/github/algolia/instantsearch/tree/master/examples/react-hooks/getting-started)
-
-_This project was generated with [create-instantsearch-app](https://github.com/algolia/instantsearch/tree/master/packages/create-instantsearch-app) by [Algolia](https://algolia.com)._
-
-## Get started
-
-To run this project locally, install the dependencies and run the local server:
-
-```sh
-npm install
-npm start
-```
-
-Alternatively, you may use [Yarn](https://http://yarnpkg.com/):
-
-```sh
-yarn
-yarn start
-```
-
-Open http://localhost:3000 to see your app.
diff --git a/examples/react-hooks/getting-started/favicon.png b/examples/react-hooks/getting-started/favicon.png
deleted file mode 100644
index b9cee152b2..0000000000
Binary files a/examples/react-hooks/getting-started/favicon.png and /dev/null differ
diff --git a/examples/react-hooks/getting-started/index.html b/examples/react-hooks/getting-started/index.html
deleted file mode 100644
index eb7fc92b0d..0000000000
--- a/examples/react-hooks/getting-started/index.html
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- React InstantSearch Hooks — Getting started
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/react-hooks/getting-started/package.json b/examples/react-hooks/getting-started/package.json
deleted file mode 100644
index 539c08b6a1..0000000000
--- a/examples/react-hooks/getting-started/package.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "name": "example-react-instantsearch-hooks-getting-started",
- "version": "6.38.26",
- "private": true,
- "scripts": {
- "build": "BABEL_ENV=parcel parcel build index.html",
- "start": "BABEL_ENV=parcel parcel index.html --port 3000"
- },
- "dependencies": {
- "algoliasearch": "4.14.3",
- "instantsearch.js": "4.56.8",
- "react": "18.1.0",
- "react-dom": "18.1.0",
- "react-instantsearch-hooks-web": "6.47.3"
- },
- "devDependencies": {
- "@parcel/core": "2.8.0",
- "@parcel/packager-raw-url": "2.8.0",
- "@parcel/transformer-webmanifest": "2.8.0",
- "parcel": "2.8.0",
- "typescript": "5.1.3"
- }
-}
diff --git a/examples/react-hooks/getting-started/src/App.css b/examples/react-hooks/getting-started/src/App.css
deleted file mode 100644
index e01152732c..0000000000
--- a/examples/react-hooks/getting-started/src/App.css
+++ /dev/null
@@ -1,71 +0,0 @@
-body,
-h1 {
- margin: 0;
- padding: 0;
-}
-
-body {
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,
- Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
-}
-
-em {
- background: cyan;
- font-style: normal;
-}
-
-.header {
- display: flex;
- align-items: center;
- min-height: 50px;
- padding: 0.5rem 1rem;
- background-image: linear-gradient(to right, #8e43e7, #00aeff);
- color: #fff;
- margin-bottom: 1rem;
-}
-
-.header a {
- color: #fff;
- text-decoration: none;
-}
-
-.header-title {
- font-size: 1.2rem;
- font-weight: normal;
-}
-
-.header-title::after {
- content: ' ▸ ';
- padding: 0 0.5rem;
-}
-
-.header-subtitle {
- font-size: 1.2rem;
-}
-
-.container {
- max-width: 1200px;
- margin: 0 auto;
- padding: 1rem;
-}
-
-.search-panel {
- display: flex;
-}
-
-.search-panel__filters {
- flex: 1;
-}
-
-.search-panel__results {
- flex: 3;
-}
-
-.searchbox {
- margin-bottom: 2rem;
-}
-
-.pagination {
- margin: 2rem auto;
- text-align: center;
-}
diff --git a/examples/react-hooks/next-routing/README.md b/examples/react-hooks/next-routing/README.md
deleted file mode 100644
index ceb90aca59..0000000000
--- a/examples/react-hooks/next-routing/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-This example shows how to do server side rendering with next.js and React InstantSearch Hooks. There's a live example here: https://codesandbox.io/s/github/algolia/instantsearch.js/tree/master/examples/react-hooks/next.
-
-[](https://codesandbox.io/s/github/algolia/instantsearch/tree/master/examples/react-hooks/next-routing)
-
-## Clone the example
-
-```sh
-curl https://codeload.github.com/algolia/instantsearch/tar.gz/master | tar -xz --strip=3 instantsearch-master/examples/react-hooks/next-routing
-```
-
-## Start the example
-
-```sh
-yarn install --no-lockfile
-yarn run dev
-```
-
-Read more about React InstantSearch Hooks [in our documentation](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/react-hooks/).
diff --git a/examples/react-hooks/next-routing/package.json b/examples/react-hooks/next-routing/package.json
deleted file mode 100644
index 3e5fbbea3a..0000000000
--- a/examples/react-hooks/next-routing/package.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "name": "example-react-instantsearch-hooks-next-routing-example",
- "version": "6.57.0",
- "private": true,
- "scripts": {
- "dev": "next dev",
- "build": "next build",
- "start": "next start",
- "lint": "next lint"
- },
- "dependencies": {
- "algoliasearch": "4.14.3",
- "instantsearch.css": "8.0.0",
- "next": "12.1.6",
- "react": "18.1.0",
- "react-dom": "18.1.0",
- "react-instantsearch-hooks-router-nextjs": "6.47.3",
- "react-instantsearch-hooks-server": "6.47.3",
- "react-instantsearch-hooks-web": "6.47.3"
- },
- "devDependencies": {
- "@types/node": "17.0.40",
- "@types/react": "18.0.12",
- "eslint": "8.4.0",
- "eslint-config-next": "12.0.7",
- "typescript": "5.1.3"
- }
-}
diff --git a/examples/react-hooks/next/.gitignore b/examples/react-hooks/next/.gitignore
deleted file mode 100644
index 1437c53f70..0000000000
--- a/examples/react-hooks/next/.gitignore
+++ /dev/null
@@ -1,34 +0,0 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-/.pnp
-.pnp.js
-
-# testing
-/coverage
-
-# next.js
-/.next/
-/out/
-
-# production
-/build
-
-# misc
-.DS_Store
-*.pem
-
-# debug
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# local env files
-.env.local
-.env.development.local
-.env.test.local
-.env.production.local
-
-# vercel
-.vercel
diff --git a/examples/react-hooks/next/README.md b/examples/react-hooks/next/README.md
deleted file mode 100644
index 6cfc3f11f4..0000000000
--- a/examples/react-hooks/next/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-This example shows how to do server side rendering with next.js and React InstantSearch Hooks. There's a live example here: https://codesandbox.io/s/github/algolia/instantsearch.js/tree/master/examples/react-hooks/next.
-
-[](https://codesandbox.io/s/github/algolia/instantsearch/tree/master/examples/react-hooks/next)
-
-## Clone the example
-
-```sh
-curl https://codeload.github.com/algolia/instantsearch/tar.gz/master | tar -xz --strip=3 instantsearch-master/examples/react-hooks/next
-```
-
-## Start the example
-
-```sh
-yarn install --no-lockfile
-yarn run dev
-```
-
-Read more about React InstantSearch Hooks [in our documentation](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/react-hooks/).
diff --git a/examples/react-hooks/react-native/.expo-shared/assets.json b/examples/react-hooks/react-native/.expo-shared/assets.json
deleted file mode 100644
index 1e6decfbb5..0000000000
--- a/examples/react-hooks/react-native/.expo-shared/assets.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "12bb71342c6255bbf50437ec8f4441c083f47cdb74bd89160c15e4f43e52a1cb": true,
- "40b842e832070c58deac6aa9e08fa459302ee3f9da492c7e77d93d2fbf4a56fd": true
-}
diff --git a/examples/react-hooks/react-native/.gitignore b/examples/react-hooks/react-native/.gitignore
deleted file mode 100644
index ec8a36a257..0000000000
--- a/examples/react-hooks/react-native/.gitignore
+++ /dev/null
@@ -1,14 +0,0 @@
-node_modules/
-.expo/
-dist/
-npm-debug.*
-*.jks
-*.p8
-*.p12
-*.key
-*.mobileprovision
-*.orig.*
-web-build/
-
-# macOS
-.DS_Store
diff --git a/examples/react-hooks/react-native/README.md b/examples/react-hooks/react-native/README.md
deleted file mode 100644
index b1e4d46e5e..0000000000
--- a/examples/react-hooks/react-native/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# React InstantSearch Hooks with React Native
-
-[](https://codesandbox.io/s/github/algolia/instantsearch/tree/master/examples/react-hooks/react-native)
-
-This example shows how to use React InstantSearch Hooks with React Native.
-
-## Clone the example
-
-```sh
-curl https://codeload.github.com/algolia/instantsearch/tar.gz/master | tar -xz --strip=3 instantsearch-master/examples/react-hooks/react-native
-```
-
-## Start the example
-
-```sh
-yarn install --no-lockfile
-yarn run start
-```
-
-Read more about React InstantSearch Hooks [in our documentation](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/react-hooks/).
diff --git a/examples/react-hooks/react-native/app.json b/examples/react-hooks/react-native/app.json
deleted file mode 100644
index 476db9aec0..0000000000
--- a/examples/react-hooks/react-native/app.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "expo": {
- "name": "ais-ecommerce-demo-app",
- "slug": "ais-ecommerce-demo-app",
- "version": "1.0.0",
- "orientation": "portrait",
- "icon": "./assets/icon.png",
- "splash": {
- "image": "./assets/splash.png",
- "resizeMode": "contain",
- "backgroundColor": "#ffffff"
- },
- "updates": {
- "fallbackToCacheTimeout": 0
- },
- "assetBundlePatterns": ["**/*"],
- "ios": {
- "supportsTablet": true
- },
- "android": {
- "adaptiveIcon": {
- "foregroundImage": "./assets/adaptive-icon.png",
- "backgroundColor": "#FFFFFF"
- }
- },
- "web": {
- "favicon": "./assets/favicon.png"
- }
- }
-}
diff --git a/examples/react-hooks/react-native/assets/icon.png b/examples/react-hooks/react-native/assets/icon.png
deleted file mode 100644
index a0b1526fc7..0000000000
Binary files a/examples/react-hooks/react-native/assets/icon.png and /dev/null differ
diff --git a/examples/react-hooks/react-native/assets/splash.png b/examples/react-hooks/react-native/assets/splash.png
deleted file mode 100644
index 0e89705a94..0000000000
Binary files a/examples/react-hooks/react-native/assets/splash.png and /dev/null differ
diff --git a/examples/react-hooks/react-native/babel.config.js b/examples/react-hooks/react-native/babel.config.js
deleted file mode 100644
index 9d89e13119..0000000000
--- a/examples/react-hooks/react-native/babel.config.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = function (api) {
- api.cache(true);
- return {
- presets: ['babel-preset-expo'],
- };
-};
diff --git a/examples/react-hooks/react-native/package.json b/examples/react-hooks/react-native/package.json
deleted file mode 100644
index 6e312a4a7d..0000000000
--- a/examples/react-hooks/react-native/package.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "name": "example-react-instantsearch-hooks-react-native-example",
- "version": "6.38.26",
- "private": true,
- "main": "node_modules/expo/AppEntry.js",
- "scripts": {
- "start": "expo start",
- "android": "expo start --android",
- "ios": "expo start --ios",
- "web": "expo start --web",
- "eject": "expo eject"
- },
- "dependencies": {
- "algoliasearch": "4.14.3",
- "expo": "~44.0.0",
- "expo-status-bar": "~1.2.0",
- "instantsearch.js": "4.56.8",
- "react": "17.0.1",
- "react-instantsearch-hooks": "6.47.3",
- "react-native": "0.64.3",
- "react-native-web": "0.17.1"
- },
- "devDependencies": {
- "@babel/core": "7.15.5",
- "@types/react": "~17.0.21",
- "@types/react-native": "~0.64.12",
- "expo-cli": "5.1.1",
- "typescript": "5.1.3"
- }
-}
diff --git a/examples/react/autocomplete/README.md b/examples/react/autocomplete/README.md
deleted file mode 100644
index 5be6d0b715..0000000000
--- a/examples/react/autocomplete/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-This example shows how to use an external autocomplete component with `react-instantsearch`
-
-[](https://codesandbox.io/s/github/algolia/instantsearch/tree/master/examples/react/autocomplete)
-
-It uses [react-autosuggest](https://github.com/moroshko/react-autosuggest) as the autocomplete external component.
-
-You will find two use cases:
-
-* How to build an autocomplete displaying hits from different indices
-* How to build @-mentions using [ant](https://ant.design) as the external component
-
-## Clone the example
-
-```sh
-curl https://codeload.github.com/algolia/instantsearch/tar.gz/master | tar -xz --strip=3 instantsearch-master/examples/react/autocomplete
-```
-
-## Start the example
-
-```sh
-yarn install --no-lockfile
-yarn start
-```
-
-
-Read more about `react-instantsearch` [in our documentation](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/react/).
diff --git a/examples/react/autocomplete/__mocks__/styleMock.js b/examples/react/autocomplete/__mocks__/styleMock.js
deleted file mode 100644
index 33c8d29dc0..0000000000
--- a/examples/react/autocomplete/__mocks__/styleMock.js
+++ /dev/null
@@ -1,2 +0,0 @@
-// eslint-disable-next-line import/no-commonjs
-module.exports = {};
diff --git a/examples/react/autocomplete/index.html b/examples/react/autocomplete/index.html
deleted file mode 100644
index 9840f70f1c..0000000000
--- a/examples/react/autocomplete/index.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
- autocomplete with react-instantsearch
-
-
-
-
- Autocomplete targeting multiple indices
-
- Autocomplete of mentions
-
-
-
-
-
diff --git a/examples/react/autocomplete/package.json b/examples/react/autocomplete/package.json
deleted file mode 100644
index df7cdab63d..0000000000
--- a/examples/react/autocomplete/package.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "name": "example-react-instantsearch-autocomplete",
- "version": "17.0.0",
- "private": true,
- "license": "MIT",
- "scripts": {
- "start": "BABEL_ENV=parcel parcel index.html --port 3000",
- "build": "BABEL_ENV=parcel parcel build index.html --public-url .",
- "test": "jest --ci"
- },
- "devDependencies": {
- "@babel/core": "7.15.5",
- "@parcel/core": "2.8.0",
- "@parcel/packager-raw-url": "2.8.0",
- "@parcel/transformer-webmanifest": "2.8.0",
- "parcel": "2.8.0",
- "react-test-renderer": "17.0.2"
- },
- "jest": {
- "transform": {
- "^.+\\.(jsx?|tsx?)$": [
- "babel-jest",
- {
- "rootMode": "upward"
- }
- ]
- },
- "moduleNameMapper": {
- "\\.css$": "/__mocks__/styleMock.js"
- }
- },
- "dependencies": {
- "algoliasearch": "4.14.3",
- "antd": "3.23.2",
- "prop-types": "15.6.2",
- "react": "17.0.2",
- "react-autosuggest": "9.4.3",
- "react-dom": "17.0.2",
- "react-instantsearch-dom": "6.40.4"
- },
- "browserslist": [
- ">0.2%",
- "not dead",
- "not ie <= 11",
- "not op_mini all"
- ]
-}
diff --git a/examples/react/autocomplete/src/App-Mentions.js b/examples/react/autocomplete/src/App-Mentions.js
deleted file mode 100644
index 07a57c17d7..0000000000
--- a/examples/react/autocomplete/src/App-Mentions.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import algoliasearch from 'algoliasearch/lite';
-import Mention from 'antd/lib/mention';
-import PropTypes from 'prop-types';
-import React from 'react';
-import { InstantSearch, connectAutoComplete } from 'react-instantsearch-dom';
-import 'antd/lib/mention/style/css';
-
-const AsyncMention = ({ hits, refine }) => (
- hit.name)}
- onSearchChange={(query) => refine(query)}
- />
-);
-
-AsyncMention.propTypes = {
- hits: PropTypes.array,
- refine: PropTypes.func,
-};
-
-const ConnectedAsyncMention = connectAutoComplete(AsyncMention);
-
-const searchClient = algoliasearch(
- 'latency',
- '6be0576ff61c053d5f9a3225e2a90f76'
-);
-
-const App = () => (
-
-
-
-);
-
-export default App;
diff --git a/examples/react/autocomplete/src/App-Multi-Index.js b/examples/react/autocomplete/src/App-Multi-Index.js
deleted file mode 100644
index 0cd95dd6a9..0000000000
--- a/examples/react/autocomplete/src/App-Multi-Index.js
+++ /dev/null
@@ -1,96 +0,0 @@
-import algoliasearch from 'algoliasearch/lite';
-import PropTypes from 'prop-types';
-import React, { Component } from 'react';
-import Autosuggest from 'react-autosuggest';
-import {
- InstantSearch,
- Configure,
- Index,
- Highlight,
- connectAutoComplete,
-} from 'react-instantsearch-dom';
-
-const searchClient = algoliasearch(
- 'latency',
- '6be0576ff61c053d5f9a3225e2a90f76'
-);
-
-const App = () => (
-
-
-
-
-
-
-);
-
-class Example extends Component {
- static propTypes = {
- hits: PropTypes.arrayOf(PropTypes.object).isRequired,
- currentRefinement: PropTypes.string.isRequired,
- refine: PropTypes.func.isRequired,
- };
-
- state = {
- value: this.props.currentRefinement,
- };
-
- onChange = (event, { newValue }) => {
- this.setState({
- value: newValue,
- });
- };
-
- onSuggestionsFetchRequested = ({ value }) => {
- this.props.refine(value);
- };
-
- onSuggestionsClearRequested = () => {
- this.props.refine();
- };
-
- getSuggestionValue(hit) {
- return hit.name;
- }
-
- renderSuggestion(hit) {
- return ;
- }
-
- renderSectionTitle(section) {
- return section.index;
- }
-
- getSectionSuggestions(section) {
- return section.hits;
- }
-
- render() {
- const { hits } = this.props;
- const { value } = this.state;
-
- const inputProps = {
- placeholder: 'Search for a product...',
- onChange: this.onChange,
- value,
- };
-
- return (
-
- );
- }
-}
-
-const AutoComplete = connectAutoComplete(Example);
-
-export default App;
diff --git a/examples/react/autocomplete/src/__tests__/App.test.js b/examples/react/autocomplete/src/__tests__/App.test.js
deleted file mode 100644
index c6470d4b94..0000000000
--- a/examples/react/autocomplete/src/__tests__/App.test.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * @jest-environment jsdom
- */
-
-import React from 'react';
-import renderer from 'react-test-renderer';
-
-import Mentions from '../App-Mentions';
-import MultiIndex from '../App-Multi-Index';
-
-jest.mock('antd/lib/mention', () => {
- return ({ placeholder, suggestions }) =>
- `
- ${placeholder}
- ${suggestions.join('\n')}
-`;
-});
-
-describe('autocomplete recipe', () => {
- it('MultiIndex renders without crashing', () => {
- const component = renderer.create();
-
- expect(component.toJSON()).toMatchSnapshot();
- });
- it('Mentions renders without crashing', () => {
- const component = renderer.create();
-
- expect(component.toJSON()).toMatchSnapshot();
- });
-});
diff --git a/examples/react/autocomplete/src/__tests__/__snapshots__/App.test.js.snap b/examples/react/autocomplete/src/__tests__/__snapshots__/App.test.js.snap
deleted file mode 100644
index b8a405221d..0000000000
--- a/examples/react/autocomplete/src/__tests__/__snapshots__/App.test.js.snap
+++ /dev/null
@@ -1,38 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`autocomplete recipe Mentions renders without crashing 1`] = `
-"
- give someone an @-mention here
-
-"
-`;
-
-exports[`autocomplete recipe MultiIndex renders without crashing 1`] = `
-
-`;
diff --git a/examples/react/autocomplete/src/index.js b/examples/react/autocomplete/src/index.js
deleted file mode 100644
index 7ee36842af..0000000000
--- a/examples/react/autocomplete/src/index.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom';
-
-import Mentions from './App-Mentions';
-import App from './App-Multi-Index';
-
-ReactDOM.render(
- ,
- document.getElementById('autocomplete-with-multi-indices')
-);
-
-ReactDOM.render(, document.getElementById('autocomplete-mentions'));
diff --git a/examples/react/autocomplete/src/style.css b/examples/react/autocomplete/src/style.css
deleted file mode 100644
index c1b2bebe8d..0000000000
--- a/examples/react/autocomplete/src/style.css
+++ /dev/null
@@ -1,115 +0,0 @@
-body {
- font-family: Helvetica, sans-serif;
- margin: 0;
- padding: 1em;
- box-sizing: border-box;
-}
-
-.highlighted {
- background: yellow;
-}
-
-.autocomplete {
- display: flex;
- justify-content: space-between;
- border: 1px solid red;
-}
-
-.content {
- display: flex;
- justify-content: space-between;
-}
-
-.block {
- padding: 5px 10px;
-}
-
-.title {
- border: 1px solid red;
- display: flex;
- justify-content: space-around;
- padding: 5px 10px;
-}
-
-.disabled {
- display: none;
-}
-
-.ais-MultiIndex__root {
- width: 100%;
-}
-
-.title div {
- width: 100%;
- padding: 5px 10px;
-}
-
-.react-autosuggest__container {
- position: relative;
-}
-
-.react-autosuggest__input {
- width: 600px;
- height: 30px;
- padding: 10px 20px;
- font-family: Helvetica, sans-serif;
- font-weight: 300;
- font-size: 16px;
- border: 1px solid #aaa;
- border-radius: 4px;
-}
-
-.react-autosuggest__input:focus {
- outline: none;
-}
-
-.react-autosuggest__container--open .react-autosuggest__input {
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-.react-autosuggest__suggestions-container {
- display: none;
-}
-
-.react-autosuggest__container--open .react-autosuggest__suggestions-container {
- display: block;
- position: absolute;
- top: 51px;
- width: 640px;
- border: 1px solid #aaa;
- background-color: #fff;
- font-family: Helvetica, sans-serif;
- font-weight: 300;
- font-size: 16px;
- border-bottom-left-radius: 4px;
- border-bottom-right-radius: 4px;
- z-index: 2;
-}
-
-.react-autosuggest__suggestions-list {
- margin: 0;
- padding: 0;
- list-style-type: none;
-}
-
-.react-autosuggest__suggestion {
- cursor: pointer;
- padding: 10px 20px;
-}
-
-.react-autosuggest__suggestion--focused {
- background-color: #ddd;
-}
-
-.react-autosuggest__section-title {
- padding: 10px 0 0 10px;
- font-size: 12px;
- color: #777;
- border-top: 1px dashed #ccc;
-}
-
-.react-autosuggest__section-container:first-child
- .react-autosuggest__section-title {
- border-top: 0;
-}
diff --git a/examples/react/default-theme/App.css b/examples/react/default-theme/App.css
deleted file mode 100644
index 07cd77aa72..0000000000
--- a/examples/react/default-theme/App.css
+++ /dev/null
@@ -1,84 +0,0 @@
-* {
- box-sizing: border-box;
-}
-
-html,
-body {
- margin: 0;
- padding: 0;
-}
-
-body {
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,
- Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
-}
-
-header.header {
- display: flex;
- align-items: center;
- z-index: 99;
- padding-top: 56px;
- width: 100%;
- padding: 10px;
- background: #222f3f;
-}
-
-header.header .is-logo {
- float: left;
- margin-right: 12px;
-}
-
-header.header .logo {
- display: block;
-}
-
-aside,
-.results-wrapper {
- padding: 10px;
-}
-
-.thank-you {
- font-size: 12px;
- text-align: center;
- margin-top: 20px;
-}
-
-.ais-Panel {
- margin-top: 20px;
-}
-
-.content-wrapper {
- display: flex;
-}
-
-.results-topbar {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 10px;
-}
-
-.sort-by {
- display: flex;
- align-items: center;
-}
-
-.sort-by label {
- margin-right: 5px;
-}
-
-footer {
- margin-top: 25px;
-}
-
-.results-wrapper {
- width: 100%;
-}
-
-.no-results {
- text-align: center;
-}
-
-.no-results .query {
- font-style: italic;
-}
diff --git a/examples/react/default-theme/App.js b/examples/react/default-theme/App.js
deleted file mode 100644
index 48ad38bbc5..0000000000
--- a/examples/react/default-theme/App.js
+++ /dev/null
@@ -1,171 +0,0 @@
-import algoliasearch from 'algoliasearch/lite';
-import React from 'react';
-import {
- InstantSearch,
- Hits,
- HierarchicalMenu,
- RefinementList,
- SearchBox,
- SortBy,
- Stats,
- Pagination,
- Panel,
- ClearRefinements,
- RatingMenu,
- RangeInput,
- Highlight,
- Configure,
- connectStateResults,
-} from 'react-instantsearch-dom';
-
-import withURLSync from './URLSync';
-import './App.css';
-
-const searchClient = algoliasearch(
- 'latency',
- '6be0576ff61c053d5f9a3225e2a90f76'
-);
-
-const App = (props) => (
-
-
-
-
-
-
-
-
-);
-
-const Header = () => (
-
-);
-
-const Facets = () => (
-
-);
-
-const Hit = ({ hit }) => {
- const icons = [];
- for (let i = 0; i < 5; i++) {
- const suffixClassName = i >= hit.rating ? '--empty' : '';
- const suffixXlink = i >= hit.rating ? 'Empty' : '';
-
- icons.push(
-
- );
- }
-
- return (
-
-
-
-
-
-
-
-
-
-
{icons}
-
${hit.price}
-
-
-
- );
-};
-
-const CustomResults = connectStateResults(({ searchState, searchResults }) => (
-
-
-
- {searchResults && searchResults.nbHits ? (
-
- ) : (
-
- No results found matching "
- {searchState.query}
- "
-
- )}
-
-));
-
-export default withURLSync(App);
diff --git a/examples/react/default-theme/URLSync.js b/examples/react/default-theme/URLSync.js
deleted file mode 100644
index 1eaa103822..0000000000
--- a/examples/react/default-theme/URLSync.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import qs from 'qs';
-import React, { Component } from 'react';
-
-const updateAfter = 700;
-const searchStateToURL = (searchState) =>
- searchState ? `${window.location.pathname}?${qs.stringify(searchState)}` : '';
-
-const withURLSync = (App) =>
- class WithURLSync extends Component {
- state = {
- searchState: qs.parse(window.location.search.slice(1)),
- };
-
- componentDidMount() {
- window.addEventListener('popstate', this.onPopState);
- }
-
- componentWillUnmount() {
- clearTimeout(this.debouncedSetState);
- window.removeEventListener('popstate', this.onPopState);
- }
-
- onPopState = ({ state }) =>
- this.setState({
- searchState: state || {},
- });
-
- onSearchStateChange = (searchState) => {
- clearTimeout(this.debouncedSetState);
-
- this.debouncedSetState = setTimeout(() => {
- window.history.pushState(
- searchState,
- null,
- searchStateToURL(searchState)
- );
- }, updateAfter);
-
- this.setState({ searchState });
- };
-
- render() {
- const { searchState } = this.state;
-
- return (
-
- );
- }
- };
-
-export default withURLSync;
diff --git a/examples/react/default-theme/index.html b/examples/react/default-theme/index.html
index 4151360b6e..ae3320db18 100644
--- a/examples/react/default-theme/index.html
+++ b/examples/react/default-theme/index.html
@@ -13,15 +13,18 @@
-->
- React InstantSearch - Algolia theme
+ React InstantSearch
+
+
+