1
mirror of https://github.com/jakejarvis/jarv.is.git synced 2025-04-26 09:25:22 -04:00

trim some unnecessary dependencies

This commit is contained in:
Jake Jarvis 2025-04-07 12:11:04 -04:00
parent 80793c7330
commit 53d6f57699
Signed by: jake
SSH Key Fingerprint: SHA256:nCkvAjYA6XaSPUqc4TfbBQTpzr8Xj7ritg/sGInCdkc
19 changed files with 256 additions and 300 deletions

View File

@ -35,4 +35,4 @@ npx @jakejarvis/cli
## License ## License
MIT © [Jake Jarvis](https://jarv.is/), [Sindre Sorhus](https://sindresorhus.com/) MIT © [Jake Jarvis](https://jarv.is/), [Sindre Sorhus](https://sindresorhus.com/)

View File

@ -15,13 +15,17 @@ export const metadata: Metadata = {
const Page = () => { const Page = () => {
return ( return (
<div style={{ textAlign: "center" }}> <>
<Video src={notFoundVideo} autoPlay style={{ maxWidth: 480, height: "auto" }} /> <Video src={notFoundVideo} autoPlay style={{ maxWidth: 480, aspectRatio: "16/11" }} />
<h1 style={{ margin: "0.6em auto 0.2em" }}>Page Not Found 😢</h1> <div style={{ textAlign: "center", marginTop: "1.5em" }}>
<h1 style={{ margin: "0.5em 0", fontSize: "2.2em", fontWeight: 500, lineHeight: 1 }}>Page Not Found</h1>
<Link href="/">Go home?</Link> <Link href="/" style={{ fontSize: "1.2em", fontWeight: 500 }}>
</div> Go home?
</Link>
</div>
</>
); );
}; };

View File

@ -1,7 +1,7 @@
import { connection } from "next/server"; import { connection } from "next/server";
import commaNumber from "comma-number";
import CountUp from "../../../components/CountUp"; import CountUp from "../../../components/CountUp";
import redis from "../../../lib/helpers/redis"; import redis from "../../../lib/helpers/redis";
import { siteLocale } from "../../../lib/config";
const HitCounter = async ({ slug }: { slug: string }) => { const HitCounter = async ({ slug }: { slug: string }) => {
await connection(); await connection();
@ -16,8 +16,8 @@ const HitCounter = async ({ slug }: { slug: string }) => {
// we have data! // we have data!
return ( return (
<span title={`${commaNumber(hits)} ${hits === 1 ? "view" : "views"}`}> <span title={`${Intl.NumberFormat(siteLocale || "en-US").format(hits)} ${hits === 1 ? "view" : "views"}`}>
<CountUp start={0} end={hits} delay={0} duration={2.5} /> <CountUp start={0} end={hits} delay={0} duration={1.5} />
</span> </span>
); );
} catch (error) { } catch (error) {

View File

@ -1,12 +1,12 @@
import { notFound } from "next/navigation";
import { graphql } from "@octokit/graphql"; import { graphql } from "@octokit/graphql";
import commaNumber from "comma-number";
import { GitForkIcon, StarIcon } from "lucide-react"; import { GitForkIcon, StarIcon } from "lucide-react";
import PageTitle from "../../components/PageTitle"; import PageTitle from "../../components/PageTitle";
import Link from "../../components/Link"; import Link from "../../components/Link";
import RelativeTime from "../../components/RelativeTime"; import RelativeTime from "../../components/RelativeTime";
import { addMetadata } from "../../lib/helpers/metadata"; import { addMetadata } from "../../lib/helpers/metadata";
import * as config from "../../lib/config"; import * as config from "../../lib/config";
import type { User, Repository } from "@octokit/graphql-schema"; import type { User } from "@octokit/graphql-schema";
import styles from "./page.module.css"; import styles from "./page.module.css";
@ -18,25 +18,13 @@ export const metadata = addMetadata({
}, },
}); });
type Project = { const getRepos = async () => {
name: string;
url: string;
description?: string;
language?: {
name: string;
color?: string;
};
stars?: number;
forks?: number;
updatedAt: string;
};
const getRepos = async (): Promise<Project[] | null> => {
// don't fail the entire site build if the required API key for this page is missing // don't fail the entire site build if the required API key for this page is missing
if (!process.env.GITHUB_TOKEN) { if (!process.env.GITHUB_TOKEN) {
console.warn(`ERROR: I can't fetch any GitHub projects without "GITHUB_TOKEN" set! Skipping for now...`); console.warn(`ERROR: I can't fetch any GitHub projects without "GITHUB_TOKEN" set! Disabling projects page.`);
return null; // just return a 404 since this page would be blank anyways
notFound();
} }
// https://docs.github.com/en/graphql/reference/objects#repository // https://docs.github.com/en/graphql/reference/objects#repository
@ -95,19 +83,7 @@ const getRepos = async (): Promise<Project[] | null> => {
} }
); );
const results = user.repositories.edges as Array<{ node: Repository }>; return user.repositories.edges?.map((edge) => edge!.node);
const repos = results.map<Project>(({ node: repo }) => ({
name: repo.name,
url: repo.url,
description: repo.description as string,
updatedAt: repo.pushedAt,
stars: repo.stargazerCount,
forks: repo.forkCount,
language: repo.primaryLanguage as Project["language"],
}));
return repos;
}; };
const Page = async () => { const Page = async () => {
@ -119,50 +95,50 @@ const Page = async () => {
<div className={styles.grid}> <div className={styles.grid}>
{repos?.map((repo) => ( {repos?.map((repo) => (
<div key={repo.name} className={styles.card}> <div key={repo!.name} className={styles.card}>
<Link href={repo.url} className={styles.name}> <Link href={repo!.url} className={styles.name}>
{repo.name} {repo!.name}
</Link> </Link>
{repo.description && <p className={styles.description}>{repo.description}</p>} {repo!.description && <p className={styles.description}>{repo!.description}</p>}
<div className={styles.meta}> <div className={styles.meta}>
{repo.language && ( {repo!.primaryLanguage && (
<div className={styles.metaItem}> <div className={styles.metaItem}>
{repo.language.color && ( {repo!.primaryLanguage.color && (
<span <span
className={styles.metaIcon} className={styles.metaIcon}
style={{ backgroundColor: repo.language.color, borderRadius: "50%" }} style={{ backgroundColor: repo!.primaryLanguage.color, borderRadius: "50%" }}
/> />
)} )}
<span>{repo.language.name}</span> <span>{repo!.primaryLanguage.name}</span>
</div> </div>
)} )}
{repo.stars && repo.stars > 0 && ( {repo!.stargazerCount > 0 && (
<div className={styles.metaItem}> <div className={styles.metaItem}>
<Link <Link
href={`${repo.url}/stargazers`} href={`${repo!.url}/stargazers`}
title={`${commaNumber(repo.stars)} ${repo.stars === 1 ? "star" : "stars"}`} title={`${Intl.NumberFormat(config.siteLocale || "en-US").format(repo!.stargazerCount)} ${repo!.stargazerCount === 1 ? "star" : "stars"}`}
plain plain
className={styles.metaLink} className={styles.metaLink}
> >
<StarIcon size="1.25em" className={styles.metaIcon} /> <StarIcon size="1.25em" className={styles.metaIcon} />
<span>{commaNumber(repo.stars)}</span> <span>{Intl.NumberFormat(config.siteLocale || "en-US").format(repo!.stargazerCount)}</span>
</Link> </Link>
</div> </div>
)} )}
{repo.forks && repo.forks > 0 && ( {repo!.forkCount > 0 && (
<div className={styles.metaItem}> <div className={styles.metaItem}>
<Link <Link
href={`${repo.url}/network/members`} href={`${repo!.url}/network/members`}
title={`${commaNumber(repo.forks)} ${repo.forks === 1 ? "fork" : "forks"}`} title={`${Intl.NumberFormat(config.siteLocale || "en-US").format(repo!.forkCount)} ${repo!.forkCount === 1 ? "fork" : "forks"}`}
plain plain
className={styles.metaLink} className={styles.metaLink}
> >
<GitForkIcon size="1.25em" className={styles.metaIcon} /> <GitForkIcon size="1.25em" className={styles.metaIcon} />
<span>{commaNumber(repo.forks)}</span> <span>{Intl.NumberFormat(config.siteLocale || "en-US").format(repo!.forkCount)}</span>
</Link> </Link>
</div> </div>
)} )}
@ -177,7 +153,7 @@ const Page = async () => {
}} }}
/> />
<span> <span>
Updated <RelativeTime date={repo.updatedAt} /> Updated <RelativeTime date={repo!.pushedAt} />
</span> </span>
</div> </div>
</div> </div>

View File

@ -15,15 +15,14 @@ const Header = ({ className, ...rest }: HeaderProps) => {
return ( return (
<header className={clsx(styles.header, className)} {...rest}> <header className={clsx(styles.header, className)} {...rest}>
<nav className={styles.nav}> <nav className={styles.nav}>
<Link href="/" rel="author" title={config.authorName} plain className={styles.homeLink}> <Link href="/" rel="author" aria-label={config.authorName} plain className={styles.homeLink}>
<Image <Image
src={selfieJpg} src={selfieJpg}
alt={`Photo of ${config.authorName}`} alt={`Photo of ${config.authorName}`}
className={styles.homeImage} className={styles.homeImage}
width={70} width={70}
height={70} height={70}
quality={60} quality={50}
placeholder="empty"
priority priority
/> />
<span className={styles.name}>{config.authorName}</span> <span className={styles.name}>{config.authorName}</span>

View File

@ -19,7 +19,7 @@ const Heading = ({ level, id, divider, className, children, ...rest }: HeadingPr
{/* add anchor link to H2s and H3s. ID is either provided or automatically generated by rehype-slug. */} {/* add anchor link to H2s and H3s. ID is either provided or automatically generated by rehype-slug. */}
{id && (level === 2 || level === 3) && ( {id && (level === 2 || level === 3) && (
<HeadingAnchor id={id} title={innerText(children)} className={styles.anchor} /> <HeadingAnchor id={id} title={`Jump to "${innerText(children)}"`} className={styles.anchor} />
)} )}
</HWild> </HWild>
); );

View File

@ -2,14 +2,13 @@ import Link from "../Link";
import { LinkIcon } from "lucide-react"; import { LinkIcon } from "lucide-react";
import type { ComponentPropsWithoutRef } from "react"; import type { ComponentPropsWithoutRef } from "react";
export type HeadingAnchorProps = Omit<ComponentPropsWithoutRef<typeof Link>, "href"> & { export type HeadingAnchorProps = Omit<ComponentPropsWithoutRef<typeof Link>, "href" | "id"> & {
id: string; id: string;
title: string;
}; };
const HeadingAnchor = ({ id, title, ...rest }: HeadingAnchorProps) => { const HeadingAnchor = ({ id, ...rest }: HeadingAnchorProps) => {
return ( return (
<Link href={`#${id}`} title={`Jump to "${title}"`} plain {...rest}> <Link href={`#${id}`} plain {...rest}>
<LinkIcon size="0.8em" /> <LinkIcon size="0.8em" />
</Link> </Link>
); );

View File

@ -1,8 +1,10 @@
.link { .link {
color: var(--colors-link); color: var(--colors-link);
text-decoration: none; text-decoration: none;
}
/* fancy underline */ /* fancy underline effect on hover */
.link:not(.plain) {
background-image: linear-gradient(var(--colors-link-underline), var(--colors-link-underline)); background-image: linear-gradient(var(--colors-link-underline), var(--colors-link-underline));
background-position: 0% 100%; background-position: 0% 100%;
background-repeat: no-repeat; background-repeat: no-repeat;
@ -11,18 +13,13 @@
padding-bottom: 3px; padding-bottom: 3px;
} }
.link:hover, .link:not(.plain):hover,
.link:focus-visible { .link:not(.plain):focus-visible {
background-size: 100% 2px; background-size: 100% 2px;
} }
.link.plain {
background: none;
transition: none;
}
@media (prefers-reduced-motion: reduce) { @media (prefers-reduced-motion: reduce) {
.link { .link:not(.plain) {
transition: none !important; transition: none !important;
} }
} }

View File

@ -19,7 +19,12 @@ const Link = ({ href, rel, target, prefetch = false, plain, className, ...rest }
prefetch={prefetch} prefetch={prefetch}
target={target || (isExternal ? "_blank" : undefined)} target={target || (isExternal ? "_blank" : undefined)}
rel={`${rel ? `${rel} ` : ""}${target === "_blank" || isExternal ? "noopener noreferrer" : ""}` || undefined} rel={`${rel ? `${rel} ` : ""}${target === "_blank" || isExternal ? "noopener noreferrer" : ""}` || undefined}
className={clsx(styles.link, plain && styles.plain, className)} className={clsx(
styles.link,
// eslint-disable-next-line css-modules/no-undef-class
plain && styles.plain,
className
)}
{...rest} {...rest}
/> />
); );

View File

@ -1,7 +1,7 @@
.link { .link {
display: inline-block; display: inline-block;
padding: 0.6em;
color: var(--colors-medium-dark) !important; color: var(--colors-medium-dark) !important;
padding: 0.6em !important;
} }
/* indicate active page/section */ /* indicate active page/section */

View File

@ -27,10 +27,9 @@ const MenuItem = ({ text, href, icon, current, className, ...rest }: MenuItemPro
return ( return (
<Link <Link
href={href} href={href}
className={clsx(styles.link, current && styles.current, className)}
title={text}
plain
aria-label={text} aria-label={text}
plain
className={clsx(styles.link, current && styles.current, className)}
{...rest} {...rest}
> >
{item} {item}

View File

@ -7,7 +7,7 @@ export type VideoProps = Omit<Partial<ComponentPropsWithoutRef<"video">>, "src">
src: string | string[] | undefined; src: string | string[] | undefined;
}; };
const Video = ({ src, autoPlay, className, ...rest }: VideoProps) => { const Video = ({ src, autoPlay, className, children, ...rest }: VideoProps) => {
return ( return (
<video <video
{...(typeof src === "string" ? { src } : {})} {...(typeof src === "string" ? { src } : {})}
@ -37,6 +37,8 @@ const Video = ({ src, autoPlay, className, ...rest }: VideoProps) => {
return <source key={file} src={file} type={`video/${extension}`} />; return <source key={file} src={file} type={`video/${extension}`} />;
} }
})} })}
{children}
</video> </video>
); );
}; };

View File

@ -3,6 +3,7 @@ import { Feed } from "feed";
import { getFrontMatter, getContent } from "./posts"; import { getFrontMatter, getContent } from "./posts";
import * as config from "../config"; import * as config from "../config";
import { BASE_URL } from "../config/constants"; import { BASE_URL } from "../config/constants";
import type { Item as FeedItem } from "feed";
import ogImage from "../../app/opengraph-image.jpg"; import ogImage from "../../app/opengraph-image.jpg";
@ -30,10 +31,10 @@ export const buildFeed = cache(async (): Promise<Feed> => {
}, },
}); });
// add posts separately using their frontmatter // parse posts into feed items
const posts = await getFrontMatter(); const frontmatter = await getFrontMatter();
for (const post of posts) { const posts: FeedItem[] = await Promise.all(
feed.addItem({ frontmatter.map(async (post) => ({
guid: post.permalink, guid: post.permalink,
link: post.permalink, link: post.permalink,
title: post.title, title: post.title,
@ -49,8 +50,16 @@ export const buildFeed = cache(async (): Promise<Feed> => {
${await getContent(post.slug)} ${await getContent(post.slug)}
<p><a href="${post.permalink}"><strong>Continue reading...</strong></a></p> <p><a href="${post.permalink}"><strong>Continue reading...</strong></a></p>
`.trim(), `.trim(),
}); }))
} );
// sort posts reverse chronologically in case the promises resolved out of order
posts.sort((post1, post2) => new Date(post2.date).getTime() - new Date(post1.date).getTime());
// officially add each post to the feed
posts.forEach((post) => {
feed.addItem(post);
});
return feed; return feed;
}); });

