├── .gitignore
├── .vscode
└── settings.json
├── README.md
├── app
├── [lang]
│ ├── layout.tsx
│ └── todos
│ │ └── page.tsx
├── favicon.ico
├── globals.css
├── image.tsx
├── layout.tsx
├── page.tsx
├── post
│ └── [id]
│ │ └── page.tsx
├── route-handler.json
│ └── route.ts
└── spa-post
│ ├── [id]
│ └── page.tsx
│ └── layout.tsx
├── next.config.js
├── package.json
├── pnpm-lock.yaml
├── postcss.config.js
├── tailwind.config.js
└── tsconfig.json
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 | .pnpm-debug.log*
27 |
28 | # local env files
29 | .env*.local
30 |
31 | # vercel
32 | .vercel
33 |
34 | # typescript
35 | *.tsbuildinfo
36 | next-env.d.ts
37 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "typescript.tsdk": "node_modules/.pnpm/typescript@5.0.2/node_modules/typescript/lib",
3 | "typescript.enablePromptUseWorkspaceTsdk": true
4 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Next.js Static Export
2 |
3 | - Component level data fetching
4 | - i18n routes support (no runtime detection)
5 | - Dynamic routes (`/post/[id]`)
6 | - SPA routes (`/spa-post/[id]`)
7 | - Image optimization (uses Cloudinary)
8 | - Route Handlers
9 |
10 | ## Static Export
11 |
12 | Running `pnpm build` will export the site to the `out` directory. Then, you can deploy the `out` directory to any static hosting provider.
13 |
14 | You can also run it locally using a tool like `serve`:
15 |
16 | ```bash
17 | pnpm install -g serve
18 | serve out
19 | ```
20 |
--------------------------------------------------------------------------------
/app/[lang]/layout.tsx:
--------------------------------------------------------------------------------
1 | export async function generateStaticParams() {
2 | return [{ lang: 'en-US' }, { lang: 'de' }];
3 | }
4 |
5 | export default function Layout({
6 | children,
7 | params,
8 | }: {
9 | children: React.ReactNode;
10 | params: { lang: string };
11 | }) {
12 | return (
13 |
14 |
{children}
15 |
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/app/[lang]/todos/page.tsx:
--------------------------------------------------------------------------------
1 | type Todo = {
2 | userId: number;
3 | id: number;
4 | title: string;
5 | completed: boolean;
6 | };
7 |
8 | async function getTodos(): Promise {
9 | const res = await fetch('https://jsonplaceholder.typicode.com/todos');
10 | return res.json();
11 | }
12 |
13 | export default async function TodoPage() {
14 | const todos = await getTodos();
15 | return (
16 |
17 | There are {todos.length} todos.
18 |
19 | );
20 | }
21 |
--------------------------------------------------------------------------------
/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leerob/next-static-export-example/87c81d5cdfbcdc952930c4ad0504434928017904/app/favicon.ico
--------------------------------------------------------------------------------
/app/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/app/image.tsx:
--------------------------------------------------------------------------------
1 | export default function cloudinaryLoader({
2 | src,
3 | width,
4 | quality,
5 | }: {
6 | src: string;
7 | width: number;
8 | quality?: number;
9 | }) {
10 | const params = ['f_auto', 'c_limit', `w_${width}`, `q_${quality || 'auto'}`];
11 | return `https://res.cloudinary.com/demo/image/upload/${params.join(
12 | ','
13 | )}${src}`;
14 | }
15 |
--------------------------------------------------------------------------------
/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import './globals.css'
2 |
3 | export const metadata = {
4 | title: 'Create Next App',
5 | description: 'Generated by create next app',
6 | }
7 |
8 | export default function RootLayout({
9 | children,
10 | }: {
11 | children: React.ReactNode
12 | }) {
13 | return (
14 |
15 | {children}
16 |
17 | )
18 | }
19 |
--------------------------------------------------------------------------------
/app/page.tsx:
--------------------------------------------------------------------------------
1 | import Link from 'next/link';
2 |
3 | type Post = {
4 | userId: number;
5 | id: number;
6 | title: string;
7 | body: string;
8 | };
9 |
10 | async function getPosts(): Promise {
11 | const res = await fetch('https://jsonplaceholder.typicode.com/posts');
12 | return res.json();
13 | }
14 |
15 | export default async function Home() {
16 | const post = await getPosts();
17 | return (
18 |
19 | {post.map((post) => (
20 |
25 | {post.title}
26 | {post.body}
27 |
28 | ))}
29 |
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/app/post/[id]/page.tsx:
--------------------------------------------------------------------------------
1 | import Image from 'next/image';
2 |
3 | type Post = {
4 | userId: number;
5 | id: number;
6 | title: string;
7 | body: string;
8 | };
9 |
10 | export async function generateStaticParams() {
11 | const res = await fetch('https://jsonplaceholder.typicode.com/posts');
12 | const posts = await res.json();
13 |
14 | return posts.map((post: Post) => ({
15 | id: post.id.toString(),
16 | }));
17 | }
18 |
19 | async function getPost(id: string): Promise {
20 | const res = await fetch(`https://jsonplaceholder.typicode.com/posts/${id}`);
21 | return res.json();
22 | }
23 |
24 | export default async function PostPage({ params }: { params: { id: string } }) {
25 | const post = await getPost(params.id);
26 | return (
27 |
28 | {post.title}
29 | {post.body}
30 | {/* */}
31 |
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/app/route-handler.json/route.ts:
--------------------------------------------------------------------------------
1 | import { NextResponse } from 'next/server';
2 |
3 | export async function GET() {
4 | return NextResponse.json({ name: 'Lee' });
5 | }
6 |
--------------------------------------------------------------------------------
/app/spa-post/[id]/page.tsx:
--------------------------------------------------------------------------------
1 | 'use client';
2 |
3 | import useSWR from 'swr';
4 |
5 | const fetcher = (url: string) => fetch(url).then((r) => r.json());
6 |
7 | // This is not implemented yet. Today, you would still need to
8 | // export function generateStaticParams() at build time.
9 | // See https://github.com/vercel/next.js/issues/54393
10 | export default function SPAPostPage({ params }: { params: { id: string } }) {
11 | const { data, error } = useSWR(
12 | `https://jsonplaceholder.typicode.com/posts/${params.id}`,
13 | fetcher
14 | );
15 | if (error) return Failed to load
;
16 | if (!data) return Loading...
;
17 |
18 | return (
19 | <>
20 | {data.title}
21 | {data.body}
22 | >
23 | );
24 | }
25 |
--------------------------------------------------------------------------------
/app/spa-post/layout.tsx:
--------------------------------------------------------------------------------
1 | export default function Layout({ children }: { children: React.ReactNode }) {
2 | return (
3 |
4 | {children}
5 |
6 | );
7 | }
8 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | output: 'export',
4 | images: {
5 | loader: 'custom',
6 | loaderFile: './app/image.tsx',
7 | },
8 | };
9 |
10 | module.exports = nextConfig;
11 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "packageManager": "pnpm@8.9.0",
4 | "scripts": {
5 | "dev": "next dev",
6 | "build": "next build",
7 | "start": "next start",
8 | "lint": "next lint"
9 | },
10 | "dependencies": {
11 | "@types/node": "18.15.3",
12 | "@types/react": "18.0.28",
13 | "@types/react-dom": "18.0.11",
14 | "autoprefixer": "10.4.14",
15 | "next": "13.5.4",
16 | "postcss": "8.4.21",
17 | "react": "18.2.0",
18 | "react-dom": "18.2.0",
19 | "swr": "^2.1.0",
20 | "tailwindcss": "3.2.7",
21 | "typescript": "5.0.2"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | '@types/node':
9 | specifier: 18.15.3
10 | version: 18.15.3
11 | '@types/react':
12 | specifier: 18.0.28
13 | version: 18.0.28
14 | '@types/react-dom':
15 | specifier: 18.0.11
16 | version: 18.0.11
17 | autoprefixer:
18 | specifier: 10.4.14
19 | version: 10.4.14(postcss@8.4.21)
20 | next:
21 | specifier: 13.5.4
22 | version: 13.5.4(react-dom@18.2.0)(react@18.2.0)
23 | postcss:
24 | specifier: 8.4.21
25 | version: 8.4.21
26 | react:
27 | specifier: 18.2.0
28 | version: 18.2.0
29 | react-dom:
30 | specifier: 18.2.0
31 | version: 18.2.0(react@18.2.0)
32 | swr:
33 | specifier: ^2.1.0
34 | version: 2.1.0(react@18.2.0)
35 | tailwindcss:
36 | specifier: 3.2.7
37 | version: 3.2.7(postcss@8.4.21)
38 | typescript:
39 | specifier: 5.0.2
40 | version: 5.0.2
41 |
42 | packages:
43 |
44 | /@next/env@13.5.4:
45 | resolution: {integrity: sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==}
46 | dev: false
47 |
48 | /@next/swc-darwin-arm64@13.5.4:
49 | resolution: {integrity: sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==}
50 | engines: {node: '>= 10'}
51 | cpu: [arm64]
52 | os: [darwin]
53 | requiresBuild: true
54 | dev: false
55 | optional: true
56 |
57 | /@next/swc-darwin-x64@13.5.4:
58 | resolution: {integrity: sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==}
59 | engines: {node: '>= 10'}
60 | cpu: [x64]
61 | os: [darwin]
62 | requiresBuild: true
63 | dev: false
64 | optional: true
65 |
66 | /@next/swc-linux-arm64-gnu@13.5.4:
67 | resolution: {integrity: sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==}
68 | engines: {node: '>= 10'}
69 | cpu: [arm64]
70 | os: [linux]
71 | requiresBuild: true
72 | dev: false
73 | optional: true
74 |
75 | /@next/swc-linux-arm64-musl@13.5.4:
76 | resolution: {integrity: sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==}
77 | engines: {node: '>= 10'}
78 | cpu: [arm64]
79 | os: [linux]
80 | requiresBuild: true
81 | dev: false
82 | optional: true
83 |
84 | /@next/swc-linux-x64-gnu@13.5.4:
85 | resolution: {integrity: sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==}
86 | engines: {node: '>= 10'}
87 | cpu: [x64]
88 | os: [linux]
89 | requiresBuild: true
90 | dev: false
91 | optional: true
92 |
93 | /@next/swc-linux-x64-musl@13.5.4:
94 | resolution: {integrity: sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==}
95 | engines: {node: '>= 10'}
96 | cpu: [x64]
97 | os: [linux]
98 | requiresBuild: true
99 | dev: false
100 | optional: true
101 |
102 | /@next/swc-win32-arm64-msvc@13.5.4:
103 | resolution: {integrity: sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==}
104 | engines: {node: '>= 10'}
105 | cpu: [arm64]
106 | os: [win32]
107 | requiresBuild: true
108 | dev: false
109 | optional: true
110 |
111 | /@next/swc-win32-ia32-msvc@13.5.4:
112 | resolution: {integrity: sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==}
113 | engines: {node: '>= 10'}
114 | cpu: [ia32]
115 | os: [win32]
116 | requiresBuild: true
117 | dev: false
118 | optional: true
119 |
120 | /@next/swc-win32-x64-msvc@13.5.4:
121 | resolution: {integrity: sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==}
122 | engines: {node: '>= 10'}
123 | cpu: [x64]
124 | os: [win32]
125 | requiresBuild: true
126 | dev: false
127 | optional: true
128 |
129 | /@nodelib/fs.scandir@2.1.5:
130 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
131 | engines: {node: '>= 8'}
132 | dependencies:
133 | '@nodelib/fs.stat': 2.0.5
134 | run-parallel: 1.2.0
135 | dev: false
136 |
137 | /@nodelib/fs.stat@2.0.5:
138 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
139 | engines: {node: '>= 8'}
140 | dev: false
141 |
142 | /@nodelib/fs.walk@1.2.8:
143 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
144 | engines: {node: '>= 8'}
145 | dependencies:
146 | '@nodelib/fs.scandir': 2.1.5
147 | fastq: 1.15.0
148 | dev: false
149 |
150 | /@swc/helpers@0.5.2:
151 | resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==}
152 | dependencies:
153 | tslib: 2.5.0
154 | dev: false
155 |
156 | /@types/node@18.15.3:
157 | resolution: {integrity: sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==}
158 | dev: false
159 |
160 | /@types/prop-types@15.7.5:
161 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
162 | dev: false
163 |
164 | /@types/react-dom@18.0.11:
165 | resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==}
166 | dependencies:
167 | '@types/react': 18.0.28
168 | dev: false
169 |
170 | /@types/react@18.0.28:
171 | resolution: {integrity: sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==}
172 | dependencies:
173 | '@types/prop-types': 15.7.5
174 | '@types/scheduler': 0.16.2
175 | csstype: 3.1.1
176 | dev: false
177 |
178 | /@types/scheduler@0.16.2:
179 | resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
180 | dev: false
181 |
182 | /acorn-node@1.8.2:
183 | resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==}
184 | dependencies:
185 | acorn: 7.4.1
186 | acorn-walk: 7.2.0
187 | xtend: 4.0.2
188 | dev: false
189 |
190 | /acorn-walk@7.2.0:
191 | resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
192 | engines: {node: '>=0.4.0'}
193 | dev: false
194 |
195 | /acorn@7.4.1:
196 | resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
197 | engines: {node: '>=0.4.0'}
198 | hasBin: true
199 | dev: false
200 |
201 | /anymatch@3.1.3:
202 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
203 | engines: {node: '>= 8'}
204 | dependencies:
205 | normalize-path: 3.0.0
206 | picomatch: 2.3.1
207 | dev: false
208 |
209 | /arg@5.0.2:
210 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
211 | dev: false
212 |
213 | /autoprefixer@10.4.14(postcss@8.4.21):
214 | resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==}
215 | engines: {node: ^10 || ^12 || >=14}
216 | hasBin: true
217 | peerDependencies:
218 | postcss: ^8.1.0
219 | dependencies:
220 | browserslist: 4.21.5
221 | caniuse-lite: 1.0.30001467
222 | fraction.js: 4.2.0
223 | normalize-range: 0.1.2
224 | picocolors: 1.0.0
225 | postcss: 8.4.21
226 | postcss-value-parser: 4.2.0
227 | dev: false
228 |
229 | /binary-extensions@2.2.0:
230 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
231 | engines: {node: '>=8'}
232 | dev: false
233 |
234 | /braces@3.0.2:
235 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
236 | engines: {node: '>=8'}
237 | dependencies:
238 | fill-range: 7.0.1
239 | dev: false
240 |
241 | /browserslist@4.21.5:
242 | resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==}
243 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
244 | hasBin: true
245 | dependencies:
246 | caniuse-lite: 1.0.30001467
247 | electron-to-chromium: 1.4.332
248 | node-releases: 2.0.10
249 | update-browserslist-db: 1.0.10(browserslist@4.21.5)
250 | dev: false
251 |
252 | /busboy@1.6.0:
253 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
254 | engines: {node: '>=10.16.0'}
255 | dependencies:
256 | streamsearch: 1.1.0
257 | dev: false
258 |
259 | /camelcase-css@2.0.1:
260 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
261 | engines: {node: '>= 6'}
262 | dev: false
263 |
264 | /caniuse-lite@1.0.30001467:
265 | resolution: {integrity: sha512-cEdN/5e+RPikvl9AHm4uuLXxeCNq8rFsQ+lPHTfe/OtypP3WwnVVbjn+6uBV7PaFL6xUFzTh+sSCOz1rKhcO+Q==}
266 | dev: false
267 |
268 | /chokidar@3.5.3:
269 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
270 | engines: {node: '>= 8.10.0'}
271 | dependencies:
272 | anymatch: 3.1.3
273 | braces: 3.0.2
274 | glob-parent: 5.1.2
275 | is-binary-path: 2.1.0
276 | is-glob: 4.0.3
277 | normalize-path: 3.0.0
278 | readdirp: 3.6.0
279 | optionalDependencies:
280 | fsevents: 2.3.2
281 | dev: false
282 |
283 | /client-only@0.0.1:
284 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
285 | dev: false
286 |
287 | /color-name@1.1.4:
288 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
289 | dev: false
290 |
291 | /cssesc@3.0.0:
292 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
293 | engines: {node: '>=4'}
294 | hasBin: true
295 | dev: false
296 |
297 | /csstype@3.1.1:
298 | resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
299 | dev: false
300 |
301 | /defined@1.0.1:
302 | resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==}
303 | dev: false
304 |
305 | /detective@5.2.1:
306 | resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==}
307 | engines: {node: '>=0.8.0'}
308 | hasBin: true
309 | dependencies:
310 | acorn-node: 1.8.2
311 | defined: 1.0.1
312 | minimist: 1.2.8
313 | dev: false
314 |
315 | /didyoumean@1.2.2:
316 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
317 | dev: false
318 |
319 | /dlv@1.1.3:
320 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
321 | dev: false
322 |
323 | /electron-to-chromium@1.4.332:
324 | resolution: {integrity: sha512-c1Vbv5tuUlBFp0mb3mCIjw+REEsgthRgNE8BlbEDKmvzb8rxjcVki6OkQP83vLN34s0XCxpSkq7AZNep1a6xhw==}
325 | dev: false
326 |
327 | /escalade@3.1.1:
328 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
329 | engines: {node: '>=6'}
330 | dev: false
331 |
332 | /fast-glob@3.2.12:
333 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
334 | engines: {node: '>=8.6.0'}
335 | dependencies:
336 | '@nodelib/fs.stat': 2.0.5
337 | '@nodelib/fs.walk': 1.2.8
338 | glob-parent: 5.1.2
339 | merge2: 1.4.1
340 | micromatch: 4.0.5
341 | dev: false
342 |
343 | /fastq@1.15.0:
344 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
345 | dependencies:
346 | reusify: 1.0.4
347 | dev: false
348 |
349 | /fill-range@7.0.1:
350 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
351 | engines: {node: '>=8'}
352 | dependencies:
353 | to-regex-range: 5.0.1
354 | dev: false
355 |
356 | /fraction.js@4.2.0:
357 | resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
358 | dev: false
359 |
360 | /fsevents@2.3.2:
361 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
362 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
363 | os: [darwin]
364 | requiresBuild: true
365 | dev: false
366 | optional: true
367 |
368 | /function-bind@1.1.1:
369 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
370 | dev: false
371 |
372 | /glob-parent@5.1.2:
373 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
374 | engines: {node: '>= 6'}
375 | dependencies:
376 | is-glob: 4.0.3
377 | dev: false
378 |
379 | /glob-parent@6.0.2:
380 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
381 | engines: {node: '>=10.13.0'}
382 | dependencies:
383 | is-glob: 4.0.3
384 | dev: false
385 |
386 | /glob-to-regexp@0.4.1:
387 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
388 | dev: false
389 |
390 | /graceful-fs@4.2.11:
391 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
392 | dev: false
393 |
394 | /has@1.0.3:
395 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
396 | engines: {node: '>= 0.4.0'}
397 | dependencies:
398 | function-bind: 1.1.1
399 | dev: false
400 |
401 | /is-binary-path@2.1.0:
402 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
403 | engines: {node: '>=8'}
404 | dependencies:
405 | binary-extensions: 2.2.0
406 | dev: false
407 |
408 | /is-core-module@2.11.0:
409 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
410 | dependencies:
411 | has: 1.0.3
412 | dev: false
413 |
414 | /is-extglob@2.1.1:
415 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
416 | engines: {node: '>=0.10.0'}
417 | dev: false
418 |
419 | /is-glob@4.0.3:
420 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
421 | engines: {node: '>=0.10.0'}
422 | dependencies:
423 | is-extglob: 2.1.1
424 | dev: false
425 |
426 | /is-number@7.0.0:
427 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
428 | engines: {node: '>=0.12.0'}
429 | dev: false
430 |
431 | /js-tokens@4.0.0:
432 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
433 | dev: false
434 |
435 | /lilconfig@2.1.0:
436 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
437 | engines: {node: '>=10'}
438 | dev: false
439 |
440 | /loose-envify@1.4.0:
441 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
442 | hasBin: true
443 | dependencies:
444 | js-tokens: 4.0.0
445 | dev: false
446 |
447 | /merge2@1.4.1:
448 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
449 | engines: {node: '>= 8'}
450 | dev: false
451 |
452 | /micromatch@4.0.5:
453 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
454 | engines: {node: '>=8.6'}
455 | dependencies:
456 | braces: 3.0.2
457 | picomatch: 2.3.1
458 | dev: false
459 |
460 | /minimist@1.2.8:
461 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
462 | dev: false
463 |
464 | /nanoid@3.3.4:
465 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
466 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
467 | hasBin: true
468 | dev: false
469 |
470 | /nanoid@3.3.6:
471 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
472 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
473 | hasBin: true
474 | dev: false
475 |
476 | /next@13.5.4(react-dom@18.2.0)(react@18.2.0):
477 | resolution: {integrity: sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==}
478 | engines: {node: '>=16.14.0'}
479 | hasBin: true
480 | peerDependencies:
481 | '@opentelemetry/api': ^1.1.0
482 | react: ^18.2.0
483 | react-dom: ^18.2.0
484 | sass: ^1.3.0
485 | peerDependenciesMeta:
486 | '@opentelemetry/api':
487 | optional: true
488 | sass:
489 | optional: true
490 | dependencies:
491 | '@next/env': 13.5.4
492 | '@swc/helpers': 0.5.2
493 | busboy: 1.6.0
494 | caniuse-lite: 1.0.30001467
495 | postcss: 8.4.31
496 | react: 18.2.0
497 | react-dom: 18.2.0(react@18.2.0)
498 | styled-jsx: 5.1.1(react@18.2.0)
499 | watchpack: 2.4.0
500 | optionalDependencies:
501 | '@next/swc-darwin-arm64': 13.5.4
502 | '@next/swc-darwin-x64': 13.5.4
503 | '@next/swc-linux-arm64-gnu': 13.5.4
504 | '@next/swc-linux-arm64-musl': 13.5.4
505 | '@next/swc-linux-x64-gnu': 13.5.4
506 | '@next/swc-linux-x64-musl': 13.5.4
507 | '@next/swc-win32-arm64-msvc': 13.5.4
508 | '@next/swc-win32-ia32-msvc': 13.5.4
509 | '@next/swc-win32-x64-msvc': 13.5.4
510 | transitivePeerDependencies:
511 | - '@babel/core'
512 | - babel-plugin-macros
513 | dev: false
514 |
515 | /node-releases@2.0.10:
516 | resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==}
517 | dev: false
518 |
519 | /normalize-path@3.0.0:
520 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
521 | engines: {node: '>=0.10.0'}
522 | dev: false
523 |
524 | /normalize-range@0.1.2:
525 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
526 | engines: {node: '>=0.10.0'}
527 | dev: false
528 |
529 | /object-hash@3.0.0:
530 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
531 | engines: {node: '>= 6'}
532 | dev: false
533 |
534 | /path-parse@1.0.7:
535 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
536 | dev: false
537 |
538 | /picocolors@1.0.0:
539 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
540 | dev: false
541 |
542 | /picomatch@2.3.1:
543 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
544 | engines: {node: '>=8.6'}
545 | dev: false
546 |
547 | /pify@2.3.0:
548 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
549 | engines: {node: '>=0.10.0'}
550 | dev: false
551 |
552 | /postcss-import@14.1.0(postcss@8.4.21):
553 | resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==}
554 | engines: {node: '>=10.0.0'}
555 | peerDependencies:
556 | postcss: ^8.0.0
557 | dependencies:
558 | postcss: 8.4.21
559 | postcss-value-parser: 4.2.0
560 | read-cache: 1.0.0
561 | resolve: 1.22.1
562 | dev: false
563 |
564 | /postcss-js@4.0.1(postcss@8.4.21):
565 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
566 | engines: {node: ^12 || ^14 || >= 16}
567 | peerDependencies:
568 | postcss: ^8.4.21
569 | dependencies:
570 | camelcase-css: 2.0.1
571 | postcss: 8.4.21
572 | dev: false
573 |
574 | /postcss-load-config@3.1.4(postcss@8.4.21):
575 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
576 | engines: {node: '>= 10'}
577 | peerDependencies:
578 | postcss: '>=8.0.9'
579 | ts-node: '>=9.0.0'
580 | peerDependenciesMeta:
581 | postcss:
582 | optional: true
583 | ts-node:
584 | optional: true
585 | dependencies:
586 | lilconfig: 2.1.0
587 | postcss: 8.4.21
588 | yaml: 1.10.2
589 | dev: false
590 |
591 | /postcss-nested@6.0.0(postcss@8.4.21):
592 | resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==}
593 | engines: {node: '>=12.0'}
594 | peerDependencies:
595 | postcss: ^8.2.14
596 | dependencies:
597 | postcss: 8.4.21
598 | postcss-selector-parser: 6.0.11
599 | dev: false
600 |
601 | /postcss-selector-parser@6.0.11:
602 | resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==}
603 | engines: {node: '>=4'}
604 | dependencies:
605 | cssesc: 3.0.0
606 | util-deprecate: 1.0.2
607 | dev: false
608 |
609 | /postcss-value-parser@4.2.0:
610 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
611 | dev: false
612 |
613 | /postcss@8.4.21:
614 | resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
615 | engines: {node: ^10 || ^12 || >=14}
616 | dependencies:
617 | nanoid: 3.3.4
618 | picocolors: 1.0.0
619 | source-map-js: 1.0.2
620 | dev: false
621 |
622 | /postcss@8.4.31:
623 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
624 | engines: {node: ^10 || ^12 || >=14}
625 | dependencies:
626 | nanoid: 3.3.6
627 | picocolors: 1.0.0
628 | source-map-js: 1.0.2
629 | dev: false
630 |
631 | /queue-microtask@1.2.3:
632 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
633 | dev: false
634 |
635 | /quick-lru@5.1.1:
636 | resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
637 | engines: {node: '>=10'}
638 | dev: false
639 |
640 | /react-dom@18.2.0(react@18.2.0):
641 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
642 | peerDependencies:
643 | react: ^18.2.0
644 | dependencies:
645 | loose-envify: 1.4.0
646 | react: 18.2.0
647 | scheduler: 0.23.0
648 | dev: false
649 |
650 | /react@18.2.0:
651 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
652 | engines: {node: '>=0.10.0'}
653 | dependencies:
654 | loose-envify: 1.4.0
655 | dev: false
656 |
657 | /read-cache@1.0.0:
658 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
659 | dependencies:
660 | pify: 2.3.0
661 | dev: false
662 |
663 | /readdirp@3.6.0:
664 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
665 | engines: {node: '>=8.10.0'}
666 | dependencies:
667 | picomatch: 2.3.1
668 | dev: false
669 |
670 | /resolve@1.22.1:
671 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
672 | hasBin: true
673 | dependencies:
674 | is-core-module: 2.11.0
675 | path-parse: 1.0.7
676 | supports-preserve-symlinks-flag: 1.0.0
677 | dev: false
678 |
679 | /reusify@1.0.4:
680 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
681 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
682 | dev: false
683 |
684 | /run-parallel@1.2.0:
685 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
686 | dependencies:
687 | queue-microtask: 1.2.3
688 | dev: false
689 |
690 | /scheduler@0.23.0:
691 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
692 | dependencies:
693 | loose-envify: 1.4.0
694 | dev: false
695 |
696 | /source-map-js@1.0.2:
697 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
698 | engines: {node: '>=0.10.0'}
699 | dev: false
700 |
701 | /streamsearch@1.1.0:
702 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
703 | engines: {node: '>=10.0.0'}
704 | dev: false
705 |
706 | /styled-jsx@5.1.1(react@18.2.0):
707 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
708 | engines: {node: '>= 12.0.0'}
709 | peerDependencies:
710 | '@babel/core': '*'
711 | babel-plugin-macros: '*'
712 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
713 | peerDependenciesMeta:
714 | '@babel/core':
715 | optional: true
716 | babel-plugin-macros:
717 | optional: true
718 | dependencies:
719 | client-only: 0.0.1
720 | react: 18.2.0
721 | dev: false
722 |
723 | /supports-preserve-symlinks-flag@1.0.0:
724 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
725 | engines: {node: '>= 0.4'}
726 | dev: false
727 |
728 | /swr@2.1.0(react@18.2.0):
729 | resolution: {integrity: sha512-4hYl5p3/KalQ1MORealM79g/DtLohmud6yyfXw5l4wjtFksYUnocRFudvyaoUtgj3FrVNK9lS25Av9dsZYvz0g==}
730 | engines: {pnpm: '7'}
731 | peerDependencies:
732 | react: ^16.11.0 || ^17.0.0 || ^18.0.0
733 | dependencies:
734 | react: 18.2.0
735 | use-sync-external-store: 1.2.0(react@18.2.0)
736 | dev: false
737 |
738 | /tailwindcss@3.2.7(postcss@8.4.21):
739 | resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==}
740 | engines: {node: '>=12.13.0'}
741 | hasBin: true
742 | peerDependencies:
743 | postcss: ^8.0.9
744 | dependencies:
745 | arg: 5.0.2
746 | chokidar: 3.5.3
747 | color-name: 1.1.4
748 | detective: 5.2.1
749 | didyoumean: 1.2.2
750 | dlv: 1.1.3
751 | fast-glob: 3.2.12
752 | glob-parent: 6.0.2
753 | is-glob: 4.0.3
754 | lilconfig: 2.1.0
755 | micromatch: 4.0.5
756 | normalize-path: 3.0.0
757 | object-hash: 3.0.0
758 | picocolors: 1.0.0
759 | postcss: 8.4.21
760 | postcss-import: 14.1.0(postcss@8.4.21)
761 | postcss-js: 4.0.1(postcss@8.4.21)
762 | postcss-load-config: 3.1.4(postcss@8.4.21)
763 | postcss-nested: 6.0.0(postcss@8.4.21)
764 | postcss-selector-parser: 6.0.11
765 | postcss-value-parser: 4.2.0
766 | quick-lru: 5.1.1
767 | resolve: 1.22.1
768 | transitivePeerDependencies:
769 | - ts-node
770 | dev: false
771 |
772 | /to-regex-range@5.0.1:
773 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
774 | engines: {node: '>=8.0'}
775 | dependencies:
776 | is-number: 7.0.0
777 | dev: false
778 |
779 | /tslib@2.5.0:
780 | resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
781 | dev: false
782 |
783 | /typescript@5.0.2:
784 | resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==}
785 | engines: {node: '>=12.20'}
786 | hasBin: true
787 | dev: false
788 |
789 | /update-browserslist-db@1.0.10(browserslist@4.21.5):
790 | resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
791 | hasBin: true
792 | peerDependencies:
793 | browserslist: '>= 4.21.0'
794 | dependencies:
795 | browserslist: 4.21.5
796 | escalade: 3.1.1
797 | picocolors: 1.0.0
798 | dev: false
799 |
800 | /use-sync-external-store@1.2.0(react@18.2.0):
801 | resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
802 | peerDependencies:
803 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
804 | dependencies:
805 | react: 18.2.0
806 | dev: false
807 |
808 | /util-deprecate@1.0.2:
809 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
810 | dev: false
811 |
812 | /watchpack@2.4.0:
813 | resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
814 | engines: {node: '>=10.13.0'}
815 | dependencies:
816 | glob-to-regexp: 0.4.1
817 | graceful-fs: 4.2.11
818 | dev: false
819 |
820 | /xtend@4.0.2:
821 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
822 | engines: {node: '>=0.4'}
823 | dev: false
824 |
825 | /yaml@1.10.2:
826 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
827 | engines: {node: '>= 6'}
828 | dev: false
829 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: [
4 | './pages/**/*.{js,ts,jsx,tsx}',
5 | './components/**/*.{js,ts,jsx,tsx}',
6 | './app/**/*.{js,ts,jsx,tsx}',
7 | ],
8 | theme: {
9 | extend: {},
10 | },
11 | plugins: [],
12 | };
13 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "strict": true,
8 | "forceConsistentCasingInFileNames": true,
9 | "noEmit": true,
10 | "esModuleInterop": true,
11 | "module": "esnext",
12 | "moduleResolution": "node",
13 | "resolveJsonModule": true,
14 | "isolatedModules": true,
15 | "jsx": "preserve",
16 | "incremental": true,
17 | "baseUrl": ".",
18 | "plugins": [
19 | {
20 | "name": "next"
21 | }
22 | ],
23 | "paths": {
24 | "@/*": ["./*"]
25 | }
26 | },
27 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
28 | "exclude": ["node_modules"]
29 | }
30 |
--------------------------------------------------------------------------------