diff --git a/docs/api-reference/api-reference.mdx b/docs/api-reference/api-reference.mdx
index b130560e9..8d7b9dcc2 100644
--- a/docs/api-reference/api-reference.mdx
+++ b/docs/api-reference/api-reference.mdx
@@ -1,4 +1,5 @@
---
+sidebar_position: 1
title: API reference
---
diff --git a/docs/api-reference/channels/api.mdx b/docs/api-reference/channels/api.mdx
deleted file mode 100644
index ab952aab3..000000000
--- a/docs/api-reference/channels/api.mdx
+++ /dev/null
@@ -1,460 +0,0 @@
----
-title: Channels API guide
-sidebar_label: API guide
----
-
-## API examples
-
-### Getting channel details
-
-Use [`channel`](api-reference/channels/queries/channel.mdx) query to get channel details.
-
-Channel query requires channel ID, but from Saleor 3.6 it can be executed with channel slug too.
-
-Available fields:
-
-- `id`: Channel object ID
-- `slug`: When using channel-dependant queries, the slug is used to select the right one (for example, when requesting Product details)
-- `name`: Channel name
-- `isActive`: Flag signalling that the channel is available for shop customers.
-- `currencyCode`: Currency code used by the channel.
-- `hasOrders`: Returns `true` when there are already created orders using that channel. If that's the only channel using this currency, you won't be able to remove it.
-- `defaultCountry`: Default country for the channel. The default country will be used in checkout to determine the stock quantities or calculate taxes when the country was not explicitly provided, either as a query parameter or through a shipping address.
-- `warehouses`: Warehouses that are available in the given channel.
-- `countries`: List of shippable countries for the channel.
-- `availableShippingMethodsPerCountry`: Shipping methods that are available for the channel.
-- `stockSettings`: contains all stock-related settings,
- e.g. the [allocation strategy](developer/stock-allocation.mdx#allocation-strategies) for the channel.
-- `orderSettings`: Channel-specific order settings.
-
-Request:
-
-```graphql
-query {
- channel(slug: "mobile") {
- id
- slug
- name
- isActive
- currencyCode
- hasOrders
- defaultCountry {
- code
- country
- }
- warehouses {
- slug
- }
- countries {
- code
- country
- }
- availableShippingMethodsPerCountry {
- countryCode
- shippingMethods {
- id
- name
- }
- }
- stockSettings {
- allocationStrategy
- }
- orderSettings {
- allowUnpaidOrders
- }
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channel": {
- "id": "Q2hhbm5lbDo0MzM=",
- "slug": "mobile",
- "name": "Mobile",
- "isActive": false,
- "currencyCode": "USD",
- "hasOrders": true,
- "defaultCountry": {
- "code": "US",
- "country": "United States of America"
- },
- "warehouses": [
- {
- "slug": "oceania"
- },
- {
- "slug": "europe"
- }
- ],
- "availableShippingMethodsPerCountry": [
- {
- "countryCode": "AD",
- "shippingMethods": [
- {
- "id": "U2hpcHBpbmdNZXRob2Q6Mg==",
- "name": "DHL"
- },
- {
- "id": "U2hpcHBpbmdNZXRob2Q6Mw==",
- "name": "UPS"
- },
- {
- "id": "U2hpcHBpbmdNZXRob2Q6NA==",
- "name": "Registered priority"
- },
- {
- "id": "U2hpcHBpbmdNZXRob2Q6NQ==",
- "name": "DB Schenker"
- }
- ]
- }
- // ... more countries
- ],
- "stockSettings": {
- "allocationStrategy": "PRIORITIZE_HIGH_STOCK"
- },
- "orderSettings": {
- "allowUnpaidOrders": false
- }
- }
- }
-}
-```
-
-### Permissions
-
-Listing channels is allowed only for users with the active [`isStaff`](api-reference/users/objects/user.mdx#userisstaffboolean--) flag.
-
-You need the `MANAGE_CHANNELS` permission to create, edit, and remove channels.
-Changing `ChannelListing` does not require additional permissions. For example, changing Product availability requires only `MANAGE_PRODUCTS` permission.
-
-Objects with customized per-channel visibility are restricted by channel permissions.
-If a user with restricted channel access fetches per-channel objects, only objects from accessible channels will be returned.
-You can read more about channel permissions [here](developer/permissions.mdx).
-
-### Creating a new channel
-
-You can create a new channel using [`channelCreate`](api-reference/channels/mutations/channel-create.mdx) mutation.
-During checkout creation, you can define the allocation strategy. Right now the
-two possible options are available: `PRIORITIZE_HIGH_STOCK` and `PRIORITIZE_SORTING_ORDER`,
-the `PRIORITIZE_SORTING_ORDER` strategy is used as default.
-You can read more about the allocation strategies [`here`](developer/stock-allocation.mdx#allocation-strategies).
-
-Request:
-
-```graphql
-mutation {
- channelCreate(
- input: {
- currencyCode: "USD"
- defaultCountry: US
- name: "Mobile"
- slug: "mobile"
- stockSettings: { allocationStrategy: PRIORITIZE_HIGH_STOCK }
- }
- ) {
- channel {
- id
- isActive
- name
- slug
- currencyCode
- defaultCountry {
- code
- country
- }
- stockSettings {
- allocationStrategy
- }
- }
- errors {
- code
- field
- message
- }
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channelCreate": {
- "channel": {
- "id": "Q2hhbm5lbDo0MzM=",
- "isActive": false,
- "name": "Mobile",
- "slug": "mobile",
- "currencyCode": "USD",
- "defaultCountry": {
- "code": "US",
- "country": "United States of America"
- },
- "stockSettings": {
- "allocationStrategy": "PRIORITIZE_HIGH_STOCK"
- }
- },
- "errors": []
- }
- }
-}
-```
-
-### Channel list
-
-Because some of the channels may be considered non-public (for example - a channel for business partners), non-staff users cannot use the [`channels`](api-reference/channels/queries/channels.mdx) query.
-
-Request:
-
-```graphql
-query {
- channels {
- name
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channels": [
- {
- "name": "Mobile"
- },
- {
- "name": "Website"
- }
- ]
- }
-}
-```
-
-#### Activate / Deactivate channel
-
-If you want to make the channel unavailable for customers, you can change its status to `deactivated` using [`channelDeactivate`](api-reference/channels/mutations/channel-deactivate.mdx) mutation:
-
-```graphql
-mutation {
- channelDeactivate(slug: "default-channel") {
- channel {
- name
- isActive
- }
- errors {
- message
- }
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channelDeactivate": {
- "channel": {
- "name": "Facebook",
- "isActive": false
- },
- "channelErrors": []
- }
- }
-}
-```
-
-And to reverse the previous operation use the [`channelActivate`](api-reference/channels/mutations/channel-activate.mdx) mutation:
-
-```graphql
-mutation {
- channelActivate(slug: "default-channel") {
- channel {
- name
- isActive
- }
- errors {
- message
- }
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channelDeactivate": {
- "channel": {
- "name": "Facebook",
- "isActive": true
- },
- "channelErrors": []
- }
- }
-}
-```
-
-### Reorder warehouses within channels
-
-The warehouses assigned to the channel can be sorted. The provided order defines the
-warehouses' order used in `PRIORITIZE_SORTING_ORDER`
-[allocation strategy](developer/stock-allocation.mdx#allocation-strategies).
-The `sort_order` in `moves` input represents the new relative position of the item.
-So when 1 is provided, the item will be moved one position forward; when -1 - one
-position backward.
-
-Let's assume that we have a `channel` with three warehouses in the following order.
-
-```json
-{
- "data": {
- "channel": {
- "id": "Q2hhbm5lbDox",
- "warehouses": [
- {
- "id": "V2FyZWhvdXNlOjU1NTZiOWI0LTc1ZTItNGI3YS1hZWM1LTQxOTY4NDA2OGE4OA==",
- "slug": "europe"
- },
- {
- "id": "V2FyZWhvdXNlOjQwZWY1MTQwLWQ5OTYtNDVlNy04NzUzLTlkZThkMTdhMjg1Yw==",
- "slug": "oceania"
- },
- {
- "id": "V2FyZWhvdXNlOjY4M2FkMzZhLTRmNjktNDI2ZS1iYzUyLTMyZGJiZTQ2NjUyZA==",
- "slug": "americas"
- }
- ]
- }
- }
-}
-```
-
-To move the `americas` warehouse to the first place and the `europe` warehouse to
-third, we can run the following mutation.
-
-```graphql
-mutation {
- channelReorderWarehouses(
- channelId: "Q2hhbm5lbDox"
- moves: [
- {
- # move for `americas` warehouse
- id: "V2FyZWhvdXNlOjY4M2FkMzZhLTRmNjktNDI2ZS1iYzUyLTMyZGJiZTQ2NjUyZA=="
- sortOrder: -2
- }
- {
- # move for `europe` warehouse
- id: "V2FyZWhvdXNlOjU1NTZiOWI0LTc1ZTItNGI3YS1hZWM1LTQxOTY4NDA2OGE4OA=="
- sortOrder: 1
- }
- ]
- ) {
- channel {
- id
- warehouses {
- id
- slug
- }
- }
- errors {
- field
- code
- message
- warehouses
- }
- }
-}
-```
-
-And as a response, we get:
-
-```json
-{
- "data": {
- "channelReorderWarehouses": {
- "channel": {
- "id": "Q2hhbm5lbDox",
- "warehouses": [
- {
- "id": "V2FyZWhvdXNlOjY4M2FkMzZhLTRmNjktNDI2ZS1iYzUyLTMyZGJiZTQ2NjUyZA==",
- "slug": "americas"
- },
- {
- "id": "V2FyZWhvdXNlOjQwZWY1MTQwLWQ5OTYtNDVlNy04NzUzLTlkZThkMTdhMjg1Yw==",
- "slug": "oceania"
- },
- {
- "id": "V2FyZWhvdXNlOjU1NTZiOWI0LTc1ZTItNGI3YS1hZWM1LTQxOTY4NDA2OGE4OA==",
- "slug": "europe"
- }
- ]
- },
- "errors": []
- }
- }
-}
-```
-
-### Removing a channel
-
-Channels can be removed only when:
-
-- There are no orders created in them.
-- If there are orders created, `targetChannel` is required. Its currency has to be the same as the channel you are about to delete. All orders will be moved to `targetChannel`.
-
-[`channelDelete`](api-reference/channels/mutations/channel-delete.mdx) mutation takes [input](api-reference/channels/inputs/channel-delete-input.mdx):
-
-- `id`: ID of the Channel that will be deleted
-- `channelId`: all existing orders will be moved into this channel
-
-```graphql
-channelDelete(
- id: ID!
- input: ChannelDeleteInput
-): ChannelDelete
-
-input ChannelDeleteInput {
- channelId: ID! # ID of the channel to migrate orders from origin channel.
-}
-```
-
-### Errors
-
-```graphql
-type ChannelError {
- field: String
- message: String
- code: ChannelErrorCode!
-}
-
-enum ChannelErrorCode {
- ALREADY_EXISTS
- GRAPHQL_ERROR
- INVALID
- NOT_FOUND
- REQUIRED
- UNIQUE
- CHANNEL_TARGET_ID_MUST_BE_DIFFERENT
- CHANNELS_CURRENCY_MUST_BE_THE_SAME
-}
-```
-
-[`ChannelErrorCode`](api-reference/channels/enums/channel-error-code.mdx) values:
-
-- `ALREADY_EXISTS`: Object already exists in the database
-- `GRAPHQL_ERROR`: Wrong query
-- `INVALID`: Invalid data provided
-- `NOT_FOUND`: Could not found object
-- `REQUIRED`: Missing required fields
-- `UNIQUE`: Provided value for field needs to be unique
-- `CHANNEL_TARGET_ID_MUST_BE_DIFFERENT`: Cannot move orders into the channel you want to delete
-- `CHANNELS_CURRENCY_MUST_BE_THE_SAME`: Target channel has to have the same currency
diff --git a/docs/api-reference/channels/configuration.mdx b/docs/api-reference/channels/configuration.mdx
deleted file mode 100644
index f9774e944..000000000
--- a/docs/api-reference/channels/configuration.mdx
+++ /dev/null
@@ -1,544 +0,0 @@
----
-title: Channels
-sidebar_label: Channels
----
-
-## What are sales channels
-
-Sales channels allow you to model your data across different regions, brands, and business models where data can be customized and shared across different channels. Another way to describe channels is the ability to serve customers and markets differently from a **single backend** instance.
-
-### Relationships and scope
-
-Adding a channel creates a wide scope of customization options; below is the degree of customization per entity:
-
-| Entity | Degree of customization per channel |
-| :------------------- | :-------------------------------------------------------------------------------- |
-| **Checkout** | Contextualized to a channel to display the appropriate stock, prices, taxes, etc. |
-| **Product** | Control visibility, availability, search, publication date |
-| **Variants** | Control availability and price |
-| **Taxes** | Control calculation methods, gross or net, country exceptions |
-| **Vouchers** | Control availability, discount values, rules |
-| **Orders** | Contextualized to the channel and required channel permission for access. |
-| **Promotions** | Control availability, rules, and pricing |
-| **Payment flow** | Settings for authorization, payment conditions, expiration, etc. |
-| **Currency** | Channel belongs to a single currency. |
-| **Warehouses** | Availability |
-| **Permission group** | Assigned to channels to control access to sensitive data |
-| **Shipping rates** | Availability, price, order total conditions |
-| **Shipping zones** | Availability |
-
-### How Channels are used
-
-- **Multiple geographical markets:**. Each market has different prices, taxes, shipping options, stock availability, back-office integrations, etc.
-
-- **B2B and B2C:** Customer types can map Channels to grant exclusivity of prices and services.
-
-- **Different Legal Entities:** Businesses that have different legal entities can restrict access to customer and order data per entity
-
-- **Distribution channels:** Serving physical and online channels
-
-- **Multi-brand:** Businesses that wish to share customer data, loyalty programs, and products but want separate order data.
-
-- **A/B testing:** Testing different pricing strategies for product and fulfillment.
-
-- **External channels:** Create dedicated channels for marketplaces or other sales platforms.
-
-### Not ideal for
-
-- Dynamic Currency conversion. Each channel can have a different currency; however, `Checkout` belongs to a single channel, so converting to another channel would not be straightforward. That is because each channel can have different stock, prices, taxes, etc.
-
-- Customer-specific pricing. Potentially, you could serve customers differently using channels, but note that each channel also adds configuration complexity. See [relationships and scope](#relationships-and-scope) for more details.;
-
-- Supplier-specific pricing. If you wish to sell a single product at a different price depending on the supplier, using channels would not work because each checkout is scoped to a single channel; you would have to implement price list functionality instead.
-
-### Channels lifecycle
-
-Your store will have a default channel that can be deleted, but at least one channel is always required.
-
-#### Creation
-
-Channels are assigned to a single currency during creation and can not be changed afterward.
-
-#### Activation
-
-Channels can be activated and deactivated, affecting the channel's discoverability by the front end, which can be useful during the configuration phase.
-
-#### Removal
-
-You must first migrate the existing orders to a channel with the same currency to remove a channel.
-
-### Channel access control
-
-Admin access to order data can be configured on a channel level, this is useful for businesses that have different legal entities that should not have access to each other's data.
-Other objects such as products, vouchers, shipping, can belong to multiple channels at once so their permissions are not scoped per channel to avoid complexity.
-
-### Configuration example
-
-Here is how configuration of a business with many markets would look like:
-
-- `EU` channel. Currency: EUR. Warehouse: Germany. Countries: NL, DE, FR, BE, PT, ES, IT, AT
-- `IRELAND` channel. Currency: EUR. Warehouse: UK, Germany. Because of higher shipping costs and operational costs, new channel is introduced with higher prices and different stock availability.
-- `UK` channel. Currency: GBP. Warehouse: UK. Countries: UK
-- `US` channel. Currency: USD. Warehouse: US. Countries: US, CA, MX. Business operates only in USD in North America and has same product price for all countries, shipping is adjusted per country differently.
-- `B2B` wholesale channel. Currency: USD. Warehouse: Germany, US. Countries: JP, KR, AU. Business operates in USD for wholesale customers in Asia and Australia.
-- `Sister brand` channel. Currency: USD. Warehouse: US. Countries: US, CA, MX. Channel for separate storefront selling different line of product under different brand.
-
-### Data model
-
-![Channels data model](./saleor-channels-data-model.png)
-
-## API examples
-
-### Getting channel details
-
-Use [`channel`](api-reference/channels/queries/channel.mdx) query to get channel details.
-
-Channel query requires channel ID, but from Saleor 3.6 it can be executed with channel slug too.
-
-Available fields:
-
-- `id`: Channel object ID
-- `slug`: When using channel-dependant queries, the slug is used to select the right one (for example, when requesting Product details)
-- `name`: Channel name
-- `isActive`: Flag signalling that the channel is available for shop customers.
-- `currencyCode`: Currency code used by the channel.
-- `hasOrders`: Returns `true` when there are already created orders using that channel. If that's the only channel using this currency, you won't be able to remove it.
-- `defaultCountry`: Default country for the channel. The default country will be used in checkout to determine the stock quantities or calculate taxes when the country was not explicitly provided, either as a query parameter or through a shipping address.
-- `warehouses`: Warehouses that are available in the given channel.
-- `countries`: List of shippable countries for the channel.
-- `availableShippingMethodsPerCountry`: Shipping methods that are available for the channel.
-- `stockSettings`: contains all stock-related settings,
- e.g. the [allocation strategy](developer/stock-allocation.mdx#allocation-strategies) for the channel.
-- `orderSettings`: Channel-specific order settings.
-
-Request:
-
-```graphql
-query {
- channel(slug: "mobile") {
- id
- slug
- name
- isActive
- currencyCode
- hasOrders
- defaultCountry {
- code
- country
- }
- warehouses {
- slug
- }
- countries {
- code
- country
- }
- availableShippingMethodsPerCountry {
- countryCode
- shippingMethods {
- id
- name
- }
- }
- stockSettings {
- allocationStrategy
- }
- orderSettings {
- allowUnpaidOrders
- }
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channel": {
- "id": "Q2hhbm5lbDo0MzM=",
- "slug": "mobile",
- "name": "Mobile",
- "isActive": false,
- "currencyCode": "USD",
- "hasOrders": true,
- "defaultCountry": {
- "code": "US",
- "country": "United States of America"
- },
- "warehouses": [
- {
- "slug": "oceania"
- },
- {
- "slug": "europe"
- }
- ],
- "availableShippingMethodsPerCountry": [
- {
- "countryCode": "AD",
- "shippingMethods": [
- {
- "id": "U2hpcHBpbmdNZXRob2Q6Mg==",
- "name": "DHL"
- },
- {
- "id": "U2hpcHBpbmdNZXRob2Q6Mw==",
- "name": "UPS"
- },
- {
- "id": "U2hpcHBpbmdNZXRob2Q6NA==",
- "name": "Registered priority"
- },
- {
- "id": "U2hpcHBpbmdNZXRob2Q6NQ==",
- "name": "DB Schenker"
- }
- ]
- }
- // ... more countries
- ],
- "stockSettings": {
- "allocationStrategy": "PRIORITIZE_HIGH_STOCK"
- },
- "orderSettings": {
- "allowUnpaidOrders": false
- }
- }
- }
-}
-```
-
-### Permissions
-
-Listing channels is allowed only for users with the active [`isStaff`](api-reference/users/objects/user.mdx#userisstaffboolean--) flag.
-
-You need the `MANAGE_CHANNELS` permission to create, edit, and remove channels.
-Changing `ChannelListing` does not require additional permissions. For example, changing Product availability requires only `MANAGE_PRODUCTS` permission.
-
-Objects with customized per-channel visibility are restricted by channel permissions.
-If a user with restricted channel access fetches per-channel objects, only objects from accessible channels will be returned.
-You can read more about channel permissions [here](developer/permissions.mdx).
-
-### Creating a new channel
-
-You can create a new channel using [`channelCreate`](api-reference/channels/mutations/channel-create.mdx) mutation.
-During checkout creation, you can define the allocation strategy. Right now the
-two possible options are available: `PRIORITIZE_HIGH_STOCK` and `PRIORITIZE_SORTING_ORDER`,
-the `PRIORITIZE_SORTING_ORDER` strategy is used as default.
-You can read more about the allocation strategies [`here`](developer/stock-allocation.mdx#allocation-strategies).
-
-Request:
-
-```graphql
-mutation {
- channelCreate(
- input: {
- currencyCode: "USD"
- defaultCountry: US
- name: "Mobile"
- slug: "mobile"
- stockSettings: { allocationStrategy: PRIORITIZE_HIGH_STOCK }
- }
- ) {
- channel {
- id
- isActive
- name
- slug
- currencyCode
- defaultCountry {
- code
- country
- }
- stockSettings {
- allocationStrategy
- }
- }
- errors {
- code
- field
- message
- }
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channelCreate": {
- "channel": {
- "id": "Q2hhbm5lbDo0MzM=",
- "isActive": false,
- "name": "Mobile",
- "slug": "mobile",
- "currencyCode": "USD",
- "defaultCountry": {
- "code": "US",
- "country": "United States of America"
- },
- "stockSettings": {
- "allocationStrategy": "PRIORITIZE_HIGH_STOCK"
- }
- },
- "errors": []
- }
- }
-}
-```
-
-### Channel list
-
-Because some of the channels may be considered non-public (for example - a channel for business partners), non-staff users cannot use the [`channels`](api-reference/channels/queries/channels.mdx) query.
-
-Request:
-
-```graphql
-query {
- channels {
- name
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channels": [
- {
- "name": "Mobile"
- },
- {
- "name": "Website"
- }
- ]
- }
-}
-```
-
-#### Activate / Deactivate channel
-
-If you want to make the channel unavailable for customers, you can change its status to `deactivated` using [`channelDeactivate`](api-reference/channels/mutations/channel-deactivate.mdx) mutation:
-
-```graphql
-mutation {
- channelDeactivate(slug: "default-channel") {
- channel {
- name
- isActive
- }
- errors {
- message
- }
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channelDeactivate": {
- "channel": {
- "name": "Facebook",
- "isActive": false
- },
- "channelErrors": []
- }
- }
-}
-```
-
-And to reverse the previous operation use the [`channelActivate`](api-reference/channels/mutations/channel-activate.mdx) mutation:
-
-```graphql
-mutation {
- channelActivate(slug: "default-channel") {
- channel {
- name
- isActive
- }
- errors {
- message
- }
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channelDeactivate": {
- "channel": {
- "name": "Facebook",
- "isActive": true
- },
- "channelErrors": []
- }
- }
-}
-```
-
-### Reorder warehouses within channels
-
-The warehouses assigned to the channel can be sorted. The provided order defines the
-warehouses' order used in `PRIORITIZE_SORTING_ORDER`
-[allocation strategy](developer/stock-allocation.mdx#allocation-strategies).
-The `sort_order` in `moves` input represents the new relative position of the item.
-So when 1 is provided, the item will be moved one position forward; when -1 - one
-position backward.
-
-Let's assume that we have a `channel` with three warehouses in the following order.
-
-```json
-{
- "data": {
- "channel": {
- "id": "Q2hhbm5lbDox",
- "warehouses": [
- {
- "id": "V2FyZWhvdXNlOjU1NTZiOWI0LTc1ZTItNGI3YS1hZWM1LTQxOTY4NDA2OGE4OA==",
- "slug": "europe"
- },
- {
- "id": "V2FyZWhvdXNlOjQwZWY1MTQwLWQ5OTYtNDVlNy04NzUzLTlkZThkMTdhMjg1Yw==",
- "slug": "oceania"
- },
- {
- "id": "V2FyZWhvdXNlOjY4M2FkMzZhLTRmNjktNDI2ZS1iYzUyLTMyZGJiZTQ2NjUyZA==",
- "slug": "americas"
- }
- ]
- }
- }
-}
-```
-
-To move the `americas` warehouse to the first place and the `europe` warehouse to
-third, we can run the following mutation.
-
-```graphql
-mutation {
- channelReorderWarehouses(
- channelId: "Q2hhbm5lbDox"
- moves: [
- {
- # move for `americas` warehouse
- id: "V2FyZWhvdXNlOjY4M2FkMzZhLTRmNjktNDI2ZS1iYzUyLTMyZGJiZTQ2NjUyZA=="
- sortOrder: -2
- }
- {
- # move for `europe` warehouse
- id: "V2FyZWhvdXNlOjU1NTZiOWI0LTc1ZTItNGI3YS1hZWM1LTQxOTY4NDA2OGE4OA=="
- sortOrder: 1
- }
- ]
- ) {
- channel {
- id
- warehouses {
- id
- slug
- }
- }
- errors {
- field
- code
- message
- warehouses
- }
- }
-}
-```
-
-And as a response, we get:
-
-```json
-{
- "data": {
- "channelReorderWarehouses": {
- "channel": {
- "id": "Q2hhbm5lbDox",
- "warehouses": [
- {
- "id": "V2FyZWhvdXNlOjY4M2FkMzZhLTRmNjktNDI2ZS1iYzUyLTMyZGJiZTQ2NjUyZA==",
- "slug": "americas"
- },
- {
- "id": "V2FyZWhvdXNlOjQwZWY1MTQwLWQ5OTYtNDVlNy04NzUzLTlkZThkMTdhMjg1Yw==",
- "slug": "oceania"
- },
- {
- "id": "V2FyZWhvdXNlOjU1NTZiOWI0LTc1ZTItNGI3YS1hZWM1LTQxOTY4NDA2OGE4OA==",
- "slug": "europe"
- }
- ]
- },
- "errors": []
- }
- }
-}
-```
-
-### Removing a channel
-
-Channels can be removed only when:
-
-- There are no orders created in them.
-- If there are orders created, `targetChannel` is required. Its currency has to be the same as the channel you are about to delete. All orders will be moved to `targetChannel`.
-
-[`channelDelete`](api-reference/channels/mutations/channel-delete.mdx) mutation takes [input](api-reference/channels/inputs/channel-delete-input.mdx):
-
-- `id`: ID of the Channel that will be deleted
-- `channelId`: all existing orders will be moved into this channel
-
-```graphql
-channelDelete(
- id: ID!
- input: ChannelDeleteInput
-): ChannelDelete
-
-input ChannelDeleteInput {
- channelId: ID! # ID of the channel to migrate orders from origin channel.
-}
-```
-
-### Errors
-
-```graphql
-type ChannelError {
- field: String
- message: String
- code: ChannelErrorCode!
-}
-
-enum ChannelErrorCode {
- ALREADY_EXISTS
- GRAPHQL_ERROR
- INVALID
- NOT_FOUND
- REQUIRED
- UNIQUE
- CHANNEL_TARGET_ID_MUST_BE_DIFFERENT
- CHANNELS_CURRENCY_MUST_BE_THE_SAME
-}
-```
-
-[`ChannelErrorCode`](api-reference/channels/enums/channel-error-code.mdx) values:
-
-- `ALREADY_EXISTS`: Object already exists in the database
-- `GRAPHQL_ERROR`: Wrong query
-- `INVALID`: Invalid data provided
-- `NOT_FOUND`: Could not found object
-- `REQUIRED`: Missing required fields
-- `UNIQUE`: Provided value for field needs to be unique
-- `CHANNEL_TARGET_ID_MUST_BE_DIFFERENT`: Cannot move orders into the channel you want to delete
-- `CHANNELS_CURRENCY_MUST_BE_THE_SAME`: Target channel has to have the same currency
diff --git a/docs/api-reference/channels/cookbook.mdx b/docs/api-reference/channels/cookbook.mdx
deleted file mode 100644
index 565df3789..000000000
--- a/docs/api-reference/channels/cookbook.mdx
+++ /dev/null
@@ -1,544 +0,0 @@
----
-title: Channels cookbook
-sidebar_label: Cookbook
----
-
-## What are sales channels
-
-Sales channels allow you to model your data across different regions, brands, and business models where data can be customized and shared across different channels. Another way to describe channels is the ability to serve customers and markets differently from a **single backend** instance.
-
-### Relationships and scope
-
-Adding a channel creates a wide scope of customization options; below is the degree of customization per entity:
-
-| Entity | Degree of customization per channel |
-| :------------------- | :-------------------------------------------------------------------------------- |
-| **Checkout** | Contextualized to a channel to display the appropriate stock, prices, taxes, etc. |
-| **Product** | Control visibility, availability, search, publication date |
-| **Variants** | Control availability and price |
-| **Taxes** | Control calculation methods, gross or net, country exceptions |
-| **Vouchers** | Control availability, discount values, rules |
-| **Orders** | Contextualized to the channel and required channel permission for access. |
-| **Promotions** | Control availability, rules, and pricing |
-| **Payment flow** | Settings for authorization, payment conditions, expiration, etc. |
-| **Currency** | Channel belongs to a single currency. |
-| **Warehouses** | Availability |
-| **Permission group** | Assigned to channels to control access to sensitive data |
-| **Shipping rates** | Availability, price, order total conditions |
-| **Shipping zones** | Availability |
-
-### How Channels are used
-
-- **Multiple geographical markets:**. Each market has different prices, taxes, shipping options, stock availability, back-office integrations, etc.
-
-- **B2B and B2C:** Customer types can map Channels to grant exclusivity of prices and services.
-
-- **Different Legal Entities:** Businesses that have different legal entities can restrict access to customer and order data per entity
-
-- **Distribution channels:** Serving physical and online channels
-
-- **Multi-brand:** Businesses that wish to share customer data, loyalty programs, and products but want separate order data.
-
-- **A/B testing:** Testing different pricing strategies for product and fulfillment.
-
-- **External channels:** Create dedicated channels for marketplaces or other sales platforms.
-
-### Not ideal for
-
-- Dynamic Currency conversion. Each channel can have a different currency; however, `Checkout` belongs to a single channel, so converting to another channel would not be straightforward. That is because each channel can have different stock, prices, taxes, etc.
-
-- Customer-specific pricing. Potentially, you could serve customers differently using channels, but note that each channel also adds configuration complexity. See [relationships and scope](#relationships-and-scope) for more details.;
-
-- Supplier-specific pricing. If you wish to sell a single product at a different price depending on the supplier, using channels would not work because each checkout is scoped to a single channel; you would have to implement price list functionality instead.
-
-### Channels lifecycle
-
-Your store will have a default channel that can be deleted, but at least one channel is always required.
-
-#### Creation
-
-Channels are assigned to a single currency during creation and can not be changed afterward.
-
-#### Activation
-
-Channels can be activated and deactivated, affecting the channel's discoverability by the front end, which can be useful during the configuration phase.
-
-#### Removal
-
-You must first migrate the existing orders to a channel with the same currency to remove a channel.
-
-### Channel access control
-
-Admin access to order data can be configured on a channel level, this is useful for businesses that have different legal entities that should not have access to each other's data.
-Other objects such as products, vouchers, shipping, can belong to multiple channels at once so their permissions are not scoped per channel to avoid complexity.
-
-### Configuration example
-
-Here is how configuration of a business with many markets would look like:
-
-- `EU` channel. Currency: EUR. Warehouse: Germany. Countries: NL, DE, FR, BE, PT, ES, IT, AT
-- `IRELAND` channel. Currency: EUR. Warehouse: UK, Germany. Because of higher shipping costs and operational costs, new channel is introduced with higher prices and different stock availability.
-- `UK` channel. Currency: GBP. Warehouse: UK. Countries: UK
-- `US` channel. Currency: USD. Warehouse: US. Countries: US, CA, MX. Business operates only in USD in North America and has same product price for all countries, shipping is adjusted per country differently.
-- `B2B` wholesale channel. Currency: USD. Warehouse: Germany, US. Countries: JP, KR, AU. Business operates in USD for wholesale customers in Asia and Australia.
-- `Sister brand` channel. Currency: USD. Warehouse: US. Countries: US, CA, MX. Channel for separate storefront selling different line of product under different brand.
-
-### Data model
-
-![Channels data model](./saleor-channels-data-model.png)
-
-## API examples
-
-### Getting channel details
-
-Use [`channel`](api-reference/channels/queries/channel.mdx) query to get channel details.
-
-Channel query requires channel ID, but from Saleor 3.6 it can be executed with channel slug too.
-
-Available fields:
-
-- `id`: Channel object ID
-- `slug`: When using channel-dependant queries, the slug is used to select the right one (for example, when requesting Product details)
-- `name`: Channel name
-- `isActive`: Flag signalling that the channel is available for shop customers.
-- `currencyCode`: Currency code used by the channel.
-- `hasOrders`: Returns `true` when there are already created orders using that channel. If that's the only channel using this currency, you won't be able to remove it.
-- `defaultCountry`: Default country for the channel. The default country will be used in checkout to determine the stock quantities or calculate taxes when the country was not explicitly provided, either as a query parameter or through a shipping address.
-- `warehouses`: Warehouses that are available in the given channel.
-- `countries`: List of shippable countries for the channel.
-- `availableShippingMethodsPerCountry`: Shipping methods that are available for the channel.
-- `stockSettings`: contains all stock-related settings,
- e.g. the [allocation strategy](developer/stock-allocation.mdx#allocation-strategies) for the channel.
-- `orderSettings`: Channel-specific order settings.
-
-Request:
-
-```graphql
-query {
- channel(slug: "mobile") {
- id
- slug
- name
- isActive
- currencyCode
- hasOrders
- defaultCountry {
- code
- country
- }
- warehouses {
- slug
- }
- countries {
- code
- country
- }
- availableShippingMethodsPerCountry {
- countryCode
- shippingMethods {
- id
- name
- }
- }
- stockSettings {
- allocationStrategy
- }
- orderSettings {
- allowUnpaidOrders
- }
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channel": {
- "id": "Q2hhbm5lbDo0MzM=",
- "slug": "mobile",
- "name": "Mobile",
- "isActive": false,
- "currencyCode": "USD",
- "hasOrders": true,
- "defaultCountry": {
- "code": "US",
- "country": "United States of America"
- },
- "warehouses": [
- {
- "slug": "oceania"
- },
- {
- "slug": "europe"
- }
- ],
- "availableShippingMethodsPerCountry": [
- {
- "countryCode": "AD",
- "shippingMethods": [
- {
- "id": "U2hpcHBpbmdNZXRob2Q6Mg==",
- "name": "DHL"
- },
- {
- "id": "U2hpcHBpbmdNZXRob2Q6Mw==",
- "name": "UPS"
- },
- {
- "id": "U2hpcHBpbmdNZXRob2Q6NA==",
- "name": "Registered priority"
- },
- {
- "id": "U2hpcHBpbmdNZXRob2Q6NQ==",
- "name": "DB Schenker"
- }
- ]
- }
- // ... more countries
- ],
- "stockSettings": {
- "allocationStrategy": "PRIORITIZE_HIGH_STOCK"
- },
- "orderSettings": {
- "allowUnpaidOrders": false
- }
- }
- }
-}
-```
-
-### Permissions
-
-Listing channels is allowed only for users with the active [`isStaff`](api-reference/users/objects/user.mdx#userisstaffboolean--) flag.
-
-You need the `MANAGE_CHANNELS` permission to create, edit, and remove channels.
-Changing `ChannelListing` does not require additional permissions. For example, changing Product availability requires only `MANAGE_PRODUCTS` permission.
-
-Objects with customized per-channel visibility are restricted by channel permissions.
-If a user with restricted channel access fetches per-channel objects, only objects from accessible channels will be returned.
-You can read more about channel permissions [here](developer/permissions.mdx).
-
-### Creating a new channel
-
-You can create a new channel using [`channelCreate`](api-reference/channels/mutations/channel-create.mdx) mutation.
-During checkout creation, you can define the allocation strategy. Right now the
-two possible options are available: `PRIORITIZE_HIGH_STOCK` and `PRIORITIZE_SORTING_ORDER`,
-the `PRIORITIZE_SORTING_ORDER` strategy is used as default.
-You can read more about the allocation strategies [`here`](developer/stock-allocation.mdx#allocation-strategies).
-
-Request:
-
-```graphql
-mutation {
- channelCreate(
- input: {
- currencyCode: "USD"
- defaultCountry: US
- name: "Mobile"
- slug: "mobile"
- stockSettings: { allocationStrategy: PRIORITIZE_HIGH_STOCK }
- }
- ) {
- channel {
- id
- isActive
- name
- slug
- currencyCode
- defaultCountry {
- code
- country
- }
- stockSettings {
- allocationStrategy
- }
- }
- errors {
- code
- field
- message
- }
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channelCreate": {
- "channel": {
- "id": "Q2hhbm5lbDo0MzM=",
- "isActive": false,
- "name": "Mobile",
- "slug": "mobile",
- "currencyCode": "USD",
- "defaultCountry": {
- "code": "US",
- "country": "United States of America"
- },
- "stockSettings": {
- "allocationStrategy": "PRIORITIZE_HIGH_STOCK"
- }
- },
- "errors": []
- }
- }
-}
-```
-
-### Channel list
-
-Because some of the channels may be considered non-public (for example - a channel for business partners), non-staff users cannot use the [`channels`](api-reference/channels/queries/channels.mdx) query.
-
-Request:
-
-```graphql
-query {
- channels {
- name
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channels": [
- {
- "name": "Mobile"
- },
- {
- "name": "Website"
- }
- ]
- }
-}
-```
-
-#### Activate / Deactivate channel
-
-If you want to make the channel unavailable for customers, you can change its status to `deactivated` using [`channelDeactivate`](api-reference/channels/mutations/channel-deactivate.mdx) mutation:
-
-```graphql
-mutation {
- channelDeactivate(slug: "default-channel") {
- channel {
- name
- isActive
- }
- errors {
- message
- }
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channelDeactivate": {
- "channel": {
- "name": "Facebook",
- "isActive": false
- },
- "channelErrors": []
- }
- }
-}
-```
-
-And to reverse the previous operation use the [`channelActivate`](api-reference/channels/mutations/channel-activate.mdx) mutation:
-
-```graphql
-mutation {
- channelActivate(slug: "default-channel") {
- channel {
- name
- isActive
- }
- errors {
- message
- }
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channelDeactivate": {
- "channel": {
- "name": "Facebook",
- "isActive": true
- },
- "channelErrors": []
- }
- }
-}
-```
-
-### Reorder warehouses within channels
-
-The warehouses assigned to the channel can be sorted. The provided order defines the
-warehouses' order used in `PRIORITIZE_SORTING_ORDER`
-[allocation strategy](developer/stock-allocation.mdx#allocation-strategies).
-The `sort_order` in `moves` input represents the new relative position of the item.
-So when 1 is provided, the item will be moved one position forward; when -1 - one
-position backward.
-
-Let's assume that we have a `channel` with three warehouses in the following order.
-
-```json
-{
- "data": {
- "channel": {
- "id": "Q2hhbm5lbDox",
- "warehouses": [
- {
- "id": "V2FyZWhvdXNlOjU1NTZiOWI0LTc1ZTItNGI3YS1hZWM1LTQxOTY4NDA2OGE4OA==",
- "slug": "europe"
- },
- {
- "id": "V2FyZWhvdXNlOjQwZWY1MTQwLWQ5OTYtNDVlNy04NzUzLTlkZThkMTdhMjg1Yw==",
- "slug": "oceania"
- },
- {
- "id": "V2FyZWhvdXNlOjY4M2FkMzZhLTRmNjktNDI2ZS1iYzUyLTMyZGJiZTQ2NjUyZA==",
- "slug": "americas"
- }
- ]
- }
- }
-}
-```
-
-To move the `americas` warehouse to the first place and the `europe` warehouse to
-third, we can run the following mutation.
-
-```graphql
-mutation {
- channelReorderWarehouses(
- channelId: "Q2hhbm5lbDox"
- moves: [
- {
- # move for `americas` warehouse
- id: "V2FyZWhvdXNlOjY4M2FkMzZhLTRmNjktNDI2ZS1iYzUyLTMyZGJiZTQ2NjUyZA=="
- sortOrder: -2
- }
- {
- # move for `europe` warehouse
- id: "V2FyZWhvdXNlOjU1NTZiOWI0LTc1ZTItNGI3YS1hZWM1LTQxOTY4NDA2OGE4OA=="
- sortOrder: 1
- }
- ]
- ) {
- channel {
- id
- warehouses {
- id
- slug
- }
- }
- errors {
- field
- code
- message
- warehouses
- }
- }
-}
-```
-
-And as a response, we get:
-
-```json
-{
- "data": {
- "channelReorderWarehouses": {
- "channel": {
- "id": "Q2hhbm5lbDox",
- "warehouses": [
- {
- "id": "V2FyZWhvdXNlOjY4M2FkMzZhLTRmNjktNDI2ZS1iYzUyLTMyZGJiZTQ2NjUyZA==",
- "slug": "americas"
- },
- {
- "id": "V2FyZWhvdXNlOjQwZWY1MTQwLWQ5OTYtNDVlNy04NzUzLTlkZThkMTdhMjg1Yw==",
- "slug": "oceania"
- },
- {
- "id": "V2FyZWhvdXNlOjU1NTZiOWI0LTc1ZTItNGI3YS1hZWM1LTQxOTY4NDA2OGE4OA==",
- "slug": "europe"
- }
- ]
- },
- "errors": []
- }
- }
-}
-```
-
-### Removing a channel
-
-Channels can be removed only when:
-
-- There are no orders created in them.
-- If there are orders created, `targetChannel` is required. Its currency has to be the same as the channel you are about to delete. All orders will be moved to `targetChannel`.
-
-[`channelDelete`](api-reference/channels/mutations/channel-delete.mdx) mutation takes [input](api-reference/channels/inputs/channel-delete-input.mdx):
-
-- `id`: ID of the Channel that will be deleted
-- `channelId`: all existing orders will be moved into this channel
-
-```graphql
-channelDelete(
- id: ID!
- input: ChannelDeleteInput
-): ChannelDelete
-
-input ChannelDeleteInput {
- channelId: ID! # ID of the channel to migrate orders from origin channel.
-}
-```
-
-### Errors
-
-```graphql
-type ChannelError {
- field: String
- message: String
- code: ChannelErrorCode!
-}
-
-enum ChannelErrorCode {
- ALREADY_EXISTS
- GRAPHQL_ERROR
- INVALID
- NOT_FOUND
- REQUIRED
- UNIQUE
- CHANNEL_TARGET_ID_MUST_BE_DIFFERENT
- CHANNELS_CURRENCY_MUST_BE_THE_SAME
-}
-```
-
-[`ChannelErrorCode`](api-reference/channels/enums/channel-error-code.mdx) values:
-
-- `ALREADY_EXISTS`: Object already exists in the database
-- `GRAPHQL_ERROR`: Wrong query
-- `INVALID`: Invalid data provided
-- `NOT_FOUND`: Could not found object
-- `REQUIRED`: Missing required fields
-- `UNIQUE`: Provided value for field needs to be unique
-- `CHANNEL_TARGET_ID_MUST_BE_DIFFERENT`: Cannot move orders into the channel you want to delete
-- `CHANNELS_CURRENCY_MUST_BE_THE_SAME`: Target channel has to have the same currency
diff --git a/docs/api-reference/channels/lifecycle.mdx b/docs/api-reference/channels/lifecycle.mdx
deleted file mode 100644
index fc22dabba..000000000
--- a/docs/api-reference/channels/lifecycle.mdx
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Channels lifecycle
-sidebar_label: lifecycle
----
-
-### Channels lifecycle
-
-Your store will have a default channel that can be deleted, but at least one channel is always required.
-
-#### Creation
-
-Channels are assigned to a single currency during creation and can not be changed afterward.
-
-#### Activation
-
-Channels can be activated and deactivated, affecting the channel's discoverability by the front end, which can be useful during the configuration phase.
-
-#### Removal
-
-You must first migrate the existing orders to a channel with the same currency to remove a channel.
diff --git a/docs/api-reference/channels/overview.mdx b/docs/api-reference/channels/overview.mdx
deleted file mode 100644
index 6964e6320..000000000
--- a/docs/api-reference/channels/overview.mdx
+++ /dev/null
@@ -1,93 +0,0 @@
----
-title: Channels overview
-sidebar_label: Overview
----
-
-## What are sales channels
-
-Sales channels allow you to model your data across different regions, brands, and business models where data can be customized and shared across different channels. Another way to describe channels is the ability to serve customers and markets differently from a **single backend** instance.
-
-### Relationships and scope
-
-Adding a channel creates a wide scope of customization options; below is the degree of customization per entity:
-
-| Entity | Degree of customization per channel |
-| :------------------- | :-------------------------------------------------------------------------------- |
-| **Checkout** | Contextualized to a channel to display the appropriate stock, prices, taxes, etc. |
-| **Product** | Control visibility, availability, search, publication date |
-| **Variants** | Control availability and price |
-| **Taxes** | Control calculation methods, gross or net, country exceptions |
-| **Vouchers** | Control availability, discount values, rules |
-| **Orders** | Contextualized to the channel and required channel permission for access. |
-| **Promotions** | Control availability, rules, and pricing |
-| **Payment flow** | Settings for authorization, payment conditions, expiration, etc. |
-| **Currency** | Channel belongs to a single currency. |
-| **Warehouses** | Availability |
-| **Permission group** | Assigned to channels to control access to sensitive data |
-| **Shipping rates** | Availability, price, order total conditions |
-| **Shipping zones** | Availability |
-
-### How Channels are used
-
-- **Multiple geographical markets:**. Each market has different prices, taxes, shipping options, stock availability, back-office integrations, etc.
-
-- **B2B and B2C:** Customer types can map Channels to grant exclusivity of prices and services.
-
-- **Different Legal Entities:** Businesses that have different legal entities can restrict access to customer and order data per entity
-
-- **Distribution channels:** Serving physical and online channels
-
-- **Multi-brand:** Businesses that wish to share customer data, loyalty programs, and products but want separate order data.
-
-- **A/B testing:** Testing different pricing strategies for product and fulfillment.
-
-- **External channels:** Create dedicated channels for marketplaces or other sales platforms.
-
-### Not ideal for
-
-- Dynamic Currency conversion. Each channel can have a different currency; however, `Checkout` belongs to a single channel, so converting to another channel would not be straightforward. That is because each channel can have different stock, prices, taxes, etc.
-
-- Customer-specific pricing. Potentially, you could serve customers differently using channels, but note that each channel also adds configuration complexity. See [relationships and scope](#relationships-and-scope) for more details.;
-
-- Supplier-specific pricing. If you wish to sell a single product at a different price depending on the supplier, using channels would not work because each checkout is scoped to a single channel; you would have to implement price list functionality instead.
-
-### Channels lifecycle
-
-Your store will have a default channel that can be deleted, but at least one channel is always required.
-
-#### Creation
-
-Channels are assigned to a single currency during creation and can not be changed afterward.
-
-#### Activation
-
-Channels can be activated and deactivated, affecting the channel's discoverability by the front end, which can be useful during the configuration phase.
-
-#### Removal
-
-You must first migrate the existing orders to a channel with the same currency to remove a channel.
-
-### Channel access control
-
-Admin access to order data can be configured on a channel level, this is useful for businesses that have different legal entities that should not have access to each other's data.
-Other objects such as products, vouchers, shipping, can belong to multiple channels at once so their permissions are not scoped per channel to avoid complexity.
-
-### Configuration example
-
-Here is how configuration of a business with many markets would look like:
-
-- `EU` channel. Currency: EUR. Warehouse: Germany. Countries: NL, DE, FR, BE, PT, ES, IT, AT
-- `IRELAND` channel. Currency: EUR. Warehouse: UK, Germany. Because of higher shipping costs and operational costs, new channel is introduced with higher prices and different stock availability.
-- `UK` channel. Currency: GBP. Warehouse: UK. Countries: UK
-- `US` channel. Currency: USD. Warehouse: US. Countries: US, CA, MX. Business operates only in USD in North America and has same product price for all countries, shipping is adjusted per country differently.
-- `B2B` wholesale channel. Currency: USD. Warehouse: Germany, US. Countries: JP, KR, AU. Business operates in USD for wholesale customers in Asia and Australia.
-- `Sister brand` channel. Currency: USD. Warehouse: US. Countries: US, CA, MX. Channel for separate storefront selling different line of product under different brand.
-
-### Data model
-
-![Channels data model](./saleor-channels-data-model.png)
-
-### Channel access control
-
-Admin access to order data can be configured on a channel level, this is useful for businesses that have different legal entities that should not have access to each other's data.
-Other objects such as products, vouchers, shipping, can belong to multiple channels at once so their permissions are not scoped per channel to avoid complexity.
diff --git a/docs/api-reference/channels/troubleshooting.mdx b/docs/api-reference/channels/troubleshooting.mdx
deleted file mode 100644
index f9774e944..000000000
--- a/docs/api-reference/channels/troubleshooting.mdx
+++ /dev/null
@@ -1,544 +0,0 @@
----
-title: Channels
-sidebar_label: Channels
----
-
-## What are sales channels
-
-Sales channels allow you to model your data across different regions, brands, and business models where data can be customized and shared across different channels. Another way to describe channels is the ability to serve customers and markets differently from a **single backend** instance.
-
-### Relationships and scope
-
-Adding a channel creates a wide scope of customization options; below is the degree of customization per entity:
-
-| Entity | Degree of customization per channel |
-| :------------------- | :-------------------------------------------------------------------------------- |
-| **Checkout** | Contextualized to a channel to display the appropriate stock, prices, taxes, etc. |
-| **Product** | Control visibility, availability, search, publication date |
-| **Variants** | Control availability and price |
-| **Taxes** | Control calculation methods, gross or net, country exceptions |
-| **Vouchers** | Control availability, discount values, rules |
-| **Orders** | Contextualized to the channel and required channel permission for access. |
-| **Promotions** | Control availability, rules, and pricing |
-| **Payment flow** | Settings for authorization, payment conditions, expiration, etc. |
-| **Currency** | Channel belongs to a single currency. |
-| **Warehouses** | Availability |
-| **Permission group** | Assigned to channels to control access to sensitive data |
-| **Shipping rates** | Availability, price, order total conditions |
-| **Shipping zones** | Availability |
-
-### How Channels are used
-
-- **Multiple geographical markets:**. Each market has different prices, taxes, shipping options, stock availability, back-office integrations, etc.
-
-- **B2B and B2C:** Customer types can map Channels to grant exclusivity of prices and services.
-
-- **Different Legal Entities:** Businesses that have different legal entities can restrict access to customer and order data per entity
-
-- **Distribution channels:** Serving physical and online channels
-
-- **Multi-brand:** Businesses that wish to share customer data, loyalty programs, and products but want separate order data.
-
-- **A/B testing:** Testing different pricing strategies for product and fulfillment.
-
-- **External channels:** Create dedicated channels for marketplaces or other sales platforms.
-
-### Not ideal for
-
-- Dynamic Currency conversion. Each channel can have a different currency; however, `Checkout` belongs to a single channel, so converting to another channel would not be straightforward. That is because each channel can have different stock, prices, taxes, etc.
-
-- Customer-specific pricing. Potentially, you could serve customers differently using channels, but note that each channel also adds configuration complexity. See [relationships and scope](#relationships-and-scope) for more details.;
-
-- Supplier-specific pricing. If you wish to sell a single product at a different price depending on the supplier, using channels would not work because each checkout is scoped to a single channel; you would have to implement price list functionality instead.
-
-### Channels lifecycle
-
-Your store will have a default channel that can be deleted, but at least one channel is always required.
-
-#### Creation
-
-Channels are assigned to a single currency during creation and can not be changed afterward.
-
-#### Activation
-
-Channels can be activated and deactivated, affecting the channel's discoverability by the front end, which can be useful during the configuration phase.
-
-#### Removal
-
-You must first migrate the existing orders to a channel with the same currency to remove a channel.
-
-### Channel access control
-
-Admin access to order data can be configured on a channel level, this is useful for businesses that have different legal entities that should not have access to each other's data.
-Other objects such as products, vouchers, shipping, can belong to multiple channels at once so their permissions are not scoped per channel to avoid complexity.
-
-### Configuration example
-
-Here is how configuration of a business with many markets would look like:
-
-- `EU` channel. Currency: EUR. Warehouse: Germany. Countries: NL, DE, FR, BE, PT, ES, IT, AT
-- `IRELAND` channel. Currency: EUR. Warehouse: UK, Germany. Because of higher shipping costs and operational costs, new channel is introduced with higher prices and different stock availability.
-- `UK` channel. Currency: GBP. Warehouse: UK. Countries: UK
-- `US` channel. Currency: USD. Warehouse: US. Countries: US, CA, MX. Business operates only in USD in North America and has same product price for all countries, shipping is adjusted per country differently.
-- `B2B` wholesale channel. Currency: USD. Warehouse: Germany, US. Countries: JP, KR, AU. Business operates in USD for wholesale customers in Asia and Australia.
-- `Sister brand` channel. Currency: USD. Warehouse: US. Countries: US, CA, MX. Channel for separate storefront selling different line of product under different brand.
-
-### Data model
-
-![Channels data model](./saleor-channels-data-model.png)
-
-## API examples
-
-### Getting channel details
-
-Use [`channel`](api-reference/channels/queries/channel.mdx) query to get channel details.
-
-Channel query requires channel ID, but from Saleor 3.6 it can be executed with channel slug too.
-
-Available fields:
-
-- `id`: Channel object ID
-- `slug`: When using channel-dependant queries, the slug is used to select the right one (for example, when requesting Product details)
-- `name`: Channel name
-- `isActive`: Flag signalling that the channel is available for shop customers.
-- `currencyCode`: Currency code used by the channel.
-- `hasOrders`: Returns `true` when there are already created orders using that channel. If that's the only channel using this currency, you won't be able to remove it.
-- `defaultCountry`: Default country for the channel. The default country will be used in checkout to determine the stock quantities or calculate taxes when the country was not explicitly provided, either as a query parameter or through a shipping address.
-- `warehouses`: Warehouses that are available in the given channel.
-- `countries`: List of shippable countries for the channel.
-- `availableShippingMethodsPerCountry`: Shipping methods that are available for the channel.
-- `stockSettings`: contains all stock-related settings,
- e.g. the [allocation strategy](developer/stock-allocation.mdx#allocation-strategies) for the channel.
-- `orderSettings`: Channel-specific order settings.
-
-Request:
-
-```graphql
-query {
- channel(slug: "mobile") {
- id
- slug
- name
- isActive
- currencyCode
- hasOrders
- defaultCountry {
- code
- country
- }
- warehouses {
- slug
- }
- countries {
- code
- country
- }
- availableShippingMethodsPerCountry {
- countryCode
- shippingMethods {
- id
- name
- }
- }
- stockSettings {
- allocationStrategy
- }
- orderSettings {
- allowUnpaidOrders
- }
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channel": {
- "id": "Q2hhbm5lbDo0MzM=",
- "slug": "mobile",
- "name": "Mobile",
- "isActive": false,
- "currencyCode": "USD",
- "hasOrders": true,
- "defaultCountry": {
- "code": "US",
- "country": "United States of America"
- },
- "warehouses": [
- {
- "slug": "oceania"
- },
- {
- "slug": "europe"
- }
- ],
- "availableShippingMethodsPerCountry": [
- {
- "countryCode": "AD",
- "shippingMethods": [
- {
- "id": "U2hpcHBpbmdNZXRob2Q6Mg==",
- "name": "DHL"
- },
- {
- "id": "U2hpcHBpbmdNZXRob2Q6Mw==",
- "name": "UPS"
- },
- {
- "id": "U2hpcHBpbmdNZXRob2Q6NA==",
- "name": "Registered priority"
- },
- {
- "id": "U2hpcHBpbmdNZXRob2Q6NQ==",
- "name": "DB Schenker"
- }
- ]
- }
- // ... more countries
- ],
- "stockSettings": {
- "allocationStrategy": "PRIORITIZE_HIGH_STOCK"
- },
- "orderSettings": {
- "allowUnpaidOrders": false
- }
- }
- }
-}
-```
-
-### Permissions
-
-Listing channels is allowed only for users with the active [`isStaff`](api-reference/users/objects/user.mdx#userisstaffboolean--) flag.
-
-You need the `MANAGE_CHANNELS` permission to create, edit, and remove channels.
-Changing `ChannelListing` does not require additional permissions. For example, changing Product availability requires only `MANAGE_PRODUCTS` permission.
-
-Objects with customized per-channel visibility are restricted by channel permissions.
-If a user with restricted channel access fetches per-channel objects, only objects from accessible channels will be returned.
-You can read more about channel permissions [here](developer/permissions.mdx).
-
-### Creating a new channel
-
-You can create a new channel using [`channelCreate`](api-reference/channels/mutations/channel-create.mdx) mutation.
-During checkout creation, you can define the allocation strategy. Right now the
-two possible options are available: `PRIORITIZE_HIGH_STOCK` and `PRIORITIZE_SORTING_ORDER`,
-the `PRIORITIZE_SORTING_ORDER` strategy is used as default.
-You can read more about the allocation strategies [`here`](developer/stock-allocation.mdx#allocation-strategies).
-
-Request:
-
-```graphql
-mutation {
- channelCreate(
- input: {
- currencyCode: "USD"
- defaultCountry: US
- name: "Mobile"
- slug: "mobile"
- stockSettings: { allocationStrategy: PRIORITIZE_HIGH_STOCK }
- }
- ) {
- channel {
- id
- isActive
- name
- slug
- currencyCode
- defaultCountry {
- code
- country
- }
- stockSettings {
- allocationStrategy
- }
- }
- errors {
- code
- field
- message
- }
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channelCreate": {
- "channel": {
- "id": "Q2hhbm5lbDo0MzM=",
- "isActive": false,
- "name": "Mobile",
- "slug": "mobile",
- "currencyCode": "USD",
- "defaultCountry": {
- "code": "US",
- "country": "United States of America"
- },
- "stockSettings": {
- "allocationStrategy": "PRIORITIZE_HIGH_STOCK"
- }
- },
- "errors": []
- }
- }
-}
-```
-
-### Channel list
-
-Because some of the channels may be considered non-public (for example - a channel for business partners), non-staff users cannot use the [`channels`](api-reference/channels/queries/channels.mdx) query.
-
-Request:
-
-```graphql
-query {
- channels {
- name
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channels": [
- {
- "name": "Mobile"
- },
- {
- "name": "Website"
- }
- ]
- }
-}
-```
-
-#### Activate / Deactivate channel
-
-If you want to make the channel unavailable for customers, you can change its status to `deactivated` using [`channelDeactivate`](api-reference/channels/mutations/channel-deactivate.mdx) mutation:
-
-```graphql
-mutation {
- channelDeactivate(slug: "default-channel") {
- channel {
- name
- isActive
- }
- errors {
- message
- }
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channelDeactivate": {
- "channel": {
- "name": "Facebook",
- "isActive": false
- },
- "channelErrors": []
- }
- }
-}
-```
-
-And to reverse the previous operation use the [`channelActivate`](api-reference/channels/mutations/channel-activate.mdx) mutation:
-
-```graphql
-mutation {
- channelActivate(slug: "default-channel") {
- channel {
- name
- isActive
- }
- errors {
- message
- }
- }
-}
-```
-
-Response:
-
-```json
-{
- "data": {
- "channelDeactivate": {
- "channel": {
- "name": "Facebook",
- "isActive": true
- },
- "channelErrors": []
- }
- }
-}
-```
-
-### Reorder warehouses within channels
-
-The warehouses assigned to the channel can be sorted. The provided order defines the
-warehouses' order used in `PRIORITIZE_SORTING_ORDER`
-[allocation strategy](developer/stock-allocation.mdx#allocation-strategies).
-The `sort_order` in `moves` input represents the new relative position of the item.
-So when 1 is provided, the item will be moved one position forward; when -1 - one
-position backward.
-
-Let's assume that we have a `channel` with three warehouses in the following order.
-
-```json
-{
- "data": {
- "channel": {
- "id": "Q2hhbm5lbDox",
- "warehouses": [
- {
- "id": "V2FyZWhvdXNlOjU1NTZiOWI0LTc1ZTItNGI3YS1hZWM1LTQxOTY4NDA2OGE4OA==",
- "slug": "europe"
- },
- {
- "id": "V2FyZWhvdXNlOjQwZWY1MTQwLWQ5OTYtNDVlNy04NzUzLTlkZThkMTdhMjg1Yw==",
- "slug": "oceania"
- },
- {
- "id": "V2FyZWhvdXNlOjY4M2FkMzZhLTRmNjktNDI2ZS1iYzUyLTMyZGJiZTQ2NjUyZA==",
- "slug": "americas"
- }
- ]
- }
- }
-}
-```
-
-To move the `americas` warehouse to the first place and the `europe` warehouse to
-third, we can run the following mutation.
-
-```graphql
-mutation {
- channelReorderWarehouses(
- channelId: "Q2hhbm5lbDox"
- moves: [
- {
- # move for `americas` warehouse
- id: "V2FyZWhvdXNlOjY4M2FkMzZhLTRmNjktNDI2ZS1iYzUyLTMyZGJiZTQ2NjUyZA=="
- sortOrder: -2
- }
- {
- # move for `europe` warehouse
- id: "V2FyZWhvdXNlOjU1NTZiOWI0LTc1ZTItNGI3YS1hZWM1LTQxOTY4NDA2OGE4OA=="
- sortOrder: 1
- }
- ]
- ) {
- channel {
- id
- warehouses {
- id
- slug
- }
- }
- errors {
- field
- code
- message
- warehouses
- }
- }
-}
-```
-
-And as a response, we get:
-
-```json
-{
- "data": {
- "channelReorderWarehouses": {
- "channel": {
- "id": "Q2hhbm5lbDox",
- "warehouses": [
- {
- "id": "V2FyZWhvdXNlOjY4M2FkMzZhLTRmNjktNDI2ZS1iYzUyLTMyZGJiZTQ2NjUyZA==",
- "slug": "americas"
- },
- {
- "id": "V2FyZWhvdXNlOjQwZWY1MTQwLWQ5OTYtNDVlNy04NzUzLTlkZThkMTdhMjg1Yw==",
- "slug": "oceania"
- },
- {
- "id": "V2FyZWhvdXNlOjU1NTZiOWI0LTc1ZTItNGI3YS1hZWM1LTQxOTY4NDA2OGE4OA==",
- "slug": "europe"
- }
- ]
- },
- "errors": []
- }
- }
-}
-```
-
-### Removing a channel
-
-Channels can be removed only when:
-
-- There are no orders created in them.
-- If there are orders created, `targetChannel` is required. Its currency has to be the same as the channel you are about to delete. All orders will be moved to `targetChannel`.
-
-[`channelDelete`](api-reference/channels/mutations/channel-delete.mdx) mutation takes [input](api-reference/channels/inputs/channel-delete-input.mdx):
-
-- `id`: ID of the Channel that will be deleted
-- `channelId`: all existing orders will be moved into this channel
-
-```graphql
-channelDelete(
- id: ID!
- input: ChannelDeleteInput
-): ChannelDelete
-
-input ChannelDeleteInput {
- channelId: ID! # ID of the channel to migrate orders from origin channel.
-}
-```
-
-### Errors
-
-```graphql
-type ChannelError {
- field: String
- message: String
- code: ChannelErrorCode!
-}
-
-enum ChannelErrorCode {
- ALREADY_EXISTS
- GRAPHQL_ERROR
- INVALID
- NOT_FOUND
- REQUIRED
- UNIQUE
- CHANNEL_TARGET_ID_MUST_BE_DIFFERENT
- CHANNELS_CURRENCY_MUST_BE_THE_SAME
-}
-```
-
-[`ChannelErrorCode`](api-reference/channels/enums/channel-error-code.mdx) values:
-
-- `ALREADY_EXISTS`: Object already exists in the database
-- `GRAPHQL_ERROR`: Wrong query
-- `INVALID`: Invalid data provided
-- `NOT_FOUND`: Could not found object
-- `REQUIRED`: Missing required fields
-- `UNIQUE`: Provided value for field needs to be unique
-- `CHANNEL_TARGET_ID_MUST_BE_DIFFERENT`: Cannot move orders into the channel you want to delete
-- `CHANNELS_CURRENCY_MUST_BE_THE_SAME`: Target channel has to have the same currency
diff --git a/docs/api-usage/overview.mdx b/docs/api-usage/overview.mdx
index b400e0af1..440c19630 100644
--- a/docs/api-usage/overview.mdx
+++ b/docs/api-usage/overview.mdx
@@ -1,10 +1,9 @@
---
-title: Overview
+title: GraphQL
+sidebar_label: Overview
sidebar_position: 1
---
-## GraphQL
-
Saleor is powered by GraphQL. GraphQL is a query language that allows clients to talk to an API server. Unlike REST, it gives the client control over how much or how little data they want to receive about each object and allows relations within the object graph to be traversed easily.
To learn more about the GraphQL language and its concepts, see the official [GraphQL website](https://graphql.org/).
diff --git a/docs/developer/app-store/apps/adyen-web-drop-in.png b/docs/developer/app-store/apps/adyen/adyen-web-drop-in.png
similarity index 100%
rename from docs/developer/app-store/apps/adyen-web-drop-in.png
rename to docs/developer/app-store/apps/adyen/adyen-web-drop-in.png
diff --git a/docs/developer/app-store/apps/adyen/architecture.mdx b/docs/developer/app-store/apps/adyen/architecture.mdx
new file mode 100644
index 000000000..e000f20c2
--- /dev/null
+++ b/docs/developer/app-store/apps/adyen/architecture.mdx
@@ -0,0 +1,34 @@
+---
+sidebar_position: 2
+title: Architecture
+---
+
+## Webhook events
+
+The Adyen App implements the following [Saleor sync webhooks related to transactions](developer/extending/webhooks/synchronous-events/transaction.mdx):
+
+- [`PAYMENT_GATEWAY_INITIALIZE_SESSION`](api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumpayment_gateway_initialize_session)
+- [`TRANSACTION_INITIALIZE_SESSION`](api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_initialize_session)
+- [`TRANSACTION_PROCESS_SESSION`](api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_process_session)
+- [`TRANSACTION_CHARGE_REQUESTED`](api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_charge_requested)
+- [`TRANSACTION_CANCEL_REQUESTED`](api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_cancelation_requested)
+- [`TRANSACTION_REFUND_REQUESTED`](api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_refund_requested)
+
+Furthermore, it's also prepared to handle [async Adyen webhooks](https://docs.adyen.com/development-resources/webhooks).
+
+The Adyen App follows the flow described in detail in the [Saleor Payment App documentation](developer/payments.mdx#payment-app).
+
+## Limitations
+
+This section contains known limitations of this App.
+
+### Maximum timeout for Adyen calls is 15 seconds
+
+Saleor synchronous webhooks have a maximum response time limit of 20 seconds. The app restricts the Adyen response time to 15 seconds to allow graceful error handling.
+If Adyen surpasses this limit, the App will return a FAILURE status with an appropriate error message (Timeout Error).
+
+### Maximum timeout for Saleor API calls is 5 seconds
+
+The app restricts Saleor API response time to 5 seconds for [`TransactionInitializeSession`](developer/extending/webhooks/synchronous-events/transaction.mdx#initialize-transaction-session) and [`TransactionProcessSession`](developer/extending/webhooks/synchronous-events/transaction.mdx#process-transaction-session) subscriptions. If Saleor API surpasses this limit, the App will gracefully continue processing.
+
+If such timeout happens, the created [`TransactionItem`](api-reference/payments/objects/transaction-item.mdx) will not have the metadata from Adyen on `additionalDetails` object, which includes payment method type, credit card brand, etc.
diff --git a/docs/developer/app-store/apps/adyen/configuration.mdx b/docs/developer/app-store/apps/adyen/configuration.mdx
new file mode 100644
index 000000000..24d5c859b
--- /dev/null
+++ b/docs/developer/app-store/apps/adyen/configuration.mdx
@@ -0,0 +1,69 @@
+---
+sidebar_position: 3
+title: Configuration
+---
+
+import Video from "@site/components/Video";
+
+For Adyen to appear as [available payment gateway](developer/checkout/finalizing.mdx#listing-available-payment-gateways), you need to [install it in the Saleor Dashboard](developer/app-store/overview.mdx#usage). You must obtain the API key from Adyen and paste it into the Adyen App configuration form. Then, a wizard will guide you through the process of configuring the Adyen App, setting up the webhook to receive notifications from Adyen, generating the HMAC key, and adding allowed origins for the Client Key that's used on your Storefront.
+
+## Configuring Adyen
+
+Video introduction to Adyen configuration in Saleor:
+
+
+
+You can install the Adyen app directly from your Saleor Dashboard. Go to the **Apps** section and click the **Install** button next to the Adyen app. Follow the instructions on the screen. After the installation is complete, select the Adyen app from the list of installed applications.
+
+### Creating new API Credentials
+
+To create new Adyen API credentials head over to the Adyen dashboard, then **Developers -> API credentials**. Click **Create new credential** and choose **Web service user**.
+
+In **Server settings -> Authentication** section generate a new API key.
+
+In **Client settings -> Authentication** section generate a new client key.
+
+Go back to the Adyen app configuration in the Saleor Dashboard. Provide a configuration name that you will be familiar with. In the **API Key** field provide the key from **Server settings -> Authentication** section. Select **TEST** environment.
+
+:::caution
+The configuration will not work until you save API credentials in the Adyen dashboard.
+:::
+
+Save API credentials in the Adyen dashboard, head over to the Adyen app configuration, and click **Save**. The rest of the form fields have been enabled.
+
+In **Client key** field provide key from **Client settings -> Authentication** section. Select the merchant account you want to use from the dropdown.
+
+### Webook configuration
+
+In Adyen dashboard head over to **Developers -> Webhooks**. Click the **+ Webhook** button and choose **Standard webhook**. Provide a description for the webhook.
+
+In the **Server configuration** section provide URL the Saleor Adyen app has generated for you. You can copy it from the **Webhook URL** input in the Adyen configuration form. Leave default settings and click **Apply**.
+
+In **Merchant accounts** select **Include only specific merchant accounts** and choose the merchant account you would like to use.
+
+In **Events**, apart from events selected by default, select `EXPIRE`. Deselect `ORDER_OPENED` event.
+
+In **Additional settings -> Risk** select `Include the originalReference for CHARGEBACK_REVERSED events`.
+
+In **Security -> Basic authentication** provide username and password. Apply changes. Use the same username and password in the **webhook username** and **webhook password** fields in the Adyen application.
+
+Generate a new **HMAC key** in the **Security -> HMAC Key** section and copy it.
+
+Apply the configuration details in the Saleor Adyen app then in Adyen dashboard save the new Adyen webhook.
+Save the configuration. If everything went well, you should see a new button **Make test webhook call**. Use it to test if your configuration is correct.
+
+:::caution
+
+API Key provided inside the configuration must have the following permissions set in Adyen Dashboard:
+
+- "Management API - Accounts read and write"
+- "Management API - API credentials read and write"
+- "Management API - Payment methods read"
+- "Management API - Stores read and write"
+- "Management API - Webhooks read and write"
+- "Checkout encrypted cardholder data"
+- "Merchant Recurring role"
+- "Checkout webservice role"
+- "Merchant PAL Webservice role"
+
+:::
diff --git a/docs/developer/app-store/apps/adyen/overview.mdx b/docs/developer/app-store/apps/adyen/overview.mdx
new file mode 100644
index 000000000..f9e99a160
--- /dev/null
+++ b/docs/developer/app-store/apps/adyen/overview.mdx
@@ -0,0 +1,30 @@
+---
+sidebar_label: Overview
+sidebar_position: 1
+title: Adyen
+---
+
+import { AppMetadata } from "/components/AppMetadata/AppMetadata.tsx";
+
+
+
+The Adyen App is a payment integration app that allows merchants using the Saleor e-commerce platform to accept online payments from customers using Adyen as their payment processor. In addition to processing payments, the Saleor App Payment Adyen provides merchants with tools for managing refunds and chargebacks.
+
+:::caution
+
+To configure the Adyen App, you must have an account with [Adyen](https://www.adyen.com).
+
+:::
+
+The Adyen App uses the [Adyen Drop-in Advanced Flow](https://docs.adyen.com/online-payments/build-your-integration/advanced-flow/) and allows for integrations with the following Adyen flows:
+
+- Web (drop-in and components)
+- iOS (drop-in and components)
+- Android (drop-in and components)
+- Cross-platform (React Native drop-in and React Native components)
+
+:::info
+
+Adyen App uses Adyen [Checkout API v70](https://docs.adyen.com/api-explorer/#/CheckoutService/v70/overview) and [Management API v1](https://docs.adyen.com/api-explorer/#/ManagementService/v1/overview).
+
+:::
diff --git a/docs/developer/app-store/apps/adyen.mdx b/docs/developer/app-store/apps/adyen/storefront.mdx
similarity index 62%
rename from docs/developer/app-store/apps/adyen.mdx
rename to docs/developer/app-store/apps/adyen/storefront.mdx
index ae0e4e304..312be6e11 100644
--- a/docs/developer/app-store/apps/adyen.mdx
+++ b/docs/developer/app-store/apps/adyen/storefront.mdx
@@ -1,137 +1,17 @@
---
-title: Adyen
-sidebar_position: 3
+sidebar_position: 4
+title: Storefront Integration
---
-import { AppMetadata } from "/components/AppMetadata/AppMetadata.tsx";
-import Video from "@site/components/Video";
-
-
-
-## Overview
-
-Adyen App is a payment integration app that allows merchants using the Saleor e-commerce platform to accept online payments from customers using Adyen as their payment processor. In addition to processing payments, the Saleor App Payment Adyen provides merchants with tools for managing refunds and chargebacks.
-
-:::caution
-
-To configure the Adyen App, you must have an account with [Adyen](https://www.adyen.com).
-
-:::
-
-The Adyen App allows for integrations with [Adyen Web Drop-in](https://docs.adyen.com/online-payments/web-drop-in/additional-use-cases/advanced-flow), [Adyen iOS Drop-in](https://docs.adyen.com/online-payments/ios/drop-in/additional-use-cases/advanced-flow), [Adyen Android Drop-in](https://docs.adyen.com/online-payments/android/drop-in), and [Adyen React Native Drop-in](https://docs.adyen.com/online-payments/react-native/drop-in). It uses the [Adyen Drop-in Advanced Flow](https://docs.adyen.com/online-payments/web-drop-in/additional-use-cases/advanced-flow).
-
-:::info
-
-Adyen App uses Adyen [Checkout API v70](https://docs.adyen.com/api-explorer/#/CheckoutService/v70/overview) and [Management API v1](https://docs.adyen.com/api-explorer/#/ManagementService/v1/overview).
-
-:::
-
-## Capabilities
-
-The Adyen App implements the following [Saleor sync webhooks related to transactions](../../extending/webhooks/synchronous-events/transaction.mdx):
-
-- [`PAYMENT_GATEWAY_INITIALIZE_SESSION`](../../../api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumpayment_gateway_initialize_session)
-- [`TRANSACTION_INITIALIZE_SESSION`](../../../api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_initialize_session)
-- [`TRANSACTION_PROCESS_SESSION`](../../../api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_process_session)
-- [`TRANSACTION_CHARGE_REQUESTED`](../../../api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_charge_requested)
-- [`TRANSACTION_CANCEL_REQUESTED`](../../../api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_cancelation_requested)
-- [`TRANSACTION_REFUND_REQUESTED`](../../../api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_refund_requested)
-
-Furthermore, it's also prepared to handle [async Adyen webhooks](https://docs.adyen.com/development-resources/webhooks).
-
-Adyen App follows the flow described in detail in the [Saleor Payment App documentation](../../payments#payment-app).
-
-## Limitations
-
-This section contains known limitations of this App.
-
-### Maximum timeout for Adyen calls is 15 seconds
-
-Saleor synchronous webhooks have a maximum response time limit of 20 seconds. The app restricts Adyen response time to 15 seconds to allow graceful error handling.
-If Adyen surpasses this limit, the App will return a FAILURE status with an appropriate error message (Timeout Error).
-
-### Maximum timeout for Saleor API calls is 5 seconds
-
-The apps restricts Saleor API response time to 5 seconds for [`TransactionInitializeSession`](../../extending/webhooks/synchronous-events/transaction.mdx#initialize-transaction-session) and [`TransactionProcessSession`](../../extending/webhooks/synchronous-events/transaction.mdx#process-transaction-session) subscriptions. If Saleor API surpasses this limit, the App will gracefully continue processing.
-
-If such timeout happens, the created [`TransactionItem`](../../../api-reference/payments/objects/transaction-item.mdx) will not have the metadata from Adyen on `additionalDetails` object, that include payment method type, credit card brand, etc.
-
-## Configuration
-
-For Adyen to appear as [available payment gateway](../../checkout/finalizing.mdx#listing-available-payment-gateways), you need to [install it in the Saleor Dashboard](../overview#usage). You must obtain the API key from Adyen and paste it into the Adyen App configuration form. Then, a wizard will guide you through the process of configuring the Adyen App, setting up the webhook to receive notifications from Adyen, generating the HMAC key, and adding allowed origins for the Client Key that's used on your Storefront.
-
-### Configuring Adyen
-
-Video introduction to Adyen configuration in Saleor:
-
-
-
-You can install the Adyen app directly from your Saleor Dashboard. Go to the **Apps** section and click the **Install** button next to the Adyen app. Follow the instructions on the screen. After the installation is complete, select the Adyen app from the list of installed applications.
-
-#### Creating new API Credentials
-
-To create new Adyen API credentials head over to the Adyen dashboard, then **Developers -> API credentials**. Click **Create new credential** and choose **Web service user**.
-
-In **Server settings -> Authentication** section generate new API key.
-
-In **Client settings -> Authentication** section generate new client key.
-
-Go back to the Adyen app configuration in the Saleor Dashboard. Provide a configuration name that you will be familiar with. In the **API Key** field provide the key from **Server settings -> Authentication** section. Select **TEST** environment.
-
-:::caution
-The configuration will not work until you save API credentials in the Adyen dashboard.
-:::
-
-Save API credentials in the Adyen dashboard, head over to the Adyen app configuration, and click **Save**. The rest of the form fields have been enabled.
-
-In **Client key** field provide key from **Client settings -> Authentication** section. Select the merchant account you want to use from the dropdown.
-
-#### Webook configuration
-
-In Adyen dashboard head over to **Developers -> Webhooks**. Click the **+ Webhook** button and choose **Standard webhook**. Provide a description for the webhook.
-
-In the **Server configuration** section provide URL the Saleor Adyen app has generated for you. You can copy it from the **Webhook URL** input in the Adyen configuration form. Leave default settings and click **Apply**.
-
-In **Merchant accounts** select **Include only specific merchant accounts** and choose the merchant account you would like to use.
-
-In **Events**, apart from events selected by default, select `EXPIRE`. Deselect `ORDER_OPENED` event.
-
-In **Additional settings -> Risk** select `Include the originalReference for CHARGEBACK_REVERSED events`.
-
-In **Security -> Basic authentication** provide username and password. Apply changes. Use the same username and password in the **webhook username** and **webhook password** fields in the Adyen application.
-
-Generate a new **HMAC key** in the **Security -> HMAC Key** section and copy it.
-
-Apply the configuration details in the Saleor Adyen app then in Adyen dashboard save the new Adyen webhook.
-Save the configuration. If everything went well, you should see a new button **Make test webhook call**. Use it to test if your configuration is correct.
-
-:::caution
-
-API Key provided inside the configuration must have the following permissions set in Adyen Dashboard:
-
-- "Management API - Accounts read and write"
-- "Management API - API credentials read and write"
-- "Management API - Payment methods read"
-- "Management API - Stores read and write"
-- "Management API - Webhooks read and write"
-- "Checkout encrypted cardholder data"
-- "Merchant Recurring role"
-- "Checkout webservice role"
-- "Merchant PAL Webservice role"
-
-:::
-
-## Usage in Storefront or mobile apps
-
-Adyen App can be used to integrate with Adyen APIs. By using a set of GraphQL mutations, one can interact with Adyen to authorize, capture, refund, and cancel payments.
+The Adyen App can be used to process payments using the Adyen API. By using Saleor's standard GraphQL payment APIs, one can interact with Adyen to authorize, capture, refund, and cancel payments.
import AdyenScreenshot from "./adyen-web-drop-in.png";
-### Getting payment gateways
+## Getting payment gateways
-The first step is to fetch the Checkout object including [`availablePaymentGateways`](../../../api-reference/checkout/objects/checkout.mdx#checkoutavailablepaymentgatewayspaymentgateway--) field. The `availablePaymentGateways` field contains a list of payment gateways available for given checkout. The Adyen App should be one of the payment gateways available in the list. Its `id` is [`app.saleor.adyen`](https://adyen.saleor.app/api/manifest) - defined in app's manifest.
+The first step is to fetch the Checkout object including [`availablePaymentGateways`](api-reference/checkout/objects/checkout.mdx#checkoutavailablepaymentgatewayspaymentgateway--) field. The `availablePaymentGateways` field contains a list of payment gateways available for given checkout. The Adyen App should be one of the payment gateways available in the list. Its `id` is [`app.saleor.adyen`](https://adyen.saleor.app/api/manifest) - defined in app's manifest.
```graphql
query {
@@ -163,13 +43,13 @@ The response:
:::note
-`availablePaymentGateways` may contain other Payment Apps as well as [legacy Plugins](../../../developer/extending/payment-gateways.mdx) configured in the Dashboard. You should ignore the ones that you don't want to use for a specific checkout.
+`availablePaymentGateways` may contain other Payment Apps as well as [legacy Plugins](developer/extending/payment-gateways.mdx) configured in the Dashboard. You should ignore the ones that you don't want to use for a specific checkout.
:::
-### Obtaining Adyen payment methods
+## Obtaining Adyen payment methods
-Next, you need to fetch configured payment methods from Adyen. To do that, use the [`paymentGatewayInitialize`](../../../api-reference/payments/mutations/payment-gateway-initialize.mdx) mutation. The mutation returns a `PaymentGatewayInitialize` object with `data` field containing a list of payment methods. The `data` field is an object with the following fields:
+Next, you need to fetch configured payment methods from Adyen. To do that, use the [`paymentGatewayInitialize`](api-reference/payments/mutations/payment-gateway-initialize.mdx) mutation. The mutation returns a `PaymentGatewayInitialize` object with `data` field containing a list of payment methods. The `data` field is an object with the following fields:
```ts
{
@@ -180,7 +60,7 @@ Next, you need to fetch configured payment methods from Adyen. To do that, use t
}
```
-Where `PaymentMethodsResponse` is the result of calling Adyen's `/paymentMethods` endpoint and is described in the [Adyen documentation](https://docs.adyen.com/api-explorer/Checkout/latest/post/paymentMethods#responses-200). `SyncWebhookAppErrors` is [described below](#handling-errors).
+Where `PaymentMethodsResponse` is the result of calling Adyen's `/paymentMethods` endpoint and is described in the [Adyen documentation](https://docs.adyen.com/api-explorer/Checkout/latest/post/paymentMethods.mdx#responses-200). `SyncWebhookAppErrors` is [described below](#error-handling).
If `errors` field doesn't exist or is an empty array, `paymentMethodsResponse`, `clientKey` and `environment` should be used to initialize [Adyen Drop-in](https://docs.adyen.com/online-payments/web-drop-in/additional-use-cases/advanced-flow).
@@ -246,9 +126,9 @@ For instructions on how to add, remove or constraint payment methods from Adyen,
:::
-### Paying with Adyen
+## Paying with Adyen
-After a user has interacted with the Adyen Drop-in and entered payment details, [Drop-in event data along with other information](https://docs.adyen.com/online-payments/web-drop-in/additional-use-cases/advanced-flow#step-3-make-a-payment) should be passed to the [`transactionInitialize`](../../../api-reference/payments/mutations/transaction-initialize.mdx) mutation as the `paymentGateway.data` field. The mutation returns the `TransactionInitialize` object with a `data` field containing the following fields:
+After a user has interacted with the Adyen Drop-in and entered payment details, [Drop-in event data along with other information](https://docs.adyen.com/online-payments/web-drop-in/additional-use-cases/advanced-flow#step-3-make-a-payment) should be passed to the [`transactionInitialize`](api-reference/payments/mutations/transaction-initialize.mdx) mutation as the `paymentGateway.data` field. The mutation returns the `TransactionInitialize` object with a `data` field containing the following fields:
```ts
{
@@ -257,7 +137,7 @@ After a user has interacted with the Adyen Drop-in and entered payment details,
}
```
-Where `PaymentResponse` is the result of calling Adyen's `/payments` endpoint and is described in the [Adyen documentation](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#responses-200). `SyncWebhookAppErrors` is [described below](#handling-errors).
+Where `PaymentResponse` is the result of calling Adyen's `/payments` endpoint and is described in the [Adyen documentation](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#responses-200). `SyncWebhookAppErrors` is [described below](#error-handling).
If the `errors` field doesn't exist or is an empty array, pass the `paymentResponse` to Adyen Drop-in. The Drop-in will handle the response and display the result to the user or require additional actions to proceed.
@@ -357,9 +237,9 @@ Response:
}
```
-### Performing additional actions (_optional_)
+## Performing additional actions (_optional_)
-Optionally, additional actions may be required: authentication of payment with 3D Secure, scan of a QR code, or logging in to the bank to complete the payment. In this case, [`transactionProcess`](../../../api-reference/payments/mutations/transaction-process.mdx) mutation should be used.
+Optionally, additional actions may be required: authentication of payment with 3D Secure, scan of a QR code, or logging in to the bank to complete the payment. In this case, [`transactionProcess`](api-reference/payments/mutations/transaction-process.mdx) mutation should be used.
```graphql
mutation AdyenTransactionProcess($id: ID!, $data: JSON) {
@@ -391,7 +271,7 @@ Where `$data` is the object provided by Adyen Drop-in in the `onAdditionalDetail
}
```
-`PaymentDetailsResponse` is the result of calling Adyen's `/payments/details` endpoint and is described in the [Adyen documentation](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details#responses-200). `SyncWebhookAppErrors` is [described below](#handling-errors).
+`PaymentDetailsResponse` is the result of calling Adyen's `/payments/details` endpoint and is described in the [Adyen documentation](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details#responses-200). `SyncWebhookAppErrors` is [described below](#error-handling).
If the `errors` field doesn't exist or is an empty array, pass the `paymentDetailsResponse` back to Adyen Drop-in. The Drop-in will handle the response and display the result to the user or again require additional actions to proceed.
@@ -399,11 +279,11 @@ Repeat the step until the payment is successful or fails.
:::caution
-Many payment methods are not settled synchronously. Sometimes it takes seconds, minutes, hours, or even days for a payment to go through. Adyen App will automatically handle Adyen webhook notifications and create transaction events in Saleor (see [`transactionEventReport`](../../../api-reference/payments/mutations/transaction-event-report.mdx)).
+Many payment methods are not settled synchronously. Sometimes it takes seconds, minutes, hours, or even days for a payment to go through. Adyen App will automatically handle Adyen webhook notifications and create transaction events in Saleor (see [`transactionEventReport`](api-reference/payments/mutations/transaction-event-report.mdx)).
:::
-### Apple Pay `onValidateMerchant`
+## Apple Pay `onValidateMerchant`
To implement Apple Pay integration through Adyen and use your own Apple Pay certificate, you must implement `onValidateMerchant` (Web, React Native) or `onvalidatemerchant` (iOS). The Adyen Saleor App provides a way to validate the merchant using the `paymentGatewayInitialize` mutation:
@@ -445,7 +325,7 @@ and provide the following JSON in `$data`:
All the parameters should be provided according to [Apple Pay documentation on the Adyen website](https://docs.adyen.com/payment-methods/apple-pay/web-drop-in?tab=_code_payments_code__2#page-introduction).
-### Additional endpoints (optional)
+## Additional endpoints (optional)
To use some payment methods inside Adyen Drop-in you may have to implement the following callbacks:
@@ -463,7 +343,7 @@ Orders link transactions on the Adyen level. For example, if a user cancels an o
:::
-#### `onBalanceCheck`
+### `onBalanceCheck`
To call the `/paymentMethods/balance` endpoint use the `paymentGatewayInitialize` mutation:
@@ -554,7 +434,7 @@ The response received from Saleor with data from the Adyen app will be:
}
```
-#### `onOrderRequest`
+### `onOrderRequest`
Similarly to `onBalanceCheck`, to call the `/orders` endpoint use the `paymentGatewayInitialize` mutation and pass the following `$data`:
@@ -624,7 +504,7 @@ Adyen app uses a `pspReference` field internally to link the notifications from
This field shouldn't be used by any external system, as it can change at any time without further notice.
:::
-#### `onOrderCancel`
+### `onOrderCancel`
Should be called when the user removes a payment method in a pending Adyen order, for example when there was already a partial charge for a gift card but the user decided to use a different payment method.
@@ -679,7 +559,7 @@ async onOrderCancel({order}) {
}
```
-### Handling errors
+## Error handling
The three mutations described above may return `data.errors` field. The existence of this field determines that the request was unsuccessful. `errors` is an array of `SyncWebhookAppError` objects. The `SyncWebhookAppError` object has the following fields:
diff --git a/docs/developer/app-store/apps/avatax/architecture.mdx b/docs/developer/app-store/apps/avatax/architecture.mdx
index 2add6d74c..0e3df69a8 100644
--- a/docs/developer/app-store/apps/avatax/architecture.mdx
+++ b/docs/developer/app-store/apps/avatax/architecture.mdx
@@ -1,4 +1,5 @@
---
+sidebar_position: 2
title: Architecture
---
diff --git a/docs/developer/app-store/apps/avatax/configuration.mdx b/docs/developer/app-store/apps/avatax/configuration.mdx
index 3b4c65617..2082644d6 100644
--- a/docs/developer/app-store/apps/avatax/configuration.mdx
+++ b/docs/developer/app-store/apps/avatax/configuration.mdx
@@ -1,4 +1,5 @@
---
+sidebar_position: 3
title: Configuration
---
diff --git a/docs/developer/app-store/apps/avatax/development.mdx b/docs/developer/app-store/apps/avatax/development.mdx
index b714a9fc9..44b01fbdf 100644
--- a/docs/developer/app-store/apps/avatax/development.mdx
+++ b/docs/developer/app-store/apps/avatax/development.mdx
@@ -1,4 +1,7 @@
-# Development
+---
+sidebar_position: 5
+title: Development
+---
To run the AvaTax App locally:
diff --git a/docs/developer/app-store/apps/avatax/overview.mdx b/docs/developer/app-store/apps/avatax/overview.mdx
index 6fcf7d908..a1f90c0a9 100644
--- a/docs/developer/app-store/apps/avatax/overview.mdx
+++ b/docs/developer/app-store/apps/avatax/overview.mdx
@@ -1,6 +1,7 @@
---
-title: Overview
-sidebar_position: 2
+sidebar_label: Overview
+sidebar_position: 1
+title: AvaTax
---
import { AppMetadata } from "/components/AppMetadata/AppMetadata.tsx";
@@ -10,17 +11,17 @@ import { AppMetadata } from "/components/AppMetadata/AppMetadata.tsx";
githubUrl="https://github.com/saleor/apps/tree/main/apps/avatax"
/>
-_AvaTax_ is a Saleor app that allows delegating tax calculations to [Avatax](https://www.avalara.com/us/en/products/calculations.html). It can replace the default ([flat rates](developer/taxes.mdx#flat-rates)) tax calculation method in Saleor. It affects both the checkout and the order creation process.
+_AvaTax_ is a Saleor app that allows delegating tax calculations to [Avalara AvaTax](https://www.avalara.com/us/en/products/calculations.html).It can replace the default ([flat rates](developer/taxes.mdx#flat-rates)) tax calculation method in Saleor. It affects both the checkout and the order creation process.
-Avalara AvaTax is a cloud-based solution automating transaction tax calculations and the tax filing process. Avalara
+Avalara AvaTax is a cloud-based solution automating transaction tax calculations and the tax filing process. Avalara
provides real-time tax calculation using tax content from more than 12,000 US taxing jurisdictions and over 200
countries, insuring your transaction tax is calculated based on the most current tax rules.
## Features
-AvaTax App offers:
+The AvaTax App offers:
-- Integrations with AvaTax
+- Integrations with Avalara AvaTax
- Calculating taxes for order and checkout
- Creating multiple configurations and connecting them to channels individually.
- [Mapping tax codes from your tax provider to Saleor tax classes](./tax-codes)
@@ -34,7 +35,7 @@ AvaTax App offers:
## Architecture
-If you want to explore how the AvaTax App works, you can read the [Avatax App architecture](./architecture) article.
+If you want to explore how the AvaTax App works, you can read the [AvaTax App architecture](./architecture) article.
## Configuration
diff --git a/docs/developer/app-store/apps/avatax/tax-codes.mdx b/docs/developer/app-store/apps/avatax/tax-codes.mdx
index c1af620d0..53047c8a0 100644
--- a/docs/developer/app-store/apps/avatax/tax-codes.mdx
+++ b/docs/developer/app-store/apps/avatax/tax-codes.mdx
@@ -1,4 +1,7 @@
-# Mapping Tax Codes
+---
+sidebar_position: 4
+title: Tax Code Mapping
+---
AvaTax App offers a solution for mapping the provider tax codes to Saleor tax classes. This assures the products are taxed based on their individual tax rates, not a general one.
diff --git a/docs/developer/app-store/apps/emails-and-messages/overview.mdx b/docs/developer/app-store/apps/emails-and-messages/overview.mdx
index c131ae3ee..d2aa9e9a1 100644
--- a/docs/developer/app-store/apps/emails-and-messages/overview.mdx
+++ b/docs/developer/app-store/apps/emails-and-messages/overview.mdx
@@ -1,6 +1,7 @@
---
-title: Overview
+sidebar_label: Overview
sidebar_position: 1
+title: Emails and Messages
---
import { AppMetadata } from "/components/AppMetadata/AppMetadata.tsx";
diff --git a/docs/developer/app-store/apps/emails-and-messages/sendgrid.mdx b/docs/developer/app-store/apps/emails-and-messages/sendgrid.mdx
index 890afac52..451a8b122 100644
--- a/docs/developer/app-store/apps/emails-and-messages/sendgrid.mdx
+++ b/docs/developer/app-store/apps/emails-and-messages/sendgrid.mdx
@@ -1,10 +1,8 @@
---
+sidebar_position: 3
title: Sendgrid Provider
-sidebar_position: 2
---
-# Sendgrid provider
-
:::info
Using this provider requires a Sendgrid account. You can create one [here](https://signup.sendgrid.com/).
diff --git a/docs/developer/app-store/apps/emails-and-messages/smtp.mdx b/docs/developer/app-store/apps/emails-and-messages/smtp.mdx
index a73b010cf..392e50a39 100644
--- a/docs/developer/app-store/apps/emails-and-messages/smtp.mdx
+++ b/docs/developer/app-store/apps/emails-and-messages/smtp.mdx
@@ -1,10 +1,8 @@
---
+sidebar_position: 2
title: SMTP Provider
-sidebar_position: 3
---
-# SMTP provider
-
To use this provider, you will need SMTP server credentials. Email templates are created using [MJML](https://mjml.io/) language and can be edited in the app dashboard. Dynamic parts of the email (for example the number of the order) can be added using [Handlebars](https://handlebarsjs.com/).
## Before you start - server credentials
diff --git a/docs/developer/app-store/apps/emails-and-messages/troubleshooting.mdx b/docs/developer/app-store/apps/emails-and-messages/troubleshooting.mdx
index 0e5fcf219..2fc7424f9 100644
--- a/docs/developer/app-store/apps/emails-and-messages/troubleshooting.mdx
+++ b/docs/developer/app-store/apps/emails-and-messages/troubleshooting.mdx
@@ -1,10 +1,8 @@
---
-title: Troubleshooting
sidebar_position: 4
+title: Troubleshooting
---
-# Troubleshooting
-
By following the troubleshooting guidelines outlined here, you'll be able to troubleshoot and resolve common email-related issues, ensuring that your emails reach the intended recipients' inboxes.
If you encounter a problem that is not covered here or need further assistance, we recommend reaching out to [the GitHub Issues](https://github.com/saleor/apps/issues) page.
diff --git a/docs/developer/app-store/apps/overview.mdx b/docs/developer/app-store/apps/overview.mdx
index 7b2e8f086..51347029c 100644
--- a/docs/developer/app-store/apps/overview.mdx
+++ b/docs/developer/app-store/apps/overview.mdx
@@ -1,12 +1,11 @@
---
-title: Overview
+title: Apps
+sidebar_label: Overview
sidebar_position: 1
---
import CardGrid from "@site/components/CardGrid";
-# Apps
-
:::tip
Do you want to build your own app? Visit our [App Quickstart Guide](developer/extending/apps/quickstart.mdx).
@@ -19,29 +18,29 @@ Saleor App Store contains the following apps:
-[**Adyen** Simplify your payment process and offer a seamless online shopping experience with Adyen.](adyen)
+[**Adyen** Simplify your payment process and offer a seamless online shopping experience with Adyen.](developer/app-store/apps/adyen/overview.mdx)
-[**CRM** Synchronize customers with CRM platforms.](crm)
+[**CRM** Synchronize customers with CRM platforms.](developer/app-store/apps/crm.mdx)
-[**CMS** Synchronize products with CMS platforms.](cms)
+[**CMS** Synchronize products with CMS platforms.](developer/app-store/apps/cms.mdx)
[**Data importer** Import data from CSV to Saleor.](https://github.com/saleor/apps/tree/main/apps/data-importer)
-[**Emails and messages** Notifications and email communication with customers.](emails-and-messages/overview)
+[**Emails and messages** Notifications and email communication with customers.](developer/app-store/apps/emails-and-messages/overview.mdx)
-[**Invoices** Generate invoice PDF for each order.](invoices)
+[**Invoices** Generate invoice PDF for each order.](developer/app-store/apps/invoices.mdx)
[**Klaviyo** Send Saleor events to Klaviyo, where you can notify the customers.](https://github.com/saleor/apps/tree/main/apps/klaviyo)
-[**Product feed** Generate feed for Google Merchant.](product-feed)
+[**Product feed** Generate feed for Google Merchant.](developer/app-store/apps/product-feed.mdx)
-[**Twilio Segment** Send Saleor order events to Twilio Segment.](segment)
+[**Twilio Segment** Send Saleor order events to Twilio Segment.](developer/app-store/apps/segment.mdx)
-[**Search** Connect Saleor with Algolia search engine.](search)
+[**Search** Connect Saleor with Algolia search engine.](developer/app-store/apps/search.mdx)
[**Slack** Get notifications on Slack channel from Saleor events.](https://github.com/saleor/apps/tree/main/apps/slack)
-[**AvaTax** Calculate order and checkout taxes using external services.](avatax/overview)
+[**AvaTax** Calculate order and checkout taxes using external services.](developer/app-store/apps/avatax/overview.mdx)
diff --git a/docs/developer/app-store/apps/smtp/configuration.mdx b/docs/developer/app-store/apps/smtp/configuration.mdx
index e87f39309..62bf81be7 100644
--- a/docs/developer/app-store/apps/smtp/configuration.mdx
+++ b/docs/developer/app-store/apps/smtp/configuration.mdx
@@ -1,10 +1,8 @@
---
-title: SMTP setup
sidebar_position: 2
+title: SMTP setup
---
-# SMTP setup
-
You will need SMTP server credentials. Email templates are created using [MJML](https://mjml.io/) language and can be edited in the app dashboard.
Dynamic parts of the email (for example the number of the order) can be added using [Handlebars](https://handlebarsjs.com/).
diff --git a/docs/developer/app-store/apps/smtp/overview.mdx b/docs/developer/app-store/apps/smtp/overview.mdx
index 47a52e27f..346011e68 100644
--- a/docs/developer/app-store/apps/smtp/overview.mdx
+++ b/docs/developer/app-store/apps/smtp/overview.mdx
@@ -1,6 +1,7 @@
---
-title: Overview
+sidebar_label: Overview
sidebar_position: 1
+title: SMTP
---
import { AppMetadata } from "/components/AppMetadata/AppMetadata.tsx";
diff --git a/docs/developer/app-store/apps/smtp/troubleshooting.mdx b/docs/developer/app-store/apps/smtp/troubleshooting.mdx
index 38777865e..babc1fad6 100644
--- a/docs/developer/app-store/apps/smtp/troubleshooting.mdx
+++ b/docs/developer/app-store/apps/smtp/troubleshooting.mdx
@@ -1,10 +1,8 @@
---
-title: Troubleshooting
sidebar_position: 3
+title: Troubleshooting
---
-# Troubleshooting
-
By following the troubleshooting guidelines outlined here, you'll be able to troubleshoot and resolve common email-related issues, ensuring that your emails reach the intended recipients' inboxes.
If you encounter a problem that is not covered here or need further assistance, we recommend reaching out to [the GitHub Issues](https://github.com/saleor/apps/issues) page.
diff --git a/docs/developer/app-store/legacy-plugins/adyen.mdx b/docs/developer/app-store/legacy-plugins/adyen.mdx
index c69a1e383..4dfce317b 100644
--- a/docs/developer/app-store/legacy-plugins/adyen.mdx
+++ b/docs/developer/app-store/legacy-plugins/adyen.mdx
@@ -9,7 +9,7 @@ title: Adyen
:::warning
This plugin is deprecated!
-If you plan on building a new integration with Saleor, we recommend using the [Adyen](../apps/adyen) app instead.
+If you plan on building a new integration with Saleor, we recommend using the [Adyen](developer/app-store/apps/adyen/overview.mdx) app instead.
:::
# Adyen
diff --git a/docs/developer/app-store/overview.mdx b/docs/developer/app-store/overview.mdx
index ea820ad83..417525498 100644
--- a/docs/developer/app-store/overview.mdx
+++ b/docs/developer/app-store/overview.mdx
@@ -1,5 +1,5 @@
---
-title: Overview
+title: Saleor App Store
---
:::info
diff --git a/docs/developer/channels/api.mdx b/docs/developer/channels/api.mdx
index d0d67b20d..6f6beab68 100644
--- a/docs/developer/channels/api.mdx
+++ b/docs/developer/channels/api.mdx
@@ -1,5 +1,5 @@
---
-title: Channels API guide
+title: Channel API guide
sidebar_label: API guide
description: Learn how to manage channels using Saleor API. Create, update, and delete channels, reorder warehouses, and get channel details.
---
diff --git a/docs/developer/channels/configuration.mdx b/docs/developer/channels/configuration.mdx
index b6e64ea8f..420d840dd 100644
--- a/docs/developer/channels/configuration.mdx
+++ b/docs/developer/channels/configuration.mdx
@@ -1,10 +1,10 @@
---
-title: Channels configuration guide
+title: Channel Configuration
sidebar_label: Configuration
description: Channels configuration guide. Learn how to create a channel, assign it to shipping zones and warehouses, set prices and availability.
---
-### Steps to create a channel
+## Steps to create a channel
1. Create a new channel in configuration.
2. Assign it to shipping zones to make shipping rates available.
@@ -12,7 +12,7 @@ description: Channels configuration guide. Learn how to create a channel, assign
4. Add price to product variants in the newly created channel and set availability.
5. Make channel active.
-### Settings
+## Settings
[//]: # "(todo add more details on what default country affects)"
diff --git a/docs/developer/channels/lifecycle.mdx b/docs/developer/channels/lifecycle.mdx
index dace8b1f1..20c2aff99 100644
--- a/docs/developer/channels/lifecycle.mdx
+++ b/docs/developer/channels/lifecycle.mdx
@@ -1,11 +1,10 @@
---
-title: Channels lifecycle
+title: Channel Lifecycle
sidebar_label: Lifecycle
-description: Channels lifecycle. Learn how to create, activate, deactivate, and remove channels.
+sidebar_position: 2
+description: Channel lifecycle. Learn how to create, activate, deactivate, and remove channels.
---
-### Channels lifecycle
-
Your store will have a default channel that can be deleted, but at least one channel is always required.
Channels have single currency and can not be changed after creation.
diff --git a/docs/developer/channels/overview.mdx b/docs/developer/channels/overview.mdx
index 77cebe1aa..125de3a6f 100644
--- a/docs/developer/channels/overview.mdx
+++ b/docs/developer/channels/overview.mdx
@@ -1,5 +1,5 @@
---
-title: Channels overview
+title: Channels
sidebar_label: Overview
description: Learn how to use channels to model your commerce data across different regions, markets, brands, and business models.
---
diff --git a/docs/developer/checkout/overview.mdx b/docs/developer/checkout/overview.mdx
index 6d813b5d1..d9492ef94 100644
--- a/docs/developer/checkout/overview.mdx
+++ b/docs/developer/checkout/overview.mdx
@@ -1,5 +1,6 @@
---
-title: Overview
+sidebar_label: Overview
+title: Checkout and Orders
---
## Introduction
@@ -18,7 +19,7 @@ Checkout provides the interface for standard cart operations like adding product
- **Checkout**: Object that groups all the data needed for the checkout process and creating an order.
- **Checkout Line**: Items added to the checkout with quantity data. Each added variant has a separate line.
- **Checkout Completion**: During this step, payments may be processed and stocks may be reserved. If requirements are met, the order is created.
-- **Payment Gateway**: Payment App or legacy plugin. e.g., [Adyen](developer/app-store/apps/adyen.mdx).
+- **Payment Gateway**: Payment App or legacy plugin. e.g., [Adyen](developer/app-store/apps/adyen/overview.mdx).
- **Transaction**: Object containing status and additional data about payment.
- **Shipping Methods**: The way orders will be sent. E.g., DHL courier, postal service.
- **Collection Points**: Places where orders can be self-picked.
diff --git a/docs/developer/discounts/overview.mdx b/docs/developer/discounts/overview.mdx
index dfdc30c35..5c05decab 100644
--- a/docs/developer/discounts/overview.mdx
+++ b/docs/developer/discounts/overview.mdx
@@ -1,5 +1,5 @@
---
-title: Overview
+title: Discounts
sidebar_label: Overview
---
diff --git a/docs/developer/export/export-overview.mdx b/docs/developer/export/export-overview.mdx
index 80bddd931..b43a8160f 100644
--- a/docs/developer/export/export-overview.mdx
+++ b/docs/developer/export/export-overview.mdx
@@ -1,4 +1,5 @@
---
+sidebar_position: 1
title: Exporting Data
---
diff --git a/docs/developer/index.mdx b/docs/developer/index.mdx
new file mode 100644
index 000000000..de3f401c0
--- /dev/null
+++ b/docs/developer/index.mdx
@@ -0,0 +1,3 @@
+---
+title: Core Concepts
+---
diff --git a/docs/index.mdx b/docs/index.mdx
index 4f0f1a786..ba0cb9a3a 100644
--- a/docs/index.mdx
+++ b/docs/index.mdx
@@ -1,7 +1,7 @@
---
title: Saleor Documentation
+sidebar_label: Overview
slug: /
-disableComments: true
---
import CardGrid from "@site/components/CardGrid";
@@ -14,14 +14,14 @@ Saleor is an open-source ecosystem for building rich e-commerce experiences. Its
-[**![](./assets/icons/getting-started.svg) Overview** Get started with Saleor.](overview/introduction)
+[**![](./assets/icons/getting-started.svg) Overview** Get started with Saleor.](overview/introduction.mdx)
-[**![](./assets/icons/integrations.svg) Apps** Extend the functionalities of Saleor.](developer/extending/apps/overview)
+[**![](./assets/icons/integrations.svg) Apps** Extend the functionalities of Saleor.](developer/extending/apps/overview.mdx)
-[**![](./assets/icons/catalogue.svg) Saleor App Store** Discover and install built-in apps in your Saleor Cloud instance.](developer/app-store/overview)
+[**![](./assets/icons/catalogue.svg) Saleor App Store** Discover and install built-in apps in your Saleor Cloud instance.](developer/app-store/overview.mdx)
[**![](./assets/icons/storefront.svg) Storefront** Build performant e-commerce experiences.](https://github.com/saleor/storefront)
-[**![](./assets/icons/before-start.svg) Saleor CLI** Interact with Saleor the way you like it.](cli/overview)
+[**![](./assets/icons/before-start.svg) Saleor CLI** Interact with Saleor the way you like it.](cli/overview.mdx)
diff --git a/docusaurus.config.js b/docusaurus.config.js
index 6fb2ffc64..77b8d38a2 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -98,6 +98,18 @@ module.exports = {
label: "Docs",
position: "left",
},
+ {
+ type: "docSidebar",
+ sidebarId: "concepts",
+ label: "Core Concepts",
+ position: "left",
+ },
+ {
+ type: "docSidebar",
+ sidebarId: "appStore",
+ label: "App Store",
+ position: "left",
+ },
{
type: "docSidebar",
sidebarId: "api",
@@ -197,15 +209,8 @@ module.exports = {
},
docs: {
breadcrumbs: false,
- async sidebarItemsGenerator({
- defaultSidebarItemsGenerator,
- ...args
- }) {
- const sidebarItems = await defaultSidebarItemsGenerator(args);
- return sortSidebarItems(sidebarItems);
- },
- path: "docs",
lastVersion: isUpdate ? "current" : "3.x",
+ path: "docs",
versions: isUpdate
? {
current: {
@@ -250,35 +255,3 @@ module.exports = {
},
],
};
-
-// Sort sidebar items with localeCompare
-function sortSidebarItems(items) {
- const sort = (items) => {
- return items.sort((a, b) => {
- // sort by generated id or label
- if (a.id) {
- return a.id.localeCompare(b.id || b.label);
- }
-
- return a.label.localeCompare(b.label || b.id);
- });
- };
-
- const result = sort(items).map((item) => {
- if (item.type === "category") {
- return { ...item, items: sortSidebarItems(item.items) };
- }
- return item;
- });
-
- return result.map((item) => {
- if (item.items) {
- return {
- ...item,
- items: sort(item.items),
- };
- }
-
- return item;
- });
-}
diff --git a/package-lock.json b/package-lock.json
index 58df84ec1..740a8c9d5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,18 +6,17 @@
"": {
"license": "BSD-3-Clause",
"dependencies": {
- "@giscus/react": "^2.4.0",
"@sentry/react": "7.109.0",
"@sentry/tracing": "7.109.0",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
- "@docusaurus/core": "3.2.0",
- "@docusaurus/preset-classic": "3.2.0",
- "@docusaurus/theme-classic": "3.2.0",
- "@docusaurus/theme-mermaid": "3.2.0",
- "@docusaurus/types": "3.2.0",
+ "@docusaurus/core": "^3.4.0",
+ "@docusaurus/preset-classic": "^3.4.0",
+ "@docusaurus/theme-classic": "^3.4.0",
+ "@docusaurus/theme-mermaid": "^3.4.0",
+ "@docusaurus/types": "^3.4.0",
"@graphql-markdown/diff": "^1.1.4",
"@graphql-markdown/docusaurus": "^1.24.0",
"@graphql-tools/graphql-file-loader": "^8.0.1",
@@ -101,82 +100,82 @@
}
},
"node_modules/@algolia/cache-browser-local-storage": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.23.2.tgz",
- "integrity": "sha512-PvRQdCmtiU22dw9ZcTJkrVKgNBVAxKgD0/cfiqyxhA5+PHzA2WDt6jOmZ9QASkeM2BpyzClJb/Wr1yt2/t78Kw==",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.23.3.tgz",
+ "integrity": "sha512-vRHXYCpPlTDE7i6UOy2xE03zHF2C8MEFjPN2v7fRbqVpcOvAUQK81x3Kc21xyb5aSIpYCjWCZbYZuz8Glyzyyg==",
"dev": true,
"dependencies": {
- "@algolia/cache-common": "4.23.2"
+ "@algolia/cache-common": "4.23.3"
}
},
"node_modules/@algolia/cache-common": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.23.2.tgz",
- "integrity": "sha512-OUK/6mqr6CQWxzl/QY0/mwhlGvS6fMtvEPyn/7AHUx96NjqDA4X4+Ju7aXFQKh+m3jW9VPB0B9xvEQgyAnRPNw==",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.23.3.tgz",
+ "integrity": "sha512-h9XcNI6lxYStaw32pHpB1TMm0RuxphF+Ik4o7tcQiodEdpKK+wKufY6QXtba7t3k8eseirEMVB83uFFF3Nu54A==",
"dev": true
},
"node_modules/@algolia/cache-in-memory": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.23.2.tgz",
- "integrity": "sha512-rfbi/SnhEa3MmlqQvgYz/9NNJ156NkU6xFxjbxBtLWnHbpj+qnlMoKd+amoiacHRITpajg6zYbLM9dnaD3Bczw==",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.23.3.tgz",
+ "integrity": "sha512-yvpbuUXg/+0rbcagxNT7un0eo3czx2Uf0y4eiR4z4SD7SiptwYTpbuS0IHxcLHG3lq22ukx1T6Kjtk/rT+mqNg==",
"dev": true,
"dependencies": {
- "@algolia/cache-common": "4.23.2"
+ "@algolia/cache-common": "4.23.3"
}
},
"node_modules/@algolia/client-account": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.23.2.tgz",
- "integrity": "sha512-VbrOCLIN/5I7iIdskSoSw3uOUPF516k4SjDD4Qz3BFwa3of7D9A0lzBMAvQEJJEPHWdVraBJlGgdJq/ttmquJQ==",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.23.3.tgz",
+ "integrity": "sha512-hpa6S5d7iQmretHHF40QGq6hz0anWEHGlULcTIT9tbUssWUriN9AUXIFQ8Ei4w9azD0hc1rUok9/DeQQobhQMA==",
"dev": true,
"dependencies": {
- "@algolia/client-common": "4.23.2",
- "@algolia/client-search": "4.23.2",
- "@algolia/transporter": "4.23.2"
+ "@algolia/client-common": "4.23.3",
+ "@algolia/client-search": "4.23.3",
+ "@algolia/transporter": "4.23.3"
}
},
"node_modules/@algolia/client-analytics": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.23.2.tgz",
- "integrity": "sha512-lLj7irsAztGhMoEx/SwKd1cwLY6Daf1Q5f2AOsZacpppSvuFvuBrmkzT7pap1OD/OePjLKxicJS8wNA0+zKtuw==",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.23.3.tgz",
+ "integrity": "sha512-LBsEARGS9cj8VkTAVEZphjxTjMVCci+zIIiRhpFun9jGDUlS1XmhCW7CTrnaWeIuCQS/2iPyRqSy1nXPjcBLRA==",
"dev": true,
"dependencies": {
- "@algolia/client-common": "4.23.2",
- "@algolia/client-search": "4.23.2",
- "@algolia/requester-common": "4.23.2",
- "@algolia/transporter": "4.23.2"
+ "@algolia/client-common": "4.23.3",
+ "@algolia/client-search": "4.23.3",
+ "@algolia/requester-common": "4.23.3",
+ "@algolia/transporter": "4.23.3"
}
},
"node_modules/@algolia/client-common": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.23.2.tgz",
- "integrity": "sha512-Q2K1FRJBern8kIfZ0EqPvUr3V29ICxCm/q42zInV+VJRjldAD9oTsMGwqUQ26GFMdFYmqkEfCbY4VGAiQhh22g==",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.23.3.tgz",
+ "integrity": "sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw==",
"dev": true,
"dependencies": {
- "@algolia/requester-common": "4.23.2",
- "@algolia/transporter": "4.23.2"
+ "@algolia/requester-common": "4.23.3",
+ "@algolia/transporter": "4.23.3"
}
},
"node_modules/@algolia/client-personalization": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.23.2.tgz",
- "integrity": "sha512-vwPsgnCGhUcHhhQG5IM27z8q7dWrN9itjdvgA6uKf2e9r7vB+WXt4OocK0CeoYQt3OGEAExryzsB8DWqdMK5wg==",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.23.3.tgz",
+ "integrity": "sha512-3E3yF3Ocr1tB/xOZiuC3doHQBQ2zu2MPTYZ0d4lpfWads2WTKG7ZzmGnsHmm63RflvDeLK/UVx7j2b3QuwKQ2g==",
"dev": true,
"dependencies": {
- "@algolia/client-common": "4.23.2",
- "@algolia/requester-common": "4.23.2",
- "@algolia/transporter": "4.23.2"
+ "@algolia/client-common": "4.23.3",
+ "@algolia/requester-common": "4.23.3",
+ "@algolia/transporter": "4.23.3"
}
},
"node_modules/@algolia/client-search": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.23.2.tgz",
- "integrity": "sha512-CxSB29OVGSE7l/iyoHvamMonzq7Ev8lnk/OkzleODZ1iBcCs3JC/XgTIKzN/4RSTrJ9QybsnlrN/bYCGufo7qw==",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.23.3.tgz",
+ "integrity": "sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw==",
"dev": true,
"dependencies": {
- "@algolia/client-common": "4.23.2",
- "@algolia/requester-common": "4.23.2",
- "@algolia/transporter": "4.23.2"
+ "@algolia/client-common": "4.23.3",
+ "@algolia/requester-common": "4.23.3",
+ "@algolia/transporter": "4.23.3"
}
},
"node_modules/@algolia/events": {
@@ -186,72 +185,72 @@
"dev": true
},
"node_modules/@algolia/logger-common": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.23.2.tgz",
- "integrity": "sha512-jGM49Q7626cXZ7qRAWXn0jDlzvoA1FvN4rKTi1g0hxKsTTSReyYk0i1ADWjChDPl3Q+nSDhJuosM2bBUAay7xw==",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.23.3.tgz",
+ "integrity": "sha512-y9kBtmJwiZ9ZZ+1Ek66P0M68mHQzKRxkW5kAAXYN/rdzgDN0d2COsViEFufxJ0pb45K4FRcfC7+33YB4BLrZ+g==",
"dev": true
},
"node_modules/@algolia/logger-console": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.23.2.tgz",
- "integrity": "sha512-oo+lnxxEmlhTBTFZ3fGz1O8PJ+G+8FiAoMY2Qo3Q4w23xocQev6KqDTA1JQAGPDxAewNA2VBwWOsVXeXFjrI/Q==",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.23.3.tgz",
+ "integrity": "sha512-8xoiseoWDKuCVnWP8jHthgaeobDLolh00KJAdMe9XPrWPuf1by732jSpgy2BlsLTaT9m32pHI8CRfrOqQzHv3A==",
"dev": true,
"dependencies": {
- "@algolia/logger-common": "4.23.2"
+ "@algolia/logger-common": "4.23.3"
}
},
"node_modules/@algolia/recommend": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.23.2.tgz",
- "integrity": "sha512-Q75CjnzRCDzgIlgWfPnkLtrfF4t82JCirhalXkSSwe/c1GH5pWh4xUyDOR3KTMo+YxxX3zTlrL/FjHmUJEWEcg==",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.23.3.tgz",
+ "integrity": "sha512-9fK4nXZF0bFkdcLBRDexsnGzVmu4TSYZqxdpgBW2tEyfuSSY54D4qSRkLmNkrrz4YFvdh2GM1gA8vSsnZPR73w==",
"dev": true,
"dependencies": {
- "@algolia/cache-browser-local-storage": "4.23.2",
- "@algolia/cache-common": "4.23.2",
- "@algolia/cache-in-memory": "4.23.2",
- "@algolia/client-common": "4.23.2",
- "@algolia/client-search": "4.23.2",
- "@algolia/logger-common": "4.23.2",
- "@algolia/logger-console": "4.23.2",
- "@algolia/requester-browser-xhr": "4.23.2",
- "@algolia/requester-common": "4.23.2",
- "@algolia/requester-node-http": "4.23.2",
- "@algolia/transporter": "4.23.2"
+ "@algolia/cache-browser-local-storage": "4.23.3",
+ "@algolia/cache-common": "4.23.3",
+ "@algolia/cache-in-memory": "4.23.3",
+ "@algolia/client-common": "4.23.3",
+ "@algolia/client-search": "4.23.3",
+ "@algolia/logger-common": "4.23.3",
+ "@algolia/logger-console": "4.23.3",
+ "@algolia/requester-browser-xhr": "4.23.3",
+ "@algolia/requester-common": "4.23.3",
+ "@algolia/requester-node-http": "4.23.3",
+ "@algolia/transporter": "4.23.3"
}
},
"node_modules/@algolia/requester-browser-xhr": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.23.2.tgz",
- "integrity": "sha512-TO9wLlp8+rvW9LnIfyHsu8mNAMYrqNdQ0oLF6eTWFxXfxG3k8F/Bh7nFYGk2rFAYty4Fw4XUtrv/YjeNDtM5og==",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.23.3.tgz",
+ "integrity": "sha512-jDWGIQ96BhXbmONAQsasIpTYWslyjkiGu0Quydjlowe+ciqySpiDUrJHERIRfELE5+wFc7hc1Q5hqjGoV7yghw==",
"dev": true,
"dependencies": {
- "@algolia/requester-common": "4.23.2"
+ "@algolia/requester-common": "4.23.3"
}
},
"node_modules/@algolia/requester-common": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.23.2.tgz",
- "integrity": "sha512-3EfpBS0Hri0lGDB5H/BocLt7Vkop0bTTLVUBB844HH6tVycwShmsV6bDR7yXbQvFP1uNpgePRD3cdBCjeHmk6Q==",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.23.3.tgz",
+ "integrity": "sha512-xloIdr/bedtYEGcXCiF2muajyvRhwop4cMZo+K2qzNht0CMzlRkm8YsDdj5IaBhshqfgmBb3rTg4sL4/PpvLYw==",
"dev": true
},
"node_modules/@algolia/requester-node-http": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.23.2.tgz",
- "integrity": "sha512-SVzgkZM/malo+2SB0NWDXpnT7nO5IZwuDTaaH6SjLeOHcya1o56LSWXk+3F3rNLz2GVH+I/rpYKiqmHhSOjerw==",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.23.3.tgz",
+ "integrity": "sha512-zgu++8Uj03IWDEJM3fuNl34s746JnZOWn1Uz5taV1dFyJhVM/kTNw9Ik7YJWiUNHJQXcaD8IXD1eCb0nq/aByA==",
"dev": true,
"dependencies": {
- "@algolia/requester-common": "4.23.2"
+ "@algolia/requester-common": "4.23.3"
}
},
"node_modules/@algolia/transporter": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.23.2.tgz",
- "integrity": "sha512-GY3aGKBy+8AK4vZh8sfkatDciDVKad5rTY2S10Aefyjh7e7UGBP4zigf42qVXwU8VOPwi7l/L7OACGMOFcjB0Q==",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.23.3.tgz",
+ "integrity": "sha512-Wjl5gttqnf/gQKJA+dafnD0Y6Yw97yvfY8R9h0dQltX1GXTgNs1zWgvtWW0tHl1EgMdhAyw189uWiZMnL3QebQ==",
"dev": true,
"dependencies": {
- "@algolia/cache-common": "4.23.2",
- "@algolia/logger-common": "4.23.2",
- "@algolia/requester-common": "4.23.2"
+ "@algolia/cache-common": "4.23.3",
+ "@algolia/logger-common": "4.23.3",
+ "@algolia/requester-common": "4.23.3"
}
},
"node_modules/@ampproject/remapping": {
@@ -627,9 +626,9 @@
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz",
- "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz",
+ "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -1785,12 +1784,12 @@
}
},
"node_modules/@babel/plugin-transform-react-constant-elements": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.23.3.tgz",
- "integrity": "sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.7.tgz",
+ "integrity": "sha512-7LidzZfUXyfZ8/buRW6qIIHBY8wAZ1OrY9c/wTr8YhZ6vMPo+Uc/CVFLYY1spZrEQlD4w5u8wjqk5NQ3OVqQKA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2381,9 +2380,9 @@
}
},
"node_modules/@docusaurus/core": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.2.0.tgz",
- "integrity": "sha512-WTO6vW4404nhTmK9NL+95nd13I1JveFwZ8iOBYxb4xt+N2S3KzY+mm+1YtWw2vV37FbYfH+w+KrlrRaWuy5Hzw==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.4.0.tgz",
+ "integrity": "sha512-g+0wwmN2UJsBqy2fQRQ6fhXruoEa62JDeEa5d8IdTJlMoaDaEDfHh7WjwGRn4opuTQWpjAwP/fbcgyHKlE+64w==",
"dev": true,
"dependencies": {
"@babel/core": "^7.23.3",
@@ -2396,14 +2395,12 @@
"@babel/runtime": "^7.22.6",
"@babel/runtime-corejs3": "^7.22.6",
"@babel/traverse": "^7.22.8",
- "@docusaurus/cssnano-preset": "3.2.0",
- "@docusaurus/logger": "3.2.0",
- "@docusaurus/mdx-loader": "3.2.0",
- "@docusaurus/react-loadable": "5.5.2",
- "@docusaurus/utils": "3.2.0",
- "@docusaurus/utils-common": "3.2.0",
- "@docusaurus/utils-validation": "3.2.0",
- "@svgr/webpack": "^6.5.1",
+ "@docusaurus/cssnano-preset": "3.4.0",
+ "@docusaurus/logger": "3.4.0",
+ "@docusaurus/mdx-loader": "3.4.0",
+ "@docusaurus/utils": "3.4.0",
+ "@docusaurus/utils-common": "3.4.0",
+ "@docusaurus/utils-validation": "3.4.0",
"autoprefixer": "^10.4.14",
"babel-loader": "^9.1.3",
"babel-plugin-dynamic-import-node": "^2.3.3",
@@ -2417,8 +2414,8 @@
"copy-webpack-plugin": "^11.0.0",
"core-js": "^3.31.1",
"css-loader": "^6.8.1",
- "css-minimizer-webpack-plugin": "^4.2.2",
- "cssnano": "^5.1.15",
+ "css-minimizer-webpack-plugin": "^5.0.1",
+ "cssnano": "^6.1.2",
"del": "^6.1.1",
"detect-port": "^1.5.1",
"escape-html": "^1.0.3",
@@ -2438,7 +2435,7 @@
"prompts": "^2.4.2",
"react-dev-utils": "^12.0.1",
"react-helmet-async": "^1.3.0",
- "react-loadable": "npm:@docusaurus/react-loadable@5.5.2",
+ "react-loadable": "npm:@docusaurus/react-loadable@6.0.0",
"react-loadable-ssr-addon-v5-slorber": "^1.0.1",
"react-router": "^5.3.4",
"react-router-config": "^5.1.1",
@@ -2469,14 +2466,14 @@
}
},
"node_modules/@docusaurus/cssnano-preset": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.2.0.tgz",
- "integrity": "sha512-H88RXGUia7r/VF3XfyoA4kbwgpUZcKsObF6VvwBOP91EdArTf6lnHbJ/x8Ca79KS/zf98qaWyBGzW+5ez58Iyw==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.4.0.tgz",
+ "integrity": "sha512-qwLFSz6v/pZHy/UP32IrprmH5ORce86BGtN0eBtG75PpzQJAzp9gefspox+s8IEOr0oZKuQ/nhzZ3xwyc3jYJQ==",
"dev": true,
"dependencies": {
- "cssnano-preset-advanced": "^5.3.10",
- "postcss": "^8.4.26",
- "postcss-sort-media-queries": "^4.4.1",
+ "cssnano-preset-advanced": "^6.1.2",
+ "postcss": "^8.4.38",
+ "postcss-sort-media-queries": "^5.2.0",
"tslib": "^2.6.0"
},
"engines": {
@@ -2484,9 +2481,9 @@
}
},
"node_modules/@docusaurus/logger": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.2.0.tgz",
- "integrity": "sha512-Z1R1NcOGXZ8CkIJSvjvyxnuDDSlx/+1xlh20iVTw1DZRjonFmI3T3tTgk40YpXyWUYQpIgAoqqPMpuseMMdgRQ==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.4.0.tgz",
+ "integrity": "sha512-bZwkX+9SJ8lB9kVRkXw+xvHYSMGG4bpYHKGXeXFvyVc79NMeeBSGgzd4TQLHH+DYeOJoCdl8flrFJVxlZ0wo/Q==",
"dev": true,
"dependencies": {
"chalk": "^4.1.2",
@@ -2497,14 +2494,14 @@
}
},
"node_modules/@docusaurus/mdx-loader": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.2.0.tgz",
- "integrity": "sha512-JtkI5o6R/rJSr1Y23cHKz085aBJCvJw3AYHihJ7r+mBX+O8EuQIynG0e6/XpbSCpr7Ino0U50UtxaXcEbFwg9Q==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.4.0.tgz",
+ "integrity": "sha512-kSSbrrk4nTjf4d+wtBA9H+FGauf2gCax89kV8SUSJu3qaTdSIKdWERlngsiHaCFgZ7laTJ8a67UFf+xlFPtuTw==",
"dev": true,
"dependencies": {
- "@docusaurus/logger": "3.2.0",
- "@docusaurus/utils": "3.2.0",
- "@docusaurus/utils-validation": "3.2.0",
+ "@docusaurus/logger": "3.4.0",
+ "@docusaurus/utils": "3.4.0",
+ "@docusaurus/utils-validation": "3.4.0",
"@mdx-js/mdx": "^3.0.0",
"@slorber/remark-comment": "^1.0.0",
"escape-html": "^1.0.3",
@@ -2536,19 +2533,18 @@
}
},
"node_modules/@docusaurus/module-type-aliases": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.2.0.tgz",
- "integrity": "sha512-jRSp9YkvBwwNz6Xgy0RJPsnie+Ebb//gy7GdbkJ2pW2gvvlYKGib2+jSF0pfIzvyZLulfCynS1KQdvDKdSl8zQ==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.4.0.tgz",
+ "integrity": "sha512-A1AyS8WF5Bkjnb8s+guTDuYmUiwJzNrtchebBHpc0gz0PyHJNMaybUlSrmJjHVcGrya0LKI4YcR3lBDQfXRYLw==",
"dev": true,
"dependencies": {
- "@docusaurus/react-loadable": "5.5.2",
- "@docusaurus/types": "3.2.0",
+ "@docusaurus/types": "3.4.0",
"@types/history": "^4.7.11",
"@types/react": "*",
"@types/react-router-config": "*",
"@types/react-router-dom": "*",
"react-helmet-async": "*",
- "react-loadable": "npm:@docusaurus/react-loadable@5.5.2"
+ "react-loadable": "npm:@docusaurus/react-loadable@6.0.0"
},
"peerDependencies": {
"react": "*",
@@ -2556,18 +2552,18 @@
}
},
"node_modules/@docusaurus/plugin-content-blog": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.2.0.tgz",
- "integrity": "sha512-MABqwjSicyHmYEfQueMthPCz18JkVxhK3EGhXTSRWwReAZ0UTuw9pG6+Wo+uXAugDaIcJH28rVZSwTDINPm2bw==",
- "dev": true,
- "dependencies": {
- "@docusaurus/core": "3.2.0",
- "@docusaurus/logger": "3.2.0",
- "@docusaurus/mdx-loader": "3.2.0",
- "@docusaurus/types": "3.2.0",
- "@docusaurus/utils": "3.2.0",
- "@docusaurus/utils-common": "3.2.0",
- "@docusaurus/utils-validation": "3.2.0",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.4.0.tgz",
+ "integrity": "sha512-vv6ZAj78ibR5Jh7XBUT4ndIjmlAxkijM3Sx5MAAzC1gyv0vupDQNhzuFg1USQmQVj3P5I6bquk12etPV3LJ+Xw==",
+ "dev": true,
+ "dependencies": {
+ "@docusaurus/core": "3.4.0",
+ "@docusaurus/logger": "3.4.0",
+ "@docusaurus/mdx-loader": "3.4.0",
+ "@docusaurus/types": "3.4.0",
+ "@docusaurus/utils": "3.4.0",
+ "@docusaurus/utils-common": "3.4.0",
+ "@docusaurus/utils-validation": "3.4.0",
"cheerio": "^1.0.0-rc.12",
"feed": "^4.2.2",
"fs-extra": "^11.1.1",
@@ -2588,19 +2584,19 @@
}
},
"node_modules/@docusaurus/plugin-content-docs": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.2.0.tgz",
- "integrity": "sha512-uuqhahmsBnirxOz+SXksnWt7+wc+iN4ntxNRH48BUgo7QRNLATWjHCgI8t6zrMJxK4o+QL9DhLaPDlFHs91B3Q==",
- "dev": true,
- "dependencies": {
- "@docusaurus/core": "3.2.0",
- "@docusaurus/logger": "3.2.0",
- "@docusaurus/mdx-loader": "3.2.0",
- "@docusaurus/module-type-aliases": "3.2.0",
- "@docusaurus/types": "3.2.0",
- "@docusaurus/utils": "3.2.0",
- "@docusaurus/utils-common": "3.2.0",
- "@docusaurus/utils-validation": "3.2.0",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.4.0.tgz",
+ "integrity": "sha512-HkUCZffhBo7ocYheD9oZvMcDloRnGhBMOZRyVcAQRFmZPmNqSyISlXA1tQCIxW+r478fty97XXAGjNYzBjpCsg==",
+ "dev": true,
+ "dependencies": {
+ "@docusaurus/core": "3.4.0",
+ "@docusaurus/logger": "3.4.0",
+ "@docusaurus/mdx-loader": "3.4.0",
+ "@docusaurus/module-type-aliases": "3.4.0",
+ "@docusaurus/types": "3.4.0",
+ "@docusaurus/utils": "3.4.0",
+ "@docusaurus/utils-common": "3.4.0",
+ "@docusaurus/utils-validation": "3.4.0",
"@types/react-router-config": "^5.0.7",
"combine-promises": "^1.1.0",
"fs-extra": "^11.1.1",
@@ -2619,16 +2615,16 @@
}
},
"node_modules/@docusaurus/plugin-content-pages": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.2.0.tgz",
- "integrity": "sha512-4ofAN7JDsdb4tODO9OIrizWY5DmEJXr0eu+UDIkLqGP+gXXTahJZv8h2mlxO+lPXGXRCVBOfA14OG1hOYJVPwA==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.4.0.tgz",
+ "integrity": "sha512-h2+VN/0JjpR8fIkDEAoadNjfR3oLzB+v1qSXbIAKjQ46JAHx3X22n9nqS+BWSQnTnp1AjkjSvZyJMekmcwxzxg==",
"dev": true,
"dependencies": {
- "@docusaurus/core": "3.2.0",
- "@docusaurus/mdx-loader": "3.2.0",
- "@docusaurus/types": "3.2.0",
- "@docusaurus/utils": "3.2.0",
- "@docusaurus/utils-validation": "3.2.0",
+ "@docusaurus/core": "3.4.0",
+ "@docusaurus/mdx-loader": "3.4.0",
+ "@docusaurus/types": "3.4.0",
+ "@docusaurus/utils": "3.4.0",
+ "@docusaurus/utils-validation": "3.4.0",
"fs-extra": "^11.1.1",
"tslib": "^2.6.0",
"webpack": "^5.88.1"
@@ -2642,14 +2638,14 @@
}
},
"node_modules/@docusaurus/plugin-debug": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.2.0.tgz",
- "integrity": "sha512-p6WxtO5XZGz66y6QNQtCJwBefq4S6/w75XaXVvH1/2P9uaijvF7R+Cm2EWQZ5WsvA5wl//DFWblyDHRyVC207Q==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.4.0.tgz",
+ "integrity": "sha512-uV7FDUNXGyDSD3PwUaf5YijX91T5/H9SX4ErEcshzwgzWwBtK37nUWPU3ZLJfeTavX3fycTOqk9TglpOLaWkCg==",
"dev": true,
"dependencies": {
- "@docusaurus/core": "3.2.0",
- "@docusaurus/types": "3.2.0",
- "@docusaurus/utils": "3.2.0",
+ "@docusaurus/core": "3.4.0",
+ "@docusaurus/types": "3.4.0",
+ "@docusaurus/utils": "3.4.0",
"fs-extra": "^11.1.1",
"react-json-view-lite": "^1.2.0",
"tslib": "^2.6.0"
@@ -2663,14 +2659,14 @@
}
},
"node_modules/@docusaurus/plugin-google-analytics": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.2.0.tgz",
- "integrity": "sha512-//TepJTEyAZSvBwHKEbXHu9xT/VkK3wUil2ZakKvQZYfUC01uWn6A1E3toa8R7WhCy1xPUeIukqmJy1Clg8njQ==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.4.0.tgz",
+ "integrity": "sha512-mCArluxEGi3cmYHqsgpGGt3IyLCrFBxPsxNZ56Mpur0xSlInnIHoeLDH7FvVVcPJRPSQ9/MfRqLsainRw+BojA==",
"dev": true,
"dependencies": {
- "@docusaurus/core": "3.2.0",
- "@docusaurus/types": "3.2.0",
- "@docusaurus/utils-validation": "3.2.0",
+ "@docusaurus/core": "3.4.0",
+ "@docusaurus/types": "3.4.0",
+ "@docusaurus/utils-validation": "3.4.0",
"tslib": "^2.6.0"
},
"engines": {
@@ -2682,14 +2678,14 @@
}
},
"node_modules/@docusaurus/plugin-google-gtag": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.2.0.tgz",
- "integrity": "sha512-3s6zxlaMMb87MW2Rxy6EnSRDs0WDEQPuHilZZH402C8kOrUnIwlhlfjWZ4ZyLDziGl/Eec/DvD0PVqj0qHRomA==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.4.0.tgz",
+ "integrity": "sha512-Dsgg6PLAqzZw5wZ4QjUYc8Z2KqJqXxHxq3vIoyoBWiLEEfigIs7wHR+oiWUQy3Zk9MIk6JTYj7tMoQU0Jm3nqA==",
"dev": true,
"dependencies": {
- "@docusaurus/core": "3.2.0",
- "@docusaurus/types": "3.2.0",
- "@docusaurus/utils-validation": "3.2.0",
+ "@docusaurus/core": "3.4.0",
+ "@docusaurus/types": "3.4.0",
+ "@docusaurus/utils-validation": "3.4.0",
"@types/gtag.js": "^0.0.12",
"tslib": "^2.6.0"
},
@@ -2702,14 +2698,14 @@
}
},
"node_modules/@docusaurus/plugin-google-tag-manager": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.2.0.tgz",
- "integrity": "sha512-rAKtsJ11vPHA7dTAqWCgyIy7AyFRF/lpI77Zd/4HKgqcIvIayVBvL3QtelhUazfYTLTH6ls6kQ9wjMcIFxRiGg==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.4.0.tgz",
+ "integrity": "sha512-O9tX1BTwxIhgXpOLpFDueYA9DWk69WCbDRrjYoMQtFHSkTyE7RhNgyjSPREUWJb9i+YUg3OrsvrBYRl64FCPCQ==",
"dev": true,
"dependencies": {
- "@docusaurus/core": "3.2.0",
- "@docusaurus/types": "3.2.0",
- "@docusaurus/utils-validation": "3.2.0",
+ "@docusaurus/core": "3.4.0",
+ "@docusaurus/types": "3.4.0",
+ "@docusaurus/utils-validation": "3.4.0",
"tslib": "^2.6.0"
},
"engines": {
@@ -2721,17 +2717,17 @@
}
},
"node_modules/@docusaurus/plugin-sitemap": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.2.0.tgz",
- "integrity": "sha512-gnWDFt6MStjLkdtt63Lzc+14EPSd8B6mzJGJp9GQMvWDUoMAUijUqpVIHYQq+DPMcI4PJZ5I2nsl5XFf1vOldA==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.4.0.tgz",
+ "integrity": "sha512-+0VDvx9SmNrFNgwPoeoCha+tRoAjopwT0+pYO1xAbyLcewXSemq+eLxEa46Q1/aoOaJQ0qqHELuQM7iS2gp33Q==",
"dev": true,
"dependencies": {
- "@docusaurus/core": "3.2.0",
- "@docusaurus/logger": "3.2.0",
- "@docusaurus/types": "3.2.0",
- "@docusaurus/utils": "3.2.0",
- "@docusaurus/utils-common": "3.2.0",
- "@docusaurus/utils-validation": "3.2.0",
+ "@docusaurus/core": "3.4.0",
+ "@docusaurus/logger": "3.4.0",
+ "@docusaurus/types": "3.4.0",
+ "@docusaurus/utils": "3.4.0",
+ "@docusaurus/utils-common": "3.4.0",
+ "@docusaurus/utils-validation": "3.4.0",
"fs-extra": "^11.1.1",
"sitemap": "^7.1.1",
"tslib": "^2.6.0"
@@ -2745,24 +2741,24 @@
}
},
"node_modules/@docusaurus/preset-classic": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.2.0.tgz",
- "integrity": "sha512-t7tXyk8kUgT7hUqEOgSJnPs+Foem9ucuan/a9QVYaVFCDjp92Sb2FpCY8bVasAokYCjodYe2LfpAoSCj5YDYWg==",
- "dev": true,
- "dependencies": {
- "@docusaurus/core": "3.2.0",
- "@docusaurus/plugin-content-blog": "3.2.0",
- "@docusaurus/plugin-content-docs": "3.2.0",
- "@docusaurus/plugin-content-pages": "3.2.0",
- "@docusaurus/plugin-debug": "3.2.0",
- "@docusaurus/plugin-google-analytics": "3.2.0",
- "@docusaurus/plugin-google-gtag": "3.2.0",
- "@docusaurus/plugin-google-tag-manager": "3.2.0",
- "@docusaurus/plugin-sitemap": "3.2.0",
- "@docusaurus/theme-classic": "3.2.0",
- "@docusaurus/theme-common": "3.2.0",
- "@docusaurus/theme-search-algolia": "3.2.0",
- "@docusaurus/types": "3.2.0"
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.4.0.tgz",
+ "integrity": "sha512-Ohj6KB7siKqZaQhNJVMBBUzT3Nnp6eTKqO+FXO3qu/n1hJl3YLwVKTWBg28LF7MWrKu46UuYavwMRxud0VyqHg==",
+ "dev": true,
+ "dependencies": {
+ "@docusaurus/core": "3.4.0",
+ "@docusaurus/plugin-content-blog": "3.4.0",
+ "@docusaurus/plugin-content-docs": "3.4.0",
+ "@docusaurus/plugin-content-pages": "3.4.0",
+ "@docusaurus/plugin-debug": "3.4.0",
+ "@docusaurus/plugin-google-analytics": "3.4.0",
+ "@docusaurus/plugin-google-gtag": "3.4.0",
+ "@docusaurus/plugin-google-tag-manager": "3.4.0",
+ "@docusaurus/plugin-sitemap": "3.4.0",
+ "@docusaurus/theme-classic": "3.4.0",
+ "@docusaurus/theme-common": "3.4.0",
+ "@docusaurus/theme-search-algolia": "3.4.0",
+ "@docusaurus/types": "3.4.0"
},
"engines": {
"node": ">=18.0"
@@ -2772,37 +2768,24 @@
"react-dom": "^18.0.0"
}
},
- "node_modules/@docusaurus/react-loadable": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz",
- "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==",
- "dev": true,
- "dependencies": {
- "@types/react": "*",
- "prop-types": "^15.6.2"
- },
- "peerDependencies": {
- "react": "*"
- }
- },
"node_modules/@docusaurus/theme-classic": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.2.0.tgz",
- "integrity": "sha512-4oSO5BQOJ5ja7WYdL6jK1n4J96tp+VJHamdwao6Ea252sA3W3vvR0otTflG4p4XVjNZH6hlPQoi5lKW0HeRgfQ==",
- "dev": true,
- "dependencies": {
- "@docusaurus/core": "3.2.0",
- "@docusaurus/mdx-loader": "3.2.0",
- "@docusaurus/module-type-aliases": "3.2.0",
- "@docusaurus/plugin-content-blog": "3.2.0",
- "@docusaurus/plugin-content-docs": "3.2.0",
- "@docusaurus/plugin-content-pages": "3.2.0",
- "@docusaurus/theme-common": "3.2.0",
- "@docusaurus/theme-translations": "3.2.0",
- "@docusaurus/types": "3.2.0",
- "@docusaurus/utils": "3.2.0",
- "@docusaurus/utils-common": "3.2.0",
- "@docusaurus/utils-validation": "3.2.0",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.4.0.tgz",
+ "integrity": "sha512-0IPtmxsBYv2adr1GnZRdMkEQt1YW6tpzrUPj02YxNpvJ5+ju4E13J5tB4nfdaen/tfR1hmpSPlTFPvTf4kwy8Q==",
+ "dev": true,
+ "dependencies": {
+ "@docusaurus/core": "3.4.0",
+ "@docusaurus/mdx-loader": "3.4.0",
+ "@docusaurus/module-type-aliases": "3.4.0",
+ "@docusaurus/plugin-content-blog": "3.4.0",
+ "@docusaurus/plugin-content-docs": "3.4.0",
+ "@docusaurus/plugin-content-pages": "3.4.0",
+ "@docusaurus/theme-common": "3.4.0",
+ "@docusaurus/theme-translations": "3.4.0",
+ "@docusaurus/types": "3.4.0",
+ "@docusaurus/utils": "3.4.0",
+ "@docusaurus/utils-common": "3.4.0",
+ "@docusaurus/utils-validation": "3.4.0",
"@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",
"copy-text-to-clipboard": "^3.2.0",
@@ -2826,18 +2809,18 @@
}
},
"node_modules/@docusaurus/theme-common": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.2.0.tgz",
- "integrity": "sha512-sFbw9XviNJJ+760kAcZCQMQ3jkNIznGqa6MQ70E5BnbP+ja36kGgPOfjcsvAcNey1H1Rkhh3p2Mhf4HVLdKVVw==",
- "dev": true,
- "dependencies": {
- "@docusaurus/mdx-loader": "3.2.0",
- "@docusaurus/module-type-aliases": "3.2.0",
- "@docusaurus/plugin-content-blog": "3.2.0",
- "@docusaurus/plugin-content-docs": "3.2.0",
- "@docusaurus/plugin-content-pages": "3.2.0",
- "@docusaurus/utils": "3.2.0",
- "@docusaurus/utils-common": "3.2.0",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.4.0.tgz",
+ "integrity": "sha512-0A27alXuv7ZdCg28oPE8nH/Iz73/IUejVaCazqu9elS4ypjiLhK3KfzdSQBnL/g7YfHSlymZKdiOHEo8fJ0qMA==",
+ "dev": true,
+ "dependencies": {
+ "@docusaurus/mdx-loader": "3.4.0",
+ "@docusaurus/module-type-aliases": "3.4.0",
+ "@docusaurus/plugin-content-blog": "3.4.0",
+ "@docusaurus/plugin-content-docs": "3.4.0",
+ "@docusaurus/plugin-content-pages": "3.4.0",
+ "@docusaurus/utils": "3.4.0",
+ "@docusaurus/utils-common": "3.4.0",
"@types/history": "^4.7.11",
"@types/react": "*",
"@types/react-router-config": "*",
@@ -2856,16 +2839,16 @@
}
},
"node_modules/@docusaurus/theme-mermaid": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.2.0.tgz",
- "integrity": "sha512-PvN6K6m3JaM9cr9oSPyba6OlwAiSfBzqQtNqdgPFDjakKuT4kj6JODfExi+HKtWuxayOVRQlRl7zTnWxM4sTVw==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.4.0.tgz",
+ "integrity": "sha512-3w5QW0HEZ2O6x2w6lU3ZvOe1gNXP2HIoKDMJBil1VmLBc9PmpAG17VmfhI/p3L2etNmOiVs5GgniUqvn8AFEGQ==",
"dev": true,
"dependencies": {
- "@docusaurus/core": "3.2.0",
- "@docusaurus/module-type-aliases": "3.2.0",
- "@docusaurus/theme-common": "3.2.0",
- "@docusaurus/types": "3.2.0",
- "@docusaurus/utils-validation": "3.2.0",
+ "@docusaurus/core": "3.4.0",
+ "@docusaurus/module-type-aliases": "3.4.0",
+ "@docusaurus/theme-common": "3.4.0",
+ "@docusaurus/types": "3.4.0",
+ "@docusaurus/utils-validation": "3.4.0",
"mermaid": "^10.4.0",
"tslib": "^2.6.0"
},
@@ -2878,19 +2861,19 @@
}
},
"node_modules/@docusaurus/theme-search-algolia": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.2.0.tgz",
- "integrity": "sha512-PgvF4qHoqJp8+GfqClUbTF/zYNOsz4De251IuzXon7+7FAXwvb2qmYtA2nEwyMbB7faKOz33Pxzv+y+153KS/g==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.4.0.tgz",
+ "integrity": "sha512-aiHFx7OCw4Wck1z6IoShVdUWIjntC8FHCw9c5dR8r3q4Ynh+zkS8y2eFFunN/DL6RXPzpnvKCg3vhLQYJDmT9Q==",
"dev": true,
"dependencies": {
"@docsearch/react": "^3.5.2",
- "@docusaurus/core": "3.2.0",
- "@docusaurus/logger": "3.2.0",
- "@docusaurus/plugin-content-docs": "3.2.0",
- "@docusaurus/theme-common": "3.2.0",
- "@docusaurus/theme-translations": "3.2.0",
- "@docusaurus/utils": "3.2.0",
- "@docusaurus/utils-validation": "3.2.0",
+ "@docusaurus/core": "3.4.0",
+ "@docusaurus/logger": "3.4.0",
+ "@docusaurus/plugin-content-docs": "3.4.0",
+ "@docusaurus/theme-common": "3.4.0",
+ "@docusaurus/theme-translations": "3.4.0",
+ "@docusaurus/utils": "3.4.0",
+ "@docusaurus/utils-validation": "3.4.0",
"algoliasearch": "^4.18.0",
"algoliasearch-helper": "^3.13.3",
"clsx": "^2.0.0",
@@ -2909,9 +2892,9 @@
}
},
"node_modules/@docusaurus/theme-translations": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.2.0.tgz",
- "integrity": "sha512-VXzZJBuyVEmwUYyud+7IgJQEBRM6R2u/s10Rp3DOP19CBQxeKgHYTKkKhFtDeKMHDassb665kjgOi0YlJfUT6w==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.4.0.tgz",
+ "integrity": "sha512-zSxCSpmQCCdQU5Q4CnX/ID8CSUUI3fvmq4hU/GNP/XoAWtXo9SAVnM3TzpU8Gb//H3WCsT8mJcTfyOk3d9ftNg==",
"dev": true,
"dependencies": {
"fs-extra": "^11.1.1",
@@ -2922,9 +2905,9 @@
}
},
"node_modules/@docusaurus/types": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.2.0.tgz",
- "integrity": "sha512-uG3FfTkkkbZIPPNYx6xRfZHKeGyRd/inIT1cqvYt1FobFLd+7WhRXrSBqwJ9JajJjEAjNioRMVFgGofGf/Wdww==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.4.0.tgz",
+ "integrity": "sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==",
"dev": true,
"dependencies": {
"@mdx-js/mdx": "^3.0.0",
@@ -2943,14 +2926,14 @@
}
},
"node_modules/@docusaurus/utils": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.2.0.tgz",
- "integrity": "sha512-3rgrE7iL60yV2JQivlcoxUNNTK2APmn+OHLUmTvX2pueIM8DEOCEFHpJO4MiWjFO7V/Wq3iA/W1M03JnjdugVw==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.4.0.tgz",
+ "integrity": "sha512-fRwnu3L3nnWaXOgs88BVBmG1yGjcQqZNHG+vInhEa2Sz2oQB+ZjbEMO5Rh9ePFpZ0YDiDUhpaVjwmS+AU2F14g==",
"dev": true,
"dependencies": {
- "@docusaurus/logger": "3.2.0",
- "@docusaurus/utils-common": "3.2.0",
- "@svgr/webpack": "^6.5.1",
+ "@docusaurus/logger": "3.4.0",
+ "@docusaurus/utils-common": "3.4.0",
+ "@svgr/webpack": "^8.1.0",
"escape-string-regexp": "^4.0.0",
"file-loader": "^6.2.0",
"fs-extra": "^11.1.1",
@@ -2966,6 +2949,7 @@
"shelljs": "^0.8.5",
"tslib": "^2.6.0",
"url-loader": "^4.1.1",
+ "utility-types": "^3.10.0",
"webpack": "^5.88.1"
},
"engines": {
@@ -2981,9 +2965,9 @@
}
},
"node_modules/@docusaurus/utils-common": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.2.0.tgz",
- "integrity": "sha512-WEQT5L2lT/tBQgDRgeZQAIi9YJBrwEILb1BuObQn1St3T/4K1gx5fWwOT8qdLOov296XLd1FQg9Ywu27aE9svw==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.4.0.tgz",
+ "integrity": "sha512-NVx54Wr4rCEKsjOH5QEVvxIqVvm+9kh7q8aYTU5WzUU9/Hctd6aTrcZ3G0Id4zYJ+AeaG5K5qHA4CY5Kcm2iyQ==",
"dev": true,
"dependencies": {
"tslib": "^2.6.0"
@@ -3001,16 +2985,18 @@
}
},
"node_modules/@docusaurus/utils-validation": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.2.0.tgz",
- "integrity": "sha512-rCzMTqwNrBrEOyU8EaD1fYWdig4TDhfj+YLqB8DY68VUAqSIgbY+yshpqFKB0bznFYNBJbn0bGpvVuImQOa/vA==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.4.0.tgz",
+ "integrity": "sha512-hYQ9fM+AXYVTWxJOT1EuNaRnrR2WGpRdLDQG07O8UOpsvCPWUVOeo26Rbm0JWY2sGLfzAb+tvJ62yF+8F+TV0g==",
"dev": true,
"dependencies": {
- "@docusaurus/logger": "3.2.0",
- "@docusaurus/utils": "3.2.0",
- "@docusaurus/utils-common": "3.2.0",
+ "@docusaurus/logger": "3.4.0",
+ "@docusaurus/utils": "3.4.0",
+ "@docusaurus/utils-common": "3.4.0",
+ "fs-extra": "^11.2.0",
"joi": "^17.9.2",
"js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
"tslib": "^2.6.0"
},
"engines": {
@@ -3468,18 +3454,6 @@
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
- "node_modules/@giscus/react": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@giscus/react/-/react-2.4.0.tgz",
- "integrity": "sha512-y8d8qiZ2sBuaXRcgn/ZWfMlRs9bx26p62BU/HEKQQ+IfHo3B/kglgPjX/IqudwlX+DOlHUl1NvtFo9C8Eqo0eQ==",
- "dependencies": {
- "giscus": "^1.4.0"
- },
- "peerDependencies": {
- "react": "^16 || ^17 || ^18",
- "react-dom": "^16 || ^17 || ^18"
- }
- },
"node_modules/@graphql-inspector/core": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/@graphql-inspector/core/-/core-5.0.2.tgz",
@@ -3936,19 +3910,6 @@
"integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==",
"dev": true
},
- "node_modules/@lit-labs/ssr-dom-shim": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.0.tgz",
- "integrity": "sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g=="
- },
- "node_modules/@lit/reactive-element": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz",
- "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==",
- "dependencies": {
- "@lit-labs/ssr-dom-shim": "^1.2.0"
- }
- },
"node_modules/@mdx-js/mdx": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz",
@@ -4400,12 +4361,12 @@
}
},
"node_modules/@svgr/babel-plugin-add-jsx-attribute": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz",
- "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz",
+ "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=14"
},
"funding": {
"type": "github",
@@ -4448,12 +4409,12 @@
}
},
"node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz",
- "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz",
+ "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=14"
},
"funding": {
"type": "github",
@@ -4464,12 +4425,12 @@
}
},
"node_modules/@svgr/babel-plugin-svg-dynamic-title": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz",
- "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz",
+ "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=14"
},
"funding": {
"type": "github",
@@ -4480,12 +4441,12 @@
}
},
"node_modules/@svgr/babel-plugin-svg-em-dimensions": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz",
- "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz",
+ "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=14"
},
"funding": {
"type": "github",
@@ -4496,12 +4457,12 @@
}
},
"node_modules/@svgr/babel-plugin-transform-react-native-svg": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz",
- "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz",
+ "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=14"
},
"funding": {
"type": "github",
@@ -4512,9 +4473,9 @@
}
},
"node_modules/@svgr/babel-plugin-transform-svg-component": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz",
- "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz",
+ "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==",
"dev": true,
"engines": {
"node": ">=12"
@@ -4528,22 +4489,22 @@
}
},
"node_modules/@svgr/babel-preset": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz",
- "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz",
+ "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==",
"dev": true,
"dependencies": {
- "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1",
- "@svgr/babel-plugin-remove-jsx-attribute": "*",
- "@svgr/babel-plugin-remove-jsx-empty-expression": "*",
- "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1",
- "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1",
- "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1",
- "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1",
- "@svgr/babel-plugin-transform-svg-component": "^6.5.1"
+ "@svgr/babel-plugin-add-jsx-attribute": "8.0.0",
+ "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0",
+ "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0",
+ "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0",
+ "@svgr/babel-plugin-svg-dynamic-title": "8.0.0",
+ "@svgr/babel-plugin-svg-em-dimensions": "8.0.0",
+ "@svgr/babel-plugin-transform-react-native-svg": "8.1.0",
+ "@svgr/babel-plugin-transform-svg-component": "8.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=14"
},
"funding": {
"type": "github",
@@ -4554,19 +4515,19 @@
}
},
"node_modules/@svgr/core": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz",
- "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz",
+ "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==",
"dev": true,
"dependencies": {
- "@babel/core": "^7.19.6",
- "@svgr/babel-preset": "^6.5.1",
- "@svgr/plugin-jsx": "^6.5.1",
+ "@babel/core": "^7.21.3",
+ "@svgr/babel-preset": "8.1.0",
"camelcase": "^6.2.0",
- "cosmiconfig": "^7.0.1"
+ "cosmiconfig": "^8.1.3",
+ "snake-case": "^3.0.4"
},
"engines": {
- "node": ">=10"
+ "node": ">=14"
},
"funding": {
"type": "github",
@@ -4574,16 +4535,16 @@
}
},
"node_modules/@svgr/hast-util-to-babel-ast": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz",
- "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz",
+ "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.20.0",
+ "@babel/types": "^7.21.3",
"entities": "^4.4.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=14"
},
"funding": {
"type": "github",
@@ -4591,39 +4552,39 @@
}
},
"node_modules/@svgr/plugin-jsx": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz",
- "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz",
+ "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==",
"dev": true,
"dependencies": {
- "@babel/core": "^7.19.6",
- "@svgr/babel-preset": "^6.5.1",
- "@svgr/hast-util-to-babel-ast": "^6.5.1",
+ "@babel/core": "^7.21.3",
+ "@svgr/babel-preset": "8.1.0",
+ "@svgr/hast-util-to-babel-ast": "8.0.0",
"svg-parser": "^2.0.4"
},
"engines": {
- "node": ">=10"
+ "node": ">=14"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
- "@svgr/core": "^6.0.0"
+ "@svgr/core": "*"
}
},
"node_modules/@svgr/plugin-svgo": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz",
- "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz",
+ "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==",
"dev": true,
"dependencies": {
- "cosmiconfig": "^7.0.1",
- "deepmerge": "^4.2.2",
- "svgo": "^2.8.0"
+ "cosmiconfig": "^8.1.3",
+ "deepmerge": "^4.3.1",
+ "svgo": "^3.0.2"
},
"engines": {
- "node": ">=10"
+ "node": ">=14"
},
"funding": {
"type": "github",
@@ -4634,22 +4595,22 @@
}
},
"node_modules/@svgr/webpack": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz",
- "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz",
+ "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==",
"dev": true,
"dependencies": {
- "@babel/core": "^7.19.6",
- "@babel/plugin-transform-react-constant-elements": "^7.18.12",
- "@babel/preset-env": "^7.19.4",
+ "@babel/core": "^7.21.3",
+ "@babel/plugin-transform-react-constant-elements": "^7.21.3",
+ "@babel/preset-env": "^7.20.2",
"@babel/preset-react": "^7.18.6",
- "@babel/preset-typescript": "^7.18.6",
- "@svgr/core": "^6.5.1",
- "@svgr/plugin-jsx": "^6.5.1",
- "@svgr/plugin-svgo": "^6.5.1"
+ "@babel/preset-typescript": "^7.21.0",
+ "@svgr/core": "8.1.0",
+ "@svgr/plugin-jsx": "8.1.0",
+ "@svgr/plugin-svgo": "8.1.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=14"
},
"funding": {
"type": "github",
@@ -5095,11 +5056,6 @@
"integrity": "sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==",
"dev": true
},
- "node_modules/@types/trusted-types": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
- "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="
- },
"node_modules/@types/unist": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
@@ -5463,32 +5419,32 @@
}
},
"node_modules/algoliasearch": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.23.2.tgz",
- "integrity": "sha512-8aCl055IsokLuPU8BzLjwzXjb7ty9TPcUFFOk0pYOwsE5DMVhE3kwCMFtsCFKcnoPZK7oObm+H5mbnSO/9ioxQ==",
- "dev": true,
- "dependencies": {
- "@algolia/cache-browser-local-storage": "4.23.2",
- "@algolia/cache-common": "4.23.2",
- "@algolia/cache-in-memory": "4.23.2",
- "@algolia/client-account": "4.23.2",
- "@algolia/client-analytics": "4.23.2",
- "@algolia/client-common": "4.23.2",
- "@algolia/client-personalization": "4.23.2",
- "@algolia/client-search": "4.23.2",
- "@algolia/logger-common": "4.23.2",
- "@algolia/logger-console": "4.23.2",
- "@algolia/recommend": "4.23.2",
- "@algolia/requester-browser-xhr": "4.23.2",
- "@algolia/requester-common": "4.23.2",
- "@algolia/requester-node-http": "4.23.2",
- "@algolia/transporter": "4.23.2"
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.23.3.tgz",
+ "integrity": "sha512-Le/3YgNvjW9zxIQMRhUHuhiUjAlKY/zsdZpfq4dlLqg6mEm0nL6yk+7f2hDOtLpxsgE4jSzDmvHL7nXdBp5feg==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/cache-browser-local-storage": "4.23.3",
+ "@algolia/cache-common": "4.23.3",
+ "@algolia/cache-in-memory": "4.23.3",
+ "@algolia/client-account": "4.23.3",
+ "@algolia/client-analytics": "4.23.3",
+ "@algolia/client-common": "4.23.3",
+ "@algolia/client-personalization": "4.23.3",
+ "@algolia/client-search": "4.23.3",
+ "@algolia/logger-common": "4.23.3",
+ "@algolia/logger-console": "4.23.3",
+ "@algolia/recommend": "4.23.3",
+ "@algolia/requester-browser-xhr": "4.23.3",
+ "@algolia/requester-common": "4.23.3",
+ "@algolia/requester-node-http": "4.23.3",
+ "@algolia/transporter": "4.23.3"
}
},
"node_modules/algoliasearch-helper": {
- "version": "3.17.0",
- "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.17.0.tgz",
- "integrity": "sha512-R5422OiQjvjlK3VdpNQ/Qk7KsTIGeM5ACm8civGifOVWdRRV/3SgXuKmeNxe94Dz6fwj/IgpVmXbHutU4mHubg==",
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.21.0.tgz",
+ "integrity": "sha512-hjVOrL15I3Y3K8xG0icwG1/tWE+MocqBrhW6uVBWpU+/kVEMK0BnM2xdssj6mZM61eJ4iRxHR0djEI3ENOpR8w==",
"dev": true,
"dependencies": {
"@algolia/events": "^4.0.1"
@@ -6923,19 +6879,29 @@
}
},
"node_modules/cosmiconfig": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
- "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
+ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
"dev": true,
"dependencies": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.2.1",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.10.0"
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0",
+ "path-type": "^4.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
"node_modules/cross-inspect": {
@@ -6992,12 +6958,12 @@
}
},
"node_modules/css-declaration-sorter": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",
- "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz",
+ "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==",
"dev": true,
"engines": {
- "node": "^10 || ^12 || >=14"
+ "node": "^14 || ^16 || >=18"
},
"peerDependencies": {
"postcss": "^8.0.9"
@@ -7039,17 +7005,17 @@
}
},
"node_modules/css-minimizer-webpack-plugin": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz",
- "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz",
+ "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==",
"dev": true,
"dependencies": {
- "cssnano": "^5.1.8",
- "jest-worker": "^29.1.2",
- "postcss": "^8.4.17",
- "schema-utils": "^4.0.0",
- "serialize-javascript": "^6.0.0",
- "source-map": "^0.6.1"
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "cssnano": "^6.0.1",
+ "jest-worker": "^29.4.3",
+ "postcss": "^8.4.24",
+ "schema-utils": "^4.0.1",
+ "serialize-javascript": "^6.0.1"
},
"engines": {
"node": ">= 14.15.0"
@@ -7082,15 +7048,6 @@
}
}
},
- "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/css-select": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
@@ -7108,25 +7065,16 @@
}
},
"node_modules/css-tree": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
- "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
"dev": true,
"dependencies": {
- "mdn-data": "2.0.14",
- "source-map": "^0.6.1"
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
},
"engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/css-tree/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
}
},
"node_modules/css-what": {
@@ -7154,113 +7102,135 @@
}
},
"node_modules/cssnano": {
- "version": "5.1.15",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz",
- "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==",
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz",
+ "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==",
"dev": true,
"dependencies": {
- "cssnano-preset-default": "^5.2.14",
- "lilconfig": "^2.0.3",
- "yaml": "^1.10.2"
+ "cssnano-preset-default": "^6.1.2",
+ "lilconfig": "^3.1.1"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/cssnano"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/cssnano-preset-advanced": {
- "version": "5.3.10",
- "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz",
- "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==",
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz",
+ "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==",
"dev": true,
"dependencies": {
- "autoprefixer": "^10.4.12",
- "cssnano-preset-default": "^5.2.14",
- "postcss-discard-unused": "^5.1.0",
- "postcss-merge-idents": "^5.1.1",
- "postcss-reduce-idents": "^5.2.0",
- "postcss-zindex": "^5.1.0"
+ "autoprefixer": "^10.4.19",
+ "browserslist": "^4.23.0",
+ "cssnano-preset-default": "^6.1.2",
+ "postcss-discard-unused": "^6.0.5",
+ "postcss-merge-idents": "^6.0.3",
+ "postcss-reduce-idents": "^6.0.3",
+ "postcss-zindex": "^6.0.2"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/cssnano-preset-default": {
- "version": "5.2.14",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz",
- "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==",
- "dev": true,
- "dependencies": {
- "css-declaration-sorter": "^6.3.1",
- "cssnano-utils": "^3.1.0",
- "postcss-calc": "^8.2.3",
- "postcss-colormin": "^5.3.1",
- "postcss-convert-values": "^5.1.3",
- "postcss-discard-comments": "^5.1.2",
- "postcss-discard-duplicates": "^5.1.0",
- "postcss-discard-empty": "^5.1.1",
- "postcss-discard-overridden": "^5.1.0",
- "postcss-merge-longhand": "^5.1.7",
- "postcss-merge-rules": "^5.1.4",
- "postcss-minify-font-values": "^5.1.0",
- "postcss-minify-gradients": "^5.1.1",
- "postcss-minify-params": "^5.1.4",
- "postcss-minify-selectors": "^5.2.1",
- "postcss-normalize-charset": "^5.1.0",
- "postcss-normalize-display-values": "^5.1.0",
- "postcss-normalize-positions": "^5.1.1",
- "postcss-normalize-repeat-style": "^5.1.1",
- "postcss-normalize-string": "^5.1.0",
- "postcss-normalize-timing-functions": "^5.1.0",
- "postcss-normalize-unicode": "^5.1.1",
- "postcss-normalize-url": "^5.1.0",
- "postcss-normalize-whitespace": "^5.1.1",
- "postcss-ordered-values": "^5.1.3",
- "postcss-reduce-initial": "^5.1.2",
- "postcss-reduce-transforms": "^5.1.0",
- "postcss-svgo": "^5.1.0",
- "postcss-unique-selectors": "^5.1.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14.0"
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz",
+ "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.23.0",
+ "css-declaration-sorter": "^7.2.0",
+ "cssnano-utils": "^4.0.2",
+ "postcss-calc": "^9.0.1",
+ "postcss-colormin": "^6.1.0",
+ "postcss-convert-values": "^6.1.0",
+ "postcss-discard-comments": "^6.0.2",
+ "postcss-discard-duplicates": "^6.0.3",
+ "postcss-discard-empty": "^6.0.3",
+ "postcss-discard-overridden": "^6.0.2",
+ "postcss-merge-longhand": "^6.0.5",
+ "postcss-merge-rules": "^6.1.1",
+ "postcss-minify-font-values": "^6.1.0",
+ "postcss-minify-gradients": "^6.0.3",
+ "postcss-minify-params": "^6.1.0",
+ "postcss-minify-selectors": "^6.0.4",
+ "postcss-normalize-charset": "^6.0.2",
+ "postcss-normalize-display-values": "^6.0.2",
+ "postcss-normalize-positions": "^6.0.2",
+ "postcss-normalize-repeat-style": "^6.0.2",
+ "postcss-normalize-string": "^6.0.2",
+ "postcss-normalize-timing-functions": "^6.0.2",
+ "postcss-normalize-unicode": "^6.1.0",
+ "postcss-normalize-url": "^6.0.2",
+ "postcss-normalize-whitespace": "^6.0.2",
+ "postcss-ordered-values": "^6.0.2",
+ "postcss-reduce-initial": "^6.1.0",
+ "postcss-reduce-transforms": "^6.0.2",
+ "postcss-svgo": "^6.0.3",
+ "postcss-unique-selectors": "^6.0.4"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/cssnano-utils": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz",
- "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz",
+ "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==",
"dev": true,
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/csso": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
- "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
"dev": true,
"dependencies": {
- "css-tree": "^1.1.2"
+ "css-tree": "~2.2.0"
},
"engines": {
- "node": ">=8.0.0"
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "dev": true,
+ "dependencies": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
}
},
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "dev": true
+ },
"node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
@@ -9578,17 +9548,14 @@
}
},
"node_modules/estree-util-value-to-estree": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.0.1.tgz",
- "integrity": "sha512-b2tdzTurEIbwRh+mKrEcaWfu1wgb8J1hVsgREg7FFiecWwK/PhO8X0kyc+0bIcKNtD4sqxIdNoRy6/p/TvECEA==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.1.1.tgz",
+ "integrity": "sha512-5mvUrF2suuv5f5cGDnDphIy4/gW86z82kl5qG6mM9z04SEQI4FB5Apmaw/TGEf3l55nLtMs5s51dmhUzvAHQCA==",
"dev": true,
"dependencies": {
"@types/estree": "^1.0.0",
"is-plain-obj": "^4.0.0"
},
- "engines": {
- "node": ">=16.0.0"
- },
"funding": {
"url": "https://github.com/sponsors/remcohaszing"
}
@@ -10431,14 +10398,6 @@
"url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
}
},
- "node_modules/giscus": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/giscus/-/giscus-1.5.0.tgz",
- "integrity": "sha512-t3LL0qbSO3JXq3uyQeKpF5CegstGfKX/0gI6eDe1cmnI7D56R7j52yLdzw4pdKrg3VnufwCgCM3FDz7G1Qr6lg==",
- "dependencies": {
- "lit": "^3.1.2"
- }
- },
"node_modules/github-slugger": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz",
@@ -10856,9 +10815,9 @@
}
},
"node_modules/hast-util-raw": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.2.tgz",
- "integrity": "sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA==",
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.4.tgz",
+ "integrity": "sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==",
"dev": true,
"dependencies": {
"@types/hast": "^3.0.0",
@@ -12490,12 +12449,15 @@
}
},
"node_modules/lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
+ "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
}
},
"node_modules/lines-and-columns": {
@@ -12504,34 +12466,6 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"dev": true
},
- "node_modules/lit": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.2.tgz",
- "integrity": "sha512-VZx5iAyMtX7CV4K8iTLdCkMaYZ7ipjJZ0JcSdJ0zIdGxxyurjIn7yuuSxNBD7QmjvcNJwr0JS4cAdAtsy7gZ6w==",
- "dependencies": {
- "@lit/reactive-element": "^2.0.4",
- "lit-element": "^4.0.4",
- "lit-html": "^3.1.2"
- }
- },
- "node_modules/lit-element": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.4.tgz",
- "integrity": "sha512-98CvgulX6eCPs6TyAIQoJZBCQPo80rgXR+dVBs61cstJXqtI+USQZAbA4gFHh6L/mxBx9MrgPLHLsUgDUHAcCQ==",
- "dependencies": {
- "@lit-labs/ssr-dom-shim": "^1.2.0",
- "@lit/reactive-element": "^2.0.4",
- "lit-html": "^3.1.2"
- }
- },
- "node_modules/lit-html": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.2.tgz",
- "integrity": "sha512-3OBZSUrPnAHoKJ9AMjRL/m01YJxQMf+TMHanNtTHG68ubjnZxK0RFl102DPzsw4mWnHibfZIBJm3LWCZ/LmMvg==",
- "dependencies": {
- "@types/trusted-types": "^2.0.2"
- }
- },
"node_modules/load-plugin": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-6.0.2.tgz",
@@ -13726,9 +13660,9 @@
}
},
"node_modules/mdast-util-directive/node_modules/@types/mdast": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
- "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
"dev": true,
"dependencies": {
"@types/unist": "*"
@@ -13799,9 +13733,9 @@
}
},
"node_modules/mdast-util-directive/node_modules/mdast-util-from-markdown": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
- "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz",
+ "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==",
"dev": true,
"dependencies": {
"@types/mdast": "^4.0.0",
@@ -14057,9 +13991,9 @@
}
},
"node_modules/mdast-util-frontmatter/node_modules/@types/mdast": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
- "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
"dev": true,
"dependencies": {
"@types/unist": "*"
@@ -14078,9 +14012,9 @@
}
},
"node_modules/mdast-util-frontmatter/node_modules/mdast-util-from-markdown": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
- "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz",
+ "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==",
"dev": true,
"dependencies": {
"@types/mdast": "^4.0.0",
@@ -15903,9 +15837,9 @@
}
},
"node_modules/mdn-data": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
- "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
"dev": true
},
"node_modules/media-typer": {
@@ -18874,18 +18808,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/normalize-url": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
- "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/npm-normalize-package-bin": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz",
@@ -19641,9 +19563,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
- "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
+ "version": "8.4.38",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+ "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
"dev": true,
"funding": [
{
@@ -19662,120 +19584,123 @@
"dependencies": {
"nanoid": "^3.3.7",
"picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
+ "source-map-js": "^1.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/postcss-calc": {
- "version": "8.2.4",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz",
- "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==",
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz",
+ "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==",
"dev": true,
"dependencies": {
- "postcss-selector-parser": "^6.0.9",
+ "postcss-selector-parser": "^6.0.11",
"postcss-value-parser": "^4.2.0"
},
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
"peerDependencies": {
"postcss": "^8.2.2"
}
},
"node_modules/postcss-colormin": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz",
- "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz",
+ "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.4",
+ "browserslist": "^4.23.0",
"caniuse-api": "^3.0.0",
- "colord": "^2.9.1",
+ "colord": "^2.9.3",
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-convert-values": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz",
- "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz",
+ "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.4",
+ "browserslist": "^4.23.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-discard-comments": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz",
- "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz",
+ "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==",
"dev": true,
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-discard-duplicates": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz",
- "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz",
+ "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==",
"dev": true,
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-discard-empty": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz",
- "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz",
+ "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==",
"dev": true,
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-discard-overridden": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz",
- "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz",
+ "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==",
"dev": true,
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-discard-unused": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz",
- "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==",
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz",
+ "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==",
"dev": true,
"dependencies": {
- "postcss-selector-parser": "^6.0.5"
+ "postcss-selector-parser": "^6.0.16"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-loader": {
@@ -19800,144 +19725,118 @@
"webpack": "^5.0.0"
}
},
- "node_modules/postcss-loader/node_modules/cosmiconfig": {
- "version": "8.3.6",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
- "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
- "dev": true,
- "dependencies": {
- "import-fresh": "^3.3.0",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.2.0",
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/d-fischer"
- },
- "peerDependencies": {
- "typescript": ">=4.9.5"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
"node_modules/postcss-merge-idents": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz",
- "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz",
+ "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==",
"dev": true,
"dependencies": {
- "cssnano-utils": "^3.1.0",
+ "cssnano-utils": "^4.0.2",
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-merge-longhand": {
- "version": "5.1.7",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz",
- "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==",
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz",
+ "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0",
- "stylehacks": "^5.1.1"
+ "stylehacks": "^6.1.1"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-merge-rules": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz",
- "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==",
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz",
+ "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.4",
+ "browserslist": "^4.23.0",
"caniuse-api": "^3.0.0",
- "cssnano-utils": "^3.1.0",
- "postcss-selector-parser": "^6.0.5"
+ "cssnano-utils": "^4.0.2",
+ "postcss-selector-parser": "^6.0.16"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-minify-font-values": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz",
- "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz",
+ "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-minify-gradients": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz",
- "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz",
+ "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==",
"dev": true,
"dependencies": {
- "colord": "^2.9.1",
- "cssnano-utils": "^3.1.0",
+ "colord": "^2.9.3",
+ "cssnano-utils": "^4.0.2",
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-minify-params": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz",
- "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz",
+ "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.4",
- "cssnano-utils": "^3.1.0",
+ "browserslist": "^4.23.0",
+ "cssnano-utils": "^4.0.2",
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-minify-selectors": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz",
- "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==",
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz",
+ "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==",
"dev": true,
"dependencies": {
- "postcss-selector-parser": "^6.0.5"
+ "postcss-selector-parser": "^6.0.16"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-modules-extract-imports": {
@@ -20000,205 +19899,204 @@
}
},
"node_modules/postcss-normalize-charset": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz",
- "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz",
+ "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==",
"dev": true,
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-normalize-display-values": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz",
- "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz",
+ "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-normalize-positions": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz",
- "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz",
+ "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-normalize-repeat-style": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz",
- "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz",
+ "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-normalize-string": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz",
- "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz",
+ "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-normalize-timing-functions": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz",
- "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz",
+ "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-normalize-unicode": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz",
- "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz",
+ "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.4",
+ "browserslist": "^4.23.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-normalize-url": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz",
- "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz",
+ "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==",
"dev": true,
"dependencies": {
- "normalize-url": "^6.0.1",
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-normalize-whitespace": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz",
- "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz",
+ "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-ordered-values": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz",
- "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz",
+ "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==",
"dev": true,
"dependencies": {
- "cssnano-utils": "^3.1.0",
+ "cssnano-utils": "^4.0.2",
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-reduce-idents": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz",
- "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz",
+ "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-reduce-initial": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz",
- "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz",
+ "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.4",
+ "browserslist": "^4.23.0",
"caniuse-api": "^3.0.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-reduce-transforms": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz",
- "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz",
+ "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.0.15",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
- "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
+ "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
"dev": true,
"dependencies": {
"cssesc": "^3.0.0",
@@ -20209,49 +20107,49 @@
}
},
"node_modules/postcss-sort-media-queries": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz",
- "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz",
+ "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==",
"dev": true,
"dependencies": {
- "sort-css-media-queries": "2.1.0"
+ "sort-css-media-queries": "2.2.0"
},
"engines": {
- "node": ">=10.0.0"
+ "node": ">=14.0.0"
},
"peerDependencies": {
- "postcss": "^8.4.16"
+ "postcss": "^8.4.23"
}
},
"node_modules/postcss-svgo": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz",
- "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz",
+ "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0",
- "svgo": "^2.7.0"
+ "svgo": "^3.2.0"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >= 18"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-unique-selectors": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz",
- "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==",
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz",
+ "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==",
"dev": true,
"dependencies": {
- "postcss-selector-parser": "^6.0.5"
+ "postcss-selector-parser": "^6.0.16"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-value-parser": {
@@ -20261,15 +20159,15 @@
"dev": true
},
"node_modules/postcss-zindex": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz",
- "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz",
+ "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==",
"dev": true,
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/prelude-ls": {
@@ -20781,9 +20679,9 @@
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"node_modules/react-json-view-lite": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.3.0.tgz",
- "integrity": "sha512-aN1biKC5v4DQkmQBlZjuMFR09MKZGMPtIg+cut8zEeg2HXd6gl2gRy0n4HMacHf0dznQgo0SVXN7eT8zV3hEuQ==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.4.0.tgz",
+ "integrity": "sha512-wh6F6uJyYAmQ4fK0e8dSQMEWuvTs2Wr3el3sLD9bambX1+pSWUVXIz1RFaoy3TI1mZ0FqdpKq9YgbgTTgyrmXA==",
"dev": true,
"engines": {
"node": ">=14"
@@ -20794,13 +20692,12 @@
},
"node_modules/react-loadable": {
"name": "@docusaurus/react-loadable",
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz",
- "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz",
+ "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==",
"dev": true,
"dependencies": {
- "@types/react": "*",
- "prop-types": "^15.6.2"
+ "@types/react": "*"
},
"peerDependencies": {
"react": "*"
@@ -21155,9 +21052,9 @@
}
},
"node_modules/remark-directive/node_modules/@types/mdast": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
- "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
"dev": true,
"dependencies": {
"@types/unist": "*"
@@ -21180,9 +21077,9 @@
}
},
"node_modules/remark-emoji/node_modules/@types/mdast": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
- "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
"dev": true,
"dependencies": {
"@types/unist": "*"
@@ -21205,9 +21102,9 @@
}
},
"node_modules/remark-frontmatter/node_modules/@types/mdast": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
- "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
"dev": true,
"dependencies": {
"@types/unist": "*"
@@ -21874,9 +21771,9 @@
"dev": true
},
"node_modules/sax": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz",
- "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
+ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
"dev": true
},
"node_modules/scheduler": {
@@ -21941,9 +21838,9 @@
"dev": true
},
"node_modules/search-insights": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.13.0.tgz",
- "integrity": "sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw==",
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.14.0.tgz",
+ "integrity": "sha512-OLN6MsPMCghDOqlCtsIsYgtsC0pnwVTyT9Mu6A3ewOj1DxvzZF6COrn2g86E/c05xbktB0XN04m/t1Z+n+fTGw==",
"dev": true,
"peer": true
},
@@ -22362,9 +22259,9 @@
"dev": true
},
"node_modules/sitemap": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz",
- "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz",
+ "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==",
"dev": true,
"dependencies": {
"@types/node": "^17.0.5",
@@ -22407,6 +22304,16 @@
"node": ">=8"
}
},
+ "node_modules/snake-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz",
+ "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==",
+ "dev": true,
+ "dependencies": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
"node_modules/sockjs": {
"version": "0.3.24",
"resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
@@ -22428,9 +22335,9 @@
}
},
"node_modules/sort-css-media-queries": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz",
- "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz",
+ "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==",
"dev": true,
"engines": {
"node": ">= 6.3.0"
@@ -22452,9 +22359,9 @@
}
},
"node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -22537,13 +22444,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/stable": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
- "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
- "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility",
- "dev": true
- },
"node_modules/statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
@@ -22810,19 +22710,19 @@
}
},
"node_modules/stylehacks": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz",
- "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==",
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz",
+ "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.4",
- "postcss-selector-parser": "^6.0.4"
+ "browserslist": "^4.23.0",
+ "postcss-selector-parser": "^6.0.16"
},
"engines": {
- "node": "^10 || ^12 || >=14.0"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/stylis": {
@@ -22862,24 +22762,28 @@
"dev": true
},
"node_modules/svgo": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz",
- "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz",
+ "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
"dev": true,
"dependencies": {
"@trysound/sax": "0.2.0",
"commander": "^7.2.0",
- "css-select": "^4.1.3",
- "css-tree": "^1.1.3",
- "csso": "^4.2.0",
- "picocolors": "^1.0.0",
- "stable": "^0.1.8"
+ "css-select": "^5.1.0",
+ "css-tree": "^2.3.1",
+ "css-what": "^6.1.0",
+ "csso": "^5.0.5",
+ "picocolors": "^1.0.0"
},
"bin": {
"svgo": "bin/svgo"
},
"engines": {
- "node": ">=10.13.0"
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/svgo"
}
},
"node_modules/svgo/node_modules/commander": {
@@ -22891,74 +22795,6 @@
"node": ">= 10"
}
},
- "node_modules/svgo/node_modules/css-select": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
- "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0",
- "css-what": "^6.0.1",
- "domhandler": "^4.3.1",
- "domutils": "^2.8.0",
- "nth-check": "^2.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/svgo/node_modules/dom-serializer": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
- "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.0.1",
- "domhandler": "^4.2.0",
- "entities": "^2.0.0"
- },
- "funding": {
- "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
- }
- },
- "node_modules/svgo/node_modules/domhandler": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
- "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.2.0"
- },
- "engines": {
- "node": ">= 4"
- },
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
- }
- },
- "node_modules/svgo/node_modules/domutils": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
- "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
- "dev": true,
- "dependencies": {
- "dom-serializer": "^1.0.1",
- "domelementtype": "^2.2.0",
- "domhandler": "^4.2.0"
- },
- "funding": {
- "url": "https://github.com/fb55/domutils?sponsor=1"
- }
- },
- "node_modules/svgo/node_modules/entities": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
- "dev": true,
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
"node_modules/synckit": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.0.tgz",
diff --git a/package.json b/package.json
index 29f62e822..7c301c6ed 100644
--- a/package.json
+++ b/package.json
@@ -53,11 +53,11 @@
}
},
"devDependencies": {
- "@docusaurus/core": "3.2.0",
- "@docusaurus/preset-classic": "3.2.0",
- "@docusaurus/theme-classic": "3.2.0",
- "@docusaurus/theme-mermaid": "3.2.0",
- "@docusaurus/types": "3.2.0",
+ "@docusaurus/core": "^3.4.0",
+ "@docusaurus/preset-classic": "^3.4.0",
+ "@docusaurus/theme-classic": "^3.4.0",
+ "@docusaurus/theme-mermaid": "^3.4.0",
+ "@docusaurus/types": "^3.4.0",
"@graphql-markdown/diff": "^1.1.4",
"@graphql-markdown/docusaurus": "^1.24.0",
"@graphql-tools/graphql-file-loader": "^8.0.1",
@@ -82,7 +82,6 @@
"uuid": "^9.0.1"
},
"dependencies": {
- "@giscus/react": "^2.4.0",
"@sentry/react": "7.109.0",
"@sentry/tracing": "7.109.0",
"react": "^18.2.0",
diff --git a/sidebars.js b/sidebars.js
index a4d8f3432..6654389c5 100644
--- a/sidebars.js
+++ b/sidebars.js
@@ -1,87 +1,35 @@
module.exports = {
main: [
+ "index",
{
- Overview: [
+ type: "category",
+ label: "About Saleor",
+ collapsible: false,
+ items: [
"overview/introduction",
- {
- type: "category",
- label: "Why Saleor",
- items: [
- "overview/why-saleor/headless",
- "overview/why-saleor/composable",
- "overview/why-saleor/extensibility",
- "overview/why-saleor/open-source",
- "overview/why-saleor/graphql",
- "overview/why-saleor/saas-self-host",
- "overview/why-saleor/scalable",
- "overview/why-saleor/multi-market",
- ],
- },
"overview/architecture",
+ "cloud",
"overview/quickstart",
],
},
{
- Guides: [
- {
- type: "category",
- label: "Channels",
- items: [
- "developer/channels/overview",
- "developer/channels/configuration",
- "developer/channels/lifecycle",
- "developer/channels/troubleshooting",
- "developer/channels/api",
- ],
- },
- "developer/products",
- "developer/attributes",
- {
- type: "category",
- label: "Checkout and Orders",
- items: [
- "developer/checkout/overview",
- "developer/checkout/lines",
- "developer/checkout/stock",
- "developer/checkout/address",
- "developer/checkout/problems",
- "developer/checkout/finalizing",
- "developer/checkout/order-to-checkout",
- "developer/order-status",
- ],
- },
- "developer/payments",
- "developer/stock-allocation",
- {
- type: "category",
- label: "Discounts",
- items: [
- "developer/discounts/overview",
- "developer/discounts/promotions",
- "developer/discounts/vouchers",
- "developer/discounts/sales",
- ],
- },
- "developer/gift-cards",
- "developer/address",
- "developer/users",
- "developer/permissions",
- "developer/taxes",
- "developer/thumbnails",
- {
- type: "category",
- label: "Data Imports",
- items: [
- "developer/bulks/error-policy",
- "developer/bulks/bulk-attributes",
- "developer/bulks/bulk-orders",
- ],
- },
+ type: "category",
+ label: "Why Saleor",
+ items: [
+ "overview/why-saleor/headless",
+ "overview/why-saleor/composable",
+ "overview/why-saleor/extensibility",
+ "overview/why-saleor/open-source",
+ "overview/why-saleor/graphql",
+ "overview/why-saleor/saas-self-host",
+ "overview/why-saleor/scalable",
+ "overview/why-saleor/multi-market",
],
},
+ { type: "html", value: "
" },
{
type: "category",
- label: "API Usage",
+ label: "GraphQL",
items: [
{
type: "autogenerated",
@@ -89,10 +37,14 @@ module.exports = {
},
],
},
+ { type: "ref", id: "developer/index" },
+ { type: "ref", id: "developer/app-store/overview" },
+ { type: "ref", id: "api-reference/api-reference" },
+ { type: "html", value: "
" },
{
type: "category",
label: "Saleor Cloud",
- items: ["cloud", "restricting-api-access"],
+ items: ["restricting-api-access"],
},
{
type: "category",
@@ -111,80 +63,6 @@ module.exports = {
},
],
},
- {
- type: "category",
- label: "Exporting Data",
- items: [
- "developer/export/export-overview",
- "developer/export/export-products",
- "developer/export/export-gift-cards",
- "developer/export/export-voucher-codes",
- ],
- },
- {
- type: "category",
- label: "Saleor App Store",
- items: [
- "developer/app-store/overview",
- {
- type: "category",
- label: "Apps",
- items: [
- "developer/app-store/apps/overview",
- {
- type: "category",
- label: "AvaTax",
- items: [
- "developer/app-store/apps/avatax/overview",
- "developer/app-store/apps/avatax/architecture",
- "developer/app-store/apps/avatax/configuration",
- "developer/app-store/apps/avatax/tax-codes",
- "developer/app-store/apps/avatax/development",
- ],
- },
- "developer/app-store/apps/crm",
- "developer/app-store/apps/adyen",
- "developer/app-store/apps/invoices",
- "developer/app-store/apps/cms",
- "developer/app-store/apps/product-feed",
- "developer/app-store/apps/segment",
- "developer/app-store/apps/search",
- {
- type: "category",
- label: "Emails and Messages",
- items: [
- "developer/app-store/apps/emails-and-messages/overview",
- "developer/app-store/apps/emails-and-messages/sendgrid",
- "developer/app-store/apps/emails-and-messages/smtp",
- "developer/app-store/apps/emails-and-messages/troubleshooting",
- ],
- },
- {
- type: "category",
- label: "SMTP",
- items: [
- "developer/app-store/apps/smtp/overview",
- "developer/app-store/apps/smtp/configuration",
- "developer/app-store/apps/smtp/troubleshooting",
- ],
- },
- ],
- },
- {
- type: "category",
- label: "Legacy Plugins",
- items: [
- "developer/app-store/legacy-plugins/admin-emails",
- "developer/app-store/legacy-plugins/adyen",
- "developer/app-store/legacy-plugins/dummy-credit-card",
- "developer/app-store/legacy-plugins/stripe",
- "developer/app-store/legacy-plugins/oidc",
- "developer/app-store/legacy-plugins/np-atobarai",
- "developer/app-store/legacy-plugins/user-emails",
- ],
- },
- ],
- },
{
type: "category",
label: "Extending Saleor",
@@ -277,17 +155,10 @@ module.exports = {
label: "Upgrade Guides",
items: [
"setup/upgrading",
- "upgrade-guides/2-11-to-3-0",
- "upgrade-guides/3-0-to-3-1",
- "upgrade-guides/3-1-to-3-2",
- "upgrade-guides/3-5-to-3-6",
- "upgrade-guides/3-11-to-3-12",
- "upgrade-guides/3-12-to-3-13",
- "upgrade-guides/3-13-to-3-14",
- "upgrade-guides/3-16-to-3-17",
- "upgrade-guides/3-17-to-3-18",
- "upgrade-guides/3-18-to-3-19",
- "upgrade-guides/notify-user-deprecation",
+ {
+ type: "autogenerated",
+ dirName: "upgrade-guides",
+ },
],
},
],
@@ -303,5 +174,159 @@ module.exports = {
],
},
],
- api: [...require("./docs/api-reference/sidebar-schema.js").schemaSidebar],
+ concepts: [
+ "developer/index",
+ { type: "html", value: "
" },
+ {
+ type: "category",
+ label: "Channels",
+ collapsible: false,
+ items: [
+ "developer/channels/overview",
+ "developer/channels/configuration",
+ "developer/channels/lifecycle",
+ "developer/channels/troubleshooting",
+ "developer/channels/api",
+ ],
+ },
+ "developer/products",
+ "developer/attributes",
+ {
+ type: "category",
+ label: "Checkout and Orders",
+ collapsible: false,
+ items: [
+ "developer/checkout/overview",
+ "developer/checkout/lines",
+ "developer/checkout/stock",
+ "developer/checkout/address",
+ "developer/checkout/problems",
+ "developer/checkout/finalizing",
+ "developer/checkout/order-to-checkout",
+ "developer/order-status",
+ ],
+ },
+ "developer/payments",
+ "developer/stock-allocation",
+ {
+ type: "category",
+ label: "Discounts",
+ collapsible: false,
+ items: [
+ "developer/discounts/overview",
+ "developer/discounts/promotions",
+ "developer/discounts/vouchers",
+ "developer/discounts/sales",
+ ],
+ },
+ "developer/gift-cards",
+ "developer/address",
+ "developer/users",
+ "developer/permissions",
+ "developer/taxes",
+ "developer/thumbnails",
+ {
+ type: "category",
+ label: "Importing and Exporting Data",
+ collapsible: false,
+ items: [
+ {
+ type: "category",
+ label: "Importing Data",
+ collapsible: false,
+ items: [
+ {
+ type: "autogenerated",
+ dirName: "developer/bulks",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Exporting Data",
+ collapsible: false,
+ items: [
+ {
+ type: "autogenerated",
+ dirName: "developer/export",
+ },
+ ],
+ },
+ ],
+ },
+ ],
+ appStore: [
+ "developer/app-store/overview",
+ { type: "html", value: "
" },
+ {
+ type: "category",
+ label: "Adyen",
+ collapsible: false,
+ items: [
+ {
+ type: "autogenerated",
+ dirName: "developer/app-store/apps/adyen",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Avalara AvaTax",
+ collapsible: false,
+ items: [
+ {
+ type: "autogenerated",
+ dirName: "developer/app-store/apps/avatax",
+ },
+ ],
+ },
+ "developer/app-store/apps/crm",
+ {
+ type: "category",
+ label: "Emails and Messages",
+ collapsible: false,
+ items: [
+ {
+ type: "autogenerated",
+ dirName: "developer/app-store/apps/emails-and-messages",
+ },
+ ],
+ },
+ "developer/app-store/apps/cms",
+ "developer/app-store/apps/invoices",
+ "developer/app-store/apps/product-feed",
+ "developer/app-store/apps/segment",
+ "developer/app-store/apps/search",
+ {
+ type: "category",
+ label: "SMTP",
+ collapsible: false,
+ items: [
+ {
+ type: "autogenerated",
+ dirName: "developer/app-store/apps/smtp",
+ },
+ ],
+ },
+ { type: "html", value: "
" },
+ {
+ type: "category",
+ label: "Legacy Plugins",
+ items: [
+ "developer/app-store/legacy-plugins/admin-emails",
+ "developer/app-store/legacy-plugins/adyen",
+ "developer/app-store/legacy-plugins/dummy-credit-card",
+ "developer/app-store/legacy-plugins/stripe",
+ "developer/app-store/legacy-plugins/oidc",
+ "developer/app-store/legacy-plugins/np-atobarai",
+ "developer/app-store/legacy-plugins/user-emails",
+ ],
+ },
+ ],
+ api: [
+ {
+ type: "autogenerated",
+ dirName: "api-reference",
+ },
+ ],
};
diff --git a/src/css/components/api-reference.css b/src/css/components/api-reference.css
index ddf557546..4808c7513 100644
--- a/src/css/components/api-reference.css
+++ b/src/css/components/api-reference.css
@@ -20,9 +20,10 @@ html[class*="docs-doc-id-api-"]:not([class*="docs-doc-id-api-usage"])
}
html[class*="docs-doc-id-api-"]:not([class*="docs-doc-id-api-usage"])
- .theme-doc-sidebar-item-category-level-1
- .menu__list {
- padding-left: var(--spacer-2);
+ .theme-doc-sidebar-item-category-level-2
+ .menu__link {
+ overflow: hidden;
+ text-overflow: ellipsis;
}
html[class*="docs-doc-id-api-"]:not([class*="docs-doc-id-api-usage"])
@@ -33,12 +34,6 @@ html[class*="docs-doc-id-api-"]:not([class*="docs-doc-id-api-usage"])
letter-spacing: -0.3px;
}
-html[class*="docs-doc-id-api-"]:not([class*="docs-doc-id-api-usage"])
- .theme-doc-sidebar-item-category-level-2
- .menu__list {
- padding-left: 0;
-}
-
html[class*="docs-doc-id-api-"]:not(
[class*="docs-doc-id-api-usage"],
[class*="docs-doc-id-api-storefront/api-reference"],
diff --git a/src/css/components/menu.css b/src/css/components/menu.css
index 8cc55c195..1b6959729 100644
--- a/src/css/components/menu.css
+++ b/src/css/components/menu.css
@@ -15,28 +15,10 @@
.menu__link {
font-size: var(--font-size-sm);
- color: var(--gray10);
transition: all 0.3s ease-in-out;
position: relative;
}
-.menu__link--active:not(.menu__link--sublist) {
- color: var(--gray12);
- font-weight: 600;
- background-color: transparent;
- border-radius: 0;
-}
-
-.menu__link--sublist {
- font-weight: 100;
-}
-.menu__link:hover,
-.menu__list-item-collapsible,
-.menu__list-item-collapsible:hover {
- background-color: transparent;
- color: var(--gray12);
-}
-
.menu__caret {
position: relative;
right: 10px;
@@ -45,50 +27,38 @@
}
.menu__link--sublist:hover ~ .menu__caret {
- background-color: var(--gray4);
}
.menu__caret:hover {
- background-color: var(--gray4);
-}
-
-.menu__link:before {
- position: absolute;
- content: "";
- left: 5px;
- background-color: var(--gray12);
- height: 8px;
- width: 8px;
- border-radius: 50%;
- transform: scale(0) translateY(200%);
- opacity: 0;
- transition: all 0.25s ease-in-out;
}
-.menu__link--active:not(.menu__link--sublist):before {
- position: absolute;
- content: "";
- left: 5px;
- background-color: var(--gray12);
- height: 8px;
- width: 8px;
- opacity: 1;
- border-radius: 50%;
- transform: scale(1) translateY(0);
+.menu__link--active {
+ font-weight: 600;
}
-.menu__link--active:not(.menu__link--sublist):hover {
- background-color: transparent;
+.menu__list hr {
+ background: transparent;
+ height: 1em;
+ margin: 0;
}
-
-.menu__link--active {
- font-weight: 600;
+.menu__list .menu__list .menu__list-item {
+ position: relative;
}
-.menu__link--sublist {
- color: var(--gray12);
- font-weight: 600;
+.menu__list .menu__list .menu__list-item:before {
+ background-color: var(--gray4);
+ bottom: 0;
+ content: "";
+ display: block;
+ height: 100%;
+ left: 8px;
+ position: absolute;
+ top: 0;
+ width: 1px;
}
+.menu__list-item:not(:first-child) {
+ margin: 0;
+}
.menu__list-item > * {
height: 2.2rem;
}
diff --git a/src/theme/DocItem/Footer/index.js b/src/theme/DocItem/Footer/index.js
deleted file mode 100644
index c8916066c..000000000
--- a/src/theme/DocItem/Footer/index.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import React from "react";
-import Footer from "@theme-original/DocItem/Footer";
-import Feedback from "@site/components/Feedback";
-
-export default function FooterWrapper(props) {
- return (
- <>
-
-
- >
- );
-}
diff --git a/src/theme/DocItem/Paginator/index.js b/src/theme/DocItem/Paginator/index.js
deleted file mode 100644
index d07f4d6bb..000000000
--- a/src/theme/DocItem/Paginator/index.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import { useColorMode } from "@docusaurus/theme-common";
-import { useDoc } from "@docusaurus/theme-common/internal";
-import Giscus from "@giscus/react";
-import Paginator from "@theme-original/DocItem/Paginator";
-import React from "react";
-
-export default function PaginatorWrapper(props) {
- const { colorMode } = useColorMode();
- const { metadata } = useDoc();
-
- const { frontMatter } = metadata;
- const { disableComments } = frontMatter;
-
- return (
- <>
-
- {!disableComments && (
-
-
-
- )}
- >
- );
-}
diff --git a/template/api-reference.mdx b/template/api-reference.mdx
index 5dd9e9f18..3f39eb8ca 100644
--- a/template/api-reference.mdx
+++ b/template/api-reference.mdx
@@ -1,4 +1,5 @@
---
+sidebar_position: 1
title: API reference
---
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/adyen/adyen-web-drop-in.png b/versioned_docs/version-3.x/developer/app-store/apps/adyen/adyen-web-drop-in.png
new file mode 100644
index 000000000..8bc20c7db
Binary files /dev/null and b/versioned_docs/version-3.x/developer/app-store/apps/adyen/adyen-web-drop-in.png differ
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/adyen/architecture.mdx b/versioned_docs/version-3.x/developer/app-store/apps/adyen/architecture.mdx
new file mode 100644
index 000000000..e000f20c2
--- /dev/null
+++ b/versioned_docs/version-3.x/developer/app-store/apps/adyen/architecture.mdx
@@ -0,0 +1,34 @@
+---
+sidebar_position: 2
+title: Architecture
+---
+
+## Webhook events
+
+The Adyen App implements the following [Saleor sync webhooks related to transactions](developer/extending/webhooks/synchronous-events/transaction.mdx):
+
+- [`PAYMENT_GATEWAY_INITIALIZE_SESSION`](api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumpayment_gateway_initialize_session)
+- [`TRANSACTION_INITIALIZE_SESSION`](api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_initialize_session)
+- [`TRANSACTION_PROCESS_SESSION`](api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_process_session)
+- [`TRANSACTION_CHARGE_REQUESTED`](api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_charge_requested)
+- [`TRANSACTION_CANCEL_REQUESTED`](api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_cancelation_requested)
+- [`TRANSACTION_REFUND_REQUESTED`](api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_refund_requested)
+
+Furthermore, it's also prepared to handle [async Adyen webhooks](https://docs.adyen.com/development-resources/webhooks).
+
+The Adyen App follows the flow described in detail in the [Saleor Payment App documentation](developer/payments.mdx#payment-app).
+
+## Limitations
+
+This section contains known limitations of this App.
+
+### Maximum timeout for Adyen calls is 15 seconds
+
+Saleor synchronous webhooks have a maximum response time limit of 20 seconds. The app restricts the Adyen response time to 15 seconds to allow graceful error handling.
+If Adyen surpasses this limit, the App will return a FAILURE status with an appropriate error message (Timeout Error).
+
+### Maximum timeout for Saleor API calls is 5 seconds
+
+The app restricts Saleor API response time to 5 seconds for [`TransactionInitializeSession`](developer/extending/webhooks/synchronous-events/transaction.mdx#initialize-transaction-session) and [`TransactionProcessSession`](developer/extending/webhooks/synchronous-events/transaction.mdx#process-transaction-session) subscriptions. If Saleor API surpasses this limit, the App will gracefully continue processing.
+
+If such timeout happens, the created [`TransactionItem`](api-reference/payments/objects/transaction-item.mdx) will not have the metadata from Adyen on `additionalDetails` object, which includes payment method type, credit card brand, etc.
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/adyen/configuration.mdx b/versioned_docs/version-3.x/developer/app-store/apps/adyen/configuration.mdx
new file mode 100644
index 000000000..24d5c859b
--- /dev/null
+++ b/versioned_docs/version-3.x/developer/app-store/apps/adyen/configuration.mdx
@@ -0,0 +1,69 @@
+---
+sidebar_position: 3
+title: Configuration
+---
+
+import Video from "@site/components/Video";
+
+For Adyen to appear as [available payment gateway](developer/checkout/finalizing.mdx#listing-available-payment-gateways), you need to [install it in the Saleor Dashboard](developer/app-store/overview.mdx#usage). You must obtain the API key from Adyen and paste it into the Adyen App configuration form. Then, a wizard will guide you through the process of configuring the Adyen App, setting up the webhook to receive notifications from Adyen, generating the HMAC key, and adding allowed origins for the Client Key that's used on your Storefront.
+
+## Configuring Adyen
+
+Video introduction to Adyen configuration in Saleor:
+
+
+
+You can install the Adyen app directly from your Saleor Dashboard. Go to the **Apps** section and click the **Install** button next to the Adyen app. Follow the instructions on the screen. After the installation is complete, select the Adyen app from the list of installed applications.
+
+### Creating new API Credentials
+
+To create new Adyen API credentials head over to the Adyen dashboard, then **Developers -> API credentials**. Click **Create new credential** and choose **Web service user**.
+
+In **Server settings -> Authentication** section generate a new API key.
+
+In **Client settings -> Authentication** section generate a new client key.
+
+Go back to the Adyen app configuration in the Saleor Dashboard. Provide a configuration name that you will be familiar with. In the **API Key** field provide the key from **Server settings -> Authentication** section. Select **TEST** environment.
+
+:::caution
+The configuration will not work until you save API credentials in the Adyen dashboard.
+:::
+
+Save API credentials in the Adyen dashboard, head over to the Adyen app configuration, and click **Save**. The rest of the form fields have been enabled.
+
+In **Client key** field provide key from **Client settings -> Authentication** section. Select the merchant account you want to use from the dropdown.
+
+### Webook configuration
+
+In Adyen dashboard head over to **Developers -> Webhooks**. Click the **+ Webhook** button and choose **Standard webhook**. Provide a description for the webhook.
+
+In the **Server configuration** section provide URL the Saleor Adyen app has generated for you. You can copy it from the **Webhook URL** input in the Adyen configuration form. Leave default settings and click **Apply**.
+
+In **Merchant accounts** select **Include only specific merchant accounts** and choose the merchant account you would like to use.
+
+In **Events**, apart from events selected by default, select `EXPIRE`. Deselect `ORDER_OPENED` event.
+
+In **Additional settings -> Risk** select `Include the originalReference for CHARGEBACK_REVERSED events`.
+
+In **Security -> Basic authentication** provide username and password. Apply changes. Use the same username and password in the **webhook username** and **webhook password** fields in the Adyen application.
+
+Generate a new **HMAC key** in the **Security -> HMAC Key** section and copy it.
+
+Apply the configuration details in the Saleor Adyen app then in Adyen dashboard save the new Adyen webhook.
+Save the configuration. If everything went well, you should see a new button **Make test webhook call**. Use it to test if your configuration is correct.
+
+:::caution
+
+API Key provided inside the configuration must have the following permissions set in Adyen Dashboard:
+
+- "Management API - Accounts read and write"
+- "Management API - API credentials read and write"
+- "Management API - Payment methods read"
+- "Management API - Stores read and write"
+- "Management API - Webhooks read and write"
+- "Checkout encrypted cardholder data"
+- "Merchant Recurring role"
+- "Checkout webservice role"
+- "Merchant PAL Webservice role"
+
+:::
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/adyen/overview.mdx b/versioned_docs/version-3.x/developer/app-store/apps/adyen/overview.mdx
new file mode 100644
index 000000000..f9e99a160
--- /dev/null
+++ b/versioned_docs/version-3.x/developer/app-store/apps/adyen/overview.mdx
@@ -0,0 +1,30 @@
+---
+sidebar_label: Overview
+sidebar_position: 1
+title: Adyen
+---
+
+import { AppMetadata } from "/components/AppMetadata/AppMetadata.tsx";
+
+
+
+The Adyen App is a payment integration app that allows merchants using the Saleor e-commerce platform to accept online payments from customers using Adyen as their payment processor. In addition to processing payments, the Saleor App Payment Adyen provides merchants with tools for managing refunds and chargebacks.
+
+:::caution
+
+To configure the Adyen App, you must have an account with [Adyen](https://www.adyen.com).
+
+:::
+
+The Adyen App uses the [Adyen Drop-in Advanced Flow](https://docs.adyen.com/online-payments/build-your-integration/advanced-flow/) and allows for integrations with the following Adyen flows:
+
+- Web (drop-in and components)
+- iOS (drop-in and components)
+- Android (drop-in and components)
+- Cross-platform (React Native drop-in and React Native components)
+
+:::info
+
+Adyen App uses Adyen [Checkout API v70](https://docs.adyen.com/api-explorer/#/CheckoutService/v70/overview) and [Management API v1](https://docs.adyen.com/api-explorer/#/ManagementService/v1/overview).
+
+:::
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/adyen.mdx b/versioned_docs/version-3.x/developer/app-store/apps/adyen/storefront.mdx
similarity index 62%
rename from versioned_docs/version-3.x/developer/app-store/apps/adyen.mdx
rename to versioned_docs/version-3.x/developer/app-store/apps/adyen/storefront.mdx
index ae0e4e304..312be6e11 100644
--- a/versioned_docs/version-3.x/developer/app-store/apps/adyen.mdx
+++ b/versioned_docs/version-3.x/developer/app-store/apps/adyen/storefront.mdx
@@ -1,137 +1,17 @@
---
-title: Adyen
-sidebar_position: 3
+sidebar_position: 4
+title: Storefront Integration
---
-import { AppMetadata } from "/components/AppMetadata/AppMetadata.tsx";
-import Video from "@site/components/Video";
-
-
-
-## Overview
-
-Adyen App is a payment integration app that allows merchants using the Saleor e-commerce platform to accept online payments from customers using Adyen as their payment processor. In addition to processing payments, the Saleor App Payment Adyen provides merchants with tools for managing refunds and chargebacks.
-
-:::caution
-
-To configure the Adyen App, you must have an account with [Adyen](https://www.adyen.com).
-
-:::
-
-The Adyen App allows for integrations with [Adyen Web Drop-in](https://docs.adyen.com/online-payments/web-drop-in/additional-use-cases/advanced-flow), [Adyen iOS Drop-in](https://docs.adyen.com/online-payments/ios/drop-in/additional-use-cases/advanced-flow), [Adyen Android Drop-in](https://docs.adyen.com/online-payments/android/drop-in), and [Adyen React Native Drop-in](https://docs.adyen.com/online-payments/react-native/drop-in). It uses the [Adyen Drop-in Advanced Flow](https://docs.adyen.com/online-payments/web-drop-in/additional-use-cases/advanced-flow).
-
-:::info
-
-Adyen App uses Adyen [Checkout API v70](https://docs.adyen.com/api-explorer/#/CheckoutService/v70/overview) and [Management API v1](https://docs.adyen.com/api-explorer/#/ManagementService/v1/overview).
-
-:::
-
-## Capabilities
-
-The Adyen App implements the following [Saleor sync webhooks related to transactions](../../extending/webhooks/synchronous-events/transaction.mdx):
-
-- [`PAYMENT_GATEWAY_INITIALIZE_SESSION`](../../../api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumpayment_gateway_initialize_session)
-- [`TRANSACTION_INITIALIZE_SESSION`](../../../api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_initialize_session)
-- [`TRANSACTION_PROCESS_SESSION`](../../../api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_process_session)
-- [`TRANSACTION_CHARGE_REQUESTED`](../../../api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_charge_requested)
-- [`TRANSACTION_CANCEL_REQUESTED`](../../../api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_cancelation_requested)
-- [`TRANSACTION_REFUND_REQUESTED`](../../../api-reference/webhooks/enums/webhook-event-type-sync-enum.mdx#webhookeventtypesyncenumtransaction_refund_requested)
-
-Furthermore, it's also prepared to handle [async Adyen webhooks](https://docs.adyen.com/development-resources/webhooks).
-
-Adyen App follows the flow described in detail in the [Saleor Payment App documentation](../../payments#payment-app).
-
-## Limitations
-
-This section contains known limitations of this App.
-
-### Maximum timeout for Adyen calls is 15 seconds
-
-Saleor synchronous webhooks have a maximum response time limit of 20 seconds. The app restricts Adyen response time to 15 seconds to allow graceful error handling.
-If Adyen surpasses this limit, the App will return a FAILURE status with an appropriate error message (Timeout Error).
-
-### Maximum timeout for Saleor API calls is 5 seconds
-
-The apps restricts Saleor API response time to 5 seconds for [`TransactionInitializeSession`](../../extending/webhooks/synchronous-events/transaction.mdx#initialize-transaction-session) and [`TransactionProcessSession`](../../extending/webhooks/synchronous-events/transaction.mdx#process-transaction-session) subscriptions. If Saleor API surpasses this limit, the App will gracefully continue processing.
-
-If such timeout happens, the created [`TransactionItem`](../../../api-reference/payments/objects/transaction-item.mdx) will not have the metadata from Adyen on `additionalDetails` object, that include payment method type, credit card brand, etc.
-
-## Configuration
-
-For Adyen to appear as [available payment gateway](../../checkout/finalizing.mdx#listing-available-payment-gateways), you need to [install it in the Saleor Dashboard](../overview#usage). You must obtain the API key from Adyen and paste it into the Adyen App configuration form. Then, a wizard will guide you through the process of configuring the Adyen App, setting up the webhook to receive notifications from Adyen, generating the HMAC key, and adding allowed origins for the Client Key that's used on your Storefront.
-
-### Configuring Adyen
-
-Video introduction to Adyen configuration in Saleor:
-
-
-
-You can install the Adyen app directly from your Saleor Dashboard. Go to the **Apps** section and click the **Install** button next to the Adyen app. Follow the instructions on the screen. After the installation is complete, select the Adyen app from the list of installed applications.
-
-#### Creating new API Credentials
-
-To create new Adyen API credentials head over to the Adyen dashboard, then **Developers -> API credentials**. Click **Create new credential** and choose **Web service user**.
-
-In **Server settings -> Authentication** section generate new API key.
-
-In **Client settings -> Authentication** section generate new client key.
-
-Go back to the Adyen app configuration in the Saleor Dashboard. Provide a configuration name that you will be familiar with. In the **API Key** field provide the key from **Server settings -> Authentication** section. Select **TEST** environment.
-
-:::caution
-The configuration will not work until you save API credentials in the Adyen dashboard.
-:::
-
-Save API credentials in the Adyen dashboard, head over to the Adyen app configuration, and click **Save**. The rest of the form fields have been enabled.
-
-In **Client key** field provide key from **Client settings -> Authentication** section. Select the merchant account you want to use from the dropdown.
-
-#### Webook configuration
-
-In Adyen dashboard head over to **Developers -> Webhooks**. Click the **+ Webhook** button and choose **Standard webhook**. Provide a description for the webhook.
-
-In the **Server configuration** section provide URL the Saleor Adyen app has generated for you. You can copy it from the **Webhook URL** input in the Adyen configuration form. Leave default settings and click **Apply**.
-
-In **Merchant accounts** select **Include only specific merchant accounts** and choose the merchant account you would like to use.
-
-In **Events**, apart from events selected by default, select `EXPIRE`. Deselect `ORDER_OPENED` event.
-
-In **Additional settings -> Risk** select `Include the originalReference for CHARGEBACK_REVERSED events`.
-
-In **Security -> Basic authentication** provide username and password. Apply changes. Use the same username and password in the **webhook username** and **webhook password** fields in the Adyen application.
-
-Generate a new **HMAC key** in the **Security -> HMAC Key** section and copy it.
-
-Apply the configuration details in the Saleor Adyen app then in Adyen dashboard save the new Adyen webhook.
-Save the configuration. If everything went well, you should see a new button **Make test webhook call**. Use it to test if your configuration is correct.
-
-:::caution
-
-API Key provided inside the configuration must have the following permissions set in Adyen Dashboard:
-
-- "Management API - Accounts read and write"
-- "Management API - API credentials read and write"
-- "Management API - Payment methods read"
-- "Management API - Stores read and write"
-- "Management API - Webhooks read and write"
-- "Checkout encrypted cardholder data"
-- "Merchant Recurring role"
-- "Checkout webservice role"
-- "Merchant PAL Webservice role"
-
-:::
-
-## Usage in Storefront or mobile apps
-
-Adyen App can be used to integrate with Adyen APIs. By using a set of GraphQL mutations, one can interact with Adyen to authorize, capture, refund, and cancel payments.
+The Adyen App can be used to process payments using the Adyen API. By using Saleor's standard GraphQL payment APIs, one can interact with Adyen to authorize, capture, refund, and cancel payments.
import AdyenScreenshot from "./adyen-web-drop-in.png";
-### Getting payment gateways
+## Getting payment gateways
-The first step is to fetch the Checkout object including [`availablePaymentGateways`](../../../api-reference/checkout/objects/checkout.mdx#checkoutavailablepaymentgatewayspaymentgateway--) field. The `availablePaymentGateways` field contains a list of payment gateways available for given checkout. The Adyen App should be one of the payment gateways available in the list. Its `id` is [`app.saleor.adyen`](https://adyen.saleor.app/api/manifest) - defined in app's manifest.
+The first step is to fetch the Checkout object including [`availablePaymentGateways`](api-reference/checkout/objects/checkout.mdx#checkoutavailablepaymentgatewayspaymentgateway--) field. The `availablePaymentGateways` field contains a list of payment gateways available for given checkout. The Adyen App should be one of the payment gateways available in the list. Its `id` is [`app.saleor.adyen`](https://adyen.saleor.app/api/manifest) - defined in app's manifest.
```graphql
query {
@@ -163,13 +43,13 @@ The response:
:::note
-`availablePaymentGateways` may contain other Payment Apps as well as [legacy Plugins](../../../developer/extending/payment-gateways.mdx) configured in the Dashboard. You should ignore the ones that you don't want to use for a specific checkout.
+`availablePaymentGateways` may contain other Payment Apps as well as [legacy Plugins](developer/extending/payment-gateways.mdx) configured in the Dashboard. You should ignore the ones that you don't want to use for a specific checkout.
:::
-### Obtaining Adyen payment methods
+## Obtaining Adyen payment methods
-Next, you need to fetch configured payment methods from Adyen. To do that, use the [`paymentGatewayInitialize`](../../../api-reference/payments/mutations/payment-gateway-initialize.mdx) mutation. The mutation returns a `PaymentGatewayInitialize` object with `data` field containing a list of payment methods. The `data` field is an object with the following fields:
+Next, you need to fetch configured payment methods from Adyen. To do that, use the [`paymentGatewayInitialize`](api-reference/payments/mutations/payment-gateway-initialize.mdx) mutation. The mutation returns a `PaymentGatewayInitialize` object with `data` field containing a list of payment methods. The `data` field is an object with the following fields:
```ts
{
@@ -180,7 +60,7 @@ Next, you need to fetch configured payment methods from Adyen. To do that, use t
}
```
-Where `PaymentMethodsResponse` is the result of calling Adyen's `/paymentMethods` endpoint and is described in the [Adyen documentation](https://docs.adyen.com/api-explorer/Checkout/latest/post/paymentMethods#responses-200). `SyncWebhookAppErrors` is [described below](#handling-errors).
+Where `PaymentMethodsResponse` is the result of calling Adyen's `/paymentMethods` endpoint and is described in the [Adyen documentation](https://docs.adyen.com/api-explorer/Checkout/latest/post/paymentMethods.mdx#responses-200). `SyncWebhookAppErrors` is [described below](#error-handling).
If `errors` field doesn't exist or is an empty array, `paymentMethodsResponse`, `clientKey` and `environment` should be used to initialize [Adyen Drop-in](https://docs.adyen.com/online-payments/web-drop-in/additional-use-cases/advanced-flow).
@@ -246,9 +126,9 @@ For instructions on how to add, remove or constraint payment methods from Adyen,
:::
-### Paying with Adyen
+## Paying with Adyen
-After a user has interacted with the Adyen Drop-in and entered payment details, [Drop-in event data along with other information](https://docs.adyen.com/online-payments/web-drop-in/additional-use-cases/advanced-flow#step-3-make-a-payment) should be passed to the [`transactionInitialize`](../../../api-reference/payments/mutations/transaction-initialize.mdx) mutation as the `paymentGateway.data` field. The mutation returns the `TransactionInitialize` object with a `data` field containing the following fields:
+After a user has interacted with the Adyen Drop-in and entered payment details, [Drop-in event data along with other information](https://docs.adyen.com/online-payments/web-drop-in/additional-use-cases/advanced-flow#step-3-make-a-payment) should be passed to the [`transactionInitialize`](api-reference/payments/mutations/transaction-initialize.mdx) mutation as the `paymentGateway.data` field. The mutation returns the `TransactionInitialize` object with a `data` field containing the following fields:
```ts
{
@@ -257,7 +137,7 @@ After a user has interacted with the Adyen Drop-in and entered payment details,
}
```
-Where `PaymentResponse` is the result of calling Adyen's `/payments` endpoint and is described in the [Adyen documentation](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#responses-200). `SyncWebhookAppErrors` is [described below](#handling-errors).
+Where `PaymentResponse` is the result of calling Adyen's `/payments` endpoint and is described in the [Adyen documentation](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#responses-200). `SyncWebhookAppErrors` is [described below](#error-handling).
If the `errors` field doesn't exist or is an empty array, pass the `paymentResponse` to Adyen Drop-in. The Drop-in will handle the response and display the result to the user or require additional actions to proceed.
@@ -357,9 +237,9 @@ Response:
}
```
-### Performing additional actions (_optional_)
+## Performing additional actions (_optional_)
-Optionally, additional actions may be required: authentication of payment with 3D Secure, scan of a QR code, or logging in to the bank to complete the payment. In this case, [`transactionProcess`](../../../api-reference/payments/mutations/transaction-process.mdx) mutation should be used.
+Optionally, additional actions may be required: authentication of payment with 3D Secure, scan of a QR code, or logging in to the bank to complete the payment. In this case, [`transactionProcess`](api-reference/payments/mutations/transaction-process.mdx) mutation should be used.
```graphql
mutation AdyenTransactionProcess($id: ID!, $data: JSON) {
@@ -391,7 +271,7 @@ Where `$data` is the object provided by Adyen Drop-in in the `onAdditionalDetail
}
```
-`PaymentDetailsResponse` is the result of calling Adyen's `/payments/details` endpoint and is described in the [Adyen documentation](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details#responses-200). `SyncWebhookAppErrors` is [described below](#handling-errors).
+`PaymentDetailsResponse` is the result of calling Adyen's `/payments/details` endpoint and is described in the [Adyen documentation](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details#responses-200). `SyncWebhookAppErrors` is [described below](#error-handling).
If the `errors` field doesn't exist or is an empty array, pass the `paymentDetailsResponse` back to Adyen Drop-in. The Drop-in will handle the response and display the result to the user or again require additional actions to proceed.
@@ -399,11 +279,11 @@ Repeat the step until the payment is successful or fails.
:::caution
-Many payment methods are not settled synchronously. Sometimes it takes seconds, minutes, hours, or even days for a payment to go through. Adyen App will automatically handle Adyen webhook notifications and create transaction events in Saleor (see [`transactionEventReport`](../../../api-reference/payments/mutations/transaction-event-report.mdx)).
+Many payment methods are not settled synchronously. Sometimes it takes seconds, minutes, hours, or even days for a payment to go through. Adyen App will automatically handle Adyen webhook notifications and create transaction events in Saleor (see [`transactionEventReport`](api-reference/payments/mutations/transaction-event-report.mdx)).
:::
-### Apple Pay `onValidateMerchant`
+## Apple Pay `onValidateMerchant`
To implement Apple Pay integration through Adyen and use your own Apple Pay certificate, you must implement `onValidateMerchant` (Web, React Native) or `onvalidatemerchant` (iOS). The Adyen Saleor App provides a way to validate the merchant using the `paymentGatewayInitialize` mutation:
@@ -445,7 +325,7 @@ and provide the following JSON in `$data`:
All the parameters should be provided according to [Apple Pay documentation on the Adyen website](https://docs.adyen.com/payment-methods/apple-pay/web-drop-in?tab=_code_payments_code__2#page-introduction).
-### Additional endpoints (optional)
+## Additional endpoints (optional)
To use some payment methods inside Adyen Drop-in you may have to implement the following callbacks:
@@ -463,7 +343,7 @@ Orders link transactions on the Adyen level. For example, if a user cancels an o
:::
-#### `onBalanceCheck`
+### `onBalanceCheck`
To call the `/paymentMethods/balance` endpoint use the `paymentGatewayInitialize` mutation:
@@ -554,7 +434,7 @@ The response received from Saleor with data from the Adyen app will be:
}
```
-#### `onOrderRequest`
+### `onOrderRequest`
Similarly to `onBalanceCheck`, to call the `/orders` endpoint use the `paymentGatewayInitialize` mutation and pass the following `$data`:
@@ -624,7 +504,7 @@ Adyen app uses a `pspReference` field internally to link the notifications from
This field shouldn't be used by any external system, as it can change at any time without further notice.
:::
-#### `onOrderCancel`
+### `onOrderCancel`
Should be called when the user removes a payment method in a pending Adyen order, for example when there was already a partial charge for a gift card but the user decided to use a different payment method.
@@ -679,7 +559,7 @@ async onOrderCancel({order}) {
}
```
-### Handling errors
+## Error handling
The three mutations described above may return `data.errors` field. The existence of this field determines that the request was unsuccessful. `errors` is an array of `SyncWebhookAppError` objects. The `SyncWebhookAppError` object has the following fields:
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/avatax/architecture.mdx b/versioned_docs/version-3.x/developer/app-store/apps/avatax/architecture.mdx
index 2add6d74c..0e3df69a8 100644
--- a/versioned_docs/version-3.x/developer/app-store/apps/avatax/architecture.mdx
+++ b/versioned_docs/version-3.x/developer/app-store/apps/avatax/architecture.mdx
@@ -1,4 +1,5 @@
---
+sidebar_position: 2
title: Architecture
---
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/avatax/configuration.mdx b/versioned_docs/version-3.x/developer/app-store/apps/avatax/configuration.mdx
index 3b4c65617..2082644d6 100644
--- a/versioned_docs/version-3.x/developer/app-store/apps/avatax/configuration.mdx
+++ b/versioned_docs/version-3.x/developer/app-store/apps/avatax/configuration.mdx
@@ -1,4 +1,5 @@
---
+sidebar_position: 3
title: Configuration
---
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/avatax/development.mdx b/versioned_docs/version-3.x/developer/app-store/apps/avatax/development.mdx
index b714a9fc9..44b01fbdf 100644
--- a/versioned_docs/version-3.x/developer/app-store/apps/avatax/development.mdx
+++ b/versioned_docs/version-3.x/developer/app-store/apps/avatax/development.mdx
@@ -1,4 +1,7 @@
-# Development
+---
+sidebar_position: 5
+title: Development
+---
To run the AvaTax App locally:
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/avatax/overview.mdx b/versioned_docs/version-3.x/developer/app-store/apps/avatax/overview.mdx
index 6fcf7d908..a1f90c0a9 100644
--- a/versioned_docs/version-3.x/developer/app-store/apps/avatax/overview.mdx
+++ b/versioned_docs/version-3.x/developer/app-store/apps/avatax/overview.mdx
@@ -1,6 +1,7 @@
---
-title: Overview
-sidebar_position: 2
+sidebar_label: Overview
+sidebar_position: 1
+title: AvaTax
---
import { AppMetadata } from "/components/AppMetadata/AppMetadata.tsx";
@@ -10,17 +11,17 @@ import { AppMetadata } from "/components/AppMetadata/AppMetadata.tsx";
githubUrl="https://github.com/saleor/apps/tree/main/apps/avatax"
/>
-_AvaTax_ is a Saleor app that allows delegating tax calculations to [Avatax](https://www.avalara.com/us/en/products/calculations.html). It can replace the default ([flat rates](developer/taxes.mdx#flat-rates)) tax calculation method in Saleor. It affects both the checkout and the order creation process.
+_AvaTax_ is a Saleor app that allows delegating tax calculations to [Avalara AvaTax](https://www.avalara.com/us/en/products/calculations.html).It can replace the default ([flat rates](developer/taxes.mdx#flat-rates)) tax calculation method in Saleor. It affects both the checkout and the order creation process.
-Avalara AvaTax is a cloud-based solution automating transaction tax calculations and the tax filing process. Avalara
+Avalara AvaTax is a cloud-based solution automating transaction tax calculations and the tax filing process. Avalara
provides real-time tax calculation using tax content from more than 12,000 US taxing jurisdictions and over 200
countries, insuring your transaction tax is calculated based on the most current tax rules.
## Features
-AvaTax App offers:
+The AvaTax App offers:
-- Integrations with AvaTax
+- Integrations with Avalara AvaTax
- Calculating taxes for order and checkout
- Creating multiple configurations and connecting them to channels individually.
- [Mapping tax codes from your tax provider to Saleor tax classes](./tax-codes)
@@ -34,7 +35,7 @@ AvaTax App offers:
## Architecture
-If you want to explore how the AvaTax App works, you can read the [Avatax App architecture](./architecture) article.
+If you want to explore how the AvaTax App works, you can read the [AvaTax App architecture](./architecture) article.
## Configuration
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/avatax/tax-codes.mdx b/versioned_docs/version-3.x/developer/app-store/apps/avatax/tax-codes.mdx
index c1af620d0..53047c8a0 100644
--- a/versioned_docs/version-3.x/developer/app-store/apps/avatax/tax-codes.mdx
+++ b/versioned_docs/version-3.x/developer/app-store/apps/avatax/tax-codes.mdx
@@ -1,4 +1,7 @@
-# Mapping Tax Codes
+---
+sidebar_position: 4
+title: Tax Code Mapping
+---
AvaTax App offers a solution for mapping the provider tax codes to Saleor tax classes. This assures the products are taxed based on their individual tax rates, not a general one.
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/emails-and-messages/overview.mdx b/versioned_docs/version-3.x/developer/app-store/apps/emails-and-messages/overview.mdx
index c131ae3ee..d2aa9e9a1 100644
--- a/versioned_docs/version-3.x/developer/app-store/apps/emails-and-messages/overview.mdx
+++ b/versioned_docs/version-3.x/developer/app-store/apps/emails-and-messages/overview.mdx
@@ -1,6 +1,7 @@
---
-title: Overview
+sidebar_label: Overview
sidebar_position: 1
+title: Emails and Messages
---
import { AppMetadata } from "/components/AppMetadata/AppMetadata.tsx";
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/emails-and-messages/sendgrid.mdx b/versioned_docs/version-3.x/developer/app-store/apps/emails-and-messages/sendgrid.mdx
index 890afac52..451a8b122 100644
--- a/versioned_docs/version-3.x/developer/app-store/apps/emails-and-messages/sendgrid.mdx
+++ b/versioned_docs/version-3.x/developer/app-store/apps/emails-and-messages/sendgrid.mdx
@@ -1,10 +1,8 @@
---
+sidebar_position: 3
title: Sendgrid Provider
-sidebar_position: 2
---
-# Sendgrid provider
-
:::info
Using this provider requires a Sendgrid account. You can create one [here](https://signup.sendgrid.com/).
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/emails-and-messages/smtp.mdx b/versioned_docs/version-3.x/developer/app-store/apps/emails-and-messages/smtp.mdx
index a73b010cf..392e50a39 100644
--- a/versioned_docs/version-3.x/developer/app-store/apps/emails-and-messages/smtp.mdx
+++ b/versioned_docs/version-3.x/developer/app-store/apps/emails-and-messages/smtp.mdx
@@ -1,10 +1,8 @@
---
+sidebar_position: 2
title: SMTP Provider
-sidebar_position: 3
---
-# SMTP provider
-
To use this provider, you will need SMTP server credentials. Email templates are created using [MJML](https://mjml.io/) language and can be edited in the app dashboard. Dynamic parts of the email (for example the number of the order) can be added using [Handlebars](https://handlebarsjs.com/).
## Before you start - server credentials
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/emails-and-messages/troubleshooting.mdx b/versioned_docs/version-3.x/developer/app-store/apps/emails-and-messages/troubleshooting.mdx
index 0e5fcf219..2fc7424f9 100644
--- a/versioned_docs/version-3.x/developer/app-store/apps/emails-and-messages/troubleshooting.mdx
+++ b/versioned_docs/version-3.x/developer/app-store/apps/emails-and-messages/troubleshooting.mdx
@@ -1,10 +1,8 @@
---
-title: Troubleshooting
sidebar_position: 4
+title: Troubleshooting
---
-# Troubleshooting
-
By following the troubleshooting guidelines outlined here, you'll be able to troubleshoot and resolve common email-related issues, ensuring that your emails reach the intended recipients' inboxes.
If you encounter a problem that is not covered here or need further assistance, we recommend reaching out to [the GitHub Issues](https://github.com/saleor/apps/issues) page.
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/overview.mdx b/versioned_docs/version-3.x/developer/app-store/apps/overview.mdx
index 7b2e8f086..51347029c 100644
--- a/versioned_docs/version-3.x/developer/app-store/apps/overview.mdx
+++ b/versioned_docs/version-3.x/developer/app-store/apps/overview.mdx
@@ -1,12 +1,11 @@
---
-title: Overview
+title: Apps
+sidebar_label: Overview
sidebar_position: 1
---
import CardGrid from "@site/components/CardGrid";
-# Apps
-
:::tip
Do you want to build your own app? Visit our [App Quickstart Guide](developer/extending/apps/quickstart.mdx).
@@ -19,29 +18,29 @@ Saleor App Store contains the following apps:
-[**Adyen** Simplify your payment process and offer a seamless online shopping experience with Adyen.](adyen)
+[**Adyen** Simplify your payment process and offer a seamless online shopping experience with Adyen.](developer/app-store/apps/adyen/overview.mdx)
-[**CRM** Synchronize customers with CRM platforms.](crm)
+[**CRM** Synchronize customers with CRM platforms.](developer/app-store/apps/crm.mdx)
-[**CMS** Synchronize products with CMS platforms.](cms)
+[**CMS** Synchronize products with CMS platforms.](developer/app-store/apps/cms.mdx)
[**Data importer** Import data from CSV to Saleor.](https://github.com/saleor/apps/tree/main/apps/data-importer)
-[**Emails and messages** Notifications and email communication with customers.](emails-and-messages/overview)
+[**Emails and messages** Notifications and email communication with customers.](developer/app-store/apps/emails-and-messages/overview.mdx)
-[**Invoices** Generate invoice PDF for each order.](invoices)
+[**Invoices** Generate invoice PDF for each order.](developer/app-store/apps/invoices.mdx)
[**Klaviyo** Send Saleor events to Klaviyo, where you can notify the customers.](https://github.com/saleor/apps/tree/main/apps/klaviyo)
-[**Product feed** Generate feed for Google Merchant.](product-feed)
+[**Product feed** Generate feed for Google Merchant.](developer/app-store/apps/product-feed.mdx)
-[**Twilio Segment** Send Saleor order events to Twilio Segment.](segment)
+[**Twilio Segment** Send Saleor order events to Twilio Segment.](developer/app-store/apps/segment.mdx)
-[**Search** Connect Saleor with Algolia search engine.](search)
+[**Search** Connect Saleor with Algolia search engine.](developer/app-store/apps/search.mdx)
[**Slack** Get notifications on Slack channel from Saleor events.](https://github.com/saleor/apps/tree/main/apps/slack)
-[**AvaTax** Calculate order and checkout taxes using external services.](avatax/overview)
+[**AvaTax** Calculate order and checkout taxes using external services.](developer/app-store/apps/avatax/overview.mdx)
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/smtp/configuration.mdx b/versioned_docs/version-3.x/developer/app-store/apps/smtp/configuration.mdx
index e87f39309..62bf81be7 100644
--- a/versioned_docs/version-3.x/developer/app-store/apps/smtp/configuration.mdx
+++ b/versioned_docs/version-3.x/developer/app-store/apps/smtp/configuration.mdx
@@ -1,10 +1,8 @@
---
-title: SMTP setup
sidebar_position: 2
+title: SMTP setup
---
-# SMTP setup
-
You will need SMTP server credentials. Email templates are created using [MJML](https://mjml.io/) language and can be edited in the app dashboard.
Dynamic parts of the email (for example the number of the order) can be added using [Handlebars](https://handlebarsjs.com/).
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/smtp/overview.mdx b/versioned_docs/version-3.x/developer/app-store/apps/smtp/overview.mdx
index 47a52e27f..346011e68 100644
--- a/versioned_docs/version-3.x/developer/app-store/apps/smtp/overview.mdx
+++ b/versioned_docs/version-3.x/developer/app-store/apps/smtp/overview.mdx
@@ -1,6 +1,7 @@
---
-title: Overview
+sidebar_label: Overview
sidebar_position: 1
+title: SMTP
---
import { AppMetadata } from "/components/AppMetadata/AppMetadata.tsx";
diff --git a/versioned_docs/version-3.x/developer/app-store/apps/smtp/troubleshooting.mdx b/versioned_docs/version-3.x/developer/app-store/apps/smtp/troubleshooting.mdx
index 38777865e..babc1fad6 100644
--- a/versioned_docs/version-3.x/developer/app-store/apps/smtp/troubleshooting.mdx
+++ b/versioned_docs/version-3.x/developer/app-store/apps/smtp/troubleshooting.mdx
@@ -1,10 +1,8 @@
---
-title: Troubleshooting
sidebar_position: 3
+title: Troubleshooting
---
-# Troubleshooting
-
By following the troubleshooting guidelines outlined here, you'll be able to troubleshoot and resolve common email-related issues, ensuring that your emails reach the intended recipients' inboxes.
If you encounter a problem that is not covered here or need further assistance, we recommend reaching out to [the GitHub Issues](https://github.com/saleor/apps/issues) page.
diff --git a/versioned_docs/version-3.x/developer/app-store/legacy-plugins/adyen.mdx b/versioned_docs/version-3.x/developer/app-store/legacy-plugins/adyen.mdx
index c69a1e383..4dfce317b 100644
--- a/versioned_docs/version-3.x/developer/app-store/legacy-plugins/adyen.mdx
+++ b/versioned_docs/version-3.x/developer/app-store/legacy-plugins/adyen.mdx
@@ -9,7 +9,7 @@ title: Adyen
:::warning
This plugin is deprecated!
-If you plan on building a new integration with Saleor, we recommend using the [Adyen](../apps/adyen) app instead.
+If you plan on building a new integration with Saleor, we recommend using the [Adyen](developer/app-store/apps/adyen/overview.mdx) app instead.
:::
# Adyen
diff --git a/versioned_docs/version-3.x/developer/app-store/overview.mdx b/versioned_docs/version-3.x/developer/app-store/overview.mdx
index ea820ad83..417525498 100644
--- a/versioned_docs/version-3.x/developer/app-store/overview.mdx
+++ b/versioned_docs/version-3.x/developer/app-store/overview.mdx
@@ -1,5 +1,5 @@
---
-title: Overview
+title: Saleor App Store
---
:::info
diff --git a/versioned_docs/version-3.x/developer/channels/api.mdx b/versioned_docs/version-3.x/developer/channels/api.mdx
index d0d67b20d..6f6beab68 100644
--- a/versioned_docs/version-3.x/developer/channels/api.mdx
+++ b/versioned_docs/version-3.x/developer/channels/api.mdx
@@ -1,5 +1,5 @@
---
-title: Channels API guide
+title: Channel API guide
sidebar_label: API guide
description: Learn how to manage channels using Saleor API. Create, update, and delete channels, reorder warehouses, and get channel details.
---
diff --git a/versioned_docs/version-3.x/developer/channels/configuration.mdx b/versioned_docs/version-3.x/developer/channels/configuration.mdx
index b6e64ea8f..420d840dd 100644
--- a/versioned_docs/version-3.x/developer/channels/configuration.mdx
+++ b/versioned_docs/version-3.x/developer/channels/configuration.mdx
@@ -1,10 +1,10 @@
---
-title: Channels configuration guide
+title: Channel Configuration
sidebar_label: Configuration
description: Channels configuration guide. Learn how to create a channel, assign it to shipping zones and warehouses, set prices and availability.
---
-### Steps to create a channel
+## Steps to create a channel
1. Create a new channel in configuration.
2. Assign it to shipping zones to make shipping rates available.
@@ -12,7 +12,7 @@ description: Channels configuration guide. Learn how to create a channel, assign
4. Add price to product variants in the newly created channel and set availability.
5. Make channel active.
-### Settings
+## Settings
[//]: # "(todo add more details on what default country affects)"
diff --git a/versioned_docs/version-3.x/developer/channels/lifecycle.mdx b/versioned_docs/version-3.x/developer/channels/lifecycle.mdx
index dace8b1f1..20c2aff99 100644
--- a/versioned_docs/version-3.x/developer/channels/lifecycle.mdx
+++ b/versioned_docs/version-3.x/developer/channels/lifecycle.mdx
@@ -1,11 +1,10 @@
---
-title: Channels lifecycle
+title: Channel Lifecycle
sidebar_label: Lifecycle
-description: Channels lifecycle. Learn how to create, activate, deactivate, and remove channels.
+sidebar_position: 2
+description: Channel lifecycle. Learn how to create, activate, deactivate, and remove channels.
---
-### Channels lifecycle
-
Your store will have a default channel that can be deleted, but at least one channel is always required.
Channels have single currency and can not be changed after creation.
diff --git a/versioned_docs/version-3.x/developer/channels/overview.mdx b/versioned_docs/version-3.x/developer/channels/overview.mdx
index 77cebe1aa..125de3a6f 100644
--- a/versioned_docs/version-3.x/developer/channels/overview.mdx
+++ b/versioned_docs/version-3.x/developer/channels/overview.mdx
@@ -1,5 +1,5 @@
---
-title: Channels overview
+title: Channels
sidebar_label: Overview
description: Learn how to use channels to model your commerce data across different regions, markets, brands, and business models.
---
diff --git a/versioned_docs/version-3.x/developer/checkout/overview.mdx b/versioned_docs/version-3.x/developer/checkout/overview.mdx
index 6d813b5d1..d9492ef94 100644
--- a/versioned_docs/version-3.x/developer/checkout/overview.mdx
+++ b/versioned_docs/version-3.x/developer/checkout/overview.mdx
@@ -1,5 +1,6 @@
---
-title: Overview
+sidebar_label: Overview
+title: Checkout and Orders
---
## Introduction
@@ -18,7 +19,7 @@ Checkout provides the interface for standard cart operations like adding product
- **Checkout**: Object that groups all the data needed for the checkout process and creating an order.
- **Checkout Line**: Items added to the checkout with quantity data. Each added variant has a separate line.
- **Checkout Completion**: During this step, payments may be processed and stocks may be reserved. If requirements are met, the order is created.
-- **Payment Gateway**: Payment App or legacy plugin. e.g., [Adyen](developer/app-store/apps/adyen.mdx).
+- **Payment Gateway**: Payment App or legacy plugin. e.g., [Adyen](developer/app-store/apps/adyen/overview.mdx).
- **Transaction**: Object containing status and additional data about payment.
- **Shipping Methods**: The way orders will be sent. E.g., DHL courier, postal service.
- **Collection Points**: Places where orders can be self-picked.
diff --git a/versioned_docs/version-3.x/developer/discounts/overview.mdx b/versioned_docs/version-3.x/developer/discounts/overview.mdx
index dfdc30c35..5c05decab 100644
--- a/versioned_docs/version-3.x/developer/discounts/overview.mdx
+++ b/versioned_docs/version-3.x/developer/discounts/overview.mdx
@@ -1,5 +1,5 @@
---
-title: Overview
+title: Discounts
sidebar_label: Overview
---
diff --git a/versioned_docs/version-3.x/developer/export/export-overview.mdx b/versioned_docs/version-3.x/developer/export/export-overview.mdx
index 80bddd931..b43a8160f 100644
--- a/versioned_docs/version-3.x/developer/export/export-overview.mdx
+++ b/versioned_docs/version-3.x/developer/export/export-overview.mdx
@@ -1,4 +1,5 @@
---
+sidebar_position: 1
title: Exporting Data
---
diff --git a/versioned_docs/version-3.x/developer/index.mdx b/versioned_docs/version-3.x/developer/index.mdx
new file mode 100644
index 000000000..de3f401c0
--- /dev/null
+++ b/versioned_docs/version-3.x/developer/index.mdx
@@ -0,0 +1,3 @@
+---
+title: Core Concepts
+---
diff --git a/versioned_docs/version-3.x/developer/payments.mdx b/versioned_docs/version-3.x/developer/payments.mdx
index 61bec7da4..906e98f9a 100644
--- a/versioned_docs/version-3.x/developer/payments.mdx
+++ b/versioned_docs/version-3.x/developer/payments.mdx
@@ -852,6 +852,211 @@ sequenceDiagram
Saleor -->>- App: Updated transaction
```
+### Processing refunds for Order
+
+There are two ways to process refunds:
+
+- Manual refund: This method involves directly refunding the payment through the payment app.
+- Refund based on `OrderGrantedRefund`: This method triggers the refund request based on the details stored in `OrderGrantedRefund`.
+
+#### Manual refund
+
+The manual refund can be triggered by calling `transactionRequestAction`. If the refund is successful, the `transaction.chargedAmount` will be reduced. The order's `authorizeStatus`, `chargeStatus`, and `totalBalance` will also be recalculated based on the new values of `chargedAmount` and `refundedAmount`. This method is useful when handling overcharged orders.
+
+The below example shows how to trigger the manual refund:
+
+```graphql {3-5}
+mutation {
+ transactionRequestAction(
+ id: "VHJhbnNhY3Rpb25JdGVtOjljY2NkYTYyLTllMjktNGE0OC05NzIyLWRlYzAwOTRmZmY5Yg=="
+ actionType: REFUND
+ amount: "10"
+ ) {
+ transaction {
+ events {
+ id
+ message
+ pspReference
+ amount {
+ amount
+ }
+ type
+ }
+ }
+ }
+}
+```
+
+The mutation accepts below arguments:
+
+- `id` - ID of the transaction which will be used to trigger the refund action.
+- `actionType` - The type of action to be performed on the requested `TransactionItem`. For a refund action, use `REFUND`.
+- `amount` - The amount of the action. If not provided Saleor will use `TransactionItem.chargedAmount`.
+
+#### Refund based on OrderGrantedRefund
+
+When processing a refund based on `OrderGrantedRefund`, there are two steps involved. Firstly, an order must be granted a refund, which defines what should be refunded. This step requires the `MANAGE_ORDERS` permission. Secondly, a refund needs to be requested based on the created `OrderGrantedRefund`. This step requires the `HANDLE_PAYMENTS` permission.
+
+A granted refund contains all the details related to the refund, such as the list of refunded lines, the amount, and the included shipping costs. This is useful when handling refunds based on the products returned by the customer.
+
+The current status of the `OrderGrantedRefund` is represented by the `status` field. The possible statuses are:
+
+- `NONE`: No refund request has been triggered for the granted refund.
+- `PENDING`: The refund request has been triggered, but the payment app has not provided the final result.
+- `SUCCESS`: The refund has been successfully processed.
+- `FAILURE`: The last refund request failed.
+
+The `status` is calculated based on the latest refund `TransactionEvent`s assigned to the `OrderGrantedRefund`. The events can be accessed via the `OrderGrantedRefund.transactionEvents` field. The assigned `TransactionItem` can be accessed via the `OrderGrantedRefund.transaction` field.
+
+The `OrderGrantedRefund` has an impact on the `authorizeStatus`, `chargeStatus`, and `totalBalance`, as it reduces the total value used to calculate the `totalBalance`.
+
+For example:
+
+- if an order has a total of 100 USD and a single `TransactionItem` with a `chargedAmount` of 100 USD, the `totalBalance` would be 0, as `chargedAmount` - `order.total` results in 0(1).
+- Adding a granted refund with an amount of 10 USD would result in a `totalBalance` of 10, as `chargedAmount` - (`order.total` - `grantedRefund.amount`) gives 10. The `chargeStatus` will be `OVERCHARGED`(2).
+- If a refund request is made based on the defined granted refund and is successfully processed by the payment app, it will reduce the `chargedAmount`. The `totalBalance` will be 0, as `chargedAmount` (90USD) - (`order.total` - `grantedRefund.amount`) gives 0. The `chargeStatus` will be changed to `FULL`(3).
+
+| Step Nr | total | totalBalance | authorizeStatus | chargeStatus | tr.chargedAmount | orderGrantedRefund.amount |
+| ------- | ----- | ------------ | --------------- | ------------ | ---------------- | ------------------------- |
+| 1 | 100 | 0 | FULL | FULL | 100 | 0 |
+| 2 | 100 | 10 | FULL | OVERCHARGED | 100 | 10 |
+| 3 | 100 | 0 | FULL | FULL | 90 | 10 |
+
+The following example shows how to create the granted refund with the assigned `TransactionItem` for the order.
+
+```graphql {3-19}
+mutation {
+ orderGrantRefundCreate(
+ id: "T3JkZXI6NWZlOTE5NzItYjg3OC00Y2QyLTkyN2UtZTQwZDJjZDRjMmEz"
+ input: {
+ transactionId: "VHJhbnNhY3Rpb25JdGVtOmUzOTVjNzdmLWFmNjQtNDRmZC05NmRiLThkZmNkMDYwNmZmOA=="
+ lines: [
+ {
+ id: "T3JkZXJMaW5lOjdlNzg5NzY0LTUyZWMtNDU3Mi05NWNkLTM5ZjQ0OTJmZDk4ZA=="
+ quantity: 5
+ reason: "Line reason"
+ }
+ {
+ id: "T3JkZXJMaW5lOjdlNzg5NzY0LTUyZWMtNDU3Mi05NWNkLTM5ZjQ0OTJmZDk4Z1=="
+ quantity: 5
+ }
+ ]
+ grantRefundForShipping: true
+ amount: 10
+ reason: "Returned by customer"
+ }
+ ) {
+ grantedRefund {
+ id
+ }
+ order {
+ id
+ }
+ errors {
+ field
+ code
+ message
+ lines {
+ lineId
+ field
+ message
+ code
+ }
+ }
+ }
+}
+```
+
+The mutation accepts below arguments:
+
+- `id` - ID of the `Order` to which granted refund should be assigned.
+- `input`:
+ - `lines` - List of lines related to the planned refund action:
+ - `id` - ID of the `OrderLine`.
+ - `quantity` - The quantity of the specific lines planned to refund.
+ - `reason` - Reason of the refund related to the specific line.
+ - `grantRefundForShipping` - Determines if the shipping costs will be also included in the refund.
+ - `amount` - Amount of the granted refund. If not provided, the amount will be calculated automatically based on provided `lines` and `grantRefundForShipping`.
+ - `transactionId` - ID of `TransactionItem` that will be used to process the refund. If `amount` is provided in the input, the `transaction.chargedAmount` needs to be equal to or greater than the provided `amount`. If `amount` is not provided in the input and calculated automatically by Saleor, the `min(calculatedAmount, transaction.chargedAmount)` will be used. This field was added in Saleor 3.20, and it will be a mandatory input field starting from Saleor 3.21.
+
+The below example shows how to update the existing granted refund
+
+```graphql {3-15}
+mutation {
+ orderGrantRefundUpdate(
+ id: "T3JkZXJHcmFudGVkUmVmdW5kOjE="
+ input: {
+ addLines: [
+ {
+ id: "T3JkZXJMaW5lOjgzYmZmZWI3LTVkNjEtNDMzZS1iOGFkLTFhMTE1NWI2ZTgwNg=="
+ quantity: 3
+ }
+ ]
+ removeLines: []
+ transactionId: "VHJhbnNhY3Rpb25JdGVtOmUzOTVjNzdmLWFmNjQtNDRmZC05NmRiLThkZmNkMDYwNmZmOA=="
+ amount: 10
+ grantRefundForShipping: false
+ reason: "New reason"
+ }
+ ) {
+ grantedRefund {
+ id
+ }
+ errors {
+ addLines {
+ field
+ message
+ code
+ lineId
+ }
+ field
+ code
+ }
+ }
+}
+```
+
+The mutation accepts below arguments:
+
+- `id` - ID of the `OrderGrantedRefund` which should be updated
+- `input`:
+ - `addLines`: Lines that should be added to `OrderGrantedRefund`
+ - `id` - ID of the `OrderLine`.
+ - `quantity` - The quantity of the specific lines planned to refund.
+ - `reason` - Reason for the planned refund related to the specific line.
+ - `removeLines` - List of `OrderGrantedRefundLine`'s IDs that should be removed from `OrderGrantedRefund`.
+ - `grantRefundForShipping` - Determines if the shipping costs will be also included in the refund.
+ - `amount` - Amount of the granted refund. If not provided, the amount will be calculated automatically based on provided `lines` and `grantRefundForShipping`.
+ - `transactionId` - ID of `TransactionItem` that will be used to process the refund. If `amount` is provided in the input, the `transaction.chargedAmount` needs to be equal to or greater than the provided `amount`. If `amount` is not provided in the input and calculated automatically by Saleor, the `min(calculatedAmount, transaction.chargedAmount)` will be used. This field was added in Saleor 3.20, and it will be a mandatory input field starting from Saleor 3.21.
+
+:::info
+
+When `OrderGrantedRefund.status` is `SUCCESS` or `PENDING`, only `reason` can be updated.
+
+:::
+
+Below example shows how to trigger the refund based on `OrderGrantedRefund`:
+
+```graphql {2}
+mutation {
+ transactionRequestRefundForGrantedRefund(
+ grantedRefundId: "T3JkZXJHcmFudGVkUmVmdW5kOjE="
+ ) {
+ transaction {
+ id
+ }
+ errors {
+ field
+ message
+ code
+ }
+ }
+}
+```
+
+To request a refund, you need to provide the `grantedRefundId` field. The mandatory refund details are stored as `OrderGrantedRefund`, so the refund request will be created based on this data.
+The `OrderGrantedRefund.status` field will be updated based on the result of the refund action. The `TransactionEvent`s related to the requested action will be accessible via `OrderGrantedRefund.transactionEvents` field.
+
## Recalculations of transaction amounts
The recalculation will differ based on the value of the [`TransactionEventTypeEnum`](../api-reference/payments/enums/transaction-event-type-enum) provided as the field `type`
diff --git a/docs/api-reference/channels/saleor-channels-data-model.png b/versioned_docs/version-3.x/developer/saleor-channels-data-model.png
similarity index 100%
rename from docs/api-reference/channels/saleor-channels-data-model.png
rename to versioned_docs/version-3.x/developer/saleor-channels-data-model.png
diff --git a/versioned_docs/version-3.x/index.mdx b/versioned_docs/version-3.x/index.mdx
index 4f0f1a786..5a1e179e0 100644
--- a/versioned_docs/version-3.x/index.mdx
+++ b/versioned_docs/version-3.x/index.mdx
@@ -1,7 +1,6 @@
---
title: Saleor Documentation
slug: /
-disableComments: true
---
import CardGrid from "@site/components/CardGrid";
diff --git a/versioned_sidebars/version-3.x-sidebars.json b/versioned_sidebars/version-3.x-sidebars.json
index 70821282f..252d0d12a 100644
--- a/versioned_sidebars/version-3.x-sidebars.json
+++ b/versioned_sidebars/version-3.x-sidebars.json
@@ -1,87 +1,35 @@
{
"main": [
+ "index",
{
- "Overview": [
+ "type": "category",
+ "label": "About Saleor",
+ "collapsible": false,
+ "items": [
"overview/introduction",
- {
- "type": "category",
- "label": "Why Saleor",
- "items": [
- "overview/why-saleor/headless",
- "overview/why-saleor/composable",
- "overview/why-saleor/extensibility",
- "overview/why-saleor/open-source",
- "overview/why-saleor/graphql",
- "overview/why-saleor/saas-self-host",
- "overview/why-saleor/scalable",
- "overview/why-saleor/multi-market"
- ]
- },
"overview/architecture",
+ "cloud",
"overview/quickstart"
]
},
{
- "Guides": [
- {
- "type": "category",
- "label": "Channels",
- "items": [
- "developer/channels/overview",
- "developer/channels/configuration",
- "developer/channels/lifecycle",
- "developer/channels/troubleshooting",
- "developer/channels/api"
- ]
- },
- "developer/products",
- "developer/attributes",
- {
- "type": "category",
- "label": "Checkout and Orders",
- "items": [
- "developer/checkout/overview",
- "developer/checkout/lines",
- "developer/checkout/stock",
- "developer/checkout/address",
- "developer/checkout/problems",
- "developer/checkout/finalizing",
- "developer/checkout/order-to-checkout",
- "developer/order-status"
- ]
- },
- "developer/payments",
- "developer/stock-allocation",
- {
- "type": "category",
- "label": "Discounts",
- "items": [
- "developer/discounts/overview",
- "developer/discounts/promotions",
- "developer/discounts/vouchers",
- "developer/discounts/sales"
- ]
- },
- "developer/gift-cards",
- "developer/address",
- "developer/users",
- "developer/permissions",
- "developer/taxes",
- "developer/thumbnails",
- {
- "type": "category",
- "label": "Data Imports",
- "items": [
- "developer/bulks/error-policy",
- "developer/bulks/bulk-attributes",
- "developer/bulks/bulk-orders"
- ]
- }
+ "type": "category",
+ "label": "Why Saleor",
+ "items": [
+ "overview/why-saleor/headless",
+ "overview/why-saleor/composable",
+ "overview/why-saleor/extensibility",
+ "overview/why-saleor/open-source",
+ "overview/why-saleor/graphql",
+ "overview/why-saleor/saas-self-host",
+ "overview/why-saleor/scalable",
+ "overview/why-saleor/multi-market"
]
},
+ { "type": "html", "value": "
" },
{
"type": "category",
- "label": "API Usage",
+ "label": "GraphQL",
"items": [
{
"type": "autogenerated",
@@ -89,10 +37,14 @@
}
]
},
+ { "type": "ref", "id": "developer/index" },
+ { "type": "ref", "id": "developer/app-store/overview" },
+ { "type": "ref", "id": "api-reference/api-reference" },
+ { "type": "html", "value": "
" },
{
"type": "category",
"label": "Saleor Cloud",
- "items": ["cloud", "restricting-api-access"]
+ "items": ["restricting-api-access"]
},
{
"type": "category",
@@ -111,80 +63,6 @@
}
]
},
- {
- "type": "category",
- "label": "Exporting Data",
- "items": [
- "developer/export/export-overview",
- "developer/export/export-products",
- "developer/export/export-gift-cards",
- "developer/export/export-voucher-codes"
- ]
- },
- {
- "type": "category",
- "label": "Saleor App Store",
- "items": [
- "developer/app-store/overview",
- {
- "type": "category",
- "label": "Apps",
- "items": [
- "developer/app-store/apps/overview",
- {
- "type": "category",
- "label": "AvaTax",
- "items": [
- "developer/app-store/apps/avatax/overview",
- "developer/app-store/apps/avatax/architecture",
- "developer/app-store/apps/avatax/configuration",
- "developer/app-store/apps/avatax/tax-codes",
- "developer/app-store/apps/avatax/development"
- ]
- },
- "developer/app-store/apps/crm",
- "developer/app-store/apps/adyen",
- "developer/app-store/apps/invoices",
- "developer/app-store/apps/cms",
- "developer/app-store/apps/product-feed",
- "developer/app-store/apps/segment",
- "developer/app-store/apps/search",
- {
- "type": "category",
- "label": "Emails and Messages",
- "items": [
- "developer/app-store/apps/emails-and-messages/overview",
- "developer/app-store/apps/emails-and-messages/sendgrid",
- "developer/app-store/apps/emails-and-messages/smtp",
- "developer/app-store/apps/emails-and-messages/troubleshooting"
- ]
- },
- {
- "type": "category",
- "label": "SMTP",
- "items": [
- "developer/app-store/apps/smtp/overview",
- "developer/app-store/apps/smtp/configuration",
- "developer/app-store/apps/smtp/troubleshooting"
- ]
- }
- ]
- },
- {
- "type": "category",
- "label": "Legacy Plugins",
- "items": [
- "developer/app-store/legacy-plugins/admin-emails",
- "developer/app-store/legacy-plugins/adyen",
- "developer/app-store/legacy-plugins/dummy-credit-card",
- "developer/app-store/legacy-plugins/stripe",
- "developer/app-store/legacy-plugins/oidc",
- "developer/app-store/legacy-plugins/np-atobarai",
- "developer/app-store/legacy-plugins/user-emails"
- ]
- }
- ]
- },
{
"type": "category",
"label": "Extending Saleor",
@@ -322,17 +200,10 @@
"label": "Upgrade Guides",
"items": [
"setup/upgrading",
- "upgrade-guides/2-11-to-3-0",
- "upgrade-guides/3-0-to-3-1",
- "upgrade-guides/3-1-to-3-2",
- "upgrade-guides/3-5-to-3-6",
- "upgrade-guides/3-11-to-3-12",
- "upgrade-guides/3-12-to-3-13",
- "upgrade-guides/3-13-to-3-14",
- "upgrade-guides/3-16-to-3-17",
- "upgrade-guides/3-17-to-3-18",
- "upgrade-guides/3-18-to-3-19",
- "upgrade-guides/notify-user-deprecation"
+ {
+ "type": "autogenerated",
+ "dirName": "upgrade-guides"
+ }
]
}
]
@@ -348,6 +219,155 @@
]
}
],
+ "concepts": [
+ "developer/index",
+ { "type": "html", "value": "
" },
+ {
+ "type": "category",
+ "label": "Channels",
+ "collapsible": false,
+ "items": [
+ "developer/channels/overview",
+ "developer/channels/configuration",
+ "developer/channels/lifecycle",
+ "developer/channels/troubleshooting",
+ "developer/channels/api"
+ ]
+ },
+ "developer/products",
+ "developer/attributes",
+ {
+ "type": "category",
+ "label": "Checkout and Orders",
+ "collapsible": false,
+ "items": [
+ "developer/checkout/overview",
+ "developer/checkout/lines",
+ "developer/checkout/stock",
+ "developer/checkout/address",
+ "developer/checkout/problems",
+ "developer/checkout/finalizing",
+ "developer/checkout/order-to-checkout",
+ "developer/order-status"
+ ]
+ },
+ "developer/payments",
+ "developer/stock-allocation",
+ {
+ "type": "category",
+ "label": "Discounts",
+ "collapsible": false,
+ "items": [
+ "developer/discounts/overview",
+ "developer/discounts/promotions",
+ "developer/discounts/vouchers",
+ "developer/discounts/sales"
+ ]
+ },
+ "developer/gift-cards",
+ "developer/address",
+ "developer/users",
+ "developer/permissions",
+ "developer/taxes",
+ "developer/thumbnails",
+ {
+ "type": "category",
+ "label": "Importing and Exporting Data",
+ "collapsible": false,
+ "items": [
+ {
+ "type": "category",
+ "label": "Importing Data",
+ "collapsible": false,
+ "items": [
+ {
+ "type": "autogenerated",
+ "dirName": "developer/bulks"
+ }
+ ]
+ },
+ {
+ "type": "category",
+ "label": "Exporting Data",
+ "collapsible": false,
+ "items": [
+ {
+ "type": "autogenerated",
+ "dirName": "developer/export"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "appStore": [
+ "developer/app-store/overview",
+ { "type": "html", "value": "
" },
+ {
+ "type": "category",
+ "label": "Adyen",
+ "collapsible": false,
+ "items": [
+ {
+ "type": "autogenerated",
+ "dirName": "developer/app-store/apps/adyen"
+ }
+ ]
+ },
+ {
+ "type": "category",
+ "label": "Avalara AvaTax",
+ "collapsible": false,
+ "items": [
+ {
+ "type": "autogenerated",
+ "dirName": "developer/app-store/apps/avatax"
+ }
+ ]
+ },
+ "developer/app-store/apps/crm",
+ {
+ "type": "category",
+ "label": "Emails and Messages",
+ "collapsible": false,
+ "items": [
+ {
+ "type": "autogenerated",
+ "dirName": "developer/app-store/apps/emails-and-messages"
+ }
+ ]
+ },
+ "developer/app-store/apps/cms",
+ "developer/app-store/apps/invoices",
+ "developer/app-store/apps/product-feed",
+ "developer/app-store/apps/segment",
+ "developer/app-store/apps/search",
+ {
+ "type": "category",
+ "label": "SMTP",
+ "collapsible": false,
+ "items": [
+ {
+ "type": "autogenerated",
+ "dirName": "developer/app-store/apps/smtp"
+ }
+ ]
+ },
+ { "type": "html", "value": "
" },
+ {
+ "type": "category",
+ "label": "Legacy Plugins",
+ "items": [
+ "developer/app-store/legacy-plugins/admin-emails",
+ "developer/app-store/legacy-plugins/adyen",
+ "developer/app-store/legacy-plugins/dummy-credit-card",
+ "developer/app-store/legacy-plugins/stripe",
+ "developer/app-store/legacy-plugins/oidc",
+ "developer/app-store/legacy-plugins/np-atobarai",
+ "developer/app-store/legacy-plugins/user-emails"
+ ]
+ }
+ ],
"api": [
{
"type": "autogenerated",