@graphcommerce/magento-cart 4.2.12 → 4.2.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,77 @@
1
1
  # Change Log
2
2
 
3
+ ## 4.2.15
4
+
5
+ ### Patch Changes
6
+
7
+ - [#1466](https://github.com/graphcommerce-org/graphcommerce/pull/1466) [`ed2b67a06`](https://github.com/graphcommerce-org/graphcommerce/commit/ed2b67a0618d9db97e79ed2a8226e0ae12403943) Thanks [@FrankHarland](https://github.com/FrankHarland)! - Added a new useCustomerSession hook to allow for more fine grained control over loading data for customers.
8
+
9
+ - Updated dependencies [[`0363b9671`](https://github.com/graphcommerce-org/graphcommerce/commit/0363b9671db7c2932321d97faf6f1eb385238397), [`3ac90b57c`](https://github.com/graphcommerce-org/graphcommerce/commit/3ac90b57c68b96f9d81771d6664ed9435a28fc1d), [`00f6167ff`](https://github.com/graphcommerce-org/graphcommerce/commit/00f6167ff4096bf7432f3d8e8e739ecbf6ab0dd2), [`7159d3ab3`](https://github.com/graphcommerce-org/graphcommerce/commit/7159d3ab31e937c9c921023c46e80db5813e789c), [`32370574b`](https://github.com/graphcommerce-org/graphcommerce/commit/32370574bef6345b857ae911049ca27a64bc7e08), [`ed2b67a06`](https://github.com/graphcommerce-org/graphcommerce/commit/ed2b67a0618d9db97e79ed2a8226e0ae12403943), [`4c146c682`](https://github.com/graphcommerce-org/graphcommerce/commit/4c146c68242e6edc616807fb73173cc959c26034)]:
10
+ - @graphcommerce/next-ui@4.8.0
11
+ - @graphcommerce/magento-customer@4.3.0
12
+ - @graphcommerce/ecommerce-ui@1.0.12
13
+ - @graphcommerce/framer-scroller@2.1.11
14
+ - @graphcommerce/magento-store@4.2.4
15
+
16
+ ## 4.2.14
17
+
18
+ ### Patch Changes
19
+
20
+ - Updated dependencies [[`c30893857`](https://github.com/graphcommerce-org/graphcommerce/commit/c3089385791291e812a48c2691a39a2325ee0439)]:
21
+ - @graphcommerce/magento-store@4.2.3
22
+ - @graphcommerce/magento-customer@4.2.12
23
+
24
+ ## 4.2.13
25
+
26
+ ### Patch Changes
27
+
28
+ - [#1451](https://github.com/graphcommerce-org/graphcommerce/pull/1451) [`f698ff85d`](https://github.com/graphcommerce-org/graphcommerce/commit/f698ff85df6bb0922288471bb3c81856091b8061) Thanks [@paales](https://github.com/paales)! - Removed all occurences of @lingui/macro and moved to @lingui/macro / @lingui/core in preparation to move to swc.
29
+
30
+ Since we've removed @lingui/macro, all occurences need to be replaced with @lingui/core and @lingui/react.
31
+
32
+ All occurences of `<Trans>` and `t` need to be replaced:
33
+
34
+ ```tsx
35
+ import { Trans, t } from '@lingui/macro'
36
+
37
+ function MyComponent() {
38
+ const foo = 'bar'
39
+ return (
40
+ <div aria-label={t`Account ${foo}`}>
41
+ <Trans>My Translation {foo}</Trans>
42
+ </div>
43
+ )
44
+ }
45
+ ```
46
+
47
+ Needs to be replaced with:
48
+
49
+ ```tsx
50
+ import { Trans } from '@lingui/react'
51
+ import { i18n } from '@lingui/core'
52
+
53
+ function MyComponent() {
54
+ const foo = 'bar'
55
+ return (
56
+ <div aria-label={i18n._(/* i18n */ `Account {foo}`, { foo })}>
57
+ <Trans key='My Translation {foo}' values={{ foo }}></Trans>
58
+ </div>
59
+ )
60
+ }
61
+ ```
62
+
63
+ [More examples for Trans](https://lingui.js.org/ref/macro.html#examples-of-jsx-macros) and [more examples for `t`](https://lingui.js.org/ref/macro.html#examples-of-js-macros)
64
+
65
+ - Updated dependencies [[`50188e378`](https://github.com/graphcommerce-org/graphcommerce/commit/50188e378b4c77561ebc600958ea11cd114fa61a), [`f698ff85d`](https://github.com/graphcommerce-org/graphcommerce/commit/f698ff85df6bb0922288471bb3c81856091b8061)]:
66
+ - @graphcommerce/react-hook-form@3.1.3
67
+ - @graphcommerce/ecommerce-ui@1.0.11
68
+ - @graphcommerce/framer-scroller@2.1.10
69
+ - @graphcommerce/magento-customer@4.2.11
70
+ - @graphcommerce/magento-store@4.2.2
71
+ - @graphcommerce/next-ui@4.7.2
72
+ - @graphcommerce/graphql@3.1.3
73
+ - @graphcommerce/magento-graphql@3.0.12
74
+
3
75
  ## 4.2.12
4
76
 
5
77
  ### Patch Changes
@@ -1,8 +1,8 @@
1
1
  import { ApolloErrorAlert, ApolloErrorAlertProps } from '@graphcommerce/ecommerce-ui'
2
- import { useQuery } from '@graphcommerce/graphql'
3
- import { CustomerTokenDocument } from '@graphcommerce/magento-customer'
2
+ import { useCustomerSession } from '@graphcommerce/magento-customer'
4
3
  import { graphqlErrorByCategory } from '@graphcommerce/magento-graphql'
5
- import { t, Trans } from '@lingui/macro'
4
+ import { i18n } from '@lingui/core'
5
+ import { Trans } from '@lingui/react'
6
6
  import { Button } from '@mui/material'
7
7
  import Link from 'next/link'
8
8
  import { useClearCurrentCartId } from '../../hooks/useClearCurrentCartId'
@@ -12,7 +12,7 @@ export type ApolloCartErrorAlertProps = ApolloErrorAlertProps
12
12
  export function ApolloCartErrorAlert(props: ApolloCartErrorAlertProps) {
13
13
  const { error } = props
14
14
  const clear = useClearCurrentCartId()
15
- const token = useQuery(CustomerTokenDocument).data?.customerToken
15
+ const { token } = useCustomerSession()
16
16
 
17
17
  let action: JSX.Element | undefined
18
18
 
@@ -22,14 +22,16 @@ export function ApolloCartErrorAlert(props: ApolloCartErrorAlertProps) {
22
22
  const [, authorizationError] = graphqlErrorByCategory({
23
23
  category: 'graphql-authorization',
24
24
  error,
25
- mask: token?.token ? t`Please reauthenticate and try again` : t`You must sign in to continue`,
25
+ mask: token
26
+ ? i18n._(/* i18n */ `Please reauthenticate and try again`)
27
+ : i18n._(/* i18n */ `You must sign in to continue`),
26
28
  })
27
29
 
28
30
  action =
29
31
  authorizationError && clear ? (
30
32
  <Link href='/account/signin' passHref>
31
33
  <Button>
32
- <Trans>Sign in</Trans>
34
+ <Trans id='Sign in' />
33
35
  </Button>
34
36
  </Link>
35
37
  ) : (
@@ -7,7 +7,7 @@ import {
7
7
  UseFormComposeOptions,
8
8
  useFormPersist,
9
9
  } from '@graphcommerce/react-hook-form'
10
- import { t } from '@lingui/macro'
10
+ import { i18n } from '@lingui/core'
11
11
  import {
12
12
  Box,
13
13
  Checkbox,
@@ -72,7 +72,7 @@ export function CartAgreementsForm(props: CartAgreementsFormProps) {
72
72
  name={`agreement[${agreement.agreement_id}]`}
73
73
  control={control}
74
74
  rules={{
75
- required: t`You have to agree in order to proceed`,
75
+ required: i18n._(/* i18n */ `You have to agree in order to proceed`),
76
76
  }}
77
77
  render={({
78
78
  field: { onChange, value, name, ref, onBlur },
@@ -6,7 +6,7 @@ import {
6
6
  useScrollY,
7
7
  useFabSize,
8
8
  } from '@graphcommerce/next-ui'
9
- import { t } from '@lingui/macro'
9
+ import { i18n } from '@lingui/core'
10
10
  import { alpha, Fab, FabProps, NoSsr, styled, useTheme, Box, SxProps, Theme } from '@mui/material'
11
11
  import { m, useTransform } from 'framer-motion'
12
12
  import PageLink from 'next/link'
@@ -58,7 +58,7 @@ function CartFabContent(props: CartFabContentProps) {
58
58
  <PageLink href='/cart' passHref>
59
59
  <MotionFab
60
60
  className={classes.cart}
61
- aria-label={t`Cart`}
61
+ aria-label={i18n._(/* i18n */ `Cart`)}
62
62
  color='inherit'
63
63
  size='responsive'
64
64
  style={{ backgroundColor }}
@@ -8,7 +8,7 @@ import {
8
8
  IconSvg,
9
9
  extendableComponent,
10
10
  } from '@graphcommerce/next-ui'
11
- import { Trans } from '@lingui/macro'
11
+ import { Trans } from '@lingui/react'
12
12
  import { Box, Divider, SxProps, Theme } from '@mui/material'
13
13
  import React from 'react'
14
14
  import { useCartQuery } from '../../hooks'
@@ -54,7 +54,7 @@ export function CartItemSummary(props: OrderSummaryProps) {
54
54
  >
55
55
  <SectionContainer
56
56
  sx={{ '& .SectionHeader': { mt: 0 } }}
57
- labelLeft={<Trans>Order summary</Trans>}
57
+ labelLeft={<Trans id='Order summary' />}
58
58
  // labelRight={
59
59
  // <PageLink href='/download' passHref>
60
60
  // <Link color='secondary'>Download invoice</Link>
@@ -1,6 +1,6 @@
1
1
  import { Money } from '@graphcommerce/magento-store'
2
2
  import { iconChevronRight, IconSvg, extendableComponent } from '@graphcommerce/next-ui'
3
- import { Trans } from '@lingui/macro'
3
+ import { Trans } from '@lingui/react'
4
4
  import { Box, Button, SxProps, Theme } from '@mui/material'
5
5
  import PageLink from 'next/link'
6
6
  import { CartStartCheckoutFragment } from './CartStartCheckout.gql'
@@ -53,7 +53,7 @@ export function CartStartCheckout(props: CartStartCheckoutProps) {
53
53
  '& ~ span.MuiButton-endIcon': { marginLeft: '6px' },
54
54
  })}
55
55
  >
56
- <Trans>Start Checkout</Trans>
56
+ <Trans id='Start Checkout' />
57
57
  </Box>{' '}
58
58
  {hasTotals && (
59
59
  <span className={classes.checkoutMoney}>
@@ -1,6 +1,7 @@
1
1
  import { useHistoryLink } from '@graphcommerce/framer-next-pages'
2
2
  import { SectionContainer, extendableComponent } from '@graphcommerce/next-ui'
3
- import { t, Trans } from '@lingui/macro'
3
+ import { i18n } from '@lingui/core'
4
+ import { Trans } from '@lingui/react'
4
5
  import { Box, Link, SxProps, Theme, Typography } from '@mui/material'
5
6
  import PageLink from 'next/link'
6
7
  import React from 'react'
@@ -59,7 +60,7 @@ export function CartSummary(props: CartSummaryProps) {
59
60
  <Box>
60
61
  <SectionContainer
61
62
  variantLeft='h5'
62
- labelLeft={t`Confirmation + Track & trace`}
63
+ labelLeft={<Trans id='Confirmation + Track & trace' />}
63
64
  sx={{ '& .SectionHeader': { marginTop: 0, paddingBottom: '8px' } }}
64
65
  />
65
66
  <Typography variant='body1'>{email || ''}</Typography>
@@ -67,7 +68,7 @@ export function CartSummary(props: CartSummaryProps) {
67
68
  <Box>
68
69
  <SectionContainer
69
70
  variantLeft='h5'
70
- labelLeft={t`Shipping method`}
71
+ labelLeft={<Trans id='Shipping method' />}
71
72
  sx={{ '& .SectionHeader': { marginTop: 0, paddingBottom: '8px' } }}
72
73
  />
73
74
  <Typography variant='body1'>
@@ -80,7 +81,7 @@ export function CartSummary(props: CartSummaryProps) {
80
81
  <Box>
81
82
  <SectionContainer
82
83
  variantLeft='h5'
83
- labelLeft={t`Shipping address`}
84
+ labelLeft={<Trans id='Shipping address' />}
84
85
  sx={{ '& .SectionHeader': { marginTop: 0, paddingBottom: '8px' } }}
85
86
  labelRight={
86
87
  editable ? (
@@ -91,7 +92,7 @@ export function CartSummary(props: CartSummaryProps) {
91
92
  onClick={historyOnClick}
92
93
  underline='hover'
93
94
  >
94
- <Trans>Edit</Trans>
95
+ <Trans id='Edit' />
95
96
  </Link>
96
97
  </PageLink>
97
98
  ) : undefined
@@ -102,13 +103,13 @@ export function CartSummary(props: CartSummaryProps) {
102
103
  <Box>
103
104
  <SectionContainer
104
105
  variantLeft='h5'
105
- labelLeft={t`Billing address`}
106
+ labelLeft={<Trans id='Billing address' />}
106
107
  sx={{ '& .SectionHeader': { marginTop: 0, paddingBottom: '8px' } }}
107
108
  labelRight={
108
109
  editable ? (
109
110
  <PageLink href='/checkout/edit/billing-address' passHref>
110
111
  <Link color='secondary' variant='body2' underline='hover'>
111
- <Trans>Edit</Trans>
112
+ <Trans id='Edit' />
112
113
  </Link>
113
114
  </PageLink>
114
115
  ) : undefined
@@ -1,6 +1,6 @@
1
1
  import { Money } from '@graphcommerce/magento-store'
2
2
  import { AnimatedRow, extendableComponent, responsiveVal } from '@graphcommerce/next-ui'
3
- import { Trans } from '@lingui/macro'
3
+ import { Trans } from '@lingui/react'
4
4
  import { Box, Divider, lighten, SxProps, Theme } from '@mui/material'
5
5
  import { AnimatePresence } from 'framer-motion'
6
6
  import { useCartQuery, useDisplayInclTax } from '../../hooks'
@@ -74,7 +74,7 @@ export function CartTotals(props: CartTotalsProps) {
74
74
  sx={{ display: 'flex', justifyContent: 'space-between', typography: 'subtitle1' }}
75
75
  >
76
76
  <Box>
77
- <Trans>Products</Trans>
77
+ <Trans id='Products' />
78
78
  </Box>
79
79
  <Box className={classes.money} sx={{ whiteSpace: 'nowrap' }}>
80
80
  <Money
@@ -116,9 +116,10 @@ export function CartTotals(props: CartTotalsProps) {
116
116
  sx={{ display: 'flex', justifyContent: 'space-between', typography: 'subtitle1' }}
117
117
  >
118
118
  <Box>
119
- <Trans>
120
- Shipping ({shippingMethod.carrier_title} {shippingMethod.method_title})
121
- </Trans>
119
+ <Trans
120
+ id='Shipping ({0} {1})'
121
+ values={{ 0: shippingMethod.carrier_title, 1: shippingMethod.method_title }}
122
+ />
122
123
  </Box>
123
124
  <Box className={classes.money} sx={{ whiteSpace: 'nowrap' }}>
124
125
  <Money
@@ -160,7 +161,7 @@ export function CartTotals(props: CartTotalsProps) {
160
161
  })}
161
162
  >
162
163
  <Box>
163
- <Trans>Grand total</Trans>
164
+ <Trans id='Grand total' />
164
165
  </Box>
165
166
  <Box className={classes.money} sx={{ whiteSpace: 'nowrap' }}>
166
167
  <Money {...prices.grand_total} />
@@ -182,7 +183,7 @@ export function CartTotals(props: CartTotalsProps) {
182
183
  }}
183
184
  >
184
185
  <Box>
185
- <Trans>Including {tax?.label}</Trans>
186
+ <Trans id='Including {0}' values={{ 0: tax?.label }} />
186
187
  </Box>
187
188
  <Box className={classes.money} sx={{ whiteSpace: 'nowrap' }}>
188
189
  <Money {...tax?.amount} />
@@ -1,5 +1,5 @@
1
1
  import { FullPageMessage, IconSvg, iconShoppingBag } from '@graphcommerce/next-ui'
2
- import { Trans } from '@lingui/macro'
2
+ import { Trans } from '@lingui/react'
3
3
  import { Button } from '@mui/material'
4
4
  import Link from 'next/link'
5
5
  import React from 'react'
@@ -10,17 +10,17 @@ export function EmptyCart(props: EmptyCartProps) {
10
10
 
11
11
  return (
12
12
  <FullPageMessage
13
- title={<Trans>Your cart is empty</Trans>}
13
+ title={<Trans id='Your cart is empty' />}
14
14
  icon={<IconSvg src={iconShoppingBag} size='xxl' />}
15
15
  button={
16
16
  <Link href='/' passHref>
17
17
  <Button variant='pill' color='secondary' size='large'>
18
- <Trans>Continue shopping</Trans>
18
+ <Trans id='Continue shopping' />
19
19
  </Button>
20
20
  </Link>
21
21
  }
22
22
  >
23
- {children ?? <Trans>Discover our collection and add items to your cart!</Trans>}
23
+ {children ?? <Trans id='Discover our collection and add items to your cart!' />}
24
24
  </FullPageMessage>
25
25
  )
26
26
  }
@@ -5,7 +5,7 @@ import {
5
5
  IsEmailAvailableDocument,
6
6
  } from '@graphcommerce/magento-customer'
7
7
  import { Button, FormRow, extendableComponent } from '@graphcommerce/next-ui'
8
- import { Trans } from '@lingui/macro'
8
+ import { Trans } from '@lingui/react'
9
9
  import { Box, SxProps, TextField, Theme, Typography } from '@mui/material'
10
10
  import React, { useState } from 'react'
11
11
  import { useCartQuery } from '../../hooks/useCartQuery'
@@ -75,9 +75,9 @@ export function InlineAccount(props: InlineAccountProps) {
75
75
  >
76
76
  <div>
77
77
  <Typography variant='h4' className={classes.title} sx={{ paddingBottom: '8px' }}>
78
- {title ?? <Trans>No account yet?</Trans>}
78
+ {title ?? <Trans id='No account yet?' />}
79
79
  </Typography>
80
- {description ?? <Trans>You can track your order status and much more!</Trans>}
80
+ {description ?? <Trans id='You can track your order status and much more!' />}
81
81
  </div>
82
82
  <div>
83
83
  {!toggled && (
@@ -89,7 +89,7 @@ export function InlineAccount(props: InlineAccountProps) {
89
89
  className={classes.button}
90
90
  sx={{ minWidth: 160 }}
91
91
  >
92
- <Trans>Create an account</Trans>
92
+ <Trans id='Create an account' />
93
93
  </Button>
94
94
  )}
95
95
  </div>
@@ -122,9 +122,9 @@ export function InlineAccount(props: InlineAccountProps) {
122
122
  <Box className={classes.innerContainer}>
123
123
  <div>
124
124
  <Typography variant='h4' className={classes.title}>
125
- {title ?? <Trans>Have an account?</Trans>}
125
+ {title ?? <Trans id='Have an account?' />}
126
126
  </Typography>
127
- {description ?? <Trans>You can find your order history in your account!</Trans>}
127
+ {description ?? <Trans id='You can find your order history in your account!' />}
128
128
  </div>
129
129
  <div>
130
130
  <Button
@@ -133,7 +133,7 @@ export function InlineAccount(props: InlineAccountProps) {
133
133
  href={accountHref}
134
134
  className={classes.button}
135
135
  >
136
- <Trans>Account</Trans>
136
+ <Trans id='Account' />
137
137
  </Button>
138
138
  </div>
139
139
  </Box>
@@ -1,5 +1,5 @@
1
1
  import { useMutation } from '@graphcommerce/graphql'
2
- import { t } from '@lingui/macro'
2
+ import { i18n } from '@lingui/core'
3
3
  import { CreateEmptyCartDocument } from './CreateEmptyCart.gql'
4
4
  import { useAssignCurrentCartId } from './useAssignCurrentCartId'
5
5
  import { useCurrentCartId } from './useCurrentCartId'
@@ -13,7 +13,7 @@ export function useCartIdCreate() {
13
13
  if (cartId) return cartId
14
14
 
15
15
  const { data } = await create()
16
- if (!data?.createEmptyCart) throw Error(t`Could not create an empty cart`)
16
+ if (!data?.createEmptyCart) throw Error(i18n._(/* i18n */ `Could not create an empty cart`))
17
17
 
18
18
  // We store the cartId that is returned as the currentCartId result
19
19
  assignCurrentCartId(data.createEmptyCart)
@@ -1,5 +1,9 @@
1
1
  import { useMutation, useQuery } from '@graphcommerce/graphql'
2
- import { CustomerTokenDocument, useExtractCustomerErrors } from '@graphcommerce/magento-customer'
2
+ import {
3
+ CustomerTokenDocument,
4
+ useCustomerSession,
5
+ useExtractCustomerErrors,
6
+ } from '@graphcommerce/magento-customer'
3
7
  import { useEffect } from 'react'
4
8
  import { CustomerCartDocument } from './CustomerCart.gql'
5
9
  import { UseMergeCustomerCartDocument } from './UseMergeCustomerCart.gql'
@@ -18,9 +22,9 @@ export function useMergeCustomerCart() {
18
22
  const [merge, { error }] = useMutation(UseMergeCustomerCartDocument, { errorPolicy: 'all' })
19
23
 
20
24
  useExtractCustomerErrors({ error })
21
- const customerToken = useQuery(CustomerTokenDocument)?.data?.customerToken
25
+ const { loggedIn } = useCustomerSession()
22
26
  const destinationCartId = useQuery(CustomerCartDocument, {
23
- skip: !(customerToken?.token && customerToken.valid),
27
+ skip: !loggedIn,
24
28
  })?.data?.customerCart.id
25
29
 
26
30
  useEffect(() => {
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@graphcommerce/magento-cart",
3
3
  "homepage": "https://www.graphcommerce.org/",
4
4
  "repository": "github:graphcommerce-org/graphcommerce",
5
- "version": "4.2.12",
5
+ "version": "4.2.15",
6
6
  "sideEffects": false,
7
7
  "prettier": "@graphcommerce/prettier-config-pwa",
8
8
  "eslintConfig": {
@@ -12,25 +12,26 @@
12
12
  }
13
13
  },
14
14
  "devDependencies": {
15
- "@graphcommerce/eslint-config-pwa": "^4.1.6",
15
+ "@graphcommerce/eslint-config-pwa": "^4.1.7",
16
16
  "@graphcommerce/prettier-config-pwa": "^4.0.6",
17
- "@graphcommerce/typescript-config-pwa": "^4.0.2",
17
+ "@graphcommerce/typescript-config-pwa": "^4.0.3",
18
18
  "@playwright/test": "^1.21.1"
19
19
  },
20
20
  "dependencies": {
21
- "@graphcommerce/ecommerce-ui": "1.0.10",
21
+ "@graphcommerce/ecommerce-ui": "1.0.12",
22
22
  "@graphcommerce/framer-next-pages": "3.2.1",
23
- "@graphcommerce/framer-scroller": "2.1.9",
24
- "@graphcommerce/graphql": "3.1.2",
23
+ "@graphcommerce/framer-scroller": "2.1.11",
24
+ "@graphcommerce/graphql": "3.1.3",
25
25
  "@graphcommerce/image": "3.1.5",
26
- "@graphcommerce/magento-customer": "4.2.10",
27
- "@graphcommerce/magento-graphql": "3.0.11",
28
- "@graphcommerce/magento-store": "4.2.1",
29
- "@graphcommerce/next-ui": "4.7.1",
30
- "@graphcommerce/react-hook-form": "3.1.2"
26
+ "@graphcommerce/magento-customer": "4.3.0",
27
+ "@graphcommerce/magento-graphql": "3.0.12",
28
+ "@graphcommerce/magento-store": "4.2.4",
29
+ "@graphcommerce/next-ui": "4.8.0",
30
+ "@graphcommerce/react-hook-form": "3.1.3"
31
31
  },
32
32
  "peerDependencies": {
33
- "@lingui/macro": "^3.13.2",
33
+ "@lingui/react": "^3.13.2",
34
+ "@lingui/core": "^3.13.2",
34
35
  "@mui/material": "5.5.3",
35
36
  "framer-motion": "^6.2.4",
36
37
  "next": "12.1.2",