From 98fa62e032144cd87e7e3f9740d6c396ecdb985f Mon Sep 17 00:00:00 2001 From: Yuriy Yakym Date: Sat, 20 Jul 2024 17:54:00 +0200 Subject: [PATCH 1/6] Add MeiliSearch-related env variables to .env.example --- .env.example | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.env.example b/.env.example index 19f0100d..e48f7ae7 100644 --- a/.env.example +++ b/.env.example @@ -10,10 +10,13 @@ PREZLY_THEME_UUID=9648bb4f-19df-44a3-a1b4-18bce22c76fd # This key is unique for every newsroom ALGOLIA_API_KEY= +MEILISEARCH_API_KEY= # These variables have default values in the code, but you can override them if you need to # ALGOLIA_APP_ID= # ALGOLIA_INDEX= +# MEILISEARCH_HOST= +# MEILISEARCH_INDEX= # API_BASE_URL_OVERRIDE= From 8af08743812087d1acbf6839ebb9906f4c32106f Mon Sep 17 00:00:00 2001 From: Yuriy Yakym Date: Sat, 20 Jul 2024 17:54:57 +0200 Subject: [PATCH 2/6] Integrate MeiliSearch in Header --- modules/Layout/Header/Header.tsx | 11 ++++---- .../Header/SearchWidget/SearchWidget.tsx | 25 ++++++++----------- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/modules/Layout/Header/Header.tsx b/modules/Layout/Header/Header.tsx index 0086c107..f5e1f489 100644 --- a/modules/Layout/Header/Header.tsx +++ b/modules/Layout/Header/Header.tsx @@ -1,10 +1,10 @@ import { translations } from '@prezly/theme-kit-intl'; import { - useAlgoliaSettings, useCategories, useCompanyInformation, useGetLinkLocaleSlug, useNewsroom, + useSearchSettings, } from '@prezly/theme-kit-nextjs'; import classNames from 'classnames'; import dynamic from 'next/dynamic'; @@ -36,15 +36,13 @@ function Header({ hasError }: Props) { const { name } = useCompanyInformation(); const getLinkLocaleSlug = useGetLinkLocaleSlug(); const { formatMessage } = useIntl(); - const { ALGOLIA_API_KEY } = useAlgoliaSettings(); + const searchSettings = useSearchSettings(); const { isMobile } = useDevice(); const [isMenuOpen, setIsMenuOpen] = useState(false); const [isSearchWidgetShown, setIsSearchWidgetShown] = useState(false); const headerRef = useRef(null); - const IS_SEARCH_ENABLED = Boolean(ALGOLIA_API_KEY); - function alignMobileHeader() { if (!isMobile) { return; @@ -132,7 +130,7 @@ function Header({ hasError }: Props) { aria-label={formatMessage(translations.misc.toggleMobileNavigation)} /> - {IS_SEARCH_ENABLED && ( + {searchSettings && ( - {IS_SEARCH_ENABLED && ( + {searchSettings && ( )} diff --git a/modules/Layout/Header/SearchWidget/SearchWidget.tsx b/modules/Layout/Header/SearchWidget/SearchWidget.tsx index 7a56d08d..fb4609f5 100644 --- a/modules/Layout/Header/SearchWidget/SearchWidget.tsx +++ b/modules/Layout/Header/SearchWidget/SearchWidget.tsx @@ -1,7 +1,6 @@ -import { useAlgoliaSettings, useCurrentLocale } from '@prezly/theme-kit-nextjs'; -import algoliasearch from 'algoliasearch/lite'; +import type { SearchSettings } from '@prezly/theme-kit-core/server'; +import { useCurrentLocale, useSearchClient } from '@prezly/theme-kit-nextjs'; import classNames from 'classnames'; -import { useMemo } from 'react'; import { Configure, InstantSearch } from 'react-instantsearch-dom'; import { Modal } from '@/ui'; @@ -14,17 +13,18 @@ interface Props { isOpen: boolean; className?: string; dialogClassName?: string; + settings: SearchSettings; onClose: () => void; } -function SearchWidget({ isOpen, className, dialogClassName, onClose }: Props) { +function SearchWidget({ isOpen, className, dialogClassName, settings, onClose }: Props) { const currentLocale = useCurrentLocale(); - const { ALGOLIA_APP_ID, ALGOLIA_API_KEY, ALGOLIA_INDEX } = useAlgoliaSettings(); + const searchClient = useSearchClient(settings); - const searchClient = useMemo( - () => algoliasearch(ALGOLIA_APP_ID, ALGOLIA_API_KEY), - [ALGOLIA_API_KEY, ALGOLIA_APP_ID], - ); + const filters = + settings.searchBackend === 'algolia' + ? `attributes.culture.code:${currentLocale.toUnderscoreCode()}` + : `attributes.culture.code=${currentLocale.toUnderscoreCode()}`; return ( - - + + From 82252f5eb06bdcbc8fa2235d2e3012a09d041cb7 Mon Sep 17 00:00:00 2001 From: Yuriy Yakym Date: Sat, 20 Jul 2024 17:55:11 +0200 Subject: [PATCH 3/6] Integrate MeiliSearch on Search page --- modules/Search/SearchPage.tsx | 30 +++++++++++++++--------------- pages/search.tsx | 16 ++++++++++++++-- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/modules/Search/SearchPage.tsx b/modules/Search/SearchPage.tsx index 79fbe9ec..ceb94598 100644 --- a/modules/Search/SearchPage.tsx +++ b/modules/Search/SearchPage.tsx @@ -1,7 +1,7 @@ -import { useAlgoliaSettings, useCurrentLocale } from '@prezly/theme-kit-nextjs'; -import algoliasearch from 'algoliasearch'; +import type { SearchSettings } from '@prezly/theme-kit-core/server'; +import { useCurrentLocale, useSearchClient } from '@prezly/theme-kit-nextjs'; import { useRouter } from 'next/router'; -import { useMemo, useRef, useState } from 'react'; +import { useRef, useState } from 'react'; import { Configure, InstantSearch } from 'react-instantsearch-dom'; import Layout from '../Layout'; @@ -14,21 +14,24 @@ import { createUrl, queryToSearchState, searchStateToQuery } from './utils'; import styles from './SearchPage.module.scss'; +interface Props { + settings: SearchSettings; +} + const DEBOUNCE_TIME_MS = 300; -function SearchPage() { +function SearchPage({ settings }: Props) { const currentLocale = useCurrentLocale(); + const searchClient = useSearchClient(settings); const { query, push } = useRouter(); const [searchState, setSearchState] = useState(queryToSearchState(query)); const debouncedSetStateRef = useRef(); - const { ALGOLIA_APP_ID, ALGOLIA_API_KEY, ALGOLIA_INDEX } = useAlgoliaSettings(); - - const searchClient = useMemo( - () => algoliasearch(ALGOLIA_APP_ID, ALGOLIA_API_KEY), - [ALGOLIA_API_KEY, ALGOLIA_APP_ID], - ); + const filters = + settings.searchBackend === 'algolia' + ? `attributes.culture.code:${currentLocale.toUnderscoreCode()}` + : `attributes.culture.code=${currentLocale.toUnderscoreCode()}`; function onSearchStateChange(updatedSearchState: SearchState) { if (typeof window === 'undefined') { @@ -50,15 +53,12 @@ function SearchPage() { - + <div className={styles.container}> diff --git a/pages/search.tsx b/pages/search.tsx index be0f3cc6..3675d9ef 100644 --- a/pages/search.tsx +++ b/pages/search.tsx @@ -1,5 +1,7 @@ +import type { SearchSettings } from '@prezly/theme-kit-core/server'; import { getSearchPageServerSideProps } from '@prezly/theme-kit-nextjs/server'; import dynamic from 'next/dynamic'; +import { notFound } from 'next/navigation'; import type { FunctionComponent } from 'react'; import { importMessages } from '@/utils/lang'; @@ -7,14 +9,24 @@ import type { BasePageProps } from 'types'; import { isTrackingEnabled } from '../utils'; +type ExtraProps = { searchSettings?: SearchSettings }; +type Props = BasePageProps & ExtraProps; + const SearchPage = dynamic(() => import('@/modules/Search'), { ssr: true }); -const SearchResultsPage: FunctionComponent<BasePageProps> = () => <SearchPage />; +const SearchResultsPage: FunctionComponent<Props> = ({ searchSettings }) => { + if (!searchSettings) { + notFound(); + } + + return <SearchPage settings={searchSettings} />; +}; -export const getServerSideProps = getSearchPageServerSideProps( +export const getServerSideProps = getSearchPageServerSideProps<ExtraProps>( async (context, { newsroomContextProps }) => ({ isTrackingEnabled: isTrackingEnabled(context), translations: await importMessages(newsroomContextProps.localeCode), + searchSettings: newsroomContextProps.searchSettings, }), ); From ef5dcaadb67f60b3dfff6f01d7472d32d0575a00 Mon Sep 17 00:00:00 2001 From: Yuriy Yakym <yakym.yuriy@gmail.com> Date: Tue, 23 Jul 2024 09:46:41 +0200 Subject: [PATCH 4/6] Update theme-kit-core & theme-kit-nextjs libraries --- package-lock.json | 611 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 4 +- 2 files changed, 591 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7f8d2589..b2ac13c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,9 +16,9 @@ "@prezly/content-renderer-react-js": "0.38.4", "@prezly/sdk": "21.6.0", "@prezly/story-content-format": "0.65.1", - "@prezly/theme-kit-core": "7.5.1", + "@prezly/theme-kit-core": "7.6.0", "@prezly/theme-kit-intl": "7.5.1", - "@prezly/theme-kit-nextjs": "7.5.1", + "@prezly/theme-kit-nextjs": "7.6.0", "@prezly/uploadcare": "2.4.4", "@prezly/uploadcare-image": "0.3.2", "@react-hookz/web": "14.7.1", @@ -159,6 +159,120 @@ "@algolia/logger-common": "4.22.1" } }, + "node_modules/@algolia/recommend": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz", + "integrity": "sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==", + "license": "MIT", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.24.0", + "@algolia/cache-common": "4.24.0", + "@algolia/cache-in-memory": "4.24.0", + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/logger-console": "4.24.0", + "@algolia/requester-browser-xhr": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/requester-node-http": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/cache-browser-local-storage": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz", + "integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==", + "license": "MIT", + "dependencies": { + "@algolia/cache-common": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/cache-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz", + "integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==", + "license": "MIT" + }, + "node_modules/@algolia/recommend/node_modules/@algolia/cache-in-memory": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz", + "integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==", + "license": "MIT", + "dependencies": { + "@algolia/cache-common": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/logger-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz", + "integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==", + "license": "MIT" + }, + "node_modules/@algolia/recommend/node_modules/@algolia/logger-console": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz", + "integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==", + "license": "MIT", + "dependencies": { + "@algolia/logger-common": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/requester-browser-xhr": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", + "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/requester-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz", + "integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==", + "license": "MIT" + }, + "node_modules/@algolia/recommend/node_modules/@algolia/requester-node-http": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", + "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/transporter": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz", + "integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==", + "license": "MIT", + "dependencies": { + "@algolia/cache-common": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/requester-common": "4.24.0" + } + }, "node_modules/@algolia/requester-browser-xhr": { "version": "4.22.1", "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz", @@ -2363,6 +2477,15 @@ "node": ">=8" } }, + "node_modules/@meilisearch/instant-meilisearch": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@meilisearch/instant-meilisearch/-/instant-meilisearch-0.19.1.tgz", + "integrity": "sha512-a61jHJTRk14KQYw2yj90H7HwfYPdVg7QoNZOhtQ6f5FO/ojL2pETkQuFHTDdLTuNBwLfKTSaTFpPLBlQnqzVKA==", + "license": "MIT", + "dependencies": { + "meilisearch": "^0.41.0" + } + }, "node_modules/@next/bundle-analyzer": { "version": "13.5.6", "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-13.5.6.tgz", @@ -2778,9 +2901,10 @@ } }, "node_modules/@prezly/theme-kit-core": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@prezly/theme-kit-core/-/theme-kit-core-7.5.1.tgz", - "integrity": "sha512-T1V4yQU85nS5Jvvb0pWug98zAgewGV0NdnuUJsZOcIpv1tUZcwaNEvXvMlO6xhx//5BXoCaLIwQqCTpi+dJ63A==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@prezly/theme-kit-core/-/theme-kit-core-7.6.0.tgz", + "integrity": "sha512-K6eUqyUmYnFyjCNuSL+ZawTq5sOEjT0IiaXDOhrzdvLGoOFXX1rQCRE/4QJvz1dUEsBOjdFOIJkc1vDggI47AA==", + "license": "MIT", "dependencies": { "@prezly/theme-kit-intl": "^7.5.1", "@prezly/uploadcare": "^2.3.4", @@ -2808,12 +2932,15 @@ } }, "node_modules/@prezly/theme-kit-nextjs": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@prezly/theme-kit-nextjs/-/theme-kit-nextjs-7.5.1.tgz", - "integrity": "sha512-m0JT6HdUvg5S6LzeZa5ExIXzYfZssYYQYfC0ykheA6sUHaU/KRy9aufU6JuPPwxoxe/Sq1jUkD6kd96AhbacRw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@prezly/theme-kit-nextjs/-/theme-kit-nextjs-7.6.0.tgz", + "integrity": "sha512-xIkCDQo8Towg1yuw0EHVb9LNH5yWxPscRdVUCZV5jVhAhf+F6WO/VxbmEHPmwCmpcpWBopJkj9G4A7Ns9as74Q==", + "license": "MIT", "dependencies": { - "@prezly/theme-kit-core": "^7.5.1", + "@meilisearch/instant-meilisearch": "^0.19.0", + "@prezly/theme-kit-core": "^7.6.0", "@technically/omit-undefined": "^1.0.2", + "algoliasearch": "^4.24.0", "next-seo": "^5.4.0" }, "engines": { @@ -2833,6 +2960,158 @@ } } }, + "node_modules/@prezly/theme-kit-nextjs/node_modules/@algolia/cache-browser-local-storage": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz", + "integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==", + "license": "MIT", + "dependencies": { + "@algolia/cache-common": "4.24.0" + } + }, + "node_modules/@prezly/theme-kit-nextjs/node_modules/@algolia/cache-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz", + "integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==", + "license": "MIT" + }, + "node_modules/@prezly/theme-kit-nextjs/node_modules/@algolia/cache-in-memory": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz", + "integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==", + "license": "MIT", + "dependencies": { + "@algolia/cache-common": "4.24.0" + } + }, + "node_modules/@prezly/theme-kit-nextjs/node_modules/@algolia/client-account": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz", + "integrity": "sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@prezly/theme-kit-nextjs/node_modules/@algolia/client-analytics": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz", + "integrity": "sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@prezly/theme-kit-nextjs/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@prezly/theme-kit-nextjs/node_modules/@algolia/client-personalization": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz", + "integrity": "sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@prezly/theme-kit-nextjs/node_modules/@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@prezly/theme-kit-nextjs/node_modules/@algolia/logger-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz", + "integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==", + "license": "MIT" + }, + "node_modules/@prezly/theme-kit-nextjs/node_modules/@algolia/logger-console": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz", + "integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==", + "license": "MIT", + "dependencies": { + "@algolia/logger-common": "4.24.0" + } + }, + "node_modules/@prezly/theme-kit-nextjs/node_modules/@algolia/requester-browser-xhr": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", + "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@prezly/theme-kit-nextjs/node_modules/@algolia/requester-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz", + "integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==", + "license": "MIT" + }, + "node_modules/@prezly/theme-kit-nextjs/node_modules/@algolia/requester-node-http": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", + "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@prezly/theme-kit-nextjs/node_modules/@algolia/transporter": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz", + "integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==", + "license": "MIT", + "dependencies": { + "@algolia/cache-common": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@prezly/theme-kit-nextjs/node_modules/algoliasearch": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz", + "integrity": "sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==", + "license": "MIT", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.24.0", + "@algolia/cache-common": "4.24.0", + "@algolia/cache-in-memory": "4.24.0", + "@algolia/client-account": "4.24.0", + "@algolia/client-analytics": "4.24.0", + "@algolia/client-common": "4.24.0", + "@algolia/client-personalization": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/logger-console": "4.24.0", + "@algolia/recommend": "4.24.0", + "@algolia/requester-browser-xhr": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/requester-node-http": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, "node_modules/@prezly/uploadcare": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@prezly/uploadcare/-/uploadcare-2.4.4.tgz", @@ -8284,6 +8563,15 @@ "node": ">=10" } }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -12536,6 +12824,15 @@ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, + "node_modules/meilisearch": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/meilisearch/-/meilisearch-0.41.0.tgz", + "integrity": "sha512-5KcGLxEXD7E+uNO7R68rCbGSHgCqeM3Q3RFFLSsN7ZrIgr8HPDXVAIlP4LHggAZfk0FkSzo8VSXifHCwa2k80g==", + "license": "MIT", + "dependencies": { + "cross-fetch": "^3.1.6" + } + }, "node_modules/meow": { "version": "10.1.5", "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", @@ -13006,9 +13303,10 @@ } }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -17543,6 +17841,110 @@ "@algolia/logger-common": "4.22.1" } }, + "@algolia/recommend": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz", + "integrity": "sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==", + "requires": { + "@algolia/cache-browser-local-storage": "4.24.0", + "@algolia/cache-common": "4.24.0", + "@algolia/cache-in-memory": "4.24.0", + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/logger-console": "4.24.0", + "@algolia/requester-browser-xhr": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/requester-node-http": "4.24.0", + "@algolia/transporter": "4.24.0" + }, + "dependencies": { + "@algolia/cache-browser-local-storage": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz", + "integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==", + "requires": { + "@algolia/cache-common": "4.24.0" + } + }, + "@algolia/cache-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz", + "integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==" + }, + "@algolia/cache-in-memory": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz", + "integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==", + "requires": { + "@algolia/cache-common": "4.24.0" + } + }, + "@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "requires": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "requires": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "@algolia/logger-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz", + "integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==" + }, + "@algolia/logger-console": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz", + "integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==", + "requires": { + "@algolia/logger-common": "4.24.0" + } + }, + "@algolia/requester-browser-xhr": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", + "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", + "requires": { + "@algolia/requester-common": "4.24.0" + } + }, + "@algolia/requester-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz", + "integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==" + }, + "@algolia/requester-node-http": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", + "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", + "requires": { + "@algolia/requester-common": "4.24.0" + } + }, + "@algolia/transporter": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz", + "integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==", + "requires": { + "@algolia/cache-common": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/requester-common": "4.24.0" + } + } + } + }, "@algolia/requester-browser-xhr": { "version": "4.22.1", "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz", @@ -19065,6 +19467,14 @@ "@lukeed/csprng": "^1.1.0" } }, + "@meilisearch/instant-meilisearch": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@meilisearch/instant-meilisearch/-/instant-meilisearch-0.19.1.tgz", + "integrity": "sha512-a61jHJTRk14KQYw2yj90H7HwfYPdVg7QoNZOhtQ6f5FO/ojL2pETkQuFHTDdLTuNBwLfKTSaTFpPLBlQnqzVKA==", + "requires": { + "meilisearch": "^0.41.0" + } + }, "@next/bundle-analyzer": { "version": "13.5.6", "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-13.5.6.tgz", @@ -19340,9 +19750,9 @@ } }, "@prezly/theme-kit-core": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@prezly/theme-kit-core/-/theme-kit-core-7.5.1.tgz", - "integrity": "sha512-T1V4yQU85nS5Jvvb0pWug98zAgewGV0NdnuUJsZOcIpv1tUZcwaNEvXvMlO6xhx//5BXoCaLIwQqCTpi+dJ63A==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@prezly/theme-kit-core/-/theme-kit-core-7.6.0.tgz", + "integrity": "sha512-K6eUqyUmYnFyjCNuSL+ZawTq5sOEjT0IiaXDOhrzdvLGoOFXX1rQCRE/4QJvz1dUEsBOjdFOIJkc1vDggI47AA==", "requires": { "@prezly/theme-kit-intl": "^7.5.1", "@prezly/uploadcare": "^2.3.4", @@ -19359,13 +19769,154 @@ } }, "@prezly/theme-kit-nextjs": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@prezly/theme-kit-nextjs/-/theme-kit-nextjs-7.5.1.tgz", - "integrity": "sha512-m0JT6HdUvg5S6LzeZa5ExIXzYfZssYYQYfC0ykheA6sUHaU/KRy9aufU6JuPPwxoxe/Sq1jUkD6kd96AhbacRw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@prezly/theme-kit-nextjs/-/theme-kit-nextjs-7.6.0.tgz", + "integrity": "sha512-xIkCDQo8Towg1yuw0EHVb9LNH5yWxPscRdVUCZV5jVhAhf+F6WO/VxbmEHPmwCmpcpWBopJkj9G4A7Ns9as74Q==", "requires": { - "@prezly/theme-kit-core": "^7.5.1", + "@meilisearch/instant-meilisearch": "^0.19.0", + "@prezly/theme-kit-core": "^7.6.0", "@technically/omit-undefined": "^1.0.2", + "algoliasearch": "^4.24.0", "next-seo": "^5.4.0" + }, + "dependencies": { + "@algolia/cache-browser-local-storage": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz", + "integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==", + "requires": { + "@algolia/cache-common": "4.24.0" + } + }, + "@algolia/cache-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz", + "integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==" + }, + "@algolia/cache-in-memory": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz", + "integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==", + "requires": { + "@algolia/cache-common": "4.24.0" + } + }, + "@algolia/client-account": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz", + "integrity": "sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==", + "requires": { + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "@algolia/client-analytics": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz", + "integrity": "sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==", + "requires": { + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "requires": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "@algolia/client-personalization": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz", + "integrity": "sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==", + "requires": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "requires": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "@algolia/logger-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz", + "integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==" + }, + "@algolia/logger-console": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz", + "integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==", + "requires": { + "@algolia/logger-common": "4.24.0" + } + }, + "@algolia/requester-browser-xhr": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", + "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", + "requires": { + "@algolia/requester-common": "4.24.0" + } + }, + "@algolia/requester-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz", + "integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==" + }, + "@algolia/requester-node-http": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", + "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", + "requires": { + "@algolia/requester-common": "4.24.0" + } + }, + "@algolia/transporter": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz", + "integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==", + "requires": { + "@algolia/cache-common": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/requester-common": "4.24.0" + } + }, + "algoliasearch": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz", + "integrity": "sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==", + "requires": { + "@algolia/cache-browser-local-storage": "4.24.0", + "@algolia/cache-common": "4.24.0", + "@algolia/cache-in-memory": "4.24.0", + "@algolia/client-account": "4.24.0", + "@algolia/client-analytics": "4.24.0", + "@algolia/client-common": "4.24.0", + "@algolia/client-personalization": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/logger-console": "4.24.0", + "@algolia/recommend": "4.24.0", + "@algolia/requester-browser-xhr": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/requester-node-http": "4.24.0", + "@algolia/transporter": "4.24.0" + } + } } }, "@prezly/uploadcare": { @@ -22134,6 +22685,14 @@ "yaml": "^1.10.0" } }, + "cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "requires": { + "node-fetch": "^2.6.12" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -25221,6 +25780,14 @@ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, + "meilisearch": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/meilisearch/-/meilisearch-0.41.0.tgz", + "integrity": "sha512-5KcGLxEXD7E+uNO7R68rCbGSHgCqeM3Q3RFFLSsN7ZrIgr8HPDXVAIlP4LHggAZfk0FkSzo8VSXifHCwa2k80g==", + "requires": { + "cross-fetch": "^3.1.6" + } + }, "meow": { "version": "10.1.5", "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", @@ -25527,9 +26094,9 @@ "requires": {} }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "requires": { "whatwg-url": "^5.0.0" } diff --git a/package.json b/package.json index 8c20dbf8..c2cb7829 100644 --- a/package.json +++ b/package.json @@ -33,9 +33,9 @@ "@prezly/content-renderer-react-js": "0.38.4", "@prezly/sdk": "21.6.0", "@prezly/story-content-format": "0.65.1", - "@prezly/theme-kit-core": "7.5.1", + "@prezly/theme-kit-core": "7.6.0", "@prezly/theme-kit-intl": "7.5.1", - "@prezly/theme-kit-nextjs": "7.5.1", + "@prezly/theme-kit-nextjs": "7.6.0", "@prezly/uploadcare": "2.4.4", "@prezly/uploadcare-image": "0.3.2", "@react-hookz/web": "14.7.1", From 405e834a721165c02c23e356836848608c52ae46 Mon Sep 17 00:00:00 2001 From: Yuriy Yakym <yakym.yuriy@gmail.com> Date: Tue, 23 Jul 2024 09:50:19 +0200 Subject: [PATCH 5/6] Fix imports --- components/CategoriesList/CategoriesList.tsx | 4 ++-- components/CategoryLink/CategoryLink.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/components/CategoriesList/CategoriesList.tsx b/components/CategoriesList/CategoriesList.tsx index a8f8e658..0c4295b1 100644 --- a/components/CategoriesList/CategoriesList.tsx +++ b/components/CategoriesList/CategoriesList.tsx @@ -1,5 +1,5 @@ import type { Category } from '@prezly/sdk'; -import type { AlgoliaCategoryRef } from '@prezly/theme-kit-core'; +import type { IndexedCategoryRef } from '@prezly/theme-kit-core'; import { getLocalizedCategoryData } from '@prezly/theme-kit-core'; import { useCurrentLocale } from '@prezly/theme-kit-nextjs'; import { useEffect, useMemo, useState } from 'react'; @@ -9,7 +9,7 @@ import CategoryLink from '../CategoryLink'; import styles from './CategoriesList.module.scss'; type Props = { - categories: Category[] | AlgoliaCategoryRef[]; + categories: Category[] | IndexedCategoryRef[]; showAllCategories?: boolean; isStatic?: boolean; linkClassName?: string; diff --git a/components/CategoryLink/CategoryLink.tsx b/components/CategoryLink/CategoryLink.tsx index 679b8580..77c370bc 100644 --- a/components/CategoryLink/CategoryLink.tsx +++ b/components/CategoryLink/CategoryLink.tsx @@ -1,5 +1,5 @@ import type { Category } from '@prezly/sdk'; -import type { AlgoliaCategoryRef } from '@prezly/theme-kit-core'; +import type { IndexedCategoryRef } from '@prezly/theme-kit-core'; import { getCategoryUrl, getLocalizedCategoryData } from '@prezly/theme-kit-core'; import { useCurrentLocale, useGetLinkLocaleSlug } from '@prezly/theme-kit-nextjs'; import classNames from 'classnames'; @@ -8,7 +8,7 @@ import Link from 'next/link'; import styles from './CategoryLink.module.scss'; type Props = { - category: Category | AlgoliaCategoryRef; + category: Category | IndexedCategoryRef; className?: string; onClick?: () => void; }; From d3df1f2256d98bb1409debe2b0ae9a3ccfaae467 Mon Sep 17 00:00:00 2001 From: Yuriy Yakym <yakym.yuriy@gmail.com> Date: Tue, 23 Jul 2024 09:52:39 +0200 Subject: [PATCH 6/6] Fix imports --- components/StoryImage/StoryImage.tsx | 4 ++-- components/StoryImage/lib/getStoryThumbnail.ts | 4 ++-- components/StoryPublicationDate/StoryPublicationDate.tsx | 4 ++-- modules/Layout/Header/SearchWidget/components/Hit.tsx | 4 ++-- modules/Layout/Header/SearchWidget/components/MainPanel.tsx | 4 ++-- .../Layout/Header/SearchWidget/components/SearchResults.tsx | 4 ++-- modules/Search/components/AlgoliaStateContext.tsx | 6 +++--- modules/Search/components/Hit.tsx | 4 ++-- modules/Search/components/Results.tsx | 4 ++-- 9 files changed, 19 insertions(+), 19 deletions(-) diff --git a/components/StoryImage/StoryImage.tsx b/components/StoryImage/StoryImage.tsx index 2e7bbff5..1cff2fab 100644 --- a/components/StoryImage/StoryImage.tsx +++ b/components/StoryImage/StoryImage.tsx @@ -1,4 +1,4 @@ -import type { AlgoliaStory } from '@prezly/theme-kit-core'; +import type { IndexedStory } from '@prezly/theme-kit-core'; import { useNewsroom } from '@prezly/theme-kit-nextjs'; import UploadcareImage from '@uploadcare/nextjs-loader'; import classNames from 'classnames'; @@ -11,7 +11,7 @@ import { getStoryThumbnail } from './lib'; import styles from './StoryImage.module.scss'; type Props = { - story: StoryWithImage | AlgoliaStory; + story: StoryWithImage | IndexedStory; size: CardSize; className?: string; placeholderClassName?: string; diff --git a/components/StoryImage/lib/getStoryThumbnail.ts b/components/StoryImage/lib/getStoryThumbnail.ts index c0c4fa30..d0f56d6d 100644 --- a/components/StoryImage/lib/getStoryThumbnail.ts +++ b/components/StoryImage/lib/getStoryThumbnail.ts @@ -1,10 +1,10 @@ -import type { AlgoliaStory } from '@prezly/theme-kit-core'; +import type { IndexedStory } from '@prezly/theme-kit-core'; import type { UploadcareImageDetails } from '@prezly/uploadcare-image/build/types'; import type { StoryWithImage } from 'types'; export function getStoryThumbnail( - story: StoryWithImage | AlgoliaStory, + story: StoryWithImage | IndexedStory, ): UploadcareImageDetails | null { const { thumbnail_image } = story; diff --git a/components/StoryPublicationDate/StoryPublicationDate.tsx b/components/StoryPublicationDate/StoryPublicationDate.tsx index 3124a2e9..811cb9b8 100644 --- a/components/StoryPublicationDate/StoryPublicationDate.tsx +++ b/components/StoryPublicationDate/StoryPublicationDate.tsx @@ -1,10 +1,10 @@ import type { Story } from '@prezly/sdk'; -import type { AlgoliaStory } from '@prezly/theme-kit-core'; +import type { IndexedStory } from '@prezly/theme-kit-core'; import { getStoryPublicationDate } from '@prezly/theme-kit-core'; import { FormattedDate } from 'react-intl'; interface Props { - story: Story | AlgoliaStory; + story: Story | IndexedStory; } export function StoryPublicationDate({ story }: Props) { diff --git a/modules/Layout/Header/SearchWidget/components/Hit.tsx b/modules/Layout/Header/SearchWidget/components/Hit.tsx index 35ef590d..cdfff5b7 100644 --- a/modules/Layout/Header/SearchWidget/components/Hit.tsx +++ b/modules/Layout/Header/SearchWidget/components/Hit.tsx @@ -1,4 +1,4 @@ -import type { AlgoliaStory } from '@prezly/theme-kit-core'; +import type { IndexedStory } from '@prezly/theme-kit-core'; import Link from 'next/link'; import type { Hit } from 'react-instantsearch-core'; import { Highlight } from 'react-instantsearch-dom'; @@ -8,7 +8,7 @@ import { StoryImage } from '@/components'; import styles from './Hit.module.scss'; interface Props { - hit: Hit<{ attributes: AlgoliaStory }>; + hit: Hit<{ attributes: IndexedStory }>; } function HitComponent({ hit }: Props) { diff --git a/modules/Layout/Header/SearchWidget/components/MainPanel.tsx b/modules/Layout/Header/SearchWidget/components/MainPanel.tsx index d2c8dc3b..48bed180 100644 --- a/modules/Layout/Header/SearchWidget/components/MainPanel.tsx +++ b/modules/Layout/Header/SearchWidget/components/MainPanel.tsx @@ -1,4 +1,4 @@ -import type { AlgoliaStory } from '@prezly/theme-kit-core'; +import type { IndexedStory } from '@prezly/theme-kit-core'; import { getCategoryHasTranslation } from '@prezly/theme-kit-core'; import { useCategories, useCurrentLocale } from '@prezly/theme-kit-nextjs'; import type { StateResultsProvided } from 'react-instantsearch-core'; @@ -17,7 +17,7 @@ function MainPanel({ searchState, searchResults, onClose, -}: StateResultsProvided<AlgoliaStory> & Props) { +}: StateResultsProvided<IndexedStory> & Props) { const isQuerySet = Boolean(searchState.query?.length); const categories = useCategories(); const currentLocale = useCurrentLocale(); diff --git a/modules/Layout/Header/SearchWidget/components/SearchResults.tsx b/modules/Layout/Header/SearchWidget/components/SearchResults.tsx index 724a2f85..9b0b2490 100644 --- a/modules/Layout/Header/SearchWidget/components/SearchResults.tsx +++ b/modules/Layout/Header/SearchWidget/components/SearchResults.tsx @@ -1,4 +1,4 @@ -import type { AlgoliaStory } from '@prezly/theme-kit-core'; +import type { IndexedStory } from '@prezly/theme-kit-core'; import { translations } from '@prezly/theme-kit-intl'; import classNames from 'classnames'; import { useRouter } from 'next/router'; @@ -12,7 +12,7 @@ import Hit from './Hit'; import styles from './MainPanel.module.scss'; -type Props = Pick<StateResultsProvided<AlgoliaStory>, 'searchResults'> & { +type Props = Pick<StateResultsProvided<IndexedStory>, 'searchResults'> & { query?: string; }; diff --git a/modules/Search/components/AlgoliaStateContext.tsx b/modules/Search/components/AlgoliaStateContext.tsx index b3bd4543..27c966ad 100644 --- a/modules/Search/components/AlgoliaStateContext.tsx +++ b/modules/Search/components/AlgoliaStateContext.tsx @@ -1,10 +1,10 @@ -import type { AlgoliaStory } from '@prezly/theme-kit-core'; +import type { IndexedStory } from '@prezly/theme-kit-core'; import type { PropsWithChildren } from 'react'; import { createContext, useContext } from 'react'; import type { StateResultsProvided } from 'react-instantsearch-core'; import { connectStateResults } from 'react-instantsearch-dom'; -const AlgoliaStateContext = createContext<StateResultsProvided<AlgoliaStory> | undefined>( +const AlgoliaStateContext = createContext<StateResultsProvided<IndexedStory> | undefined>( undefined, ); @@ -12,7 +12,7 @@ const AlgoliaStateContext = createContext<StateResultsProvided<AlgoliaStory> | u function AlgoliaStateContextProvider({ children, ...contextValue -}: PropsWithChildren<StateResultsProvided<AlgoliaStory>>) { +}: PropsWithChildren<StateResultsProvided<IndexedStory>>) { return ( <AlgoliaStateContext.Provider value={contextValue}>{children}</AlgoliaStateContext.Provider> ); diff --git a/modules/Search/components/Hit.tsx b/modules/Search/components/Hit.tsx index 2dacee4f..4b329c99 100644 --- a/modules/Search/components/Hit.tsx +++ b/modules/Search/components/Hit.tsx @@ -1,4 +1,4 @@ -import type { AlgoliaStory } from '@prezly/theme-kit-core'; +import type { IndexedStory } from '@prezly/theme-kit-core'; import classNames from 'classnames'; import Link from 'next/link'; import type { Hit } from 'react-instantsearch-core'; @@ -11,7 +11,7 @@ import styles from './Hit.module.scss'; import cardStyles from '@/components/StoryCards/StoryCard.module.scss'; interface Props { - hit: Hit<{ attributes: AlgoliaStory }>; + hit: Hit<{ attributes: IndexedStory }>; } // This is mostly a copy of `StoryCard` component, but since the data structure is a bit different, diff --git a/modules/Search/components/Results.tsx b/modules/Search/components/Results.tsx index 21ba21c9..ba22d62d 100644 --- a/modules/Search/components/Results.tsx +++ b/modules/Search/components/Results.tsx @@ -1,4 +1,4 @@ -import type { AlgoliaStory } from '@prezly/theme-kit-core'; +import type { IndexedStory } from '@prezly/theme-kit-core'; import { translations } from '@prezly/theme-kit-intl'; import classNames from 'classnames'; import type { Hit as HitType, InfiniteHitsProvided } from 'react-instantsearch-core'; @@ -14,7 +14,7 @@ import styles from './Results.module.scss'; import containerStyles from '@/modules/InfiniteStories/InfiniteStories.module.scss'; import listStyles from '@/modules/InfiniteStories/StoriesList.module.scss'; -type SearchHit = HitType<{ attributes: AlgoliaStory }>; +type SearchHit = HitType<{ attributes: IndexedStory }>; function Results({ hits, hasMore, refineNext }: InfiniteHitsProvided<SearchHit>) { const { formatMessage } = useIntl();