diff --git a/composable-ui/.env.local.example b/composable-ui/.env.local.example
index b206203..f8672f6 100644
--- a/composable-ui/.env.local.example
+++ b/composable-ui/.env.local.example
@@ -25,3 +25,8 @@ NEXTAUTH_SECRET=LOREM_IPSUM_CHANGE_ME
#NEXT_PUBLIC_PORT=${PORT}
#NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID=YOUR_GOOGLE_TAG_MANAGER_ID
+
+#Klevu settings.
+#NEXT_PUBLIC_KLEVU_SEARCH_URL=YOUR_KLEVU_SEARCH_URL
+#NEXT_PUBLIC_KLEVU_SEARCH_API_KEY=YOUR_KLEVU_SEARCH_API_KEY
+#NEXT_PUBLIC_KLEVU_ASSETS_PATH=http://localhost:3000
\ No newline at end of file
diff --git a/docs/docs/integrations/search/klevu.md b/docs/docs/integrations/search/klevu.md
new file mode 100644
index 0000000..c47efee
--- /dev/null
+++ b/docs/docs/integrations/search/klevu.md
@@ -0,0 +1,145 @@
+---
+sidebar_position: 5
+---
+
+# Integrating Klevu
+
+Klevu is a powerful AI-driven search solution designed to enhance e-commerce
+platforms. It offers advanced search capabilities, including autocomplete,
+natural language processing, and machine learning insights to improve the user
+experience. This guide outlines how to integrate Klevu components into the
+Composable-UI project, enhancing your site with Klevu's robust search
+functionalities.
+
+# Data Indexing in Klevu
+
+## Overview
+
+Klevu provides a robust solution for indexing data to enhance the search
+functionality in e-commerce platforms. This process involves the categorization
+and organization of your site's content, making it searchable and improving
+overall user experience.
+
+## Account
+
+Before starting you need a Klevu account. [You can create a trial account
+that is free for 14 days.](https://box.klevu.com/merchant/signup)
+
+Please select API as integration method when welcome wizard asks you.
+
+Find API and REST key from **Store settings** -> **Shop info**
+
+
+## Indexing Script
+Located in the scripts folder, Klevu offers an alternative method for indexing
+data. This script is tailored to interact with your site's data structure and
+Klevu's search API. It's important to note that the attributes in the script
+should be modified according to your specific data requirements and structure.
+
+## Environment Variables
+To securely interact with Klevu's API, you'll need to set up environment
+variables in a .env file. This file should include your unique Klevu API and
+REST keys, which can be found in the Klevu Merchant Center. Add these lines to
+your .env file:
+
+```env
+# Klevu API key that is found in the Klevu Merchant Center
+KLEVU_API_KEY=
+
+# Klevu REST key that is found in the Klevu Merchant Center
+KLEVU_REST_KEY=
+```
+
+## Modifying the Indexing Script
+Before running the script, ensure that it is tailored to your site's specific
+data structure. The script provided requires customization to match the
+attributes and data types you wish to index. This step is crucial for accurate
+and efficient search functionality.
+
+## Running the Script
+Once the script is customized and the environment variables are set, you can
+execute the indexing process with the following command:
+
+```bash
+pnpm run klevu-setup
+```
+
+This command will initiate the script, which interacts with Klevu's API to index
+your site's data, preparing it for an enhanced search experience.
+
+## Getting the `display` key to work
+
+`display` is a special property in the indexing. It can be used to pass any data
+from to the frontend. But for it to work you need contact `support@klevu.com` and
+request `additionalDataToReturn` to be enabled.
+
+# Installation and Setup
+
+1. **Navigating to the Project Directory:** Open your terminal and navigate to
+ your local `composable-ui` project directory and then move to `composable-ui` subfolder.
+ ```bash
+ cd path/to/composable-ui/composable-ui
+ ```
+
+2. **Installing Required Packages:** Use `pnpm` to install the necessary Klevu
+ packages:
+ ```bash
+ pnpm install @klevu/ui @klevu/ui-react @klevu/core
+ ```
+
+3. **Copy files from Klevu project to composable ui:** Move to Klevu package folder and copy files with automatic script
+ ```bash
+ cd ../packages/klevu
+ pnpm run copyfiles
+ ```
+
+4. **Go back to composable-ui frontend project:**
+ ```bash
+ cd ../../composable-ui
+ ```
+
+4. **Set the env variables:** Set the `.env` variables from the Klevu project you created.
+
+ ```shell
+ NEXT_PUBLIC_KLEVU_SEARCH_URL=YOUR_KLEVU_SEARCH_URL
+ NEXT_PUBLIC_KLEVU_SEARCH_API_KEY=YOUR_KLEVU_SEARCH_API_KEY
+ NEXT_PUBLIC_KLEVU_ASSETS_PATH=http://localhost:3000
+ ```
+
+ `SEARCH_URL` format is following `https://[your Klevu API v2 search url]/cs/v2/search`
+
+ `ASSETS_PATH` is full url to your installation. It is required for icons to load properly.
+
+ You can find the Search URL in the same Store settings as the `API key` and `REST key`.
+ It is the last item in the page with title `APIv2 Cloud Search URL`
+
+
+5. **Adding styles:** Add following two imports to `composable-ui/pages/_app.tsx`
+
+ ```typescript
+ import '@klevu/ui/dist/klevu-ui/klevu-ui.css'
+ import 'klevustyle.css'
+ ```
+
+ You can modify the look and feel of the Klevu Components with `src/klevustyle.css`
+
+
+6. **Adding QuickSearch Component:** Integrate the `QuickSearch` component into
+ the header:
+ - First, open `composable-ui/src/components/layout/header.tsx`.
+ - Import the `QuickSearch` component:
+ ```javascript
+ import { QuickSearch } from 'components/klevu/klevu';
+ ```
+ - Add the `` component to the desired location within the
+ `header.tsx` file.
+
+ Detailed code can be found from `packages/klevu/docimages/quicksearch_example.png`
+
+
+## Running the Project
+After completing the above steps, you can start the project to see the Klevu
+components in action:
+```bash
+pnpm run dev
+```
diff --git a/packages/klevu/README.md b/packages/klevu/README.md
new file mode 100644
index 0000000..32df62b
--- /dev/null
+++ b/packages/klevu/README.md
@@ -0,0 +1,145 @@
+# Integrating Klevu Components into Composable-UI
+
+## Introduction
+Klevu is a powerful AI-driven search solution designed to enhance e-commerce
+platforms. It offers advanced search capabilities, including autocomplete,
+natural language processing, and machine learning insights to improve the user
+experience. This guide outlines how to integrate Klevu components into the
+Composable-UI project, enhancing your site with Klevu's robust search
+functionalities.
+
+# Data Indexing in Klevu
+
+## Overview
+
+Klevu provides a robust solution for indexing data to enhance the search
+functionality in e-commerce platforms. This process involves the categorization
+and organization of your site's content, making it searchable and improving
+overall user experience.
+
+## Account
+
+Before starting you need a Klevu account. [You can create a trial account
+that is free for 14 days.](https://box.klevu.com/merchant/signup)
+
+Please select API as integration method when welcome wizard asks you.
+
+Find API and REST key from following place:
+
+
+
+## Indexing Script
+Located in the scripts folder, Klevu offers an alternative method for indexing
+data. This script is tailored to interact with your site's data structure and
+Klevu's search API. It's important to note that the attributes in the script
+should be modified according to your specific data requirements and structure.
+
+## Environment Variables
+To securely interact with Klevu's API, you'll need to set up environment
+variables in a .env file. This file should include your unique Klevu API and
+REST keys, which can be found in the Klevu Merchant Center. Add these lines to
+your .env file:
+
+```env
+# Klevu API key that is found in the Klevu Merchant Center
+KLEVU_API_KEY=
+
+# Klevu REST key that is found in the Klevu Merchant Center
+KLEVU_REST_KEY=
+```
+
+## Modifying the Indexing Script
+Before running the script, ensure that it is tailored to your site's specific
+data structure. The script provided requires customization to match the
+attributes and data types you wish to index. This step is crucial for accurate
+and efficient search functionality.
+
+## Running the Script
+Once the script is customized and the environment variables are set, you can
+execute the indexing process with the following command:
+
+```bash
+pnpm run klevu-setup
+```
+
+This command will initiate the script, which interacts with Klevu's API to index
+your site's data, preparing it for an enhanced search experience.
+
+## Getting the `display` key to work
+
+`display` is a special property in the indexing. It can be used to pass any data
+from to the frontend. But for it to work you need contact `support@klevu.com` and
+request `additionalDataToReturn` to be enabled.
+
+# Installation and Setup
+
+1. **Navigating to the Project Directory:** Open your terminal and navigate to
+ your local `composable-ui` project directory and then move to `composable-ui` subfolder.
+ ```bash
+ cd path/to/composable-ui/composable-ui
+ ```
+
+2. **Installing Required Packages:** Use `pnpm` to install the necessary Klevu
+ packages:
+ ```bash
+ pnpm install @klevu/ui @klevu/ui-react @klevu/core
+ ```
+
+3. **Copy files from Klevu project to composable ui:** Move to Klevu package folder and copy files with automatic script
+ ```bash
+ cd ../packages/klevu
+ pnpm run copyfiles
+ ```
+
+4. **Go back to composable-ui frontend project:**
+ ```bash
+ cd ../../composable-ui
+ ```
+
+4. **Set the env variables:** Set the `.env` variables from the Klevu project you created.
+
+ ```shell
+ NEXT_PUBLIC_KLEVU_SEARCH_URL=YOUR_KLEVU_SEARCH_URL
+ NEXT_PUBLIC_KLEVU_SEARCH_API_KEY=YOUR_KLEVU_SEARCH_API_KEY
+ NEXT_PUBLIC_KLEVU_ASSETS_PATH=http://localhost:3000
+ ```
+
+ `SEARCH_URL` format is following `https://[your Klevu API v2 search url]/cs/v2/search`
+
+ `ASSETS_PATH` is full url to your installation. It is required for icons to load properly.
+
+ You can find the Search URL in the same Store settings as the `API key` and `REST key`
+
+ 
+
+
+
+5. **Adding styles:** Add following two imports to `composable-ui/pages/_app.tsx`
+
+ ```typescript
+ import '@klevu/ui/dist/klevu-ui/klevu-ui.css'
+ import 'klevustyle.css'
+ ```
+
+ You can modify the look and feel of the Klevu Components with `src/klevustyle.css`
+
+
+6. **Adding QuickSearch Component:** Integrate the `QuickSearch` component into
+ the header:
+ - First, open `composable-ui/src/components/layout/header.tsx`.
+ - Import the `QuickSearch` component:
+ ```javascript
+ import { QuickSearch } from 'components/klevu/klevu';
+ ```
+ - Add the `` component to the desired location within the
+ `header.tsx` file.
+
+ Here is a example of placement code: 
+
+
+## Running the Project
+After completing the above steps, you can start the project to see the Klevu
+components in action:
+```bash
+pnpm run dev
+```
diff --git a/packages/klevu/copythese/[slug].tsx b/packages/klevu/copythese/[slug].tsx
new file mode 100644
index 0000000..8447062
--- /dev/null
+++ b/packages/klevu/copythese/[slug].tsx
@@ -0,0 +1,17 @@
+import { GetServerSideProps } from 'next'
+import { createServerApp } from 'server/isr/server-app'
+import { KlevuCategoryPage } from '../../components/klevu/klevu'
+
+export const getServerSideProps: GetServerSideProps = async (context) => {
+ const { ssg } = await createServerApp({ context })
+ const slug = `${context?.params?.slug?.toString()}`
+
+ return {
+ props: {
+ trpcState: ssg.dehydrate(),
+ category: slug,
+ },
+ }
+}
+
+export default KlevuCategoryPage
diff --git a/packages/klevu/copythese/klevu.tsx b/packages/klevu/copythese/klevu.tsx
new file mode 100644
index 0000000..05e88ad
--- /dev/null
+++ b/packages/klevu/copythese/klevu.tsx
@@ -0,0 +1,136 @@
+import React, { useState } from 'react'
+import {
+ KlevuInit,
+ KlevuMerchandising,
+ KlevuProduct,
+ KlevuProductGrid,
+ KlevuQuicksearch,
+ KlevuSearchLandingPage,
+} from '@klevu/ui-react'
+import { KlevuRecord } from '@klevu/core'
+import { useRouter } from 'next/router'
+import { Box, Container } from '@chakra-ui/react'
+import { CategoryProductCard } from '../product-listing-page'
+
+// Change these values to your own
+const apiKey = process.env.NEXT_PUBLIC_KLEVU_SEARCH_API_KEY
+const url = process.env.NEXT_PUBLIC_KLEVU_SEARCH_URL
+const assetsPath = process.env.NEXT_PUBLIC_KLEVU_ASSETS_PATH
+
+if (!apiKey || !url || !assetsPath) {
+ throw new Error('Klevu API key, URL or assets path is not defined in .env')
+}
+
+const Init = (props: { children: any }) => {
+ let router: any = null
+ router = useRouter()
+
+ return (
+
+ {props.children}
+
+ )
+}
+
+export const QuickSearch = () => {
+ const router = useRouter()
+
+ return (
+
+
+ {
+ router.push(`/search?term=${e.detail}`)
+ }}
+ searchCategories
+ />
+
+
+ )
+}
+
+export const KlevuCategoryPage = (props: {
+ category: string
+ serverState?: string
+}) => {
+ const [products, setProducts] = useState([])
+
+ return (
+
+
+ {
+ setProducts(e.detail.records)
+ }}
+ >
+
+
+
+
+
+
+ )
+}
+
+function CustomGridRenderer(props: { products: KlevuRecord[] }) {
+ return (
+
+ {props.products.map((product) => {
+ // additionalDataToReturn is JSON have been indexed to display key on the product.
+ const originalProductJSON = JSON.parse(
+ product.additionalDataToReturn
+ ).default
+ return (
+
+ {/* Above: Components should be put inside KlevuProduct that has `isWrapper` prop defined. It means that it's empty shell. */}
+ {/* Below: Here you can use your own components */}
+
+
+ )
+ })}
+
+ )
+}
+
+export const KlevuSearchPage = (props: { term: string }) => {
+ const [products, setProducts] = useState([])
+
+ return (
+
+
+
+ {
+ setProducts(e.detail.records)
+ }}
+ >
+
+
+
+
+
+
+
+ )
+}
diff --git a/packages/klevu/copythese/klevustyle.css b/packages/klevu/copythese/klevustyle.css
new file mode 100644
index 0000000..449f6f3
--- /dev/null
+++ b/packages/klevu/copythese/klevustyle.css
@@ -0,0 +1,12 @@
+klevu-init {
+ --klevu-color-primary: var(--chakra-colors-primary);
+}
+
+klevu-merchandising {
+ --grid-spacing: var(--chakra-space-4);
+}
+
+klevu-merchandising::part(dropdown-base) {
+ border: 1px solid var(--klevu-color-neutral-4);
+ border-radius: 5px;
+}
diff --git a/packages/klevu/copythese/search.tsx b/packages/klevu/copythese/search.tsx
new file mode 100644
index 0000000..30110a7
--- /dev/null
+++ b/packages/klevu/copythese/search.tsx
@@ -0,0 +1,14 @@
+import { GetServerSideProps } from 'next'
+import { KlevuSearchPage } from '../components/klevu/klevu'
+
+export const getServerSideProps: GetServerSideProps = async (context) => {
+ const term = `${context.query.term}`
+
+ return {
+ props: {
+ term,
+ },
+ }
+}
+
+export default KlevuSearchPage
diff --git a/packages/klevu/docimages/kmcinfo.png b/packages/klevu/docimages/kmcinfo.png
new file mode 100644
index 0000000..4ee2f3b
Binary files /dev/null and b/packages/klevu/docimages/kmcinfo.png differ
diff --git a/packages/klevu/docimages/quicksearch_example.png b/packages/klevu/docimages/quicksearch_example.png
new file mode 100644
index 0000000..ad578b2
Binary files /dev/null and b/packages/klevu/docimages/quicksearch_example.png differ
diff --git a/packages/klevu/docimages/searchurl_example.png b/packages/klevu/docimages/searchurl_example.png
new file mode 100644
index 0000000..3669d24
Binary files /dev/null and b/packages/klevu/docimages/searchurl_example.png differ
diff --git a/packages/klevu/index.ts b/packages/klevu/index.ts
new file mode 100644
index 0000000..9189c09
--- /dev/null
+++ b/packages/klevu/index.ts
@@ -0,0 +1,3 @@
+export function noop() {
+ console.log('klevu is not exporting anything')
+}
diff --git a/packages/klevu/package.json b/packages/klevu/package.json
new file mode 100644
index 0000000..b800220
--- /dev/null
+++ b/packages/klevu/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "@composable/klevu",
+ "version": "0.0.0",
+ "main": "./index.ts",
+ "types": "./index.ts",
+ "sideEffects": "false",
+ "scripts": {
+ "build": "echo \"Build script for @composable/stripe ...\"",
+ "lint": "eslint \"**/*.{js,ts,tsx}\" --max-warnings 0",
+ "ts": "tsc --noEmit --incremental",
+ "copyfiles": "cd ../../composable-ui/ && cp -R node_modules/@klevu/ui/dist/klevu-ui/assets/ public/assets/ && mkdir -p src/components/klevu && cp ../packages/klevu/copythese/klevu.tsx src/components/klevu/klevu.tsx && cp ../packages/klevu/copythese/\\[slug\\].tsx src/pages/category/\\[slug\\].tsx && cp ../packages/klevu/copythese/search.tsx src/pages/search.tsx && cp ../packages/klevu/copythese/klevustyle.css src"
+ },
+ "dependencies": {
+ "@composable/types": "workspace:*",
+ "@chakra-ui/react": "^2.8.0",
+ "@klevu/core": "^5.0.0",
+ "@klevu/ui": "^2.0.0",
+ "@klevu/ui-react": "^2.0.0",
+ "react": "^18.2.0",
+ "next": "^13.3.1"
+ },
+ "devDependencies": {
+ "@types/node": "^18.18.9",
+ "@types/qs": "^6.9.10",
+ "@types/react": "^18.2.37",
+ "eslint-config-custom": "workspace:*",
+ "tsconfig": "workspace:*",
+ "typescript": "^4.9.5"
+ }
+}
diff --git a/packages/klevu/tsconfig.json b/packages/klevu/tsconfig.json
new file mode 100644
index 0000000..13bf0cc
--- /dev/null
+++ b/packages/klevu/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "tsconfig/react-library.json",
+ "include": ["."],
+ "exclude": [".turbo", "dist", "tmp", "node_modules", "tsconfig.tsbuildinfo"],
+ "compilerOptions": {
+ "resolveJsonModule": true,
+ "jsx": "react"
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 0c75f66..2171190 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -243,6 +243,49 @@ importers:
specifier: 7.28.0
version: 7.28.0(eslint@7.32.0)
+ packages/klevu:
+ dependencies:
+ '@chakra-ui/react':
+ specifier: ^2.8.0
+ version: 2.8.0(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(@types/react@18.2.60)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0)
+ '@composable/types':
+ specifier: workspace:*
+ version: link:../types
+ '@klevu/core':
+ specifier: ^5.0.0
+ version: 5.0.0
+ '@klevu/ui':
+ specifier: ^2.0.0
+ version: 2.0.0
+ '@klevu/ui-react':
+ specifier: ^2.0.0
+ version: 2.0.0
+ next:
+ specifier: ^13.3.1
+ version: 13.3.1(@babel/core@7.21.3)(react-dom@18.2.0)(react@18.2.0)
+ react:
+ specifier: ^18.2.0
+ version: 18.2.0
+ devDependencies:
+ '@types/node':
+ specifier: ^18.18.9
+ version: 18.19.20
+ '@types/qs':
+ specifier: ^6.9.10
+ version: 6.9.12
+ '@types/react':
+ specifier: ^18.2.37
+ version: 18.2.60
+ eslint-config-custom:
+ specifier: workspace:*
+ version: link:../eslint-config-custom
+ tsconfig:
+ specifier: workspace:*
+ version: link:../tsconfig
+ typescript:
+ specifier: ^4.9.5
+ version: 4.9.5
+
packages/stripe:
dependencies:
'@composable/types':
@@ -326,7 +369,7 @@ importers:
version: 2.1.1
'@chakra-ui/cli':
specifier: ^2.3.0
- version: 2.3.0(@types/node@18.15.11)(typescript@4.9.5)
+ version: 2.3.0(@types/node@18.19.20)(typescript@4.9.5)
'@chakra-ui/react':
specifier: ^2.8.0
version: 2.8.0(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(@types/react@18.0.31)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0)
@@ -360,7 +403,7 @@ importers:
version: link:../eslint-config-custom
ts-node:
specifier: ^10.9.1
- version: 10.9.1(@swc/core@1.3.42)(@types/node@18.15.11)(typescript@4.9.5)
+ version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5)
tsconfig:
specifier: workspace:*
version: link:../tsconfig
@@ -370,6 +413,9 @@ importers:
scripts:
dependencies:
+ '@klevu/indexing':
+ specifier: ^0.0.2
+ version: 0.0.2
algoliasearch:
specifier: ^4.14.3
version: 4.16.0
@@ -385,7 +431,7 @@ importers:
version: 2.6.0
ts-node:
specifier: ^10.9.1
- version: 10.9.1(@swc/core@1.3.42)(@types/node@18.15.11)(typescript@4.9.5)
+ version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5)
typescript:
specifier: ^4.9.5
version: 4.9.5
@@ -2157,7 +2203,7 @@ packages:
'@zag-js/focus-visible': 0.10.5
react: 18.2.0
- /@chakra-ui/cli@2.3.0(@types/node@18.15.11)(typescript@4.9.5):
+ /@chakra-ui/cli@2.3.0(@types/node@18.19.20)(typescript@4.9.5):
resolution: {integrity: sha512-63Xs4aMYxc17U8GfyPuQnAv8qRg/z2oCd8lgAdn6m755lvQ0e5RZ+mNecfJN1uNXRs3BmKXWnmGh1NvfQ6q1UQ==}
hasBin: true
dependencies:
@@ -2171,7 +2217,7 @@ packages:
ora: 5.4.1
prettier: 2.8.7
regenerator-runtime: 0.13.11
- ts-node: 10.9.1(@swc/core@1.3.42)(@types/node@18.15.11)(typescript@4.9.5)
+ ts-node: 10.9.1(@swc/core@1.3.42)(@types/node@18.19.20)(typescript@4.9.5)
tsconfig-paths: 4.2.0
update-notifier: 5.1.0
transitivePeerDependencies:
@@ -2279,6 +2325,18 @@ packages:
transitivePeerDependencies:
- '@types/react'
+ /@chakra-ui/focus-lock@2.1.0(@types/react@18.2.60)(react@18.2.0):
+ resolution: {integrity: sha512-EmGx4PhWGjm4dpjRqM4Aa+rCWBxP+Rq8Uc/nAVnD4YVqkEhBkrPTpui2lnjsuxqNaZ24fIAZ10cF1hlpemte/w==}
+ peerDependencies:
+ react: '>=18'
+ dependencies:
+ '@chakra-ui/dom-utils': 2.1.0
+ react: 18.2.0
+ react-focus-lock: 2.9.4(@types/react@18.2.60)(react@18.2.0)
+ transitivePeerDependencies:
+ - '@types/react'
+ dev: false
+
/@chakra-ui/form-control@2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0):
resolution: {integrity: sha512-3QmWG9v6Rx+JOwJP3Wt89+AWZxK0F1NkVAgXP3WVfE9VDXOKFRV/faLT0GEe2V+l7WZHF5PLdEBvKG8Cgw2mkA==}
peerDependencies:
@@ -2449,6 +2507,32 @@ packages:
transitivePeerDependencies:
- '@types/react'
+ /@chakra-ui/modal@2.3.0(@chakra-ui/system@2.6.0)(@types/react@18.2.60)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-S1sITrIeLSf21LJ0Vz8xZhj5fWEud5z5Dl2dmvOEv1ezypgOrCCBdOEnnqCkoEKZDbKvzZWZXWR5791ikLP6+g==}
+ peerDependencies:
+ '@chakra-ui/system': '>=2.0.0'
+ framer-motion: '>=4.0.0'
+ react: '>=18'
+ react-dom: '>=18'
+ dependencies:
+ '@chakra-ui/close-button': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/focus-lock': 2.1.0(@types/react@18.2.60)(react@18.2.0)
+ '@chakra-ui/portal': 2.1.0(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/react-context': 2.1.0(react@18.2.0)
+ '@chakra-ui/react-types': 2.0.7(react@18.2.0)
+ '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0)
+ '@chakra-ui/shared-utils': 2.0.5
+ '@chakra-ui/system': 2.6.0(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@18.2.0)
+ '@chakra-ui/transition': 2.1.0(framer-motion@7.10.3)(react@18.2.0)
+ aria-hidden: 1.2.3
+ framer-motion: 7.10.3(react-dom@18.2.0)(react@18.2.0)
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ react-remove-scroll: 2.5.5(@types/react@18.2.60)(react@18.2.0)
+ transitivePeerDependencies:
+ - '@types/react'
+ dev: false
+
/@chakra-ui/number-input@2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0):
resolution: {integrity: sha512-/gEAzQHhrMA+1rzyCMaN8OkKtUPuER6iA+nloYEYBoT7dH/EoNlRtBkiIQhDp+E4VpgZJ0SK3OVrm9/eBbtHHg==}
peerDependencies:
@@ -2820,6 +2904,77 @@ packages:
transitivePeerDependencies:
- '@types/react'
+ /@chakra-ui/react@2.8.0(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(@types/react@18.2.60)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-tV82DaqE4fMbLIWq58BYh4Ol3gAlNEn+qYOzx8bPrZudboEDnboq8aVfSBwWOY++MLWz2Nn7CkT69YRm91e5sg==}
+ peerDependencies:
+ '@emotion/react': ^11.0.0
+ '@emotion/styled': ^11.0.0
+ framer-motion: '>=4.0.0'
+ react: '>=18'
+ react-dom: '>=18'
+ dependencies:
+ '@chakra-ui/accordion': 2.3.0(@chakra-ui/system@2.6.0)(framer-motion@7.10.3)(react@18.2.0)
+ '@chakra-ui/alert': 2.2.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/avatar': 2.3.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/breadcrumb': 2.2.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/button': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/card': 2.2.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/checkbox': 2.3.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/close-button': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/control-box': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/counter': 2.1.0(react@18.2.0)
+ '@chakra-ui/css-reset': 2.2.0(@emotion/react@11.10.6)(react@18.2.0)
+ '@chakra-ui/editable': 3.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/focus-lock': 2.1.0(@types/react@18.2.60)(react@18.2.0)
+ '@chakra-ui/form-control': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/hooks': 2.2.0(react@18.2.0)
+ '@chakra-ui/icon': 3.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/input': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/layout': 2.3.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/live-region': 2.1.0(react@18.2.0)
+ '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/menu': 2.2.0(@chakra-ui/system@2.6.0)(framer-motion@7.10.3)(react@18.2.0)
+ '@chakra-ui/modal': 2.3.0(@chakra-ui/system@2.6.0)(@types/react@18.2.60)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/number-input': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/pin-input': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/popover': 2.2.0(@chakra-ui/system@2.6.0)(framer-motion@7.10.3)(react@18.2.0)
+ '@chakra-ui/popper': 3.1.0(react@18.2.0)
+ '@chakra-ui/portal': 2.1.0(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/progress': 2.2.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/provider': 2.4.0(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/radio': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/react-env': 3.1.0(react@18.2.0)
+ '@chakra-ui/select': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/skeleton': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/skip-nav': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/slider': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/stat': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/stepper': 2.3.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/styled-system': 2.9.1
+ '@chakra-ui/switch': 2.1.0(@chakra-ui/system@2.6.0)(framer-motion@7.10.3)(react@18.2.0)
+ '@chakra-ui/system': 2.6.0(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@18.2.0)
+ '@chakra-ui/table': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/tabs': 2.2.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/tag': 3.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/textarea': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@chakra-ui/theme': 3.2.0(@chakra-ui/styled-system@2.9.1)
+ '@chakra-ui/theme-utils': 2.0.19
+ '@chakra-ui/toast': 7.0.0(@chakra-ui/system@2.6.0)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/tooltip': 2.3.0(@chakra-ui/system@2.6.0)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/transition': 2.1.0(framer-motion@7.10.3)(react@18.2.0)
+ '@chakra-ui/utils': 2.0.15
+ '@chakra-ui/visually-hidden': 2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0)
+ '@emotion/react': 11.10.6(@types/react@18.2.60)(react@18.2.0)
+ '@emotion/styled': 11.10.6(@emotion/react@11.10.6)(@types/react@18.2.60)(react@18.2.0)
+ framer-motion: 7.10.3(react-dom@18.2.0)(react@18.2.0)
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ transitivePeerDependencies:
+ - '@types/react'
+ dev: false
+
/@chakra-ui/select@2.1.0(@chakra-ui/system@2.6.0)(react@18.2.0):
resolution: {integrity: sha512-6GEjCJNOm1pS9E7XRvodoVOuSFl82Jio3MGWgmcQrLznjJAhIZVMq85vCQqzGpjjfbHys/UctfdJY75Ctas/Jg==}
peerDependencies:
@@ -3316,6 +3471,27 @@ packages:
hoist-non-react-statics: 3.3.2
react: 18.2.0
+ /@emotion/react@11.10.6(@types/react@18.2.60)(react@18.2.0):
+ resolution: {integrity: sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: '>=16.8.0'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.21.0
+ '@emotion/babel-plugin': 11.10.6
+ '@emotion/cache': 11.10.5
+ '@emotion/serialize': 1.1.1
+ '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0)
+ '@emotion/utils': 1.2.0
+ '@emotion/weak-memoize': 0.3.0
+ '@types/react': 18.2.60
+ hoist-non-react-statics: 3.3.2
+ react: 18.2.0
+ dev: false
+
/@emotion/serialize@1.1.1:
resolution: {integrity: sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==}
dependencies:
@@ -3348,6 +3524,27 @@ packages:
'@types/react': 18.0.31
react: 18.2.0
+ /@emotion/styled@11.10.6(@emotion/react@11.10.6)(@types/react@18.2.60)(react@18.2.0):
+ resolution: {integrity: sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==}
+ peerDependencies:
+ '@emotion/react': ^11.0.0-rc.0
+ '@types/react': '*'
+ react: '>=16.8.0'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.21.0
+ '@emotion/babel-plugin': 11.10.6
+ '@emotion/is-prop-valid': 1.2.0
+ '@emotion/react': 11.10.6(@types/react@18.2.60)(react@18.2.0)
+ '@emotion/serialize': 1.1.1
+ '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0)
+ '@emotion/utils': 1.2.0
+ '@types/react': 18.2.60
+ react: 18.2.0
+ dev: false
+
/@emotion/unitless@0.8.0:
resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==}
@@ -3381,6 +3578,23 @@ packages:
- supports-color
dev: false
+ /@floating-ui/core@1.6.0:
+ resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==}
+ dependencies:
+ '@floating-ui/utils': 0.2.1
+ dev: false
+
+ /@floating-ui/dom@1.6.3:
+ resolution: {integrity: sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==}
+ dependencies:
+ '@floating-ui/core': 1.6.0
+ '@floating-ui/utils': 0.2.1
+ dev: false
+
+ /@floating-ui/utils@0.2.1:
+ resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==}
+ dev: false
+
/@formatjs/ecma402-abstract@1.11.4:
resolution: {integrity: sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==}
dependencies:
@@ -3499,7 +3713,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.5.0
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
chalk: 4.1.2
jest-message-util: 29.5.0
jest-util: 29.5.0
@@ -3520,14 +3734,14 @@ packages:
'@jest/test-result': 29.5.0
'@jest/transform': 29.5.0
'@jest/types': 29.5.0
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
ansi-escapes: 4.3.2
chalk: 4.1.2
ci-info: 3.8.0
exit: 0.1.2
graceful-fs: 4.2.11
jest-changed-files: 29.5.0
- jest-config: 29.5.0(@types/node@18.15.11)
+ jest-config: 29.5.0(@types/node@18.19.20)
jest-haste-map: 29.5.0
jest-message-util: 29.5.0
jest-regex-util: 29.4.3
@@ -3554,7 +3768,7 @@ packages:
dependencies:
'@jest/fake-timers': 29.5.0
'@jest/types': 29.5.0
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
jest-mock: 29.5.0
dev: true
@@ -3581,7 +3795,7 @@ packages:
dependencies:
'@jest/types': 29.5.0
'@sinonjs/fake-timers': 10.0.2
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
jest-message-util: 29.5.0
jest-mock: 29.5.0
jest-util: 29.5.0
@@ -3614,7 +3828,7 @@ packages:
'@jest/transform': 29.5.0
'@jest/types': 29.5.0
'@jridgewell/trace-mapping': 0.3.17
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
chalk: 4.1.2
collect-v8-coverage: 1.0.1
exit: 0.1.2
@@ -3724,7 +3938,7 @@ packages:
dependencies:
'@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
'@types/yargs': 15.0.15
chalk: 4.1.2
dev: false
@@ -3735,7 +3949,7 @@ packages:
dependencies:
'@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
'@types/yargs': 16.0.5
chalk: 4.1.2
dev: false
@@ -3747,7 +3961,7 @@ packages:
'@jest/schemas': 29.4.3
'@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
'@types/yargs': 17.0.24
chalk: 4.1.2
dev: true
@@ -3798,6 +4012,39 @@ packages:
'@jridgewell/sourcemap-codec': 1.4.14
dev: true
+ /@klevu/core@5.0.0:
+ resolution: {integrity: sha512-dZy8s8WAD6q+saZbGn7WRe/Hr1tMOB19GYHmOX029u39fltizPPepxBIGq0nUqTL3kglAypwaSdqnNkaMy7sdw==}
+ dev: false
+
+ /@klevu/indexing@0.0.2:
+ resolution: {integrity: sha512-8vYwQIQw8OUAHYRmX+2nlUek0uIlcTe4Q0hl2XkBOQrTVO0BtF+sf/bVokb3kBgXEVFaKnI2QnMKKUcwpgUyDw==}
+ dependencies:
+ crypto-js: 4.2.0
+ dev: false
+
+ /@klevu/ui-react@2.0.0:
+ resolution: {integrity: sha512-qT/ma4gH6vTzXHGWQYgWYGhnPsq3BYfT9ao6VE+8ur9B361Tkv7bSXGxRLbf1OyKNNOHhVSDXwcVC7hyA+Ggag==}
+ dependencies:
+ '@klevu/ui': 2.0.0
+ transitivePeerDependencies:
+ - debug
+ dev: false
+
+ /@klevu/ui@2.0.0:
+ resolution: {integrity: sha512-iA5Mj50jC+DFOxhhjX240HpW0kw+5ecDI/Nuvl285Yq1MJKcd+rJ8Bpo/OCbY0p0w5nM/e9sX2ehoZMB9o+I2w==}
+ dependencies:
+ '@floating-ui/dom': 1.6.3
+ '@klevu/core': 5.0.0
+ '@stencil/core': 4.12.4
+ axios: 1.6.7
+ lit-html: 2.8.0
+ markdown-it: 13.0.2
+ nouislider: 15.7.1
+ overlayscrollbars: 2.5.0
+ transitivePeerDependencies:
+ - debug
+ dev: false
+
/@mdx-js/mdx@1.6.22:
resolution: {integrity: sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==}
dependencies:
@@ -4269,6 +4516,7 @@ packages:
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
requiresBuild: true
dev: false
optional: true
@@ -4278,6 +4526,7 @@ packages:
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
requiresBuild: true
dev: false
optional: true
@@ -4287,6 +4536,7 @@ packages:
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+ libc: [musl]
requiresBuild: true
dev: false
optional: true
@@ -4296,6 +4546,7 @@ packages:
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+ libc: [musl]
requiresBuild: true
dev: false
optional: true
@@ -4305,6 +4556,7 @@ packages:
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+ libc: [glibc]
requiresBuild: true
dev: false
optional: true
@@ -4314,6 +4566,7 @@ packages:
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+ libc: [glibc]
requiresBuild: true
dev: false
optional: true
@@ -4323,6 +4576,7 @@ packages:
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+ libc: [musl]
requiresBuild: true
dev: false
optional: true
@@ -4332,6 +4586,7 @@ packages:
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+ libc: [musl]
requiresBuild: true
dev: false
optional: true
@@ -4504,6 +4759,12 @@ packages:
'@sinonjs/commons': 2.0.0
dev: true
+ /@stencil/core@4.12.4:
+ resolution: {integrity: sha512-KrwoXu9J1loWSvQQReilGPkt6/dCH/x5eTBDecCBPclz7vxUM13Iw9almBIffEpurk/kaMAglH0G7sAF/A2y1A==}
+ engines: {node: '>=16.0.0', npm: '>=7.10.0'}
+ hasBin: true
+ dev: false
+
/@storybook/addon-actions@6.5.16(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-aADjilFmuD6TNGz2CRPSupnyiA/IGkPJHDBTqMpsDXTUr8xnuD122xkIhg6UxmCM2y1c+ncwYXy3WPK2xXK57g==}
peerDependencies:
@@ -4796,7 +5057,7 @@ packages:
'@storybook/core-events': 6.5.16
'@storybook/csf': 0.0.2--canary.4566f4d.1
'@storybook/router': 6.5.16(react-dom@18.2.0)(react@18.2.0)
- '@types/qs': 6.9.7
+ '@types/qs': 6.9.12
core-js: 3.29.1
global: 4.4.0
prop-types: 15.8.1
@@ -5125,7 +5386,7 @@ packages:
'@storybook/core-events': 6.5.16
'@storybook/csf': 0.0.2--canary.4566f4d.1
'@storybook/store': 6.5.16(react-dom@18.2.0)(react@18.2.0)
- '@types/qs': 6.9.7
+ '@types/qs': 6.9.12
'@types/webpack-env': 1.18.0
core-js: 3.29.1
fast-deep-equal: 3.1.3
@@ -5979,6 +6240,7 @@ packages:
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
requiresBuild: true
dev: true
optional: true
@@ -5988,6 +6250,7 @@ packages:
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
+ libc: [musl]
requiresBuild: true
dev: true
optional: true
@@ -5997,6 +6260,7 @@ packages:
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
+ libc: [glibc]
requiresBuild: true
dev: true
optional: true
@@ -6006,6 +6270,7 @@ packages:
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
+ libc: [musl]
requiresBuild: true
dev: true
optional: true
@@ -6329,14 +6594,14 @@ packages:
resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
dependencies:
'@types/minimatch': 5.1.2
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
dev: false
/@types/glob@8.1.0:
resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==}
dependencies:
'@types/minimatch': 5.1.2
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
dev: false
/@types/google.maps@3.52.4:
@@ -6346,7 +6611,7 @@ packages:
/@types/graceful-fs@4.1.6:
resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==}
dependencies:
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
/@types/hast@2.3.4:
resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==}
@@ -6361,7 +6626,7 @@ packages:
/@types/hoist-non-react-statics@3.3.1:
resolution: {integrity: sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==}
dependencies:
- '@types/react': 18.0.31
+ '@types/react': 18.2.60
hoist-non-react-statics: 3.3.2
dev: false
@@ -6400,7 +6665,7 @@ packages:
/@types/jsdom@20.0.1:
resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==}
dependencies:
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
'@types/tough-cookie': 4.0.2
parse5: 7.1.2
dev: true
@@ -6416,7 +6681,7 @@ packages:
/@types/keyv@3.1.4:
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
dependencies:
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
dev: true
/@types/lodash.mergewith@4.6.7:
@@ -6440,7 +6705,7 @@ packages:
/@types/node-fetch@2.6.3:
resolution: {integrity: sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==}
dependencies:
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
form-data: 3.0.1
dev: false
@@ -6457,6 +6722,11 @@ packages:
/@types/node@18.15.11:
resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==}
+ /@types/node@18.19.20:
+ resolution: {integrity: sha512-SKXZvI375jkpvAj8o+5U2518XQv76mAsixqfXiVyWyXZbVWQK25RurFovYpVIxVzul0rZoH58V/3SkEnm7s3qA==}
+ dependencies:
+ undici-types: 5.26.5
+
/@types/normalize-package-data@2.4.1:
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
dev: false
@@ -6483,8 +6753,12 @@ packages:
/@types/prop-types@15.7.5:
resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
+ /@types/qs@6.9.12:
+ resolution: {integrity: sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==}
+
/@types/qs@6.9.7:
resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==}
+ dev: true
/@types/react-dom@18.0.11:
resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==}
@@ -6499,10 +6773,17 @@ packages:
'@types/scheduler': 0.16.3
csstype: 3.1.1
+ /@types/react@18.2.60:
+ resolution: {integrity: sha512-dfiPj9+k20jJrLGOu9Nf6eqxm2EyJRrq2NvwOFsfbb7sFExZ9WELPs67UImHj3Ayxg8ruTtKtNnbjaF8olPq0A==}
+ dependencies:
+ '@types/prop-types': 15.7.5
+ '@types/scheduler': 0.16.3
+ csstype: 3.1.1
+
/@types/responselike@1.0.0:
resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
dependencies:
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
dev: true
/@types/scheduler@0.16.3:
@@ -6530,6 +6811,10 @@ packages:
resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==}
dev: true
+ /@types/trusted-types@2.0.7:
+ resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
+ dev: false
+
/@types/uglify-js@3.17.1:
resolution: {integrity: sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==}
dependencies:
@@ -6547,7 +6832,7 @@ packages:
/@types/webpack-sources@3.2.0:
resolution: {integrity: sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==}
dependencies:
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
'@types/source-list-map': 0.1.2
source-map: 0.7.4
dev: false
@@ -6555,7 +6840,7 @@ packages:
/@types/webpack@4.41.33:
resolution: {integrity: sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==}
dependencies:
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
'@types/tapable': 1.0.8
'@types/uglify-js': 3.17.1
'@types/webpack-sources': 3.2.0
@@ -7441,6 +7726,16 @@ packages:
transitivePeerDependencies:
- debug
+ /axios@1.6.7:
+ resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==}
+ dependencies:
+ follow-redirects: 1.15.5
+ form-data: 4.0.0
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+ dev: false
+
/axobject-query@3.1.1:
resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==}
dependencies:
@@ -8737,6 +9032,10 @@ packages:
randomfill: 1.0.4
dev: false
+ /crypto-js@4.2.0:
+ resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
+ dev: false
+
/crypto-random-string@2.0.0:
resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
engines: {node: '>=8'}
@@ -8960,7 +9259,7 @@ packages:
engines: {node: '>=0.10.0'}
/default-browser-id@1.0.4:
- resolution: {integrity: sha512-qPy925qewwul9Hifs+3sx1ZYn14obHxpkX+mPD369w4Rzg+YkJBgi3SOvwUq81nWSjqGUegIgEPwD8u+HUnxlw==}
+ resolution: {integrity: sha1-5Z0JpdFXuCi4dsJoFuYcPSosIDo=}
engines: {node: '>=0.10.0'}
hasBin: true
requiresBuild: true
@@ -9315,6 +9614,11 @@ packages:
resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
dev: false
+ /entities@3.0.1:
+ resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==}
+ engines: {node: '>=0.12'}
+ dev: false
+
/entities@4.4.0:
resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==}
engines: {node: '>=0.12'}
@@ -10209,6 +10513,16 @@ packages:
debug:
optional: true
+ /follow-redirects@1.15.5:
+ resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+ dev: false
+
/for-each@0.3.3:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
dependencies:
@@ -10437,7 +10751,7 @@ packages:
resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==}
engines: {node: '>= 4.0'}
os: [darwin]
- deprecated: The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2
+ deprecated: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
requiresBuild: true
dependencies:
bindings: 1.5.0
@@ -11229,7 +11543,7 @@ packages:
'@types/dom-speech-recognition': 0.0.1
'@types/google.maps': 3.52.4
'@types/hogan.js': 3.0.1
- '@types/qs': 6.9.7
+ '@types/qs': 6.9.12
algoliasearch: 4.16.0
algoliasearch-helper: 3.12.0(algoliasearch@4.16.0)
hogan.js: 3.0.2
@@ -11830,7 +12144,7 @@ packages:
'@jest/expect': 29.5.0
'@jest/test-result': 29.5.0
'@jest/types': 29.5.0
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
chalk: 4.1.2
co: 4.6.0
dedent: 0.7.0
@@ -11917,6 +12231,45 @@ packages:
- supports-color
dev: true
+ /jest-config@29.5.0(@types/node@18.19.20):
+ resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@types/node': '*'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ ts-node:
+ optional: true
+ dependencies:
+ '@babel/core': 7.21.3
+ '@jest/test-sequencer': 29.5.0
+ '@jest/types': 29.5.0
+ '@types/node': 18.19.20
+ babel-jest: 29.5.0(@babel/core@7.21.3)
+ chalk: 4.1.2
+ ci-info: 3.8.0
+ deepmerge: 4.3.1
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ jest-circus: 29.5.0
+ jest-environment-node: 29.5.0
+ jest-get-type: 29.4.3
+ jest-regex-util: 29.4.3
+ jest-resolve: 29.5.0
+ jest-runner: 29.5.0
+ jest-util: 29.5.0
+ jest-validate: 29.5.0
+ micromatch: 4.0.5
+ parse-json: 5.2.0
+ pretty-format: 29.5.0
+ slash: 3.0.0
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/jest-diff@29.5.0:
resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -11975,7 +12328,7 @@ packages:
'@jest/environment': 29.5.0
'@jest/fake-timers': 29.5.0
'@jest/types': 29.5.0
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
jest-mock: 29.5.0
jest-util: 29.5.0
dev: true
@@ -11991,7 +12344,7 @@ packages:
dependencies:
'@jest/types': 26.6.2
'@types/graceful-fs': 4.1.6
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
anymatch: 3.1.3
fb-watchman: 2.0.2
graceful-fs: 4.2.11
@@ -12014,7 +12367,7 @@ packages:
dependencies:
'@jest/types': 29.5.0
'@types/graceful-fs': 4.1.6
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
anymatch: 3.1.3
fb-watchman: 2.0.2
graceful-fs: 4.2.11
@@ -12065,7 +12418,7 @@ packages:
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
'@jest/types': 27.5.1
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
dev: false
/jest-mock@29.5.0:
@@ -12073,7 +12426,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.5.0
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
jest-util: 29.5.0
dev: true
@@ -12133,7 +12486,7 @@ packages:
'@jest/test-result': 29.5.0
'@jest/transform': 29.5.0
'@jest/types': 29.5.0
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
chalk: 4.1.2
emittery: 0.13.1
graceful-fs: 4.2.11
@@ -12164,7 +12517,7 @@ packages:
'@jest/test-result': 29.5.0
'@jest/transform': 29.5.0
'@jest/types': 29.5.0
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
chalk: 4.1.2
cjs-module-lexer: 1.2.2
collect-v8-coverage: 1.0.1
@@ -12187,7 +12540,7 @@ packages:
resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==}
engines: {node: '>= 10.14.2'}
dependencies:
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
graceful-fs: 4.2.11
dev: false
@@ -12227,7 +12580,7 @@ packages:
engines: {node: '>= 10.14.2'}
dependencies:
'@jest/types': 26.6.2
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
chalk: 4.1.2
graceful-fs: 4.2.11
is-ci: 2.0.0
@@ -12239,7 +12592,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.5.0
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
chalk: 4.1.2
ci-info: 3.8.0
graceful-fs: 4.2.11
@@ -12264,7 +12617,7 @@ packages:
dependencies:
'@jest/test-result': 29.5.0
'@jest/types': 29.5.0
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
ansi-escapes: 4.3.2
chalk: 4.1.2
emittery: 0.13.1
@@ -12276,7 +12629,7 @@ packages:
resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
engines: {node: '>= 10.13.0'}
dependencies:
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
merge-stream: 2.0.0
supports-color: 7.2.0
dev: false
@@ -12285,7 +12638,7 @@ packages:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
engines: {node: '>= 10.13.0'}
dependencies:
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
merge-stream: 2.0.0
supports-color: 8.1.1
dev: false
@@ -12294,7 +12647,7 @@ packages:
resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
- '@types/node': 18.15.11
+ '@types/node': 18.19.20
jest-util: 29.5.0
merge-stream: 2.0.0
supports-color: 8.1.1
@@ -12551,6 +12904,12 @@ packages:
/lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+ /linkify-it@4.0.1:
+ resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==}
+ dependencies:
+ uc.micro: 1.0.6
+ dev: false
+
/lint-staged@12.5.0:
resolution: {integrity: sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -12618,6 +12977,12 @@ packages:
wrap-ansi: 7.0.0
dev: true
+ /lit-html@2.8.0:
+ resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==}
+ dependencies:
+ '@types/trusted-types': 2.0.7
+ dev: false
+
/load-json-file@1.1.0:
resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==}
engines: {node: '>=0.10.0'}
@@ -12857,6 +13222,17 @@ packages:
resolution: {integrity: sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==}
dev: false
+ /markdown-it@13.0.2:
+ resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==}
+ hasBin: true
+ dependencies:
+ argparse: 2.0.1
+ entities: 3.0.1
+ linkify-it: 4.0.1
+ mdurl: 1.0.1
+ uc.micro: 1.0.6
+ dev: false
+
/md5.js@1.3.5:
resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==}
dependencies:
@@ -13543,6 +13919,10 @@ packages:
engines: {node: '>=8'}
dev: true
+ /nouislider@15.7.1:
+ resolution: {integrity: sha512-5N7C1ru/i8y3dg9+Z6ilj6+m1EfabvOoaRa7ztpxBSKKRZso4vA52DGSbBJjw5XLtFr/LZ9SgGAXqyVtlVHO5w==}
+ dev: false
+
/npm-run-path@2.0.2:
resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==}
engines: {node: '>=4'}
@@ -13815,6 +14195,10 @@ packages:
resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==}
dev: true
+ /overlayscrollbars@2.5.0:
+ resolution: {integrity: sha512-CWVC2dwS07XZfLHDm5GmZN1iYggiJ8Vufnvzwt0gwR9Yz1hVckKeTxg7VILZeYVGhDYJHZ1Xc8Xfys5dWZ1qiA==}
+ dev: false
+
/p-all@2.1.0:
resolution: {integrity: sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==}
engines: {node: '>=6'}
@@ -14527,6 +14911,10 @@ packages:
ipaddr.js: 1.9.1
dev: false
+ /proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+ dev: false
+
/prr@1.0.1:
resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
dev: false
@@ -14776,6 +15164,25 @@ packages:
use-callback-ref: 1.3.0(@types/react@18.0.31)(react@18.2.0)
use-sidecar: 1.1.2(@types/react@18.0.31)(react@18.2.0)
+ /react-focus-lock@2.9.4(@types/react@18.2.60)(react@18.2.0):
+ resolution: {integrity: sha512-7pEdXyMseqm3kVjhdVH18sovparAzLg5h6WvIx7/Ck3ekjhrrDMEegHSa3swwC8wgfdd7DIdUVRGeiHT9/7Sgg==}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.21.0
+ '@types/react': 18.2.60
+ focus-lock: 0.11.6
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-clientside-effect: 1.2.6(react@18.2.0)
+ use-callback-ref: 1.3.0(@types/react@18.2.60)(react@18.2.0)
+ use-sidecar: 1.1.2(@types/react@18.2.60)(react@18.2.0)
+ dev: false
+
/react-hook-form@7.43.8(react@18.2.0):
resolution: {integrity: sha512-BQm+Ge5KjTk1EchDBRhdP8Pkb7MArO2jFF+UWYr3rtvh6197khi22uloLqlWeuY02ItlCzPunPsFt1/q9wQKnw==}
engines: {node: '>=12.22.0'}
@@ -14905,6 +15312,22 @@ packages:
react-style-singleton: 2.2.1(@types/react@18.0.31)(react@18.2.0)
tslib: 2.5.0
+ /react-remove-scroll-bar@2.3.4(@types/react@18.2.60)(react@18.2.0):
+ resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@types/react': 18.2.60
+ react: 18.2.0
+ react-style-singleton: 2.2.1(@types/react@18.2.60)(react@18.2.0)
+ tslib: 2.5.0
+ dev: false
+
/react-remove-scroll@2.5.5(@types/react@18.0.31)(react@18.2.0):
resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==}
engines: {node: '>=10'}
@@ -14923,6 +15346,25 @@ packages:
use-callback-ref: 1.3.0(@types/react@18.0.31)(react@18.2.0)
use-sidecar: 1.1.2(@types/react@18.0.31)(react@18.2.0)
+ /react-remove-scroll@2.5.5(@types/react@18.2.60)(react@18.2.0):
+ resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@types/react': 18.2.60
+ react: 18.2.0
+ react-remove-scroll-bar: 2.3.4(@types/react@18.2.60)(react@18.2.0)
+ react-style-singleton: 2.2.1(@types/react@18.2.60)(react@18.2.0)
+ tslib: 2.5.0
+ use-callback-ref: 1.3.0(@types/react@18.2.60)(react@18.2.0)
+ use-sidecar: 1.1.2(@types/react@18.2.60)(react@18.2.0)
+ dev: false
+
/react-ssr-prepass@1.5.0(react@18.2.0):
resolution: {integrity: sha512-yFNHrlVEReVYKsLI5lF05tZoHveA5pGzjFbFJY/3pOqqjGOmMmqx83N4hIjN2n6E1AOa+eQEUxs3CgRnPmT0RQ==}
peerDependencies:
@@ -14947,6 +15389,23 @@ packages:
react: 18.2.0
tslib: 2.5.0
+ /react-style-singleton@2.2.1(@types/react@18.2.60)(react@18.2.0):
+ resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@types/react': 18.2.60
+ get-nonce: 1.0.1
+ invariant: 2.2.4
+ react: 18.2.0
+ tslib: 2.5.0
+ dev: false
+
/react@18.2.0:
resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
engines: {node: '>=0.10.0'}
@@ -16588,7 +17047,7 @@ packages:
engines: {node: '>=6.10'}
dev: false
- /ts-node@10.9.1(@swc/core@1.3.42)(@types/node@18.15.11)(typescript@4.9.5):
+ /ts-node@10.9.1(@swc/core@1.3.42)(@types/node@18.19.20)(typescript@4.9.5):
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
hasBin: true
peerDependencies:
@@ -16608,6 +17067,37 @@ packages:
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.3
+ '@types/node': 18.19.20
+ acorn: 8.8.2
+ acorn-walk: 8.2.0
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 4.9.5
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+ dev: true
+
+ /ts-node@10.9.1(@types/node@18.15.11)(typescript@4.9.5):
+ resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.9
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.3
'@types/node': 18.15.11
acorn: 8.8.2
acorn-walk: 8.2.0
@@ -16815,6 +17305,10 @@ packages:
engines: {node: '>=4.2.0'}
hasBin: true
+ /uc.micro@1.0.6:
+ resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==}
+ dev: false
+
/ufo@0.8.6:
resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==}
dev: true
@@ -16844,6 +17338,9 @@ packages:
resolution: {integrity: sha512-kuZwRKV615lEw/Xx3Iz56FKk3nOeOVGaVmw0eg+x4Mne28lCotNFbBhDW7dEBCBKyKbRQiCadEZeNAFPVC5cgw==}
dev: true
+ /undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
/undici@5.21.0:
resolution: {integrity: sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==}
engines: {node: '>=12.18'}
@@ -17147,6 +17644,21 @@ packages:
react: 18.2.0
tslib: 2.5.0
+ /use-callback-ref@1.3.0(@types/react@18.2.60)(react@18.2.0):
+ resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@types/react': 18.2.60
+ react: 18.2.0
+ tslib: 2.5.0
+ dev: false
+
/use-sidecar@1.1.2(@types/react@18.0.31)(react@18.2.0):
resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
engines: {node: '>=10'}
@@ -17162,6 +17674,22 @@ packages:
react: 18.2.0
tslib: 2.5.0
+ /use-sidecar@1.1.2(@types/react@18.2.60)(react@18.2.0):
+ resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@types/react': 18.2.60
+ detect-node-es: 1.1.0
+ react: 18.2.0
+ tslib: 2.5.0
+ dev: false
+
/use-sync-external-store@1.2.0(react@18.2.0):
resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
peerDependencies:
diff --git a/scripts/.env.example b/scripts/.env.example
index 8fea423..278b9b7 100644
--- a/scripts/.env.example
+++ b/scripts/.env.example
@@ -4,4 +4,8 @@ ALGOLIA_INDEX_NAME=products
VOUCHERIFY_API_URL=
VOUCHERIFY_APPLICATION_ID=
-VOUCHERIFY_SECRET_KEY=
\ No newline at end of file
+VOUCHERIFY_SECRET_KEY=
+# Klevu API key that is found in the Klevu Merchant Center
+KLEVU_API_KEY=
+# Klevu REST key that is found in the Klevu Merchant Center
+KLEVU_REST_KEY=
diff --git a/scripts/package.json b/scripts/package.json
index ac638b9..9388f2a 100644
--- a/scripts/package.json
+++ b/scripts/package.json
@@ -6,7 +6,8 @@
"algolia-setup": "ts-node src/algolia-setup/index.ts",
"voucherify-preconfigure": "ts-node src/voucherify-setup/index.ts",
"voucherify-activate": "ts-node src/voucherify-setup/activate.ts",
- "voucherify-deactivate": "ts-node src/voucherify-setup/deactivate.ts"
+ "voucherify-deactivate": "ts-node src/voucherify-setup/deactivate.ts",
+ "klevu-setup": "ts-node src/klevu-setup/index.ts"
},
"devDependencies": {
"@types/node": "^18.6.3",
@@ -15,6 +16,7 @@
"@voucherify/sdk": "^2.5.0"
},
"dependencies": {
+ "@klevu/indexing": "^0.0.2",
"algoliasearch": "^4.14.3",
"dotenv": "^16.0.3"
}
diff --git a/scripts/src/klevu-setup/index.ts b/scripts/src/klevu-setup/index.ts
new file mode 100644
index 0000000..1b8c1bc
--- /dev/null
+++ b/scripts/src/klevu-setup/index.ts
@@ -0,0 +1,172 @@
+import { config } from 'dotenv'
+import { createKlevuClient } from '@klevu/indexing'
+import products from '../../../packages/commerce-generic/src/data/products.json'
+import categories from '../../../packages/commerce-generic/src/data/categories.json'
+
+config()
+
+const KLEVU_API_KEY = process.env.KLEVU_API_KEY
+const KLEVU_REST_KEY = process.env.KLEVU_REST_KEY
+const BATCH_SIZE = 250
+
+const klevuKeysMissing = [KLEVU_API_KEY, KLEVU_REST_KEY].some((key) => !key)
+const cagegoryNameMap = categories.reduce((acc, category) => {
+ acc[category.name] = category
+ return acc
+}, {})
+
+const klevuSetup = async () => {
+ console.log('Starting setting up Klevu!')
+ try {
+ if (klevuKeysMissing) {
+ console.error(
+ 'You are missing some Klevu keys in your .env file.',
+ `You must set the following: KLEVU_API_KEY, KLEVU_REST_KEY.`
+ )
+ throw new Error('KLEVU_MISSING_KEYS')
+ }
+
+ const client = createKlevuClient(KLEVU_API_KEY, KLEVU_REST_KEY, {
+ logger: true,
+ })
+
+ console.log('=== Indexing attributes ===')
+
+ // Create few new attributes that do not exists on the default Klevu index
+ const slugResponse = await client.newAttribute({
+ parameter: {
+ attributeName: 'slug',
+ },
+ requestBody: {
+ datatype: 'STRING',
+ filterable: false,
+ label: {
+ default: 'Slug',
+ },
+ returnable: true,
+ searchable: true,
+ },
+ })
+
+ console.log(slugResponse.message)
+
+ const brandResponse = await client.newAttribute({
+ parameter: {
+ attributeName: 'brand',
+ },
+ requestBody: {
+ datatype: 'STRING',
+ filterable: true,
+ label: {
+ default: 'Brand',
+ },
+ returnable: true,
+ searchable: true,
+ },
+ })
+
+ console.log(brandResponse.message)
+
+ const materialResponse = await client.newAttribute({
+ parameter: {
+ attributeName: 'materialAndCare',
+ },
+ requestBody: {
+ datatype: 'STRING',
+ filterable: false,
+ label: {
+ default: 'Material & Care',
+ },
+ returnable: true,
+ searchable: true,
+ },
+ })
+
+ console.log(materialResponse.message)
+
+ console.log('=== Indexing categories ===')
+
+ // index categories
+ const categoryResponse = await client.addOrReplaceBatch({
+ requestBody: categories.map((category) => ({
+ id: category.id,
+ type: 'KLEVU_CATEGORY',
+ attributes: {
+ name: {
+ default: category.name,
+ },
+ categoryPath: category.slug,
+ slug: category.slug,
+ url: category.slug,
+ prices: [],
+ },
+ })),
+ })
+
+ console.log(categoryResponse.message)
+
+ console.log('=== Indexing products ===')
+
+ for (let i = 0; i < products.length; i += BATCH_SIZE) {
+ // Create a batch
+ const batch = products.slice(i, i + BATCH_SIZE)
+
+ const productResponse = await client.addOrReplaceBatch({
+ requestBody: batch.map((product) => ({
+ id: product.id,
+ type: 'KLEVU_PRODUCT',
+ relations: {
+ categories: {
+ values: [cagegoryNameMap[product.category].id],
+ },
+ },
+ attributes: {
+ name: {
+ default: product.name,
+ },
+ prices: [
+ {
+ amount: product.price,
+ currency: 'USD',
+ type: 'defaultPrice',
+ },
+ {
+ amount: product.price,
+ currency: 'USD',
+ type: 'salePrice',
+ },
+ ],
+ slug: product.slug,
+ url: product.slug,
+ brand: product.brand,
+ categoryPath: cagegoryNameMap[product.category].slug,
+ images: product.images.map((image) => ({
+ url: image.url,
+ type: 'default',
+ })),
+ sku: product.sku,
+ description: {
+ default: product.description,
+ },
+ materialAndCare: product.materialAndCare,
+ inStock: true,
+ },
+ display: {
+ default: product,
+ },
+ })),
+ })
+
+ console.log(productResponse.message)
+ }
+
+ console.log('Finished setting up Klevu!')
+ } catch (err) {
+ console.error(err.message)
+ throw err
+ }
+}
+
+;(async () => {
+ await klevuSetup()
+})()