View File

@ -1,8 +1,8 @@
import { cache } from "react"; import { cache } from "react";
import path from "path"; import path from "path";
import fs from "fs/promises";
import glob from "fast-glob"; import glob from "fast-glob";
import { unified } from "unified"; import { unified } from "unified";
import { read } from "to-vfile";
import { remarkHtml, remarkParse, remarkSmartypants, remarkFrontmatter } from "./remark-rehype-plugins"; import { remarkHtml, remarkParse, remarkSmartypants, remarkFrontmatter } from "./remark-rehype-plugins";
import { decode } from "html-entities"; import { decode } from "html-entities";
import { BASE_URL, POSTS_DIR } from "../config/constants"; import { BASE_URL, POSTS_DIR } from "../config/constants";
@ -130,7 +130,7 @@ export const getContent = cache(async (slug: string): Promise<string | undefined
], ],
}, },
}) })
.process(await read(path.resolve(process.cwd(), `${POSTS_DIR}/${slug}/index.mdx`))); .process(await fs.readFile(path.resolve(process.cwd(), `${POSTS_DIR}/${slug}/index.mdx`)));
// convert the parsed content to a string with "safe" HTML // convert the parsed content to a string with "safe" HTML
return content.toString().replaceAll("<p></p>", "").trim(); return content.toString().replaceAll("<p></p>", "").trim();

View File

@ -1,4 +1,4 @@
/* eslint-disable @typescript-eslint/no-require-imports */ /* eslint-disable @typescript-eslint/no-require-imports, import/no-anonymous-default-export */
import path from "path"; import path from "path";
import { visit } from "unist-util-visit"; import { visit } from "unist-util-visit";
@ -219,6 +219,5 @@ const nextPlugins: Array<
}), }),
]; ];
// eslint-disable-next-line import/no-anonymous-default-export
export default (): NextConfig => export default (): NextConfig =>
nextPlugins.reduce((acc, plugin) => (Array.isArray(plugin) ? plugin[0](acc, plugin[1]) : plugin(acc)), nextConfig); nextPlugins.reduce((acc, plugin) => (Array.isArray(plugin) ? plugin[0](acc, plugin[1]) : plugin(acc)), nextConfig);

View File

