├── .tool-versions
├── .eslintrc.json
├── public
├── favicon-16x16.png
└── favicon-32x32.png
├── postcss.config.js
├── app
├── globals.css
├── stores
│ ├── user.ts
│ ├── cable.ts
│ └── messages.ts
├── utils
│ ├── format-date.ts
│ ├── gravatar-url.ts
│ ├── seed-random.ts
│ └── room-label.ts
├── components
│ ├── powered-by.tsx
│ ├── main-layout.tsx
│ ├── offline-overlay.tsx
│ ├── header
│ │ ├── sign-out-button.tsx
│ │ ├── room-actions.tsx
│ │ ├── header.tsx
│ │ └── avatar-actions.tsx
│ ├── auth-form.tsx
│ ├── button.tsx
│ ├── new-message-form.tsx
│ ├── message-list.tsx
│ ├── chat.tsx
│ ├── combined-input.tsx
│ ├── message.tsx
│ ├── avatar.tsx
│ ├── menu.tsx
│ └── intro.tsx
├── api
│ ├── anycable
│ │ └── route.ts
│ ├── auth
│ │ └── cable
│ │ │ └── route.ts
│ ├── cable.ts
│ ├── channels
│ │ └── chat-channel.ts
│ └── og
│ │ └── route.tsx
├── channels
│ └── chat-channel.ts
├── fakes.ts
├── layout.tsx
├── page.tsx
└── auth
│ ├── page.tsx
│ └── logo.tsx
├── prettier.config.js
├── .env.sample
├── next.config.js
├── .gitignore
├── middleware.ts
├── tsconfig.json
├── fly.toml.example
├── package.json
├── tailwind.config.ts
├── README.md
└── pnpm-lock.yaml
/.tool-versions:
--------------------------------------------------------------------------------
1 | pnpm 8.7.5
2 | nodejs 20.5.1
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["next/core-web-vitals", "plugin:prettier/recommended"]
3 | }
4 |
--------------------------------------------------------------------------------
/public/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anycable/vercel-anycable-demo/HEAD/public/favicon-16x16.png
--------------------------------------------------------------------------------
/public/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anycable/vercel-anycable-demo/HEAD/public/favicon-32x32.png
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/app/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | * {
6 | @apply outline-red-600;
7 | }
--------------------------------------------------------------------------------
/app/stores/user.ts:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { map } from "nanostores";
4 |
5 | export const $user = map({
6 | username: "",
7 | });
8 |
--------------------------------------------------------------------------------
/prettier.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('prettier').Options} */
2 | module.exports = {
3 | plugins: ["prettier-plugin-tailwindcss"],
4 | };
5 |
--------------------------------------------------------------------------------
/.env.sample:
--------------------------------------------------------------------------------
1 | CABLE_URL=ws://localhost:8080/cable
2 | ANYCABLE_RPC_HOST=http://localhost:3000/api/anycable
3 | ANYCABLE_HTTP_BROADCAST_URL=http://localhost:8090/_broadcast
4 | ANYCABLE_HTTP_BROADCAST_SECRET=secr3t
5 | ANYCABLE_JWT_ID_KEY=jt1
6 |
--------------------------------------------------------------------------------
/app/utils/format-date.ts:
--------------------------------------------------------------------------------
1 | export function formatDateToHours(dateString: string) {
2 | const date = new Date(dateString);
3 | const hours = String(date.getHours()).padStart(2, "0");
4 | const minutes = String(date.getMinutes()).padStart(2, "0");
5 |
6 | return `${hours}:${minutes}`;
7 | }
8 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | experimental: {
4 | serverActions: true,
5 | },
6 | rewrites: async () => {
7 | return [
8 | {
9 | source: "/api/anycable/:path*",
10 | destination: "/api/anycable",
11 | },
12 | ];
13 | },
14 | };
15 |
16 | module.exports = nextConfig;
17 |
--------------------------------------------------------------------------------
/app/components/powered-by.tsx:
--------------------------------------------------------------------------------
1 | export function PoweredBy() {
2 | return (
3 |
9 | Powered by AnyCable
10 |
11 | );
12 | }
13 |
--------------------------------------------------------------------------------
/app/utils/gravatar-url.ts:
--------------------------------------------------------------------------------
1 | import md5 from "md5";
2 |
3 | const emailPattern = /.+@.+/;
4 | export function getGravatarUrl(emailOrUsername: string) {
5 | const trimmed = emailOrUsername.trim().toLowerCase();
6 |
7 | if (!emailPattern.test(trimmed)) {
8 | return null;
9 | }
10 | const emailHash = md5(trimmed);
11 | return `https://www.gravatar.com/avatar/${emailHash}?d=identicon`;
12 | }
13 |
--------------------------------------------------------------------------------
/app/components/main-layout.tsx:
--------------------------------------------------------------------------------
1 | import { PropsWithChildren } from "react";
2 | import { PoweredBy } from "./powered-by";
3 |
4 | export function MainLayout(props: PropsWithChildren) {
5 | return (
6 |
7 |
8 | {props.children}
9 |
10 |
11 |
12 | );
13 | }
14 |
--------------------------------------------------------------------------------
/app/utils/seed-random.ts:
--------------------------------------------------------------------------------
1 | function simpleHash(str: string) {
2 | let hash = 0;
3 | for (let i = 0; i < str.length; i++) {
4 | const char = str.charCodeAt(i);
5 | hash = (hash << 5) - hash + char;
6 | hash |= 0; // Convert to 32bit integer
7 | }
8 | return hash;
9 | }
10 |
11 | export function seededRandom(id: string, arr: T[]) {
12 | const hash = simpleHash(id);
13 | const index = Math.abs(hash) % arr.length;
14 | return arr[index];
15 | }
16 |
--------------------------------------------------------------------------------
/app/components/offline-overlay.tsx:
--------------------------------------------------------------------------------
1 | import { useStore } from "@nanostores/react";
2 | import { cx } from "class-variance-authority";
3 | import { $cableState } from "../stores/cable";
4 |
5 | export function OfflineOverlay() {
6 | const cableState = useStore($cableState);
7 |
8 | return (
9 |
15 | );
16 | }
17 |
--------------------------------------------------------------------------------
/app/api/anycable/route.ts:
--------------------------------------------------------------------------------
1 | import { NextResponse } from "next/server";
2 | import { handler, Status } from "@anycable/serverless-js";
3 | import app from "../cable";
4 |
5 | export async function POST(request: Request) {
6 | try {
7 | const response = await handler(request, app);
8 | return NextResponse.json(response, {
9 | status: 200,
10 | });
11 | } catch (e) {
12 | console.error(e);
13 | return NextResponse.json({
14 | status: Status.ERROR,
15 | error_msg: "Server error",
16 | });
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/components/header/sign-out-button.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { Button } from "../button";
4 | import { experimental_useFormStatus as useFormStatus } from "react-dom";
5 |
6 | export function SignOutButton({ action }: { action: () => void }) {
7 | return (
8 |
11 | );
12 | }
13 |
14 | function SubmitButton() {
15 | const { pending } = useFormStatus();
16 |
17 | return (
18 |
19 | Sign out
20 |
21 | );
22 | }
23 |
--------------------------------------------------------------------------------
/.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 |
27 | # local env files
28 | .env*.local
29 | .env
30 | .env.production
31 |
32 | # vercel
33 | .vercel
34 |
35 | # typescript
36 | *.tsbuildinfo
37 | next-env.d.ts
38 | fly.toml
39 |
--------------------------------------------------------------------------------
/middleware.ts:
--------------------------------------------------------------------------------
1 | import { NextResponse, type NextRequest } from "next/server";
2 | import { identifier } from "./app/api/cable";
3 |
4 | export async function middleware(request: NextRequest) {
5 | const token = request.cookies.get("token")?.value;
6 |
7 | if (token) {
8 | try {
9 | await identifier.verify(token);
10 | return;
11 | } catch (e) {
12 | console.log(e);
13 | }
14 | }
15 |
16 | const url = new URL(request.url);
17 | url.pathname = "/auth";
18 |
19 | return NextResponse.redirect(url);
20 | }
21 |
22 | export const config = {
23 | matcher: "/",
24 | };
25 |
--------------------------------------------------------------------------------
/app/api/auth/cable/route.ts:
--------------------------------------------------------------------------------
1 | import { NextResponse } from "next/server";
2 | import { cookies } from "next/headers";
3 | import { identifier, CABLE_URL } from "../../cable";
4 |
5 | export async function POST(request: Request) {
6 | const token = cookies().get("token")?.value;
7 |
8 | if (!token) {
9 | return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
10 | }
11 |
12 | try {
13 | await identifier.verify(token);
14 | const data = { url: `${CABLE_URL}?jid=${token}` };
15 | return NextResponse.json(data, { status: 200 });
16 | } catch (e) {
17 | console.log(e);
18 | return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "strict": true,
8 | "noEmit": true,
9 | "esModuleInterop": true,
10 | "module": "esnext",
11 | "moduleResolution": "bundler",
12 | "resolveJsonModule": true,
13 | "isolatedModules": true,
14 | "jsx": "preserve",
15 | "incremental": true,
16 | "plugins": [
17 | {
18 | "name": "next"
19 | }
20 | ],
21 | "paths": {
22 | "@/*": ["./*"]
23 | }
24 | },
25 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
26 | "exclude": ["node_modules"]
27 | }
28 |
--------------------------------------------------------------------------------
/app/channels/chat-channel.ts:
--------------------------------------------------------------------------------
1 | import { Channel } from "@anycable/web";
2 | import type { ChannelEvents } from "@anycable/core";
3 | import type { Message as IMessage } from "../components/message";
4 |
5 | export type SentMessage = {
6 | body: string;
7 | };
8 |
9 | export type ChatChannelParams = {
10 | roomId: string;
11 | };
12 |
13 | export interface ChatActions {
14 | sendMessage(message: SentMessage): void;
15 | }
16 |
17 | interface ChatEvents extends ChannelEvents {}
18 |
19 | export default class ChatChannel extends Channel<
20 | ChatChannelParams,
21 | IMessage,
22 | ChatEvents,
23 | ChatActions
24 | > {
25 | static identifier = "chat";
26 |
27 | sendMessage(message: SentMessage) {
28 | this.perform("sendMessage", message);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/components/auth-form.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { experimental_useFormStatus as useFormStatus } from "react-dom";
4 |
5 | import { CombinedInput } from "./combined-input";
6 |
7 | export function AuthForm({ action }: { action: (form: FormData) => unknown }) {
8 | return (
9 |
19 | );
20 | }
21 |
22 | function SubmitButton() {
23 | const { pending } = useFormStatus();
24 |
25 | return Enter ;
26 | }
27 |
--------------------------------------------------------------------------------
/app/components/header/room-actions.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { Menu } from "../menu";
4 |
5 | async function copyToClipboard() {
6 | await navigator.clipboard.writeText(window.location.href);
7 | }
8 |
9 | export function RoomActions({ newRoomId }: { newRoomId: string }) {
10 | return (
11 |
12 |
13 |
14 |
15 |
16 | Copy URL
17 |
18 |
19 |
20 |
21 | New room
22 |
23 |
24 |
25 |
26 | );
27 | }
28 |
--------------------------------------------------------------------------------
/app/components/button.tsx:
--------------------------------------------------------------------------------
1 | import { VariantProps, cva, cx } from "class-variance-authority";
2 |
3 | const button = cva(
4 | "relative cursor-pointer rounded-md disabled:cursor-not-allowed",
5 | {
6 | variants: {
7 | theme: {
8 | red: "text-white bg-red-500 enabled:hover:bg-red-400 disabled:bg-red-300",
9 | ghost: "text-gray-950 font-semibold enabled:hover:text-gray-800",
10 | },
11 | size: {
12 | sm: "px-2 py-1 rounded text-xs",
13 | md: "px-5 py-2 rounded-md",
14 | },
15 | },
16 | defaultVariants: { theme: "red", size: "md" },
17 | },
18 | );
19 |
20 | export function Button({
21 | theme,
22 | size,
23 | className,
24 | ...props
25 | }: JSX.IntrinsicElements["button"] & VariantProps) {
26 | return (
27 |
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/app/utils/room-label.ts:
--------------------------------------------------------------------------------
1 | import { seededRandom } from "./seed-random";
2 |
3 | const rooms = [
4 | "Einstein",
5 | "Newton",
6 | "Galileo",
7 | "Darwin",
8 | "Curie",
9 | "Hawking",
10 | "Feynman",
11 | "Socrates",
12 | "Plato",
13 | "Aristotle",
14 | "Descartes",
15 | "Kant",
16 | "Nietzsche",
17 | "Confucius",
18 | "Shakespeare",
19 | "Hemingway",
20 | "Orwell",
21 | "Fitzgerald",
22 | "Tolkien",
23 | "Mozart",
24 | "Beethoven",
25 | "Bach",
26 | "Vivaldi",
27 | "Chopin",
28 | "DaVinci",
29 | "Michelangelo",
30 | "Picasso",
31 | "Rembrandt",
32 | "VanGogh",
33 | "Copernicus",
34 | "Kepler",
35 | "Bohr",
36 | "Maxwell",
37 | "Archimedes",
38 | "Heidegger",
39 | "Locke",
40 | "Hume",
41 | ];
42 |
43 | export const getRoomLabel = (id: string) => seededRandom(id, rooms);
44 |
45 | export const isRoomLabel = (name: string) => rooms.includes(name);
46 |
--------------------------------------------------------------------------------
/app/stores/cable.ts:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { atom, onSet } from "nanostores";
4 | import type { Cable } from "@anycable/core";
5 | import { createCable } from "@anycable/web";
6 | import { $user } from "./user";
7 |
8 | export const $cable = atom();
9 | export const $cableState = atom("connecting");
10 | export type CableState = Cable["state"];
11 |
12 | onSet($user, async () => {
13 | const url = await fetch("/api/auth/cable", {
14 | method: "POST",
15 | })
16 | .then((r) => r.json())
17 | .then((r) => r.url);
18 |
19 | if ($cable.value) $cable.value.disconnect();
20 |
21 | const cable = createCable(url, {
22 | protocol: "actioncable-v1-ext-json",
23 | historyTimestamp: Math.floor(Date.now() / 1000) - 5 * 60, // 5 minutes ago
24 | logLevel: "debug",
25 | });
26 | cable.on("connect", () => {
27 | $cableState.set("connected");
28 | });
29 | cable.on("disconnect", () => {
30 | $cableState.set("disconnected");
31 | });
32 | cable.on("close", () => {
33 | $cableState.set("closed");
34 | });
35 |
36 | $cable.set(cable);
37 | });
38 |
--------------------------------------------------------------------------------
/fly.toml.example:
--------------------------------------------------------------------------------
1 | app = "vercel-cable"
2 | kill_signal = "SIGINT"
3 | kill_timeout = 5
4 | processes = []
5 |
6 | [build]
7 | image = "anycable/anycable-go:1.4"
8 |
9 | [env]
10 | PORT = "8080"
11 | ANYCABLE_BROKER = "memory"
12 | # ANYCABLE_HTTP_BROADCAST_SECRET = "" # set via secrets
13 | # ANYCABLE_RPC_HOST = "" # set via secrets
14 | # ANYCABLE_DEBUG = "true" # uncomment to enable debug logging
15 |
16 | # ADVANCED: enable NATS broker for multi-node setup (NOTE: at least 3 nodes are required)
17 | # ANYCABLE_BROKER = "nats"
18 |
19 | [[services]]
20 | http_checks = []
21 | internal_port = 8080
22 | processes = ["app"]
23 | protocol = "tcp"
24 | script_checks = []
25 |
26 | # ADVANCED: Configure the size of the cluster when using NATS-based broker
27 | # auto_stop_machines = true
28 | # auto_start_machines = true
29 | # min_machines_running = 3
30 |
31 | [services.concurrency]
32 | hard_limit = 10000
33 | soft_limit = 10000
34 | type = "connections"
35 |
36 | [[services.ports]]
37 | handlers = ["tls", "http"]
38 | port = 443
39 |
40 | [[services.tcp_checks]]
41 | grace_period = "1s"
42 | interval = "15s"
43 | restart_limit = 0
44 | timeout = "2s"
45 |
--------------------------------------------------------------------------------
/app/fakes.ts:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | // TEMP: Fake data
4 | import { $user } from "./stores/user";
5 | import { addMessage } from "./stores/messages";
6 |
7 | // Generate 5 random messages
8 | const messages = [
9 | {
10 | id: "1",
11 | username: $user.get().username,
12 | body: "Hey, how are you?",
13 | createdAt: "2022-01-01T12:00:00Z",
14 | },
15 | {
16 | id: "2",
17 | username: "mary read",
18 | body: "I am doing well, thanks for asking! When people ask such questions, I feel very welcomed!",
19 | createdAt: "2022-01-01T12:05:00Z",
20 | },
21 | {
22 | id: "3",
23 | username: $user.get().username,
24 | body: "That is great to hear!",
25 | createdAt: "2022-01-01T12:10:00Z",
26 | },
27 | {
28 | id: "4",
29 | username: $user.get().username,
30 | body: "What's you up into these days?",
31 | createdAt: "2022-01-01T12:15:00Z",
32 | },
33 | {
34 | id: "5",
35 | username: "mary read",
36 | body: "Some real-time stuff",
37 | createdAt: "2022-01-01T12:20:00Z",
38 | },
39 | ];
40 |
41 | // Call this async to avoid hydration errors
42 | setTimeout(() => {
43 | for (const message of messages) {
44 | addMessage(message);
45 | }
46 | }, 1000);
47 |
--------------------------------------------------------------------------------
/app/components/header/header.tsx:
--------------------------------------------------------------------------------
1 | import { cookies } from "next/headers";
2 | import { RoomActions } from "./room-actions";
3 | import { redirect } from "next/navigation";
4 | import { nanoid } from "nanoid";
5 | import { AvatarActions } from "./avatar-actions";
6 |
7 | export function Header({ roomLabel }: { roomLabel: string }) {
8 | const username = cookies().get("username")?.value!;
9 |
10 | async function signOut() {
11 | "use server";
12 |
13 | cookies().delete("token");
14 | cookies().delete("username");
15 | return redirect("/auth");
16 | }
17 |
18 | return (
19 |
20 |
21 |
22 |
23 |
24 |
Room
25 |
{roomLabel}
26 |
27 |
28 |
31 |
32 |
33 | );
34 | }
35 |
--------------------------------------------------------------------------------
/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import "./globals.css";
2 | import type { Metadata } from "next";
3 | import { Inter } from "next/font/google";
4 | import { MainLayout } from "./components/main-layout";
5 | import { cx } from "class-variance-authority";
6 |
7 | const inter = Inter({ subsets: ["latin"] });
8 |
9 | const title = "AnyCable Next.js Demo",
10 | description =
11 | "Next.js messaging application using AnyCable as a real-time server and deployed on Vercel";
12 |
13 | export const metadata: Metadata = {
14 | title,
15 | description,
16 | openGraph: {
17 | title,
18 | description,
19 | locale: "en_US",
20 | type: "website",
21 | },
22 | };
23 |
24 | export default function RootLayout({
25 | children,
26 | }: {
27 | children: React.ReactNode;
28 | }) {
29 | return (
30 |
31 |
32 |
33 |
39 |
45 |
46 |
47 | {children}
48 |
49 |
50 | );
51 | }
52 |
--------------------------------------------------------------------------------
/app/components/new-message-form.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { useState } from "react";
4 | import { createMessage } from "../stores/messages";
5 | import { Button } from "./button";
6 | import { useStore } from "@nanostores/react";
7 | import { $cableState } from "../stores/cable";
8 |
9 | export const NewMessageForm = () => {
10 | const [body, setBody] = useState("");
11 | const state = useStore($cableState);
12 | const submitDisabled = state !== "idle" && state !== "connected";
13 |
14 | return (
15 |
42 | );
43 | };
44 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vercel-anycable-demo",
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 | "anycable-go": "anycable-go --broadcast_adapter=http --presets=broker --rpc_impl=http --rpc_host=http://localhost:3000/api/anycable"
11 | },
12 | "dependencies": {
13 | "@anycable/anycable-go": "^1.5.2",
14 | "@anycable/core": "^0.7.8",
15 | "@anycable/serverless-js": "^0.1.0",
16 | "@anycable/web": "^0.7.3",
17 | "@headlessui/react": "^1.7.17",
18 | "@nanostores/react": "^0.7.1",
19 | "@types/md5": "^2.3.2",
20 | "@types/node": "20.6.0",
21 | "@types/react": "18.2.21",
22 | "@types/react-dom": "18.2.7",
23 | "autoprefixer": "10.4.15",
24 | "class-variance-authority": "^0.7.0",
25 | "jose": "^4.14.6",
26 | "md5": "^2.3.0",
27 | "nanoid": "^5.0.1",
28 | "nanostores": "^0.9.3",
29 | "next": "13.5.1",
30 | "postcss": "8.4.29",
31 | "react": "18.2.0",
32 | "react-dom": "18.2.0",
33 | "tailwindcss": "3.3.3",
34 | "typescript": "5.2.2"
35 | },
36 | "devDependencies": {
37 | "eslint": "8.45.0",
38 | "eslint-config-next": "13.4.16",
39 | "eslint-config-prettier": "^9.0.0",
40 | "eslint-plugin-prettier": "^5.0.0",
41 | "prettier": "^3.0.3",
42 | "prettier-plugin-tailwindcss": "^0.5.4"
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/app/components/message-list.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { useStore } from "@nanostores/react";
4 | import { $messages } from "../stores/messages";
5 | import { Message } from "./message";
6 | import { $user } from "../stores/user";
7 |
8 | export const MessageList = () => {
9 | const messages = useStore($messages);
10 | const user = useStore($user);
11 |
12 | return (
13 |
14 | {messages.map((message, i) => {
15 | const mine = message.username === user.username;
16 |
17 | /*
18 | Aligned with telegram:
19 | 1. we show name for each first message of a user in a sequence of messages from them
20 | 2. we show avatar for each last message of a user in a sequence of messages from them
21 | */
22 | const showName =
23 | !mine && messages[i - 1]?.username !== message.username;
24 | const showAvatar =
25 | !mine && messages[i + 1]?.username !== message.username;
26 |
27 | return (
28 |
35 | );
36 | })}
37 | {!messages.length && (
38 |
{`No messages have bees seen here recently. Don't be shy, send something!`}
39 | )}
40 |
41 | );
42 | };
43 |
--------------------------------------------------------------------------------
/app/components/chat.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { ReactNode, useEffect } from "react";
4 | import { MessageList } from "./message-list";
5 | import { NewMessageForm } from "./new-message-form";
6 | import { $channel, $roomId, addAutoScroll } from "../stores/messages";
7 | import { useSearchParams } from "next/navigation";
8 | import { useStore } from "@nanostores/react";
9 | import { $user } from "../stores/user";
10 | import { OfflineOverlay } from "./offline-overlay";
11 |
12 | export function Chat({
13 | header,
14 | username,
15 | }: {
16 | header: ReactNode;
17 | username: string;
18 | }) {
19 | // Initializing connection
20 | useStore($channel);
21 |
22 | const searchParams = useSearchParams();
23 | const roomId = searchParams.get("roomId");
24 |
25 | useEffect(() => {
26 | if (roomId) $roomId.set(roomId);
27 | }, [roomId]);
28 |
29 | useEffect(() => $user.set({ username }), [username]);
30 | useEffect(() => addAutoScroll(document.documentElement), []);
31 |
32 | return (
33 |
34 |
37 |
38 |
39 |
40 |
45 |
46 |
47 | );
48 | }
49 |
--------------------------------------------------------------------------------
/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from "tailwindcss";
2 | import plugin from "tailwindcss/plugin";
3 |
4 | const config: Config = {
5 | content: [
6 | "./pages/**/*.{js,ts,jsx,tsx,mdx}",
7 | "./components/**/*.{js,ts,jsx,tsx,mdx}",
8 | "./app/**/*.{js,ts,jsx,tsx,mdx}",
9 | ],
10 | theme: {
11 | extend: {
12 | backgroundImage: {
13 | "gradient-radial": "radial-gradient(var(--tw-gradient-stops))",
14 | "gradient-conic":
15 | "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))",
16 | },
17 | fontSize: {
18 | "2xs": "0.6rem", // You can adjust the size as needed
19 | },
20 | },
21 | },
22 | plugins: [
23 | plugin(function ({ addUtilities }) {
24 | addUtilities({
25 | ".text-wrap": { "text-wrap": "wrap" },
26 | ".text-nowrap": { "text-wrap": "nowrap" },
27 | ".text-balance": { "text-wrap": "balance" },
28 | });
29 | }),
30 | plugin(function ({ addUtilities }) {
31 | addUtilities({
32 | ".absolute-center": {
33 | "--tw-translate-x": "-50%",
34 | "--tw-translate-y": "-50%",
35 | left: "50%",
36 | position: "absolute",
37 | top: "50%",
38 | transform:
39 | "translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))",
40 | },
41 | });
42 | }),
43 | ],
44 | };
45 | export default config;
46 |
--------------------------------------------------------------------------------
/app/components/combined-input.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { useId, createContext, useContext, PropsWithChildren } from "react";
4 |
5 | const IdContext = createContext("");
6 | const useCtxId = () => useContext(IdContext);
7 |
8 | function Root({ label, children }: PropsWithChildren<{ label: string }>) {
9 | const id = useId();
10 |
11 | return (
12 |
13 |
14 |
15 | {label}
16 |
17 | {children}
18 |
19 |
20 | );
21 | }
22 |
23 | function Input(props: JSX.IntrinsicElements["input"]) {
24 | return (
25 |
26 |
31 |
32 | );
33 | }
34 |
35 | function Button(props: JSX.IntrinsicElements["button"]) {
36 | return (
37 |
41 | );
42 | }
43 |
44 | export const CombinedInput = { Root, Input, Button };
45 |
--------------------------------------------------------------------------------
/app/components/message.tsx:
--------------------------------------------------------------------------------
1 | import { cx } from "class-variance-authority";
2 | import { formatDateToHours } from "../utils/format-date";
3 | import { Avatar } from "./avatar";
4 |
5 | export type Message = {
6 | id: string;
7 | username: string;
8 | avatar?: string;
9 | body: string;
10 | createdAt: string;
11 | };
12 |
13 | interface Props {
14 | message: Message;
15 | mine: boolean;
16 | showName: boolean;
17 | showAvatar: boolean;
18 | }
19 |
20 | export const Message = ({ message, mine, showName, showAvatar }: Props) => {
21 | return (
22 |
28 | {showAvatar && (
29 |
32 | )}
33 | {showName && (
34 |
35 | {message.username}
36 |
37 | )}
38 |
{message.body}
39 |
47 | {formatDateToHours(message.createdAt)}
48 |
49 |
50 | );
51 | };
52 |
--------------------------------------------------------------------------------
/app/page.tsx:
--------------------------------------------------------------------------------
1 | import { redirect } from "next/navigation";
2 | import { Chat } from "./components/chat";
3 | import { nanoid } from "nanoid";
4 | import { getRoomLabel } from "./utils/room-label";
5 | import { Header } from "./components/header/header";
6 | import { cookies } from "next/headers";
7 | import { Metadata } from "next";
8 | import { Intro } from "./components/intro";
9 |
10 | export async function generateMetadata({
11 | searchParams: { roomId },
12 | }: {
13 | searchParams: { [key: string]: string };
14 | }): Promise {
15 | const roomLabel = getRoomLabel(roomId);
16 |
17 | return {
18 | title: `${roomLabel} | AnyCable Next.js Demo`,
19 | openGraph: {
20 | images: [
21 | {
22 | url: `/api/og/?roomLabel=${roomLabel}`,
23 | width: 1200,
24 | height: 630,
25 | },
26 | ],
27 | },
28 | };
29 | }
30 |
31 | export default function Home({
32 | searchParams,
33 | }: {
34 | searchParams: { [key: string]: string };
35 | }) {
36 | if (!searchParams.roomId) {
37 | return redirect(`/?roomId=${nanoid()}`);
38 | }
39 | const showIntro = !cookies().get("introShown")?.value;
40 |
41 | async function introShownAction() {
42 | "use server";
43 |
44 | cookies().set("introShown", "1");
45 | }
46 |
47 | return (
48 | <>
49 | }
52 | />
53 |
54 | >
55 | );
56 | }
57 |
--------------------------------------------------------------------------------
/app/stores/messages.ts:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { atom, computed, onSet } from "nanostores";
4 |
5 | import type { Message as IMessage } from "../components/message";
6 |
7 | import ChatChannel from "../channels/chat-channel";
8 | import { $cable } from "./cable";
9 |
10 | export const $messages = atom([]);
11 |
12 | export const addAutoScroll = (container: HTMLElement) =>
13 | onSet($messages, () => {
14 | /*
15 | Marvelous thing: at some point `scrollTop` started to give me… fractional numbers!
16 | Let's pretend that 5 pixel difference doesn't, really matter here.
17 | */
18 | const isCurrentlyAtBottom =
19 | Math.abs(
20 | container.scrollTop - (container.scrollHeight - container.clientHeight),
21 | ) < 5;
22 |
23 | if (isCurrentlyAtBottom) {
24 | // Wrapping with timeout to scroll after new message is rendered
25 | setTimeout(() => container.scrollTo({ top: container.scrollHeight }));
26 | }
27 | });
28 |
29 | export const $roomId = atom();
30 |
31 | export const $channel = computed([$cable, $roomId], (cable, roomId) => {
32 | if (!cable || !roomId) return;
33 |
34 | $channel.value?.disconnect();
35 |
36 | $messages.set([]);
37 | const channel = new ChatChannel({ roomId });
38 | cable.subscribe(channel);
39 | channel.on("message", (message) => {
40 | addMessage(message);
41 | });
42 |
43 | return channel;
44 | });
45 |
46 | export const addMessage = (message: IMessage) => {
47 | $messages.set([...$messages.get(), message]);
48 | };
49 |
50 | export const createMessage = async (body: string) => {
51 | $channel.value?.sendMessage({ body });
52 | };
53 |
--------------------------------------------------------------------------------
/app/api/cable.ts:
--------------------------------------------------------------------------------
1 | import {
2 | Application,
3 | ConnectionHandle,
4 | broadcaster,
5 | identificator,
6 | } from "@anycable/serverless-js";
7 | import ChatChannel from "./channels/chat-channel";
8 |
9 | export type CableIdentifiers = {
10 | username: string;
11 | };
12 |
13 | export const CABLE_URL = process.env.CABLE_URL || "ws://localhost:8080/cable";
14 |
15 | // Broadcasting configuration
16 | const broadcastURL =
17 | process.env.ANYCABLE_HTTP_BROADCAST_URL || "http://localhost:8090/_broadcast";
18 | const broadcastToken = process.env.ANYCABLE_HTTP_BROADCAST_SECRET || "";
19 |
20 | export const broadcastTo = broadcaster(broadcastURL, broadcastToken);
21 |
22 | const jwtSecret = process.env.ANYCABLE_JWT_ID_KEY || "hey";
23 | const jwtTTL = "2h";
24 |
25 | export const identifier = identificator(jwtSecret, jwtTTL);
26 |
27 | class CableApplication extends Application {
28 | // Override this method to handle connection open event
29 | async connect(handle: ConnectionHandle) {
30 | const url = handle.env.url;
31 | const params = new URL(url).searchParams;
32 |
33 | if (params.has("jid")) {
34 | const jwtPayload = await identifier.verifyAndFetch(params.get("jid")!);
35 |
36 | if (jwtPayload) {
37 | handle.identifiedBy(jwtPayload);
38 | } else {
39 | handle.reject();
40 | }
41 | }
42 | }
43 |
44 | // Override this method to handle connection close event
45 | async disconnect(handle: ConnectionHandle) {
46 | console.log(`User ${handle.identifiers!.username} disconnected`);
47 | }
48 | }
49 |
50 | const app = new CableApplication();
51 |
52 | // Register channels here
53 | app.registerChannel("chat", new ChatChannel());
54 |
55 | export default app;
56 |
--------------------------------------------------------------------------------
/app/components/avatar.tsx:
--------------------------------------------------------------------------------
1 | import { SVGProps, useMemo } from "react";
2 | import { getGravatarUrl } from "../utils/gravatar-url";
3 | import { cx } from "class-variance-authority";
4 |
5 | export function Avatar({
6 | username,
7 | indicatorClass,
8 | }: {
9 | username: string;
10 | indicatorClass?: string;
11 | }) {
12 | const url = useMemo(() => {
13 | return getGravatarUrl(username);
14 | }, [username]);
15 |
16 | const fragment = url ? (
17 | // eslint-disable-next-line @next/next/no-img-element
18 |
19 | ) : (
20 |
24 | );
25 |
26 | return (
27 |
28 |
{fragment}
29 | {indicatorClass && (
30 |
36 | )}
37 |
38 | );
39 | }
40 |
41 | export function TeenyiconsUserCircleSolid(props: SVGProps) {
42 | return (
43 |
50 |
54 |
60 |
61 | );
62 | }
63 |
--------------------------------------------------------------------------------
/app/api/channels/chat-channel.ts:
--------------------------------------------------------------------------------
1 | import { Channel, ChannelHandle } from "@anycable/serverless-js";
2 | import type { ServerAction } from "@anycable/serverless-js";
3 | import type { CableIdentifiers } from "../cable";
4 | import { broadcastTo } from "../cable";
5 |
6 | import type { SentMessage } from "@/app/channels/chat-channel";
7 | import { ChatChannelParams, ChatActions } from "@/app/channels/chat-channel";
8 | import type { Message as IMessage } from "../../components/message";
9 |
10 | type ActionsType = {
11 | [K in keyof ChatActions]: ServerAction<
12 | ChatActions[K],
13 | CableIdentifiers,
14 | {},
15 | IMessage,
16 | ChatChannelParams
17 | >;
18 | };
19 |
20 | interface Actions extends ActionsType {}
21 |
22 | export default class ChatChannel
23 | extends Channel
24 | implements Actions
25 | {
26 | async subscribed(
27 | handle: ChannelHandle,
28 | params: ChatChannelParams | null,
29 | ) {
30 | if (!params) {
31 | handle.reject();
32 | return;
33 | }
34 |
35 | if (!params.roomId) {
36 | handle.reject();
37 | return;
38 | }
39 |
40 | handle.streamFrom(`room:${params.roomId}`);
41 | }
42 |
43 | async sendMessage(
44 | handle: ChannelHandle,
45 | params: ChatChannelParams,
46 | data: SentMessage,
47 | ) {
48 | const { body } = data;
49 |
50 | if (!body) {
51 | throw new Error("Body is required");
52 | }
53 |
54 | console.log(
55 | `User ${handle.identifiers!.username} sent message: ${data.body}`,
56 | );
57 |
58 | const message: IMessage = {
59 | id: Math.random().toString(36).substr(2, 9),
60 | username: handle.identifiers!.username,
61 | body,
62 | createdAt: new Date().toISOString(),
63 | };
64 |
65 | await broadcastTo(`room:${params.roomId}`, message);
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/app/auth/page.tsx:
--------------------------------------------------------------------------------
1 | import { AuthForm } from "../components/auth-form";
2 | import { MainLayout } from "../components/main-layout";
3 | import { Logo } from "./logo";
4 | import { redirect } from "next/navigation";
5 | import { cookies } from "next/headers";
6 | import { identifier } from "../api/cable";
7 | import { nanoid } from "nanoid";
8 |
9 | export default async function AuthPage({
10 | searchParams,
11 | }: {
12 | searchParams: { [key: string]: string };
13 | }) {
14 | async function login(form: FormData) {
15 | "use server";
16 |
17 | let username = form.get("username");
18 | if (typeof username === "string") {
19 | username = username.trim();
20 | if (username) {
21 | cookies().set({
22 | name: "token",
23 | value: await identifier.generateToken({ username }),
24 | httpOnly: true,
25 | maxAge: 3600 * 60,
26 | });
27 | cookies().set({
28 | name: "username",
29 | value: username,
30 | maxAge: 3600 * 60,
31 | });
32 |
33 | const id = searchParams.roomId ?? nanoid();
34 | return redirect(`/?roomId=${id}`);
35 | }
36 | }
37 |
38 | throw new Error("Invalid username");
39 | }
40 |
41 | return (
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | Welcome to AnyCable demo!
51 |
52 |
53 | Before joining a room please set up a username. You can also enter
54 | your email to see your Gravatar near your messages!
55 |
56 |
57 |
58 |
59 |
60 |
61 | );
62 | }
63 |
--------------------------------------------------------------------------------
/app/components/menu.tsx:
--------------------------------------------------------------------------------
1 | import { Menu as HMenu, Transition } from "@headlessui/react";
2 | import { cx } from "class-variance-authority";
3 | import Link from "next/link";
4 | import { PropsWithChildren, Fragment, createElement, SVGProps } from "react";
5 |
6 | const Root = ({ children }: PropsWithChildren) => {
7 | return (
8 |
9 | {children}
10 |
11 | );
12 | };
13 |
14 | function HeroiconsEllipsisVertical(props: SVGProps) {
15 | return (
16 |
23 |
31 |
32 | );
33 | }
34 |
35 | const Trigger = ({
36 | children,
37 | label = "More",
38 | }: PropsWithChildren<{ label?: string }>) => (
39 |
40 | {label}
41 | {children ?? (
42 |
46 | )}
47 |
48 | );
49 |
50 | const Body = ({
51 | children,
52 | align = "right",
53 | }: PropsWithChildren<{ align?: "right" | "left" }>) => {
54 | return (
55 |
64 |
71 | {children}
72 |
73 |
74 | );
75 | };
76 |
77 | function InteractiveItem({
78 | as,
79 | ...props
80 | }: JSX.IntrinsicElements[T] & { as: T }) {
81 | const Element = (as == "a" ? Link : as) as unknown as any;
82 | return createElement(Element, {
83 | ...props,
84 | className:
85 | "block w-full pr-3 pl-6 py-1 text-left text-sm leading-6 text-gray-900 hover:bg-gray-100 disabled:text-gray-600",
86 | });
87 | }
88 |
89 | function TextItem({ children }: PropsWithChildren) {
90 | return (
91 |
92 | {children}
93 |
94 | );
95 | }
96 |
97 | export const Menu = {
98 | Root,
99 | Trigger,
100 | Body,
101 | ItemRoot: HMenu.Item,
102 | InteractiveItem,
103 | TextItem,
104 | };
105 |
--------------------------------------------------------------------------------
/app/components/header/avatar-actions.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { experimental_useFormStatus as useFormStatus } from "react-dom";
4 | import { Menu } from "../menu";
5 | import { Avatar } from "../avatar";
6 | import { $cable, $cableState, CableState } from "@/app/stores/cable";
7 | import { useStore } from "@nanostores/react";
8 | import { cx } from "class-variance-authority";
9 |
10 | export function AvatarActions({
11 | usernameOrEmail,
12 | signOutAction,
13 | }: {
14 | usernameOrEmail: string;
15 | signOutAction: () => void;
16 | }) {
17 | return (
18 |
19 |
20 |
21 |
22 |
23 |
24 |
{usernameOrEmail}
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
39 |
40 |
41 |
42 |
43 |
44 | );
45 | }
46 |
47 | function WrappedAvatar({ usernameOrEmail }: { usernameOrEmail: string }) {
48 | const state = useStore($cableState);
49 |
50 | return (
51 |
54 | );
55 | }
56 |
57 | function SignOutButton() {
58 | const { pending } = useFormStatus();
59 |
60 | return (
61 |
62 | {pending ? "Signing out…" : "Sign out"}
63 |
64 | );
65 | }
66 |
67 | function Status() {
68 | const state = useStore($cableState);
69 |
70 | return (
71 |
75 | );
76 | }
77 |
78 | const bgClass: Record = {
79 | idle: "bg-green-400",
80 | disconnected: "bg-red-400",
81 | connecting: "bg-blue-400",
82 | connected: "bg-green-400",
83 | closed: "bg-gray-400",
84 | };
85 | function Indicator() {
86 | const state = useStore($cableState);
87 |
88 | return (
89 |
92 | );
93 | }
94 |
95 | function DisconnectButton() {
96 | const state = useStore($cableState);
97 | const cable = useStore($cable);
98 |
99 | // We can't do anything here
100 | if (state === "disconnected") return null;
101 |
102 | const onClick =
103 | state === "closed" ? () => cable?.connect() : () => cable?.disconnect();
104 |
105 | return (
106 |
107 | {state === "closed" ? "Connect" : "Disconnect"}
108 |
109 | );
110 | }
111 |
--------------------------------------------------------------------------------
/app/auth/logo.tsx:
--------------------------------------------------------------------------------
1 | export function Logo() {
2 | return (
3 |
9 | Normal
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
21 |
25 |
29 |
33 |
37 |
41 |
42 |
43 |
47 |
52 |
56 |
57 |
58 | );
59 | }
60 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # AnyCable Next.js/Vercel Example
2 |
3 | [](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fanycable%2Fvercel-anycable-demo&env=CABLE_URL,ANYCABLE_HTTP_BROADCAST_URL,ANYCABLE_HTTP_BROADCAST_SECRET,ANYCABLE_JWT_ID_KEY&envDescription=Link%20Vercel%20application%20with%20AnyCable%20server&envLink=https%3A%2F%2Fgithub.com%2Fanycable%2Fvercel-anycable-demo&project-name=vercel-anycable-demo&repository-name=vercel-anycable-demo)
4 |
5 | This is an example of how to use [AnyCable](https://anycable.io) with [Next.js](https://nextjs.org) and [Vercel](https://vercel.com) to build real-time applications.
6 |
7 | Learn more about AnyCable for serverless JavaScript apps in [the documentation](https://docs.anycable.io/guides/serverless).
8 |
9 | ## Prerequisites
10 |
11 | You will need to deploy an AnyCable-Go server to the platform of your choice. We recommend using [Fly.io](https://fly.io) and provide an example configuration in `fly.toml.example` for seamless deployments. However, Anycable-Go server can be deployed on any platform.
12 |
13 | Using [fly CLI](https://fly.io/docs/hands-on/install-flyctl/), run the following command to create and launch a new AnyCable-Go application:
14 |
15 | ```sh
16 | # Create a new Fly application
17 | fly launch --image anycable/anycable-go:1.4 --generate-name --ha=false --internal-port 8080 --env PORT=8080 --env ANYCABLE_BROKER=memory
18 | ```
19 |
20 | Answer "No" to all database-related questions and "Yes" to deployment. This will deploy your app and create a `fly.toml` file with the minimum configuration. See the `fly.toml.example` file to learn more about other available and recommended configuration options.
21 |
22 | ## Deployment
23 |
24 | - Click the **Deploy** button
25 |
26 | - Fill in the required environment variables:
27 |
28 | ```env
29 | CABLE_URL=wss:///cable
30 | ANYCABLE_HTTP_BROADCAST_URL=https:///_broadcast
31 | ANYCABLE_HTTP_BROADCAST_SECRET=
32 | ANYCABLE_JWT_ID_KEY=
33 | ```
34 |
35 | * The `ANYCABLE_HTTP_BROADCAST_SECRET` and `ANYCABLE_JWT_ID_KEY` can be any strings.
36 | * You can create a secure value using this CLI command `openssl rand -hex 32`
37 |
38 | - Set the following environment variables on your AnyCable-Go server:
39 |
40 | ```env
41 | ANYCABLE_RPC_HOST=https:///api/anycable
42 | ANYCABLE_HTTP_BROADCAST_SECRET=
43 | ANYCABLE_JWT_ID_KEY=
44 | ```
45 |
46 | When using Fly, you can keep all env vars in the `.env.production` file and import the secrets using the following command:
47 |
48 | ```sh
49 | cat .env.production | fly secrets import
50 | ```
51 |
52 | When deploying to Vercel you can use the [Vercel CLI](https://vercel.com/docs/cli) to pull environment variables:
53 |
54 | ```sh
55 | vercel env pull
56 | ```
57 |
58 | ### Authentication
59 |
60 | We use the [AnyCable JWT identification](https://docs.anycable.io/anycable-go/jwt_identification) feature to issue JWT tokens to authenticate clients. The benefit of using AnyCable JWTs is the ability to verify and identify clients at the WebSocket server side without making additional requests to the backend (Vercel functions in our case).
61 |
62 | The `ANYCABLE_JWT_ID_KEY` environment variable is responsible for this.
63 |
64 | ## Running locally
65 |
66 | > [PNPM](https://pnpm.io/installation) is required to install dependencies.
67 |
68 | First, install the dependencies:
69 |
70 | ```bash
71 | pnpm install
72 | ```
73 |
74 | Then, start AnyCable-Go:
75 |
76 | ```bash
77 | pnpm anycable-go
78 | ```
79 |
80 | And start the Next.js app:
81 |
82 | ```bash
83 | pnpm dev
84 | ```
85 |
86 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
87 |
--------------------------------------------------------------------------------
/app/api/og/route.tsx:
--------------------------------------------------------------------------------
1 | import { isRoomLabel } from "@/app/utils/room-label";
2 | import { ImageResponse } from "next/server";
3 |
4 | export const runtime = "edge";
5 |
6 | export async function GET(request: Request) {
7 | const { searchParams } = new URL(request.url);
8 |
9 | /*
10 | We use room labels instead of ids so that we only have N images in cache for N URLs instead
11 | of N images for all the possible ids.
12 | */
13 | const roomLabel = searchParams.get("roomLabel") ?? "";
14 | if (!isRoomLabel(roomLabel)) throw new Error();
15 |
16 | return new ImageResponse(
17 | (
18 |
19 |
26 |
27 |
Join room:
28 |
29 | {roomLabel}
30 |
31 |
32 |
Powered by AnyCable
33 |
34 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
54 |
58 |
62 |
66 |
70 |
74 |
75 |
76 |
80 |
85 |
89 |
90 |
91 |
92 | ),
93 | {
94 | width: 1200,
95 | height: 630,
96 | },
97 | );
98 | }
99 |
--------------------------------------------------------------------------------
/app/components/intro.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { Dialog, Transition } from "@headlessui/react";
4 | import { Fragment, SVGProps, useRef, useState } from "react";
5 | import { Button } from "./button";
6 |
7 | const features = [
8 | {
9 | name: "Toggle offline",
10 | description: "mode in user settings and see how network restoration works",
11 | icon: HeroiconsBoltSlash,
12 | },
13 | {
14 | name: "Share this chat",
15 | description: "with friends to understand how fast things really are",
16 | icon: HeroiconsLink,
17 | },
18 | {
19 | name: "See sources",
20 | description: (
21 | <>
22 | on{" "}
23 |
27 | GitHub
28 |
29 | >
30 | ),
31 | icon: TeenyiconsGithubOutline,
32 | },
33 | ];
34 |
35 | export function Intro({
36 | showIntro,
37 | introShownAction,
38 | }: {
39 | showIntro: boolean;
40 | introShownAction: () => void;
41 | }) {
42 | const [open, setOpen] = useState(showIntro);
43 |
44 | const btn = useRef(null);
45 |
46 | const close = () => {
47 | introShownAction();
48 | setOpen(false);
49 | };
50 |
51 | return (
52 |
53 |
59 |
68 |
69 |
70 |
71 |
72 |
73 |
82 |
83 |
87 | Welcome to AnyCable serverless demo!
88 |
89 |
90 | {features.map((feature) => (
91 |
92 |
93 |
97 | {feature.name}
98 | {" "}
99 | {feature.description}
100 |
101 | ))}
102 |
103 |
104 | Understood
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 | );
113 | }
114 |
115 | function HeroiconsBoltSlash(props: SVGProps) {
116 | return (
117 |
124 |
132 |
133 | );
134 | }
135 |
136 | function HeroiconsLink(props: SVGProps) {
137 | return (
138 |
145 |
153 |
154 | );
155 | }
156 |
157 | function TeenyiconsGithubOutline(props: SVGProps) {
158 | return (
159 |
166 |
170 |
171 | );
172 | }
173 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | '@anycable/anycable-go':
9 | specifier: ^1.5.2
10 | version: 1.5.2
11 | '@anycable/core':
12 | specifier: ^0.7.8
13 | version: 0.7.8
14 | '@anycable/serverless-js':
15 | specifier: ^0.1.0
16 | version: 0.1.0
17 | '@anycable/web':
18 | specifier: ^0.7.3
19 | version: 0.7.3
20 | '@headlessui/react':
21 | specifier: ^1.7.17
22 | version: 1.7.17(react-dom@18.2.0)(react@18.2.0)
23 | '@nanostores/react':
24 | specifier: ^0.7.1
25 | version: 0.7.1(nanostores@0.9.3)(react@18.2.0)
26 | '@types/md5':
27 | specifier: ^2.3.2
28 | version: 2.3.2
29 | '@types/node':
30 | specifier: 20.6.0
31 | version: 20.6.0
32 | '@types/react':
33 | specifier: 18.2.21
34 | version: 18.2.21
35 | '@types/react-dom':
36 | specifier: 18.2.7
37 | version: 18.2.7
38 | autoprefixer:
39 | specifier: 10.4.15
40 | version: 10.4.15(postcss@8.4.29)
41 | class-variance-authority:
42 | specifier: ^0.7.0
43 | version: 0.7.0
44 | jose:
45 | specifier: ^4.14.6
46 | version: 4.14.6
47 | md5:
48 | specifier: ^2.3.0
49 | version: 2.3.0
50 | nanoid:
51 | specifier: ^5.0.1
52 | version: 5.0.1
53 | nanostores:
54 | specifier: ^0.9.3
55 | version: 0.9.3
56 | next:
57 | specifier: 13.5.1
58 | version: 13.5.1(react-dom@18.2.0)(react@18.2.0)
59 | postcss:
60 | specifier: 8.4.29
61 | version: 8.4.29
62 | react:
63 | specifier: 18.2.0
64 | version: 18.2.0
65 | react-dom:
66 | specifier: 18.2.0
67 | version: 18.2.0(react@18.2.0)
68 | tailwindcss:
69 | specifier: 3.3.3
70 | version: 3.3.3
71 | typescript:
72 | specifier: 5.2.2
73 | version: 5.2.2
74 |
75 | devDependencies:
76 | eslint:
77 | specifier: 8.45.0
78 | version: 8.45.0
79 | eslint-config-next:
80 | specifier: 13.4.16
81 | version: 13.4.16(eslint@8.45.0)(typescript@5.2.2)
82 | eslint-config-prettier:
83 | specifier: ^9.0.0
84 | version: 9.0.0(eslint@8.45.0)
85 | eslint-plugin-prettier:
86 | specifier: ^5.0.0
87 | version: 5.0.0(eslint-config-prettier@9.0.0)(eslint@8.45.0)(prettier@3.0.3)
88 | prettier:
89 | specifier: ^3.0.3
90 | version: 3.0.3
91 | prettier-plugin-tailwindcss:
92 | specifier: ^0.5.4
93 | version: 0.5.4(prettier@3.0.3)
94 |
95 | packages:
96 |
97 | /@aashutoshrathi/word-wrap@1.2.6:
98 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
99 | engines: {node: '>=0.10.0'}
100 | dev: true
101 |
102 | /@alloc/quick-lru@5.2.0:
103 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
104 | engines: {node: '>=10'}
105 | dev: false
106 |
107 | /@anycable/anycable-go@1.5.2:
108 | resolution: {integrity: sha512-50v2RvxwiEmob/tUKs1xaO11aREcAS/MJ/FJV30fOVfDv7H08IAQtnLyh96bNy8a4nDtS26yuk/Je//K2aN3Pg==}
109 | engines: {node: '>=20.0.0'}
110 | cpu: [x64, arm64]
111 | os: [darwin, linux, win32]
112 | hasBin: true
113 | dependencies:
114 | node-downloader-helper: 1.0.19
115 | dev: false
116 |
117 | /@anycable/core@0.7.8:
118 | resolution: {integrity: sha512-xODNnL0iFLxKW2zxjAkM736b/GBV3a6d9gmywM3lV7LK1N+Brk7WkWX1V6MGtdcVOM0BkmuE9RMBQk3rv6JN/A==}
119 | engines: {node: ^14.0.0 || >=16.0.0}
120 | dependencies:
121 | nanoevents: 7.0.1
122 | dev: false
123 |
124 | /@anycable/serverless-js@0.1.0:
125 | resolution: {integrity: sha512-SuX8Nr4kC01QsfulAyX4krLb3xy+c/Fze22/0TYmUe+uzFBTloC0N2wThj4k5b8qKEzOSWLCztuRmvyzMC5eow==}
126 | engines: {node: '>=18.0.0', pnpm: '>=8.7.5'}
127 | dependencies:
128 | jose: 4.14.6
129 | dev: false
130 |
131 | /@anycable/web@0.7.3:
132 | resolution: {integrity: sha512-xdVXqB7QXJkqwvNc6+Mu2sK6DHX7F9gax2giopqXS50A8AOZ2ydXa8YYQVizeQwRWQYlQ/93ZN6C/hpiz60nQw==}
133 | dependencies:
134 | '@anycable/core': 0.7.8
135 | dev: false
136 |
137 | /@babel/runtime@7.22.15:
138 | resolution: {integrity: sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==}
139 | engines: {node: '>=6.9.0'}
140 | dependencies:
141 | regenerator-runtime: 0.14.0
142 | dev: true
143 |
144 | /@eslint-community/eslint-utils@4.4.0(eslint@8.45.0):
145 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
146 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
147 | peerDependencies:
148 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
149 | dependencies:
150 | eslint: 8.45.0
151 | eslint-visitor-keys: 3.4.3
152 | dev: true
153 |
154 | /@eslint-community/regexpp@4.8.1:
155 | resolution: {integrity: sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==}
156 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
157 | dev: true
158 |
159 | /@eslint/eslintrc@2.1.2:
160 | resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==}
161 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
162 | dependencies:
163 | ajv: 6.12.6
164 | debug: 4.3.4
165 | espree: 9.6.1
166 | globals: 13.21.0
167 | ignore: 5.2.4
168 | import-fresh: 3.3.0
169 | js-yaml: 4.1.0
170 | minimatch: 3.1.2
171 | strip-json-comments: 3.1.1
172 | transitivePeerDependencies:
173 | - supports-color
174 | dev: true
175 |
176 | /@eslint/js@8.44.0:
177 | resolution: {integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==}
178 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
179 | dev: true
180 |
181 | /@headlessui/react@1.7.17(react-dom@18.2.0)(react@18.2.0):
182 | resolution: {integrity: sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow==}
183 | engines: {node: '>=10'}
184 | peerDependencies:
185 | react: ^16 || ^17 || ^18
186 | react-dom: ^16 || ^17 || ^18
187 | dependencies:
188 | client-only: 0.0.1
189 | react: 18.2.0
190 | react-dom: 18.2.0(react@18.2.0)
191 | dev: false
192 |
193 | /@humanwhocodes/config-array@0.11.11:
194 | resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==}
195 | engines: {node: '>=10.10.0'}
196 | dependencies:
197 | '@humanwhocodes/object-schema': 1.2.1
198 | debug: 4.3.4
199 | minimatch: 3.1.2
200 | transitivePeerDependencies:
201 | - supports-color
202 | dev: true
203 |
204 | /@humanwhocodes/module-importer@1.0.1:
205 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
206 | engines: {node: '>=12.22'}
207 | dev: true
208 |
209 | /@humanwhocodes/object-schema@1.2.1:
210 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
211 | dev: true
212 |
213 | /@jridgewell/gen-mapping@0.3.3:
214 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
215 | engines: {node: '>=6.0.0'}
216 | dependencies:
217 | '@jridgewell/set-array': 1.1.2
218 | '@jridgewell/sourcemap-codec': 1.4.15
219 | '@jridgewell/trace-mapping': 0.3.19
220 | dev: false
221 |
222 | /@jridgewell/resolve-uri@3.1.1:
223 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
224 | engines: {node: '>=6.0.0'}
225 | dev: false
226 |
227 | /@jridgewell/set-array@1.1.2:
228 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
229 | engines: {node: '>=6.0.0'}
230 | dev: false
231 |
232 | /@jridgewell/sourcemap-codec@1.4.15:
233 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
234 | dev: false
235 |
236 | /@jridgewell/trace-mapping@0.3.19:
237 | resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==}
238 | dependencies:
239 | '@jridgewell/resolve-uri': 3.1.1
240 | '@jridgewell/sourcemap-codec': 1.4.15
241 | dev: false
242 |
243 | /@nanostores/react@0.7.1(nanostores@0.9.3)(react@18.2.0):
244 | resolution: {integrity: sha512-EXQg9N4MdI4eJQz/AZLIx3hxQ6BuBmV4Q55bCd5YCSgEOAW7tGTsIZxpRXxvxLXzflNvHTBvfrDNY38TlSVBkQ==}
245 | engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0}
246 | peerDependencies:
247 | nanostores: ^0.9.0
248 | react: '>=18.0.0'
249 | dependencies:
250 | nanostores: 0.9.3
251 | react: 18.2.0
252 | dev: false
253 |
254 | /@next/env@13.5.1:
255 | resolution: {integrity: sha512-CIMWiOTyflFn/GFx33iYXkgLSQsMQZV4jB91qaj/TfxGaGOXxn8C1j72TaUSPIyN7ziS/AYG46kGmnvuk1oOpg==}
256 | dev: false
257 |
258 | /@next/eslint-plugin-next@13.4.16:
259 | resolution: {integrity: sha512-QuFtQl+oSEEQb0HMYBdvBoUaTiMxbY3go/MFkF3zOnfY0t84+IbAX78cw8ZCfr6cA6UcTq3nMIlCrHwDC/moxg==}
260 | dependencies:
261 | glob: 7.1.7
262 | dev: true
263 |
264 | /@next/swc-darwin-arm64@13.5.1:
265 | resolution: {integrity: sha512-Bcd0VFrLHZnMmJy6LqV1CydZ7lYaBao8YBEdQUVzV8Ypn/l5s//j5ffjfvMzpEQ4mzlAj3fIY+Bmd9NxpWhACw==}
266 | engines: {node: '>= 10'}
267 | cpu: [arm64]
268 | os: [darwin]
269 | requiresBuild: true
270 | dev: false
271 | optional: true
272 |
273 | /@next/swc-darwin-x64@13.5.1:
274 | resolution: {integrity: sha512-uvTZrZa4D0bdWa1jJ7X1tBGIxzpqSnw/ATxWvoRO9CVBvXSx87JyuISY+BWsfLFF59IRodESdeZwkWM2l6+Kjg==}
275 | engines: {node: '>= 10'}
276 | cpu: [x64]
277 | os: [darwin]
278 | requiresBuild: true
279 | dev: false
280 | optional: true
281 |
282 | /@next/swc-linux-arm64-gnu@13.5.1:
283 | resolution: {integrity: sha512-/52ThlqdORPQt3+AlMoO+omicdYyUEDeRDGPAj86ULpV4dg+/GCFCKAmFWT0Q4zChFwsAoZUECLcKbRdcc0SNg==}
284 | engines: {node: '>= 10'}
285 | cpu: [arm64]
286 | os: [linux]
287 | requiresBuild: true
288 | dev: false
289 | optional: true
290 |
291 | /@next/swc-linux-arm64-musl@13.5.1:
292 | resolution: {integrity: sha512-L4qNXSOHeu1hEAeeNsBgIYVnvm0gg9fj2O2Yx/qawgQEGuFBfcKqlmIE/Vp8z6gwlppxz5d7v6pmHs1NB6R37w==}
293 | engines: {node: '>= 10'}
294 | cpu: [arm64]
295 | os: [linux]
296 | requiresBuild: true
297 | dev: false
298 | optional: true
299 |
300 | /@next/swc-linux-x64-gnu@13.5.1:
301 | resolution: {integrity: sha512-QVvMrlrFFYvLtABk092kcZ5Mzlmsk2+SV3xYuAu8sbTuIoh0U2+HGNhVklmuYCuM3DAAxdiMQTNlRQmNH11udw==}
302 | engines: {node: '>= 10'}
303 | cpu: [x64]
304 | os: [linux]
305 | requiresBuild: true
306 | dev: false
307 | optional: true
308 |
309 | /@next/swc-linux-x64-musl@13.5.1:
310 | resolution: {integrity: sha512-bBnr+XuWc28r9e8gQ35XBtyi5KLHLhTbEvrSgcWna8atI48sNggjIK8IyiEBO3KIrcUVXYkldAzGXPEYMnKt1g==}
311 | engines: {node: '>= 10'}
312 | cpu: [x64]
313 | os: [linux]
314 | requiresBuild: true
315 | dev: false
316 | optional: true
317 |
318 | /@next/swc-win32-arm64-msvc@13.5.1:
319 | resolution: {integrity: sha512-EQGeE4S5c9v06jje9gr4UlxqUEA+zrsgPi6kg9VwR+dQHirzbnVJISF69UfKVkmLntknZJJI9XpWPB6q0Z7mTg==}
320 | engines: {node: '>= 10'}
321 | cpu: [arm64]
322 | os: [win32]
323 | requiresBuild: true
324 | dev: false
325 | optional: true
326 |
327 | /@next/swc-win32-ia32-msvc@13.5.1:
328 | resolution: {integrity: sha512-1y31Q6awzofVjmbTLtRl92OX3s+W0ZfO8AP8fTnITcIo9a6ATDc/eqa08fd6tSpFu6IFpxOBbdevOjwYTGx/AQ==}
329 | engines: {node: '>= 10'}
330 | cpu: [ia32]
331 | os: [win32]
332 | requiresBuild: true
333 | dev: false
334 | optional: true
335 |
336 | /@next/swc-win32-x64-msvc@13.5.1:
337 | resolution: {integrity: sha512-+9XBQizy7X/GuwNegq+5QkkxAPV7SBsIwapVRQd9WSvvU20YO23B3bZUpevdabi4fsd25y9RJDDncljy/V54ww==}
338 | engines: {node: '>= 10'}
339 | cpu: [x64]
340 | os: [win32]
341 | requiresBuild: true
342 | dev: false
343 | optional: true
344 |
345 | /@nodelib/fs.scandir@2.1.5:
346 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
347 | engines: {node: '>= 8'}
348 | dependencies:
349 | '@nodelib/fs.stat': 2.0.5
350 | run-parallel: 1.2.0
351 |
352 | /@nodelib/fs.stat@2.0.5:
353 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
354 | engines: {node: '>= 8'}
355 |
356 | /@nodelib/fs.walk@1.2.8:
357 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
358 | engines: {node: '>= 8'}
359 | dependencies:
360 | '@nodelib/fs.scandir': 2.1.5
361 | fastq: 1.15.0
362 |
363 | /@pkgr/utils@2.4.2:
364 | resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==}
365 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
366 | dependencies:
367 | cross-spawn: 7.0.3
368 | fast-glob: 3.3.1
369 | is-glob: 4.0.3
370 | open: 9.1.0
371 | picocolors: 1.0.0
372 | tslib: 2.6.2
373 | dev: true
374 |
375 | /@rushstack/eslint-patch@1.4.0:
376 | resolution: {integrity: sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==}
377 | dev: true
378 |
379 | /@swc/helpers@0.5.2:
380 | resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==}
381 | dependencies:
382 | tslib: 2.6.2
383 | dev: false
384 |
385 | /@types/json5@0.0.29:
386 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
387 | dev: true
388 |
389 | /@types/md5@2.3.2:
390 | resolution: {integrity: sha512-v+JFDu96+UYJ3/UWzB0mEglIS//MZXgRaJ4ubUPwOM0gvLc/kcQ3TWNYwENEK7/EcXGQVrW8h/XqednSjBd/Og==}
391 | dev: false
392 |
393 | /@types/node@20.6.0:
394 | resolution: {integrity: sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==}
395 | dev: false
396 |
397 | /@types/prop-types@15.7.5:
398 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
399 | dev: false
400 |
401 | /@types/react-dom@18.2.7:
402 | resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==}
403 | dependencies:
404 | '@types/react': 18.2.21
405 | dev: false
406 |
407 | /@types/react@18.2.21:
408 | resolution: {integrity: sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==}
409 | dependencies:
410 | '@types/prop-types': 15.7.5
411 | '@types/scheduler': 0.16.3
412 | csstype: 3.1.2
413 | dev: false
414 |
415 | /@types/scheduler@0.16.3:
416 | resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==}
417 | dev: false
418 |
419 | /@typescript-eslint/parser@6.7.0(eslint@8.45.0)(typescript@5.2.2):
420 | resolution: {integrity: sha512-jZKYwqNpNm5kzPVP5z1JXAuxjtl2uG+5NpaMocFPTNC2EdYIgbXIPImObOkhbONxtFTTdoZstLZefbaK+wXZng==}
421 | engines: {node: ^16.0.0 || >=18.0.0}
422 | peerDependencies:
423 | eslint: ^7.0.0 || ^8.0.0
424 | typescript: '*'
425 | peerDependenciesMeta:
426 | typescript:
427 | optional: true
428 | dependencies:
429 | '@typescript-eslint/scope-manager': 6.7.0
430 | '@typescript-eslint/types': 6.7.0
431 | '@typescript-eslint/typescript-estree': 6.7.0(typescript@5.2.2)
432 | '@typescript-eslint/visitor-keys': 6.7.0
433 | debug: 4.3.4
434 | eslint: 8.45.0
435 | typescript: 5.2.2
436 | transitivePeerDependencies:
437 | - supports-color
438 | dev: true
439 |
440 | /@typescript-eslint/scope-manager@6.7.0:
441 | resolution: {integrity: sha512-lAT1Uau20lQyjoLUQ5FUMSX/dS07qux9rYd5FGzKz/Kf8W8ccuvMyldb8hadHdK/qOI7aikvQWqulnEq2nCEYA==}
442 | engines: {node: ^16.0.0 || >=18.0.0}
443 | dependencies:
444 | '@typescript-eslint/types': 6.7.0
445 | '@typescript-eslint/visitor-keys': 6.7.0
446 | dev: true
447 |
448 | /@typescript-eslint/types@6.7.0:
449 | resolution: {integrity: sha512-ihPfvOp7pOcN/ysoj0RpBPOx3HQTJTrIN8UZK+WFd3/iDeFHHqeyYxa4hQk4rMhsz9H9mXpR61IzwlBVGXtl9Q==}
450 | engines: {node: ^16.0.0 || >=18.0.0}
451 | dev: true
452 |
453 | /@typescript-eslint/typescript-estree@6.7.0(typescript@5.2.2):
454 | resolution: {integrity: sha512-dPvkXj3n6e9yd/0LfojNU8VMUGHWiLuBZvbM6V6QYD+2qxqInE7J+J/ieY2iGwR9ivf/R/haWGkIj04WVUeiSQ==}
455 | engines: {node: ^16.0.0 || >=18.0.0}
456 | peerDependencies:
457 | typescript: '*'
458 | peerDependenciesMeta:
459 | typescript:
460 | optional: true
461 | dependencies:
462 | '@typescript-eslint/types': 6.7.0
463 | '@typescript-eslint/visitor-keys': 6.7.0
464 | debug: 4.3.4
465 | globby: 11.1.0
466 | is-glob: 4.0.3
467 | semver: 7.5.4
468 | ts-api-utils: 1.0.3(typescript@5.2.2)
469 | typescript: 5.2.2
470 | transitivePeerDependencies:
471 | - supports-color
472 | dev: true
473 |
474 | /@typescript-eslint/visitor-keys@6.7.0:
475 | resolution: {integrity: sha512-/C1RVgKFDmGMcVGeD8HjKv2bd72oI1KxQDeY8uc66gw9R0OK0eMq48cA+jv9/2Ag6cdrsUGySm1yzYmfz0hxwQ==}
476 | engines: {node: ^16.0.0 || >=18.0.0}
477 | dependencies:
478 | '@typescript-eslint/types': 6.7.0
479 | eslint-visitor-keys: 3.4.3
480 | dev: true
481 |
482 | /acorn-jsx@5.3.2(acorn@8.10.0):
483 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
484 | peerDependencies:
485 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
486 | dependencies:
487 | acorn: 8.10.0
488 | dev: true
489 |
490 | /acorn@8.10.0:
491 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
492 | engines: {node: '>=0.4.0'}
493 | hasBin: true
494 | dev: true
495 |
496 | /ajv@6.12.6:
497 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
498 | dependencies:
499 | fast-deep-equal: 3.1.3
500 | fast-json-stable-stringify: 2.1.0
501 | json-schema-traverse: 0.4.1
502 | uri-js: 4.4.1
503 | dev: true
504 |
505 | /ansi-regex@5.0.1:
506 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
507 | engines: {node: '>=8'}
508 | dev: true
509 |
510 | /ansi-styles@4.3.0:
511 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
512 | engines: {node: '>=8'}
513 | dependencies:
514 | color-convert: 2.0.1
515 | dev: true
516 |
517 | /any-promise@1.3.0:
518 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
519 | dev: false
520 |
521 | /anymatch@3.1.3:
522 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
523 | engines: {node: '>= 8'}
524 | dependencies:
525 | normalize-path: 3.0.0
526 | picomatch: 2.3.1
527 | dev: false
528 |
529 | /arg@5.0.2:
530 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
531 | dev: false
532 |
533 | /argparse@2.0.1:
534 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
535 | dev: true
536 |
537 | /aria-query@5.3.0:
538 | resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
539 | dependencies:
540 | dequal: 2.0.3
541 | dev: true
542 |
543 | /array-buffer-byte-length@1.0.0:
544 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
545 | dependencies:
546 | call-bind: 1.0.2
547 | is-array-buffer: 3.0.2
548 | dev: true
549 |
550 | /array-includes@3.1.7:
551 | resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==}
552 | engines: {node: '>= 0.4'}
553 | dependencies:
554 | call-bind: 1.0.2
555 | define-properties: 1.2.1
556 | es-abstract: 1.22.2
557 | get-intrinsic: 1.2.1
558 | is-string: 1.0.7
559 | dev: true
560 |
561 | /array-union@2.1.0:
562 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
563 | engines: {node: '>=8'}
564 | dev: true
565 |
566 | /array.prototype.findlastindex@1.2.3:
567 | resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==}
568 | engines: {node: '>= 0.4'}
569 | dependencies:
570 | call-bind: 1.0.2
571 | define-properties: 1.2.1
572 | es-abstract: 1.22.2
573 | es-shim-unscopables: 1.0.0
574 | get-intrinsic: 1.2.1
575 | dev: true
576 |
577 | /array.prototype.flat@1.3.2:
578 | resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
579 | engines: {node: '>= 0.4'}
580 | dependencies:
581 | call-bind: 1.0.2
582 | define-properties: 1.2.1
583 | es-abstract: 1.22.2
584 | es-shim-unscopables: 1.0.0
585 | dev: true
586 |
587 | /array.prototype.flatmap@1.3.2:
588 | resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
589 | engines: {node: '>= 0.4'}
590 | dependencies:
591 | call-bind: 1.0.2
592 | define-properties: 1.2.1
593 | es-abstract: 1.22.2
594 | es-shim-unscopables: 1.0.0
595 | dev: true
596 |
597 | /array.prototype.tosorted@1.1.2:
598 | resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==}
599 | dependencies:
600 | call-bind: 1.0.2
601 | define-properties: 1.2.1
602 | es-abstract: 1.22.2
603 | es-shim-unscopables: 1.0.0
604 | get-intrinsic: 1.2.1
605 | dev: true
606 |
607 | /arraybuffer.prototype.slice@1.0.2:
608 | resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==}
609 | engines: {node: '>= 0.4'}
610 | dependencies:
611 | array-buffer-byte-length: 1.0.0
612 | call-bind: 1.0.2
613 | define-properties: 1.2.1
614 | es-abstract: 1.22.2
615 | get-intrinsic: 1.2.1
616 | is-array-buffer: 3.0.2
617 | is-shared-array-buffer: 1.0.2
618 | dev: true
619 |
620 | /ast-types-flow@0.0.7:
621 | resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
622 | dev: true
623 |
624 | /asynciterator.prototype@1.0.0:
625 | resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==}
626 | dependencies:
627 | has-symbols: 1.0.3
628 | dev: true
629 |
630 | /autoprefixer@10.4.15(postcss@8.4.29):
631 | resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==}
632 | engines: {node: ^10 || ^12 || >=14}
633 | hasBin: true
634 | peerDependencies:
635 | postcss: ^8.1.0
636 | dependencies:
637 | browserslist: 4.21.10
638 | caniuse-lite: 1.0.30001535
639 | fraction.js: 4.3.6
640 | normalize-range: 0.1.2
641 | picocolors: 1.0.0
642 | postcss: 8.4.29
643 | postcss-value-parser: 4.2.0
644 | dev: false
645 |
646 | /available-typed-arrays@1.0.5:
647 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
648 | engines: {node: '>= 0.4'}
649 | dev: true
650 |
651 | /axe-core@4.8.1:
652 | resolution: {integrity: sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==}
653 | engines: {node: '>=4'}
654 | dev: true
655 |
656 | /axobject-query@3.2.1:
657 | resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==}
658 | dependencies:
659 | dequal: 2.0.3
660 | dev: true
661 |
662 | /balanced-match@1.0.2:
663 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
664 |
665 | /big-integer@1.6.51:
666 | resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==}
667 | engines: {node: '>=0.6'}
668 | dev: true
669 |
670 | /binary-extensions@2.2.0:
671 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
672 | engines: {node: '>=8'}
673 | dev: false
674 |
675 | /bplist-parser@0.2.0:
676 | resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==}
677 | engines: {node: '>= 5.10.0'}
678 | dependencies:
679 | big-integer: 1.6.51
680 | dev: true
681 |
682 | /brace-expansion@1.1.11:
683 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
684 | dependencies:
685 | balanced-match: 1.0.2
686 | concat-map: 0.0.1
687 |
688 | /braces@3.0.2:
689 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
690 | engines: {node: '>=8'}
691 | dependencies:
692 | fill-range: 7.0.1
693 |
694 | /browserslist@4.21.10:
695 | resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==}
696 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
697 | hasBin: true
698 | dependencies:
699 | caniuse-lite: 1.0.30001535
700 | electron-to-chromium: 1.4.523
701 | node-releases: 2.0.13
702 | update-browserslist-db: 1.0.11(browserslist@4.21.10)
703 | dev: false
704 |
705 | /bundle-name@3.0.0:
706 | resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==}
707 | engines: {node: '>=12'}
708 | dependencies:
709 | run-applescript: 5.0.0
710 | dev: true
711 |
712 | /busboy@1.6.0:
713 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
714 | engines: {node: '>=10.16.0'}
715 | dependencies:
716 | streamsearch: 1.1.0
717 | dev: false
718 |
719 | /call-bind@1.0.2:
720 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
721 | dependencies:
722 | function-bind: 1.1.1
723 | get-intrinsic: 1.2.1
724 | dev: true
725 |
726 | /callsites@3.1.0:
727 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
728 | engines: {node: '>=6'}
729 | dev: true
730 |
731 | /camelcase-css@2.0.1:
732 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
733 | engines: {node: '>= 6'}
734 | dev: false
735 |
736 | /caniuse-lite@1.0.30001535:
737 | resolution: {integrity: sha512-48jLyUkiWFfhm/afF7cQPqPjaUmSraEhK4j+FCTJpgnGGEZHqyLe3hmWH7lIooZdSzXL0ReMvHz0vKDoTBsrwg==}
738 | dev: false
739 |
740 | /caniuse-lite@1.0.30001538:
741 | resolution: {integrity: sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==}
742 | dev: false
743 |
744 | /chalk@4.1.2:
745 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
746 | engines: {node: '>=10'}
747 | dependencies:
748 | ansi-styles: 4.3.0
749 | supports-color: 7.2.0
750 | dev: true
751 |
752 | /charenc@0.0.2:
753 | resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==}
754 | dev: false
755 |
756 | /chokidar@3.5.3:
757 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
758 | engines: {node: '>= 8.10.0'}
759 | dependencies:
760 | anymatch: 3.1.3
761 | braces: 3.0.2
762 | glob-parent: 5.1.2
763 | is-binary-path: 2.1.0
764 | is-glob: 4.0.3
765 | normalize-path: 3.0.0
766 | readdirp: 3.6.0
767 | optionalDependencies:
768 | fsevents: 2.3.3
769 | dev: false
770 |
771 | /class-variance-authority@0.7.0:
772 | resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==}
773 | dependencies:
774 | clsx: 2.0.0
775 | dev: false
776 |
777 | /client-only@0.0.1:
778 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
779 | dev: false
780 |
781 | /clsx@2.0.0:
782 | resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==}
783 | engines: {node: '>=6'}
784 | dev: false
785 |
786 | /color-convert@2.0.1:
787 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
788 | engines: {node: '>=7.0.0'}
789 | dependencies:
790 | color-name: 1.1.4
791 | dev: true
792 |
793 | /color-name@1.1.4:
794 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
795 | dev: true
796 |
797 | /commander@4.1.1:
798 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
799 | engines: {node: '>= 6'}
800 | dev: false
801 |
802 | /concat-map@0.0.1:
803 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
804 |
805 | /cross-spawn@7.0.3:
806 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
807 | engines: {node: '>= 8'}
808 | dependencies:
809 | path-key: 3.1.1
810 | shebang-command: 2.0.0
811 | which: 2.0.2
812 | dev: true
813 |
814 | /crypt@0.0.2:
815 | resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==}
816 | dev: false
817 |
818 | /cssesc@3.0.0:
819 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
820 | engines: {node: '>=4'}
821 | hasBin: true
822 | dev: false
823 |
824 | /csstype@3.1.2:
825 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
826 | dev: false
827 |
828 | /damerau-levenshtein@1.0.8:
829 | resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
830 | dev: true
831 |
832 | /debug@3.2.7:
833 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
834 | peerDependencies:
835 | supports-color: '*'
836 | peerDependenciesMeta:
837 | supports-color:
838 | optional: true
839 | dependencies:
840 | ms: 2.1.3
841 | dev: true
842 |
843 | /debug@4.3.4:
844 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
845 | engines: {node: '>=6.0'}
846 | peerDependencies:
847 | supports-color: '*'
848 | peerDependenciesMeta:
849 | supports-color:
850 | optional: true
851 | dependencies:
852 | ms: 2.1.2
853 | dev: true
854 |
855 | /deep-is@0.1.4:
856 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
857 | dev: true
858 |
859 | /default-browser-id@3.0.0:
860 | resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==}
861 | engines: {node: '>=12'}
862 | dependencies:
863 | bplist-parser: 0.2.0
864 | untildify: 4.0.0
865 | dev: true
866 |
867 | /default-browser@4.0.0:
868 | resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==}
869 | engines: {node: '>=14.16'}
870 | dependencies:
871 | bundle-name: 3.0.0
872 | default-browser-id: 3.0.0
873 | execa: 7.2.0
874 | titleize: 3.0.0
875 | dev: true
876 |
877 | /define-data-property@1.1.0:
878 | resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==}
879 | engines: {node: '>= 0.4'}
880 | dependencies:
881 | get-intrinsic: 1.2.1
882 | gopd: 1.0.1
883 | has-property-descriptors: 1.0.0
884 | dev: true
885 |
886 | /define-lazy-prop@3.0.0:
887 | resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
888 | engines: {node: '>=12'}
889 | dev: true
890 |
891 | /define-properties@1.2.1:
892 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
893 | engines: {node: '>= 0.4'}
894 | dependencies:
895 | define-data-property: 1.1.0
896 | has-property-descriptors: 1.0.0
897 | object-keys: 1.1.1
898 | dev: true
899 |
900 | /dequal@2.0.3:
901 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
902 | engines: {node: '>=6'}
903 | dev: true
904 |
905 | /didyoumean@1.2.2:
906 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
907 | dev: false
908 |
909 | /dir-glob@3.0.1:
910 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
911 | engines: {node: '>=8'}
912 | dependencies:
913 | path-type: 4.0.0
914 | dev: true
915 |
916 | /dlv@1.1.3:
917 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
918 | dev: false
919 |
920 | /doctrine@2.1.0:
921 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
922 | engines: {node: '>=0.10.0'}
923 | dependencies:
924 | esutils: 2.0.3
925 | dev: true
926 |
927 | /doctrine@3.0.0:
928 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
929 | engines: {node: '>=6.0.0'}
930 | dependencies:
931 | esutils: 2.0.3
932 | dev: true
933 |
934 | /electron-to-chromium@1.4.523:
935 | resolution: {integrity: sha512-9AreocSUWnzNtvLcbpng6N+GkXnCcBR80IQkxRC9Dfdyg4gaWNUPBujAHUpKkiUkoSoR9UlhA4zD/IgBklmhzg==}
936 | dev: false
937 |
938 | /emoji-regex@9.2.2:
939 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
940 | dev: true
941 |
942 | /enhanced-resolve@5.15.0:
943 | resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==}
944 | engines: {node: '>=10.13.0'}
945 | dependencies:
946 | graceful-fs: 4.2.11
947 | tapable: 2.2.1
948 | dev: true
949 |
950 | /es-abstract@1.22.2:
951 | resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==}
952 | engines: {node: '>= 0.4'}
953 | dependencies:
954 | array-buffer-byte-length: 1.0.0
955 | arraybuffer.prototype.slice: 1.0.2
956 | available-typed-arrays: 1.0.5
957 | call-bind: 1.0.2
958 | es-set-tostringtag: 2.0.1
959 | es-to-primitive: 1.2.1
960 | function.prototype.name: 1.1.6
961 | get-intrinsic: 1.2.1
962 | get-symbol-description: 1.0.0
963 | globalthis: 1.0.3
964 | gopd: 1.0.1
965 | has: 1.0.3
966 | has-property-descriptors: 1.0.0
967 | has-proto: 1.0.1
968 | has-symbols: 1.0.3
969 | internal-slot: 1.0.5
970 | is-array-buffer: 3.0.2
971 | is-callable: 1.2.7
972 | is-negative-zero: 2.0.2
973 | is-regex: 1.1.4
974 | is-shared-array-buffer: 1.0.2
975 | is-string: 1.0.7
976 | is-typed-array: 1.1.12
977 | is-weakref: 1.0.2
978 | object-inspect: 1.12.3
979 | object-keys: 1.1.1
980 | object.assign: 4.1.4
981 | regexp.prototype.flags: 1.5.1
982 | safe-array-concat: 1.0.1
983 | safe-regex-test: 1.0.0
984 | string.prototype.trim: 1.2.8
985 | string.prototype.trimend: 1.0.7
986 | string.prototype.trimstart: 1.0.7
987 | typed-array-buffer: 1.0.0
988 | typed-array-byte-length: 1.0.0
989 | typed-array-byte-offset: 1.0.0
990 | typed-array-length: 1.0.4
991 | unbox-primitive: 1.0.2
992 | which-typed-array: 1.1.11
993 | dev: true
994 |
995 | /es-iterator-helpers@1.0.15:
996 | resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==}
997 | dependencies:
998 | asynciterator.prototype: 1.0.0
999 | call-bind: 1.0.2
1000 | define-properties: 1.2.1
1001 | es-abstract: 1.22.2
1002 | es-set-tostringtag: 2.0.1
1003 | function-bind: 1.1.1
1004 | get-intrinsic: 1.2.1
1005 | globalthis: 1.0.3
1006 | has-property-descriptors: 1.0.0
1007 | has-proto: 1.0.1
1008 | has-symbols: 1.0.3
1009 | internal-slot: 1.0.5
1010 | iterator.prototype: 1.1.2
1011 | safe-array-concat: 1.0.1
1012 | dev: true
1013 |
1014 | /es-set-tostringtag@2.0.1:
1015 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
1016 | engines: {node: '>= 0.4'}
1017 | dependencies:
1018 | get-intrinsic: 1.2.1
1019 | has: 1.0.3
1020 | has-tostringtag: 1.0.0
1021 | dev: true
1022 |
1023 | /es-shim-unscopables@1.0.0:
1024 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
1025 | dependencies:
1026 | has: 1.0.3
1027 | dev: true
1028 |
1029 | /es-to-primitive@1.2.1:
1030 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
1031 | engines: {node: '>= 0.4'}
1032 | dependencies:
1033 | is-callable: 1.2.7
1034 | is-date-object: 1.0.5
1035 | is-symbol: 1.0.4
1036 | dev: true
1037 |
1038 | /escalade@3.1.1:
1039 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
1040 | engines: {node: '>=6'}
1041 | dev: false
1042 |
1043 | /escape-string-regexp@4.0.0:
1044 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
1045 | engines: {node: '>=10'}
1046 | dev: true
1047 |
1048 | /eslint-config-next@13.4.16(eslint@8.45.0)(typescript@5.2.2):
1049 | resolution: {integrity: sha512-Of73d/FiaGf0GLCxxTGdh4rW8bRDvsqypylefkshE/uDDpQr8ifVQsD4UiB99rhegks7nJGkYtUnR3dC7kfFlw==}
1050 | peerDependencies:
1051 | eslint: ^7.23.0 || ^8.0.0
1052 | typescript: '>=3.3.1'
1053 | peerDependenciesMeta:
1054 | typescript:
1055 | optional: true
1056 | dependencies:
1057 | '@next/eslint-plugin-next': 13.4.16
1058 | '@rushstack/eslint-patch': 1.4.0
1059 | '@typescript-eslint/parser': 6.7.0(eslint@8.45.0)(typescript@5.2.2)
1060 | eslint: 8.45.0
1061 | eslint-import-resolver-node: 0.3.9
1062 | eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.45.0)
1063 | eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.45.0)
1064 | eslint-plugin-jsx-a11y: 6.7.1(eslint@8.45.0)
1065 | eslint-plugin-react: 7.33.2(eslint@8.45.0)
1066 | eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.45.0)
1067 | typescript: 5.2.2
1068 | transitivePeerDependencies:
1069 | - eslint-import-resolver-webpack
1070 | - supports-color
1071 | dev: true
1072 |
1073 | /eslint-config-prettier@9.0.0(eslint@8.45.0):
1074 | resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==}
1075 | hasBin: true
1076 | peerDependencies:
1077 | eslint: '>=7.0.0'
1078 | dependencies:
1079 | eslint: 8.45.0
1080 | dev: true
1081 |
1082 | /eslint-import-resolver-node@0.3.9:
1083 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
1084 | dependencies:
1085 | debug: 3.2.7
1086 | is-core-module: 2.13.0
1087 | resolve: 1.22.6
1088 | transitivePeerDependencies:
1089 | - supports-color
1090 | dev: true
1091 |
1092 | /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.45.0):
1093 | resolution: {integrity: sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==}
1094 | engines: {node: ^14.18.0 || >=16.0.0}
1095 | peerDependencies:
1096 | eslint: '*'
1097 | eslint-plugin-import: '*'
1098 | dependencies:
1099 | debug: 4.3.4
1100 | enhanced-resolve: 5.15.0
1101 | eslint: 8.45.0
1102 | eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.45.0)
1103 | eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.45.0)
1104 | fast-glob: 3.3.1
1105 | get-tsconfig: 4.7.0
1106 | is-core-module: 2.13.0
1107 | is-glob: 4.0.3
1108 | transitivePeerDependencies:
1109 | - '@typescript-eslint/parser'
1110 | - eslint-import-resolver-node
1111 | - eslint-import-resolver-webpack
1112 | - supports-color
1113 | dev: true
1114 |
1115 | /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.45.0):
1116 | resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
1117 | engines: {node: '>=4'}
1118 | peerDependencies:
1119 | '@typescript-eslint/parser': '*'
1120 | eslint: '*'
1121 | eslint-import-resolver-node: '*'
1122 | eslint-import-resolver-typescript: '*'
1123 | eslint-import-resolver-webpack: '*'
1124 | peerDependenciesMeta:
1125 | '@typescript-eslint/parser':
1126 | optional: true
1127 | eslint:
1128 | optional: true
1129 | eslint-import-resolver-node:
1130 | optional: true
1131 | eslint-import-resolver-typescript:
1132 | optional: true
1133 | eslint-import-resolver-webpack:
1134 | optional: true
1135 | dependencies:
1136 | '@typescript-eslint/parser': 6.7.0(eslint@8.45.0)(typescript@5.2.2)
1137 | debug: 3.2.7
1138 | eslint: 8.45.0
1139 | eslint-import-resolver-node: 0.3.9
1140 | eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.45.0)
1141 | transitivePeerDependencies:
1142 | - supports-color
1143 | dev: true
1144 |
1145 | /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.45.0):
1146 | resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==}
1147 | engines: {node: '>=4'}
1148 | peerDependencies:
1149 | '@typescript-eslint/parser': '*'
1150 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
1151 | peerDependenciesMeta:
1152 | '@typescript-eslint/parser':
1153 | optional: true
1154 | dependencies:
1155 | '@typescript-eslint/parser': 6.7.0(eslint@8.45.0)(typescript@5.2.2)
1156 | array-includes: 3.1.7
1157 | array.prototype.findlastindex: 1.2.3
1158 | array.prototype.flat: 1.3.2
1159 | array.prototype.flatmap: 1.3.2
1160 | debug: 3.2.7
1161 | doctrine: 2.1.0
1162 | eslint: 8.45.0
1163 | eslint-import-resolver-node: 0.3.9
1164 | eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.45.0)
1165 | has: 1.0.3
1166 | is-core-module: 2.13.0
1167 | is-glob: 4.0.3
1168 | minimatch: 3.1.2
1169 | object.fromentries: 2.0.7
1170 | object.groupby: 1.0.1
1171 | object.values: 1.1.7
1172 | semver: 6.3.1
1173 | tsconfig-paths: 3.14.2
1174 | transitivePeerDependencies:
1175 | - eslint-import-resolver-typescript
1176 | - eslint-import-resolver-webpack
1177 | - supports-color
1178 | dev: true
1179 |
1180 | /eslint-plugin-jsx-a11y@6.7.1(eslint@8.45.0):
1181 | resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==}
1182 | engines: {node: '>=4.0'}
1183 | peerDependencies:
1184 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
1185 | dependencies:
1186 | '@babel/runtime': 7.22.15
1187 | aria-query: 5.3.0
1188 | array-includes: 3.1.7
1189 | array.prototype.flatmap: 1.3.2
1190 | ast-types-flow: 0.0.7
1191 | axe-core: 4.8.1
1192 | axobject-query: 3.2.1
1193 | damerau-levenshtein: 1.0.8
1194 | emoji-regex: 9.2.2
1195 | eslint: 8.45.0
1196 | has: 1.0.3
1197 | jsx-ast-utils: 3.3.5
1198 | language-tags: 1.0.5
1199 | minimatch: 3.1.2
1200 | object.entries: 1.1.7
1201 | object.fromentries: 2.0.7
1202 | semver: 6.3.1
1203 | dev: true
1204 |
1205 | /eslint-plugin-prettier@5.0.0(eslint-config-prettier@9.0.0)(eslint@8.45.0)(prettier@3.0.3):
1206 | resolution: {integrity: sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==}
1207 | engines: {node: ^14.18.0 || >=16.0.0}
1208 | peerDependencies:
1209 | '@types/eslint': '>=8.0.0'
1210 | eslint: '>=8.0.0'
1211 | eslint-config-prettier: '*'
1212 | prettier: '>=3.0.0'
1213 | peerDependenciesMeta:
1214 | '@types/eslint':
1215 | optional: true
1216 | eslint-config-prettier:
1217 | optional: true
1218 | dependencies:
1219 | eslint: 8.45.0
1220 | eslint-config-prettier: 9.0.0(eslint@8.45.0)
1221 | prettier: 3.0.3
1222 | prettier-linter-helpers: 1.0.0
1223 | synckit: 0.8.5
1224 | dev: true
1225 |
1226 | /eslint-plugin-react-hooks@5.0.0-canary-7118f5dd7-20230705(eslint@8.45.0):
1227 | resolution: {integrity: sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==}
1228 | engines: {node: '>=10'}
1229 | peerDependencies:
1230 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
1231 | dependencies:
1232 | eslint: 8.45.0
1233 | dev: true
1234 |
1235 | /eslint-plugin-react@7.33.2(eslint@8.45.0):
1236 | resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==}
1237 | engines: {node: '>=4'}
1238 | peerDependencies:
1239 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
1240 | dependencies:
1241 | array-includes: 3.1.7
1242 | array.prototype.flatmap: 1.3.2
1243 | array.prototype.tosorted: 1.1.2
1244 | doctrine: 2.1.0
1245 | es-iterator-helpers: 1.0.15
1246 | eslint: 8.45.0
1247 | estraverse: 5.3.0
1248 | jsx-ast-utils: 3.3.5
1249 | minimatch: 3.1.2
1250 | object.entries: 1.1.7
1251 | object.fromentries: 2.0.7
1252 | object.hasown: 1.1.3
1253 | object.values: 1.1.7
1254 | prop-types: 15.8.1
1255 | resolve: 2.0.0-next.4
1256 | semver: 6.3.1
1257 | string.prototype.matchall: 4.0.10
1258 | dev: true
1259 |
1260 | /eslint-scope@7.2.2:
1261 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
1262 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1263 | dependencies:
1264 | esrecurse: 4.3.0
1265 | estraverse: 5.3.0
1266 | dev: true
1267 |
1268 | /eslint-visitor-keys@3.4.3:
1269 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
1270 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1271 | dev: true
1272 |
1273 | /eslint@8.45.0:
1274 | resolution: {integrity: sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==}
1275 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1276 | hasBin: true
1277 | dependencies:
1278 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0)
1279 | '@eslint-community/regexpp': 4.8.1
1280 | '@eslint/eslintrc': 2.1.2
1281 | '@eslint/js': 8.44.0
1282 | '@humanwhocodes/config-array': 0.11.11
1283 | '@humanwhocodes/module-importer': 1.0.1
1284 | '@nodelib/fs.walk': 1.2.8
1285 | ajv: 6.12.6
1286 | chalk: 4.1.2
1287 | cross-spawn: 7.0.3
1288 | debug: 4.3.4
1289 | doctrine: 3.0.0
1290 | escape-string-regexp: 4.0.0
1291 | eslint-scope: 7.2.2
1292 | eslint-visitor-keys: 3.4.3
1293 | espree: 9.6.1
1294 | esquery: 1.5.0
1295 | esutils: 2.0.3
1296 | fast-deep-equal: 3.1.3
1297 | file-entry-cache: 6.0.1
1298 | find-up: 5.0.0
1299 | glob-parent: 6.0.2
1300 | globals: 13.21.0
1301 | graphemer: 1.4.0
1302 | ignore: 5.2.4
1303 | imurmurhash: 0.1.4
1304 | is-glob: 4.0.3
1305 | is-path-inside: 3.0.3
1306 | js-yaml: 4.1.0
1307 | json-stable-stringify-without-jsonify: 1.0.1
1308 | levn: 0.4.1
1309 | lodash.merge: 4.6.2
1310 | minimatch: 3.1.2
1311 | natural-compare: 1.4.0
1312 | optionator: 0.9.3
1313 | strip-ansi: 6.0.1
1314 | text-table: 0.2.0
1315 | transitivePeerDependencies:
1316 | - supports-color
1317 | dev: true
1318 |
1319 | /espree@9.6.1:
1320 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
1321 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1322 | dependencies:
1323 | acorn: 8.10.0
1324 | acorn-jsx: 5.3.2(acorn@8.10.0)
1325 | eslint-visitor-keys: 3.4.3
1326 | dev: true
1327 |
1328 | /esquery@1.5.0:
1329 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
1330 | engines: {node: '>=0.10'}
1331 | dependencies:
1332 | estraverse: 5.3.0
1333 | dev: true
1334 |
1335 | /esrecurse@4.3.0:
1336 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
1337 | engines: {node: '>=4.0'}
1338 | dependencies:
1339 | estraverse: 5.3.0
1340 | dev: true
1341 |
1342 | /estraverse@5.3.0:
1343 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
1344 | engines: {node: '>=4.0'}
1345 | dev: true
1346 |
1347 | /esutils@2.0.3:
1348 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
1349 | engines: {node: '>=0.10.0'}
1350 | dev: true
1351 |
1352 | /execa@5.1.1:
1353 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
1354 | engines: {node: '>=10'}
1355 | dependencies:
1356 | cross-spawn: 7.0.3
1357 | get-stream: 6.0.1
1358 | human-signals: 2.1.0
1359 | is-stream: 2.0.1
1360 | merge-stream: 2.0.0
1361 | npm-run-path: 4.0.1
1362 | onetime: 5.1.2
1363 | signal-exit: 3.0.7
1364 | strip-final-newline: 2.0.0
1365 | dev: true
1366 |
1367 | /execa@7.2.0:
1368 | resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==}
1369 | engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
1370 | dependencies:
1371 | cross-spawn: 7.0.3
1372 | get-stream: 6.0.1
1373 | human-signals: 4.3.1
1374 | is-stream: 3.0.0
1375 | merge-stream: 2.0.0
1376 | npm-run-path: 5.1.0
1377 | onetime: 6.0.0
1378 | signal-exit: 3.0.7
1379 | strip-final-newline: 3.0.0
1380 | dev: true
1381 |
1382 | /fast-deep-equal@3.1.3:
1383 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1384 | dev: true
1385 |
1386 | /fast-diff@1.3.0:
1387 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
1388 | dev: true
1389 |
1390 | /fast-glob@3.3.1:
1391 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
1392 | engines: {node: '>=8.6.0'}
1393 | dependencies:
1394 | '@nodelib/fs.stat': 2.0.5
1395 | '@nodelib/fs.walk': 1.2.8
1396 | glob-parent: 5.1.2
1397 | merge2: 1.4.1
1398 | micromatch: 4.0.5
1399 |
1400 | /fast-json-stable-stringify@2.1.0:
1401 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
1402 | dev: true
1403 |
1404 | /fast-levenshtein@2.0.6:
1405 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
1406 | dev: true
1407 |
1408 | /fastq@1.15.0:
1409 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
1410 | dependencies:
1411 | reusify: 1.0.4
1412 |
1413 | /file-entry-cache@6.0.1:
1414 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
1415 | engines: {node: ^10.12.0 || >=12.0.0}
1416 | dependencies:
1417 | flat-cache: 3.1.0
1418 | dev: true
1419 |
1420 | /fill-range@7.0.1:
1421 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1422 | engines: {node: '>=8'}
1423 | dependencies:
1424 | to-regex-range: 5.0.1
1425 |
1426 | /find-up@5.0.0:
1427 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
1428 | engines: {node: '>=10'}
1429 | dependencies:
1430 | locate-path: 6.0.0
1431 | path-exists: 4.0.0
1432 | dev: true
1433 |
1434 | /flat-cache@3.1.0:
1435 | resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==}
1436 | engines: {node: '>=12.0.0'}
1437 | dependencies:
1438 | flatted: 3.2.9
1439 | keyv: 4.5.3
1440 | rimraf: 3.0.2
1441 | dev: true
1442 |
1443 | /flatted@3.2.9:
1444 | resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
1445 | dev: true
1446 |
1447 | /for-each@0.3.3:
1448 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
1449 | dependencies:
1450 | is-callable: 1.2.7
1451 | dev: true
1452 |
1453 | /fraction.js@4.3.6:
1454 | resolution: {integrity: sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==}
1455 | dev: false
1456 |
1457 | /fs.realpath@1.0.0:
1458 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1459 |
1460 | /fsevents@2.3.3:
1461 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
1462 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1463 | os: [darwin]
1464 | requiresBuild: true
1465 | dev: false
1466 | optional: true
1467 |
1468 | /function-bind@1.1.1:
1469 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
1470 |
1471 | /function.prototype.name@1.1.6:
1472 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
1473 | engines: {node: '>= 0.4'}
1474 | dependencies:
1475 | call-bind: 1.0.2
1476 | define-properties: 1.2.1
1477 | es-abstract: 1.22.2
1478 | functions-have-names: 1.2.3
1479 | dev: true
1480 |
1481 | /functions-have-names@1.2.3:
1482 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
1483 | dev: true
1484 |
1485 | /get-intrinsic@1.2.1:
1486 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==}
1487 | dependencies:
1488 | function-bind: 1.1.1
1489 | has: 1.0.3
1490 | has-proto: 1.0.1
1491 | has-symbols: 1.0.3
1492 | dev: true
1493 |
1494 | /get-stream@6.0.1:
1495 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
1496 | engines: {node: '>=10'}
1497 | dev: true
1498 |
1499 | /get-symbol-description@1.0.0:
1500 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
1501 | engines: {node: '>= 0.4'}
1502 | dependencies:
1503 | call-bind: 1.0.2
1504 | get-intrinsic: 1.2.1
1505 | dev: true
1506 |
1507 | /get-tsconfig@4.7.0:
1508 | resolution: {integrity: sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==}
1509 | dependencies:
1510 | resolve-pkg-maps: 1.0.0
1511 | dev: true
1512 |
1513 | /glob-parent@5.1.2:
1514 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1515 | engines: {node: '>= 6'}
1516 | dependencies:
1517 | is-glob: 4.0.3
1518 |
1519 | /glob-parent@6.0.2:
1520 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1521 | engines: {node: '>=10.13.0'}
1522 | dependencies:
1523 | is-glob: 4.0.3
1524 |
1525 | /glob-to-regexp@0.4.1:
1526 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
1527 | dev: false
1528 |
1529 | /glob@7.1.6:
1530 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
1531 | dependencies:
1532 | fs.realpath: 1.0.0
1533 | inflight: 1.0.6
1534 | inherits: 2.0.4
1535 | minimatch: 3.1.2
1536 | once: 1.4.0
1537 | path-is-absolute: 1.0.1
1538 | dev: false
1539 |
1540 | /glob@7.1.7:
1541 | resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==}
1542 | dependencies:
1543 | fs.realpath: 1.0.0
1544 | inflight: 1.0.6
1545 | inherits: 2.0.4
1546 | minimatch: 3.1.2
1547 | once: 1.4.0
1548 | path-is-absolute: 1.0.1
1549 | dev: true
1550 |
1551 | /glob@7.2.3:
1552 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1553 | dependencies:
1554 | fs.realpath: 1.0.0
1555 | inflight: 1.0.6
1556 | inherits: 2.0.4
1557 | minimatch: 3.1.2
1558 | once: 1.4.0
1559 | path-is-absolute: 1.0.1
1560 | dev: true
1561 |
1562 | /globals@13.21.0:
1563 | resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==}
1564 | engines: {node: '>=8'}
1565 | dependencies:
1566 | type-fest: 0.20.2
1567 | dev: true
1568 |
1569 | /globalthis@1.0.3:
1570 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
1571 | engines: {node: '>= 0.4'}
1572 | dependencies:
1573 | define-properties: 1.2.1
1574 | dev: true
1575 |
1576 | /globby@11.1.0:
1577 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1578 | engines: {node: '>=10'}
1579 | dependencies:
1580 | array-union: 2.1.0
1581 | dir-glob: 3.0.1
1582 | fast-glob: 3.3.1
1583 | ignore: 5.2.4
1584 | merge2: 1.4.1
1585 | slash: 3.0.0
1586 | dev: true
1587 |
1588 | /gopd@1.0.1:
1589 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
1590 | dependencies:
1591 | get-intrinsic: 1.2.1
1592 | dev: true
1593 |
1594 | /graceful-fs@4.2.11:
1595 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1596 |
1597 | /graphemer@1.4.0:
1598 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
1599 | dev: true
1600 |
1601 | /has-bigints@1.0.2:
1602 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
1603 | dev: true
1604 |
1605 | /has-flag@4.0.0:
1606 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1607 | engines: {node: '>=8'}
1608 | dev: true
1609 |
1610 | /has-property-descriptors@1.0.0:
1611 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
1612 | dependencies:
1613 | get-intrinsic: 1.2.1
1614 | dev: true
1615 |
1616 | /has-proto@1.0.1:
1617 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
1618 | engines: {node: '>= 0.4'}
1619 | dev: true
1620 |
1621 | /has-symbols@1.0.3:
1622 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
1623 | engines: {node: '>= 0.4'}
1624 | dev: true
1625 |
1626 | /has-tostringtag@1.0.0:
1627 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
1628 | engines: {node: '>= 0.4'}
1629 | dependencies:
1630 | has-symbols: 1.0.3
1631 | dev: true
1632 |
1633 | /has@1.0.3:
1634 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
1635 | engines: {node: '>= 0.4.0'}
1636 | dependencies:
1637 | function-bind: 1.1.1
1638 |
1639 | /human-signals@2.1.0:
1640 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
1641 | engines: {node: '>=10.17.0'}
1642 | dev: true
1643 |
1644 | /human-signals@4.3.1:
1645 | resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==}
1646 | engines: {node: '>=14.18.0'}
1647 | dev: true
1648 |
1649 | /ignore@5.2.4:
1650 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
1651 | engines: {node: '>= 4'}
1652 | dev: true
1653 |
1654 | /import-fresh@3.3.0:
1655 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
1656 | engines: {node: '>=6'}
1657 | dependencies:
1658 | parent-module: 1.0.1
1659 | resolve-from: 4.0.0
1660 | dev: true
1661 |
1662 | /imurmurhash@0.1.4:
1663 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1664 | engines: {node: '>=0.8.19'}
1665 | dev: true
1666 |
1667 | /inflight@1.0.6:
1668 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1669 | dependencies:
1670 | once: 1.4.0
1671 | wrappy: 1.0.2
1672 |
1673 | /inherits@2.0.4:
1674 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1675 |
1676 | /internal-slot@1.0.5:
1677 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
1678 | engines: {node: '>= 0.4'}
1679 | dependencies:
1680 | get-intrinsic: 1.2.1
1681 | has: 1.0.3
1682 | side-channel: 1.0.4
1683 | dev: true
1684 |
1685 | /is-array-buffer@3.0.2:
1686 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
1687 | dependencies:
1688 | call-bind: 1.0.2
1689 | get-intrinsic: 1.2.1
1690 | is-typed-array: 1.1.12
1691 | dev: true
1692 |
1693 | /is-async-function@2.0.0:
1694 | resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==}
1695 | engines: {node: '>= 0.4'}
1696 | dependencies:
1697 | has-tostringtag: 1.0.0
1698 | dev: true
1699 |
1700 | /is-bigint@1.0.4:
1701 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
1702 | dependencies:
1703 | has-bigints: 1.0.2
1704 | dev: true
1705 |
1706 | /is-binary-path@2.1.0:
1707 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1708 | engines: {node: '>=8'}
1709 | dependencies:
1710 | binary-extensions: 2.2.0
1711 | dev: false
1712 |
1713 | /is-boolean-object@1.1.2:
1714 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
1715 | engines: {node: '>= 0.4'}
1716 | dependencies:
1717 | call-bind: 1.0.2
1718 | has-tostringtag: 1.0.0
1719 | dev: true
1720 |
1721 | /is-buffer@1.1.6:
1722 | resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
1723 | dev: false
1724 |
1725 | /is-callable@1.2.7:
1726 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
1727 | engines: {node: '>= 0.4'}
1728 | dev: true
1729 |
1730 | /is-core-module@2.13.0:
1731 | resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==}
1732 | dependencies:
1733 | has: 1.0.3
1734 |
1735 | /is-date-object@1.0.5:
1736 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
1737 | engines: {node: '>= 0.4'}
1738 | dependencies:
1739 | has-tostringtag: 1.0.0
1740 | dev: true
1741 |
1742 | /is-docker@2.2.1:
1743 | resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
1744 | engines: {node: '>=8'}
1745 | hasBin: true
1746 | dev: true
1747 |
1748 | /is-docker@3.0.0:
1749 | resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
1750 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1751 | hasBin: true
1752 | dev: true
1753 |
1754 | /is-extglob@2.1.1:
1755 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1756 | engines: {node: '>=0.10.0'}
1757 |
1758 | /is-finalizationregistry@1.0.2:
1759 | resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==}
1760 | dependencies:
1761 | call-bind: 1.0.2
1762 | dev: true
1763 |
1764 | /is-generator-function@1.0.10:
1765 | resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
1766 | engines: {node: '>= 0.4'}
1767 | dependencies:
1768 | has-tostringtag: 1.0.0
1769 | dev: true
1770 |
1771 | /is-glob@4.0.3:
1772 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1773 | engines: {node: '>=0.10.0'}
1774 | dependencies:
1775 | is-extglob: 2.1.1
1776 |
1777 | /is-inside-container@1.0.0:
1778 | resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
1779 | engines: {node: '>=14.16'}
1780 | hasBin: true
1781 | dependencies:
1782 | is-docker: 3.0.0
1783 | dev: true
1784 |
1785 | /is-map@2.0.2:
1786 | resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
1787 | dev: true
1788 |
1789 | /is-negative-zero@2.0.2:
1790 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
1791 | engines: {node: '>= 0.4'}
1792 | dev: true
1793 |
1794 | /is-number-object@1.0.7:
1795 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
1796 | engines: {node: '>= 0.4'}
1797 | dependencies:
1798 | has-tostringtag: 1.0.0
1799 | dev: true
1800 |
1801 | /is-number@7.0.0:
1802 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1803 | engines: {node: '>=0.12.0'}
1804 |
1805 | /is-path-inside@3.0.3:
1806 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
1807 | engines: {node: '>=8'}
1808 | dev: true
1809 |
1810 | /is-regex@1.1.4:
1811 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
1812 | engines: {node: '>= 0.4'}
1813 | dependencies:
1814 | call-bind: 1.0.2
1815 | has-tostringtag: 1.0.0
1816 | dev: true
1817 |
1818 | /is-set@2.0.2:
1819 | resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==}
1820 | dev: true
1821 |
1822 | /is-shared-array-buffer@1.0.2:
1823 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
1824 | dependencies:
1825 | call-bind: 1.0.2
1826 | dev: true
1827 |
1828 | /is-stream@2.0.1:
1829 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
1830 | engines: {node: '>=8'}
1831 | dev: true
1832 |
1833 | /is-stream@3.0.0:
1834 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
1835 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1836 | dev: true
1837 |
1838 | /is-string@1.0.7:
1839 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
1840 | engines: {node: '>= 0.4'}
1841 | dependencies:
1842 | has-tostringtag: 1.0.0
1843 | dev: true
1844 |
1845 | /is-symbol@1.0.4:
1846 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
1847 | engines: {node: '>= 0.4'}
1848 | dependencies:
1849 | has-symbols: 1.0.3
1850 | dev: true
1851 |
1852 | /is-typed-array@1.1.12:
1853 | resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==}
1854 | engines: {node: '>= 0.4'}
1855 | dependencies:
1856 | which-typed-array: 1.1.11
1857 | dev: true
1858 |
1859 | /is-weakmap@2.0.1:
1860 | resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==}
1861 | dev: true
1862 |
1863 | /is-weakref@1.0.2:
1864 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
1865 | dependencies:
1866 | call-bind: 1.0.2
1867 | dev: true
1868 |
1869 | /is-weakset@2.0.2:
1870 | resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
1871 | dependencies:
1872 | call-bind: 1.0.2
1873 | get-intrinsic: 1.2.1
1874 | dev: true
1875 |
1876 | /is-wsl@2.2.0:
1877 | resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
1878 | engines: {node: '>=8'}
1879 | dependencies:
1880 | is-docker: 2.2.1
1881 | dev: true
1882 |
1883 | /isarray@2.0.5:
1884 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
1885 | dev: true
1886 |
1887 | /isexe@2.0.0:
1888 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1889 | dev: true
1890 |
1891 | /iterator.prototype@1.1.2:
1892 | resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==}
1893 | dependencies:
1894 | define-properties: 1.2.1
1895 | get-intrinsic: 1.2.1
1896 | has-symbols: 1.0.3
1897 | reflect.getprototypeof: 1.0.4
1898 | set-function-name: 2.0.1
1899 | dev: true
1900 |
1901 | /jiti@1.20.0:
1902 | resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==}
1903 | hasBin: true
1904 | dev: false
1905 |
1906 | /jose@4.14.6:
1907 | resolution: {integrity: sha512-EqJPEUlZD0/CSUMubKtMaYUOtWe91tZXTWMJZoKSbLk+KtdhNdcvppH8lA9XwVu2V4Ailvsj0GBZJ2ZwDjfesQ==}
1908 | dev: false
1909 |
1910 | /js-tokens@4.0.0:
1911 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1912 |
1913 | /js-yaml@4.1.0:
1914 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1915 | hasBin: true
1916 | dependencies:
1917 | argparse: 2.0.1
1918 | dev: true
1919 |
1920 | /json-buffer@3.0.1:
1921 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
1922 | dev: true
1923 |
1924 | /json-schema-traverse@0.4.1:
1925 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1926 | dev: true
1927 |
1928 | /json-stable-stringify-without-jsonify@1.0.1:
1929 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
1930 | dev: true
1931 |
1932 | /json5@1.0.2:
1933 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
1934 | hasBin: true
1935 | dependencies:
1936 | minimist: 1.2.8
1937 | dev: true
1938 |
1939 | /jsx-ast-utils@3.3.5:
1940 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
1941 | engines: {node: '>=4.0'}
1942 | dependencies:
1943 | array-includes: 3.1.7
1944 | array.prototype.flat: 1.3.2
1945 | object.assign: 4.1.4
1946 | object.values: 1.1.7
1947 | dev: true
1948 |
1949 | /keyv@4.5.3:
1950 | resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==}
1951 | dependencies:
1952 | json-buffer: 3.0.1
1953 | dev: true
1954 |
1955 | /language-subtag-registry@0.3.22:
1956 | resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
1957 | dev: true
1958 |
1959 | /language-tags@1.0.5:
1960 | resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==}
1961 | dependencies:
1962 | language-subtag-registry: 0.3.22
1963 | dev: true
1964 |
1965 | /levn@0.4.1:
1966 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1967 | engines: {node: '>= 0.8.0'}
1968 | dependencies:
1969 | prelude-ls: 1.2.1
1970 | type-check: 0.4.0
1971 | dev: true
1972 |
1973 | /lilconfig@2.1.0:
1974 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
1975 | engines: {node: '>=10'}
1976 | dev: false
1977 |
1978 | /lines-and-columns@1.2.4:
1979 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
1980 | dev: false
1981 |
1982 | /locate-path@6.0.0:
1983 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1984 | engines: {node: '>=10'}
1985 | dependencies:
1986 | p-locate: 5.0.0
1987 | dev: true
1988 |
1989 | /lodash.merge@4.6.2:
1990 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1991 | dev: true
1992 |
1993 | /loose-envify@1.4.0:
1994 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
1995 | hasBin: true
1996 | dependencies:
1997 | js-tokens: 4.0.0
1998 |
1999 | /lru-cache@6.0.0:
2000 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
2001 | engines: {node: '>=10'}
2002 | dependencies:
2003 | yallist: 4.0.0
2004 | dev: true
2005 |
2006 | /md5@2.3.0:
2007 | resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==}
2008 | dependencies:
2009 | charenc: 0.0.2
2010 | crypt: 0.0.2
2011 | is-buffer: 1.1.6
2012 | dev: false
2013 |
2014 | /merge-stream@2.0.0:
2015 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
2016 | dev: true
2017 |
2018 | /merge2@1.4.1:
2019 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
2020 | engines: {node: '>= 8'}
2021 |
2022 | /micromatch@4.0.5:
2023 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
2024 | engines: {node: '>=8.6'}
2025 | dependencies:
2026 | braces: 3.0.2
2027 | picomatch: 2.3.1
2028 |
2029 | /mimic-fn@2.1.0:
2030 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
2031 | engines: {node: '>=6'}
2032 | dev: true
2033 |
2034 | /mimic-fn@4.0.0:
2035 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
2036 | engines: {node: '>=12'}
2037 | dev: true
2038 |
2039 | /minimatch@3.1.2:
2040 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
2041 | dependencies:
2042 | brace-expansion: 1.1.11
2043 |
2044 | /minimist@1.2.8:
2045 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
2046 | dev: true
2047 |
2048 | /ms@2.1.2:
2049 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
2050 | dev: true
2051 |
2052 | /ms@2.1.3:
2053 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
2054 | dev: true
2055 |
2056 | /mz@2.7.0:
2057 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
2058 | dependencies:
2059 | any-promise: 1.3.0
2060 | object-assign: 4.1.1
2061 | thenify-all: 1.6.0
2062 | dev: false
2063 |
2064 | /nanoevents@7.0.1:
2065 | resolution: {integrity: sha512-o6lpKiCxLeijK4hgsqfR6CNToPyRU3keKyyI6uwuHRvpRTbZ0wXw51WRgyldVugZqoJfkGFrjrIenYH3bfEO3Q==}
2066 | engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0}
2067 | dev: false
2068 |
2069 | /nanoid@3.3.6:
2070 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
2071 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
2072 | hasBin: true
2073 | dev: false
2074 |
2075 | /nanoid@5.0.1:
2076 | resolution: {integrity: sha512-vWeVtV5Cw68aML/QaZvqN/3QQXc6fBfIieAlu05m7FZW2Dgb+3f0xc0TTxuJW+7u30t7iSDTV/j3kVI0oJqIfQ==}
2077 | engines: {node: ^18 || >=20}
2078 | hasBin: true
2079 | dev: false
2080 |
2081 | /nanostores@0.9.3:
2082 | resolution: {integrity: sha512-KobZjcVyNndNrb5DAjfs0WG0lRcZu5Q1BOrfTOxokFLi25zFrWPjg+joXC6kuDqNfSt9fQwppyjUBkRPtsL+8w==}
2083 | engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0}
2084 | dev: false
2085 |
2086 | /natural-compare@1.4.0:
2087 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
2088 | dev: true
2089 |
2090 | /next@13.5.1(react-dom@18.2.0)(react@18.2.0):
2091 | resolution: {integrity: sha512-GIudNR7ggGUZoIL79mSZcxbXK9f5pwAIPZxEM8+j2yLqv5RODg4TkmUlaKSYVqE1bPQueamXSqdC3j7axiTSEg==}
2092 | engines: {node: '>=16.14.0'}
2093 | hasBin: true
2094 | peerDependencies:
2095 | '@opentelemetry/api': ^1.1.0
2096 | react: ^18.2.0
2097 | react-dom: ^18.2.0
2098 | sass: ^1.3.0
2099 | peerDependenciesMeta:
2100 | '@opentelemetry/api':
2101 | optional: true
2102 | sass:
2103 | optional: true
2104 | dependencies:
2105 | '@next/env': 13.5.1
2106 | '@swc/helpers': 0.5.2
2107 | busboy: 1.6.0
2108 | caniuse-lite: 1.0.30001538
2109 | postcss: 8.4.14
2110 | react: 18.2.0
2111 | react-dom: 18.2.0(react@18.2.0)
2112 | styled-jsx: 5.1.1(react@18.2.0)
2113 | watchpack: 2.4.0
2114 | zod: 3.21.4
2115 | optionalDependencies:
2116 | '@next/swc-darwin-arm64': 13.5.1
2117 | '@next/swc-darwin-x64': 13.5.1
2118 | '@next/swc-linux-arm64-gnu': 13.5.1
2119 | '@next/swc-linux-arm64-musl': 13.5.1
2120 | '@next/swc-linux-x64-gnu': 13.5.1
2121 | '@next/swc-linux-x64-musl': 13.5.1
2122 | '@next/swc-win32-arm64-msvc': 13.5.1
2123 | '@next/swc-win32-ia32-msvc': 13.5.1
2124 | '@next/swc-win32-x64-msvc': 13.5.1
2125 | transitivePeerDependencies:
2126 | - '@babel/core'
2127 | - babel-plugin-macros
2128 | dev: false
2129 |
2130 | /node-downloader-helper@1.0.19:
2131 | resolution: {integrity: sha512-Bwp8WWDDP5ftg+FmAKU08a9+oiUTPoYzMvXgUqZZPQ7VMo1qKBzW3XdTXHeYnqjGLfkTZ2GPibgAWpApfpeS2g==}
2132 | engines: {node: '>=6.9'}
2133 | hasBin: true
2134 | dev: false
2135 |
2136 | /node-releases@2.0.13:
2137 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
2138 | dev: false
2139 |
2140 | /normalize-path@3.0.0:
2141 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
2142 | engines: {node: '>=0.10.0'}
2143 | dev: false
2144 |
2145 | /normalize-range@0.1.2:
2146 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
2147 | engines: {node: '>=0.10.0'}
2148 | dev: false
2149 |
2150 | /npm-run-path@4.0.1:
2151 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
2152 | engines: {node: '>=8'}
2153 | dependencies:
2154 | path-key: 3.1.1
2155 | dev: true
2156 |
2157 | /npm-run-path@5.1.0:
2158 | resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==}
2159 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
2160 | dependencies:
2161 | path-key: 4.0.0
2162 | dev: true
2163 |
2164 | /object-assign@4.1.1:
2165 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
2166 | engines: {node: '>=0.10.0'}
2167 |
2168 | /object-hash@3.0.0:
2169 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
2170 | engines: {node: '>= 6'}
2171 | dev: false
2172 |
2173 | /object-inspect@1.12.3:
2174 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
2175 | dev: true
2176 |
2177 | /object-keys@1.1.1:
2178 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
2179 | engines: {node: '>= 0.4'}
2180 | dev: true
2181 |
2182 | /object.assign@4.1.4:
2183 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
2184 | engines: {node: '>= 0.4'}
2185 | dependencies:
2186 | call-bind: 1.0.2
2187 | define-properties: 1.2.1
2188 | has-symbols: 1.0.3
2189 | object-keys: 1.1.1
2190 | dev: true
2191 |
2192 | /object.entries@1.1.7:
2193 | resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==}
2194 | engines: {node: '>= 0.4'}
2195 | dependencies:
2196 | call-bind: 1.0.2
2197 | define-properties: 1.2.1
2198 | es-abstract: 1.22.2
2199 | dev: true
2200 |
2201 | /object.fromentries@2.0.7:
2202 | resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==}
2203 | engines: {node: '>= 0.4'}
2204 | dependencies:
2205 | call-bind: 1.0.2
2206 | define-properties: 1.2.1
2207 | es-abstract: 1.22.2
2208 | dev: true
2209 |
2210 | /object.groupby@1.0.1:
2211 | resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==}
2212 | dependencies:
2213 | call-bind: 1.0.2
2214 | define-properties: 1.2.1
2215 | es-abstract: 1.22.2
2216 | get-intrinsic: 1.2.1
2217 | dev: true
2218 |
2219 | /object.hasown@1.1.3:
2220 | resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==}
2221 | dependencies:
2222 | define-properties: 1.2.1
2223 | es-abstract: 1.22.2
2224 | dev: true
2225 |
2226 | /object.values@1.1.7:
2227 | resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==}
2228 | engines: {node: '>= 0.4'}
2229 | dependencies:
2230 | call-bind: 1.0.2
2231 | define-properties: 1.2.1
2232 | es-abstract: 1.22.2
2233 | dev: true
2234 |
2235 | /once@1.4.0:
2236 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
2237 | dependencies:
2238 | wrappy: 1.0.2
2239 |
2240 | /onetime@5.1.2:
2241 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
2242 | engines: {node: '>=6'}
2243 | dependencies:
2244 | mimic-fn: 2.1.0
2245 | dev: true
2246 |
2247 | /onetime@6.0.0:
2248 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
2249 | engines: {node: '>=12'}
2250 | dependencies:
2251 | mimic-fn: 4.0.0
2252 | dev: true
2253 |
2254 | /open@9.1.0:
2255 | resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==}
2256 | engines: {node: '>=14.16'}
2257 | dependencies:
2258 | default-browser: 4.0.0
2259 | define-lazy-prop: 3.0.0
2260 | is-inside-container: 1.0.0
2261 | is-wsl: 2.2.0
2262 | dev: true
2263 |
2264 | /optionator@0.9.3:
2265 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
2266 | engines: {node: '>= 0.8.0'}
2267 | dependencies:
2268 | '@aashutoshrathi/word-wrap': 1.2.6
2269 | deep-is: 0.1.4
2270 | fast-levenshtein: 2.0.6
2271 | levn: 0.4.1
2272 | prelude-ls: 1.2.1
2273 | type-check: 0.4.0
2274 | dev: true
2275 |
2276 | /p-limit@3.1.0:
2277 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
2278 | engines: {node: '>=10'}
2279 | dependencies:
2280 | yocto-queue: 0.1.0
2281 | dev: true
2282 |
2283 | /p-locate@5.0.0:
2284 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
2285 | engines: {node: '>=10'}
2286 | dependencies:
2287 | p-limit: 3.1.0
2288 | dev: true
2289 |
2290 | /parent-module@1.0.1:
2291 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
2292 | engines: {node: '>=6'}
2293 | dependencies:
2294 | callsites: 3.1.0
2295 | dev: true
2296 |
2297 | /path-exists@4.0.0:
2298 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
2299 | engines: {node: '>=8'}
2300 | dev: true
2301 |
2302 | /path-is-absolute@1.0.1:
2303 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
2304 | engines: {node: '>=0.10.0'}
2305 |
2306 | /path-key@3.1.1:
2307 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
2308 | engines: {node: '>=8'}
2309 | dev: true
2310 |
2311 | /path-key@4.0.0:
2312 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
2313 | engines: {node: '>=12'}
2314 | dev: true
2315 |
2316 | /path-parse@1.0.7:
2317 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
2318 |
2319 | /path-type@4.0.0:
2320 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
2321 | engines: {node: '>=8'}
2322 | dev: true
2323 |
2324 | /picocolors@1.0.0:
2325 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
2326 |
2327 | /picomatch@2.3.1:
2328 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
2329 | engines: {node: '>=8.6'}
2330 |
2331 | /pify@2.3.0:
2332 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
2333 | engines: {node: '>=0.10.0'}
2334 | dev: false
2335 |
2336 | /pirates@4.0.6:
2337 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
2338 | engines: {node: '>= 6'}
2339 | dev: false
2340 |
2341 | /postcss-import@15.1.0(postcss@8.4.29):
2342 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
2343 | engines: {node: '>=14.0.0'}
2344 | peerDependencies:
2345 | postcss: ^8.0.0
2346 | dependencies:
2347 | postcss: 8.4.29
2348 | postcss-value-parser: 4.2.0
2349 | read-cache: 1.0.0
2350 | resolve: 1.22.6
2351 | dev: false
2352 |
2353 | /postcss-js@4.0.1(postcss@8.4.29):
2354 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
2355 | engines: {node: ^12 || ^14 || >= 16}
2356 | peerDependencies:
2357 | postcss: ^8.4.21
2358 | dependencies:
2359 | camelcase-css: 2.0.1
2360 | postcss: 8.4.29
2361 | dev: false
2362 |
2363 | /postcss-load-config@4.0.1(postcss@8.4.29):
2364 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==}
2365 | engines: {node: '>= 14'}
2366 | peerDependencies:
2367 | postcss: '>=8.0.9'
2368 | ts-node: '>=9.0.0'
2369 | peerDependenciesMeta:
2370 | postcss:
2371 | optional: true
2372 | ts-node:
2373 | optional: true
2374 | dependencies:
2375 | lilconfig: 2.1.0
2376 | postcss: 8.4.29
2377 | yaml: 2.3.2
2378 | dev: false
2379 |
2380 | /postcss-nested@6.0.1(postcss@8.4.29):
2381 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
2382 | engines: {node: '>=12.0'}
2383 | peerDependencies:
2384 | postcss: ^8.2.14
2385 | dependencies:
2386 | postcss: 8.4.29
2387 | postcss-selector-parser: 6.0.13
2388 | dev: false
2389 |
2390 | /postcss-selector-parser@6.0.13:
2391 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==}
2392 | engines: {node: '>=4'}
2393 | dependencies:
2394 | cssesc: 3.0.0
2395 | util-deprecate: 1.0.2
2396 | dev: false
2397 |
2398 | /postcss-value-parser@4.2.0:
2399 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
2400 | dev: false
2401 |
2402 | /postcss@8.4.14:
2403 | resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==}
2404 | engines: {node: ^10 || ^12 || >=14}
2405 | dependencies:
2406 | nanoid: 3.3.6
2407 | picocolors: 1.0.0
2408 | source-map-js: 1.0.2
2409 | dev: false
2410 |
2411 | /postcss@8.4.29:
2412 | resolution: {integrity: sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==}
2413 | engines: {node: ^10 || ^12 || >=14}
2414 | dependencies:
2415 | nanoid: 3.3.6
2416 | picocolors: 1.0.0
2417 | source-map-js: 1.0.2
2418 | dev: false
2419 |
2420 | /prelude-ls@1.2.1:
2421 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
2422 | engines: {node: '>= 0.8.0'}
2423 | dev: true
2424 |
2425 | /prettier-linter-helpers@1.0.0:
2426 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
2427 | engines: {node: '>=6.0.0'}
2428 | dependencies:
2429 | fast-diff: 1.3.0
2430 | dev: true
2431 |
2432 | /prettier-plugin-tailwindcss@0.5.4(prettier@3.0.3):
2433 | resolution: {integrity: sha512-QZzzB1bID6qPsKHTeA9qPo1APmmxfFrA5DD3LQ+vbTmAnY40eJI7t9Q1ocqel2EKMWNPLJqdTDWZj1hKYgqSgg==}
2434 | engines: {node: '>=14.21.3'}
2435 | peerDependencies:
2436 | '@ianvs/prettier-plugin-sort-imports': '*'
2437 | '@prettier/plugin-pug': '*'
2438 | '@shopify/prettier-plugin-liquid': '*'
2439 | '@shufo/prettier-plugin-blade': '*'
2440 | '@trivago/prettier-plugin-sort-imports': '*'
2441 | prettier: ^3.0
2442 | prettier-plugin-astro: '*'
2443 | prettier-plugin-css-order: '*'
2444 | prettier-plugin-import-sort: '*'
2445 | prettier-plugin-jsdoc: '*'
2446 | prettier-plugin-marko: '*'
2447 | prettier-plugin-organize-attributes: '*'
2448 | prettier-plugin-organize-imports: '*'
2449 | prettier-plugin-style-order: '*'
2450 | prettier-plugin-svelte: '*'
2451 | prettier-plugin-twig-melody: '*'
2452 | peerDependenciesMeta:
2453 | '@ianvs/prettier-plugin-sort-imports':
2454 | optional: true
2455 | '@prettier/plugin-pug':
2456 | optional: true
2457 | '@shopify/prettier-plugin-liquid':
2458 | optional: true
2459 | '@shufo/prettier-plugin-blade':
2460 | optional: true
2461 | '@trivago/prettier-plugin-sort-imports':
2462 | optional: true
2463 | prettier-plugin-astro:
2464 | optional: true
2465 | prettier-plugin-css-order:
2466 | optional: true
2467 | prettier-plugin-import-sort:
2468 | optional: true
2469 | prettier-plugin-jsdoc:
2470 | optional: true
2471 | prettier-plugin-marko:
2472 | optional: true
2473 | prettier-plugin-organize-attributes:
2474 | optional: true
2475 | prettier-plugin-organize-imports:
2476 | optional: true
2477 | prettier-plugin-style-order:
2478 | optional: true
2479 | prettier-plugin-svelte:
2480 | optional: true
2481 | prettier-plugin-twig-melody:
2482 | optional: true
2483 | dependencies:
2484 | prettier: 3.0.3
2485 | dev: true
2486 |
2487 | /prettier@3.0.3:
2488 | resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==}
2489 | engines: {node: '>=14'}
2490 | hasBin: true
2491 | dev: true
2492 |
2493 | /prop-types@15.8.1:
2494 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
2495 | dependencies:
2496 | loose-envify: 1.4.0
2497 | object-assign: 4.1.1
2498 | react-is: 16.13.1
2499 | dev: true
2500 |
2501 | /punycode@2.3.0:
2502 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
2503 | engines: {node: '>=6'}
2504 | dev: true
2505 |
2506 | /queue-microtask@1.2.3:
2507 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
2508 |
2509 | /react-dom@18.2.0(react@18.2.0):
2510 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
2511 | peerDependencies:
2512 | react: ^18.2.0
2513 | dependencies:
2514 | loose-envify: 1.4.0
2515 | react: 18.2.0
2516 | scheduler: 0.23.0
2517 | dev: false
2518 |
2519 | /react-is@16.13.1:
2520 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
2521 | dev: true
2522 |
2523 | /react@18.2.0:
2524 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
2525 | engines: {node: '>=0.10.0'}
2526 | dependencies:
2527 | loose-envify: 1.4.0
2528 | dev: false
2529 |
2530 | /read-cache@1.0.0:
2531 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
2532 | dependencies:
2533 | pify: 2.3.0
2534 | dev: false
2535 |
2536 | /readdirp@3.6.0:
2537 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
2538 | engines: {node: '>=8.10.0'}
2539 | dependencies:
2540 | picomatch: 2.3.1
2541 | dev: false
2542 |
2543 | /reflect.getprototypeof@1.0.4:
2544 | resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==}
2545 | engines: {node: '>= 0.4'}
2546 | dependencies:
2547 | call-bind: 1.0.2
2548 | define-properties: 1.2.1
2549 | es-abstract: 1.22.2
2550 | get-intrinsic: 1.2.1
2551 | globalthis: 1.0.3
2552 | which-builtin-type: 1.1.3
2553 | dev: true
2554 |
2555 | /regenerator-runtime@0.14.0:
2556 | resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
2557 | dev: true
2558 |
2559 | /regexp.prototype.flags@1.5.1:
2560 | resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==}
2561 | engines: {node: '>= 0.4'}
2562 | dependencies:
2563 | call-bind: 1.0.2
2564 | define-properties: 1.2.1
2565 | set-function-name: 2.0.1
2566 | dev: true
2567 |
2568 | /resolve-from@4.0.0:
2569 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
2570 | engines: {node: '>=4'}
2571 | dev: true
2572 |
2573 | /resolve-pkg-maps@1.0.0:
2574 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
2575 | dev: true
2576 |
2577 | /resolve@1.22.6:
2578 | resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==}
2579 | hasBin: true
2580 | dependencies:
2581 | is-core-module: 2.13.0
2582 | path-parse: 1.0.7
2583 | supports-preserve-symlinks-flag: 1.0.0
2584 |
2585 | /resolve@2.0.0-next.4:
2586 | resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==}
2587 | hasBin: true
2588 | dependencies:
2589 | is-core-module: 2.13.0
2590 | path-parse: 1.0.7
2591 | supports-preserve-symlinks-flag: 1.0.0
2592 | dev: true
2593 |
2594 | /reusify@1.0.4:
2595 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
2596 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
2597 |
2598 | /rimraf@3.0.2:
2599 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
2600 | hasBin: true
2601 | dependencies:
2602 | glob: 7.2.3
2603 | dev: true
2604 |
2605 | /run-applescript@5.0.0:
2606 | resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==}
2607 | engines: {node: '>=12'}
2608 | dependencies:
2609 | execa: 5.1.1
2610 | dev: true
2611 |
2612 | /run-parallel@1.2.0:
2613 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
2614 | dependencies:
2615 | queue-microtask: 1.2.3
2616 |
2617 | /safe-array-concat@1.0.1:
2618 | resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==}
2619 | engines: {node: '>=0.4'}
2620 | dependencies:
2621 | call-bind: 1.0.2
2622 | get-intrinsic: 1.2.1
2623 | has-symbols: 1.0.3
2624 | isarray: 2.0.5
2625 | dev: true
2626 |
2627 | /safe-regex-test@1.0.0:
2628 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
2629 | dependencies:
2630 | call-bind: 1.0.2
2631 | get-intrinsic: 1.2.1
2632 | is-regex: 1.1.4
2633 | dev: true
2634 |
2635 | /scheduler@0.23.0:
2636 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
2637 | dependencies:
2638 | loose-envify: 1.4.0
2639 | dev: false
2640 |
2641 | /semver@6.3.1:
2642 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
2643 | hasBin: true
2644 | dev: true
2645 |
2646 | /semver@7.5.4:
2647 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
2648 | engines: {node: '>=10'}
2649 | hasBin: true
2650 | dependencies:
2651 | lru-cache: 6.0.0
2652 | dev: true
2653 |
2654 | /set-function-name@2.0.1:
2655 | resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
2656 | engines: {node: '>= 0.4'}
2657 | dependencies:
2658 | define-data-property: 1.1.0
2659 | functions-have-names: 1.2.3
2660 | has-property-descriptors: 1.0.0
2661 | dev: true
2662 |
2663 | /shebang-command@2.0.0:
2664 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
2665 | engines: {node: '>=8'}
2666 | dependencies:
2667 | shebang-regex: 3.0.0
2668 | dev: true
2669 |
2670 | /shebang-regex@3.0.0:
2671 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
2672 | engines: {node: '>=8'}
2673 | dev: true
2674 |
2675 | /side-channel@1.0.4:
2676 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
2677 | dependencies:
2678 | call-bind: 1.0.2
2679 | get-intrinsic: 1.2.1
2680 | object-inspect: 1.12.3
2681 | dev: true
2682 |
2683 | /signal-exit@3.0.7:
2684 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
2685 | dev: true
2686 |
2687 | /slash@3.0.0:
2688 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
2689 | engines: {node: '>=8'}
2690 | dev: true
2691 |
2692 | /source-map-js@1.0.2:
2693 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
2694 | engines: {node: '>=0.10.0'}
2695 | dev: false
2696 |
2697 | /streamsearch@1.1.0:
2698 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
2699 | engines: {node: '>=10.0.0'}
2700 | dev: false
2701 |
2702 | /string.prototype.matchall@4.0.10:
2703 | resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==}
2704 | dependencies:
2705 | call-bind: 1.0.2
2706 | define-properties: 1.2.1
2707 | es-abstract: 1.22.2
2708 | get-intrinsic: 1.2.1
2709 | has-symbols: 1.0.3
2710 | internal-slot: 1.0.5
2711 | regexp.prototype.flags: 1.5.1
2712 | set-function-name: 2.0.1
2713 | side-channel: 1.0.4
2714 | dev: true
2715 |
2716 | /string.prototype.trim@1.2.8:
2717 | resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==}
2718 | engines: {node: '>= 0.4'}
2719 | dependencies:
2720 | call-bind: 1.0.2
2721 | define-properties: 1.2.1
2722 | es-abstract: 1.22.2
2723 | dev: true
2724 |
2725 | /string.prototype.trimend@1.0.7:
2726 | resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==}
2727 | dependencies:
2728 | call-bind: 1.0.2
2729 | define-properties: 1.2.1
2730 | es-abstract: 1.22.2
2731 | dev: true
2732 |
2733 | /string.prototype.trimstart@1.0.7:
2734 | resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
2735 | dependencies:
2736 | call-bind: 1.0.2
2737 | define-properties: 1.2.1
2738 | es-abstract: 1.22.2
2739 | dev: true
2740 |
2741 | /strip-ansi@6.0.1:
2742 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
2743 | engines: {node: '>=8'}
2744 | dependencies:
2745 | ansi-regex: 5.0.1
2746 | dev: true
2747 |
2748 | /strip-bom@3.0.0:
2749 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
2750 | engines: {node: '>=4'}
2751 | dev: true
2752 |
2753 | /strip-final-newline@2.0.0:
2754 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
2755 | engines: {node: '>=6'}
2756 | dev: true
2757 |
2758 | /strip-final-newline@3.0.0:
2759 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
2760 | engines: {node: '>=12'}
2761 | dev: true
2762 |
2763 | /strip-json-comments@3.1.1:
2764 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
2765 | engines: {node: '>=8'}
2766 | dev: true
2767 |
2768 | /styled-jsx@5.1.1(react@18.2.0):
2769 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
2770 | engines: {node: '>= 12.0.0'}
2771 | peerDependencies:
2772 | '@babel/core': '*'
2773 | babel-plugin-macros: '*'
2774 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
2775 | peerDependenciesMeta:
2776 | '@babel/core':
2777 | optional: true
2778 | babel-plugin-macros:
2779 | optional: true
2780 | dependencies:
2781 | client-only: 0.0.1
2782 | react: 18.2.0
2783 | dev: false
2784 |
2785 | /sucrase@3.34.0:
2786 | resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==}
2787 | engines: {node: '>=8'}
2788 | hasBin: true
2789 | dependencies:
2790 | '@jridgewell/gen-mapping': 0.3.3
2791 | commander: 4.1.1
2792 | glob: 7.1.6
2793 | lines-and-columns: 1.2.4
2794 | mz: 2.7.0
2795 | pirates: 4.0.6
2796 | ts-interface-checker: 0.1.13
2797 | dev: false
2798 |
2799 | /supports-color@7.2.0:
2800 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
2801 | engines: {node: '>=8'}
2802 | dependencies:
2803 | has-flag: 4.0.0
2804 | dev: true
2805 |
2806 | /supports-preserve-symlinks-flag@1.0.0:
2807 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
2808 | engines: {node: '>= 0.4'}
2809 |
2810 | /synckit@0.8.5:
2811 | resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==}
2812 | engines: {node: ^14.18.0 || >=16.0.0}
2813 | dependencies:
2814 | '@pkgr/utils': 2.4.2
2815 | tslib: 2.6.2
2816 | dev: true
2817 |
2818 | /tailwindcss@3.3.3:
2819 | resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==}
2820 | engines: {node: '>=14.0.0'}
2821 | hasBin: true
2822 | dependencies:
2823 | '@alloc/quick-lru': 5.2.0
2824 | arg: 5.0.2
2825 | chokidar: 3.5.3
2826 | didyoumean: 1.2.2
2827 | dlv: 1.1.3
2828 | fast-glob: 3.3.1
2829 | glob-parent: 6.0.2
2830 | is-glob: 4.0.3
2831 | jiti: 1.20.0
2832 | lilconfig: 2.1.0
2833 | micromatch: 4.0.5
2834 | normalize-path: 3.0.0
2835 | object-hash: 3.0.0
2836 | picocolors: 1.0.0
2837 | postcss: 8.4.29
2838 | postcss-import: 15.1.0(postcss@8.4.29)
2839 | postcss-js: 4.0.1(postcss@8.4.29)
2840 | postcss-load-config: 4.0.1(postcss@8.4.29)
2841 | postcss-nested: 6.0.1(postcss@8.4.29)
2842 | postcss-selector-parser: 6.0.13
2843 | resolve: 1.22.6
2844 | sucrase: 3.34.0
2845 | transitivePeerDependencies:
2846 | - ts-node
2847 | dev: false
2848 |
2849 | /tapable@2.2.1:
2850 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
2851 | engines: {node: '>=6'}
2852 | dev: true
2853 |
2854 | /text-table@0.2.0:
2855 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
2856 | dev: true
2857 |
2858 | /thenify-all@1.6.0:
2859 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
2860 | engines: {node: '>=0.8'}
2861 | dependencies:
2862 | thenify: 3.3.1
2863 | dev: false
2864 |
2865 | /thenify@3.3.1:
2866 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
2867 | dependencies:
2868 | any-promise: 1.3.0
2869 | dev: false
2870 |
2871 | /titleize@3.0.0:
2872 | resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==}
2873 | engines: {node: '>=12'}
2874 | dev: true
2875 |
2876 | /to-regex-range@5.0.1:
2877 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
2878 | engines: {node: '>=8.0'}
2879 | dependencies:
2880 | is-number: 7.0.0
2881 |
2882 | /ts-api-utils@1.0.3(typescript@5.2.2):
2883 | resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==}
2884 | engines: {node: '>=16.13.0'}
2885 | peerDependencies:
2886 | typescript: '>=4.2.0'
2887 | dependencies:
2888 | typescript: 5.2.2
2889 | dev: true
2890 |
2891 | /ts-interface-checker@0.1.13:
2892 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
2893 | dev: false
2894 |
2895 | /tsconfig-paths@3.14.2:
2896 | resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==}
2897 | dependencies:
2898 | '@types/json5': 0.0.29
2899 | json5: 1.0.2
2900 | minimist: 1.2.8
2901 | strip-bom: 3.0.0
2902 | dev: true
2903 |
2904 | /tslib@2.6.2:
2905 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
2906 |
2907 | /type-check@0.4.0:
2908 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
2909 | engines: {node: '>= 0.8.0'}
2910 | dependencies:
2911 | prelude-ls: 1.2.1
2912 | dev: true
2913 |
2914 | /type-fest@0.20.2:
2915 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
2916 | engines: {node: '>=10'}
2917 | dev: true
2918 |
2919 | /typed-array-buffer@1.0.0:
2920 | resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==}
2921 | engines: {node: '>= 0.4'}
2922 | dependencies:
2923 | call-bind: 1.0.2
2924 | get-intrinsic: 1.2.1
2925 | is-typed-array: 1.1.12
2926 | dev: true
2927 |
2928 | /typed-array-byte-length@1.0.0:
2929 | resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==}
2930 | engines: {node: '>= 0.4'}
2931 | dependencies:
2932 | call-bind: 1.0.2
2933 | for-each: 0.3.3
2934 | has-proto: 1.0.1
2935 | is-typed-array: 1.1.12
2936 | dev: true
2937 |
2938 | /typed-array-byte-offset@1.0.0:
2939 | resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==}
2940 | engines: {node: '>= 0.4'}
2941 | dependencies:
2942 | available-typed-arrays: 1.0.5
2943 | call-bind: 1.0.2
2944 | for-each: 0.3.3
2945 | has-proto: 1.0.1
2946 | is-typed-array: 1.1.12
2947 | dev: true
2948 |
2949 | /typed-array-length@1.0.4:
2950 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
2951 | dependencies:
2952 | call-bind: 1.0.2
2953 | for-each: 0.3.3
2954 | is-typed-array: 1.1.12
2955 | dev: true
2956 |
2957 | /typescript@5.2.2:
2958 | resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==}
2959 | engines: {node: '>=14.17'}
2960 | hasBin: true
2961 |
2962 | /unbox-primitive@1.0.2:
2963 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
2964 | dependencies:
2965 | call-bind: 1.0.2
2966 | has-bigints: 1.0.2
2967 | has-symbols: 1.0.3
2968 | which-boxed-primitive: 1.0.2
2969 | dev: true
2970 |
2971 | /untildify@4.0.0:
2972 | resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
2973 | engines: {node: '>=8'}
2974 | dev: true
2975 |
2976 | /update-browserslist-db@1.0.11(browserslist@4.21.10):
2977 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
2978 | hasBin: true
2979 | peerDependencies:
2980 | browserslist: '>= 4.21.0'
2981 | dependencies:
2982 | browserslist: 4.21.10
2983 | escalade: 3.1.1
2984 | picocolors: 1.0.0
2985 | dev: false
2986 |
2987 | /uri-js@4.4.1:
2988 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
2989 | dependencies:
2990 | punycode: 2.3.0
2991 | dev: true
2992 |
2993 | /util-deprecate@1.0.2:
2994 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
2995 | dev: false
2996 |
2997 | /watchpack@2.4.0:
2998 | resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
2999 | engines: {node: '>=10.13.0'}
3000 | dependencies:
3001 | glob-to-regexp: 0.4.1
3002 | graceful-fs: 4.2.11
3003 | dev: false
3004 |
3005 | /which-boxed-primitive@1.0.2:
3006 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
3007 | dependencies:
3008 | is-bigint: 1.0.4
3009 | is-boolean-object: 1.1.2
3010 | is-number-object: 1.0.7
3011 | is-string: 1.0.7
3012 | is-symbol: 1.0.4
3013 | dev: true
3014 |
3015 | /which-builtin-type@1.1.3:
3016 | resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==}
3017 | engines: {node: '>= 0.4'}
3018 | dependencies:
3019 | function.prototype.name: 1.1.6
3020 | has-tostringtag: 1.0.0
3021 | is-async-function: 2.0.0
3022 | is-date-object: 1.0.5
3023 | is-finalizationregistry: 1.0.2
3024 | is-generator-function: 1.0.10
3025 | is-regex: 1.1.4
3026 | is-weakref: 1.0.2
3027 | isarray: 2.0.5
3028 | which-boxed-primitive: 1.0.2
3029 | which-collection: 1.0.1
3030 | which-typed-array: 1.1.11
3031 | dev: true
3032 |
3033 | /which-collection@1.0.1:
3034 | resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==}
3035 | dependencies:
3036 | is-map: 2.0.2
3037 | is-set: 2.0.2
3038 | is-weakmap: 2.0.1
3039 | is-weakset: 2.0.2
3040 | dev: true
3041 |
3042 | /which-typed-array@1.1.11:
3043 | resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==}
3044 | engines: {node: '>= 0.4'}
3045 | dependencies:
3046 | available-typed-arrays: 1.0.5
3047 | call-bind: 1.0.2
3048 | for-each: 0.3.3
3049 | gopd: 1.0.1
3050 | has-tostringtag: 1.0.0
3051 | dev: true
3052 |
3053 | /which@2.0.2:
3054 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
3055 | engines: {node: '>= 8'}
3056 | hasBin: true
3057 | dependencies:
3058 | isexe: 2.0.0
3059 | dev: true
3060 |
3061 | /wrappy@1.0.2:
3062 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
3063 |
3064 | /yallist@4.0.0:
3065 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
3066 | dev: true
3067 |
3068 | /yaml@2.3.2:
3069 | resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==}
3070 | engines: {node: '>= 14'}
3071 | dev: false
3072 |
3073 | /yocto-queue@0.1.0:
3074 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
3075 | engines: {node: '>=10'}
3076 | dev: true
3077 |
3078 | /zod@3.21.4:
3079 | resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==}
3080 | dev: false
3081 |
--------------------------------------------------------------------------------