├── .nvmrc
├── app
├── blue-green.css
├── favicon.ico
├── layout.tsx
├── globals.css
├── page.tsx
└── page2
│ └── page.tsx
├── next.config.mjs
├── postcss.config.js
├── .gitignore
├── tailwind.config.ts
├── public
├── vercel.svg
└── next.svg
├── package.json
├── tsconfig.json
├── .github
└── workflows
│ └── cron-blue-green-deploy.yml
├── middleware.ts
├── README.md
└── pnpm-lock.yaml
/.nvmrc:
--------------------------------------------------------------------------------
1 | 20
2 |
--------------------------------------------------------------------------------
/app/blue-green.css:
--------------------------------------------------------------------------------
1 | body {
2 | background: blue;
3 | }
4 |
--------------------------------------------------------------------------------
/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vercel-labs/blue-green/HEAD/app/favicon.ico
--------------------------------------------------------------------------------
/next.config.mjs:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {};
3 |
4 | export default nextConfig;
5 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/.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 | .yarn/install-state.gz
8 |
9 | # testing
10 | /coverage
11 |
12 | # next.js
13 | /.next/
14 | /out/
15 |
16 | # production
17 | /build
18 |
19 | # misc
20 | .DS_Store
21 | *.pem
22 |
23 | # debug
24 | npm-debug.log*
25 | yarn-debug.log*
26 | yarn-error.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 |
--------------------------------------------------------------------------------
/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import type { Metadata } from "next";
2 | import { Inter } from "next/font/google";
3 | import "./globals.css";
4 | import "./blue-green.css";
5 |
6 | const inter = Inter({ subsets: ["latin"] });
7 |
8 | export const metadata: Metadata = {
9 | title: "Blue-Green deployments on Vercel",
10 | };
11 |
12 | export default function RootLayout({
13 | children,
14 | }: Readonly<{
15 | children: React.ReactNode;
16 | }>) {
17 | return (
18 |
19 |
{children}
20 |
21 | );
22 | }
23 |
--------------------------------------------------------------------------------
/app/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | :root {
6 | --foreground-rgb: 0, 0, 0;
7 | --background-start-rgb: 214, 219, 220;
8 | --background-end-rgb: 255, 255, 255;
9 | }
10 |
11 | @media (prefers-color-scheme: dark) {
12 | :root {
13 | --foreground-rgb: 255, 255, 255;
14 | --background-start-rgb: 0, 0, 0;
15 | --background-end-rgb: 0, 0, 0;
16 | }
17 | }
18 |
19 | body {
20 | color: rgb(var(--foreground-rgb));
21 | }
22 |
23 | @layer utilities {
24 | .text-balance {
25 | text-wrap: balance;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from "tailwindcss";
2 |
3 | const config: Config = {
4 | content: [
5 | "./pages/**/*.{js,ts,jsx,tsx,mdx}",
6 | "./components/**/*.{js,ts,jsx,tsx,mdx}",
7 | "./app/**/*.{js,ts,jsx,tsx,mdx}",
8 | ],
9 | theme: {
10 | extend: {
11 | backgroundImage: {
12 | "gradient-radial": "radial-gradient(var(--tw-gradient-stops))",
13 | "gradient-conic":
14 | "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))",
15 | },
16 | },
17 | },
18 | plugins: [],
19 | };
20 | export default config;
21 |
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "blue-green",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "@vercel/edge-config": "^1.1.0",
13 | "next": "14.1.4",
14 | "react": "^18",
15 | "react-dom": "^18"
16 | },
17 | "devDependencies": {
18 | "@types/node": "^20",
19 | "@types/react": "^18",
20 | "@types/react-dom": "^18",
21 | "autoprefixer": "^10.0.1",
22 | "postcss": "^8",
23 | "tailwindcss": "^3.3.0",
24 | "typescript": "^5"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "lib": ["dom", "dom.iterable", "esnext"],
4 | "allowJs": true,
5 | "skipLibCheck": true,
6 | "strict": true,
7 | "noEmit": true,
8 | "esModuleInterop": true,
9 | "module": "esnext",
10 | "moduleResolution": "bundler",
11 | "resolveJsonModule": true,
12 | "isolatedModules": true,
13 | "jsx": "preserve",
14 | "incremental": true,
15 | "plugins": [
16 | {
17 | "name": "next"
18 | }
19 | ],
20 | "paths": {
21 | "@/*": ["./*"]
22 | }
23 | },
24 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
25 | "exclude": ["node_modules"]
26 | }
27 |
--------------------------------------------------------------------------------
/public/next.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.github/workflows/cron-blue-green-deploy.yml:
--------------------------------------------------------------------------------
1 | name: Cron Blue Green Deploy
2 |
3 | # How can I use GitHub Actions with Vercel?
4 | # https://vercel.com/guides/how-can-i-use-github-actions-with-vercel
5 | env:
6 | VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
7 | VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
8 |
9 | on:
10 | # Allow manual runs
11 | workflow_dispatch:
12 | inputs:
13 | logLevel:
14 | description: "Log level"
15 | required: true
16 | default: "information"
17 | type: choice
18 | options:
19 | - information
20 | - debug
21 | - warning
22 | - critical
23 | tags:
24 | description: "Reason for running workflow?"
25 | required: true
26 | type: string
27 | # Run once every day https://crontab.guru/every-day
28 | schedule:
29 | - cron: "0 0 * * *"
30 |
31 | jobs:
32 | create-blue-green-deployments:
33 | runs-on: ubuntu-latest
34 | steps:
35 | - name: Checkout
36 | uses: actions/checkout@v4
37 | with:
38 | # `1` means fetch the latest commit without full history, so it's fast and efficient.
39 | fetch-depth: 1
40 | - name: Set node version
41 | uses: actions/setup-node@v3
42 | with:
43 | node-version-file: ".nvmrc"
44 | - name: Enable corepack
45 | run: corepack enable pnpm
46 | - name: Set pnpm version
47 | uses: pnpm/action-setup@v3
48 | with:
49 | run_install: false
50 | version: 8
51 | - name: Cache node_modules
52 | id: node-modules-cache
53 | uses: actions/cache@v3
54 | with:
55 | path: "**/node_modules"
56 | key: node-modules-cache-${{ hashFiles('**/pnpm-lock.yaml') }}
57 | - name: Install dependencies
58 | if: steps.node-modules-cache.outputs.cache-hit != 'true'
59 | run: pnpm install --no-frozen-lockfile
60 | - name: Install Vercel CLI
61 | run: npm install --global vercel
62 | # Pull down the production environment variables as if were building on Vercel.
63 | # https://vercel.com/docs/cli/pull
64 | - name: Get Vercel Environment Variables
65 | run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}
66 | # Create a "blue" version of the site, deloy it, and capture the deployment url.
67 | - name: Update CSS to Blue
68 | run: 'echo "body {background: blue;}" > ./app/blue-green.css'
69 | - name: Build Blue
70 | run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }}
71 | - name: Deploy Blue
72 | id: deploy-blue
73 | run: echo "url=$(vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }})" >> $GITHUB_OUTPUT
74 | # Create a "green" version of the site, deloy it, and capture the deployment url.
75 | - name: Update CSS to Green
76 | run: 'echo "body {background: green;}" > ./app/blue-green.css'
77 | - name: Build Green
78 | run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }}
79 | - name: Deploy Green
80 | id: deploy-green
81 | run: echo "url=$(vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }})" >> $GITHUB_OUTPUT
82 | # Update the blue-green urls in the Edge Config store using Vercel's API.
83 | # https://vercel.com/docs/storage/edge-config/vercel-api#update-your-edge-config-items
84 | - name: Update Edge Config
85 | run: |
86 | curl -X 'PATCH' 'https://api.vercel.com/v1/edge-config/${{ secrets.VERCEL_EDGE_CONFIG_ID }}/items?teamId=${{ secrets.VERCEL_ORG_ID }}' \
87 | -H 'Authorization: Bearer ${{ secrets.VERCEL_TOKEN }}' \
88 | -H 'Content-Type: application/json' \
89 | -d $'{ "items": [ { "operation": "upsert", "key": "blue-green-configuration", "value": { "deploymentDomainBlue": "${{ steps.deploy-blue.outputs.url }}", "deploymentDomainGreen": "${{ steps.deploy-green.outputs.url }}", "trafficGreenPercent": 50 } } ] }'
90 |
--------------------------------------------------------------------------------
/middleware.ts:
--------------------------------------------------------------------------------
1 | import { get } from "@vercel/edge-config";
2 | import { NextRequest, NextResponse } from "next/server";
3 |
4 | export const config = {
5 | matcher: [
6 | /*
7 | * Match all request paths except for the ones starting with:
8 | * - api (API routes)
9 | * - _next/static (static files)
10 | * - _next/image (image optimization files)
11 | * - favicon.ico (favicon file)
12 | */
13 | "/((?!api|_next/static|_next/image|favicon.ico).*)",
14 | ],
15 | };
16 |
17 | // Configuration stored in Edge Config.
18 | interface BlueGreenConfig {
19 | deploymentDomainBlue: string;
20 | deploymentDomainGreen: string;
21 | trafficGreenPercent: number;
22 | }
23 |
24 | export async function middleware(req: NextRequest) {
25 | // We don't want to run blue-green during development.
26 | if (process.env.NODE_ENV !== "production") {
27 | return NextResponse.next();
28 | }
29 | // Skip if the middleware has already run.
30 | if (req.headers.get("x-deployment-override")) {
31 | return getDeploymentWithCookieBasedOnEnvVar();
32 | }
33 | // We skip blue-green when accesing from deployment urls
34 | if (req.nextUrl.hostname === process.env.VERCEL_URL) {
35 | return NextResponse.next();
36 | }
37 | // We only want to run blue-green for GET requests that are for HTML documents.
38 | if (req.method !== "GET") {
39 | return NextResponse.next();
40 | }
41 | if (req.headers.get("sec-fetch-dest") !== "document") {
42 | return NextResponse.next();
43 | }
44 | // Skip if the request is coming from Vercel's deployment system.
45 | if (/vercel/i.test(req.headers.get("user-agent") || "")) {
46 | return NextResponse.next();
47 | }
48 | if (!process.env.EDGE_CONFIG) {
49 | console.warn("EDGE_CONFIG env variable not set. Skipping blue-green.");
50 | return NextResponse.next();
51 | }
52 | // Get the blue-green configuration from Edge Config.
53 | const blueGreenConfig = await get(
54 | "blue-green-configuration"
55 | );
56 | if (!blueGreenConfig) {
57 | console.warn("No blue-green configuration found");
58 | return NextResponse.next();
59 | }
60 | const servingDeploymentDomain = process.env.VERCEL_URL;
61 | const selectedDeploymentDomain =
62 | selectBlueGreenDeploymentDomain(blueGreenConfig);
63 | console.info(
64 | "Selected deployment domain",
65 | selectedDeploymentDomain,
66 | blueGreenConfig
67 | );
68 | if (!selectedDeploymentDomain) {
69 | return NextResponse.next();
70 | }
71 | // The selected deployment domain is the same as the one serving the request.
72 | if (servingDeploymentDomain === selectedDeploymentDomain) {
73 | return getDeploymentWithCookieBasedOnEnvVar();
74 | }
75 | // Fetch the HTML document from the selected deployment domain and return it to the user.
76 | const headers = new Headers(req.headers);
77 | headers.set("x-deployment-override", selectedDeploymentDomain);
78 | headers.set(
79 | "x-vercel-protection-bypass",
80 | process.env.VERCEL_AUTOMATION_BYPASS_SECRET || "unknown"
81 | );
82 | const url = new URL(req.url);
83 | url.hostname = selectedDeploymentDomain;
84 | return fetch(url, {
85 | headers,
86 | redirect: "manual",
87 | });
88 | }
89 |
90 | // Selects the deployment domain based on the blue-green configuration.
91 | function selectBlueGreenDeploymentDomain(blueGreenConfig: BlueGreenConfig) {
92 | const random = Math.random() * 100;
93 |
94 | const selected =
95 | random < blueGreenConfig.trafficGreenPercent
96 | ? blueGreenConfig.deploymentDomainGreen
97 | : blueGreenConfig.deploymentDomainBlue || process.env.VERCEL_URL;
98 | if (!selected) {
99 | console.error("Blue green configuration error", blueGreenConfig);
100 | }
101 | if (/^http/.test(selected || "")) {
102 | return new URL(selected || "").hostname;
103 | }
104 | return selected;
105 | }
106 |
107 | function getDeploymentWithCookieBasedOnEnvVar() {
108 | console.log(
109 | "Setting cookie based on env var",
110 | process.env.VERCEL_DEPLOYMENT_ID
111 | );
112 | const response = NextResponse.next();
113 | // We need to set this cookie because next.js does not do this by default, but we do want
114 | // the deployment choice to survive a client-side navigation.
115 | response.cookies.set("__vdpl", process.env.VERCEL_DEPLOYMENT_ID || "", {
116 | sameSite: "strict",
117 | httpOnly: true,
118 | maxAge: 60 * 60 * 24, // 24 hours
119 | });
120 | return response;
121 | }
122 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fvercel-labs%2Fblue-green&project-name=blue-gree-on-vercel&repository-name=blue-gree-on-vercel&demo-title=Blue-Green%20deployments%20on%20Vercel&demo-description=See%20how%20Vercel's%20Skew%20Protection%20feature%20enables%20production-ready%20blue-green%20deployments%20with%20just%20a%20few%20lines%20of%20code.&demo-url=https%3A%2F%2Fblue-green.vercel.rocks&demo-image=https%3A%2F%2Fvercel.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Fe5382hct74si%252F4xnSnpCnkYCw6ZzZcCXVVv%252F5e0c6666fe0b9583f42e84d5493b75a5%252Fblue-green.png%26w%3D3840%26q%3D75%26dpl%3Ddpl_8ZzCwcUW4b6UdGfjetyMvumYaoqS)
2 |
3 | # Blue-Green deployments and canary deployments on Vercel
4 |
5 | Blue-green deployments is a deployment strategy where you serve two versions of your application, "Blue" and "Green". You serve the current version of your application (Blue) and then you can then deploy a different version of your application (Green) without affecting the Blue environment.
6 |
7 | [Rolling Releases](https://vercel.com/docs/rolling-releases) are a built-in feature of Vercel that let you configure blue-green deployments with no code changes. You can create automated or manual, multi-stage rollout strategies that integrate with Observability.
8 |
9 | If you'd like to implement blue-green deployments yourself with lower-level primitives, you can use this template to do so.
10 |
11 | - [Demo](https://blue-green.vercel.app)
12 | - [Detailed guide](https://vercel.com/guides/blue_green_deployments_on_vercel)
13 |
14 | This keeps your Blue application running seamlessly for production users while you test and deploy to your Green application. When you're done testing and ready to serve user's your Green application, you can incrementally or fully switch to your new Green application with no perceptible change for your users.
15 |
16 | This is typically done using load balancers to direct traffic, but with [Vercel's generated urls](https://vercel.com/docs/deployments/generated-urls) you can instantly switch which application is served to users seamlessly using [Skew Protection](https://vercel.com/docs/deployments/skew-protection), [Edge Config](https://vercel.com/docs/storage/edge-config), and [Middleware in Next.js](https://nextjs.org/docs/app/building-your-application/routing/middleware). By using Skew Protection, the assignment to the blue or green deployments are sticky across Vercel's entire global CDN, edge functions, and serverless function infrastructure. This ensures users are never shuffling between the blue and green deployment in a given session.
17 |
18 | The blue-green deployment strategy is great for managing risk, giving you the ability to gradually roll out a new version of your application (including breaking changes) or go back to using the previous version instantaneously.
19 |
20 | ## Getting started
21 |
22 | - [Deploy this template](https://vercel.com/templates/next.js/blue-green-deployments-vercel)
23 | - Activate [Skew Protection](https://vercel.com/docs/deployments/skew-protection) for the project
24 | - Activate [Deployment protection bypass](https://vercel.com/docs/security/deployment-protection/methods-to-bypass-deployment-protection/protection-bypass-automation) for the project
25 | - Create an [Edge Config](https://vercel.com/docs/storage/edge-config)
26 | - Use the following Edge Config settings:
27 |
28 | ```json
29 | {
30 | "blue-green-configuration": {
31 | "deploymentDomainBlue": "https://blue-green-61yvm4f5d.vercel.rocks",
32 | "deploymentDomainGreen": "https://blue-green-nq2hvhtsv.vercel.rocks",
33 | "trafficGreenPercent": 50
34 | }
35 | }
36 | ```
37 |
38 | The fields `deploymentDomainBlue` and `deploymentDomainGreen` must be valid [deployment domains](https://vercel.com/docs/deployments/generated-urls) for your projects.
39 |
40 | See this project's [`middleware.ts` file](https://github.com/vercel-labs/blue-green/blob/main/middleware.ts) for the logic implementing the blue-green logic.
41 |
42 | ## Executing a blue-green deployment
43 |
44 | With both deployments using the same [Middleware in this project](https://github.com/vercel-labs/blue-green/blob/main/middleware.ts), Vercel will only serve the deployment specified in your Edge Config.
45 |
46 | The simplest way to perform a blue-green deployment would be to manually update the Edge Config. Upon saving it, the new deployments will begin serving.
47 |
48 | For CI/CD-driven blue-green deployments, you can automate deployments using the [Edge Config API](https://vercel.com/docs/storage/edge-config/vercel-api#update-your-edge-config-items) in your CI/CD pipeline. You can see a working example of this in action by viewing the [GitHub Action in this project](https://github.com/vercel-labs/blue-green/blob/main/.github/workflows/cron-blue-green-deploy.yml). It creates new deployments and updates the Edge Config with the new deployment urls.
49 |
--------------------------------------------------------------------------------
/app/page.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import Link from "next/link";
3 |
4 | export default function Home() {
5 | return (
6 |
7 |
8 |
9 | Reload to get a chance for a different deployment.
10 |
11 |
29 |
30 |
31 |
32 |
40 |
41 |
42 |
92 |
93 | );
94 | }
95 |
--------------------------------------------------------------------------------
/app/page2/page.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 | export default function Home() {
4 | return (
5 |
6 |
7 |
8 | Page 2
9 |
10 |
28 |
29 |
30 |
31 |
39 |
40 |
41 |
110 |
111 | );
112 | }
113 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | '@vercel/edge-config':
9 | specifier: ^1.1.0
10 | version: 1.1.0(typescript@5.4.2)
11 | next:
12 | specifier: 14.1.4
13 | version: 14.1.4(react-dom@18.2.0)(react@18.2.0)
14 | react:
15 | specifier: ^18
16 | version: 18.2.0
17 | react-dom:
18 | specifier: ^18
19 | version: 18.2.0(react@18.2.0)
20 |
21 | devDependencies:
22 | '@types/node':
23 | specifier: ^20
24 | version: 20.11.28
25 | '@types/react':
26 | specifier: ^18
27 | version: 18.2.66
28 | '@types/react-dom':
29 | specifier: ^18
30 | version: 18.2.22
31 | autoprefixer:
32 | specifier: ^10.0.1
33 | version: 10.4.18(postcss@8.4.35)
34 | postcss:
35 | specifier: ^8
36 | version: 8.4.35
37 | tailwindcss:
38 | specifier: ^3.3.0
39 | version: 3.4.1
40 | typescript:
41 | specifier: ^5
42 | version: 5.4.2
43 |
44 | packages:
45 |
46 | /@alloc/quick-lru@5.2.0:
47 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
48 | engines: {node: '>=10'}
49 | dev: true
50 |
51 | /@isaacs/cliui@8.0.2:
52 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
53 | engines: {node: '>=12'}
54 | dependencies:
55 | string-width: 5.1.2
56 | string-width-cjs: /string-width@4.2.3
57 | strip-ansi: 7.1.0
58 | strip-ansi-cjs: /strip-ansi@6.0.1
59 | wrap-ansi: 8.1.0
60 | wrap-ansi-cjs: /wrap-ansi@7.0.0
61 | dev: true
62 |
63 | /@jridgewell/gen-mapping@0.3.5:
64 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
65 | engines: {node: '>=6.0.0'}
66 | dependencies:
67 | '@jridgewell/set-array': 1.2.1
68 | '@jridgewell/sourcemap-codec': 1.4.15
69 | '@jridgewell/trace-mapping': 0.3.25
70 | dev: true
71 |
72 | /@jridgewell/resolve-uri@3.1.2:
73 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
74 | engines: {node: '>=6.0.0'}
75 | dev: true
76 |
77 | /@jridgewell/set-array@1.2.1:
78 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
79 | engines: {node: '>=6.0.0'}
80 | dev: true
81 |
82 | /@jridgewell/sourcemap-codec@1.4.15:
83 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
84 | dev: true
85 |
86 | /@jridgewell/trace-mapping@0.3.25:
87 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
88 | dependencies:
89 | '@jridgewell/resolve-uri': 3.1.2
90 | '@jridgewell/sourcemap-codec': 1.4.15
91 | dev: true
92 |
93 | /@next/env@14.1.4:
94 | resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==}
95 | dev: false
96 |
97 | /@next/swc-darwin-arm64@14.1.4:
98 | resolution: {integrity: sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==}
99 | engines: {node: '>= 10'}
100 | cpu: [arm64]
101 | os: [darwin]
102 | requiresBuild: true
103 | dev: false
104 | optional: true
105 |
106 | /@next/swc-darwin-x64@14.1.4:
107 | resolution: {integrity: sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==}
108 | engines: {node: '>= 10'}
109 | cpu: [x64]
110 | os: [darwin]
111 | requiresBuild: true
112 | dev: false
113 | optional: true
114 |
115 | /@next/swc-linux-arm64-gnu@14.1.4:
116 | resolution: {integrity: sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==}
117 | engines: {node: '>= 10'}
118 | cpu: [arm64]
119 | os: [linux]
120 | requiresBuild: true
121 | dev: false
122 | optional: true
123 |
124 | /@next/swc-linux-arm64-musl@14.1.4:
125 | resolution: {integrity: sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==}
126 | engines: {node: '>= 10'}
127 | cpu: [arm64]
128 | os: [linux]
129 | requiresBuild: true
130 | dev: false
131 | optional: true
132 |
133 | /@next/swc-linux-x64-gnu@14.1.4:
134 | resolution: {integrity: sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==}
135 | engines: {node: '>= 10'}
136 | cpu: [x64]
137 | os: [linux]
138 | requiresBuild: true
139 | dev: false
140 | optional: true
141 |
142 | /@next/swc-linux-x64-musl@14.1.4:
143 | resolution: {integrity: sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==}
144 | engines: {node: '>= 10'}
145 | cpu: [x64]
146 | os: [linux]
147 | requiresBuild: true
148 | dev: false
149 | optional: true
150 |
151 | /@next/swc-win32-arm64-msvc@14.1.4:
152 | resolution: {integrity: sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==}
153 | engines: {node: '>= 10'}
154 | cpu: [arm64]
155 | os: [win32]
156 | requiresBuild: true
157 | dev: false
158 | optional: true
159 |
160 | /@next/swc-win32-ia32-msvc@14.1.4:
161 | resolution: {integrity: sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==}
162 | engines: {node: '>= 10'}
163 | cpu: [ia32]
164 | os: [win32]
165 | requiresBuild: true
166 | dev: false
167 | optional: true
168 |
169 | /@next/swc-win32-x64-msvc@14.1.4:
170 | resolution: {integrity: sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==}
171 | engines: {node: '>= 10'}
172 | cpu: [x64]
173 | os: [win32]
174 | requiresBuild: true
175 | dev: false
176 | optional: true
177 |
178 | /@nodelib/fs.scandir@2.1.5:
179 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
180 | engines: {node: '>= 8'}
181 | dependencies:
182 | '@nodelib/fs.stat': 2.0.5
183 | run-parallel: 1.2.0
184 | dev: true
185 |
186 | /@nodelib/fs.stat@2.0.5:
187 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
188 | engines: {node: '>= 8'}
189 | dev: true
190 |
191 | /@nodelib/fs.walk@1.2.8:
192 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
193 | engines: {node: '>= 8'}
194 | dependencies:
195 | '@nodelib/fs.scandir': 2.1.5
196 | fastq: 1.17.1
197 | dev: true
198 |
199 | /@pkgjs/parseargs@0.11.0:
200 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
201 | engines: {node: '>=14'}
202 | requiresBuild: true
203 | dev: true
204 | optional: true
205 |
206 | /@swc/helpers@0.5.2:
207 | resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==}
208 | dependencies:
209 | tslib: 2.6.2
210 | dev: false
211 |
212 | /@types/node@20.11.28:
213 | resolution: {integrity: sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA==}
214 | dependencies:
215 | undici-types: 5.26.5
216 | dev: true
217 |
218 | /@types/prop-types@15.7.11:
219 | resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==}
220 | dev: true
221 |
222 | /@types/react-dom@18.2.22:
223 | resolution: {integrity: sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==}
224 | dependencies:
225 | '@types/react': 18.2.66
226 | dev: true
227 |
228 | /@types/react@18.2.66:
229 | resolution: {integrity: sha512-OYTmMI4UigXeFMF/j4uv0lBBEbongSgptPrHBxqME44h9+yNov+oL6Z3ocJKo0WyXR84sQUNeyIp9MRfckvZpg==}
230 | dependencies:
231 | '@types/prop-types': 15.7.11
232 | '@types/scheduler': 0.16.8
233 | csstype: 3.1.3
234 | dev: true
235 |
236 | /@types/scheduler@0.16.8:
237 | resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==}
238 | dev: true
239 |
240 | /@vercel/edge-config-fs@0.1.0:
241 | resolution: {integrity: sha512-NRIBwfcS0bUoUbRWlNGetqjvLSwgYH/BqKqDN7vK1g32p7dN96k0712COgaz6VFizAm9b0g6IG6hR6+hc0KCPg==}
242 | dev: false
243 |
244 | /@vercel/edge-config@1.1.0(typescript@5.4.2):
245 | resolution: {integrity: sha512-es/4BzzKfyUilL5E1knR42MZHJqHMRfqitrnv18gVZZUha9ywrX3qNoCrPsNMJ1HS8xAAz/FJEyel7YFIDfKoQ==}
246 | engines: {node: '>=14.6'}
247 | peerDependencies:
248 | '@opentelemetry/api': ^1.7.0
249 | peerDependenciesMeta:
250 | '@opentelemetry/api':
251 | optional: true
252 | dependencies:
253 | '@vercel/edge-config-fs': 0.1.0
254 | ts-essentials: 9.4.1(typescript@5.4.2)
255 | transitivePeerDependencies:
256 | - typescript
257 | dev: false
258 |
259 | /ansi-regex@5.0.1:
260 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
261 | engines: {node: '>=8'}
262 | dev: true
263 |
264 | /ansi-regex@6.0.1:
265 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
266 | engines: {node: '>=12'}
267 | dev: true
268 |
269 | /ansi-styles@4.3.0:
270 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
271 | engines: {node: '>=8'}
272 | dependencies:
273 | color-convert: 2.0.1
274 | dev: true
275 |
276 | /ansi-styles@6.2.1:
277 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
278 | engines: {node: '>=12'}
279 | dev: true
280 |
281 | /any-promise@1.3.0:
282 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
283 | dev: true
284 |
285 | /anymatch@3.1.3:
286 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
287 | engines: {node: '>= 8'}
288 | dependencies:
289 | normalize-path: 3.0.0
290 | picomatch: 2.3.1
291 | dev: true
292 |
293 | /arg@5.0.2:
294 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
295 | dev: true
296 |
297 | /autoprefixer@10.4.18(postcss@8.4.35):
298 | resolution: {integrity: sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==}
299 | engines: {node: ^10 || ^12 || >=14}
300 | hasBin: true
301 | peerDependencies:
302 | postcss: ^8.1.0
303 | dependencies:
304 | browserslist: 4.23.0
305 | caniuse-lite: 1.0.30001598
306 | fraction.js: 4.3.7
307 | normalize-range: 0.1.2
308 | picocolors: 1.0.0
309 | postcss: 8.4.35
310 | postcss-value-parser: 4.2.0
311 | dev: true
312 |
313 | /balanced-match@1.0.2:
314 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
315 | dev: true
316 |
317 | /binary-extensions@2.3.0:
318 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
319 | engines: {node: '>=8'}
320 | dev: true
321 |
322 | /brace-expansion@2.0.1:
323 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
324 | dependencies:
325 | balanced-match: 1.0.2
326 | dev: true
327 |
328 | /braces@3.0.2:
329 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
330 | engines: {node: '>=8'}
331 | dependencies:
332 | fill-range: 7.0.1
333 | dev: true
334 |
335 | /browserslist@4.23.0:
336 | resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==}
337 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
338 | hasBin: true
339 | dependencies:
340 | caniuse-lite: 1.0.30001598
341 | electron-to-chromium: 1.4.708
342 | node-releases: 2.0.14
343 | update-browserslist-db: 1.0.13(browserslist@4.23.0)
344 | dev: true
345 |
346 | /busboy@1.6.0:
347 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
348 | engines: {node: '>=10.16.0'}
349 | dependencies:
350 | streamsearch: 1.1.0
351 | dev: false
352 |
353 | /camelcase-css@2.0.1:
354 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
355 | engines: {node: '>= 6'}
356 | dev: true
357 |
358 | /caniuse-lite@1.0.30001598:
359 | resolution: {integrity: sha512-j8mQRDziG94uoBfeFuqsJUNECW37DXpnvhcMJMdlH2u3MRkq1sAI0LJcXP1i/Py0KbSIC4UDj8YHPrTn5YsL+Q==}
360 |
361 | /chokidar@3.6.0:
362 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
363 | engines: {node: '>= 8.10.0'}
364 | dependencies:
365 | anymatch: 3.1.3
366 | braces: 3.0.2
367 | glob-parent: 5.1.2
368 | is-binary-path: 2.1.0
369 | is-glob: 4.0.3
370 | normalize-path: 3.0.0
371 | readdirp: 3.6.0
372 | optionalDependencies:
373 | fsevents: 2.3.3
374 | dev: true
375 |
376 | /client-only@0.0.1:
377 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
378 | dev: false
379 |
380 | /color-convert@2.0.1:
381 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
382 | engines: {node: '>=7.0.0'}
383 | dependencies:
384 | color-name: 1.1.4
385 | dev: true
386 |
387 | /color-name@1.1.4:
388 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
389 | dev: true
390 |
391 | /commander@4.1.1:
392 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
393 | engines: {node: '>= 6'}
394 | dev: true
395 |
396 | /cross-spawn@7.0.3:
397 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
398 | engines: {node: '>= 8'}
399 | dependencies:
400 | path-key: 3.1.1
401 | shebang-command: 2.0.0
402 | which: 2.0.2
403 | dev: true
404 |
405 | /cssesc@3.0.0:
406 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
407 | engines: {node: '>=4'}
408 | hasBin: true
409 | dev: true
410 |
411 | /csstype@3.1.3:
412 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
413 | dev: true
414 |
415 | /didyoumean@1.2.2:
416 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
417 | dev: true
418 |
419 | /dlv@1.1.3:
420 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
421 | dev: true
422 |
423 | /eastasianwidth@0.2.0:
424 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
425 | dev: true
426 |
427 | /electron-to-chromium@1.4.708:
428 | resolution: {integrity: sha512-iWgEEvREL4GTXXHKohhh33+6Y8XkPI5eHihDmm8zUk5Zo7HICEW+wI/j5kJ2tbuNUCXJ/sNXa03ajW635DiJXA==}
429 | dev: true
430 |
431 | /emoji-regex@8.0.0:
432 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
433 | dev: true
434 |
435 | /emoji-regex@9.2.2:
436 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
437 | dev: true
438 |
439 | /escalade@3.1.2:
440 | resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
441 | engines: {node: '>=6'}
442 | dev: true
443 |
444 | /fast-glob@3.3.2:
445 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
446 | engines: {node: '>=8.6.0'}
447 | dependencies:
448 | '@nodelib/fs.stat': 2.0.5
449 | '@nodelib/fs.walk': 1.2.8
450 | glob-parent: 5.1.2
451 | merge2: 1.4.1
452 | micromatch: 4.0.5
453 | dev: true
454 |
455 | /fastq@1.17.1:
456 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
457 | dependencies:
458 | reusify: 1.0.4
459 | dev: true
460 |
461 | /fill-range@7.0.1:
462 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
463 | engines: {node: '>=8'}
464 | dependencies:
465 | to-regex-range: 5.0.1
466 | dev: true
467 |
468 | /foreground-child@3.1.1:
469 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
470 | engines: {node: '>=14'}
471 | dependencies:
472 | cross-spawn: 7.0.3
473 | signal-exit: 4.1.0
474 | dev: true
475 |
476 | /fraction.js@4.3.7:
477 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
478 | dev: true
479 |
480 | /fsevents@2.3.3:
481 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
482 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
483 | os: [darwin]
484 | requiresBuild: true
485 | dev: true
486 | optional: true
487 |
488 | /function-bind@1.1.2:
489 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
490 | dev: true
491 |
492 | /glob-parent@5.1.2:
493 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
494 | engines: {node: '>= 6'}
495 | dependencies:
496 | is-glob: 4.0.3
497 | dev: true
498 |
499 | /glob-parent@6.0.2:
500 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
501 | engines: {node: '>=10.13.0'}
502 | dependencies:
503 | is-glob: 4.0.3
504 | dev: true
505 |
506 | /glob@10.3.10:
507 | resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==}
508 | engines: {node: '>=16 || 14 >=14.17'}
509 | hasBin: true
510 | dependencies:
511 | foreground-child: 3.1.1
512 | jackspeak: 2.3.6
513 | minimatch: 9.0.3
514 | minipass: 7.0.4
515 | path-scurry: 1.10.1
516 | dev: true
517 |
518 | /graceful-fs@4.2.11:
519 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
520 | dev: false
521 |
522 | /hasown@2.0.2:
523 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
524 | engines: {node: '>= 0.4'}
525 | dependencies:
526 | function-bind: 1.1.2
527 | dev: true
528 |
529 | /is-binary-path@2.1.0:
530 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
531 | engines: {node: '>=8'}
532 | dependencies:
533 | binary-extensions: 2.3.0
534 | dev: true
535 |
536 | /is-core-module@2.13.1:
537 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
538 | dependencies:
539 | hasown: 2.0.2
540 | dev: true
541 |
542 | /is-extglob@2.1.1:
543 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
544 | engines: {node: '>=0.10.0'}
545 | dev: true
546 |
547 | /is-fullwidth-code-point@3.0.0:
548 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
549 | engines: {node: '>=8'}
550 | dev: true
551 |
552 | /is-glob@4.0.3:
553 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
554 | engines: {node: '>=0.10.0'}
555 | dependencies:
556 | is-extglob: 2.1.1
557 | dev: true
558 |
559 | /is-number@7.0.0:
560 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
561 | engines: {node: '>=0.12.0'}
562 | dev: true
563 |
564 | /isexe@2.0.0:
565 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
566 | dev: true
567 |
568 | /jackspeak@2.3.6:
569 | resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
570 | engines: {node: '>=14'}
571 | dependencies:
572 | '@isaacs/cliui': 8.0.2
573 | optionalDependencies:
574 | '@pkgjs/parseargs': 0.11.0
575 | dev: true
576 |
577 | /jiti@1.21.0:
578 | resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
579 | hasBin: true
580 | dev: true
581 |
582 | /js-tokens@4.0.0:
583 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
584 | dev: false
585 |
586 | /lilconfig@2.1.0:
587 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
588 | engines: {node: '>=10'}
589 | dev: true
590 |
591 | /lilconfig@3.1.1:
592 | resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==}
593 | engines: {node: '>=14'}
594 | dev: true
595 |
596 | /lines-and-columns@1.2.4:
597 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
598 | dev: true
599 |
600 | /loose-envify@1.4.0:
601 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
602 | hasBin: true
603 | dependencies:
604 | js-tokens: 4.0.0
605 | dev: false
606 |
607 | /lru-cache@10.2.0:
608 | resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==}
609 | engines: {node: 14 || >=16.14}
610 | dev: true
611 |
612 | /merge2@1.4.1:
613 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
614 | engines: {node: '>= 8'}
615 | dev: true
616 |
617 | /micromatch@4.0.5:
618 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
619 | engines: {node: '>=8.6'}
620 | dependencies:
621 | braces: 3.0.2
622 | picomatch: 2.3.1
623 | dev: true
624 |
625 | /minimatch@9.0.3:
626 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
627 | engines: {node: '>=16 || 14 >=14.17'}
628 | dependencies:
629 | brace-expansion: 2.0.1
630 | dev: true
631 |
632 | /minipass@7.0.4:
633 | resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==}
634 | engines: {node: '>=16 || 14 >=14.17'}
635 | dev: true
636 |
637 | /mz@2.7.0:
638 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
639 | dependencies:
640 | any-promise: 1.3.0
641 | object-assign: 4.1.1
642 | thenify-all: 1.6.0
643 | dev: true
644 |
645 | /nanoid@3.3.7:
646 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
647 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
648 | hasBin: true
649 |
650 | /next@14.1.4(react-dom@18.2.0)(react@18.2.0):
651 | resolution: {integrity: sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==}
652 | engines: {node: '>=18.17.0'}
653 | hasBin: true
654 | peerDependencies:
655 | '@opentelemetry/api': ^1.1.0
656 | react: ^18.2.0
657 | react-dom: ^18.2.0
658 | sass: ^1.3.0
659 | peerDependenciesMeta:
660 | '@opentelemetry/api':
661 | optional: true
662 | sass:
663 | optional: true
664 | dependencies:
665 | '@next/env': 14.1.4
666 | '@swc/helpers': 0.5.2
667 | busboy: 1.6.0
668 | caniuse-lite: 1.0.30001598
669 | graceful-fs: 4.2.11
670 | postcss: 8.4.31
671 | react: 18.2.0
672 | react-dom: 18.2.0(react@18.2.0)
673 | styled-jsx: 5.1.1(react@18.2.0)
674 | optionalDependencies:
675 | '@next/swc-darwin-arm64': 14.1.4
676 | '@next/swc-darwin-x64': 14.1.4
677 | '@next/swc-linux-arm64-gnu': 14.1.4
678 | '@next/swc-linux-arm64-musl': 14.1.4
679 | '@next/swc-linux-x64-gnu': 14.1.4
680 | '@next/swc-linux-x64-musl': 14.1.4
681 | '@next/swc-win32-arm64-msvc': 14.1.4
682 | '@next/swc-win32-ia32-msvc': 14.1.4
683 | '@next/swc-win32-x64-msvc': 14.1.4
684 | transitivePeerDependencies:
685 | - '@babel/core'
686 | - babel-plugin-macros
687 | dev: false
688 |
689 | /node-releases@2.0.14:
690 | resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
691 | dev: true
692 |
693 | /normalize-path@3.0.0:
694 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
695 | engines: {node: '>=0.10.0'}
696 | dev: true
697 |
698 | /normalize-range@0.1.2:
699 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
700 | engines: {node: '>=0.10.0'}
701 | dev: true
702 |
703 | /object-assign@4.1.1:
704 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
705 | engines: {node: '>=0.10.0'}
706 | dev: true
707 |
708 | /object-hash@3.0.0:
709 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
710 | engines: {node: '>= 6'}
711 | dev: true
712 |
713 | /path-key@3.1.1:
714 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
715 | engines: {node: '>=8'}
716 | dev: true
717 |
718 | /path-parse@1.0.7:
719 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
720 | dev: true
721 |
722 | /path-scurry@1.10.1:
723 | resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==}
724 | engines: {node: '>=16 || 14 >=14.17'}
725 | dependencies:
726 | lru-cache: 10.2.0
727 | minipass: 7.0.4
728 | dev: true
729 |
730 | /picocolors@1.0.0:
731 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
732 |
733 | /picomatch@2.3.1:
734 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
735 | engines: {node: '>=8.6'}
736 | dev: true
737 |
738 | /pify@2.3.0:
739 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
740 | engines: {node: '>=0.10.0'}
741 | dev: true
742 |
743 | /pirates@4.0.6:
744 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
745 | engines: {node: '>= 6'}
746 | dev: true
747 |
748 | /postcss-import@15.1.0(postcss@8.4.35):
749 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
750 | engines: {node: '>=14.0.0'}
751 | peerDependencies:
752 | postcss: ^8.0.0
753 | dependencies:
754 | postcss: 8.4.35
755 | postcss-value-parser: 4.2.0
756 | read-cache: 1.0.0
757 | resolve: 1.22.8
758 | dev: true
759 |
760 | /postcss-js@4.0.1(postcss@8.4.35):
761 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
762 | engines: {node: ^12 || ^14 || >= 16}
763 | peerDependencies:
764 | postcss: ^8.4.21
765 | dependencies:
766 | camelcase-css: 2.0.1
767 | postcss: 8.4.35
768 | dev: true
769 |
770 | /postcss-load-config@4.0.2(postcss@8.4.35):
771 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
772 | engines: {node: '>= 14'}
773 | peerDependencies:
774 | postcss: '>=8.0.9'
775 | ts-node: '>=9.0.0'
776 | peerDependenciesMeta:
777 | postcss:
778 | optional: true
779 | ts-node:
780 | optional: true
781 | dependencies:
782 | lilconfig: 3.1.1
783 | postcss: 8.4.35
784 | yaml: 2.4.1
785 | dev: true
786 |
787 | /postcss-nested@6.0.1(postcss@8.4.35):
788 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
789 | engines: {node: '>=12.0'}
790 | peerDependencies:
791 | postcss: ^8.2.14
792 | dependencies:
793 | postcss: 8.4.35
794 | postcss-selector-parser: 6.0.16
795 | dev: true
796 |
797 | /postcss-selector-parser@6.0.16:
798 | resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==}
799 | engines: {node: '>=4'}
800 | dependencies:
801 | cssesc: 3.0.0
802 | util-deprecate: 1.0.2
803 | dev: true
804 |
805 | /postcss-value-parser@4.2.0:
806 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
807 | dev: true
808 |
809 | /postcss@8.4.31:
810 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
811 | engines: {node: ^10 || ^12 || >=14}
812 | dependencies:
813 | nanoid: 3.3.7
814 | picocolors: 1.0.0
815 | source-map-js: 1.0.2
816 | dev: false
817 |
818 | /postcss@8.4.35:
819 | resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==}
820 | engines: {node: ^10 || ^12 || >=14}
821 | dependencies:
822 | nanoid: 3.3.7
823 | picocolors: 1.0.0
824 | source-map-js: 1.0.2
825 | dev: true
826 |
827 | /queue-microtask@1.2.3:
828 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
829 | dev: true
830 |
831 | /react-dom@18.2.0(react@18.2.0):
832 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
833 | peerDependencies:
834 | react: ^18.2.0
835 | dependencies:
836 | loose-envify: 1.4.0
837 | react: 18.2.0
838 | scheduler: 0.23.0
839 | dev: false
840 |
841 | /react@18.2.0:
842 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
843 | engines: {node: '>=0.10.0'}
844 | dependencies:
845 | loose-envify: 1.4.0
846 | dev: false
847 |
848 | /read-cache@1.0.0:
849 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
850 | dependencies:
851 | pify: 2.3.0
852 | dev: true
853 |
854 | /readdirp@3.6.0:
855 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
856 | engines: {node: '>=8.10.0'}
857 | dependencies:
858 | picomatch: 2.3.1
859 | dev: true
860 |
861 | /resolve@1.22.8:
862 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
863 | hasBin: true
864 | dependencies:
865 | is-core-module: 2.13.1
866 | path-parse: 1.0.7
867 | supports-preserve-symlinks-flag: 1.0.0
868 | dev: true
869 |
870 | /reusify@1.0.4:
871 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
872 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
873 | dev: true
874 |
875 | /run-parallel@1.2.0:
876 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
877 | dependencies:
878 | queue-microtask: 1.2.3
879 | dev: true
880 |
881 | /scheduler@0.23.0:
882 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
883 | dependencies:
884 | loose-envify: 1.4.0
885 | dev: false
886 |
887 | /shebang-command@2.0.0:
888 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
889 | engines: {node: '>=8'}
890 | dependencies:
891 | shebang-regex: 3.0.0
892 | dev: true
893 |
894 | /shebang-regex@3.0.0:
895 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
896 | engines: {node: '>=8'}
897 | dev: true
898 |
899 | /signal-exit@4.1.0:
900 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
901 | engines: {node: '>=14'}
902 | dev: true
903 |
904 | /source-map-js@1.0.2:
905 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
906 | engines: {node: '>=0.10.0'}
907 |
908 | /streamsearch@1.1.0:
909 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
910 | engines: {node: '>=10.0.0'}
911 | dev: false
912 |
913 | /string-width@4.2.3:
914 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
915 | engines: {node: '>=8'}
916 | dependencies:
917 | emoji-regex: 8.0.0
918 | is-fullwidth-code-point: 3.0.0
919 | strip-ansi: 6.0.1
920 | dev: true
921 |
922 | /string-width@5.1.2:
923 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
924 | engines: {node: '>=12'}
925 | dependencies:
926 | eastasianwidth: 0.2.0
927 | emoji-regex: 9.2.2
928 | strip-ansi: 7.1.0
929 | dev: true
930 |
931 | /strip-ansi@6.0.1:
932 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
933 | engines: {node: '>=8'}
934 | dependencies:
935 | ansi-regex: 5.0.1
936 | dev: true
937 |
938 | /strip-ansi@7.1.0:
939 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
940 | engines: {node: '>=12'}
941 | dependencies:
942 | ansi-regex: 6.0.1
943 | dev: true
944 |
945 | /styled-jsx@5.1.1(react@18.2.0):
946 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
947 | engines: {node: '>= 12.0.0'}
948 | peerDependencies:
949 | '@babel/core': '*'
950 | babel-plugin-macros: '*'
951 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
952 | peerDependenciesMeta:
953 | '@babel/core':
954 | optional: true
955 | babel-plugin-macros:
956 | optional: true
957 | dependencies:
958 | client-only: 0.0.1
959 | react: 18.2.0
960 | dev: false
961 |
962 | /sucrase@3.35.0:
963 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
964 | engines: {node: '>=16 || 14 >=14.17'}
965 | hasBin: true
966 | dependencies:
967 | '@jridgewell/gen-mapping': 0.3.5
968 | commander: 4.1.1
969 | glob: 10.3.10
970 | lines-and-columns: 1.2.4
971 | mz: 2.7.0
972 | pirates: 4.0.6
973 | ts-interface-checker: 0.1.13
974 | dev: true
975 |
976 | /supports-preserve-symlinks-flag@1.0.0:
977 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
978 | engines: {node: '>= 0.4'}
979 | dev: true
980 |
981 | /tailwindcss@3.4.1:
982 | resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==}
983 | engines: {node: '>=14.0.0'}
984 | hasBin: true
985 | dependencies:
986 | '@alloc/quick-lru': 5.2.0
987 | arg: 5.0.2
988 | chokidar: 3.6.0
989 | didyoumean: 1.2.2
990 | dlv: 1.1.3
991 | fast-glob: 3.3.2
992 | glob-parent: 6.0.2
993 | is-glob: 4.0.3
994 | jiti: 1.21.0
995 | lilconfig: 2.1.0
996 | micromatch: 4.0.5
997 | normalize-path: 3.0.0
998 | object-hash: 3.0.0
999 | picocolors: 1.0.0
1000 | postcss: 8.4.35
1001 | postcss-import: 15.1.0(postcss@8.4.35)
1002 | postcss-js: 4.0.1(postcss@8.4.35)
1003 | postcss-load-config: 4.0.2(postcss@8.4.35)
1004 | postcss-nested: 6.0.1(postcss@8.4.35)
1005 | postcss-selector-parser: 6.0.16
1006 | resolve: 1.22.8
1007 | sucrase: 3.35.0
1008 | transitivePeerDependencies:
1009 | - ts-node
1010 | dev: true
1011 |
1012 | /thenify-all@1.6.0:
1013 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
1014 | engines: {node: '>=0.8'}
1015 | dependencies:
1016 | thenify: 3.3.1
1017 | dev: true
1018 |
1019 | /thenify@3.3.1:
1020 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
1021 | dependencies:
1022 | any-promise: 1.3.0
1023 | dev: true
1024 |
1025 | /to-regex-range@5.0.1:
1026 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1027 | engines: {node: '>=8.0'}
1028 | dependencies:
1029 | is-number: 7.0.0
1030 | dev: true
1031 |
1032 | /ts-essentials@9.4.1(typescript@5.4.2):
1033 | resolution: {integrity: sha512-oke0rI2EN9pzHsesdmrOrnqv1eQODmJpd/noJjwj2ZPC3Z4N2wbjrOEqnsEgmvlO2+4fBb0a794DCna2elEVIQ==}
1034 | peerDependencies:
1035 | typescript: '>=4.1.0'
1036 | peerDependenciesMeta:
1037 | typescript:
1038 | optional: true
1039 | dependencies:
1040 | typescript: 5.4.2
1041 | dev: false
1042 |
1043 | /ts-interface-checker@0.1.13:
1044 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
1045 | dev: true
1046 |
1047 | /tslib@2.6.2:
1048 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
1049 | dev: false
1050 |
1051 | /typescript@5.4.2:
1052 | resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==}
1053 | engines: {node: '>=14.17'}
1054 | hasBin: true
1055 |
1056 | /undici-types@5.26.5:
1057 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
1058 | dev: true
1059 |
1060 | /update-browserslist-db@1.0.13(browserslist@4.23.0):
1061 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
1062 | hasBin: true
1063 | peerDependencies:
1064 | browserslist: '>= 4.21.0'
1065 | dependencies:
1066 | browserslist: 4.23.0
1067 | escalade: 3.1.2
1068 | picocolors: 1.0.0
1069 | dev: true
1070 |
1071 | /util-deprecate@1.0.2:
1072 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1073 | dev: true
1074 |
1075 | /which@2.0.2:
1076 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1077 | engines: {node: '>= 8'}
1078 | hasBin: true
1079 | dependencies:
1080 | isexe: 2.0.0
1081 | dev: true
1082 |
1083 | /wrap-ansi@7.0.0:
1084 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
1085 | engines: {node: '>=10'}
1086 | dependencies:
1087 | ansi-styles: 4.3.0
1088 | string-width: 4.2.3
1089 | strip-ansi: 6.0.1
1090 | dev: true
1091 |
1092 | /wrap-ansi@8.1.0:
1093 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
1094 | engines: {node: '>=12'}
1095 | dependencies:
1096 | ansi-styles: 6.2.1
1097 | string-width: 5.1.2
1098 | strip-ansi: 7.1.0
1099 | dev: true
1100 |
1101 | /yaml@2.4.1:
1102 | resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==}
1103 | engines: {node: '>= 14'}
1104 | hasBin: true
1105 | dev: true
1106 |
--------------------------------------------------------------------------------