@ -23,13 +23,12 @@
"@giscus/react": "^3.1.0", "@giscus/react": "^3.1.0",
"@mdx-js/loader": "^3.1.0", "@mdx-js/loader": "^3.1.0",
"@mdx-js/react": "^3.1.0", "@mdx-js/react": "^3.1.0",
"@next/bundle-analyzer": "15.3.0-canary.39", "@next/bundle-analyzer": "15.3.0-canary.41",
"@next/mdx": "15.3.0-canary.39", "@next/mdx": "15.3.0-canary.41",
"@octokit/graphql": "^8.2.1", "@octokit/graphql": "^8.2.1",
"@octokit/graphql-schema": "^15.26.0", "@octokit/graphql-schema": "^15.26.0",
"@upstash/redis": "^1.34.6", "@upstash/redis": "^1.34.7",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"comma-number": "^2.1.0",
"copy-to-clipboard": "^3.3.3", "copy-to-clipboard": "^3.3.3",
"date-fns": "^4.1.0", "date-fns": "^4.1.0",
"fast-glob": "^3.3.3", "fast-glob": "^3.3.3",
@ -38,7 +37,7 @@
"html-entities": "^2.6.0", "html-entities": "^2.6.0",
"lucide-react": "0.487.0", "lucide-react": "0.487.0",
"modern-normalize": "^3.0.1", "modern-normalize": "^3.0.1",
"next": "15.3.0-canary.39", "next": "15.3.0-canary.41",
"polished": "^4.3.1", "polished": "^4.3.1",
"prop-types": "^15.8.1", "prop-types": "^15.8.1",
"react": "19.1.0", "react": "19.1.0",
@ -64,7 +63,6 @@
"remark-smartypants": "^3.0.2", "remark-smartypants": "^3.0.2",
"resend": "^4.2.0", "resend": "^4.2.0",
"shiki": "^3.2.1", "shiki": "^3.2.1",
"to-vfile": "^8.0.0",
"unified": "^11.0.5", "unified": "^11.0.5",
"unist-util-visit": "^5.0.0", "unist-util-visit": "^5.0.0",
"valibot": "^1.0.0" "valibot": "^1.0.0"
@ -73,17 +71,16 @@
"@eslint/eslintrc": "^3.3.1", "@eslint/eslintrc": "^3.3.1",
"@eslint/js": "^9.24.0", "@eslint/js": "^9.24.0",
"@jakejarvis/eslint-config": "^4.0.7", "@jakejarvis/eslint-config": "^4.0.7",
"@types/comma-number": "^2.1.2",
"@types/mdx": "^2.0.13", "@types/mdx": "^2.0.13",
"@types/node": "^22.14.0", "@types/node": "^22.14.0",
"@types/prop-types": "^15.7.14", "@types/prop-types": "^15.7.14",
"@types/react": "^19.1.0", "@types/react": "^19.1.0",
"@types/react-dom": "^19.1.1", "@types/react-dom": "^19.1.1",
"@types/react-is": "^19.0.0", "@types/react-is": "^19.0.0",
"babel-plugin-react-compiler": "19.0.0-beta-e993439-20250328", "babel-plugin-react-compiler": "19.0.0-beta-e993439-20250405",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"eslint": "^9.24.0", "eslint": "^9.24.0",
"eslint-config-next": "15.3.0-canary.39", "eslint-config-next": "15.3.0-canary.41",
"eslint-config-prettier": "^10.1.1", "eslint-config-prettier": "^10.1.1",
"eslint-plugin-css-modules": "^2.12.0", "eslint-plugin-css-modules": "^2.12.0",
"eslint-plugin-import": "^2.31.0", "eslint-plugin-import": "^2.31.0",
@ -91,7 +88,7 @@
"eslint-plugin-mdx": "^3.4.0", "eslint-plugin-mdx": "^3.4.0",
"eslint-plugin-prettier": "^5.2.6", "eslint-plugin-prettier": "^5.2.6",
"eslint-plugin-react": "^7.37.5", "eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-compiler": "19.0.0-beta-e993439-20250328", "eslint-plugin-react-compiler": "19.0.0-beta-e993439-20250405",
"eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-hooks": "^5.2.0",
"husky": "^9.1.7", "husky": "^9.1.7",
"lint-staged": "^15.5.0", "lint-staged": "^15.5.0",

364
pnpm-lock.yaml generated
View File

