├── .gitignore
├── LICENSE
├── README.md
├── components
├── ExampleInfo.tsx
└── ExampleWrapper.tsx
├── config
└── productList.ts
├── next-env.d.ts
├── package-lock.json
├── package.json
├── pages
├── _app.tsx
├── _middleware.ts
├── api
│ └── authWithUserId.ts
├── basket.tsx
└── index.tsx
├── postcss.config.js
├── public
├── assets
│ ├── avatars
│ │ ├── 0.png
│ │ ├── 1.png
│ │ ├── 2.png
│ │ ├── 3.png
│ │ ├── 4.png
│ │ ├── 5.png
│ │ ├── 6.png
│ │ ├── 7.png
│ │ ├── 8.png
│ │ └── 9.png
│ └── socks
│ │ ├── color-geometric-socks.jpg
│ │ ├── floral-socks-back.jpg
│ │ ├── floral-socks.jpg
│ │ ├── grey-and-white-stripe-socks-back.jpg
│ │ ├── grey-and-white-stripe-socks.jpg
│ │ ├── hotdog-socks.jpg
│ │ ├── jungle-socks-2.jpg
│ │ ├── jungle-socks-back-2.jpg
│ │ ├── jungle-socks-back.jpg
│ │ ├── jungle-socks.jpg
│ │ ├── pug-dog-socks.jpg
│ │ ├── puppy-paw-socks-back.jpg
│ │ ├── puppy-paw-socks.jpg
│ │ ├── white-socks-back-2.jpg
│ │ ├── white-socks-back.jpg
│ │ └── white-socks.jpg
├── favicon.ico
├── icons
│ ├── android-chrome-192x192.png
│ ├── android-chrome-512x512.png
│ ├── apple-touch-icon-114x114.png
│ ├── apple-touch-icon-120x120.png
│ ├── apple-touch-icon-144x144.png
│ ├── apple-touch-icon-152x152.png
│ ├── apple-touch-icon-180x180.png
│ ├── apple-touch-icon-57x57.png
│ ├── apple-touch-icon-60x60.png
│ ├── apple-touch-icon-72x72.png
│ ├── apple-touch-icon-76x76.png
│ ├── apple-touch-icon.png
│ ├── browserconfig.xml
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── mstile-150x150.png
│ └── safari-pinned-tab.svg
└── screenshot.png
├── styles
└── globals.css
├── tailwind.config.js
└── tsconfig.json
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .idea
3 | .env
4 | .env.local
5 | .env.dev
6 | .next
7 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright 2021 LIVEBLOCKS PTY LTD
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # [Live Basket](https://livebasket.ctnicholas.dev)
2 |
3 | This repo shows how to build a live shopping basket with [Liveblocks](https://liveblocks.io) and [Next.js](https://nextjs.org/).
4 |
5 | 
6 |
7 |
8 | ## [Try it out](https://livebasket.ctnicholas.dev)
9 |
10 | This shopping basket isn't only shared between users, but contains a demo of a driver/passenger relationship.
11 | Only one user can hold the basket at a time (the "driver"), and they have control over what is added or
12 | removed from the basket. Other users, the "passengers", can only request an item is added, and then wait for
13 | a response. If the driver goes offline, the first passenger still online becomes the new driver.
14 |
15 | ## Getting started
16 |
17 | ### Run examples locally
18 |
19 | - Install all dependencies with `npm install`
20 |
21 | - Create an account on [liveblocks.io](https://liveblocks.io/dashboard)
22 |
23 | - Copy your secret key from the [administration](https://liveblocks.io/dashboard/apikeys)
24 |
25 | - Create a file named `.env.local` and add your Liveblocks secret as environment variable `LIVEBLOCKS_SECRET_KEY=sk_test_yourkey`
26 |
27 | ### Run examples on CodeSandbox
28 |
29 | - Open this repository on CodeSandbox with this [link](https://codesandbox.io/s/live-basket-with-liveblocks-next-js-xh3bm)
30 |
31 | - Create an account on [liveblocks.io](https://liveblocks.io/dashboard)
32 |
33 | - Copy your secret key from the [administration](https://liveblocks.io/dashboard/apikeys)
34 |
35 | - Create [secret](https://codesandbox.io/docs/secrets) named `LIVEBLOCKS_SECRET_KEY` with the secret key you just copied. You need to create an account on CodeSandbox to add an environment variable.
36 |
37 | - Refresh your browser and you should be good to go!
38 |
39 |
40 | ## More
41 |
42 | - On my blog, [ctnicholas.dev](https://www.ctnicholas.dev/), I wrote an interactive article
43 | about [using Liveblocks to add live cursors to your website](https://www.ctnicholas.dev/articles/live-cursors-with-liveblocks).
44 | - I recently built a [live piano](https://github.com/CTNicholas/liveblocks-live-piano-next-js) with Liveblocks.
45 |
--------------------------------------------------------------------------------
/components/ExampleInfo.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState } from 'react'
2 |
3 | export type ExampleInfoProps = {
4 | hide: boolean;
5 | title: string;
6 | description?: string;
7 | githubHref?: string;
8 | codeSandboxHref?: string;
9 | twitterHref?: string
10 | children?: React.ReactNode;
11 | };
12 |
13 | export function ExampleInfo ({
14 | hide,
15 | title,
16 | description,
17 | githubHref,
18 | codeSandboxHref,
19 | twitterHref = 'https://twitter.com/ctnicholasdev',
20 | children
21 | }: ExampleInfoProps) {
22 | const [isShowing, setIsShowing] = useState(true)
23 | const [currentUrl, setCurrentUrl] = useState('')
24 |
25 | useEffect(() => {
26 | setCurrentUrl(window.location.href)
27 | }, [])
28 |
29 | if (!isShowing || hide) {
30 | return null
31 | }
32 |
33 | return (
34 |
37 |
38 |
39 |
{title}
40 |
41 |
42 |
{
45 | setIsShowing(false)
46 | }}
47 | >
48 |
55 |
60 |
65 |
66 |
67 |
68 |
69 |
{children || description}
70 |
71 |
72 |
73 |
74 |
75 |
76 | Open in new window
77 |
78 |
79 |
80 |
155 |
156 | )
157 | }
158 |
159 | export function ExternalLink ({ children, href, className }: { children?: React.ReactNode, href: string, className: string }) {
160 | return (
161 |
162 | {children}
163 |
164 | )
165 | }
166 |
--------------------------------------------------------------------------------
/components/ExampleWrapper.tsx:
--------------------------------------------------------------------------------
1 | import Head from 'next/head'
2 | import * as React from 'react'
3 | import { ExampleInfo, ExampleInfoProps } from './ExampleInfo'
4 |
5 | type Meta = {
6 | title: string,
7 | description: string,
8 | image: string,
9 | url: string,
10 | author: string,
11 | twitter: string
12 | }
13 |
14 | export type ExampleWrapperProps = {
15 | meta: Meta
16 | info?: ExampleInfoProps
17 | hasSetupLiveblocksKey: boolean
18 | isRunningOnCodeSandbox: boolean
19 | children?: React.ReactNode
20 | }
21 |
22 | export function LiveblocksStaticProps () {
23 | return {
24 | props: {
25 | isRunningOnCodeSandbox: process.env.CODESANDBOX_SSE != null,
26 | hasSetupLiveblocksKey: process.env.LIVEBLOCKS_SECRET_KEY != null
27 | }
28 | }
29 | }
30 |
31 | export function ExampleWrapper ({ meta, info, isRunningOnCodeSandbox, hasSetupLiveblocksKey, children }: ExampleWrapperProps) {
32 | return (
33 | <>
34 |
35 | {meta.title}
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 | {hasSetupLiveblocksKey ? (
69 |
70 | {info && }
71 | {children}
72 |
73 | ) : isRunningOnCodeSandbox ? (
74 |
75 |
76 | Welcome to Liveblocks Next.js live piano example
77 |
78 |
79 | To run{' '}
80 |
81 | Liveblocks
82 | {' '}
83 | examples on CodeSandbox
84 |
85 |
86 |
87 | Create an account on{' '}
88 |
93 | liveblocks.io
94 |
95 |
96 |
97 | Copy your secret key from the administration
98 |
99 |
100 | Add a{' '}
101 |
106 | secret key
107 | {' '}
108 | named LIVEBLOCKS_SECRET_KEY {' '}
109 | to your CodeSandbox sandbox.
110 |
111 |
112 | Refresh your browser and you should be good to go!
113 |
114 |
115 |
116 | ) : (
117 |
118 |
119 | Welcome to Liveblocks Next.js live piano example
120 |
121 |
122 | To run{' '}
123 |
124 | Liveblocks
125 | {' '}
126 | examples locally
127 |
128 |
129 |
130 | Install all dependencies with{' '}
131 | npm install
132 |
133 |
134 | Create an account on{' '}
135 |
140 | liveblocks.io
141 |
142 |
143 |
144 | Copy your secret key from the administration
145 |
146 |
147 | Create a file named{' '}
148 | .env.local and add your
149 | Liveblocks secret as environment variable{' '}
150 |
151 | LIVEBLOCKS_SECRET_KEY=sk_test_yourkey
152 |
153 |
154 |
155 | Run the following command and you should be good to go
156 | npm run dev
157 |
158 |
159 |
160 | )}
161 | >
162 | )
163 | }
164 |
165 | export function SingleLineCodeBlock ({
166 | children
167 | }: {
168 | children?: React.ReactNode;
169 | }) {
170 | return (
171 |
179 | {children}
180 |
181 | )
182 | }
183 |
184 | export function InlineCodeBlock ({
185 | children
186 | }: {
187 | children?: React.ReactNode;
188 | }) {
189 | return (
190 |
197 | {children}
198 |
199 | )
200 | }
201 |
--------------------------------------------------------------------------------
/config/productList.ts:
--------------------------------------------------------------------------------
1 | import { Product } from '../pages/basket'
2 | import geometric from '../public/assets/socks/color-geometric-socks.jpg'
3 | import cat from '../public/assets/socks/grey-and-white-stripe-socks.jpg'
4 | import paw from '../public/assets/socks/puppy-paw-socks.jpg'
5 | import white from '../public/assets/socks/white-socks.jpg'
6 | import hotdog from '../public/assets/socks/hotdog-socks.jpg'
7 | import pug from '../public/assets/socks/pug-dog-socks.jpg'
8 | import jungle from '../public/assets/socks/jungle-socks-2.jpg'
9 | import floral from '../public/assets/socks/floral-socks.jpg'
10 |
11 | import whiteBack from '../public/assets/socks/white-socks-back.jpg'
12 | import whiteBack2 from '../public/assets/socks/white-socks-back-2.jpg'
13 | import pawBack from '../public/assets/socks/puppy-paw-socks-back.jpg'
14 | import catBack from '../public/assets/socks/grey-and-white-stripe-socks-back.jpg'
15 | import jungleBack from '../public/assets/socks/jungle-socks-back-2.jpg'
16 | import floralBack from '../public/assets/socks/floral-socks-back.jpg'
17 |
18 | export const productList: Product[] = [
19 | {
20 | id: 0,
21 | name: 'Geometric socks',
22 | price: 2.20,
23 | images: [geometric, whiteBack2],
24 | description: 'Pink, blue and yellow'
25 | },
26 | {
27 | id: 1,
28 | name: 'Cat socks',
29 | price: 3.40,
30 | images: [cat, catBack],
31 | description: 'Light blue, gray and white'
32 | },
33 | {
34 | id: 2,
35 | name: 'Puppy paw socks',
36 | price: 1.60,
37 | images: [paw, pawBack],
38 | description: 'Light brown and white'
39 | },
40 | {
41 | id: 3,
42 | name: 'White socks',
43 | price: 0.80,
44 | images: [white, whiteBack],
45 | description: 'Plain white'
46 | },
47 | {
48 | id: 4,
49 | name: 'Jungle socks',
50 | price: 3.80,
51 | images: [jungle, jungleBack],
52 | description: 'Dark green'
53 | },
54 | {
55 | id: 5,
56 | name: 'Hotdog socks',
57 | price: 1.40,
58 | images: [hotdog, whiteBack2],
59 | description: 'Brown, red and yellow'
60 | },
61 | {
62 | id: 6,
63 | name: 'Floral socks',
64 | price: 2.00,
65 | images: [floral, floralBack],
66 | description: 'White, green and pink'
67 | },
68 | {
69 | id: 7,
70 | name: 'Pug socks',
71 | price: 1.80,
72 | images: [pug, whiteBack],
73 | description: 'White, brown and pink'
74 | }
75 | ]
76 |
--------------------------------------------------------------------------------
/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/basic-features/typescript for more information.
6 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "liveblocks-live-basket-next-js",
3 | "version": "1.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "liveblocks-live-basket-next-js",
9 | "version": "1.0.0",
10 | "license": "Apache-2.0",
11 | "dependencies": {
12 | "@liveblocks/client": "^0.14.0",
13 | "@liveblocks/node": "0.3.0",
14 | "@liveblocks/react": "^0.14.0",
15 | "framer-motion": "^5.6.0",
16 | "next": "^12.0.8",
17 | "react": "^17.0.2",
18 | "react-dom": "^17.0.2"
19 | },
20 | "devDependencies": {
21 | "@types/node": "^14.14.31",
22 | "@types/react": "^17.0.2",
23 | "autoprefixer": "^10.4.2",
24 | "postcss": "^8.4.5",
25 | "tailwindcss": "^3.0.15",
26 | "typescript": "^4.3.2"
27 | }
28 | },
29 | "node_modules/@babel/code-frame": {
30 | "version": "7.16.7",
31 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
32 | "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
33 | "dev": true,
34 | "dependencies": {
35 | "@babel/highlight": "^7.16.7"
36 | },
37 | "engines": {
38 | "node": ">=6.9.0"
39 | }
40 | },
41 | "node_modules/@babel/helper-validator-identifier": {
42 | "version": "7.16.7",
43 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
44 | "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
45 | "dev": true,
46 | "engines": {
47 | "node": ">=6.9.0"
48 | }
49 | },
50 | "node_modules/@babel/highlight": {
51 | "version": "7.16.7",
52 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz",
53 | "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==",
54 | "dev": true,
55 | "dependencies": {
56 | "@babel/helper-validator-identifier": "^7.16.7",
57 | "chalk": "^2.0.0",
58 | "js-tokens": "^4.0.0"
59 | },
60 | "engines": {
61 | "node": ">=6.9.0"
62 | }
63 | },
64 | "node_modules/@emotion/is-prop-valid": {
65 | "version": "0.8.8",
66 | "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz",
67 | "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==",
68 | "optional": true,
69 | "dependencies": {
70 | "@emotion/memoize": "0.7.4"
71 | }
72 | },
73 | "node_modules/@emotion/memoize": {
74 | "version": "0.7.4",
75 | "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
76 | "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==",
77 | "optional": true
78 | },
79 | "node_modules/@liveblocks/client": {
80 | "version": "0.14.0",
81 | "resolved": "https://registry.npmjs.org/@liveblocks/client/-/client-0.14.0.tgz",
82 | "integrity": "sha512-I1nykCqYSpuBQhP1kZplYqL6L0+C1JocW01UKgPz+tthOOGdTdsNBHPcMigxou4vsOQutUuEJUcaDsd1or4A+Q=="
83 | },
84 | "node_modules/@liveblocks/node": {
85 | "version": "0.3.0",
86 | "resolved": "https://registry.npmjs.org/@liveblocks/node/-/node-0.3.0.tgz",
87 | "integrity": "sha512-3IJ6uN3QU71z6WXiDM97wW17fVVvrG9zMy4G4PY3zYzmeRfMnA+KBSBT1uPvlfgWm2D3d6/HNIXWxhwyv7bkfw==",
88 | "license": "MIT",
89 | "dependencies": {
90 | "node-fetch": "^2.6.1"
91 | }
92 | },
93 | "node_modules/@liveblocks/react": {
94 | "version": "0.14.0",
95 | "resolved": "https://registry.npmjs.org/@liveblocks/react/-/react-0.14.0.tgz",
96 | "integrity": "sha512-KGuEEmifh3A9OEHTYaR3+yxIQOhdAQG59d0eOqKbyV/I0X6IoX4kAtXZjnZllrWrTwnnSY2aPFESthtt19t6EQ==",
97 | "peerDependencies": {
98 | "@liveblocks/client": "0.14.0",
99 | "react": "^16.14.0 || ^17"
100 | }
101 | },
102 | "node_modules/@next/env": {
103 | "version": "12.0.9",
104 | "resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.9.tgz",
105 | "integrity": "sha512-oBlkyDop0Stf7MPIzETGv5r0YT/G/weBrknoPOUTaa5qwOeGjuy6gsOVc/SBtrBkOoBmRpD+fFhQJPvmo1mS+g=="
106 | },
107 | "node_modules/@next/swc-android-arm64": {
108 | "version": "12.0.9",
109 | "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.9.tgz",
110 | "integrity": "sha512-aVqgsEn5plmUH2X58sjzhHsH/6majucWTMaaBEs7hHO2+GCwCZc7zaLH4XCBMKPES9Yaja8/pYUbvZQE9DqgFw==",
111 | "cpu": [
112 | "arm64"
113 | ],
114 | "optional": true,
115 | "os": [
116 | "android"
117 | ],
118 | "engines": {
119 | "node": ">= 10"
120 | }
121 | },
122 | "node_modules/@next/swc-darwin-arm64": {
123 | "version": "12.0.9",
124 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.9.tgz",
125 | "integrity": "sha512-uAgRKm4a2nVdyBiPPJokvmDD1saugOvxljz9ld2ih0CCg5S9vBhqaj3kPGCQBj9hSu3q+Lng2CHnQqG3ga1jzA==",
126 | "cpu": [
127 | "arm64"
128 | ],
129 | "optional": true,
130 | "os": [
131 | "darwin"
132 | ],
133 | "engines": {
134 | "node": ">= 10"
135 | }
136 | },
137 | "node_modules/@next/swc-darwin-x64": {
138 | "version": "12.0.9",
139 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.9.tgz",
140 | "integrity": "sha512-fDOs2lZIyrAdU18IxMA5orBPn9qLbOdu55gXSTNZOhyRJ8ugtbUAejsK7OL0boJy0CCHPAdVRXm01Mwk8tZ9RQ==",
141 | "cpu": [
142 | "x64"
143 | ],
144 | "optional": true,
145 | "os": [
146 | "darwin"
147 | ],
148 | "engines": {
149 | "node": ">= 10"
150 | }
151 | },
152 | "node_modules/@next/swc-linux-arm-gnueabihf": {
153 | "version": "12.0.9",
154 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.9.tgz",
155 | "integrity": "sha512-/ni0p9DBvATUML9RQ1ycQuf05uOYKdzA6iI8+eRsARjpGbFVUFbge7XPzlj9g2Q9YWgoN8CSjFGnKRlyky5uHA==",
156 | "cpu": [
157 | "arm"
158 | ],
159 | "optional": true,
160 | "os": [
161 | "linux"
162 | ],
163 | "engines": {
164 | "node": ">= 10"
165 | }
166 | },
167 | "node_modules/@next/swc-linux-arm64-gnu": {
168 | "version": "12.0.9",
169 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.9.tgz",
170 | "integrity": "sha512-AphxilJDf95rUxJDHgM9Ww1DaYXZWqTvoKwXeej/0SgSvICcRZrLaFDrkojdXz0Rxr4igX2OdYR1S4/Hj1jWOQ==",
171 | "cpu": [
172 | "arm64"
173 | ],
174 | "optional": true,
175 | "os": [
176 | "linux"
177 | ],
178 | "engines": {
179 | "node": ">= 10"
180 | }
181 | },
182 | "node_modules/@next/swc-linux-arm64-musl": {
183 | "version": "12.0.9",
184 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.9.tgz",
185 | "integrity": "sha512-K5jbvNNzF3mRjWmPdxP5Bg87i7FHivfBj/L0KJlxpkLSC8sffBJDmB6jtMnI7wiPj9J6vmLkbGtSosln78xAlQ==",
186 | "cpu": [
187 | "arm64"
188 | ],
189 | "optional": true,
190 | "os": [
191 | "linux"
192 | ],
193 | "engines": {
194 | "node": ">= 10"
195 | }
196 | },
197 | "node_modules/@next/swc-linux-x64-gnu": {
198 | "version": "12.0.9",
199 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.9.tgz",
200 | "integrity": "sha512-bJZ9bkMkQzsY+UyWezEZ77GWQ4TzwKeXdayX3U3+aEkL8k5C6eKBXlidWdrhu0teLmaUXIyWerWrLnJzwGXdfw==",
201 | "cpu": [
202 | "x64"
203 | ],
204 | "optional": true,
205 | "os": [
206 | "linux"
207 | ],
208 | "engines": {
209 | "node": ">= 10"
210 | }
211 | },
212 | "node_modules/@next/swc-linux-x64-musl": {
213 | "version": "12.0.9",
214 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.9.tgz",
215 | "integrity": "sha512-SR9p0R+v1T32DTXPVAXZw31pmJAkSDotC6Afy+mfC0xrEL3pp95R8sGXYAAUCEPkQp0MEeUOVy2LrToe92X7hQ==",
216 | "cpu": [
217 | "x64"
218 | ],
219 | "optional": true,
220 | "os": [
221 | "linux"
222 | ],
223 | "engines": {
224 | "node": ">= 10"
225 | }
226 | },
227 | "node_modules/@next/swc-win32-arm64-msvc": {
228 | "version": "12.0.9",
229 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.9.tgz",
230 | "integrity": "sha512-mzQ1A8vfHhJrvEy5KJZGZWEByXthyKfWofvFaf+oo/5nJl/0Bz1ODP2ajSmbLG++77Eo2AROgbm9pkW1ucvG2A==",
231 | "cpu": [
232 | "arm64"
233 | ],
234 | "optional": true,
235 | "os": [
236 | "win32"
237 | ],
238 | "engines": {
239 | "node": ">= 10"
240 | }
241 | },
242 | "node_modules/@next/swc-win32-ia32-msvc": {
243 | "version": "12.0.9",
244 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.9.tgz",
245 | "integrity": "sha512-MpD2vj1zjo1u3J3wiz3pEKse19Etz+P0GL6XfQkB/9a84vJQ1JWMaWBjmIdivzZv718Il2pRSSx8hymwPfguYQ==",
246 | "cpu": [
247 | "ia32"
248 | ],
249 | "optional": true,
250 | "os": [
251 | "win32"
252 | ],
253 | "engines": {
254 | "node": ">= 10"
255 | }
256 | },
257 | "node_modules/@next/swc-win32-x64-msvc": {
258 | "version": "12.0.9",
259 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.9.tgz",
260 | "integrity": "sha512-1c/sxp/4Qz4F6rCxiYqAnrmghCOFt5hHZ9Kd+rXFW5Mqev4C4XDOUMHdBH55HgnJZqngYhOE0r/XNkCtsIojig==",
261 | "cpu": [
262 | "x64"
263 | ],
264 | "optional": true,
265 | "os": [
266 | "win32"
267 | ],
268 | "engines": {
269 | "node": ">= 10"
270 | }
271 | },
272 | "node_modules/@nodelib/fs.scandir": {
273 | "version": "2.1.5",
274 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
275 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
276 | "dev": true,
277 | "dependencies": {
278 | "@nodelib/fs.stat": "2.0.5",
279 | "run-parallel": "^1.1.9"
280 | },
281 | "engines": {
282 | "node": ">= 8"
283 | }
284 | },
285 | "node_modules/@nodelib/fs.stat": {
286 | "version": "2.0.5",
287 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
288 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
289 | "dev": true,
290 | "engines": {
291 | "node": ">= 8"
292 | }
293 | },
294 | "node_modules/@nodelib/fs.walk": {
295 | "version": "1.2.8",
296 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
297 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
298 | "dev": true,
299 | "dependencies": {
300 | "@nodelib/fs.scandir": "2.1.5",
301 | "fastq": "^1.6.0"
302 | },
303 | "engines": {
304 | "node": ">= 8"
305 | }
306 | },
307 | "node_modules/@types/node": {
308 | "version": "14.14.31",
309 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz",
310 | "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==",
311 | "dev": true
312 | },
313 | "node_modules/@types/parse-json": {
314 | "version": "4.0.0",
315 | "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
316 | "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
317 | "dev": true
318 | },
319 | "node_modules/@types/prop-types": {
320 | "version": "15.7.3",
321 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz",
322 | "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==",
323 | "dev": true
324 | },
325 | "node_modules/@types/react": {
326 | "version": "17.0.2",
327 | "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.2.tgz",
328 | "integrity": "sha512-Xt40xQsrkdvjn1EyWe1Bc0dJLcil/9x2vAuW7ya+PuQip4UYUaXyhzWmAbwRsdMgwOFHpfp7/FFZebDU6Y8VHA==",
329 | "dev": true,
330 | "dependencies": {
331 | "@types/prop-types": "*",
332 | "csstype": "^3.0.2"
333 | }
334 | },
335 | "node_modules/acorn": {
336 | "version": "7.4.1",
337 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
338 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
339 | "dev": true,
340 | "bin": {
341 | "acorn": "bin/acorn"
342 | },
343 | "engines": {
344 | "node": ">=0.4.0"
345 | }
346 | },
347 | "node_modules/acorn-node": {
348 | "version": "1.8.2",
349 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
350 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
351 | "dev": true,
352 | "dependencies": {
353 | "acorn": "^7.0.0",
354 | "acorn-walk": "^7.0.0",
355 | "xtend": "^4.0.2"
356 | }
357 | },
358 | "node_modules/acorn-walk": {
359 | "version": "7.2.0",
360 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
361 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
362 | "dev": true,
363 | "engines": {
364 | "node": ">=0.4.0"
365 | }
366 | },
367 | "node_modules/ansi-styles": {
368 | "version": "3.2.1",
369 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
370 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
371 | "dev": true,
372 | "dependencies": {
373 | "color-convert": "^1.9.0"
374 | },
375 | "engines": {
376 | "node": ">=4"
377 | }
378 | },
379 | "node_modules/anymatch": {
380 | "version": "3.1.2",
381 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
382 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
383 | "dev": true,
384 | "dependencies": {
385 | "normalize-path": "^3.0.0",
386 | "picomatch": "^2.0.4"
387 | },
388 | "engines": {
389 | "node": ">= 8"
390 | }
391 | },
392 | "node_modules/arg": {
393 | "version": "5.0.1",
394 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz",
395 | "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==",
396 | "dev": true
397 | },
398 | "node_modules/autoprefixer": {
399 | "version": "10.4.2",
400 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz",
401 | "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==",
402 | "dev": true,
403 | "dependencies": {
404 | "browserslist": "^4.19.1",
405 | "caniuse-lite": "^1.0.30001297",
406 | "fraction.js": "^4.1.2",
407 | "normalize-range": "^0.1.2",
408 | "picocolors": "^1.0.0",
409 | "postcss-value-parser": "^4.2.0"
410 | },
411 | "bin": {
412 | "autoprefixer": "bin/autoprefixer"
413 | },
414 | "engines": {
415 | "node": "^10 || ^12 || >=14"
416 | },
417 | "funding": {
418 | "type": "opencollective",
419 | "url": "https://opencollective.com/postcss/"
420 | },
421 | "peerDependencies": {
422 | "postcss": "^8.1.0"
423 | }
424 | },
425 | "node_modules/binary-extensions": {
426 | "version": "2.2.0",
427 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
428 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
429 | "dev": true,
430 | "engines": {
431 | "node": ">=8"
432 | }
433 | },
434 | "node_modules/braces": {
435 | "version": "3.0.2",
436 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
437 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
438 | "dev": true,
439 | "dependencies": {
440 | "fill-range": "^7.0.1"
441 | },
442 | "engines": {
443 | "node": ">=8"
444 | }
445 | },
446 | "node_modules/browserslist": {
447 | "version": "4.19.1",
448 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz",
449 | "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
450 | "dev": true,
451 | "dependencies": {
452 | "caniuse-lite": "^1.0.30001286",
453 | "electron-to-chromium": "^1.4.17",
454 | "escalade": "^3.1.1",
455 | "node-releases": "^2.0.1",
456 | "picocolors": "^1.0.0"
457 | },
458 | "bin": {
459 | "browserslist": "cli.js"
460 | },
461 | "engines": {
462 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
463 | },
464 | "funding": {
465 | "type": "opencollective",
466 | "url": "https://opencollective.com/browserslist"
467 | }
468 | },
469 | "node_modules/callsites": {
470 | "version": "3.1.0",
471 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
472 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
473 | "dev": true,
474 | "engines": {
475 | "node": ">=6"
476 | }
477 | },
478 | "node_modules/camelcase-css": {
479 | "version": "2.0.1",
480 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
481 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
482 | "dev": true,
483 | "engines": {
484 | "node": ">= 6"
485 | }
486 | },
487 | "node_modules/caniuse-lite": {
488 | "version": "1.0.30001299",
489 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz",
490 | "integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==",
491 | "funding": {
492 | "type": "opencollective",
493 | "url": "https://opencollective.com/browserslist"
494 | }
495 | },
496 | "node_modules/chalk": {
497 | "version": "2.4.2",
498 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
499 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
500 | "dev": true,
501 | "dependencies": {
502 | "ansi-styles": "^3.2.1",
503 | "escape-string-regexp": "^1.0.5",
504 | "supports-color": "^5.3.0"
505 | },
506 | "engines": {
507 | "node": ">=4"
508 | }
509 | },
510 | "node_modules/color-convert": {
511 | "version": "1.9.3",
512 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
513 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
514 | "dev": true,
515 | "dependencies": {
516 | "color-name": "1.1.3"
517 | }
518 | },
519 | "node_modules/color-name": {
520 | "version": "1.1.3",
521 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
522 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
523 | "dev": true
524 | },
525 | "node_modules/cosmiconfig": {
526 | "version": "7.0.1",
527 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
528 | "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
529 | "dev": true,
530 | "dependencies": {
531 | "@types/parse-json": "^4.0.0",
532 | "import-fresh": "^3.2.1",
533 | "parse-json": "^5.0.0",
534 | "path-type": "^4.0.0",
535 | "yaml": "^1.10.0"
536 | },
537 | "engines": {
538 | "node": ">=10"
539 | }
540 | },
541 | "node_modules/cssesc": {
542 | "version": "3.0.0",
543 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
544 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
545 | "dev": true,
546 | "bin": {
547 | "cssesc": "bin/cssesc"
548 | },
549 | "engines": {
550 | "node": ">=4"
551 | }
552 | },
553 | "node_modules/csstype": {
554 | "version": "3.0.7",
555 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.7.tgz",
556 | "integrity": "sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g==",
557 | "dev": true
558 | },
559 | "node_modules/debounce": {
560 | "version": "1.2.1",
561 | "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
562 | "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug=="
563 | },
564 | "node_modules/defined": {
565 | "version": "1.0.0",
566 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
567 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
568 | "dev": true
569 | },
570 | "node_modules/detective": {
571 | "version": "5.2.0",
572 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
573 | "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
574 | "dev": true,
575 | "dependencies": {
576 | "acorn-node": "^1.6.1",
577 | "defined": "^1.0.0",
578 | "minimist": "^1.1.1"
579 | },
580 | "bin": {
581 | "detective": "bin/detective.js"
582 | },
583 | "engines": {
584 | "node": ">=0.8.0"
585 | }
586 | },
587 | "node_modules/didyoumean": {
588 | "version": "1.2.2",
589 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
590 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
591 | "dev": true
592 | },
593 | "node_modules/dlv": {
594 | "version": "1.1.3",
595 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
596 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
597 | "dev": true
598 | },
599 | "node_modules/electron-to-chromium": {
600 | "version": "1.4.46",
601 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.46.tgz",
602 | "integrity": "sha512-UtV0xUA/dibCKKP2JMxOpDtXR74zABevuUEH4K0tvduFSIoxRVcYmQsbB51kXsFTX8MmOyWMt8tuZAlmDOqkrQ==",
603 | "dev": true
604 | },
605 | "node_modules/error-ex": {
606 | "version": "1.3.2",
607 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
608 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
609 | "dev": true,
610 | "dependencies": {
611 | "is-arrayish": "^0.2.1"
612 | }
613 | },
614 | "node_modules/error-ex/node_modules/is-arrayish": {
615 | "version": "0.2.1",
616 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
617 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
618 | "dev": true
619 | },
620 | "node_modules/escalade": {
621 | "version": "3.1.1",
622 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
623 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
624 | "dev": true,
625 | "engines": {
626 | "node": ">=6"
627 | }
628 | },
629 | "node_modules/escape-string-regexp": {
630 | "version": "1.0.5",
631 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
632 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
633 | "dev": true,
634 | "engines": {
635 | "node": ">=0.8.0"
636 | }
637 | },
638 | "node_modules/fast-glob": {
639 | "version": "3.2.11",
640 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
641 | "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
642 | "dev": true,
643 | "dependencies": {
644 | "@nodelib/fs.stat": "^2.0.2",
645 | "@nodelib/fs.walk": "^1.2.3",
646 | "glob-parent": "^5.1.2",
647 | "merge2": "^1.3.0",
648 | "micromatch": "^4.0.4"
649 | },
650 | "engines": {
651 | "node": ">=8.6.0"
652 | }
653 | },
654 | "node_modules/fastq": {
655 | "version": "1.13.0",
656 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
657 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
658 | "dev": true,
659 | "dependencies": {
660 | "reusify": "^1.0.4"
661 | }
662 | },
663 | "node_modules/fill-range": {
664 | "version": "7.0.1",
665 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
666 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
667 | "dev": true,
668 | "dependencies": {
669 | "to-regex-range": "^5.0.1"
670 | },
671 | "engines": {
672 | "node": ">=8"
673 | }
674 | },
675 | "node_modules/fraction.js": {
676 | "version": "4.1.2",
677 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz",
678 | "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==",
679 | "dev": true,
680 | "engines": {
681 | "node": "*"
682 | },
683 | "funding": {
684 | "type": "patreon",
685 | "url": "https://www.patreon.com/infusion"
686 | }
687 | },
688 | "node_modules/framer-motion": {
689 | "version": "5.6.0",
690 | "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-5.6.0.tgz",
691 | "integrity": "sha512-Y4FtwUU+LUWLKSzoT6Sq538qluvhpe6izdQK8/xZeVjQZ/ORKGfZzyhzcUxNfscqnfEa3dUOA47s+dwrSipdGA==",
692 | "dependencies": {
693 | "framesync": "6.0.1",
694 | "hey-listen": "^1.0.8",
695 | "popmotion": "11.0.3",
696 | "react-merge-refs": "^1.1.0",
697 | "react-use-measure": "^2.1.1",
698 | "style-value-types": "5.0.0",
699 | "tslib": "^2.1.0"
700 | },
701 | "optionalDependencies": {
702 | "@emotion/is-prop-valid": "^0.8.2"
703 | },
704 | "peerDependencies": {
705 | "@react-three/fiber": "*",
706 | "react": ">=16.8 || ^17.0.0",
707 | "react-dom": ">=16.8 || ^17.0.0",
708 | "three": "^0.135.0"
709 | },
710 | "peerDependenciesMeta": {
711 | "@react-three/fiber": {
712 | "optional": true
713 | },
714 | "three": {
715 | "optional": true
716 | }
717 | }
718 | },
719 | "node_modules/framesync": {
720 | "version": "6.0.1",
721 | "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.0.1.tgz",
722 | "integrity": "sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==",
723 | "dependencies": {
724 | "tslib": "^2.1.0"
725 | }
726 | },
727 | "node_modules/fsevents": {
728 | "version": "2.3.2",
729 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
730 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
731 | "dev": true,
732 | "hasInstallScript": true,
733 | "optional": true,
734 | "os": [
735 | "darwin"
736 | ],
737 | "engines": {
738 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
739 | }
740 | },
741 | "node_modules/function-bind": {
742 | "version": "1.1.1",
743 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
744 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
745 | "dev": true
746 | },
747 | "node_modules/glob-parent": {
748 | "version": "5.1.2",
749 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
750 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
751 | "dev": true,
752 | "dependencies": {
753 | "is-glob": "^4.0.1"
754 | },
755 | "engines": {
756 | "node": ">= 6"
757 | }
758 | },
759 | "node_modules/has": {
760 | "version": "1.0.3",
761 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
762 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
763 | "dev": true,
764 | "dependencies": {
765 | "function-bind": "^1.1.1"
766 | },
767 | "engines": {
768 | "node": ">= 0.4.0"
769 | }
770 | },
771 | "node_modules/has-flag": {
772 | "version": "3.0.0",
773 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
774 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
775 | "dev": true,
776 | "engines": {
777 | "node": ">=4"
778 | }
779 | },
780 | "node_modules/hey-listen": {
781 | "version": "1.0.8",
782 | "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz",
783 | "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q=="
784 | },
785 | "node_modules/import-fresh": {
786 | "version": "3.3.0",
787 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
788 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
789 | "dev": true,
790 | "dependencies": {
791 | "parent-module": "^1.0.0",
792 | "resolve-from": "^4.0.0"
793 | },
794 | "engines": {
795 | "node": ">=6"
796 | },
797 | "funding": {
798 | "url": "https://github.com/sponsors/sindresorhus"
799 | }
800 | },
801 | "node_modules/is-binary-path": {
802 | "version": "2.1.0",
803 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
804 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
805 | "dev": true,
806 | "dependencies": {
807 | "binary-extensions": "^2.0.0"
808 | },
809 | "engines": {
810 | "node": ">=8"
811 | }
812 | },
813 | "node_modules/is-core-module": {
814 | "version": "2.8.1",
815 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
816 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
817 | "dev": true,
818 | "dependencies": {
819 | "has": "^1.0.3"
820 | },
821 | "funding": {
822 | "url": "https://github.com/sponsors/ljharb"
823 | }
824 | },
825 | "node_modules/is-extglob": {
826 | "version": "2.1.1",
827 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
828 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
829 | "dev": true,
830 | "engines": {
831 | "node": ">=0.10.0"
832 | }
833 | },
834 | "node_modules/is-glob": {
835 | "version": "4.0.3",
836 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
837 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
838 | "dev": true,
839 | "dependencies": {
840 | "is-extglob": "^2.1.1"
841 | },
842 | "engines": {
843 | "node": ">=0.10.0"
844 | }
845 | },
846 | "node_modules/is-number": {
847 | "version": "7.0.0",
848 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
849 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
850 | "dev": true,
851 | "engines": {
852 | "node": ">=0.12.0"
853 | }
854 | },
855 | "node_modules/js-tokens": {
856 | "version": "4.0.0",
857 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
858 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
859 | },
860 | "node_modules/json-parse-even-better-errors": {
861 | "version": "2.3.1",
862 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
863 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
864 | "dev": true
865 | },
866 | "node_modules/lilconfig": {
867 | "version": "2.0.4",
868 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz",
869 | "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==",
870 | "dev": true,
871 | "engines": {
872 | "node": ">=10"
873 | }
874 | },
875 | "node_modules/lines-and-columns": {
876 | "version": "1.2.4",
877 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
878 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
879 | "dev": true
880 | },
881 | "node_modules/loose-envify": {
882 | "version": "1.4.0",
883 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
884 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
885 | "dependencies": {
886 | "js-tokens": "^3.0.0 || ^4.0.0"
887 | },
888 | "bin": {
889 | "loose-envify": "cli.js"
890 | }
891 | },
892 | "node_modules/merge2": {
893 | "version": "1.4.1",
894 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
895 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
896 | "dev": true,
897 | "engines": {
898 | "node": ">= 8"
899 | }
900 | },
901 | "node_modules/micromatch": {
902 | "version": "4.0.4",
903 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
904 | "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
905 | "dev": true,
906 | "dependencies": {
907 | "braces": "^3.0.1",
908 | "picomatch": "^2.2.3"
909 | },
910 | "engines": {
911 | "node": ">=8.6"
912 | }
913 | },
914 | "node_modules/minimist": {
915 | "version": "1.2.5",
916 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
917 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
918 | "dev": true
919 | },
920 | "node_modules/nanoid": {
921 | "version": "3.2.0",
922 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
923 | "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
924 | "bin": {
925 | "nanoid": "bin/nanoid.cjs"
926 | },
927 | "engines": {
928 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
929 | }
930 | },
931 | "node_modules/next": {
932 | "version": "12.0.9",
933 | "resolved": "https://registry.npmjs.org/next/-/next-12.0.9.tgz",
934 | "integrity": "sha512-omfYqoR/DvbdOIJ6SS1unKJ4mGIxUPs0RPa7wr/Mft22OCKgJhuG+aI9KFYi5ZJBwoFQk1vqaMKpWz5qr+dN0Q==",
935 | "dependencies": {
936 | "@next/env": "12.0.9",
937 | "caniuse-lite": "^1.0.30001283",
938 | "postcss": "8.4.5",
939 | "styled-jsx": "5.0.0",
940 | "use-subscription": "1.5.1"
941 | },
942 | "bin": {
943 | "next": "dist/bin/next"
944 | },
945 | "engines": {
946 | "node": ">=12.22.0"
947 | },
948 | "optionalDependencies": {
949 | "@next/swc-android-arm64": "12.0.9",
950 | "@next/swc-darwin-arm64": "12.0.9",
951 | "@next/swc-darwin-x64": "12.0.9",
952 | "@next/swc-linux-arm-gnueabihf": "12.0.9",
953 | "@next/swc-linux-arm64-gnu": "12.0.9",
954 | "@next/swc-linux-arm64-musl": "12.0.9",
955 | "@next/swc-linux-x64-gnu": "12.0.9",
956 | "@next/swc-linux-x64-musl": "12.0.9",
957 | "@next/swc-win32-arm64-msvc": "12.0.9",
958 | "@next/swc-win32-ia32-msvc": "12.0.9",
959 | "@next/swc-win32-x64-msvc": "12.0.9"
960 | },
961 | "peerDependencies": {
962 | "fibers": ">= 3.1.0",
963 | "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0",
964 | "react": "^17.0.2 || ^18.0.0-0",
965 | "react-dom": "^17.0.2 || ^18.0.0-0",
966 | "sass": "^1.3.0"
967 | },
968 | "peerDependenciesMeta": {
969 | "fibers": {
970 | "optional": true
971 | },
972 | "node-sass": {
973 | "optional": true
974 | },
975 | "sass": {
976 | "optional": true
977 | }
978 | }
979 | },
980 | "node_modules/node-fetch": {
981 | "version": "2.6.7",
982 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
983 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
984 | "dependencies": {
985 | "whatwg-url": "^5.0.0"
986 | },
987 | "engines": {
988 | "node": "4.x || >=6.0.0"
989 | },
990 | "peerDependencies": {
991 | "encoding": "^0.1.0"
992 | },
993 | "peerDependenciesMeta": {
994 | "encoding": {
995 | "optional": true
996 | }
997 | }
998 | },
999 | "node_modules/node-releases": {
1000 | "version": "2.0.1",
1001 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
1002 | "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==",
1003 | "dev": true
1004 | },
1005 | "node_modules/normalize-path": {
1006 | "version": "3.0.0",
1007 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1008 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1009 | "dev": true,
1010 | "engines": {
1011 | "node": ">=0.10.0"
1012 | }
1013 | },
1014 | "node_modules/normalize-range": {
1015 | "version": "0.1.2",
1016 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
1017 | "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
1018 | "dev": true,
1019 | "engines": {
1020 | "node": ">=0.10.0"
1021 | }
1022 | },
1023 | "node_modules/object-assign": {
1024 | "version": "4.1.1",
1025 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1026 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
1027 | "engines": {
1028 | "node": ">=0.10.0"
1029 | }
1030 | },
1031 | "node_modules/object-hash": {
1032 | "version": "2.2.0",
1033 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
1034 | "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
1035 | "dev": true,
1036 | "engines": {
1037 | "node": ">= 6"
1038 | }
1039 | },
1040 | "node_modules/parent-module": {
1041 | "version": "1.0.1",
1042 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
1043 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
1044 | "dev": true,
1045 | "dependencies": {
1046 | "callsites": "^3.0.0"
1047 | },
1048 | "engines": {
1049 | "node": ">=6"
1050 | }
1051 | },
1052 | "node_modules/parse-json": {
1053 | "version": "5.2.0",
1054 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
1055 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
1056 | "dev": true,
1057 | "dependencies": {
1058 | "@babel/code-frame": "^7.0.0",
1059 | "error-ex": "^1.3.1",
1060 | "json-parse-even-better-errors": "^2.3.0",
1061 | "lines-and-columns": "^1.1.6"
1062 | },
1063 | "engines": {
1064 | "node": ">=8"
1065 | },
1066 | "funding": {
1067 | "url": "https://github.com/sponsors/sindresorhus"
1068 | }
1069 | },
1070 | "node_modules/path-parse": {
1071 | "version": "1.0.7",
1072 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1073 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1074 | "dev": true
1075 | },
1076 | "node_modules/path-type": {
1077 | "version": "4.0.0",
1078 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
1079 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
1080 | "dev": true,
1081 | "engines": {
1082 | "node": ">=8"
1083 | }
1084 | },
1085 | "node_modules/picocolors": {
1086 | "version": "1.0.0",
1087 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
1088 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
1089 | },
1090 | "node_modules/picomatch": {
1091 | "version": "2.2.3",
1092 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz",
1093 | "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==",
1094 | "dev": true,
1095 | "engines": {
1096 | "node": ">=8.6"
1097 | },
1098 | "funding": {
1099 | "url": "https://github.com/sponsors/jonschlinkert"
1100 | }
1101 | },
1102 | "node_modules/popmotion": {
1103 | "version": "11.0.3",
1104 | "resolved": "https://registry.npmjs.org/popmotion/-/popmotion-11.0.3.tgz",
1105 | "integrity": "sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==",
1106 | "dependencies": {
1107 | "framesync": "6.0.1",
1108 | "hey-listen": "^1.0.8",
1109 | "style-value-types": "5.0.0",
1110 | "tslib": "^2.1.0"
1111 | }
1112 | },
1113 | "node_modules/postcss": {
1114 | "version": "8.4.5",
1115 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
1116 | "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
1117 | "dependencies": {
1118 | "nanoid": "^3.1.30",
1119 | "picocolors": "^1.0.0",
1120 | "source-map-js": "^1.0.1"
1121 | },
1122 | "engines": {
1123 | "node": "^10 || ^12 || >=14"
1124 | },
1125 | "funding": {
1126 | "type": "opencollective",
1127 | "url": "https://opencollective.com/postcss/"
1128 | }
1129 | },
1130 | "node_modules/postcss-js": {
1131 | "version": "4.0.0",
1132 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
1133 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
1134 | "dev": true,
1135 | "dependencies": {
1136 | "camelcase-css": "^2.0.1"
1137 | },
1138 | "engines": {
1139 | "node": "^12 || ^14 || >= 16"
1140 | },
1141 | "funding": {
1142 | "type": "opencollective",
1143 | "url": "https://opencollective.com/postcss/"
1144 | },
1145 | "peerDependencies": {
1146 | "postcss": "^8.3.3"
1147 | }
1148 | },
1149 | "node_modules/postcss-load-config": {
1150 | "version": "3.1.1",
1151 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz",
1152 | "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==",
1153 | "dev": true,
1154 | "dependencies": {
1155 | "lilconfig": "^2.0.4",
1156 | "yaml": "^1.10.2"
1157 | },
1158 | "engines": {
1159 | "node": ">= 10"
1160 | },
1161 | "funding": {
1162 | "type": "opencollective",
1163 | "url": "https://opencollective.com/postcss/"
1164 | },
1165 | "peerDependencies": {
1166 | "ts-node": ">=9.0.0"
1167 | },
1168 | "peerDependenciesMeta": {
1169 | "ts-node": {
1170 | "optional": true
1171 | }
1172 | }
1173 | },
1174 | "node_modules/postcss-nested": {
1175 | "version": "5.0.6",
1176 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
1177 | "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
1178 | "dev": true,
1179 | "dependencies": {
1180 | "postcss-selector-parser": "^6.0.6"
1181 | },
1182 | "engines": {
1183 | "node": ">=12.0"
1184 | },
1185 | "funding": {
1186 | "type": "opencollective",
1187 | "url": "https://opencollective.com/postcss/"
1188 | },
1189 | "peerDependencies": {
1190 | "postcss": "^8.2.14"
1191 | }
1192 | },
1193 | "node_modules/postcss-selector-parser": {
1194 | "version": "6.0.8",
1195 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz",
1196 | "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==",
1197 | "dev": true,
1198 | "dependencies": {
1199 | "cssesc": "^3.0.0",
1200 | "util-deprecate": "^1.0.2"
1201 | },
1202 | "engines": {
1203 | "node": ">=4"
1204 | }
1205 | },
1206 | "node_modules/postcss-value-parser": {
1207 | "version": "4.2.0",
1208 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
1209 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
1210 | "dev": true
1211 | },
1212 | "node_modules/queue-microtask": {
1213 | "version": "1.2.3",
1214 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
1215 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
1216 | "dev": true,
1217 | "funding": [
1218 | {
1219 | "type": "github",
1220 | "url": "https://github.com/sponsors/feross"
1221 | },
1222 | {
1223 | "type": "patreon",
1224 | "url": "https://www.patreon.com/feross"
1225 | },
1226 | {
1227 | "type": "consulting",
1228 | "url": "https://feross.org/support"
1229 | }
1230 | ]
1231 | },
1232 | "node_modules/quick-lru": {
1233 | "version": "5.1.1",
1234 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
1235 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
1236 | "dev": true,
1237 | "engines": {
1238 | "node": ">=10"
1239 | },
1240 | "funding": {
1241 | "url": "https://github.com/sponsors/sindresorhus"
1242 | }
1243 | },
1244 | "node_modules/react": {
1245 | "version": "17.0.2",
1246 | "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
1247 | "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
1248 | "dependencies": {
1249 | "loose-envify": "^1.1.0",
1250 | "object-assign": "^4.1.1"
1251 | },
1252 | "engines": {
1253 | "node": ">=0.10.0"
1254 | }
1255 | },
1256 | "node_modules/react-dom": {
1257 | "version": "17.0.2",
1258 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
1259 | "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
1260 | "dependencies": {
1261 | "loose-envify": "^1.1.0",
1262 | "object-assign": "^4.1.1",
1263 | "scheduler": "^0.20.2"
1264 | },
1265 | "peerDependencies": {
1266 | "react": "17.0.2"
1267 | }
1268 | },
1269 | "node_modules/react-merge-refs": {
1270 | "version": "1.1.0",
1271 | "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz",
1272 | "integrity": "sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==",
1273 | "funding": {
1274 | "type": "github",
1275 | "url": "https://github.com/sponsors/gregberge"
1276 | }
1277 | },
1278 | "node_modules/react-use-measure": {
1279 | "version": "2.1.1",
1280 | "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.1.tgz",
1281 | "integrity": "sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==",
1282 | "dependencies": {
1283 | "debounce": "^1.2.1"
1284 | },
1285 | "peerDependencies": {
1286 | "react": ">=16.13",
1287 | "react-dom": ">=16.13"
1288 | }
1289 | },
1290 | "node_modules/resolve": {
1291 | "version": "1.21.0",
1292 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz",
1293 | "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==",
1294 | "dev": true,
1295 | "dependencies": {
1296 | "is-core-module": "^2.8.0",
1297 | "path-parse": "^1.0.7",
1298 | "supports-preserve-symlinks-flag": "^1.0.0"
1299 | },
1300 | "bin": {
1301 | "resolve": "bin/resolve"
1302 | },
1303 | "funding": {
1304 | "url": "https://github.com/sponsors/ljharb"
1305 | }
1306 | },
1307 | "node_modules/resolve-from": {
1308 | "version": "4.0.0",
1309 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
1310 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
1311 | "dev": true,
1312 | "engines": {
1313 | "node": ">=4"
1314 | }
1315 | },
1316 | "node_modules/reusify": {
1317 | "version": "1.0.4",
1318 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
1319 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
1320 | "dev": true,
1321 | "engines": {
1322 | "iojs": ">=1.0.0",
1323 | "node": ">=0.10.0"
1324 | }
1325 | },
1326 | "node_modules/run-parallel": {
1327 | "version": "1.2.0",
1328 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
1329 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
1330 | "dev": true,
1331 | "funding": [
1332 | {
1333 | "type": "github",
1334 | "url": "https://github.com/sponsors/feross"
1335 | },
1336 | {
1337 | "type": "patreon",
1338 | "url": "https://www.patreon.com/feross"
1339 | },
1340 | {
1341 | "type": "consulting",
1342 | "url": "https://feross.org/support"
1343 | }
1344 | ],
1345 | "dependencies": {
1346 | "queue-microtask": "^1.2.2"
1347 | }
1348 | },
1349 | "node_modules/scheduler": {
1350 | "version": "0.20.2",
1351 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
1352 | "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
1353 | "dependencies": {
1354 | "loose-envify": "^1.1.0",
1355 | "object-assign": "^4.1.1"
1356 | }
1357 | },
1358 | "node_modules/source-map-js": {
1359 | "version": "1.0.1",
1360 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz",
1361 | "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==",
1362 | "engines": {
1363 | "node": ">=0.10.0"
1364 | }
1365 | },
1366 | "node_modules/style-value-types": {
1367 | "version": "5.0.0",
1368 | "resolved": "https://registry.npmjs.org/style-value-types/-/style-value-types-5.0.0.tgz",
1369 | "integrity": "sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==",
1370 | "dependencies": {
1371 | "hey-listen": "^1.0.8",
1372 | "tslib": "^2.1.0"
1373 | }
1374 | },
1375 | "node_modules/styled-jsx": {
1376 | "version": "5.0.0",
1377 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.0.tgz",
1378 | "integrity": "sha512-qUqsWoBquEdERe10EW8vLp3jT25s/ssG1/qX5gZ4wu15OZpmSMFI2v+fWlRhLfykA5rFtlJ1ME8A8pm/peV4WA==",
1379 | "engines": {
1380 | "node": ">= 12.0.0"
1381 | },
1382 | "peerDependencies": {
1383 | "react": ">= 16.8.0 || 17.x.x || 18.x.x"
1384 | },
1385 | "peerDependenciesMeta": {
1386 | "@babel/core": {
1387 | "optional": true
1388 | },
1389 | "babel-plugin-macros": {
1390 | "optional": true
1391 | }
1392 | }
1393 | },
1394 | "node_modules/supports-color": {
1395 | "version": "5.5.0",
1396 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1397 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1398 | "dev": true,
1399 | "dependencies": {
1400 | "has-flag": "^3.0.0"
1401 | },
1402 | "engines": {
1403 | "node": ">=4"
1404 | }
1405 | },
1406 | "node_modules/supports-preserve-symlinks-flag": {
1407 | "version": "1.0.0",
1408 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1409 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
1410 | "dev": true,
1411 | "engines": {
1412 | "node": ">= 0.4"
1413 | },
1414 | "funding": {
1415 | "url": "https://github.com/sponsors/ljharb"
1416 | }
1417 | },
1418 | "node_modules/tailwindcss": {
1419 | "version": "3.0.15",
1420 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.15.tgz",
1421 | "integrity": "sha512-bT2iy7FtjwgsXik4ZoJnHXR+SRCiGR1W95fVqpLZebr64m4ahwUwRbIAc5w5+2fzr1YF4Ct2eI7dojMRRl8sVQ==",
1422 | "dev": true,
1423 | "dependencies": {
1424 | "arg": "^5.0.1",
1425 | "chalk": "^4.1.2",
1426 | "chokidar": "^3.5.2",
1427 | "color-name": "^1.1.4",
1428 | "cosmiconfig": "^7.0.1",
1429 | "detective": "^5.2.0",
1430 | "didyoumean": "^1.2.2",
1431 | "dlv": "^1.1.3",
1432 | "fast-glob": "^3.2.7",
1433 | "glob-parent": "^6.0.2",
1434 | "is-glob": "^4.0.3",
1435 | "normalize-path": "^3.0.0",
1436 | "object-hash": "^2.2.0",
1437 | "postcss-js": "^4.0.0",
1438 | "postcss-load-config": "^3.1.0",
1439 | "postcss-nested": "5.0.6",
1440 | "postcss-selector-parser": "^6.0.8",
1441 | "postcss-value-parser": "^4.2.0",
1442 | "quick-lru": "^5.1.1",
1443 | "resolve": "^1.21.0"
1444 | },
1445 | "bin": {
1446 | "tailwind": "lib/cli.js",
1447 | "tailwindcss": "lib/cli.js"
1448 | },
1449 | "engines": {
1450 | "node": ">=12.13.0"
1451 | },
1452 | "peerDependencies": {
1453 | "autoprefixer": "^10.0.2",
1454 | "postcss": "^8.0.9"
1455 | }
1456 | },
1457 | "node_modules/tailwindcss/node_modules/ansi-styles": {
1458 | "version": "4.3.0",
1459 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1460 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1461 | "dev": true,
1462 | "dependencies": {
1463 | "color-convert": "^2.0.1"
1464 | },
1465 | "engines": {
1466 | "node": ">=8"
1467 | },
1468 | "funding": {
1469 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1470 | }
1471 | },
1472 | "node_modules/tailwindcss/node_modules/chalk": {
1473 | "version": "4.1.2",
1474 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
1475 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1476 | "dev": true,
1477 | "dependencies": {
1478 | "ansi-styles": "^4.1.0",
1479 | "supports-color": "^7.1.0"
1480 | },
1481 | "engines": {
1482 | "node": ">=10"
1483 | },
1484 | "funding": {
1485 | "url": "https://github.com/chalk/chalk?sponsor=1"
1486 | }
1487 | },
1488 | "node_modules/tailwindcss/node_modules/chokidar": {
1489 | "version": "3.5.2",
1490 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
1491 | "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
1492 | "dev": true,
1493 | "dependencies": {
1494 | "anymatch": "~3.1.2",
1495 | "braces": "~3.0.2",
1496 | "glob-parent": "~5.1.2",
1497 | "is-binary-path": "~2.1.0",
1498 | "is-glob": "~4.0.1",
1499 | "normalize-path": "~3.0.0",
1500 | "readdirp": "~3.6.0"
1501 | },
1502 | "engines": {
1503 | "node": ">= 8.10.0"
1504 | },
1505 | "optionalDependencies": {
1506 | "fsevents": "~2.3.2"
1507 | }
1508 | },
1509 | "node_modules/tailwindcss/node_modules/chokidar/node_modules/glob-parent": {
1510 | "version": "5.1.2",
1511 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1512 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1513 | "dev": true,
1514 | "dependencies": {
1515 | "is-glob": "^4.0.1"
1516 | },
1517 | "engines": {
1518 | "node": ">= 6"
1519 | }
1520 | },
1521 | "node_modules/tailwindcss/node_modules/color-convert": {
1522 | "version": "2.0.1",
1523 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1524 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1525 | "dev": true,
1526 | "dependencies": {
1527 | "color-name": "~1.1.4"
1528 | },
1529 | "engines": {
1530 | "node": ">=7.0.0"
1531 | }
1532 | },
1533 | "node_modules/tailwindcss/node_modules/color-name": {
1534 | "version": "1.1.4",
1535 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1536 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1537 | "dev": true
1538 | },
1539 | "node_modules/tailwindcss/node_modules/glob-parent": {
1540 | "version": "6.0.2",
1541 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
1542 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
1543 | "dev": true,
1544 | "dependencies": {
1545 | "is-glob": "^4.0.3"
1546 | },
1547 | "engines": {
1548 | "node": ">=10.13.0"
1549 | }
1550 | },
1551 | "node_modules/tailwindcss/node_modules/has-flag": {
1552 | "version": "4.0.0",
1553 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1554 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1555 | "dev": true,
1556 | "engines": {
1557 | "node": ">=8"
1558 | }
1559 | },
1560 | "node_modules/tailwindcss/node_modules/readdirp": {
1561 | "version": "3.6.0",
1562 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
1563 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
1564 | "dev": true,
1565 | "dependencies": {
1566 | "picomatch": "^2.2.1"
1567 | },
1568 | "engines": {
1569 | "node": ">=8.10.0"
1570 | }
1571 | },
1572 | "node_modules/tailwindcss/node_modules/supports-color": {
1573 | "version": "7.2.0",
1574 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1575 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1576 | "dev": true,
1577 | "dependencies": {
1578 | "has-flag": "^4.0.0"
1579 | },
1580 | "engines": {
1581 | "node": ">=8"
1582 | }
1583 | },
1584 | "node_modules/to-regex-range": {
1585 | "version": "5.0.1",
1586 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1587 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1588 | "dev": true,
1589 | "dependencies": {
1590 | "is-number": "^7.0.0"
1591 | },
1592 | "engines": {
1593 | "node": ">=8.0"
1594 | }
1595 | },
1596 | "node_modules/tr46": {
1597 | "version": "0.0.3",
1598 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
1599 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
1600 | },
1601 | "node_modules/tslib": {
1602 | "version": "2.3.1",
1603 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
1604 | "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
1605 | },
1606 | "node_modules/typescript": {
1607 | "version": "4.5.5",
1608 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
1609 | "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
1610 | "dev": true,
1611 | "bin": {
1612 | "tsc": "bin/tsc",
1613 | "tsserver": "bin/tsserver"
1614 | },
1615 | "engines": {
1616 | "node": ">=4.2.0"
1617 | }
1618 | },
1619 | "node_modules/use-subscription": {
1620 | "version": "1.5.1",
1621 | "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz",
1622 | "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==",
1623 | "dependencies": {
1624 | "object-assign": "^4.1.1"
1625 | },
1626 | "peerDependencies": {
1627 | "react": "^16.8.0 || ^17.0.0"
1628 | }
1629 | },
1630 | "node_modules/util-deprecate": {
1631 | "version": "1.0.2",
1632 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1633 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
1634 | "dev": true
1635 | },
1636 | "node_modules/webidl-conversions": {
1637 | "version": "3.0.1",
1638 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
1639 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
1640 | },
1641 | "node_modules/whatwg-url": {
1642 | "version": "5.0.0",
1643 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
1644 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
1645 | "dependencies": {
1646 | "tr46": "~0.0.3",
1647 | "webidl-conversions": "^3.0.0"
1648 | }
1649 | },
1650 | "node_modules/xtend": {
1651 | "version": "4.0.2",
1652 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
1653 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
1654 | "dev": true,
1655 | "engines": {
1656 | "node": ">=0.4"
1657 | }
1658 | },
1659 | "node_modules/yaml": {
1660 | "version": "1.10.2",
1661 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
1662 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
1663 | "dev": true,
1664 | "engines": {
1665 | "node": ">= 6"
1666 | }
1667 | }
1668 | },
1669 | "dependencies": {
1670 | "@babel/code-frame": {
1671 | "version": "7.16.7",
1672 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
1673 | "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
1674 | "dev": true,
1675 | "requires": {
1676 | "@babel/highlight": "^7.16.7"
1677 | }
1678 | },
1679 | "@babel/helper-validator-identifier": {
1680 | "version": "7.16.7",
1681 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
1682 | "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
1683 | "dev": true
1684 | },
1685 | "@babel/highlight": {
1686 | "version": "7.16.7",
1687 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz",
1688 | "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==",
1689 | "dev": true,
1690 | "requires": {
1691 | "@babel/helper-validator-identifier": "^7.16.7",
1692 | "chalk": "^2.0.0",
1693 | "js-tokens": "^4.0.0"
1694 | }
1695 | },
1696 | "@emotion/is-prop-valid": {
1697 | "version": "0.8.8",
1698 | "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz",
1699 | "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==",
1700 | "optional": true,
1701 | "requires": {
1702 | "@emotion/memoize": "0.7.4"
1703 | }
1704 | },
1705 | "@emotion/memoize": {
1706 | "version": "0.7.4",
1707 | "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
1708 | "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==",
1709 | "optional": true
1710 | },
1711 | "@liveblocks/client": {
1712 | "version": "0.14.0",
1713 | "resolved": "https://registry.npmjs.org/@liveblocks/client/-/client-0.14.0.tgz",
1714 | "integrity": "sha512-I1nykCqYSpuBQhP1kZplYqL6L0+C1JocW01UKgPz+tthOOGdTdsNBHPcMigxou4vsOQutUuEJUcaDsd1or4A+Q=="
1715 | },
1716 | "@liveblocks/node": {
1717 | "version": "0.3.0",
1718 | "resolved": "https://registry.npmjs.org/@liveblocks/node/-/node-0.3.0.tgz",
1719 | "integrity": "sha512-3IJ6uN3QU71z6WXiDM97wW17fVVvrG9zMy4G4PY3zYzmeRfMnA+KBSBT1uPvlfgWm2D3d6/HNIXWxhwyv7bkfw==",
1720 | "requires": {
1721 | "node-fetch": "^2.6.1"
1722 | }
1723 | },
1724 | "@liveblocks/react": {
1725 | "version": "0.14.0",
1726 | "resolved": "https://registry.npmjs.org/@liveblocks/react/-/react-0.14.0.tgz",
1727 | "integrity": "sha512-KGuEEmifh3A9OEHTYaR3+yxIQOhdAQG59d0eOqKbyV/I0X6IoX4kAtXZjnZllrWrTwnnSY2aPFESthtt19t6EQ==",
1728 | "requires": {}
1729 | },
1730 | "@next/env": {
1731 | "version": "12.0.9",
1732 | "resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.9.tgz",
1733 | "integrity": "sha512-oBlkyDop0Stf7MPIzETGv5r0YT/G/weBrknoPOUTaa5qwOeGjuy6gsOVc/SBtrBkOoBmRpD+fFhQJPvmo1mS+g=="
1734 | },
1735 | "@next/swc-android-arm64": {
1736 | "version": "12.0.9",
1737 | "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.9.tgz",
1738 | "integrity": "sha512-aVqgsEn5plmUH2X58sjzhHsH/6majucWTMaaBEs7hHO2+GCwCZc7zaLH4XCBMKPES9Yaja8/pYUbvZQE9DqgFw==",
1739 | "optional": true
1740 | },
1741 | "@next/swc-darwin-arm64": {
1742 | "version": "12.0.9",
1743 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.9.tgz",
1744 | "integrity": "sha512-uAgRKm4a2nVdyBiPPJokvmDD1saugOvxljz9ld2ih0CCg5S9vBhqaj3kPGCQBj9hSu3q+Lng2CHnQqG3ga1jzA==",
1745 | "optional": true
1746 | },
1747 | "@next/swc-darwin-x64": {
1748 | "version": "12.0.9",
1749 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.9.tgz",
1750 | "integrity": "sha512-fDOs2lZIyrAdU18IxMA5orBPn9qLbOdu55gXSTNZOhyRJ8ugtbUAejsK7OL0boJy0CCHPAdVRXm01Mwk8tZ9RQ==",
1751 | "optional": true
1752 | },
1753 | "@next/swc-linux-arm-gnueabihf": {
1754 | "version": "12.0.9",
1755 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.9.tgz",
1756 | "integrity": "sha512-/ni0p9DBvATUML9RQ1ycQuf05uOYKdzA6iI8+eRsARjpGbFVUFbge7XPzlj9g2Q9YWgoN8CSjFGnKRlyky5uHA==",
1757 | "optional": true
1758 | },
1759 | "@next/swc-linux-arm64-gnu": {
1760 | "version": "12.0.9",
1761 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.9.tgz",
1762 | "integrity": "sha512-AphxilJDf95rUxJDHgM9Ww1DaYXZWqTvoKwXeej/0SgSvICcRZrLaFDrkojdXz0Rxr4igX2OdYR1S4/Hj1jWOQ==",
1763 | "optional": true
1764 | },
1765 | "@next/swc-linux-arm64-musl": {
1766 | "version": "12.0.9",
1767 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.9.tgz",
1768 | "integrity": "sha512-K5jbvNNzF3mRjWmPdxP5Bg87i7FHivfBj/L0KJlxpkLSC8sffBJDmB6jtMnI7wiPj9J6vmLkbGtSosln78xAlQ==",
1769 | "optional": true
1770 | },
1771 | "@next/swc-linux-x64-gnu": {
1772 | "version": "12.0.9",
1773 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.9.tgz",
1774 | "integrity": "sha512-bJZ9bkMkQzsY+UyWezEZ77GWQ4TzwKeXdayX3U3+aEkL8k5C6eKBXlidWdrhu0teLmaUXIyWerWrLnJzwGXdfw==",
1775 | "optional": true
1776 | },
1777 | "@next/swc-linux-x64-musl": {
1778 | "version": "12.0.9",
1779 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.9.tgz",
1780 | "integrity": "sha512-SR9p0R+v1T32DTXPVAXZw31pmJAkSDotC6Afy+mfC0xrEL3pp95R8sGXYAAUCEPkQp0MEeUOVy2LrToe92X7hQ==",
1781 | "optional": true
1782 | },
1783 | "@next/swc-win32-arm64-msvc": {
1784 | "version": "12.0.9",
1785 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.9.tgz",
1786 | "integrity": "sha512-mzQ1A8vfHhJrvEy5KJZGZWEByXthyKfWofvFaf+oo/5nJl/0Bz1ODP2ajSmbLG++77Eo2AROgbm9pkW1ucvG2A==",
1787 | "optional": true
1788 | },
1789 | "@next/swc-win32-ia32-msvc": {
1790 | "version": "12.0.9",
1791 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.9.tgz",
1792 | "integrity": "sha512-MpD2vj1zjo1u3J3wiz3pEKse19Etz+P0GL6XfQkB/9a84vJQ1JWMaWBjmIdivzZv718Il2pRSSx8hymwPfguYQ==",
1793 | "optional": true
1794 | },
1795 | "@next/swc-win32-x64-msvc": {
1796 | "version": "12.0.9",
1797 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.9.tgz",
1798 | "integrity": "sha512-1c/sxp/4Qz4F6rCxiYqAnrmghCOFt5hHZ9Kd+rXFW5Mqev4C4XDOUMHdBH55HgnJZqngYhOE0r/XNkCtsIojig==",
1799 | "optional": true
1800 | },
1801 | "@nodelib/fs.scandir": {
1802 | "version": "2.1.5",
1803 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
1804 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
1805 | "dev": true,
1806 | "requires": {
1807 | "@nodelib/fs.stat": "2.0.5",
1808 | "run-parallel": "^1.1.9"
1809 | }
1810 | },
1811 | "@nodelib/fs.stat": {
1812 | "version": "2.0.5",
1813 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
1814 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
1815 | "dev": true
1816 | },
1817 | "@nodelib/fs.walk": {
1818 | "version": "1.2.8",
1819 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
1820 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
1821 | "dev": true,
1822 | "requires": {
1823 | "@nodelib/fs.scandir": "2.1.5",
1824 | "fastq": "^1.6.0"
1825 | }
1826 | },
1827 | "@types/node": {
1828 | "version": "14.14.31",
1829 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz",
1830 | "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==",
1831 | "dev": true
1832 | },
1833 | "@types/parse-json": {
1834 | "version": "4.0.0",
1835 | "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
1836 | "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
1837 | "dev": true
1838 | },
1839 | "@types/prop-types": {
1840 | "version": "15.7.3",
1841 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz",
1842 | "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==",
1843 | "dev": true
1844 | },
1845 | "@types/react": {
1846 | "version": "17.0.2",
1847 | "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.2.tgz",
1848 | "integrity": "sha512-Xt40xQsrkdvjn1EyWe1Bc0dJLcil/9x2vAuW7ya+PuQip4UYUaXyhzWmAbwRsdMgwOFHpfp7/FFZebDU6Y8VHA==",
1849 | "dev": true,
1850 | "requires": {
1851 | "@types/prop-types": "*",
1852 | "csstype": "^3.0.2"
1853 | }
1854 | },
1855 | "acorn": {
1856 | "version": "7.4.1",
1857 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
1858 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
1859 | "dev": true
1860 | },
1861 | "acorn-node": {
1862 | "version": "1.8.2",
1863 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
1864 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
1865 | "dev": true,
1866 | "requires": {
1867 | "acorn": "^7.0.0",
1868 | "acorn-walk": "^7.0.0",
1869 | "xtend": "^4.0.2"
1870 | }
1871 | },
1872 | "acorn-walk": {
1873 | "version": "7.2.0",
1874 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
1875 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
1876 | "dev": true
1877 | },
1878 | "ansi-styles": {
1879 | "version": "3.2.1",
1880 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1881 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1882 | "dev": true,
1883 | "requires": {
1884 | "color-convert": "^1.9.0"
1885 | }
1886 | },
1887 | "anymatch": {
1888 | "version": "3.1.2",
1889 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
1890 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
1891 | "dev": true,
1892 | "requires": {
1893 | "normalize-path": "^3.0.0",
1894 | "picomatch": "^2.0.4"
1895 | }
1896 | },
1897 | "arg": {
1898 | "version": "5.0.1",
1899 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz",
1900 | "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==",
1901 | "dev": true
1902 | },
1903 | "autoprefixer": {
1904 | "version": "10.4.2",
1905 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz",
1906 | "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==",
1907 | "dev": true,
1908 | "requires": {
1909 | "browserslist": "^4.19.1",
1910 | "caniuse-lite": "^1.0.30001297",
1911 | "fraction.js": "^4.1.2",
1912 | "normalize-range": "^0.1.2",
1913 | "picocolors": "^1.0.0",
1914 | "postcss-value-parser": "^4.2.0"
1915 | }
1916 | },
1917 | "binary-extensions": {
1918 | "version": "2.2.0",
1919 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
1920 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
1921 | "dev": true
1922 | },
1923 | "braces": {
1924 | "version": "3.0.2",
1925 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
1926 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
1927 | "dev": true,
1928 | "requires": {
1929 | "fill-range": "^7.0.1"
1930 | }
1931 | },
1932 | "browserslist": {
1933 | "version": "4.19.1",
1934 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz",
1935 | "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
1936 | "dev": true,
1937 | "requires": {
1938 | "caniuse-lite": "^1.0.30001286",
1939 | "electron-to-chromium": "^1.4.17",
1940 | "escalade": "^3.1.1",
1941 | "node-releases": "^2.0.1",
1942 | "picocolors": "^1.0.0"
1943 | }
1944 | },
1945 | "callsites": {
1946 | "version": "3.1.0",
1947 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
1948 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
1949 | "dev": true
1950 | },
1951 | "camelcase-css": {
1952 | "version": "2.0.1",
1953 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
1954 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
1955 | "dev": true
1956 | },
1957 | "caniuse-lite": {
1958 | "version": "1.0.30001299",
1959 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz",
1960 | "integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw=="
1961 | },
1962 | "chalk": {
1963 | "version": "2.4.2",
1964 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
1965 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
1966 | "dev": true,
1967 | "requires": {
1968 | "ansi-styles": "^3.2.1",
1969 | "escape-string-regexp": "^1.0.5",
1970 | "supports-color": "^5.3.0"
1971 | }
1972 | },
1973 | "color-convert": {
1974 | "version": "1.9.3",
1975 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
1976 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
1977 | "dev": true,
1978 | "requires": {
1979 | "color-name": "1.1.3"
1980 | }
1981 | },
1982 | "color-name": {
1983 | "version": "1.1.3",
1984 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
1985 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
1986 | "dev": true
1987 | },
1988 | "cosmiconfig": {
1989 | "version": "7.0.1",
1990 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
1991 | "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
1992 | "dev": true,
1993 | "requires": {
1994 | "@types/parse-json": "^4.0.0",
1995 | "import-fresh": "^3.2.1",
1996 | "parse-json": "^5.0.0",
1997 | "path-type": "^4.0.0",
1998 | "yaml": "^1.10.0"
1999 | }
2000 | },
2001 | "cssesc": {
2002 | "version": "3.0.0",
2003 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
2004 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
2005 | "dev": true
2006 | },
2007 | "csstype": {
2008 | "version": "3.0.7",
2009 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.7.tgz",
2010 | "integrity": "sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g==",
2011 | "dev": true
2012 | },
2013 | "debounce": {
2014 | "version": "1.2.1",
2015 | "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
2016 | "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug=="
2017 | },
2018 | "defined": {
2019 | "version": "1.0.0",
2020 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
2021 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
2022 | "dev": true
2023 | },
2024 | "detective": {
2025 | "version": "5.2.0",
2026 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
2027 | "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
2028 | "dev": true,
2029 | "requires": {
2030 | "acorn-node": "^1.6.1",
2031 | "defined": "^1.0.0",
2032 | "minimist": "^1.1.1"
2033 | }
2034 | },
2035 | "didyoumean": {
2036 | "version": "1.2.2",
2037 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
2038 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
2039 | "dev": true
2040 | },
2041 | "dlv": {
2042 | "version": "1.1.3",
2043 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
2044 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
2045 | "dev": true
2046 | },
2047 | "electron-to-chromium": {
2048 | "version": "1.4.46",
2049 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.46.tgz",
2050 | "integrity": "sha512-UtV0xUA/dibCKKP2JMxOpDtXR74zABevuUEH4K0tvduFSIoxRVcYmQsbB51kXsFTX8MmOyWMt8tuZAlmDOqkrQ==",
2051 | "dev": true
2052 | },
2053 | "error-ex": {
2054 | "version": "1.3.2",
2055 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
2056 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
2057 | "dev": true,
2058 | "requires": {
2059 | "is-arrayish": "^0.2.1"
2060 | },
2061 | "dependencies": {
2062 | "is-arrayish": {
2063 | "version": "0.2.1",
2064 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
2065 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
2066 | "dev": true
2067 | }
2068 | }
2069 | },
2070 | "escalade": {
2071 | "version": "3.1.1",
2072 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
2073 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
2074 | "dev": true
2075 | },
2076 | "escape-string-regexp": {
2077 | "version": "1.0.5",
2078 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
2079 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
2080 | "dev": true
2081 | },
2082 | "fast-glob": {
2083 | "version": "3.2.11",
2084 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
2085 | "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
2086 | "dev": true,
2087 | "requires": {
2088 | "@nodelib/fs.stat": "^2.0.2",
2089 | "@nodelib/fs.walk": "^1.2.3",
2090 | "glob-parent": "^5.1.2",
2091 | "merge2": "^1.3.0",
2092 | "micromatch": "^4.0.4"
2093 | }
2094 | },
2095 | "fastq": {
2096 | "version": "1.13.0",
2097 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
2098 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
2099 | "dev": true,
2100 | "requires": {
2101 | "reusify": "^1.0.4"
2102 | }
2103 | },
2104 | "fill-range": {
2105 | "version": "7.0.1",
2106 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
2107 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
2108 | "dev": true,
2109 | "requires": {
2110 | "to-regex-range": "^5.0.1"
2111 | }
2112 | },
2113 | "fraction.js": {
2114 | "version": "4.1.2",
2115 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz",
2116 | "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==",
2117 | "dev": true
2118 | },
2119 | "framer-motion": {
2120 | "version": "5.6.0",
2121 | "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-5.6.0.tgz",
2122 | "integrity": "sha512-Y4FtwUU+LUWLKSzoT6Sq538qluvhpe6izdQK8/xZeVjQZ/ORKGfZzyhzcUxNfscqnfEa3dUOA47s+dwrSipdGA==",
2123 | "requires": {
2124 | "@emotion/is-prop-valid": "^0.8.2",
2125 | "framesync": "6.0.1",
2126 | "hey-listen": "^1.0.8",
2127 | "popmotion": "11.0.3",
2128 | "react-merge-refs": "^1.1.0",
2129 | "react-use-measure": "^2.1.1",
2130 | "style-value-types": "5.0.0",
2131 | "tslib": "^2.1.0"
2132 | }
2133 | },
2134 | "framesync": {
2135 | "version": "6.0.1",
2136 | "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.0.1.tgz",
2137 | "integrity": "sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==",
2138 | "requires": {
2139 | "tslib": "^2.1.0"
2140 | }
2141 | },
2142 | "fsevents": {
2143 | "version": "2.3.2",
2144 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
2145 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
2146 | "dev": true,
2147 | "optional": true
2148 | },
2149 | "function-bind": {
2150 | "version": "1.1.1",
2151 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
2152 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
2153 | "dev": true
2154 | },
2155 | "glob-parent": {
2156 | "version": "5.1.2",
2157 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
2158 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
2159 | "dev": true,
2160 | "requires": {
2161 | "is-glob": "^4.0.1"
2162 | }
2163 | },
2164 | "has": {
2165 | "version": "1.0.3",
2166 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
2167 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
2168 | "dev": true,
2169 | "requires": {
2170 | "function-bind": "^1.1.1"
2171 | }
2172 | },
2173 | "has-flag": {
2174 | "version": "3.0.0",
2175 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
2176 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
2177 | "dev": true
2178 | },
2179 | "hey-listen": {
2180 | "version": "1.0.8",
2181 | "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz",
2182 | "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q=="
2183 | },
2184 | "import-fresh": {
2185 | "version": "3.3.0",
2186 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
2187 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
2188 | "dev": true,
2189 | "requires": {
2190 | "parent-module": "^1.0.0",
2191 | "resolve-from": "^4.0.0"
2192 | }
2193 | },
2194 | "is-binary-path": {
2195 | "version": "2.1.0",
2196 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
2197 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
2198 | "dev": true,
2199 | "requires": {
2200 | "binary-extensions": "^2.0.0"
2201 | }
2202 | },
2203 | "is-core-module": {
2204 | "version": "2.8.1",
2205 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
2206 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
2207 | "dev": true,
2208 | "requires": {
2209 | "has": "^1.0.3"
2210 | }
2211 | },
2212 | "is-extglob": {
2213 | "version": "2.1.1",
2214 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
2215 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
2216 | "dev": true
2217 | },
2218 | "is-glob": {
2219 | "version": "4.0.3",
2220 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
2221 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
2222 | "dev": true,
2223 | "requires": {
2224 | "is-extglob": "^2.1.1"
2225 | }
2226 | },
2227 | "is-number": {
2228 | "version": "7.0.0",
2229 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
2230 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
2231 | "dev": true
2232 | },
2233 | "js-tokens": {
2234 | "version": "4.0.0",
2235 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
2236 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
2237 | },
2238 | "json-parse-even-better-errors": {
2239 | "version": "2.3.1",
2240 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
2241 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
2242 | "dev": true
2243 | },
2244 | "lilconfig": {
2245 | "version": "2.0.4",
2246 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz",
2247 | "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==",
2248 | "dev": true
2249 | },
2250 | "lines-and-columns": {
2251 | "version": "1.2.4",
2252 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
2253 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
2254 | "dev": true
2255 | },
2256 | "loose-envify": {
2257 | "version": "1.4.0",
2258 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
2259 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
2260 | "requires": {
2261 | "js-tokens": "^3.0.0 || ^4.0.0"
2262 | }
2263 | },
2264 | "merge2": {
2265 | "version": "1.4.1",
2266 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
2267 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
2268 | "dev": true
2269 | },
2270 | "micromatch": {
2271 | "version": "4.0.4",
2272 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
2273 | "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
2274 | "dev": true,
2275 | "requires": {
2276 | "braces": "^3.0.1",
2277 | "picomatch": "^2.2.3"
2278 | }
2279 | },
2280 | "minimist": {
2281 | "version": "1.2.5",
2282 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
2283 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
2284 | "dev": true
2285 | },
2286 | "nanoid": {
2287 | "version": "3.2.0",
2288 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
2289 | "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA=="
2290 | },
2291 | "next": {
2292 | "version": "12.0.9",
2293 | "resolved": "https://registry.npmjs.org/next/-/next-12.0.9.tgz",
2294 | "integrity": "sha512-omfYqoR/DvbdOIJ6SS1unKJ4mGIxUPs0RPa7wr/Mft22OCKgJhuG+aI9KFYi5ZJBwoFQk1vqaMKpWz5qr+dN0Q==",
2295 | "requires": {
2296 | "@next/env": "12.0.9",
2297 | "@next/swc-android-arm64": "12.0.9",
2298 | "@next/swc-darwin-arm64": "12.0.9",
2299 | "@next/swc-darwin-x64": "12.0.9",
2300 | "@next/swc-linux-arm-gnueabihf": "12.0.9",
2301 | "@next/swc-linux-arm64-gnu": "12.0.9",
2302 | "@next/swc-linux-arm64-musl": "12.0.9",
2303 | "@next/swc-linux-x64-gnu": "12.0.9",
2304 | "@next/swc-linux-x64-musl": "12.0.9",
2305 | "@next/swc-win32-arm64-msvc": "12.0.9",
2306 | "@next/swc-win32-ia32-msvc": "12.0.9",
2307 | "@next/swc-win32-x64-msvc": "12.0.9",
2308 | "caniuse-lite": "^1.0.30001283",
2309 | "postcss": "8.4.5",
2310 | "styled-jsx": "5.0.0",
2311 | "use-subscription": "1.5.1"
2312 | }
2313 | },
2314 | "node-fetch": {
2315 | "version": "2.6.7",
2316 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
2317 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
2318 | "requires": {
2319 | "whatwg-url": "^5.0.0"
2320 | }
2321 | },
2322 | "node-releases": {
2323 | "version": "2.0.1",
2324 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
2325 | "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==",
2326 | "dev": true
2327 | },
2328 | "normalize-path": {
2329 | "version": "3.0.0",
2330 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
2331 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
2332 | "dev": true
2333 | },
2334 | "normalize-range": {
2335 | "version": "0.1.2",
2336 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
2337 | "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
2338 | "dev": true
2339 | },
2340 | "object-assign": {
2341 | "version": "4.1.1",
2342 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2343 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
2344 | },
2345 | "object-hash": {
2346 | "version": "2.2.0",
2347 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
2348 | "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
2349 | "dev": true
2350 | },
2351 | "parent-module": {
2352 | "version": "1.0.1",
2353 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
2354 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
2355 | "dev": true,
2356 | "requires": {
2357 | "callsites": "^3.0.0"
2358 | }
2359 | },
2360 | "parse-json": {
2361 | "version": "5.2.0",
2362 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
2363 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
2364 | "dev": true,
2365 | "requires": {
2366 | "@babel/code-frame": "^7.0.0",
2367 | "error-ex": "^1.3.1",
2368 | "json-parse-even-better-errors": "^2.3.0",
2369 | "lines-and-columns": "^1.1.6"
2370 | }
2371 | },
2372 | "path-parse": {
2373 | "version": "1.0.7",
2374 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
2375 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
2376 | "dev": true
2377 | },
2378 | "path-type": {
2379 | "version": "4.0.0",
2380 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
2381 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
2382 | "dev": true
2383 | },
2384 | "picocolors": {
2385 | "version": "1.0.0",
2386 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
2387 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
2388 | },
2389 | "picomatch": {
2390 | "version": "2.2.3",
2391 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz",
2392 | "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==",
2393 | "dev": true
2394 | },
2395 | "popmotion": {
2396 | "version": "11.0.3",
2397 | "resolved": "https://registry.npmjs.org/popmotion/-/popmotion-11.0.3.tgz",
2398 | "integrity": "sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==",
2399 | "requires": {
2400 | "framesync": "6.0.1",
2401 | "hey-listen": "^1.0.8",
2402 | "style-value-types": "5.0.0",
2403 | "tslib": "^2.1.0"
2404 | }
2405 | },
2406 | "postcss": {
2407 | "version": "8.4.5",
2408 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
2409 | "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
2410 | "requires": {
2411 | "nanoid": "^3.1.30",
2412 | "picocolors": "^1.0.0",
2413 | "source-map-js": "^1.0.1"
2414 | }
2415 | },
2416 | "postcss-js": {
2417 | "version": "4.0.0",
2418 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
2419 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
2420 | "dev": true,
2421 | "requires": {
2422 | "camelcase-css": "^2.0.1"
2423 | }
2424 | },
2425 | "postcss-load-config": {
2426 | "version": "3.1.1",
2427 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz",
2428 | "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==",
2429 | "dev": true,
2430 | "requires": {
2431 | "lilconfig": "^2.0.4",
2432 | "yaml": "^1.10.2"
2433 | }
2434 | },
2435 | "postcss-nested": {
2436 | "version": "5.0.6",
2437 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
2438 | "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
2439 | "dev": true,
2440 | "requires": {
2441 | "postcss-selector-parser": "^6.0.6"
2442 | }
2443 | },
2444 | "postcss-selector-parser": {
2445 | "version": "6.0.8",
2446 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz",
2447 | "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==",
2448 | "dev": true,
2449 | "requires": {
2450 | "cssesc": "^3.0.0",
2451 | "util-deprecate": "^1.0.2"
2452 | }
2453 | },
2454 | "postcss-value-parser": {
2455 | "version": "4.2.0",
2456 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
2457 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
2458 | "dev": true
2459 | },
2460 | "queue-microtask": {
2461 | "version": "1.2.3",
2462 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
2463 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
2464 | "dev": true
2465 | },
2466 | "quick-lru": {
2467 | "version": "5.1.1",
2468 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
2469 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
2470 | "dev": true
2471 | },
2472 | "react": {
2473 | "version": "17.0.2",
2474 | "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
2475 | "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
2476 | "requires": {
2477 | "loose-envify": "^1.1.0",
2478 | "object-assign": "^4.1.1"
2479 | }
2480 | },
2481 | "react-dom": {
2482 | "version": "17.0.2",
2483 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
2484 | "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
2485 | "requires": {
2486 | "loose-envify": "^1.1.0",
2487 | "object-assign": "^4.1.1",
2488 | "scheduler": "^0.20.2"
2489 | }
2490 | },
2491 | "react-merge-refs": {
2492 | "version": "1.1.0",
2493 | "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz",
2494 | "integrity": "sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ=="
2495 | },
2496 | "react-use-measure": {
2497 | "version": "2.1.1",
2498 | "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.1.tgz",
2499 | "integrity": "sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==",
2500 | "requires": {
2501 | "debounce": "^1.2.1"
2502 | }
2503 | },
2504 | "resolve": {
2505 | "version": "1.21.0",
2506 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz",
2507 | "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==",
2508 | "dev": true,
2509 | "requires": {
2510 | "is-core-module": "^2.8.0",
2511 | "path-parse": "^1.0.7",
2512 | "supports-preserve-symlinks-flag": "^1.0.0"
2513 | }
2514 | },
2515 | "resolve-from": {
2516 | "version": "4.0.0",
2517 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
2518 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
2519 | "dev": true
2520 | },
2521 | "reusify": {
2522 | "version": "1.0.4",
2523 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
2524 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
2525 | "dev": true
2526 | },
2527 | "run-parallel": {
2528 | "version": "1.2.0",
2529 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
2530 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
2531 | "dev": true,
2532 | "requires": {
2533 | "queue-microtask": "^1.2.2"
2534 | }
2535 | },
2536 | "scheduler": {
2537 | "version": "0.20.2",
2538 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
2539 | "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
2540 | "requires": {
2541 | "loose-envify": "^1.1.0",
2542 | "object-assign": "^4.1.1"
2543 | }
2544 | },
2545 | "source-map-js": {
2546 | "version": "1.0.1",
2547 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz",
2548 | "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA=="
2549 | },
2550 | "style-value-types": {
2551 | "version": "5.0.0",
2552 | "resolved": "https://registry.npmjs.org/style-value-types/-/style-value-types-5.0.0.tgz",
2553 | "integrity": "sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==",
2554 | "requires": {
2555 | "hey-listen": "^1.0.8",
2556 | "tslib": "^2.1.0"
2557 | }
2558 | },
2559 | "styled-jsx": {
2560 | "version": "5.0.0",
2561 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.0.tgz",
2562 | "integrity": "sha512-qUqsWoBquEdERe10EW8vLp3jT25s/ssG1/qX5gZ4wu15OZpmSMFI2v+fWlRhLfykA5rFtlJ1ME8A8pm/peV4WA==",
2563 | "requires": {}
2564 | },
2565 | "supports-color": {
2566 | "version": "5.5.0",
2567 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
2568 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
2569 | "dev": true,
2570 | "requires": {
2571 | "has-flag": "^3.0.0"
2572 | }
2573 | },
2574 | "supports-preserve-symlinks-flag": {
2575 | "version": "1.0.0",
2576 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2577 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
2578 | "dev": true
2579 | },
2580 | "tailwindcss": {
2581 | "version": "3.0.15",
2582 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.15.tgz",
2583 | "integrity": "sha512-bT2iy7FtjwgsXik4ZoJnHXR+SRCiGR1W95fVqpLZebr64m4ahwUwRbIAc5w5+2fzr1YF4Ct2eI7dojMRRl8sVQ==",
2584 | "dev": true,
2585 | "requires": {
2586 | "arg": "^5.0.1",
2587 | "chalk": "^4.1.2",
2588 | "chokidar": "^3.5.2",
2589 | "color-name": "^1.1.4",
2590 | "cosmiconfig": "^7.0.1",
2591 | "detective": "^5.2.0",
2592 | "didyoumean": "^1.2.2",
2593 | "dlv": "^1.1.3",
2594 | "fast-glob": "^3.2.7",
2595 | "glob-parent": "^6.0.2",
2596 | "is-glob": "^4.0.3",
2597 | "normalize-path": "^3.0.0",
2598 | "object-hash": "^2.2.0",
2599 | "postcss-js": "^4.0.0",
2600 | "postcss-load-config": "^3.1.0",
2601 | "postcss-nested": "5.0.6",
2602 | "postcss-selector-parser": "^6.0.8",
2603 | "postcss-value-parser": "^4.2.0",
2604 | "quick-lru": "^5.1.1",
2605 | "resolve": "^1.21.0"
2606 | },
2607 | "dependencies": {
2608 | "ansi-styles": {
2609 | "version": "4.3.0",
2610 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
2611 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
2612 | "dev": true,
2613 | "requires": {
2614 | "color-convert": "^2.0.1"
2615 | }
2616 | },
2617 | "chalk": {
2618 | "version": "4.1.2",
2619 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
2620 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
2621 | "dev": true,
2622 | "requires": {
2623 | "ansi-styles": "^4.1.0",
2624 | "supports-color": "^7.1.0"
2625 | }
2626 | },
2627 | "chokidar": {
2628 | "version": "3.5.2",
2629 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
2630 | "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
2631 | "dev": true,
2632 | "requires": {
2633 | "anymatch": "~3.1.2",
2634 | "braces": "~3.0.2",
2635 | "fsevents": "~2.3.2",
2636 | "glob-parent": "~5.1.2",
2637 | "is-binary-path": "~2.1.0",
2638 | "is-glob": "~4.0.1",
2639 | "normalize-path": "~3.0.0",
2640 | "readdirp": "~3.6.0"
2641 | },
2642 | "dependencies": {
2643 | "glob-parent": {
2644 | "version": "5.1.2",
2645 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
2646 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
2647 | "dev": true,
2648 | "requires": {
2649 | "is-glob": "^4.0.1"
2650 | }
2651 | }
2652 | }
2653 | },
2654 | "color-convert": {
2655 | "version": "2.0.1",
2656 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
2657 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
2658 | "dev": true,
2659 | "requires": {
2660 | "color-name": "~1.1.4"
2661 | }
2662 | },
2663 | "color-name": {
2664 | "version": "1.1.4",
2665 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
2666 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
2667 | "dev": true
2668 | },
2669 | "glob-parent": {
2670 | "version": "6.0.2",
2671 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
2672 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
2673 | "dev": true,
2674 | "requires": {
2675 | "is-glob": "^4.0.3"
2676 | }
2677 | },
2678 | "has-flag": {
2679 | "version": "4.0.0",
2680 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
2681 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
2682 | "dev": true
2683 | },
2684 | "readdirp": {
2685 | "version": "3.6.0",
2686 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
2687 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
2688 | "dev": true,
2689 | "requires": {
2690 | "picomatch": "^2.2.1"
2691 | }
2692 | },
2693 | "supports-color": {
2694 | "version": "7.2.0",
2695 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
2696 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
2697 | "dev": true,
2698 | "requires": {
2699 | "has-flag": "^4.0.0"
2700 | }
2701 | }
2702 | }
2703 | },
2704 | "to-regex-range": {
2705 | "version": "5.0.1",
2706 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2707 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2708 | "dev": true,
2709 | "requires": {
2710 | "is-number": "^7.0.0"
2711 | }
2712 | },
2713 | "tr46": {
2714 | "version": "0.0.3",
2715 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
2716 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
2717 | },
2718 | "tslib": {
2719 | "version": "2.3.1",
2720 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
2721 | "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
2722 | },
2723 | "typescript": {
2724 | "version": "4.5.5",
2725 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
2726 | "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
2727 | "dev": true
2728 | },
2729 | "use-subscription": {
2730 | "version": "1.5.1",
2731 | "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz",
2732 | "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==",
2733 | "requires": {
2734 | "object-assign": "^4.1.1"
2735 | }
2736 | },
2737 | "util-deprecate": {
2738 | "version": "1.0.2",
2739 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2740 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
2741 | "dev": true
2742 | },
2743 | "webidl-conversions": {
2744 | "version": "3.0.1",
2745 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
2746 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
2747 | },
2748 | "whatwg-url": {
2749 | "version": "5.0.0",
2750 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
2751 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
2752 | "requires": {
2753 | "tr46": "~0.0.3",
2754 | "webidl-conversions": "^3.0.0"
2755 | }
2756 | },
2757 | "xtend": {
2758 | "version": "4.0.2",
2759 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
2760 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
2761 | "dev": true
2762 | },
2763 | "yaml": {
2764 | "version": "1.10.2",
2765 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
2766 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
2767 | "dev": true
2768 | }
2769 | }
2770 | }
2771 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "liveblocks-live-basket-next-js",
3 | "version": "1.0.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start"
9 | },
10 | "license": "Apache-2.0",
11 | "dependencies": {
12 | "@liveblocks/client": "^0.14.0",
13 | "@liveblocks/node": "0.3.0",
14 | "@liveblocks/react": "^0.14.0",
15 | "framer-motion": "^5.6.0",
16 | "next": "^12.0.8",
17 | "react": "^17.0.2",
18 | "react-dom": "^17.0.2"
19 | },
20 | "devDependencies": {
21 | "@types/node": "^14.14.31",
22 | "@types/react": "^17.0.2",
23 | "autoprefixer": "^10.4.2",
24 | "postcss": "^8.4.5",
25 | "tailwindcss": "^3.0.15",
26 | "typescript": "^4.3.2"
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/pages/_app.tsx:
--------------------------------------------------------------------------------
1 | import { LiveblocksProvider } from '@liveblocks/react'
2 | import { createClient } from '@liveblocks/client'
3 | import { AppProps } from 'next/app'
4 | import 'tailwindcss/tailwind.css'
5 | import '../styles/globals.css'
6 |
7 | /**
8 | * createClient with callback. We're using this so pass a userId to the client
9 | */
10 | const client = createClient({
11 | authEndpoint: async (room) => {
12 | // A unique ID for current user (e.g. from a database)
13 | const userId = await getUserId()
14 |
15 | // Connect to auth api and send userId, along with the room
16 | const response = await fetch('/api/authWithUserId', {
17 | method: 'POST',
18 | headers: {
19 | Authentication: 'token',
20 | 'Content-Type': 'application/json'
21 | },
22 | body: JSON.stringify({ room, userId })
23 | })
24 | return await response.json()
25 | }
26 | })
27 |
28 | function MyApp ({ Component, pageProps }: AppProps) {
29 | return (
30 | /**
31 | * Add a LiveblocksProvider at the root of your app
32 | * to be able to use Liveblocks react hooks in your components
33 | **/
34 |
35 |
36 |
37 | )
38 | }
39 |
40 | // Simulate a userId taken from a database using localStorage
41 | async function getUserId () {
42 | return Math.random().toString(36).substring(2, 10)
43 |
44 | /*
45 | let userId = localStorage.getItem('userId')
46 | if (!userId) {
47 | userId = Math.random().toString(36).substring(2, 10)
48 | localStorage.setItem('userId', userId)
49 | }
50 | return userId
51 | */
52 | }
53 |
54 | export default MyApp
55 |
--------------------------------------------------------------------------------
/pages/_middleware.ts:
--------------------------------------------------------------------------------
1 | import { NextFetchEvent, NextRequest, NextResponse } from 'next/server'
2 |
3 | export function middleware (request: NextRequest, event: NextFetchEvent) {
4 | const {pathname, searchParams } = request.nextUrl
5 | const room = searchParams.get('room')
6 |
7 | // If not visiting website index, or if ?room= is already set, continue
8 | if (pathname !== '/' || room) {
9 | return NextResponse.next()
10 | }
11 |
12 | // Add random room id to URL and continue
13 | return NextResponse.redirect(`/?room=${id()}`)
14 | }
15 |
16 | function id () {
17 | return 'xxxxxxxxxxxxxxxxxxxxx'.replace(/[x]/g, () => {
18 | return (Math.random() * 16 | 0).toString(16)
19 | })
20 | }
21 |
--------------------------------------------------------------------------------
/pages/api/authWithUserId.ts:
--------------------------------------------------------------------------------
1 | import { authorize } from '@liveblocks/node'
2 | import { NextApiRequest, NextApiResponse } from 'next'
3 |
4 | const API_KEY = process.env.LIVEBLOCKS_SECRET_KEY
5 |
6 | export default async function auth (req: NextApiRequest, res: NextApiResponse) {
7 | if (!API_KEY) {
8 | return res.status(403).end()
9 | }
10 |
11 | if (!req.body.userId) {
12 | return res.status(400).end()
13 | }
14 |
15 | // For the avatar example, we're generating random users
16 | // and set their info from the authentication endpoint
17 | // See https://liveblocks.io/docs/api-reference/liveblocks-node#authorize for more information
18 | const response = await authorize({
19 | room: req.body.room,
20 | secret: API_KEY,
21 | userId: req.body.userId, // userId is a special case, does not go in userInfo
22 | userInfo: {
23 | name: NAMES[Math.floor(Math.random() * NAMES.length)],
24 | color: COLORS[Math.floor(Math.random() * COLORS.length)],
25 | picture: `/assets/avatars/${Math.floor(Math.random() * 10)}.png`
26 | }
27 | })
28 | return res.status(response.status).end(response.body)
29 | }
30 |
31 | const COLORS = [
32 | '#f87171',
33 | '#fb923c',
34 | '#facc15',
35 | '#5fda15',
36 | '#4ade80',
37 | '#34ead2',
38 | '#22d3ee',
39 | '#60a5fa',
40 | '#c084fc',
41 | '#ff7dc0',
42 | ]
43 |
44 | const NAMES = [
45 | 'Charlie Layne',
46 | 'Mislav Abha',
47 | 'Tatum Paolo',
48 | 'Anjali Wanda',
49 | 'Jody Hekla',
50 | 'Emil Joyce',
51 | 'Jory Quispe',
52 | 'Quinn Elton'
53 | ]
54 |
--------------------------------------------------------------------------------
/pages/basket.tsx:
--------------------------------------------------------------------------------
1 | import { RoomProvider, useBatch, useList, useObject, useOthers, useSelf } from '@liveblocks/react'
2 | import { productList } from '../config/productList'
3 | import { ChangeEvent, useEffect, useState } from 'react'
4 | import Image from 'next/image'
5 | import { LiveList } from '@liveblocks/client'
6 | import { AnimatePresence, motion } from 'framer-motion'
7 |
8 | /*
9 | * This example shows how to use Liveblocks to build a live basket shopping app.
10 | * Multiple users can connect at once, but only one user, the "driver" can control the basket.
11 | * The other users, the "passengers", can request an item, and the "driver" can choose to accept or reject the request.
12 | */
13 | export default function Root () {
14 | let room: string = ''
15 |
16 | // If in browser, get value of ?room= from the URL
17 | // The room parameter is added in pages/_middleware.ts
18 | if (typeof window !== 'undefined') {
19 | room = new URLSearchParams(document.location.search).get('room') || ''
20 | }
21 |
22 | return (
23 |
24 |
25 |
26 | )
27 | }
28 |
29 | const monetaryUnit = '£'
30 |
31 | export type Product = {
32 | id: number
33 | name: string
34 | price: number
35 | images: StaticImageData[] | string[]
36 | description: string
37 | quantity?: number
38 | requested?: boolean
39 | }
40 |
41 | type User = {
42 | name: string
43 | color: string
44 | picture: string
45 | }
46 |
47 | /*
48 | * The main basket is stored in a Liveblocks LiveList called `basket`, an array-like object
49 | * `requestedItems` is another LiveList, containing items that the passengers have requested
50 | * `basketProperties` is a LiveObject which contains other data, such as the unique id of the driver
51 | */
52 | function BasketDemo () {
53 | const self = useSelf()
54 | const others = useOthers()
55 | const batch = useBatch()
56 | const basket = useList('basket')
57 | const requestedItems = useList('requestedItems')
58 | const basketProperties = useObject('basketProperties', { driver: '' })
59 | const liveblocksLoaded = () => !!(basket && basketProperties && others && self?.id)
60 |
61 | // If no driver is set or online, and no other users are online, become driver
62 | useEffect(() => {
63 | if (liveblocksLoaded() && !iAmDriver() && others.count === 0) {
64 | basketProperties!.set('driver', self!.id as string)
65 | }
66 | }, [self])
67 |
68 | // If the driver goes offline, set a new driver
69 | useEffect(() => {
70 | if (!liveblocksLoaded() || iAmDriver()) {
71 | return
72 | }
73 |
74 | const otherDriver = [...others].some(other => other.id === basketProperties!.get('driver'))
75 | if (!otherDriver) {
76 |
77 | // The driver becomes `others[0]`, or if no one else is online, it becomes local user
78 | const driver = others.count ? [...others][0].id : self!.id
79 | if (driver) {
80 | basketProperties!.set('driver', driver)
81 | }
82 |
83 | }
84 | }, [others])
85 |
86 | // Returns true if local user is the driver
87 | function iAmDriver (): boolean {
88 | if (!self?.id || !basketProperties) {
89 | return false
90 | }
91 | return self.id === basketProperties.get('driver')
92 | }
93 |
94 | // Adds an item to the basket, or requested items list, (depending on whether local user is driver)
95 | function handleAddToBasket (product: Product) {
96 | const currentBasket = iAmDriver() ? basket : requestedItems
97 | if (!currentBasket) {
98 | return
99 | }
100 |
101 | const basketIndex = currentBasket.findIndex(item => item.id === product.id)
102 | if (basketIndex >= 0) {
103 | batch(() => {
104 | const oldQuantity = currentBasket.get(basketIndex)?.quantity || 0
105 | const newQuantity = (product.quantity || 0) + oldQuantity
106 | currentBasket.delete(basketIndex)
107 | product.quantity = newQuantity > 0 ? newQuantity : 0
108 | if (newQuantity > 0) {
109 | currentBasket.insert(product, basketIndex)
110 | }
111 | })
112 | } else {
113 | currentBasket.push(product)
114 | }
115 | }
116 |
117 | // If driver, empty main basket
118 | function handleEmptyBasket () {
119 | if (iAmDriver() && basket) {
120 | basket.clear()
121 | }
122 | }
123 |
124 | // If driver, remove an item from the basket or requested items, as defined by currentBasket
125 | function handleRemoveItem (itemId: number, currentBasket: LiveList | null) {
126 | if (iAmDriver() && currentBasket) {
127 | const basketIndex = currentBasket.findIndex(item => item.id === itemId)
128 | currentBasket.delete(basketIndex)
129 | }
130 | }
131 |
132 | // If driver, accept a requested item into the main basket
133 | function handleAcceptItem (itemId: number) {
134 | if (iAmDriver() && basket && requestedItems) {
135 | const item = requestedItems.find(item => item.id === itemId)
136 | if (item) {
137 | handleRemoveItem(itemId, requestedItems)
138 | handleAddToBasket(item)
139 | }
140 | }
141 | }
142 |
143 | // If driver, pass ownership of basket to user specified by userId
144 | function handleChangeDriver (userId: string) {
145 | if (iAmDriver() && basketProperties && userId) {
146 | basketProperties.set('driver', userId)
147 | }
148 | }
149 |
150 | // Get the total item price
151 | function getTotalPrice () {
152 | if (!basket) {
153 | return 0
154 | }
155 | return [...basket].reduce((acc, product) => acc + product.price * (product.quantity || 1), 0)
156 | }
157 |
158 | // Open and close mobile menu
159 | const [mobileMenuOpen, setMobileMenuOpen] = useState(false)
160 | useEffect(() => {
161 | preventBodyScroll(mobileMenuOpen)
162 | }, [mobileMenuOpen])
163 |
164 | return (
165 | <>
166 |
167 |
168 |
169 |
170 | {self && (
171 |
172 |
173 | {self.info.name}
174 |
175 |
176 |
177 |
178 |
setMobileMenuOpen(!mobileMenuOpen)}
181 | >
182 | {!mobileMenuOpen ? (
183 | 0 || false}
187 | />
188 | ) : }
189 |
190 |
191 | )}
192 |
193 |
194 |
195 |
196 | Bamboo socks
197 |
198 |
199 | TopSocks' finest collection of bamboo socks
200 |
201 |
202 | {productList.map(p => )}
203 |
204 |
205 |
206 |
207 |
208 | {liveblocksLoaded() && (
209 |
210 | Users
211 |
212 |
213 |
214 |
You
215 |
216 | {iAmDriver() ? 'Holding bag' : 'You can request items'}
217 |
218 |
219 |
220 | {others.map(({ id, info }) => (
221 |
222 |
223 |
224 |
{info.name}
225 | {id === basketProperties!.get('driver') && (
226 |
Holding bag
227 | )}
228 | {iAmDriver() && id && (
229 |
handleChangeDriver(id)} className="text-sm text-cyan-600 block">
230 | Give bag
231 |
232 | )}
233 |
234 |
235 | ))}
236 | {requestedItems && requestedItems.length > 0 && (
237 |
238 | Requested Items
239 |
240 | )}
241 |
242 | {requestedItems!.toArray().map(item => (
243 |
244 |
245 |
246 |
253 |
254 |
255 |
{item.name}
256 | {iAmDriver() ? (
257 |
258 | handleAcceptItem(item.id)}
261 | >
262 | Add to bag
263 |
264 | handleRemoveItem(item.id, requestedItems)}
267 | >
268 | Reject
269 |
270 |
271 | ) : (
272 |
Requested item
273 | )}
274 |
275 |
276 |
277 |
{monetaryUnit}{item.price.toFixed(2)}
278 |
279 | x{item.quantity}
280 |
281 |
282 |
283 | ))}
284 |
285 | {basket && basket.length > 0 && (
286 |
287 | Shopping Bag
288 |
289 | )}
290 |
291 | {basket!.toArray().map(item => (
292 |
293 |
294 |
295 |
302 |
303 |
304 |
{item.name}
305 | {iAmDriver() && (
306 |
handleRemoveItem(item.id, basket)}
309 | >
310 | Remove
311 |
312 | )}
313 |
314 |
315 |
316 |
{monetaryUnit}{item.price.toFixed(2)}
317 |
318 | x{item.quantity}
319 |
320 |
321 |
322 | ))}
323 |
324 |
325 | Total: {monetaryUnit}{getTotalPrice().toFixed(2)}
326 |
327 | {iAmDriver() && (
328 |
333 | Empty bag
334 |
335 | )}
336 |
337 | )}
338 |
339 |
340 |
341 |
342 | >
343 | )
344 | }
345 |
346 | type ItemProps = {
347 | product: Product
348 | driver?: boolean
349 | onAddToBasket?: (product: Product) => void
350 | liveblocksLoaded?: boolean
351 | }
352 |
353 | const itemImageVariants = {
354 | loading: {
355 | scale: 1.1,
356 | filter: 'blur(10px)'
357 | },
358 | loaded: {
359 | scale: 1,
360 | filter: 'blur(0px)'
361 | }
362 | }
363 |
364 | // A single item in the shop
365 | function Item ({ product, onAddToBasket = () => {}, driver = false, liveblocksLoaded}: ItemProps) {
366 | const quantityMax = 30
367 | const [quantity, setQuantity] = useState(1)
368 | const [imageLoaded, setImageLoaded] = useState(false)
369 |
370 | function handleOnClick () {
371 | onAddToBasket({ ...product, quantity })
372 | setQuantity(1)
373 | }
374 |
375 | return (
376 |
377 |
378 |
386 | setImageLoaded(true)}
389 | src={product.images[0]}
390 | alt={product.name}
391 | layout="fill"
392 | objectFit="cover"
393 | placeholder="blur"
394 | />
395 |
396 |
397 |
398 |
{product.name}
399 |
{monetaryUnit}{product.price.toFixed(2)}
400 |
401 |
402 | {product.description}
403 |
404 |
405 |
409 | {driver ? <>Add to bag > : <>Request item >}
410 |
411 | ) => setQuantity(parseInt(e.target.value))}
415 | value={quantity}
416 | >
417 | {[...Array(quantityMax).keys()].map((_, i) => (
418 | {i + 1}
419 | ))}
420 |
421 |
422 |
423 |
424 | )
425 | }
426 |
427 | // Circular avatar
428 | function Avatar ({ url = '', driver = false }) {
429 | return (
430 |
431 |
432 |
433 |
434 |
435 |
436 | )
437 | }
438 |
439 | // Stop body scrolling if mobileMenuOpen === true
440 | function preventBodyScroll (mobileMenuOpen: boolean) {
441 | if (mobileMenuOpen) {
442 | document.body.classList.add('overflow-hidden', 'md:overflow-auto')
443 | } else {
444 | document.body.classList.remove('overflow-hidden', 'md:overflow-auto')
445 | }
446 | }
447 |
448 | function BagIcon ({ className = '', stroke = false }) {
449 | return (
450 |
455 | )
456 | }
457 |
458 | function BagIconLarge ({ className = '', count = 0, pulse = false }) {
459 | return (
460 |
461 |
462 |
463 |
464 | {count > 0 &&
{count} }
465 |
466 | )
467 | }
468 |
469 | function CloseIcon () {
470 | return (
471 |
472 |
473 |
474 | )
475 | }
476 |
477 | function Logo () {
478 | return (
479 |
484 | )
485 | }
486 |
--------------------------------------------------------------------------------
/pages/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import Basket from './basket'
3 | import { ExampleWrapper } from '../components/ExampleWrapper'
4 |
5 | /*
6 | * Check in `basket.tsx` for the live basket code and guided comments
7 | */
8 |
9 | const info = {
10 | title: 'Live basket',
11 | description: 'Open in multiple windows, or share the link, to edit your shopping live with others.',
12 | githubHref: 'https://github.com/CTNicholas/liveblocks-live-basket-next-js',
13 | codeSandboxHref: 'https://codesandbox.io/s/live-basket-with-liveblocks-next-js-xh3bm',
14 | twitterHref: 'https://twitter.com/ctnicholasdev',
15 | hide: false
16 | }
17 |
18 | const meta = {
19 | title: 'Live Basket — A live shared basket for multiple users • ctnicholas.dev',
20 | description: 'Open in multiple windows, or share the link, to edit your shopping live with others.',
21 | image: '/screenshot.png',
22 | url: 'https://livebasket.ctnicholas.dev',
23 | author: 'https://ctnicholas.dev',
24 | twitter: '@ctnicholasdev'
25 | }
26 |
27 | export default function Index (props: any) {
28 | return (
29 |
30 |
31 |
32 | )
33 | }
34 |
35 | export function getStaticProps () {
36 | return {
37 | props: {
38 | isRunningOnCodeSandbox: process.env.CODESANDBOX_SSE != null,
39 | hasSetupLiveblocksKey: process.env.LIVEBLOCKS_SECRET_KEY != null
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/public/assets/avatars/0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/avatars/0.png
--------------------------------------------------------------------------------
/public/assets/avatars/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/avatars/1.png
--------------------------------------------------------------------------------
/public/assets/avatars/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/avatars/2.png
--------------------------------------------------------------------------------
/public/assets/avatars/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/avatars/3.png
--------------------------------------------------------------------------------
/public/assets/avatars/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/avatars/4.png
--------------------------------------------------------------------------------
/public/assets/avatars/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/avatars/5.png
--------------------------------------------------------------------------------
/public/assets/avatars/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/avatars/6.png
--------------------------------------------------------------------------------
/public/assets/avatars/7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/avatars/7.png
--------------------------------------------------------------------------------
/public/assets/avatars/8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/avatars/8.png
--------------------------------------------------------------------------------
/public/assets/avatars/9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/avatars/9.png
--------------------------------------------------------------------------------
/public/assets/socks/color-geometric-socks.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/socks/color-geometric-socks.jpg
--------------------------------------------------------------------------------
/public/assets/socks/floral-socks-back.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/socks/floral-socks-back.jpg
--------------------------------------------------------------------------------
/public/assets/socks/floral-socks.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/socks/floral-socks.jpg
--------------------------------------------------------------------------------
/public/assets/socks/grey-and-white-stripe-socks-back.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/socks/grey-and-white-stripe-socks-back.jpg
--------------------------------------------------------------------------------
/public/assets/socks/grey-and-white-stripe-socks.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/socks/grey-and-white-stripe-socks.jpg
--------------------------------------------------------------------------------
/public/assets/socks/hotdog-socks.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/socks/hotdog-socks.jpg
--------------------------------------------------------------------------------
/public/assets/socks/jungle-socks-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/socks/jungle-socks-2.jpg
--------------------------------------------------------------------------------
/public/assets/socks/jungle-socks-back-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/socks/jungle-socks-back-2.jpg
--------------------------------------------------------------------------------
/public/assets/socks/jungle-socks-back.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/socks/jungle-socks-back.jpg
--------------------------------------------------------------------------------
/public/assets/socks/jungle-socks.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/socks/jungle-socks.jpg
--------------------------------------------------------------------------------
/public/assets/socks/pug-dog-socks.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/socks/pug-dog-socks.jpg
--------------------------------------------------------------------------------
/public/assets/socks/puppy-paw-socks-back.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/socks/puppy-paw-socks-back.jpg
--------------------------------------------------------------------------------
/public/assets/socks/puppy-paw-socks.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/socks/puppy-paw-socks.jpg
--------------------------------------------------------------------------------
/public/assets/socks/white-socks-back-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/socks/white-socks-back-2.jpg
--------------------------------------------------------------------------------
/public/assets/socks/white-socks-back.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/socks/white-socks-back.jpg
--------------------------------------------------------------------------------
/public/assets/socks/white-socks.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/assets/socks/white-socks.jpg
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/favicon.ico
--------------------------------------------------------------------------------
/public/icons/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/icons/android-chrome-192x192.png
--------------------------------------------------------------------------------
/public/icons/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/icons/android-chrome-512x512.png
--------------------------------------------------------------------------------
/public/icons/apple-touch-icon-114x114.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/icons/apple-touch-icon-114x114.png
--------------------------------------------------------------------------------
/public/icons/apple-touch-icon-120x120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/icons/apple-touch-icon-120x120.png
--------------------------------------------------------------------------------
/public/icons/apple-touch-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/icons/apple-touch-icon-144x144.png
--------------------------------------------------------------------------------
/public/icons/apple-touch-icon-152x152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/icons/apple-touch-icon-152x152.png
--------------------------------------------------------------------------------
/public/icons/apple-touch-icon-180x180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/icons/apple-touch-icon-180x180.png
--------------------------------------------------------------------------------
/public/icons/apple-touch-icon-57x57.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/icons/apple-touch-icon-57x57.png
--------------------------------------------------------------------------------
/public/icons/apple-touch-icon-60x60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/icons/apple-touch-icon-60x60.png
--------------------------------------------------------------------------------
/public/icons/apple-touch-icon-72x72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/icons/apple-touch-icon-72x72.png
--------------------------------------------------------------------------------
/public/icons/apple-touch-icon-76x76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/icons/apple-touch-icon-76x76.png
--------------------------------------------------------------------------------
/public/icons/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/icons/apple-touch-icon.png
--------------------------------------------------------------------------------
/public/icons/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #18181b
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/public/icons/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/icons/favicon-16x16.png
--------------------------------------------------------------------------------
/public/icons/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/icons/favicon-32x32.png
--------------------------------------------------------------------------------
/public/icons/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/icons/mstile-150x150.png
--------------------------------------------------------------------------------
/public/icons/safari-pinned-tab.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 | Created by potrace 1.14, written by Peter Selinger 2001-2017
9 |
10 |
12 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/public/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTNicholas/liveblocks-live-basket-next-js/75cd6b0274396a7085536b1495619256af341acd/public/screenshot.png
--------------------------------------------------------------------------------
/styles/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | @layer base {
6 | body {
7 |
8 | }
9 | }
10 |
11 | html, body, #__next {
12 | height: 100%;
13 | font-family: Inter, sans-serif;
14 | }
15 |
16 | a {
17 | @apply text-blue-400;
18 | text-decoration: none;
19 | }
20 |
21 | a:hover,
22 | a:focus {
23 | @apply text-blue-500;
24 | }
25 |
26 | a:active {
27 | @apply text-blue-600;
28 | }
29 |
30 | a:focus,
31 | input:focus,
32 | button:focus,
33 | a:focus-visible,
34 | input:focus-visible,
35 | button:focus-visible {
36 | @apply outline-none;
37 | }
38 |
39 | *, *::before, *::after {
40 | box-sizing: border-box;
41 | }
42 |
43 | /* Chrome, Safari, Edge, Opera */
44 | input::-webkit-outer-spin-button,
45 | input::-webkit-inner-spin-button {
46 | -webkit-appearance: none;
47 | margin: 0;
48 | }
49 |
50 | /* Firefox */
51 | input[type=number] {
52 | -moz-appearance: textfield;
53 | }
54 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | const colors = require('tailwindcss/colors')
2 |
3 | module.exports = {
4 | content: [
5 | './pages/**/*.{js,ts,jsx,tsx}',
6 | './components/**/*.{js,ts,jsx,tsx}',
7 | './pages/basket.tsx'
8 | ],
9 | darkMode: false, // or 'media' or 'class'
10 | theme: {
11 | extend: {
12 | fontFamily: {
13 | karla: 'Karla, Inter, sans-serif'
14 | },
15 | colors: {
16 | gray: {
17 | ...colors.zinc,
18 | 50: colors.gray[50],
19 | 100: colors.gray[100],
20 | 200: colors.gray[200],
21 | 850: '#202022'
22 | }
23 | }
24 | }
25 | },
26 | variants: {
27 | extend: {
28 | transitionProperty: ['hover', 'focus']
29 | }
30 | },
31 | plugins: []
32 | }
33 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "strict": true,
12 | "forceConsistentCasingInFileNames": true,
13 | "noEmit": true,
14 | "esModuleInterop": true,
15 | "module": "esnext",
16 | "moduleResolution": "node",
17 | "resolveJsonModule": true,
18 | "isolatedModules": true,
19 | "jsx": "preserve",
20 | "downlevelIteration": true,
21 | "incremental": true
22 | },
23 | "include": [
24 | "next-env.d.ts",
25 | "**/*.ts",
26 | "**/*.tsx",
27 | "**/*.js"
28 | ],
29 | "exclude": [
30 | "node_modules"
31 | ]
32 | }
33 |
--------------------------------------------------------------------------------