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

remove react-spring dependency

This commit is contained in:
Jake Jarvis 2025-03-08 23:13:32 -05:00
parent 6f31bc53c8
commit e166c63988
Signed by: jake
SSH Key Fingerprint: SHA256:nCkvAjYA6XaSPUqc4TfbBQTpzr8Xj7ritg/sGInCdkc
18 changed files with 200 additions and 512 deletions

View File

@ -6,7 +6,6 @@
border-radius: var(--radii-corner);
color: var(--colors-text);
background-color: var(--colors-superDuperLight);
transition: background var(--transitions-fade);
}
.input:focus {

View File

@ -1,7 +1,6 @@
body {
font-family: var(--fonts-sans) !important;
background-color: var(--colors-backgroundInner);
transition: background var(--transitions-fade);
}
code,

View File

@ -34,41 +34,35 @@
display: inline-block;
margin-left: 0.1em;
font-size: 1.2em;
animation: wave 5s ease 1s infinite;
transform-origin: 65% 80%;
}
@media (prefers-reduced-motion: no-preference) {
.wave {
animation: wave 5s ease 1s infinite;
transform-origin: 65% 80%;
will-change: transform;
@keyframes wave {
0% {
transform: rotate(0deg);
}
@keyframes wave {
0% {
transform: rotate(0deg);
}
5% {
transform: rotate(14deg);
}
10% {
transform: rotate(-8deg);
}
15% {
transform: rotate(14deg);
}
20% {
transform: rotate(-4deg);
}
25% {
transform: rotate(10deg);
}
30% {
transform: rotate(0deg);
}
/* pause for ~9 out of 10 seconds */
100% {
transform: rotate(0deg);
}
5% {
transform: rotate(14deg);
}
10% {
transform: rotate(-8deg);
}
15% {
transform: rotate(14deg);
}
20% {
transform: rotate(-4deg);
}
25% {
transform: rotate(10deg);
}
30% {
transform: rotate(0deg);
}
/* pause for ~9 out of 10 seconds */
100% {
transform: rotate(0deg);
}
}

View File

@ -1,38 +1,36 @@
import { useId } from "react";
import { GoLock } from "react-icons/go";
import hash from "@emotion/hash";
import { rgba } from "polished";
import Link from "../components/Link";
import { GoLock } from "react-icons/go";
import UnstyledLink from "../components/Link";
import type { ComponentPropsWithoutRef } from "react";
import type { Route } from "next";
import styles from "./page.module.css";
const ColorfulLink = ({
const Link = ({
lightColor,
darkColor,
children,
...rest
}: ComponentPropsWithoutRef<typeof Link> & {
}: ComponentPropsWithoutRef<typeof UnstyledLink> & {
lightColor: string;
darkColor: string;
}) => {
const uniqueId = `styled_${useId().replaceAll(":", "")}`;
const uniqueId = hash(`${lightColor},${darkColor}`);
return (
<>
<Link id={uniqueId} {...rest}>
{children}
</Link>
<UnstyledLink className={`t_${uniqueId}`} {...rest}>
{children}
<style
// workaround to have react combine all of the inline styles into a single <style> tag in the <head>, see:
// workaround to have react combine all of these inline styles into a single <style> tag up top, see:
// https://react.dev/reference/react-dom/components/style#rendering-an-inline-css-stylesheet
href={uniqueId}
precedence={styles.page}
>
{`.${styles.page} #${uniqueId}{--colors-link:${lightColor};--colors-linkUnderline:${rgba(lightColor, 0.4)}}[data-theme="dark"] .${styles.page} #${uniqueId}{--colors-link:${darkColor};--colors-linkUnderline:${rgba(darkColor, 0.4)}}`}
{`.t_${uniqueId}{--colors-link:${lightColor};--colors-linkUnderline:${rgba(lightColor, 0.4)}}[data-theme="dark"] .t_${uniqueId}{--colors-link:${darkColor};--colors-linkUnderline:${rgba(darkColor, 0.4)}}`}
</style>
</>
</UnstyledLink>
);
};
@ -45,113 +43,103 @@ export default function Page() {
<h2>
I'm a frontend web developer based in the{" "}
<ColorfulLink
<Link
href="https://www.youtube-nocookie.com/embed/rLwbzGyC6t4?hl=en&amp;fs=1&amp;showinfo=1&amp;rel=0&amp;iv_load_policy=3"
title='"Boston Accent Trailer - Late Night with Seth Meyers" on YouTube'
lightColor="#fb4d42"
darkColor="#ff5146"
>
Boston
</ColorfulLink>{" "}
</Link>{" "}
area.
</h2>
<p>
I specialize in{" "}
<ColorfulLink
href="https://reactjs.org/"
title="React Official Website"
lightColor="#1091b3"
darkColor="#6fcbe3"
>
<Link href="https://reactjs.org/" title="React Official Website" lightColor="#1091b3" darkColor="#6fcbe3">
React
</ColorfulLink>{" "}
</Link>{" "}
and{" "}
<ColorfulLink
<Link
href="https://timkadlec.com/remembers/2020-04-21-the-cost-of-javascript-frameworks/"
title='"The Cost of Javascript Frameworks" by Tim Kadlec'
lightColor="#f48024"
darkColor="#e18431"
>
vanilla JavaScript
</ColorfulLink>{" "}
</Link>{" "}
to make nifty{" "}
<ColorfulLink href="https://jamstack.wtf/" title="WTF is Jamstack?" lightColor="#04a699" darkColor="#08bbac">
<Link href="https://jamstack.wtf/" title="WTF is Jamstack?" lightColor="#04a699" darkColor="#08bbac">
Jamstack sites
</ColorfulLink>{" "}
</Link>{" "}
with dynamic{" "}
<ColorfulLink
href="https://nodejs.org/en/"
title="Node.js Official Website"
lightColor="#6fbc4e"
darkColor="#84d95f"
>
<Link href="https://nodejs.org/en/" title="Node.js Official Website" lightColor="#6fbc4e" darkColor="#84d95f">
Node.js
</ColorfulLink>{" "}
</Link>{" "}
services. But I still know my way around less buzzwordy stacks like{" "}
<ColorfulLink
<Link
href="https://www.jetbrains.com/lp/php-25/"
title="25 Years of PHP History"
lightColor="#8892bf"
darkColor="#a4afe3"
>
LAMP
</ColorfulLink>
</Link>
, too.
</p>
<p>
Whenever possible, I also apply my experience in{" "}
<ColorfulLink
<Link
href="https://bugcrowd.com/jakejarvis"
title="Jake Jarvis on Bugcrowd"
lightColor="#00b81a"
darkColor="#57f06d"
>
application security
</ColorfulLink>
</Link>
,{" "}
<ColorfulLink
<Link
href="https://www.cloudflare.com/learning/serverless/what-is-serverless/"
title='"What is serverless computing?" on Cloudflare'
lightColor="#0098ec"
darkColor="#43b9fb"
>
serverless stacks
</ColorfulLink>
</Link>
, and{" "}
<ColorfulLink
<Link
href="https://github.com/jakejarvis?tab=repositories&q=github-actions&type=source&language=&sort=stargazers"
title='My repositories tagged with "github-actions" on GitHub'
lightColor="#ff6200"
darkColor="#f46c16"
>
DevOps automation
</ColorfulLink>
</Link>
.
</p>
<p>
I fell in love with{" "}
<ColorfulLink
<Link
href="/previously"
title="My Terrible, Horrible, No Good, Very Bad First Websites"
lightColor="#4169e1"
darkColor="#8ca9ff"
>
frontend web design
</ColorfulLink>{" "}
</Link>{" "}
and{" "}
<ColorfulLink
<Link
href={"/notes/my-first-code" as Route}
title="Jake's Bulletin Board, circa 2003"
lightColor="#9932cc"
darkColor="#d588fb"
>
backend programming
</ColorfulLink>{" "}
</Link>{" "}
when my only source of income was{" "}
<ColorfulLink
<Link
href="/birthday"
title="🎉 Cranky Birthday Boy on VHS Tape 📼"
lightColor="#e40088"
@ -161,74 +149,74 @@ export default function Page() {
}}
>
the Tooth Fairy
</ColorfulLink>
</Link>
. <span style={{ color: "var(--colors-mediumLight)" }}>I've improved a bit since then, I think? 🤷</span>
</p>
<p>
Over the years, some of my side projects{" "}
<ColorfulLink
<Link
href="/leo"
title="Powncer segment on The Lab with Leo Laporte (G4techTV)"
lightColor="#ff1b1b"
darkColor="#f06060"
>
have
</ColorfulLink>{" "}
<ColorfulLink
</Link>{" "}
<Link
href="https://tuftsdaily.com/news/2012/04/06/student-designs-iphone-joeytracker-app/"
title='"Student designs iPhone JoeyTracker app" on The Tufts Daily'
lightColor="#f78200"
darkColor="#fd992a"
>
been
</ColorfulLink>{" "}
<ColorfulLink
</Link>{" "}
<Link
href="https://www.google.com/books/edition/The_Facebook_Effect/RRUkLhyGZVgC?hl=en&gbpv=1&dq=%22jake%20jarvis%22&pg=PA226&printsec=frontcover&bsq=%22jake%20jarvis%22"
title='"The Facebook Effect" by David Kirkpatrick (Google Books)'
lightColor="#f2b702"
darkColor="#ffcc2e"
>
featured
</ColorfulLink>{" "}
<ColorfulLink
</Link>{" "}
<Link
href="https://money.cnn.com/2007/06/01/technology/facebookplatform.fortune/index.htm"
title='"The new Facebook is on a roll" on CNN Money'
lightColor="#5ebd3e"
darkColor="#78df55"
>
by
</ColorfulLink>{" "}
<ColorfulLink
</Link>{" "}
<Link
href="https://www.wired.com/2007/04/our-web-servers/"
title='"Middio: A YouTube Scraper for Major Label Music Videos" on Wired'
lightColor="#009cdf"
darkColor="#29bfff"
>
various
</ColorfulLink>{" "}
<ColorfulLink
</Link>{" "}
<Link
href="https://gigaom.com/2009/10/06/fresh-faces-in-tech-10-kid-entrepreneurs-to-watch/6/"
title='"Fresh Faces in Tech: 10 Kid Entrepreneurs to Watch" on Gigaom'
lightColor="#3e49bb"
darkColor="#7b87ff"
>
media
</ColorfulLink>{" "}
<ColorfulLink
</Link>{" "}
<Link
href="https://adage.com/article/small-agency-diary/client-ceo-s-son/116723/"
title='"Your Next Client? The CEO&#39;s Son" on Advertising Age'
lightColor="#973999"
darkColor="#db60dd"
>
outlets
</ColorfulLink>
</Link>
.
</p>
<p>
You can find my work on{" "}
<ColorfulLink
<Link
href="https://github.com/jakejarvis"
rel="me"
title="Jake Jarvis on GitHub"
@ -236,9 +224,9 @@ export default function Page() {
darkColor="#a379f0"
>
GitHub
</ColorfulLink>{" "}
</Link>{" "}
and{" "}
<ColorfulLink
<Link
href="https://www.linkedin.com/in/jakejarvis/"
rel="me"
title="Jake Jarvis on LinkedIn"
@ -246,13 +234,13 @@ export default function Page() {
darkColor="#3b9dd2"
>
LinkedIn
</ColorfulLink>
</Link>
. I'm always available to connect over{" "}
<ColorfulLink href="/contact" title="Send an email" lightColor="#de0c0c" darkColor="#ff5050">
<Link href="/contact" title="Send an email" lightColor="#de0c0c" darkColor="#ff5050">
email
</ColorfulLink>{" "}
</Link>{" "}
<sup>
<ColorfulLink
<Link
href={"/pubkey.asc" as Route}
rel="pgpkey authn"
title="My Public Key"
@ -278,10 +266,10 @@ export default function Page() {
>
2B0C 9CF2 51E6 9A39
</span>
</ColorfulLink>
</Link>
</sup>
,{" "}
<ColorfulLink
<Link
href="https://bsky.app/profile/jarv.is"
rel="me"
title="Jake Jarvis on Bluesky"
@ -289,9 +277,9 @@ export default function Page() {
darkColor="#208bfe"
>
Bluesky
</ColorfulLink>
</Link>
, or{" "}
<ColorfulLink
<Link
href="https://fediverse.jarv.is/@jake"
rel="me"
title="Jake Jarvis on Mastodon"
@ -299,7 +287,7 @@ export default function Page() {
darkColor="#7b87ff"
>
Mastodon
</ColorfulLink>{" "}
</Link>{" "}
as well!
</p>
</div>

View File

@ -16,7 +16,6 @@
border-radius: var(--radii-corner);
font-size: 0.9em;
color: var(--colors-mediumDark);
transition: border var(--transitions-fade);
}
.card .name {

View File

@ -28,7 +28,6 @@
--colors-codeDeletion: #ff1b1b;
--sizes-maxLayoutWidth: 865px;
--radii-corner: 0.6rem;
--transitions-fade: 0.25s ease;
}
[data-theme="dark"] {

View File

@ -14,9 +14,6 @@
background-color: var(--colors-codeBackground);
border: 1px solid var(--colors-kindaLight);
border-radius: var(--radii-corner);
transition:
background var(--transitions-fade),
border var(--transitions-fade);
}
.codeBlock :global(.line-number)::before {
@ -99,7 +96,4 @@
border: 1px solid var(--colors-kindaLight);
border-top-right-radius: var(--radii-corner);
border-bottom-left-radius: var(--radii-corner);
transition:
background var(--transitions-fade),
border var(--transitions-fade);
}

View File

@ -5,7 +5,4 @@
background-color: var(--colors-codeBackground);
border: 1px solid var(--colors-kindaLight);
border-radius: var(--radii-corner);
transition:
background var(--transitions-fade),
border var(--transitions-fade);
}

View File

@ -5,9 +5,6 @@
border-top: 1px solid var(--colors-kindaLight);
background-color: var(--colors-backgroundOuter);
color: var(--colors-mediumDark);
transition:
background var(--transitions-fade),
border var(--transitions-fade);
}
.row {
@ -50,34 +47,28 @@
.heart {
display: inline-block;
color: var(--colors-error);
animation: pulse 10s ease 7.5s infinite;
}
@media (prefers-reduced-motion: no-preference) {
.heart {
animation: pulse 10s ease 7.5s infinite;
will-change: transform;
@keyframes pulse {
0% {
transform: scale(1);
}
@keyframes pulse {
0% {
transform: scale(1);
}
2% {
transform: scale(1.25);
}
4% {
transform: scale(1);
}
6% {
transform: scale(1.2);
}
8% {
transform: scale(1);
}
/* pause for ~9 out of 10 seconds */
100% {
transform: scale(1);
}
2% {
transform: scale(1.25);
}
4% {
transform: scale(1);
}
6% {
transform: scale(1.2);
}
8% {
transform: scale(1);
}
/* pause for ~9 out of 10 seconds */
100% {
transform: scale(1);
}
}

View File

@ -4,9 +4,6 @@
padding: 0.7em 1.5em;
border-bottom: 1px solid var(--colors-kindaLight);
background-color: var(--colors-backgroundHeader);
transition:
background var(--transitions-fade),
border var(--transitions-fade);
/* make sticky */
position: sticky;

View File

@ -20,9 +20,3 @@
background: none !important;
transition: none !important;
}
@media (prefers-reduced-motion: reduce) {
.link {
transition: none !important;
}
}

View File

@ -1,8 +1,8 @@
"use client";
import { useEffect, useId } from "react";
import { animated, Globals, useSpring, useReducedMotion } from "@react-spring/web";
import { useFirstMountState, useHasMounted, useTheme } from "../../hooks";
import { useHasMounted, useTheme } from "../../hooks";
import { FiSun, FiMoon } from "react-icons/fi";
import { BsThreeDots } from "react-icons/bs";
import styles from "./ThemeToggle.module.css";
@ -13,140 +13,24 @@ export type ThemeToggleProps = {
const ThemeToggle = ({ className }: ThemeToggleProps) => {
const hasMounted = useHasMounted();
const { theme, setTheme } = useTheme();
const isFirstMount = useFirstMountState();
const prefersReducedMotion = useReducedMotion() ?? false;
const maskId = useId(); // SSR-safe ID to cross-reference areas of the SVG
// default to light since `theme` might be undefined
const safeTheme = theme === "dark" ? theme : "light";
// accessibility: disable animation if user prefers reduced motion
useEffect(() => {
Globals.assign({
skipAnimation: isFirstMount || prefersReducedMotion,
});
}, [isFirstMount, prefersReducedMotion]);
// modified from https://jfelix.info/blog/using-react-spring-to-animate-svg-icons-dark-mode-toggle
const springProperties = {
light: {
svg: {
transform: "rotate(90deg)",
},
circle: {
r: 5,
},
mask: {
cx: "100%",
cy: "0%",
},
lines: {
opacity: 1,
},
},
dark: {
svg: {
transform: "rotate(40deg)",
},
circle: {
r: 9,
},
mask: {
cx: "50%",
cy: "23%",
},
lines: {
opacity: 0,
},
},
springConfig: { mass: 4, tension: 250, friction: 35 },
};
const { svg, circle, mask, lines } = springProperties[safeTheme];
const svgContainerProps = useSpring({
...svg,
config: springProperties.springConfig,
});
const centerCircleProps = useSpring({
...circle,
config: springProperties.springConfig,
});
const maskedCircleProps = useSpring({
...mask,
config: springProperties.springConfig,
});
const linesProps = useSpring({
...lines,
config: springProperties.springConfig,
});
// render a blank div of the same size to avoid layout shifting until we're fully mounted and self-aware
// render a placeholder icon to avoid layout shifting until we're fully mounted and self-aware
if (!hasMounted) {
return (
<div className={styles.toggle}>
<div className={className} />
<BsThreeDots className={className} style={{ fill: "var(--colors-mediumLight)" }} />
</div>
);
}
return (
<button
onClick={() => setTheme(safeTheme === "light" ? "dark" : "light")}
onClick={() => setTheme(theme === "light" ? "dark" : "light")}
className={styles.toggle}
title={safeTheme === "light" ? "Toggle Dark Mode" : "Toggle Light Mode"}
aria-label={safeTheme === "light" ? "Toggle Dark Mode" : "Toggle Light Mode"}
title={theme === "light" ? "Toggle Dark Mode" : "Toggle Light Mode"}
aria-label={theme === "light" ? "Toggle Dark Mode" : "Toggle Light Mode"}
>
{/* @ts-ignore */}
<animated.svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
style={{
...svgContainerProps,
}}
className={className}
aria-hidden
>
<mask id={`mask-${maskId}`}>
<rect x="0" y="0" width="100%" height="100%" fill="white" />
<animated.circle
r="9"
fill="black"
// @ts-ignore
style={maskedCircleProps}
/>
</mask>
{/* circle shared by both the sun and crescent moon */}
<animated.circle
cx="12"
cy="12"
fill="currentColor"
mask={`url(#mask-${maskId})`}
// @ts-ignore
style={centerCircleProps}
/>
{/* sunrays pulled from https://github.com/feathericons/feather/blob/734f3f51144e383cfdc6d0916831be8d1ad2a749/icons/sun.svg?short_path=fea872c#L13 */}
{/* @ts-ignore */}
<animated.g stroke="currentColor" style={linesProps}>
<line x1="12" y1="1" x2="12" y2="3" />
<line x1="12" y1="21" x2="12" y2="23" />
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64" />
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78" />
<line x1="1" y1="12" x2="3" y2="12" />
<line x1="21" y1="12" x2="23" y2="12" />
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36" />
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22" />
</animated.g>
</animated.svg>
{theme === "light" ? <FiSun className={className} /> : <FiMoon className={className} />}
</button>
);
};

View File

@ -76,6 +76,7 @@ export const ThemeProvider = ({ children }: PropsWithChildren) => {
return (
<ThemeContext.Provider value={providerValues}>
<script
id="restore-theme"
// unminified: https://gist.github.com/jakejarvis/79b0ec8506bc843023546d0d29861bf0
dangerouslySetInnerHTML={{
__html: `(()=>{try{const e=document.documentElement,t="undefined"!=typeof Storage?window.localStorage.getItem("theme"):null,a=(t&&"dark"===t)??window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";e.dataset.theme=a,e.style.colorScheme=a}catch(e){}})()`,

View File

@ -1,4 +1,3 @@
export { default as useFirstMountState } from "./useFirstMountState";
export { default as useHasMounted } from "./useHasMounted";
export { default as useLocalStorage } from "./useLocalStorage";
export { default as useMediaQuery } from "./useMediaQuery";

View File

@ -1,15 +0,0 @@
import { useRef } from "react";
const useFirstMountState = (): boolean => {
const isFirstMount = useRef(true);
if (isFirstMount.current) {
isFirstMount.current = false;
return true;
}
return isFirstMount.current;
};
export default useFirstMountState;

View File

@ -20,6 +20,6 @@ export function middleware(request: NextRequest) {
export const config = {
// save compute time by skipping middleware for static and metadata files
matcher: [
"/((?!_next/static|_next/image|_vercel/|static|.well-known|favicon.ico|icon.png|apple-icon.png|manifest.webmanifest).*)",
"/((?!_next/static|_next/image|_vercel|static|.well-known|favicon.ico|icon.png|apple-icon.png|manifest.webmanifest).*)",
],
};

View File

@ -19,16 +19,16 @@
"postinstall": "prisma generate"
},
"dependencies": {
"@emotion/hash": "^0.9.2",
"@giscus/react": "^3.1.0",
"@mdx-js/loader": "^3.1.0",
"@mdx-js/react": "^3.1.0",
"@next/bundle-analyzer": "15.2.2-canary.4",
"@next/mdx": "15.2.2-canary.4",
"@next/third-parties": "15.2.2-canary.4",
"@next/bundle-analyzer": "15.2.2-canary.5",
"@next/mdx": "15.2.2-canary.5",
"@next/third-parties": "15.2.2-canary.5",
"@octokit/graphql": "^8.2.1",
"@octokit/graphql-schema": "^15.26.0",
"@prisma/client": "^6.4.1",
"@react-spring/web": "^9.7.5",
"@vercel/analytics": "^1.5.0",
"clsx": "^2.1.1",
"comma-number": "^2.1.0",
@ -36,9 +36,8 @@
"dayjs": "^1.11.13",
"fast-glob": "^3.3.3",
"feed": "^4.2.2",
"gray-matter": "^4.0.3",
"modern-normalize": "^3.0.1",
"next": "15.2.2-canary.4",
"next": "15.2.2-canary.5",
"obj-str": "^1.1.0",
"p-map": "^7.0.3",
"p-memoize": "^7.1.1",
@ -80,7 +79,7 @@
"@types/react-is": "^19.0.0",
"cross-env": "^7.0.3",
"eslint": "^9.22.0",
"eslint-config-next": "15.2.2-canary.4",
"eslint-config-next": "15.2.2-canary.5",
"eslint-config-prettier": "^10.1.1",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jsx-a11y": "^6.10.2",

285
pnpm-lock.yaml generated
View File

@ -8,6 +8,9 @@ importers:
.:
dependencies:
'@emotion/hash':
specifier: ^0.9.2
version: 0.9.2
'@giscus/react':
specifier: ^3.1.0
version: 3.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@ -18,14 +21,14 @@ importers:
specifier: ^3.1.0
version: 3.1.0(@types/react@19.0.10)(react@19.0.0)
'@next/bundle-analyzer':
specifier: 15.2.2-canary.4
version: 15.2.2-canary.4
specifier: 15.2.2-canary.5
version: 15.2.2-canary.5
'@next/mdx':
specifier: 15.2.2-canary.4
version: 15.2.2-canary.4(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.0.10)(react@19.0.0))
specifier: 15.2.2-canary.5
version: 15.2.2-canary.5(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.0.10)(react@19.0.0))
'@next/third-parties':
specifier: 15.2.2-canary.4
version: 15.2.2-canary.4(next@15.2.2-canary.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)
specifier: 15.2.2-canary.5
version: 15.2.2-canary.5(next@15.2.2-canary.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)
'@octokit/graphql':
specifier: ^8.2.1
version: 8.2.1
@ -35,12 +38,9 @@ importers:
'@prisma/client':
specifier: ^6.4.1
version: 6.4.1(prisma@6.4.1(typescript@5.8.2))(typescript@5.8.2)
'@react-spring/web':
specifier: ^9.7.5
version: 9.7.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@vercel/analytics':
specifier: ^1.5.0
version: 1.5.0(next@15.2.2-canary.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)
version: 1.5.0(next@15.2.2-canary.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)
clsx:
specifier: ^2.1.1
version: 2.1.1
@ -59,15 +59,12 @@ importers:
feed:
specifier: ^4.2.2
version: 4.2.2
gray-matter:
specifier: ^4.0.3
version: 4.0.3
modern-normalize:
specifier: ^3.0.1
version: 3.0.1
next:
specifier: 15.2.2-canary.4
version: 15.2.2-canary.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
specifier: 15.2.2-canary.5
version: 15.2.2-canary.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
obj-str:
specifier: ^1.1.0
version: 1.1.0
@ -187,8 +184,8 @@ importers:
specifier: ^9.22.0
version: 9.22.0
eslint-config-next:
specifier: 15.2.2-canary.4
version: 15.2.2-canary.4(eslint@9.22.0)(typescript@5.8.2)
specifier: 15.2.2-canary.5
version: 15.2.2-canary.5(eslint@9.22.0)(typescript@5.8.2)
eslint-config-prettier:
specifier: ^10.1.1
version: 10.1.1(eslint@9.22.0)
@ -254,6 +251,9 @@ packages:
'@emnapi/runtime@1.3.1':
resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==}
'@emotion/hash@0.9.2':
resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==}
'@esbuild/aix-ppc64@0.25.0':
resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==}
engines: {node: '>=18'}
@ -605,17 +605,17 @@ packages:
'@types/react': '>=16'
react: '>=16'
'@next/bundle-analyzer@15.2.2-canary.4':
resolution: {integrity: sha512-gRn3n9RIZxOrf7rSP55XwxZ5luyd5URgggoEWinEMgSWBaVMnlyIemv8dDCMc4rrQnqBwdVMUe2GgR9UQPZ3+g==}
'@next/bundle-analyzer@15.2.2-canary.5':
resolution: {integrity: sha512-Toc7NVyQ3NNsynV/LYUecxtcuY+WPptPz2WbbA6Ym0ltYjeKoR8x3QMlJyHVMSO0iaEoF3Nbbu2+E//g4dV5TQ==}
'@next/env@15.2.2-canary.4':
resolution: {integrity: sha512-m4jjOoJwFv6bmGq1KiAT6me8pkIvjPA6qWc1aRyUxzVzg/7Pm3b5BP2ze8jNwdjIwPmMQGtV0Lv50vLeDUlC0A==}
'@next/env@15.2.2-canary.5':
resolution: {integrity: sha512-4ccIKIftEwHvGR7o5caeQhn89rCkh/6SD3ijDPWIWe/8IAnuFJ27GouOfxdMJF8Md0aOeVn0qsJyMVRjPoyr4Q==}
'@next/eslint-plugin-next@15.2.2-canary.4':
resolution: {integrity: sha512-EZyiA2gkgJzUMZhU73sv998+s96YAoElfZrGwjXkb4XuXAAmdvsfuqzNGBZWGk4M4t3AojuTYZOZA24eQVGlgQ==}
'@next/eslint-plugin-next@15.2.2-canary.5':
resolution: {integrity: sha512-htXMNd6JY+CwRpiRqViwnGQg3p14Z+MK8/IrunlhgO5a44UqC4wXJ+MuL/PFqajmcLVIcMYNdx3dQg/2yDdizA==}
'@next/mdx@15.2.2-canary.4':
resolution: {integrity: sha512-c3TYNwqE7TJmgZKMru5+lVV92lTkVdxqw4C4rTKCJhDLZZ9OkLi4mUE78BcG+gbNen86gGHau4+yhJKATI1otQ==}
'@next/mdx@15.2.2-canary.5':
resolution: {integrity: sha512-raRuk2KaroLw4LMBPdsbuyZFb/nrsyuzHdqIi7oNbRmxZUIAo8GLMoOD8lNc3z7kwKL1GbXYvUmAs1AcM+Ldag==}
peerDependencies:
'@mdx-js/loader': '>=0.15.0'
'@mdx-js/react': '>=0.15.0'
@ -625,56 +625,56 @@ packages:
'@mdx-js/react':
optional: true
'@next/swc-darwin-arm64@15.2.2-canary.4':
resolution: {integrity: sha512-NI4UlAkBsnUXT8KDI0tncL6pGqmYY7uhQhghxhulBADO44wNn6Ktg7HLky9NOz2NnTB54XUcITN3IJ7g7LsfAw==}
'@next/swc-darwin-arm64@15.2.2-canary.5':
resolution: {integrity: sha512-zr+j2B+ZqddFoxwn7/Vnh0Q986GFz1DlEy7xkvtMgBk4ciM917NZOjcOpez380XXC4OOb8fmk+t6EXwBwYzZgg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
'@next/swc-darwin-x64@15.2.2-canary.4':
resolution: {integrity: sha512-r41aXyIdLe7kM2GZDRpxdO8EmwGykV9MNY1JxZgI09ON+3j/0+jd89IhtJauWWlPdUgAkJtJ2HJ6a0oCycHbRw==}
'@next/swc-darwin-x64@15.2.2-canary.5':
resolution: {integrity: sha512-Y9idAkGryVuUsQ1ZnIyyaEkKWoTnc5yrwGYh8bC4szezleLi/zZphSQL/BIprZlMTveZ5co8+eyRyiSCAEPn0g==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
'@next/swc-linux-arm64-gnu@15.2.2-canary.4':
resolution: {integrity: sha512-WCvmjDAPuiFsmpfamn6taJYvqBjYwzRPCw6ZfYNxmsDYU84em70KL9HmNe72jTfOa95IK5u7JROyg7k3t5LvqA==}
'@next/swc-linux-arm64-gnu@15.2.2-canary.5':
resolution: {integrity: sha512-NLEG8fki60/hyjz/u9QPLPl5ljyntgbY3GFiABMD75geTyeb6GNrpXHq8hOsPx9RviTSRXZQLni1MQoNRiId7w==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@next/swc-linux-arm64-musl@15.2.2-canary.4':
resolution: {integrity: sha512-22LJu9qVTgyYrzv4J8H00OQ/jgJHZiH676FMhzvgkncyISPeMFq56ZrH2gu98Ifv57AV2l78aHPGCMS/vad3UA==}
'@next/swc-linux-arm64-musl@15.2.2-canary.5':
resolution: {integrity: sha512-GM5Yg8dvCLkhCI/IBmvqQSUiApW8Bz7fFND/hDx+jtja+sV9sCcINpf5xTxGklKcKYIZTi7iNTS7dvi69P43AA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@next/swc-linux-x64-gnu@15.2.2-canary.4':
resolution: {integrity: sha512-EjEIwHcldoJgiuwYTiaXI/H/B+U3FkNac552aPWQF9Up97fJwOiEEDaaBR9q/+b7KU4Qlr/l1XlfRJz+s/DeeA==}
'@next/swc-linux-x64-gnu@15.2.2-canary.5':
resolution: {integrity: sha512-2M6Ly6xQkexLxuooP7/R6ut75VgLinO93YVawSnfmS0hhjAeD5Q0ZVCZLg6hEz9BwxhfdzA7DyUR14c5J5fWCQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@next/swc-linux-x64-musl@15.2.2-canary.4':
resolution: {integrity: sha512-Vfs+HDa3W+y9lXYnGxYIyu9JHYwKQVDmweXULACMxDVyEicrKyRlcsdn97yRzoccMbDUjOlCgBYn8Hw0191oqA==}
'@next/swc-linux-x64-musl@15.2.2-canary.5':
resolution: {integrity: sha512-692Hj3Blwn311gb9TLM6VcQBA2BPP8eoRSTfUZTbLUBaMAEmUfSrT7qvDdL60h3vUTkFARYmxObwFMxWeis4eQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@next/swc-win32-arm64-msvc@15.2.2-canary.4':
resolution: {integrity: sha512-otcVJ2p66X1RrXqj+l6mJRXNNYUnSbEJTOHXgq4IKbvxbO1MsiXF/43jRo1O3kcwl8XmkMVlJgpsjOhooCf4Sg==}
'@next/swc-win32-arm64-msvc@15.2.2-canary.5':
resolution: {integrity: sha512-wCEbR0LUuwG8KEQwoVnE0gNwtRMyd3a3i3N+nHToTO7hWZXV5wVDEs+zDHaIO8H2RrufyrskB8apLidwwH5t/g==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
'@next/swc-win32-x64-msvc@15.2.2-canary.4':
resolution: {integrity: sha512-mt3OtYuIK8HqON//39UP5SRwDxCFv7+P3zgpMoYC+nJGivraAlGkloQJnx1vVA5QNbUtuCvgwnyPZYPSGVisvA==}
'@next/swc-win32-x64-msvc@15.2.2-canary.5':
resolution: {integrity: sha512-2uL0I2xO87SUQjJVo0YDUBXUvIFZo8wRpNIxiAJBg8cJyn0E9Nnb5ET9J5HI2W1JnqEDD7wLO6CvqOJ4q+j9sQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
'@next/third-parties@15.2.2-canary.4':
resolution: {integrity: sha512-NmVhfb22o8E1/d7X58AC6kpcHnufJTy7JLYkff2jMBKqTJelio+mQWupujSkjc46qysmGBxwrRXVybyLVvfFtw==}
'@next/third-parties@15.2.2-canary.5':
resolution: {integrity: sha512-HrUTYKSb29bqbgIwNuexH/SAX9riQQzXxjeyWiZ/htNXeBcTk3PzFAXGPyXwSbr2s81GUfBUXUwR8sbCPn47HQ==}
peerDependencies:
next: ^13.0.0 || ^14.0.0 || ^15.0.0
react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
@ -792,33 +792,6 @@ packages:
react: ^18.0 || ^19.0 || ^19.0.0-rc
react-dom: ^18.0 || ^19.0 || ^19.0.0-rc
'@react-spring/animated@9.7.5':
resolution: {integrity: sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
'@react-spring/core@9.7.5':
resolution: {integrity: sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
'@react-spring/rafz@9.7.5':
resolution: {integrity: sha512-5ZenDQMC48wjUzPAm1EtwQ5Ot3bLIAwwqP2w2owG5KoNdNHpEJV263nGhCeKKmuA3vG2zLLOdu3or6kuDjA6Aw==}
'@react-spring/shared@9.7.5':
resolution: {integrity: sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
'@react-spring/types@9.7.5':
resolution: {integrity: sha512-HVj7LrZ4ReHWBimBvu2SKND3cDVUPWKLqRTmWe/fNY6o1owGOX0cAHbdPDTMelgBlVbrTKrre6lFkhqGZErK/g==}
'@react-spring/web@9.7.5':
resolution: {integrity: sha512-lmvqGwpe+CSttsWNZVr+Dg62adtKhauGwLyGE/RRyZ8AAMLgb9x3NDMA5RMElXo+IMyTkPp7nxTB8ZQlmhb6JQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
@ -1028,9 +1001,6 @@ packages:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@ -1429,8 +1399,8 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
eslint-config-next@15.2.2-canary.4:
resolution: {integrity: sha512-4ObuFJ84oceK+4pB0bcZM66LiFhuBtd4g9skry3GtD486aWI/q9XZMI5HtBK7g080J+7Uul8nbyaOukQ17QQzA==}
eslint-config-next@15.2.2-canary.5:
resolution: {integrity: sha512-fG0yRdIVz1ZtsUyUL5hSKuFy1EWlnir1oGokz31YN0mZUn3xQ7UgmeVFBiQWOjGhAnEPewQrRRO3WV8DSTVpaw==}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
typescript: '>=3.3.1'
@ -1565,11 +1535,6 @@ packages:
resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
hasBin: true
esquery@1.6.0:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
@ -1617,10 +1582,6 @@ packages:
resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
engines: {node: '>=16.17'}
extend-shallow@2.0.1:
resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
engines: {node: '>=0.10.0'}
extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
@ -1776,10 +1737,6 @@ packages:
resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==}
engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
gray-matter@4.0.3:
resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
engines: {node: '>=6.0'}
gzip-size@6.0.0:
resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
engines: {node: '>=10'}
@ -1969,10 +1926,6 @@ packages:
is-empty@1.2.0:
resolution: {integrity: sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==}
is-extendable@0.1.1:
resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
engines: {node: '>=0.10.0'}
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@ -2093,10 +2046,6 @@ packages:
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
js-yaml@3.14.1:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
hasBin: true
js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
@ -2125,10 +2074,6 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
kind-of@6.0.3:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
kleur@4.1.5:
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
engines: {node: '>=6'}
@ -2421,8 +2366,8 @@ packages:
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
next@15.2.2-canary.4:
resolution: {integrity: sha512-Apju+VEC86qN6gvM0JvsyCd46mEAlqupBz3apheFEoAjJBY+tsgFGLGFH+nqt/YJ2D1UEKh1g/HqqIqkQIDAog==}
next@15.2.2-canary.5:
resolution: {integrity: sha512-GF6u1RCx1/OvtIjF03Hd29Qypcxd0Sa0awGnElA/UMWye4DOkbGa/Ar85qWwuj6m686Qqvc3hMAsA3TdMOvZdA==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true
peerDependencies:
@ -2890,10 +2835,6 @@ packages:
schema-dts@1.1.5:
resolution: {integrity: sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==}
section-matter@1.0.0:
resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
engines: {node: '>=4'}
selderee@0.11.0:
resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==}
@ -2992,9 +2933,6 @@ packages:
spdx-license-ids@3.0.21:
resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==}
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
stable-hash@0.0.4:
resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==}
@ -3059,10 +2997,6 @@ packages:
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
engines: {node: '>=12'}
strip-bom-string@1.0.0:
resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
engines: {node: '>=0.10.0'}
strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
@ -3406,6 +3340,8 @@ snapshots:
tslib: 2.8.1
optional: true
'@emotion/hash@0.9.2': {}
'@esbuild/aix-ppc64@0.25.0':
optional: true
@ -3682,53 +3618,53 @@ snapshots:
'@types/react': 19.0.10
react: 19.0.0
'@next/bundle-analyzer@15.2.2-canary.4':
'@next/bundle-analyzer@15.2.2-canary.5':
dependencies:
webpack-bundle-analyzer: 4.10.1
transitivePeerDependencies:
- bufferutil
- utf-8-validate
'@next/env@15.2.2-canary.4': {}
'@next/env@15.2.2-canary.5': {}
'@next/eslint-plugin-next@15.2.2-canary.4':
'@next/eslint-plugin-next@15.2.2-canary.5':
dependencies:
fast-glob: 3.3.1
'@next/mdx@15.2.2-canary.4(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.0.10)(react@19.0.0))':
'@next/mdx@15.2.2-canary.5(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.0.10)(react@19.0.0))':
dependencies:
source-map: 0.7.4
optionalDependencies:
'@mdx-js/loader': 3.1.0(acorn@8.14.1)
'@mdx-js/react': 3.1.0(@types/react@19.0.10)(react@19.0.0)
'@next/swc-darwin-arm64@15.2.2-canary.4':
'@next/swc-darwin-arm64@15.2.2-canary.5':
optional: true
'@next/swc-darwin-x64@15.2.2-canary.4':
'@next/swc-darwin-x64@15.2.2-canary.5':
optional: true
'@next/swc-linux-arm64-gnu@15.2.2-canary.4':
'@next/swc-linux-arm64-gnu@15.2.2-canary.5':
optional: true
'@next/swc-linux-arm64-musl@15.2.2-canary.4':
'@next/swc-linux-arm64-musl@15.2.2-canary.5':
optional: true
'@next/swc-linux-x64-gnu@15.2.2-canary.4':
'@next/swc-linux-x64-gnu@15.2.2-canary.5':
optional: true
'@next/swc-linux-x64-musl@15.2.2-canary.4':
'@next/swc-linux-x64-musl@15.2.2-canary.5':
optional: true
'@next/swc-win32-arm64-msvc@15.2.2-canary.4':
'@next/swc-win32-arm64-msvc@15.2.2-canary.5':
optional: true
'@next/swc-win32-x64-msvc@15.2.2-canary.4':
'@next/swc-win32-x64-msvc@15.2.2-canary.5':
optional: true
'@next/third-parties@15.2.2-canary.4(next@15.2.2-canary.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)':
'@next/third-parties@15.2.2-canary.5(next@15.2.2-canary.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)':
dependencies:
next: 15.2.2-canary.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
next: 15.2.2-canary.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
react: 19.0.0
third-party-capital: 1.0.20
@ -3875,38 +3811,6 @@ snapshots:
react-dom: 19.0.0(react@19.0.0)
react-promise-suspense: 0.3.4
'@react-spring/animated@9.7.5(react@19.0.0)':
dependencies:
'@react-spring/shared': 9.7.5(react@19.0.0)
'@react-spring/types': 9.7.5
react: 19.0.0
'@react-spring/core@9.7.5(react@19.0.0)':
dependencies:
'@react-spring/animated': 9.7.5(react@19.0.0)
'@react-spring/shared': 9.7.5(react@19.0.0)
'@react-spring/types': 9.7.5
react: 19.0.0
'@react-spring/rafz@9.7.5': {}
'@react-spring/shared@9.7.5(react@19.0.0)':
dependencies:
'@react-spring/rafz': 9.7.5
'@react-spring/types': 9.7.5
react: 19.0.0
'@react-spring/types@9.7.5': {}
'@react-spring/web@9.7.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@react-spring/animated': 9.7.5(react@19.0.0)
'@react-spring/core': 9.7.5(react@19.0.0)
'@react-spring/shared': 9.7.5(react@19.0.0)
'@react-spring/types': 9.7.5
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
'@rtsao/scc@1.1.0': {}
'@rushstack/eslint-patch@1.10.5': {}
@ -4075,9 +3979,9 @@ snapshots:
'@ungap/structured-clone@1.3.0': {}
'@vercel/analytics@1.5.0(next@15.2.2-canary.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)':
'@vercel/analytics@1.5.0(next@15.2.2-canary.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)':
optionalDependencies:
next: 15.2.2-canary.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
next: 15.2.2-canary.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
react: 19.0.0
abbrev@2.0.0: {}
@ -4113,10 +4017,6 @@ snapshots:
ansi-styles@6.2.1: {}
argparse@1.0.10:
dependencies:
sprintf-js: 1.0.3
argparse@2.0.1: {}
aria-query@5.3.2: {}
@ -4613,9 +4513,9 @@ snapshots:
escape-string-regexp@5.0.0: {}
eslint-config-next@15.2.2-canary.4(eslint@9.22.0)(typescript@5.8.2):
eslint-config-next@15.2.2-canary.5(eslint@9.22.0)(typescript@5.8.2):
dependencies:
'@next/eslint-plugin-next': 15.2.2-canary.4
'@next/eslint-plugin-next': 15.2.2-canary.5
'@rushstack/eslint-patch': 1.10.5
'@typescript-eslint/eslint-plugin': 8.26.0(@typescript-eslint/parser@8.26.0(eslint@9.22.0)(typescript@5.8.2))(eslint@9.22.0)(typescript@5.8.2)
'@typescript-eslint/parser': 8.26.0(eslint@9.22.0)(typescript@5.8.2)
@ -4852,8 +4752,6 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.14.1)
eslint-visitor-keys: 3.4.3
esprima@4.0.1: {}
esquery@1.6.0:
dependencies:
estraverse: 5.3.0
@ -4917,10 +4815,6 @@ snapshots:
signal-exit: 4.1.0
strip-final-newline: 3.0.0
extend-shallow@2.0.1:
dependencies:
is-extendable: 0.1.1
extend@3.0.2: {}
fast-content-type-parse@2.0.1: {}
@ -5083,13 +4977,6 @@ snapshots:
graphql@16.10.0: {}
gray-matter@4.0.3:
dependencies:
js-yaml: 3.14.1
kind-of: 6.0.3
section-matter: 1.0.0
strip-bom-string: 1.0.0
gzip-size@6.0.0:
dependencies:
duplexer: 0.1.2
@ -5367,8 +5254,6 @@ snapshots:
is-empty@1.2.0: {}
is-extendable@0.1.1: {}
is-extglob@2.1.1: {}
is-finalizationregistry@1.1.1:
@ -5483,11 +5368,6 @@ snapshots:
js-tokens@4.0.0: {}
js-yaml@3.14.1:
dependencies:
argparse: 1.0.10
esprima: 4.0.1
js-yaml@4.1.0:
dependencies:
argparse: 2.0.1
@ -5515,8 +5395,6 @@ snapshots:
dependencies:
json-buffer: 3.0.1
kind-of@6.0.3: {}
kleur@4.1.5: {}
language-subtag-registry@0.3.23: {}
@ -6081,9 +5959,9 @@ snapshots:
natural-compare@1.4.0: {}
next@15.2.2-canary.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
next@15.2.2-canary.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
dependencies:
'@next/env': 15.2.2-canary.4
'@next/env': 15.2.2-canary.5
'@swc/counter': 0.1.3
'@swc/helpers': 0.5.15
busboy: 1.6.0
@ -6093,14 +5971,14 @@ snapshots:
react-dom: 19.0.0(react@19.0.0)
styled-jsx: 5.1.6(react@19.0.0)
optionalDependencies:
'@next/swc-darwin-arm64': 15.2.2-canary.4
'@next/swc-darwin-x64': 15.2.2-canary.4
'@next/swc-linux-arm64-gnu': 15.2.2-canary.4
'@next/swc-linux-arm64-musl': 15.2.2-canary.4
'@next/swc-linux-x64-gnu': 15.2.2-canary.4
'@next/swc-linux-x64-musl': 15.2.2-canary.4
'@next/swc-win32-arm64-msvc': 15.2.2-canary.4
'@next/swc-win32-x64-msvc': 15.2.2-canary.4
'@next/swc-darwin-arm64': 15.2.2-canary.5
'@next/swc-darwin-x64': 15.2.2-canary.5
'@next/swc-linux-arm64-gnu': 15.2.2-canary.5
'@next/swc-linux-arm64-musl': 15.2.2-canary.5
'@next/swc-linux-x64-gnu': 15.2.2-canary.5
'@next/swc-linux-x64-musl': 15.2.2-canary.5
'@next/swc-win32-arm64-msvc': 15.2.2-canary.5
'@next/swc-win32-x64-msvc': 15.2.2-canary.5
sharp: 0.33.5
transitivePeerDependencies:
- '@babel/core'
@ -6674,11 +6552,6 @@ snapshots:
schema-dts@1.1.5: {}
section-matter@1.0.0:
dependencies:
extend-shallow: 2.0.1
kind-of: 6.0.3
selderee@0.11.0:
dependencies:
parseley: 0.12.1
@ -6815,8 +6688,6 @@ snapshots:
spdx-license-ids@3.0.21: {}
sprintf-js@1.0.3: {}
stable-hash@0.0.4: {}
streamsearch@1.1.0: {}
@ -6914,8 +6785,6 @@ snapshots:
dependencies:
ansi-regex: 6.1.0
strip-bom-string@1.0.0: {}
strip-bom@3.0.0: {}
strip-final-newline@3.0.0: {}