@ -27,11 +27,11 @@ importers:
specifier: ^3.1.0 specifier: ^3.1.0
version: 3.1.0(@types/react@19.1.0)(react@19.1.0) version: 3.1.0(@types/react@19.1.0)(react@19.1.0)
'@next/bundle-analyzer': '@next/bundle-analyzer':
specifier: 15.3.0-canary.39 specifier: 15.3.0-canary.41
version: 15.3.0-canary.39 version: 15.3.0-canary.41
'@next/mdx': '@next/mdx':
specifier: 15.3.0-canary.39 specifier: 15.3.0-canary.41
version: 15.3.0-canary.39(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.1.0)(react@19.1.0)) version: 15.3.0-canary.41(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.1.0)(react@19.1.0))
'@octokit/graphql': '@octokit/graphql':
specifier: ^8.2.1 specifier: ^8.2.1
version: 8.2.1 version: 8.2.1
@ -39,14 +39,11 @@ importers:
specifier: ^15.26.0 specifier: ^15.26.0
version: 15.26.0 version: 15.26.0
'@upstash/redis': '@upstash/redis':
specifier: ^1.34.6 specifier: ^1.34.7
version: 1.34.6 version: 1.34.7
clsx: clsx:
specifier: ^2.1.1 specifier: ^2.1.1
version: 2.1.1 version: 2.1.1
comma-number:
specifier: ^2.1.0
version: 2.1.0
copy-to-clipboard: copy-to-clipboard:
specifier: ^3.3.3 specifier: ^3.3.3
version: 3.3.3 version: 3.3.3
@ -61,7 +58,7 @@ importers:
version: 4.2.2 version: 4.2.2
geist: geist:
specifier: ^1.3.1 specifier: ^1.3.1
version: 1.3.1(next@15.3.0-canary.39(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250328)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) version: 1.3.1(next@15.3.0-canary.41(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))
html-entities: html-entities:
specifier: ^2.6.0 specifier: ^2.6.0
version: 2.6.0 version: 2.6.0
@ -72,8 +69,8 @@ importers:
specifier: ^3.0.1 specifier: ^3.0.1
version: 3.0.1 version: 3.0.1
next: next:
specifier: 15.3.0-canary.39 specifier: 15.3.0-canary.41
version: 15.3.0-canary.39(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250328)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) version: 15.3.0-canary.41(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
polished: polished:
specifier: ^4.3.1 specifier: ^4.3.1
version: 4.3.1 version: 4.3.1
@ -149,9 +146,6 @@ importers:
shiki: shiki:
specifier: ^3.2.1 specifier: ^3.2.1
version: 3.2.1 version: 3.2.1
to-vfile:
specifier: ^8.0.0
version: 8.0.0
unified: unified:
specifier: ^11.0.5 specifier: ^11.0.5
version: 11.0.5 version: 11.0.5
@ -171,9 +165,6 @@ importers:
'@jakejarvis/eslint-config': '@jakejarvis/eslint-config':
specifier: ^4.0.7 specifier: ^4.0.7
version: 4.0.7(eslint@9.24.0) version: 4.0.7(eslint@9.24.0)
'@types/comma-number':
specifier: ^2.1.2
version: 2.1.2
'@types/mdx': '@types/mdx':
specifier: ^2.0.13 specifier: ^2.0.13
version: 2.0.13 version: 2.0.13
@ -193,8 +184,8 @@ importers:
specifier: ^19.0.0 specifier: ^19.0.0
version: 19.0.0 version: 19.0.0
babel-plugin-react-compiler: babel-plugin-react-compiler:
specifier: 19.0.0-beta-e993439-20250328 specifier: 19.0.0-beta-e993439-20250405
version: 19.0.0-beta-e993439-20250328 version: 19.0.0-beta-e993439-20250405
cross-env: cross-env:
specifier: ^7.0.3 specifier: ^7.0.3
version: 7.0.3 version: 7.0.3
@ -202,8 +193,8 @@ importers:
specifier: ^9.24.0 specifier: ^9.24.0
version: 9.24.0 version: 9.24.0
eslint-config-next: eslint-config-next:
specifier: 15.3.0-canary.39 specifier: 15.3.0-canary.41
version: 15.3.0-canary.39(eslint@9.24.0)(typescript@5.8.3) version: 15.3.0-canary.41(eslint@9.24.0)(typescript@5.8.3)
eslint-config-prettier: eslint-config-prettier:
specifier: ^10.1.1 specifier: ^10.1.1
version: 10.1.1(eslint@9.24.0) version: 10.1.1(eslint@9.24.0)
@ -226,8 +217,8 @@ importers:
specifier: ^7.37.5 specifier: ^7.37.5
version: 7.37.5(eslint@9.24.0) version: 7.37.5(eslint@9.24.0)
eslint-plugin-react-compiler: eslint-plugin-react-compiler:
specifier: 19.0.0-beta-e993439-20250328 specifier: 19.0.0-beta-e993439-20250405
version: 19.0.0-beta-e993439-20250328(eslint@9.24.0) version: 19.0.0-beta-e993439-20250405(eslint@9.24.0)
eslint-plugin-react-hooks: eslint-plugin-react-hooks:
specifier: ^5.2.0 specifier: ^5.2.0
version: 5.2.0(eslint@9.24.0) version: 5.2.0(eslint@9.24.0)
@ -762,17 +753,17 @@ packages:
'@napi-rs/wasm-runtime@0.2.8': '@napi-rs/wasm-runtime@0.2.8':
resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==} resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==}
'@next/bundle-analyzer@15.3.0-canary.39': '@next/bundle-analyzer@15.3.0-canary.41':
resolution: {integrity: sha512-3pH7Eq3+I/lA7IHpZW0vdrXyi4RgPADtiMh4R6FdJnG39S2BXVN6h2ZnXLpY31vRLxffoTM53gMmuhSvLKb1rQ==} resolution: {integrity: sha512-fdxfhf38ShtOI8Wz4h77HwA4HxvcblVrXM1/VzkexE6IZCBalB2rWZsldS30TAGCkXGCZAThHkvTTPuvvbqDcw==}
'@next/env@15.3.0-canary.39': '@next/env@15.3.0-canary.41':
resolution: {integrity: sha512-yc9hhRqKX9K5oYtkUj9KiTr3pf5jVjvN9NWKFTVlFrNUHu+herrj4G4y7ptl0dQl3W0mliiKG1tf5GuTfvOccQ==} resolution: {integrity: sha512-M+gqSE/plVT1JEsgyyrstLLWtF1PY0CP80dRxP4qRd7LvI8qJYTLJrFuLojt/WQTdTaCHOOg0F1cmZld+QuT9A==}
'@next/eslint-plugin-next@15.3.0-canary.39': '@next/eslint-plugin-next@15.3.0-canary.41':
resolution: {integrity: sha512-lvHUu8y3a+JaeV61AJi1VKWZ43xT704RbdQhWk+1oYe3X9ZlUHkVc1oxWYZS4DQxjiuuYbvN45EhzInEEY9cww==} resolution: {integrity: sha512-roDi0s4nmZ/nQh5BFtPXraFwyzOGZVbZ+1KKxAGjfxes01FRQ9TS0DaUKT4+/So9X8gT55ZXkVdTclcLqZjnHQ==}
'@next/mdx@15.3.0-canary.39': '@next/mdx@15.3.0-canary.41':
resolution: {integrity: sha512-hGSoHuf0/65Xku8xqYXq0AYl+svoKFSb3PqZLW0qCv8uT7b2kR3/ih8SlVV10BYP1MZJSTIv582oAGNlC1rCrQ==} resolution: {integrity: sha512-a6b476AsqnXCojAmhG/O1y+4DoZt8l/hwFmbgrfH2jag3csdZ7ekquDpfzSH5v1yAHgiAyDlFCWCEsR+cbZCmw==}
peerDependencies: peerDependencies:
'@mdx-js/loader': '>=0.15.0' '@mdx-js/loader': '>=0.15.0'
'@mdx-js/react': '>=0.15.0' '@mdx-js/react': '>=0.15.0'
@ -782,50 +773,50 @@ packages:
'@mdx-js/react': '@mdx-js/react':
optional: true optional: true
'@next/swc-darwin-arm64@15.3.0-canary.39': '@next/swc-darwin-arm64@15.3.0-canary.41':
resolution: {integrity: sha512-TxURM0fTY/+lyVnD95osghDvgk8sgEGGOtGf5/tK13RDK6lp0qYa+YuTv3wPBU9XukwW+mrttRd5jjb0JA3LZQ==} resolution: {integrity: sha512-p6soiDBtZTzkvhHmmKqag2xo26N77yZvvACmULieLBOqmgz4kbH7GoVW7OetRJcJ4J+3tyWNkJTX17Y2/SwZlg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@next/swc-darwin-x64@15.3.0-canary.39': '@next/swc-darwin-x64@15.3.0-canary.41':
resolution: {integrity: sha512-zJb/HBhcbTpzkDZYh7t2dcfO7R6gKb5cDcGuPmh+B8iRDFty+Jq9AC8a0ZQXxvxfClhBBxoJNvDKDCc9g7P03Q==} resolution: {integrity: sha512-6PwzOqeJn0D8QHB/gJAZ4Ypl9RDMcaqDIKsvWdojXSYVplVxJ9bRrfl+k3MQLV1jBeUSx2IRFRng00/z3iBaxw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@next/swc-linux-arm64-gnu@15.3.0-canary.39': '@next/swc-linux-arm64-gnu@15.3.0-canary.41':
resolution: {integrity: sha512-cGECywqD2wnKbaLqDqhLbEB4jQkHht4qwQ3JHosBJEbGlGaP84U3/S70oR1y01oK7PZ4Nb40d9ZPUTCLxHxrbQ==} resolution: {integrity: sha512-Q02F1gYR6jAzbbJRKeCBfGVKqFs3kKWS8PxEOYGCY4sROmFrrtel2fmLiKbdUOWpZ7Uhrij+fqzFXS413W9xhQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@next/swc-linux-arm64-musl@15.3.0-canary.39': '@next/swc-linux-arm64-musl@15.3.0-canary.41':
resolution: {integrity: sha512-C6Cno7AxVe84sdKoYY424pP3cN7kSVZi83hcE01VQxCpeRnCNu32PuwIvUmIUoYoZ46oFm1SdNSbaNzGNguOOw==} resolution: {integrity: sha512-XLsAUQyUGszbbGAoJMiMLeJKUSRfLb7PGqrguVBYDX6QQph7siE2be78DvU0nh1CtWJrCyLeyDCLUw7UDdLCUg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@next/swc-linux-x64-gnu@15.3.0-canary.39': '@next/swc-linux-x64-gnu@15.3.0-canary.41':
resolution: {integrity: sha512-e+nMqLM/N5SXIXZXmctlyc2fss9dCcBbwClDa8Q0mdeGmSjB0o/iSphgNvlIkpaIjM9YmWqczgD9Uj5XbpRg5w==} resolution: {integrity: sha512-4peIAKvJQh633m6vMA6Y+PSuRO3LoW41KKF7MgOgdbsKSXFzY4GAMmItrubMke4FvCyO7raI0Dv0gJjER6dogA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@next/swc-linux-x64-musl@15.3.0-canary.39': '@next/swc-linux-x64-musl@15.3.0-canary.41':
resolution: {integrity: sha512-p2p+d/lKbkMkngipKshgJwaZaV7WGazozK2DZn3djY4nVclClMsFBAtYRN1OsYDHtyIl9Wf3O5JtmXJZRIM5rg==} resolution: {integrity: sha512-HLq8CkS66WKr96cijy7RhHkuJxRbS7I0oVcbZmL00Lr0t/kO6OPyGRlazjyMQEQgcEsny/4LAvYZL/ZzZMTltg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@next/swc-win32-arm64-msvc@15.3.0-canary.39': '@next/swc-win32-arm64-msvc@15.3.0-canary.41':
resolution: {integrity: sha512-+ynh1yNzOLvcMEO1OmUeMMnOBm3vYrhjTMltc3FkfvTr1aAowlf3RmzTlJd9W9MkpFxLwGS6SAVvJ3jp9+Tr3A==} resolution: {integrity: sha512-gcY2HlPBuqLGXZ6lEmn0e/T5ae5XUJLP9Rn1UHcuze/RXpVTMEL5VkJw2LOj4VhJpcKs1G5zm7GzfwrjtDd/zw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@next/swc-win32-x64-msvc@15.3.0-canary.39': '@next/swc-win32-x64-msvc@15.3.0-canary.41':
resolution: {integrity: sha512-iEEIPAvwKLpfZCU+u+pY7kZutCGrNPFv9YBpQfWNJeRT9oQqyYJPyUVzNr+T7NuwXl+akjMozDa8yw1QnFa1/Q==} resolution: {integrity: sha512-Ay4afan1UBLu3QjWEZeC2bTpIXLbQDrSsZykRBcpGaQUq113OtM5pMhmPni1qLBtXTIHdLVTgeJjh4duKfZICQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@ -899,8 +890,8 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'} engines: {node: '>=14'}
'@pkgr/core@0.2.0': '@pkgr/core@0.2.1':
resolution: {integrity: sha512-vsJDAkYR6qCPu+ioGScGiMYR7LvZYIXh/dlQeviqoTWNCVfKTLYD/LkNWH4Mxsv2a5vpIRc77FN5DnmK1eBggQ==} resolution: {integrity: sha512-VzgHzGblFmUeBmmrk55zPyrQIArQN4vujc9shWytaPdB3P7qhi0cpaiKIr7tlCmFv2lYUwnLospIqjL9ZSAhhg==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
'@polka/url@1.0.0-next.28': '@polka/url@1.0.0-next.28':
@ -952,9 +943,6 @@ packages:
'@tybys/wasm-util@0.9.0': '@tybys/wasm-util@0.9.0':
resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==}
'@types/comma-number@2.1.2':
resolution: {integrity: sha512-jXqm98xOXsZtuFAmqDdPZNPHgLE3fWjA/UbMG77daB9SdS8SX315vK8OQQiCRJVRKE2aEtxVe8kJLyD34P53uw==}
'@types/concat-stream@2.0.3': '@types/concat-stream@2.0.3':
resolution: {integrity: sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==} resolution: {integrity: sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==}
@ -1070,83 +1058,83 @@ packages:
'@ungap/structured-clone@1.3.0': '@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
'@unrs/resolver-binding-darwin-arm64@1.3.3': '@unrs/resolver-binding-darwin-arm64@1.4.0':
resolution: {integrity: sha512-EpRILdWr3/xDa/7MoyfO7JuBIJqpBMphtu4+80BK1bRfFcniVT74h3Z7q1+WOc92FuIAYatB1vn9TJR67sORGw==} resolution: {integrity: sha512-sqjJyFViBShEewyVYsSLhN9HVNg1MgZm7+AMZBIGpNCcEECW0vRmqkJQFEr6v79flm+516eZZVeZCQgcLwuasg==}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@unrs/resolver-binding-darwin-x64@1.3.3': '@unrs/resolver-binding-darwin-x64@1.4.0':
resolution: {integrity: sha512-ntj/g7lPyqwinMJWZ+DKHBse8HhVxswGTmNgFKJtdgGub3M3zp5BSZ3bvMP+kBT6dnYJLSVlDqdwOq1P8i0+/g==} resolution: {integrity: sha512-WXa81XljrutvRvy4ZgVSY8j+a3ITOvL/qFG3gHgtQDsP0to1kjCe6RNtLgrqcAjxnbmdD8G4dVOw7rSkUm6khw==}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@unrs/resolver-binding-freebsd-x64@1.3.3': '@unrs/resolver-binding-freebsd-x64@1.4.0':
resolution: {integrity: sha512-l6BT8f2CU821EW7U8hSUK8XPq4bmyTlt9Mn4ERrfjJNoCw0/JoHAh9amZZtV3cwC3bwwIat+GUnrcHTG9+qixw==} resolution: {integrity: sha512-xL+j7OAlVMJfTZk6hflLzl9AZdn/eXLe727Di/N3wWFCJfsWq06PoyyaVdF5I+orcZXkBHPbJNHwC5ky8rkXRg==}
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
'@unrs/resolver-binding-linux-arm-gnueabihf@1.3.3': '@unrs/resolver-binding-linux-arm-gnueabihf@1.4.0':
resolution: {integrity: sha512-8ScEc5a4y7oE2BonRvzJ+2GSkBaYWyh0/Ko4Q25e/ix6ANpJNhwEPZvCR6GVRmsQAYMIfQvYLdM6YEN+qRjnAQ==} resolution: {integrity: sha512-jurt1wWefnbx3Kx5lBiSoFUoNi2ut4hNUGQDtixr94Dz/j1EGwhDTrjffHBH+nb0Y3K4OrFTFJNOMwGn5cflFw==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@unrs/resolver-binding-linux-arm-musleabihf@1.3.3': '@unrs/resolver-binding-linux-arm-musleabihf@1.4.0':
resolution: {integrity: sha512-8qQ6l1VTzLNd3xb2IEXISOKwMGXDCzY/UNy/7SovFW2Sp0K3YbL7Ao7R18v6SQkLqQlhhqSBIFRk+u6+qu5R5A==} resolution: {integrity: sha512-EVUt1x6qSsWTZCNRtumjkpH6A7vBPWDUf/y6f2B8Ryb3iNEaZdLZDS0Glep/D83yHshOC4PAtCPEhTF1/33bWg==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@unrs/resolver-binding-linux-arm64-gnu@1.3.3': '@unrs/resolver-binding-linux-arm64-gnu@1.4.0':
resolution: {integrity: sha512-v81R2wjqcWXJlQY23byqYHt9221h4anQ6wwN64oMD/WAE+FmxPHFZee5bhRkNVtzqO/q7wki33VFWlhiADwUeQ==} resolution: {integrity: sha512-QhLaVsApzJ1f3NPPN5fgfF2sunAHkHJB45fcndcqLCW3hobbySJTGVBFlVXWB1Td1M1cyC7onTEjV5CLXbU3gw==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@unrs/resolver-binding-linux-arm64-musl@1.3.3': '@unrs/resolver-binding-linux-arm64-musl@1.4.0':
resolution: {integrity: sha512-cAOx/j0u5coMg4oct/BwMzvWJdVciVauUvsd+GQB/1FZYKQZmqPy0EjJzJGbVzFc6gbnfEcSqvQE6gvbGf2N8Q==} resolution: {integrity: sha512-EDzOGVDIBwU6FwAm2slyf2cgzSJr2HIQNeZbWG9bRLqCm1JnAj6nL2Eo+lBCu3vueYxBUd5mUKKNPzjbWSuw+w==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@unrs/resolver-binding-linux-ppc64-gnu@1.3.3': '@unrs/resolver-binding-linux-ppc64-gnu@1.4.0':
resolution: {integrity: sha512-mq2blqwErgDJD4gtFDlTX/HZ7lNP8YCHYFij2gkXPtMzrXxPW1hOtxL6xg4NWxvnj4bppppb0W3s/buvM55yfg==} resolution: {integrity: sha512-XZixKFTAwntVmF5mmySZfuCNYvRsgQPOfcRNLdsvGFZKH4U4kHwqCdY55nqu5PAN4vkYaHQn9zpSaUHLPnqWog==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
'@unrs/resolver-binding-linux-s390x-gnu@1.3.3': '@unrs/resolver-binding-linux-s390x-gnu@1.4.0':
resolution: {integrity: sha512-u0VRzfFYysarYHnztj2k2xr+eu9rmgoTUUgCCIT37Nr+j0A05Xk2c3RY8Mh5+DhCl2aYibihnaAEJHeR0UOFIQ==} resolution: {integrity: sha512-ADbvqg1tdyBe3r3OxzdUnhtUEhe0RSk9Cbu8a6cV9avMA9YPdHsuwlVhGGMPEVujufCVdBVDkXM6Vharlxkmgw==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
'@unrs/resolver-binding-linux-x64-gnu@1.3.3': '@unrs/resolver-binding-linux-x64-gnu@1.4.0':
resolution: {integrity: sha512-OrVo5ZsG29kBF0Ug95a2KidS16PqAMmQNozM6InbquOfW/udouk063e25JVLqIBhHLB2WyBnixOQ19tmeC/hIg==} resolution: {integrity: sha512-TOXDoUByvyBhf3IfwtkAAi2BU73G5QzSO8eE7wuNn2Ch19kkzCRv61nw68f9Qad0zbT1yux6e1xFc7RmCgypWQ==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@unrs/resolver-binding-linux-x64-musl@1.3.3': '@unrs/resolver-binding-linux-x64-musl@1.4.0':
resolution: {integrity: sha512-PYnmrwZ4HMp9SkrOhqPghY/aoL+Rtd4CQbr93GlrRTjK6kDzfMfgz3UH3jt6elrQAfupa1qyr1uXzeVmoEAxUA==} resolution: {integrity: sha512-B9t6yxWopI35JLpJOqvUZuXuEXsTsy17caLORqrm80bAQ5wVvZ03SDSDEZwg9x8xdIICwAg2I8xllbSjMW4CRQ==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@unrs/resolver-binding-wasm32-wasi@1.3.3': '@unrs/resolver-binding-wasm32-wasi@1.4.0':
resolution: {integrity: sha512-81AnQY6fShmktQw4hWDUIilsKSdvr/acdJ5azAreu2IWNlaJOKphJSsUVWE+yCk6kBMoQyG9ZHCb/krb5K0PEA==} resolution: {integrity: sha512-+7TbBPvChxz6SYieTyRTI6aDemSb9Np6CJWjNb6dhSNkEq2aG2cDFMN2vKFEtQ3KBJq+H0Hub/Vc0tymjNpkAw==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
cpu: [wasm32] cpu: [wasm32]
'@unrs/resolver-binding-win32-arm64-msvc@1.3.3': '@unrs/resolver-binding-win32-arm64-msvc@1.4.0':
resolution: {integrity: sha512-X/42BMNw7cW6xrB9syuP5RusRnWGoq+IqvJO8IDpp/BZg64J1uuIW6qA/1Cl13Y4LyLXbJVYbYNSKwR/FiHEng==} resolution: {integrity: sha512-fDfQnVgacXxw8PVaPfCWB/Sd3IjtUFFvEZ3/qUhT25h4j6N+/m8NopAEhH59VguGjLffj1Bzx7NpwD+TtBPoXA==}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@unrs/resolver-binding-win32-ia32-msvc@1.3.3': '@unrs/resolver-binding-win32-ia32-msvc@1.4.0':
resolution: {integrity: sha512-EGNnNGQxMU5aTN7js3ETYvuw882zcO+dsVjs+DwO2j/fRVKth87C8e2GzxW1L3+iWAXMyJhvFBKRavk9Og1Z6A==} resolution: {integrity: sha512-ClIroeB9CBR6607PMs1kF7eOejp49vS/G8Qq/zDkcWxAbveNnDQU6jA3qh/DYcEOIDrxba3g1ORsrF1dDf5h2A==}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
'@unrs/resolver-binding-win32-x64-msvc@1.3.3': '@unrs/resolver-binding-win32-x64-msvc@1.4.0':
resolution: {integrity: sha512-GraLbYqOJcmW1qY3osB+2YIiD62nVf2/bVLHZmrb4t/YSUwE03l7TwcDJl08T/Tm3SVhepX8RQkpzWbag/Sb4w==} resolution: {integrity: sha512-iKSQRDvK2/HXXJE0j8yRg88h+SbAI09+zTjPQeflBjEIYh3D0SlVuQAMC0gS3GY7SMZchxtI3oMVctYcUTVUeA==}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@upstash/redis@1.34.6': '@upstash/redis@1.34.7':
resolution: {integrity: sha512-/ic+NszsXyIl2P8aExL7xETxgmzyhn6txG4senGDgd524bypGEJs1TMzLDeOV+PFVuacc10wZVJLIj6aRZZNaw==} resolution: {integrity: sha512-EJ/g+ttDL3MFS8WNDLj/Buybo3FpPw2IAFl4X8lxh8/l7YTq6kTqT6FKkq8eYRdN6lGlVw+W6qnmym734m39Tg==}
abbrev@2.0.0: abbrev@2.0.0:
resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
@ -1265,8 +1253,8 @@ packages:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
babel-plugin-react-compiler@19.0.0-beta-e993439-20250328: babel-plugin-react-compiler@19.0.0-beta-e993439-20250405:
resolution: {integrity: sha512-eq0lxXDicCNfhtIhm2L2nW2FyDcPMfuJTQG641ZWMWxEVqwmtUlAkWXC4o5C3vykhWMTsXmiJe7/hxXVUbV8ZA==} resolution: {integrity: sha512-bPAx2GvDZbhdCbliGQICGgeaCmJGDZt+DuRtrWbW83NLTIkCwvV4chvW0fR2mowtleTdgIc+4Ibc2TgNahgpfA==}
bail@2.0.2: bail@2.0.2:
resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
@ -1305,8 +1293,8 @@ packages:
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines: {node: '>=10.16.0'} engines: {node: '>=10.16.0'}
cacheable@1.8.9: cacheable@1.8.10:
resolution: {integrity: sha512-FicwAUyWnrtnd4QqYAoRlNs44/a1jTL7XDKqm5gJ90wz1DQPlC7U2Rd1Tydpv+E7WAr4sQHuw8Q8M3nZMAyecQ==} resolution: {integrity: sha512-0ZnbicB/N2R6uziva8l6O6BieBklArWyiGx4GkwAhLKhSHyQtRfM9T1nx7HHuHDKkYB/efJQhz3QJ6x/YqoZzA==}
call-bind-apply-helpers@1.0.2: call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
@ -1324,8 +1312,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'} engines: {node: '>=6'}
caniuse-lite@1.0.30001710: caniuse-lite@1.0.30001712:
resolution: {integrity: sha512-B5C0I0UmaGqHgo5FuqJ7hBd4L57A4dDD+Xi+XX1nXOoxGeDdY4Ko38qJYOyqznBVJEqON5p8P1x5zRR3+rsnxA==} resolution: {integrity: sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==}
ccount@2.0.1: ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@ -1392,9 +1380,6 @@ packages:
colorette@2.0.20: colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
comma-number@2.1.0:
resolution: {integrity: sha512-fRcu1c+4yFLFp3tgranEkKPPWRlnkWQXr4p0KBL0WW9Kd2wmbKAoQ2R4rluFm4ubXCtXGybEaFB7r6YgPOnahQ==}
comma-separated-tokens@2.0.3: comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
@ -1644,8 +1629,8 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'} engines: {node: '>=12'}
eslint-config-next@15.3.0-canary.39: eslint-config-next@15.3.0-canary.41:
resolution: {integrity: sha512-vCs5chgklYsUwOxtNXtSfbKLWFqYUrAd2pICQ7ltF356PCz+R46jPwl+ohkZ5qKfMBtUC8gxOswv/vqNSc05/A==} resolution: {integrity: sha512-c+2+MtxW3iGxbpAzINdKGjrEtOQCO4tVF3bjYfzwqIPz8eqrlkroFn4ok1B04Dz9H03jvrmYdbMKXfmpyX4vzg==}
peerDependencies: peerDependencies:
eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
typescript: '>=3.3.1' typescript: '>=3.3.1'
@ -1748,8 +1733,8 @@ packages:
eslint-config-prettier: eslint-config-prettier:
optional: true optional: true
eslint-plugin-react-compiler@19.0.0-beta-e993439-20250328: eslint-plugin-react-compiler@19.0.0-beta-e993439-20250405:
resolution: {integrity: sha512-7hTFaGMz0YYLtkStJFBHjr2zOZwULxg2qCJ8pNYlaOqq2zL1/+Wg7BiDwrPZQIpAn3YQbBu1SHF509M3qpTyIg==} resolution: {integrity: sha512-8ZQU4qGc8NOfsM7u7tf7gXmZ+d4tSK+7BFb+Fvs4s9ItQ12m/G6ttSGxompH/Jq7nXgnJ20EqQRshwVG6GwUdA==}
engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0}
peerDependencies: peerDependencies:
eslint: '>=7' eslint: '>=7'
@ -1819,8 +1804,8 @@ packages:
estree-util-to-js@2.0.0: estree-util-to-js@2.0.0:
resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==}
estree-util-value-to-estree@3.3.2: estree-util-value-to-estree@3.3.3:
resolution: {integrity: sha512-hYH1aSvQI63Cvq3T3loaem6LW4u72F187zW4FHpTrReJSm6W66vYTFNO1vH/chmcOulp1HlAj1pxn8Ag0oXI5Q==} resolution: {integrity: sha512-Db+m1WSD4+mUO7UgMeKkAwdbfNWwIxLt48XF2oFU9emPfXkIu+k5/nlOj313v7wqtAPo0f9REhUvznFrPkG8CQ==}
estree-util-visit@2.0.0: estree-util-visit@2.0.0:
resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
@ -1893,8 +1878,8 @@ packages:
resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
file-entry-cache@10.0.7: file-entry-cache@10.0.8:
resolution: {integrity: sha512-txsf5fu3anp2ff3+gOJJzRImtrtm/oa9tYLN0iTuINZ++EyVR/nRrg2fKYwvG/pXDofcrvvb0scEbX3NyW/COw==} resolution: {integrity: sha512-FGXHpfmI4XyzbLd3HQ8cbUcsFGohJpZtmQRHr8z8FxxtCe2PcpgIlVLwIgunqjvRmXypBETvwhV4ptJizA+Y1Q==}
file-entry-cache@8.0.0: file-entry-cache@8.0.0:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
@ -1912,8 +1897,8 @@ packages:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'} engines: {node: '>=16'}
flat-cache@6.1.7: flat-cache@6.1.8:
resolution: {integrity: sha512-qwZ4xf1v1m7Rc9XiORly31YaChvKt6oNVHuqqZcoED/7O+ToyNVGobKsIAopY9ODcWpEDKEBAbrSOCBHtNQvew==} resolution: {integrity: sha512-R6MaD3nrJAtO7C3QOuS79ficm2pEAy++TgEUD8ii1LVlbcgZ9DtASLkt9B+RZSFCzm7QHDMlXPsqqB6W2Pfr1Q==}
flatted@3.3.3: flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
@ -2739,8 +2724,8 @@ packages:
natural-compare@1.4.0: natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
next@15.3.0-canary.39: next@15.3.0-canary.41:
resolution: {integrity: sha512-GLY+9L25iHU5NxdafqCKPwZZrXgHWCVz/QAJn16yeGBNd1cy2q/QBrjU524bsqlfaat/w1uRb1aN/qx1bjwdXA==} resolution: {integrity: sha512-jQANaTx8vXRyMUlwOlv4nB2t6rWvQ5K/mXE/lcm4GY1NOcMdOODZEsRFuxr2F/DrUHSGwnHl/RXu+2RKFfNulQ==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@ -3542,9 +3527,6 @@ packages:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'} engines: {node: '>=8.0'}
to-vfile@8.0.0:
resolution: {integrity: sha512-IcmH1xB5576MJc9qcfEC/m/nQCFt3fzMHz45sSlgJyTWjRbKW1HAkJpuf3DgE57YzIlZcwcBZA5ENQbBo4aLkg==}
toggle-selection@1.0.6: toggle-selection@1.0.6:
resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
@ -3651,8 +3633,8 @@ packages:
universal-user-agent@7.0.2: universal-user-agent@7.0.2:
resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==}
unrs-resolver@1.3.3: unrs-resolver@1.4.0:
resolution: {integrity: sha512-PFLAGQzYlyjniXdbmQ3dnGMZJXX5yrl2YS4DLRfR3BhgUsE1zpRIrccp9XMOGRfIHpdFvCn/nr5N1KMVda4x3A==} resolution: {integrity: sha512-GwhfAlEBre112f0zjDHkSWTMvaxzr9ylhelNP8ZyvY1/2LK79DMY780+9rymG7fQ0TQ8yFim6X015hS2gCKB3g==}
update-browserslist-db@1.1.3: update-browserslist-db@1.1.3:
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
@ -4352,48 +4334,48 @@ snapshots:
'@tybys/wasm-util': 0.9.0 '@tybys/wasm-util': 0.9.0
optional: true optional: true
'@next/bundle-analyzer@15.3.0-canary.39': '@next/bundle-analyzer@15.3.0-canary.41':
dependencies: dependencies:
webpack-bundle-analyzer: 4.10.1 webpack-bundle-analyzer: 4.10.1
transitivePeerDependencies: transitivePeerDependencies:
- bufferutil - bufferutil
- utf-8-validate - utf-8-validate
'@next/env@15.3.0-canary.39': {} '@next/env@15.3.0-canary.41': {}
'@next/eslint-plugin-next@15.3.0-canary.39': '@next/eslint-plugin-next@15.3.0-canary.41':
dependencies: dependencies:
fast-glob: 3.3.1 fast-glob: 3.3.1
'@next/mdx@15.3.0-canary.39(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.1.0)(react@19.1.0))': '@next/mdx@15.3.0-canary.41(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.1.0)(react@19.1.0))':
dependencies: dependencies:
source-map: 0.7.4 source-map: 0.7.4
optionalDependencies: optionalDependencies:
'@mdx-js/loader': 3.1.0(acorn@8.14.1) '@mdx-js/loader': 3.1.0(acorn@8.14.1)
'@mdx-js/react': 3.1.0(@types/react@19.1.0)(react@19.1.0) '@mdx-js/react': 3.1.0(@types/react@19.1.0)(react@19.1.0)
'@next/swc-darwin-arm64@15.3.0-canary.39': '@next/swc-darwin-arm64@15.3.0-canary.41':
optional: true optional: true
'@next/swc-darwin-x64@15.3.0-canary.39': '@next/swc-darwin-x64@15.3.0-canary.41':
optional: true optional: true
'@next/swc-linux-arm64-gnu@15.3.0-canary.39': '@next/swc-linux-arm64-gnu@15.3.0-canary.41':
optional: true optional: true
'@next/swc-linux-arm64-musl@15.3.0-canary.39': '@next/swc-linux-arm64-musl@15.3.0-canary.41':
optional: true optional: true
'@next/swc-linux-x64-gnu@15.3.0-canary.39': '@next/swc-linux-x64-gnu@15.3.0-canary.41':
optional: true optional: true
'@next/swc-linux-x64-musl@15.3.0-canary.39': '@next/swc-linux-x64-musl@15.3.0-canary.41':
optional: true optional: true
'@next/swc-win32-arm64-msvc@15.3.0-canary.39': '@next/swc-win32-arm64-msvc@15.3.0-canary.41':
optional: true optional: true
'@next/swc-win32-x64-msvc@15.3.0-canary.39': '@next/swc-win32-x64-msvc@15.3.0-canary.41':
optional: true optional: true
'@nodelib/fs.scandir@2.1.5': '@nodelib/fs.scandir@2.1.5':
@ -4499,7 +4481,7 @@ snapshots:
'@pkgjs/parseargs@0.11.0': '@pkgjs/parseargs@0.11.0':
optional: true optional: true
'@pkgr/core@0.2.0': {} '@pkgr/core@0.2.1': {}
'@polka/url@1.0.0-next.28': {} '@polka/url@1.0.0-next.28': {}
@ -4564,8 +4546,6 @@ snapshots:
tslib: 2.8.1 tslib: 2.8.1
optional: true optional: true
'@types/comma-number@2.1.2': {}
'@types/concat-stream@2.0.3': '@types/concat-stream@2.0.3':
dependencies: dependencies:
'@types/node': 22.14.0 '@types/node': 22.14.0
@ -4707,54 +4687,54 @@ snapshots:
'@ungap/structured-clone@1.3.0': {} '@ungap/structured-clone@1.3.0': {}
'@unrs/resolver-binding-darwin-arm64@1.3.3': '@unrs/resolver-binding-darwin-arm64@1.4.0':
optional: true optional: true
'@unrs/resolver-binding-darwin-x64@1.3.3': '@unrs/resolver-binding-darwin-x64@1.4.0':
optional: true optional: true
'@unrs/resolver-binding-freebsd-x64@1.3.3': '@unrs/resolver-binding-freebsd-x64@1.4.0':
optional: true optional: true
'@unrs/resolver-binding-linux-arm-gnueabihf@1.3.3': '@unrs/resolver-binding-linux-arm-gnueabihf@1.4.0':
optional: true optional: true
'@unrs/resolver-binding-linux-arm-musleabihf@1.3.3': '@unrs/resolver-binding-linux-arm-musleabihf@1.4.0':
optional: true optional: true
'@unrs/resolver-binding-linux-arm64-gnu@1.3.3': '@unrs/resolver-binding-linux-arm64-gnu@1.4.0':
optional: true optional: true
'@unrs/resolver-binding-linux-arm64-musl@1.3.3': '@unrs/resolver-binding-linux-arm64-musl@1.4.0':
optional: true optional: true
'@unrs/resolver-binding-linux-ppc64-gnu@1.3.3': '@unrs/resolver-binding-linux-ppc64-gnu@1.4.0':
optional: true optional: true
'@unrs/resolver-binding-linux-s390x-gnu@1.3.3': '@unrs/resolver-binding-linux-s390x-gnu@1.4.0':
optional: true optional: true
'@unrs/resolver-binding-linux-x64-gnu@1.3.3': '@unrs/resolver-binding-linux-x64-gnu@1.4.0':
optional: true optional: true
'@unrs/resolver-binding-linux-x64-musl@1.3.3': '@unrs/resolver-binding-linux-x64-musl@1.4.0':
optional: true optional: true
'@unrs/resolver-binding-wasm32-wasi@1.3.3': '@unrs/resolver-binding-wasm32-wasi@1.4.0':
dependencies: dependencies:
'@napi-rs/wasm-runtime': 0.2.8 '@napi-rs/wasm-runtime': 0.2.8
optional: true optional: true
'@unrs/resolver-binding-win32-arm64-msvc@1.3.3': '@unrs/resolver-binding-win32-arm64-msvc@1.4.0':
optional: true optional: true
'@unrs/resolver-binding-win32-ia32-msvc@1.3.3': '@unrs/resolver-binding-win32-ia32-msvc@1.4.0':
optional: true optional: true
'@unrs/resolver-binding-win32-x64-msvc@1.3.3': '@unrs/resolver-binding-win32-x64-msvc@1.4.0':
optional: true optional: true
'@upstash/redis@1.34.6': '@upstash/redis@1.34.7':
dependencies: dependencies:
crypto-js: 4.2.0 crypto-js: 4.2.0
@ -4887,7 +4867,7 @@ snapshots:
axobject-query@4.1.0: {} axobject-query@4.1.0: {}
babel-plugin-react-compiler@19.0.0-beta-e993439-20250328: babel-plugin-react-compiler@19.0.0-beta-e993439-20250405:
dependencies: dependencies:
'@babel/types': 7.27.0 '@babel/types': 7.27.0
@ -4914,7 +4894,7 @@ snapshots:
browserslist@4.24.4: browserslist@4.24.4:
dependencies: dependencies:
caniuse-lite: 1.0.30001710 caniuse-lite: 1.0.30001712
electron-to-chromium: 1.5.132 electron-to-chromium: 1.5.132
node-releases: 2.0.19 node-releases: 2.0.19
update-browserslist-db: 1.1.3(browserslist@4.24.4) update-browserslist-db: 1.1.3(browserslist@4.24.4)
@ -4930,7 +4910,7 @@ snapshots:
dependencies: dependencies:
streamsearch: 1.1.0 streamsearch: 1.1.0
cacheable@1.8.9: cacheable@1.8.10:
dependencies: dependencies:
hookified: 1.8.1 hookified: 1.8.1
keyv: 5.3.2 keyv: 5.3.2
@ -4954,7 +4934,7 @@ snapshots:
callsites@3.1.0: {} callsites@3.1.0: {}
caniuse-lite@1.0.30001710: {} caniuse-lite@1.0.30001712: {}
ccount@2.0.1: {} ccount@2.0.1: {}
@ -5012,8 +4992,6 @@ snapshots:
colorette@2.0.20: {} colorette@2.0.20: {}
comma-number@2.1.0: {}
comma-separated-tokens@2.0.3: {} comma-separated-tokens@2.0.3: {}
commander@13.1.0: {} commander@13.1.0: {}
@ -5308,9 +5286,9 @@ snapshots:
escape-string-regexp@5.0.0: {} escape-string-regexp@5.0.0: {}
eslint-config-next@15.3.0-canary.39(eslint@9.24.0)(typescript@5.8.3): eslint-config-next@15.3.0-canary.41(eslint@9.24.0)(typescript@5.8.3):
dependencies: dependencies:
'@next/eslint-plugin-next': 15.3.0-canary.39 '@next/eslint-plugin-next': 15.3.0-canary.41
'@rushstack/eslint-patch': 1.11.0 '@rushstack/eslint-patch': 1.11.0
'@typescript-eslint/eslint-plugin': 8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.24.0)(typescript@5.8.3))(eslint@9.24.0)(typescript@5.8.3) '@typescript-eslint/eslint-plugin': 8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.24.0)(typescript@5.8.3))(eslint@9.24.0)(typescript@5.8.3)
'@typescript-eslint/parser': 8.29.0(eslint@9.24.0)(typescript@5.8.3) '@typescript-eslint/parser': 8.29.0(eslint@9.24.0)(typescript@5.8.3)
@ -5349,7 +5327,7 @@ snapshots:
is-bun-module: 2.0.0 is-bun-module: 2.0.0
stable-hash: 0.0.5 stable-hash: 0.0.5
tinyglobby: 0.2.12 tinyglobby: 0.2.12
unrs-resolver: 1.3.3 unrs-resolver: 1.4.0
optionalDependencies: optionalDependencies:
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.24.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.24.0) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.24.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.24.0)
transitivePeerDependencies: transitivePeerDependencies:
@ -5469,7 +5447,7 @@ snapshots:
optionalDependencies: optionalDependencies:
eslint-config-prettier: 10.1.1(eslint@9.24.0) eslint-config-prettier: 10.1.1(eslint@9.24.0)
eslint-plugin-react-compiler@19.0.0-beta-e993439-20250328(eslint@9.24.0): eslint-plugin-react-compiler@19.0.0-beta-e993439-20250405(eslint@9.24.0):
dependencies: dependencies:
'@babel/core': 7.26.10 '@babel/core': 7.26.10
'@babel/parser': 7.27.0 '@babel/parser': 7.27.0
@ -5596,7 +5574,7 @@ snapshots:
astring: 1.9.0 astring: 1.9.0
source-map: 0.7.4 source-map: 0.7.4
estree-util-value-to-estree@3.3.2: estree-util-value-to-estree@3.3.3:
dependencies: dependencies:
'@types/estree': 1.0.7 '@types/estree': 1.0.7
@ -5675,9 +5653,9 @@ snapshots:
dependencies: dependencies:
xml-js: 1.6.11 xml-js: 1.6.11
file-entry-cache@10.0.7: file-entry-cache@10.0.8:
dependencies: dependencies:
flat-cache: 6.1.7 flat-cache: 6.1.8
file-entry-cache@8.0.0: file-entry-cache@8.0.0:
dependencies: dependencies:
@ -5697,9 +5675,9 @@ snapshots:
flatted: 3.3.3 flatted: 3.3.3
keyv: 4.5.4 keyv: 4.5.4
flat-cache@6.1.7: flat-cache@6.1.8:
dependencies: dependencies:
cacheable: 1.8.9 cacheable: 1.8.10
flatted: 3.3.3 flatted: 3.3.3
hookified: 1.8.1 hookified: 1.8.1
@ -5729,9 +5707,9 @@ snapshots:
functions-have-names@1.2.3: {} functions-have-names@1.2.3: {}
geist@1.3.1(next@15.3.0-canary.39(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250328)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)): geist@1.3.1(next@15.3.0-canary.41(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)):
dependencies: dependencies:
next: 15.3.0-canary.39(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250328)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next: 15.3.0-canary.41(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
gensync@1.0.0-beta.2: {} gensync@1.0.0-beta.2: {}
@ -5903,7 +5881,7 @@ snapshots:
'@types/estree': 1.0.7 '@types/estree': 1.0.7
'@types/hast': 3.0.4 '@types/hast': 3.0.4
comma-separated-tokens: 2.0.3 comma-separated-tokens: 2.0.3
estree-util-value-to-estree: 3.3.2 estree-util-value-to-estree: 3.3.3
mdast-util-mdx-jsx: 3.2.0 mdast-util-mdx-jsx: 3.2.0
property-information: 7.0.0 property-information: 7.0.0
space-separated-tokens: 2.0.2 space-separated-tokens: 2.0.2
@ -6864,27 +6842,27 @@ snapshots:
natural-compare@1.4.0: {} natural-compare@1.4.0: {}
next@15.3.0-canary.39(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250328)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): next@15.3.0-canary.41(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies: dependencies:
'@next/env': 15.3.0-canary.39 '@next/env': 15.3.0-canary.41
'@swc/counter': 0.1.3 '@swc/counter': 0.1.3
'@swc/helpers': 0.5.15 '@swc/helpers': 0.5.15
busboy: 1.6.0 busboy: 1.6.0
caniuse-lite: 1.0.30001710 caniuse-lite: 1.0.30001712
postcss: 8.4.31 postcss: 8.4.31
react: 19.1.0 react: 19.1.0
react-dom: 19.1.0(react@19.1.0) react-dom: 19.1.0(react@19.1.0)
styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.1.0) styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.1.0)
optionalDependencies: optionalDependencies:
'@next/swc-darwin-arm64': 15.3.0-canary.39 '@next/swc-darwin-arm64': 15.3.0-canary.41
'@next/swc-darwin-x64': 15.3.0-canary.39 '@next/swc-darwin-x64': 15.3.0-canary.41
'@next/swc-linux-arm64-gnu': 15.3.0-canary.39 '@next/swc-linux-arm64-gnu': 15.3.0-canary.41
'@next/swc-linux-arm64-musl': 15.3.0-canary.39 '@next/swc-linux-arm64-musl': 15.3.0-canary.41
'@next/swc-linux-x64-gnu': 15.3.0-canary.39 '@next/swc-linux-x64-gnu': 15.3.0-canary.41
'@next/swc-linux-x64-musl': 15.3.0-canary.39 '@next/swc-linux-x64-musl': 15.3.0-canary.41
'@next/swc-win32-arm64-msvc': 15.3.0-canary.39 '@next/swc-win32-arm64-msvc': 15.3.0-canary.41
'@next/swc-win32-x64-msvc': 15.3.0-canary.39 '@next/swc-win32-x64-msvc': 15.3.0-canary.41
babel-plugin-react-compiler: 19.0.0-beta-e993439-20250328 babel-plugin-react-compiler: 19.0.0-beta-e993439-20250405
sharp: 0.33.5 sharp: 0.33.5
transitivePeerDependencies: transitivePeerDependencies:
- '@babel/core' - '@babel/core'
@ -7374,7 +7352,7 @@ snapshots:
remark-mdx-frontmatter@5.1.0: remark-mdx-frontmatter@5.1.0:
dependencies: dependencies:
'@types/mdast': 4.0.4 '@types/mdast': 4.0.4
estree-util-value-to-estree: 3.3.2 estree-util-value-to-estree: 3.3.3
toml: 3.0.0 toml: 3.0.0
unified: 11.0.5 unified: 11.0.5
unist-util-mdx-define: 1.1.2 unist-util-mdx-define: 1.1.2
@ -7863,7 +7841,7 @@ snapshots:
debug: 4.4.0 debug: 4.4.0
fast-glob: 3.3.3 fast-glob: 3.3.3
fastest-levenshtein: 1.0.16 fastest-levenshtein: 1.0.16
file-entry-cache: 10.0.7 file-entry-cache: 10.0.8
global-modules: 2.0.0 global-modules: 2.0.0
globby: 11.1.0 globby: 11.1.0
globjoin: 0.1.4 globjoin: 0.1.4
@ -7915,7 +7893,7 @@ snapshots:
synckit@0.11.2: synckit@0.11.2:
dependencies: dependencies:
'@pkgr/core': 0.2.0 '@pkgr/core': 0.2.1
tslib: 2.8.1 tslib: 2.8.1
table@6.9.0: table@6.9.0:
@ -7935,10 +7913,6 @@ snapshots:
dependencies: dependencies:
is-number: 7.0.0 is-number: 7.0.0
to-vfile@8.0.0:
dependencies:
vfile: 6.0.3
toggle-selection@1.0.6: {} toggle-selection@1.0.6: {}
toml@3.0.0: {} toml@3.0.0: {}
@ -8103,23 +8077,23 @@ snapshots:
universal-user-agent@7.0.2: {} universal-user-agent@7.0.2: {}
unrs-resolver@1.3.3: unrs-resolver@1.4.0:
optionalDependencies: optionalDependencies:
'@unrs/resolver-binding-darwin-arm64': 1.3.3 '@unrs/resolver-binding-darwin-arm64': 1.4.0
'@unrs/resolver-binding-darwin-x64': 1.3.3 '@unrs/resolver-binding-darwin-x64': 1.4.0
'@unrs/resolver-binding-freebsd-x64': 1.3.3 '@unrs/resolver-binding-freebsd-x64': 1.4.0
'@unrs/resolver-binding-linux-arm-gnueabihf': 1.3.3 '@unrs/resolver-binding-linux-arm-gnueabihf': 1.4.0
'@unrs/resolver-binding-linux-arm-musleabihf': 1.3.3 '@unrs/resolver-binding-linux-arm-musleabihf': 1.4.0
'@unrs/resolver-binding-linux-arm64-gnu': 1.3.3 '@unrs/resolver-binding-linux-arm64-gnu': 1.4.0
'@unrs/resolver-binding-linux-arm64-musl': 1.3.3 '@unrs/resolver-binding-linux-arm64-musl': 1.4.0
'@unrs/resolver-binding-linux-ppc64-gnu': 1.3.3 '@unrs/resolver-binding-linux-ppc64-gnu': 1.4.0
'@unrs/resolver-binding-linux-s390x-gnu': 1.3.3 '@unrs/resolver-binding-linux-s390x-gnu': 1.4.0
'@unrs/resolver-binding-linux-x64-gnu': 1.3.3 '@unrs/resolver-binding-linux-x64-gnu': 1.4.0
'@unrs/resolver-binding-linux-x64-musl': 1.3.3 '@unrs/resolver-binding-linux-x64-musl': 1.4.0
'@unrs/resolver-binding-wasm32-wasi': 1.3.3 '@unrs/resolver-binding-wasm32-wasi': 1.4.0
'@unrs/resolver-binding-win32-arm64-msvc': 1.3.3 '@unrs/resolver-binding-win32-arm64-msvc': 1.4.0
'@unrs/resolver-binding-win32-ia32-msvc': 1.3.3 '@unrs/resolver-binding-win32-ia32-msvc': 1.4.0
'@unrs/resolver-binding-win32-x64-msvc': 1.3.3 '@unrs/resolver-binding-win32-x64-msvc': 1.4.0
update-browserslist-db@1.1.3(browserslist@4.24.4): update-browserslist-db@1.1.3(browserslist@4.24.4):
dependencies: dependencies:

View File

@ -19,6 +19,6 @@
} }
] ]
}, },
"include": ["next-env.d.ts", "global.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "include": ["next-env.d.ts", "webpack.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"] "exclude": ["node_modules"]
} }

View File

@ -1,7 +1,3 @@
/**
* @module global
*/
/// <reference types="webpack/module" /> /// <reference types="webpack/module" />
// see nextConfig.webpack in next.config.ts for non-standard "asset/resource" module rules. // see nextConfig.webpack in next.config.ts for non-standard "asset/resource" module rules.