diff --git a/.gitignore b/.gitignore
index ee394a098..ea95a50ff 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,3 +39,5 @@ next-env.d.ts
/test-results/
/playwright-report/
/playwright/.cache/
+
+.idea/
diff --git a/README.md b/README.md
index eafada648..932585572 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fsaleor%2Fstorefront&env=NEXT_PUBLIC_SALEOR_API_URL&envDescription=Full%20Saleor%20GraphQL%20endpoint%20URL%2C%20eg%3A%20https%3A%2F%2Fstorefront1.saleor.cloud%2Fgraphql%2F&project-name=my-saleor-storefront&repository-name=my-saleor-storefront&demo-title=Saleor%20Next.js%20Storefront&demo-description=Starter%20pack%20for%20building%20performant%20e-commerce%20experiences%20with%20Saleor.&demo-url=https%3A%2F%2Fstorefront.saleor.io%2F&demo-image=https%3A%2F%2Fstorefront-d5h86wzey-saleorcommerce.vercel.app%2Fopengraph-image.png%3F4db0ee8cf66e90af)
[![Storefront Demo](https://img.shields.io/badge/VIEW%20DEMO-DFDFDF?style=for-the-badge)](https://storefront.saleor.io)
-![Nextjs Storefront](./screenshot.png)
+![Nextjs Storefront](./public/screenshot.png)
-
Next.js Storefront
+
Saleor Next.js Storefront
Starter pack for building performant e-commerce experiences with
Saleor.
@@ -73,6 +73,7 @@
> [!IMPORTANT]
> To quickly get started with the backend, use a free developer account at [Saleor Cloud](https://cloud.saleor.io/).
+> You can also [run Saleor locally](https://docs.saleor.io/docs/3.x/setup/docker-compose).
Install the latest version of the Saleor CLI by running the following command:
@@ -103,7 +104,7 @@ Currently, Saleor Storefront supports payments via the [Saleor Adyen App](https:
## Development
-Clone and repo and copy `.env.example` to `.env`:
+Copy environment variables from `.env.example` to `.env`:
```bash
cp .env.example .env
diff --git a/package.json b/package.json
index edfd3adea..389552029 100644
--- a/package.json
+++ b/package.json
@@ -58,10 +58,10 @@
"@types/react": "18.2.38",
"@types/react-dom": "18.2.17",
"@types/url-join": "4.0.3",
- "@typescript-eslint/eslint-plugin": "6.12.0",
- "@typescript-eslint/parser": "6.12.0",
+ "@typescript-eslint/eslint-plugin": "6.14.0",
+ "@typescript-eslint/parser": "6.14.0",
"autoprefixer": "10.4.16",
- "eslint": "8.54.0",
+ "eslint": "8.56.0",
"eslint-config-next": "14.0.3",
"eslint-config-prettier": "9.0.0",
"eslint-plugin-import": "2.29.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index dd924a2fd..f38b23b1b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -134,29 +134,29 @@ devDependencies:
specifier: 4.0.3
version: 4.0.3
'@typescript-eslint/eslint-plugin':
- specifier: 6.12.0
- version: 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.3.2)
+ specifier: 6.14.0
+ version: 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.2)
'@typescript-eslint/parser':
- specifier: 6.12.0
- version: 6.12.0(eslint@8.54.0)(typescript@5.3.2)
+ specifier: 6.14.0
+ version: 6.14.0(eslint@8.56.0)(typescript@5.3.2)
autoprefixer:
specifier: 10.4.16
version: 10.4.16(postcss@8.4.31)
eslint:
- specifier: 8.54.0
- version: 8.54.0
+ specifier: 8.56.0
+ version: 8.56.0
eslint-config-next:
specifier: 14.0.3
- version: 14.0.3(eslint@8.54.0)(typescript@5.3.2)
+ version: 14.0.3(eslint@8.56.0)(typescript@5.3.2)
eslint-config-prettier:
specifier: 9.0.0
- version: 9.0.0(eslint@8.54.0)
+ version: 9.0.0(eslint@8.56.0)
eslint-plugin-import:
specifier: 2.29.0
- version: 2.29.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0)
+ version: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0)
eslint-plugin-playwright:
specifier: 0.18.0
- version: 0.18.0(eslint@8.54.0)
+ version: 0.18.0(eslint@8.56.0)
graphql-tag:
specifier: 2.12.6
version: 2.12.6(graphql@16.8.1)
@@ -820,13 +820,13 @@ packages:
'@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0
- /@eslint-community/eslint-utils@4.4.0(eslint@8.54.0):
+ /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
dependencies:
- eslint: 8.54.0
+ eslint: 8.56.0
eslint-visitor-keys: 3.4.3
dev: true
@@ -835,8 +835,8 @@ packages:
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
dev: true
- /@eslint/eslintrc@2.1.3:
- resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==}
+ /@eslint/eslintrc@2.1.4:
+ resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
ajv: 6.12.6
@@ -852,8 +852,8 @@ packages:
- supports-color
dev: true
- /@eslint/js@8.54.0:
- resolution: {integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==}
+ /@eslint/js@8.56.0:
+ resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
@@ -1960,8 +1960,8 @@ packages:
'@types/node': 20.10.0
dev: true
- /@typescript-eslint/eslint-plugin@6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.3.2):
- resolution: {integrity: sha512-XOpZ3IyJUIV1b15M7HVOpgQxPPF7lGXgsfcEIu3yDxFPaf/xZKt7s9QO/pbk7vpWQyVulpJbu4E5LwpZiQo4kA==}
+ /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.2):
+ resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
'@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
@@ -1972,13 +1972,13 @@ packages:
optional: true
dependencies:
'@eslint-community/regexpp': 4.10.0
- '@typescript-eslint/parser': 6.12.0(eslint@8.54.0)(typescript@5.3.2)
- '@typescript-eslint/scope-manager': 6.12.0
- '@typescript-eslint/type-utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2)
- '@typescript-eslint/utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2)
- '@typescript-eslint/visitor-keys': 6.12.0
+ '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.2)
+ '@typescript-eslint/scope-manager': 6.14.0
+ '@typescript-eslint/type-utils': 6.14.0(eslint@8.56.0)(typescript@5.3.2)
+ '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.2)
+ '@typescript-eslint/visitor-keys': 6.14.0
debug: 4.3.4
- eslint: 8.54.0
+ eslint: 8.56.0
graphemer: 1.4.0
ignore: 5.3.0
natural-compare: 1.4.0
@@ -1989,8 +1989,8 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/parser@6.12.0(eslint@8.54.0)(typescript@5.3.2):
- resolution: {integrity: sha512-s8/jNFPKPNRmXEnNXfuo1gemBdVmpQsK1pcu+QIvuNJuhFzGrpD7WjOcvDc/+uEdfzSYpNu7U/+MmbScjoQ6vg==}
+ /@typescript-eslint/parser@6.14.0(eslint@8.56.0)(typescript@5.3.2):
+ resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
@@ -1999,27 +1999,27 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/scope-manager': 6.12.0
- '@typescript-eslint/types': 6.12.0
- '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2)
- '@typescript-eslint/visitor-keys': 6.12.0
+ '@typescript-eslint/scope-manager': 6.14.0
+ '@typescript-eslint/types': 6.14.0
+ '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.2)
+ '@typescript-eslint/visitor-keys': 6.14.0
debug: 4.3.4
- eslint: 8.54.0
+ eslint: 8.56.0
typescript: 5.3.2
transitivePeerDependencies:
- supports-color
dev: true
- /@typescript-eslint/scope-manager@6.12.0:
- resolution: {integrity: sha512-5gUvjg+XdSj8pcetdL9eXJzQNTl3RD7LgUiYTl8Aabdi8hFkaGSYnaS6BLc0BGNaDH+tVzVwmKtWvu0jLgWVbw==}
+ /@typescript-eslint/scope-manager@6.14.0:
+ resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
- '@typescript-eslint/types': 6.12.0
- '@typescript-eslint/visitor-keys': 6.12.0
+ '@typescript-eslint/types': 6.14.0
+ '@typescript-eslint/visitor-keys': 6.14.0
dev: true
- /@typescript-eslint/type-utils@6.12.0(eslint@8.54.0)(typescript@5.3.2):
- resolution: {integrity: sha512-WWmRXxhm1X8Wlquj+MhsAG4dU/Blvf1xDgGaYCzfvStP2NwPQh6KBvCDbiOEvaE0filhranjIlK/2fSTVwtBng==}
+ /@typescript-eslint/type-utils@6.14.0(eslint@8.56.0)(typescript@5.3.2):
+ resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
@@ -2028,23 +2028,23 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2)
- '@typescript-eslint/utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2)
+ '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.2)
+ '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.2)
debug: 4.3.4
- eslint: 8.54.0
+ eslint: 8.56.0
ts-api-utils: 1.0.3(typescript@5.3.2)
typescript: 5.3.2
transitivePeerDependencies:
- supports-color
dev: true
- /@typescript-eslint/types@6.12.0:
- resolution: {integrity: sha512-MA16p/+WxM5JG/F3RTpRIcuOghWO30//VEOvzubM8zuOOBYXsP+IfjoCXXiIfy2Ta8FRh9+IO9QLlaFQUU+10Q==}
+ /@typescript-eslint/types@6.14.0:
+ resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==}
engines: {node: ^16.0.0 || >=18.0.0}
dev: true
- /@typescript-eslint/typescript-estree@6.12.0(typescript@5.3.2):
- resolution: {integrity: sha512-vw9E2P9+3UUWzhgjyyVczLWxZ3GuQNT7QpnIY3o5OMeLO/c8oHljGc8ZpryBMIyympiAAaKgw9e5Hl9dCWFOYw==}
+ /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.2):
+ resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
typescript: '*'
@@ -2052,8 +2052,8 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/types': 6.12.0
- '@typescript-eslint/visitor-keys': 6.12.0
+ '@typescript-eslint/types': 6.14.0
+ '@typescript-eslint/visitor-keys': 6.14.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
@@ -2064,30 +2064,30 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/utils@6.12.0(eslint@8.54.0)(typescript@5.3.2):
- resolution: {integrity: sha512-LywPm8h3tGEbgfyjYnu3dauZ0U7R60m+miXgKcZS8c7QALO9uWJdvNoP+duKTk2XMWc7/Q3d/QiCuLN9X6SWyQ==}
+ /@typescript-eslint/utils@6.14.0(eslint@8.56.0)(typescript@5.3.2):
+ resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0)
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
'@types/json-schema': 7.0.15
'@types/semver': 7.5.6
- '@typescript-eslint/scope-manager': 6.12.0
- '@typescript-eslint/types': 6.12.0
- '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2)
- eslint: 8.54.0
+ '@typescript-eslint/scope-manager': 6.14.0
+ '@typescript-eslint/types': 6.14.0
+ '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.2)
+ eslint: 8.56.0
semver: 7.5.4
transitivePeerDependencies:
- supports-color
- typescript
dev: true
- /@typescript-eslint/visitor-keys@6.12.0:
- resolution: {integrity: sha512-rg3BizTZHF1k3ipn8gfrzDXXSFKyOEB5zxYXInQ6z0hUvmQlhaZQzK+YmHmNViMA9HzW5Q9+bPPt90bU6GQwyw==}
+ /@typescript-eslint/visitor-keys@6.14.0:
+ resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
- '@typescript-eslint/types': 6.12.0
+ '@typescript-eslint/types': 6.14.0
eslint-visitor-keys: 3.4.3
dev: true
@@ -3137,7 +3137,7 @@ packages:
engines: {node: '>=10'}
dev: true
- /eslint-config-next@14.0.3(eslint@8.54.0)(typescript@5.3.2):
+ /eslint-config-next@14.0.3(eslint@8.56.0)(typescript@5.3.2):
resolution: {integrity: sha512-IKPhpLdpSUyKofmsXUfrvBC49JMUTdeaD8ZIH4v9Vk0sC1X6URTuTJCLtA0Vwuj7V/CQh0oISuSTvNn5//Buew==}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0
@@ -3148,27 +3148,27 @@ packages:
dependencies:
'@next/eslint-plugin-next': 14.0.3
'@rushstack/eslint-patch': 1.6.0
- '@typescript-eslint/parser': 6.12.0(eslint@8.54.0)(typescript@5.3.2)
- eslint: 8.54.0
+ '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.2)
+ eslint: 8.56.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.54.0)
- eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0)
- eslint-plugin-jsx-a11y: 6.8.0(eslint@8.54.0)
- eslint-plugin-react: 7.33.2(eslint@8.54.0)
- eslint-plugin-react-hooks: 4.6.0(eslint@8.54.0)
+ eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.56.0)
+ eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0)
+ eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0)
+ eslint-plugin-react: 7.33.2(eslint@8.56.0)
+ eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0)
typescript: 5.3.2
transitivePeerDependencies:
- eslint-import-resolver-webpack
- supports-color
dev: true
- /eslint-config-prettier@9.0.0(eslint@8.54.0):
+ /eslint-config-prettier@9.0.0(eslint@8.56.0):
resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
dependencies:
- eslint: 8.54.0
+ eslint: 8.56.0
dev: true
/eslint-import-resolver-node@0.3.9:
@@ -3181,7 +3181,7 @@ packages:
- supports-color
dev: true
- /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.54.0):
+ /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.56.0):
resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@@ -3190,9 +3190,9 @@ packages:
dependencies:
debug: 4.3.4
enhanced-resolve: 5.15.0
- eslint: 8.54.0
- eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0)
- eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0)
+ eslint: 8.56.0
+ eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0)
+ eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0)
fast-glob: 3.3.2
get-tsconfig: 4.7.2
is-core-module: 2.13.1
@@ -3204,7 +3204,7 @@ packages:
- supports-color
dev: true
- /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0):
+ /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0):
resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
engines: {node: '>=4'}
peerDependencies:
@@ -3225,16 +3225,16 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
- '@typescript-eslint/parser': 6.12.0(eslint@8.54.0)(typescript@5.3.2)
+ '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.2)
debug: 3.2.7
- eslint: 8.54.0
+ eslint: 8.56.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.54.0)
+ eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.56.0)
transitivePeerDependencies:
- supports-color
dev: true
- /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0):
+ /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0):
resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==}
engines: {node: '>=4'}
peerDependencies:
@@ -3244,16 +3244,16 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
- '@typescript-eslint/parser': 6.12.0(eslint@8.54.0)(typescript@5.3.2)
+ '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.2)
array-includes: 3.1.7
array.prototype.findlastindex: 1.2.3
array.prototype.flat: 1.3.2
array.prototype.flatmap: 1.3.2
debug: 3.2.7
doctrine: 2.1.0
- eslint: 8.54.0
+ eslint: 8.56.0
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0)
+ eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0)
hasown: 2.0.0
is-core-module: 2.13.1
is-glob: 4.0.3
@@ -3269,7 +3269,7 @@ packages:
- supports-color
dev: true
- /eslint-plugin-jsx-a11y@6.8.0(eslint@8.54.0):
+ /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0):
resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==}
engines: {node: '>=4.0'}
peerDependencies:
@@ -3285,7 +3285,7 @@ packages:
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
es-iterator-helpers: 1.0.15
- eslint: 8.54.0
+ eslint: 8.56.0
hasown: 2.0.0
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -3294,7 +3294,7 @@ packages:
object.fromentries: 2.0.7
dev: true
- /eslint-plugin-playwright@0.18.0(eslint@8.54.0):
+ /eslint-plugin-playwright@0.18.0(eslint@8.56.0):
resolution: {integrity: sha512-VLvKOAaDvRTonUeI3J8plXIJQuReXjbjrgDGoNwsiydwdqk3lt+mbzgsBcxJscMJDHc9XgnLVo0nWTiaYHLGYQ==}
peerDependencies:
eslint: '>=7'
@@ -3303,20 +3303,20 @@ packages:
eslint-plugin-jest:
optional: true
dependencies:
- eslint: 8.54.0
+ eslint: 8.56.0
globals: 13.23.0
dev: true
- /eslint-plugin-react-hooks@4.6.0(eslint@8.54.0):
+ /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0):
resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
engines: {node: '>=10'}
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
dependencies:
- eslint: 8.54.0
+ eslint: 8.56.0
dev: true
- /eslint-plugin-react@7.33.2(eslint@8.54.0):
+ /eslint-plugin-react@7.33.2(eslint@8.56.0):
resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==}
engines: {node: '>=4'}
peerDependencies:
@@ -3327,7 +3327,7 @@ packages:
array.prototype.tosorted: 1.1.2
doctrine: 2.1.0
es-iterator-helpers: 1.0.15
- eslint: 8.54.0
+ eslint: 8.56.0
estraverse: 5.3.0
jsx-ast-utils: 3.3.5
minimatch: 3.1.2
@@ -3354,15 +3354,15 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
- /eslint@8.54.0:
- resolution: {integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==}
+ /eslint@8.56.0:
+ resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0)
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
'@eslint-community/regexpp': 4.10.0
- '@eslint/eslintrc': 2.1.3
- '@eslint/js': 8.54.0
+ '@eslint/eslintrc': 2.1.4
+ '@eslint/js': 8.56.0
'@humanwhocodes/config-array': 0.11.13
'@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8
diff --git a/screenshot.png b/public/screenshot.png
similarity index 100%
rename from screenshot.png
rename to public/screenshot.png
diff --git a/src/ui/components/ProductList.tsx b/src/ui/components/ProductList.tsx
index 55cf84f8e..df71b06be 100644
--- a/src/ui/components/ProductList.tsx
+++ b/src/ui/components/ProductList.tsx
@@ -12,7 +12,7 @@ export const ProductList = ({ products }: { products: readonly ProductListItemFr
))}