diff --git a/app/contact/form.module.css b/app/contact/form.module.css index d3fa39b9..baf8b50f 100644 --- a/app/contact/form.module.css +++ b/app/contact/form.module.css @@ -5,7 +5,7 @@ border: 2px solid var(--colors-light); border-radius: 0.6em; color: var(--colors-text); - background-color: var(--colors-superDuperLight); + background-color: var(--colors-super-duper-light); } .input:focus { @@ -41,12 +41,12 @@ user-select: none; font-weight: 500; color: var(--colors-text); - background-color: var(--colors-kindaLight); + background-color: var(--colors-kinda-light); } .submitButton:hover, .submitButton:focus-visible { - color: var(--colors-superDuperLight); + color: var(--colors-super-duper-light); background-color: var(--colors-link); } diff --git a/app/global.css b/app/global.css index e46cab30..c5077ed6 100644 --- a/app/global.css +++ b/app/global.css @@ -1,6 +1,6 @@ body { font-family: var(--fonts-sans) !important; - background-color: var(--colors-backgroundInner); + background-color: var(--colors-background-inner); } code, diff --git a/app/hillary/page.tsx b/app/hillary/page.tsx index 3412b405..7ccc12aa 100644 --- a/app/hillary/page.tsx +++ b/app/hillary/page.tsx @@ -33,7 +33,7 @@ const Page = () => { fontSize: "0.9em", lineHeight: 1.8, margin: "1.25em 1em 0 1em", - color: "var(--colors-mediumLight)", + color: "var(--colors-medium-light)", }} > Video is property of{" "} diff --git a/app/leo/page.tsx b/app/leo/page.tsx index 47cbe078..5ff1b165 100644 --- a/app/leo/page.tsx +++ b/app/leo/page.tsx @@ -26,7 +26,7 @@ const Page = () => { fontSize: "0.9em", lineHeight: 1.8, margin: "1.25em 1em 0 1em", - color: "var(--colors-mediumLight)", + color: "var(--colors-medium-light)", }} > Video is property of{" "} diff --git a/app/page.tsx b/app/page.tsx index 732e0de3..9bc48a3f 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -28,7 +28,7 @@ const Link = ({ href={uniqueId} precedence={styles.page} > - {`.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)}}`} + {`.t_${uniqueId}{--colors-link:${lightColor};--colors-link-underline:${rgba(lightColor, 0.4)}}[data-theme="dark"] .t_${uniqueId}{--colors-link:${darkColor};--colors-link-underline:${rgba(darkColor, 0.4)}}`} ); @@ -150,7 +150,7 @@ const Page = () => { > the Tooth Fairy - . I've improved a bit since then, I think? 🤷 + . I've improved a bit since then, I think? 🤷

diff --git a/app/previously/page.module.css b/app/previously/page.module.css index f98f2933..9a9a5100 100644 --- a/app/previously/page.module.css +++ b/app/previously/page.module.css @@ -23,7 +23,7 @@ body:has(.wackyWrapper) a { width: 100%; display: block; margin: 0.6em 0; - border: 2px solid var(--colors-kindaLight); + border: 2px solid var(--colors-kinda-light); } .screenshot, diff --git a/app/previously/page.tsx b/app/previously/page.tsx index 415fc36d..79be2641 100644 --- a/app/previously/page.tsx +++ b/app/previously/page.tsx @@ -1,7 +1,6 @@ import PageTitle from "../../components/PageTitle"; import Link from "../../components/Link"; import Figure from "../../components/Figure"; -import CodeInline from "../../components/CodeInline"; import HorizontalRule from "../../components/HorizontalRule"; import { addMetadata } from "../../lib/helpers/metadata"; @@ -50,14 +49,14 @@ const Page = () => {

🚨 Trigger warning: excessive marquees, animated GIFs, Comic Sans, popups,{" "} - color: limegreen - {" "} + {" "} ahead...

diff --git a/app/projects/page.module.css b/app/projects/page.module.css index d530bd52..78dfbaf7 100644 --- a/app/projects/page.module.css +++ b/app/projects/page.module.css @@ -12,10 +12,10 @@ flex-grow: 1; width: 370px; padding: 1.2em 1.2em 0.8em; - border: 1px solid var(--colors-kindaLight); + border: 1px solid var(--colors-kinda-light); border-radius: 1em; font-size: 0.9em; - color: var(--colors-mediumDark); + color: var(--colors-medium-dark); } .card .name { diff --git a/app/themes.css b/app/themes.css index 95cdc72f..203f5f29 100644 --- a/app/themes.css +++ b/app/themes.css @@ -1,59 +1,37 @@ :root { - --colors-backgroundInner: #ffffff; - --colors-backgroundOuter: #fcfcfc; - --colors-backgroundHeader: rgb(252 252 252 / 70%); + --colors-background-inner: #ffffff; + --colors-background-outer: #fcfcfc; + --colors-background-header: rgb(252 252 252 / 70%); --colors-text: #202020; - --colors-mediumDark: #515151; + --colors-medium-dark: #515151; --colors-medium: #5e5e5e; - --colors-mediumLight: #757575; + --colors-medium-light: #757575; --colors-light: #d2d2d2; - --colors-kindaLight: #e3e3e3; - --colors-superLight: #f4f4f4; - --colors-superDuperLight: #fbfbfb; + --colors-kinda-light: #e3e3e3; + --colors-super-light: #f4f4f4; + --colors-super-duper-light: #fbfbfb; --colors-link: #0e6dc2; - --colors-linkUnderline: rgb(14 109 194 / 40%); + --colors-link-underline: rgb(14 109 194 / 40%); --colors-success: #44a248; --colors-error: #ff1b1b; --colors-warning: #f78200; - --colors-codeText: #313131; - --colors-codeBackground: #fdfdfd; - --colors-codeComment: #656e77; - --colors-codeKeyword: #029cb9; - --colors-codeAttribute: #70a800; - --colors-codeNamespace: #f92672; - --colors-codeLiteral: #ae81ff; - --colors-codePunctuation: #111111; - --colors-codeVariable: #d88200; - --colors-codeAddition: #44a248; - --colors-codeDeletion: #ff1b1b; } [data-theme="dark"] { - --colors-backgroundInner: #1e1e1e; - --colors-backgroundOuter: #252525; - --colors-backgroundHeader: rgb(37 37 37 / 85%); + --colors-background-inner: #1e1e1e; + --colors-background-outer: #252525; + --colors-background-header: rgb(37 37 37 / 85%); --colors-text: #f1f1f1; - --colors-mediumDark: #d7d7d7; + --colors-medium-dark: #d7d7d7; --colors-medium: #b1b1b1; - --colors-mediumLight: #959595; + --colors-medium-light: #959595; --colors-light: #646464; - --colors-kindaLight: #535353; - --colors-superLight: #272727; - --colors-superDuperLight: #1f1f1f; + --colors-kinda-light: #535353; + --colors-super-light: #272727; + --colors-super-duper-light: #1f1f1f; --colors-link: #88c7ff; - --colors-linkUnderline: rgb(136 199 255 / 40%); + --colors-link-underline: rgb(136 199 255 / 40%); --colors-success: #78df55; --colors-error: #ff5151; --colors-warning: #f2b702; - --colors-codeText: #e4e4e4; - --colors-codeBackground: #212121; - --colors-codeComment: #929292; - --colors-codeKeyword: #3b9dd2; - --colors-codeAttribute: #78df55; - --colors-codeNamespace: #f95757; - --colors-codeLiteral: #d588fb; - --colors-codePunctuation: #cccccc; - --colors-codeVariable: #fd992a; - --colors-codeAddition: #78df55; - --colors-codeDeletion: #ff5151; } diff --git a/app/zip/page.tsx b/app/zip/page.tsx index 6f4d43eb..733eefb7 100644 --- a/app/zip/page.tsx +++ b/app/zip/page.tsx @@ -1,5 +1,4 @@ import Link from "../../components/Link"; -import CodeBlock from "../../components/CodeBlock/CodeBlock"; import { addMetadata } from "../../lib/helpers/metadata"; import backgroundImg from "./sundar.jpg"; @@ -16,54 +15,57 @@ const Page = () => { return (
- - sundar@ - google: - ~${" "} - mv /root + sundar@google: + ~$ mv /root /stable_products_that_people_rely_on/ googledomains.zip /tmp/
- sundar@ - google: - ~${" "} - crontab{" "} - -l + sundar@google: + ~$ crontab{" "} + -l

- + # TODO(someone else): make super duper sure this only deletes actual zip files and *NOT* the sketchy domains ending with file extensions released by us & purchased on our registrar (which i just yeeted btw cuz i'm bored & also my evil superpowers are fueled by my reckless disregard for the greater good of the internet). - xoxo - sundar <3 + sundar <3
- @monthly     - rm{" "} - -f /tmp/ + @monthly     + rm -f /tmp/ *.zip

- sundar@ - google: - ~${" "} - reboot 0 -
+ sundar@google: + ~$ reboot 0 +
); }; diff --git a/components/Blockquote/Blockquote.module.css b/components/Blockquote/Blockquote.module.css index 04188a1f..b89de55f 100644 --- a/components/Blockquote/Blockquote.module.css +++ b/components/Blockquote/Blockquote.module.css @@ -2,5 +2,5 @@ margin-left: 0; padding-left: 1.25em; border-left: 0.25em solid var(--colors-link); - color: var(--colors-mediumDark); + color: var(--colors-medium-dark); } diff --git a/components/Code/Code.module.css b/components/Code/Code.module.css new file mode 100644 index 00000000..8396c43a --- /dev/null +++ b/components/Code/Code.module.css @@ -0,0 +1,85 @@ +figure:has(.highlighted) { + margin: 1em auto; + position: relative; + width: 100%; + background-color: var(--colors-background-header); +} + +.highlighted { + display: block; + overflow-x: auto; + padding: 1em; + font-size: 0.9em; + tab-size: 2px; + border: 1px solid var(--colors-kinda-light); + border-radius: 0.6em; +} + +.highlighted span { + color: var(--shiki-light); + font-style: var(--shiki-light-font-style); + font-weight: var(--shiki-light-font-weight); + text-decoration: var(--shiki-light-text-decoration); +} + +[data-theme="dark"] .highlighted span { + color: var(--shiki-dark); + font-style: var(--shiki-dark-font-style); + font-weight: var(--shiki-dark-font-weight); + text-decoration: var(--shiki-dark-text-decoration); +} + +.highlighted[data-line-numbers] { + counter-reset: line; +} + +.highlighted[data-line-numbers] > [data-line]::before { + display: inline-block; + width: 1em; + margin-right: 1.5em; + text-align: right; + color: var(--colors-medium-light); + counter-increment: line; + content: counter(line); + user-select: none; +} + +.highlighted[data-line-numbers-max-digits="2"] > [data-line]::before { + width: 1.25rem; +} + +.highlighted[data-line-numbers-max-digits="3"] > [data-line]::before { + width: 1.75rem; +} + +.inline { + padding: 0.2em 0.3em; + font-size: 0.925em; + page-break-inside: avoid; + background-color: var(--colors-background-outer); + border: 1px solid var(--colors-kinda-light); + border-radius: 0.6em; +} + +.copyButton { + position: absolute; + top: 0; + right: 0; + height: 3em; + width: 3em; + color: var(--colors-medium-dark); + border: 1px solid var(--colors-kinda-light); + border-top-right-radius: 0.6em; + border-bottom-left-radius: 0.6em; + background-color: var(--colors-background-header); + backdrop-filter: saturate(180%) blur(5px); +} + +.copyButton > svg { + vertical-align: middle; +} + +.copyButton:hover, +.copyButton:focus-visible { + color: var(--colors-link); +} diff --git a/components/Code/Code.tsx b/components/Code/Code.tsx index dac69026..6914eee6 100644 --- a/components/Code/Code.tsx +++ b/components/Code/Code.tsx @@ -1,38 +1,41 @@ -import CodeBlock from "../CodeBlock"; -import CodeInline from "../CodeInline"; +import clsx from "clsx"; +import CopyButton from "../CopyButton"; import type { ComponentPropsWithoutRef } from "react"; +import styles from "./Code.module.css"; + export type CodeProps = ComponentPropsWithoutRef<"code"> & { - forceBlock?: boolean; + "data-language"?: string; + "data-theme"?: string; }; // a simple wrapper component that "intelligently" picks between inline code and code blocks (w/ optional syntax // highlighting & a clipboard button) -const Code = ({ forceBlock, className, children, ...rest }: CodeProps) => { - // detect if this input has already been touched by prism.js via rehype - const classNames = className?.split(" "); - const prismEnabled = classNames?.includes("code-highlight"); - - if (prismEnabled || forceBlock) { +const Code = ({ + "data-language": dataLanguage, + "data-theme": dataTheme, // eslint-disable-line @typescript-eslint/no-unused-vars + className, + children, + ...rest +}: CodeProps) => { + // detect if this input has already been touched by shiki via rehype-pretty-code + if (dataLanguage) { // full multi-line code blocks with copy-to-clipboard button - // automatic if highlighted by prism, otherwise can be forced (rather than inlined) with `forceBlock={true}` return ( - - {children} - + <> + + + {children} + + ); } // simple inline code in paragraphs, headings, etc. (never highlighted) return ( - + {children} - + ); }; diff --git a/components/CodeBlock/CodeBlock.module.css b/components/CodeBlock/CodeBlock.module.css deleted file mode 100644 index bd42fdd4..00000000 --- a/components/CodeBlock/CodeBlock.module.css +++ /dev/null @@ -1,122 +0,0 @@ -.codeBlock { - position: relative; - width: 100%; - margin: 1em auto; - color: var(--colors-codeText); -} - -.codeBlock .code { - display: block; - overflow-x: auto; - padding: 1em; - font-size: 0.9em; - tab-size: 2px; - background-color: var(--colors-codeBackground); - border: 1px solid var(--colors-kindaLight); - border-radius: 0.6em; -} - -.codeBlock :global(.line-number)::before { - display: inline-block; - width: 1.5em; - margin-right: 1.5em; - text-align: right; - color: var(--colors-codeComment); - content: attr(line); - font-variant-numeric: tabular-nums; - user-select: none; -} - -.codeBlock :global(.code-line):first-of-type { - margin-right: 3em; -} - -.codeBlock.highlight :global(.token.comment), -.codeBlock.highlight :global(.token.prolog), -.codeBlock.highlight :global(.token.cdata) { - color: var(--colors-codeComment); -} - -.codeBlock.highlight :global(.token.delimiter), -.codeBlock.highlight :global(.token.boolean), -.codeBlock.highlight :global(.token.keyword), -.codeBlock.highlight :global(.token.selector), -.codeBlock.highlight :global(.token.important), -.codeBlock.highlight :global(.token.doctype), -.codeBlock.highlight :global(.token.atrule), -.codeBlock.highlight :global(.token.url) { - color: var(--colors-codeKeyword); -} - -.codeBlock.highlight :global(.token.tag), -.codeBlock.highlight :global(.token.builtin), -.codeBlock.highlight :global(.token.regex) { - color: var(--colors-codeNamespace); -} - -.codeBlock.highlight :global(.token.property), -.codeBlock.highlight :global(.token.constant), -.codeBlock.highlight :global(.token.variable), -.codeBlock.highlight :global(.token.attr-value), -.codeBlock.highlight :global(.token.class-name), -.codeBlock.highlight :global(.token.string), -.codeBlock.highlight :global(.token.char) { - color: var(--colors-codeVariable); -} - -.codeBlock.highlight :global(.token.literal-property), -.codeBlock.highlight :global(.token.attr-name) { - color: var(--colors-codeAttribute); -} - -.codeBlock.highlight :global(.token.function) { - color: var(--colors-codeLiteral); -} - -.codeBlock.highlight :global(.token.tag .punctuation), -.codeBlock.highlight :global(.token.attr-value .punctuation) { - color: var(--colors-codePunctuation); -} - -.codeBlock.highlight :global(.token.inserted) { - color: var(--colors-codeAddition); -} - -.codeBlock.highlight :global(.token.deleted) { - color: var(--colors-codeDeletion); -} - -.codeBlock.highlight :global(.token.url) { - text-decoration: underline; -} - -.codeBlock.highlight :global(.token.bold) { - font-weight: bold; -} - -.codeBlock.highlight :global(.token.italic) { - font-style: italic; -} - -.cornerCopyButton { - position: absolute; - top: 0; - right: 0; - height: 3em; - width: 3em; - color: var(--colors-mediumDark); - border: 1px solid var(--colors-kindaLight); - border-top-right-radius: 0.6em; - border-bottom-left-radius: 0.6em; - background-color: var(--colors-backgroundHeader); - backdrop-filter: saturate(180%) blur(5px); -} - -.cornerCopyButton > svg { - vertical-align: middle; -} - -.cornerCopyButton:hover, -.cornerCopyButton:focus-visible { - color: var(--colors-link); -} diff --git a/components/CodeBlock/CodeBlock.tsx b/components/CodeBlock/CodeBlock.tsx deleted file mode 100644 index 9310d253..00000000 --- a/components/CodeBlock/CodeBlock.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import clsx from "clsx"; -import CopyButton from "../CopyButton"; -import type { ComponentPropsWithoutRef } from "react"; - -import styles from "./CodeBlock.module.css"; - -export type CodeBlockProps = ComponentPropsWithoutRef<"div"> & { - highlight?: boolean; - withCopyButton?: boolean; -}; - -const CodeBlock = ({ highlight, withCopyButton, className, children, ...rest }: CodeBlockProps) => { - return ( -
- {withCopyButton && } - - {children} - -
- ); -}; - -export default CodeBlock; diff --git a/components/CodeBlock/index.ts b/components/CodeBlock/index.ts deleted file mode 100644 index 45fe849a..00000000 --- a/components/CodeBlock/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./CodeBlock"; -export { default } from "./CodeBlock"; diff --git a/components/CodeInline/CodeInline.module.css b/components/CodeInline/CodeInline.module.css deleted file mode 100644 index 3a26c14c..00000000 --- a/components/CodeInline/CodeInline.module.css +++ /dev/null @@ -1,8 +0,0 @@ -.codeInline { - padding: 0.175em 0.3em; - font-size: 0.925em; - page-break-inside: avoid; - background-color: var(--colors-codeBackground); - border: 1px solid var(--colors-kindaLight); - border-radius: 0.6em; -} diff --git a/components/CodeInline/CodeInline.tsx b/components/CodeInline/CodeInline.tsx deleted file mode 100644 index a31a6a8b..00000000 --- a/components/CodeInline/CodeInline.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import clsx from "clsx"; -import type { ComponentPropsWithoutRef } from "react"; - -import styles from "./CodeInline.module.css"; - -export type CodeInlineProps = ComponentPropsWithoutRef<"code">; - -const CodeInline = ({ className, ...rest }: CodeInlineProps) => ( - -); - -export default CodeInline; diff --git a/components/CodeInline/index.ts b/components/CodeInline/index.ts deleted file mode 100644 index b98bc9d2..00000000 --- a/components/CodeInline/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./CodeInline"; -export { default } from "./CodeInline"; diff --git a/components/Footer/Footer.module.css b/components/Footer/Footer.module.css index 59963d03..a141b4e9 100644 --- a/components/Footer/Footer.module.css +++ b/components/Footer/Footer.module.css @@ -2,9 +2,9 @@ flex: 1; width: 100%; padding: 1.25em 1.5em; - border-top: 1px solid var(--colors-kindaLight); - background-color: var(--colors-backgroundOuter); - color: var(--colors-mediumDark); + border-top: 1px solid var(--colors-kinda-light); + background-color: var(--colors-background-outer); + color: var(--colors-medium-dark); } .row { @@ -17,7 +17,7 @@ } .link { - color: var(--colors-mediumDark) !important; + color: var(--colors-medium-dark) !important; } .link:has(.icon):hover, @@ -32,7 +32,7 @@ .link.underline:hover, .link.underline:focus-visible { - border-bottom-color: var(--colors-kindaLight); + border-bottom-color: var(--colors-kinda-light); } .icon { diff --git a/components/Header/Header.module.css b/components/Header/Header.module.css index ab4a9a86..8c5db618 100644 --- a/components/Header/Header.module.css +++ b/components/Header/Header.module.css @@ -2,8 +2,8 @@ width: 100%; height: 4.5em; padding: 0.7em 1.5em; - border-bottom: 1px solid var(--colors-kindaLight); - background-color: var(--colors-backgroundHeader); + border-bottom: 1px solid var(--colors-kinda-light); + background-color: var(--colors-background-header); /* make sticky */ position: sticky; @@ -25,7 +25,7 @@ display: inline-flex; flex-shrink: 0; align-items: center; - color: var(--colors-mediumDark) !important; + color: var(--colors-medium-dark) !important; } .homeLink:hover, @@ -63,7 +63,7 @@ .homeLink:hover .homeImage, .homeLink:focus-visible .homeImage { - border-color: var(--colors-linkUnderline); + border-color: var(--colors-link-underline); } .name { diff --git a/components/Heading/Heading.module.css b/components/Heading/Heading.module.css index 46d37727..7b786dfc 100644 --- a/components/Heading/Heading.module.css +++ b/components/Heading/Heading.module.css @@ -10,7 +10,7 @@ .h.divider { padding-bottom: 0.25em; - border-bottom: 1px solid var(--colors-kindaLight); + border-bottom: 1px solid var(--colors-kinda-light); } .anchor { diff --git a/components/Link/Link.module.css b/components/Link/Link.module.css index 3ed39424..92cb3509 100644 --- a/components/Link/Link.module.css +++ b/components/Link/Link.module.css @@ -3,7 +3,7 @@ text-decoration: none; /* fancy underline */ - background-image: linear-gradient(var(--colors-linkUnderline), var(--colors-linkUnderline)); + background-image: linear-gradient(var(--colors-link-underline), var(--colors-link-underline)); background-position: 0% 100%; background-repeat: no-repeat; background-size: 0% 2px; diff --git a/components/Loading/Loading.module.css b/components/Loading/Loading.module.css index 5bff0848..ccfbd156 100644 --- a/components/Loading/Loading.module.css +++ b/components/Loading/Loading.module.css @@ -7,7 +7,7 @@ display: inline-block; height: 100%; animation: loading 1.5s infinite ease-in-out both; - background-color: var(--colors-mediumLight); + background-color: var(--colors-medium-light); } @keyframes loading { diff --git a/components/MenuItem/MenuItem.module.css b/components/MenuItem/MenuItem.module.css index c54cc947..fa932e49 100644 --- a/components/MenuItem/MenuItem.module.css +++ b/components/MenuItem/MenuItem.module.css @@ -1,19 +1,19 @@ .link { display: inline-block; - color: var(--colors-mediumDark) !important; + color: var(--colors-medium-dark) !important; padding: 0.6em; } /* indicate active page/section */ .link.current { margin-bottom: -0.2em; - border-bottom: 0.2em solid var(--colors-linkUnderline); + border-bottom: 0.2em solid var(--colors-link-underline); } .link:not(.current):hover, .link:not(.current):focus-visible { margin-bottom: -0.2em; - border-bottom: 0.2em solid var(--colors-kindaLight); + border-bottom: 0.2em solid var(--colors-kinda-light); } .icon { diff --git a/components/PageTitle/PageTitle.module.css b/components/PageTitle/PageTitle.module.css index adf25791..7e9dcda8 100644 --- a/components/PageTitle/PageTitle.module.css +++ b/components/PageTitle/PageTitle.module.css @@ -9,6 +9,6 @@ .slug::before { content: "\002E\002F"; /* "./" */ letter-spacing: 0.1em; - color: var(--colors-mediumLight); + color: var(--colors-medium-light); margin-right: -0.1em; } diff --git a/components/SkipToContent/SkipToContent.module.css b/components/SkipToContent/SkipToContent.module.css index a418c422..3f39dbb1 100644 --- a/components/SkipToContent/SkipToContent.module.css +++ b/components/SkipToContent/SkipToContent.module.css @@ -21,8 +21,8 @@ https://github.com/reach/reach-ui/blob/main/packages/skip-nav/styles.css */ width: auto; height: auto; clip: auto; - background: var(--colors-superDuperLight); + background: var(--colors-super-duper-light); color: var(--colors-link); - border: 2px solid var(--colors-kindaLight); + border: 2px solid var(--colors-kinda-light); text-decoration: underline; } diff --git a/components/ThemeToggle/ThemeToggle.module.css b/components/ThemeToggle/ThemeToggle.module.css index 599484e9..c4828fcd 100644 --- a/components/ThemeToggle/ThemeToggle.module.css +++ b/components/ThemeToggle/ThemeToggle.module.css @@ -4,7 +4,7 @@ margin-right: -0.6em; background: none; cursor: pointer; - color: var(--colors-mediumDark); + color: var(--colors-medium-dark); } .toggle:hover, diff --git a/lib/helpers/remark-rehype-plugins.ts b/lib/helpers/remark-rehype-plugins.ts index 26a4882b..d0b7e0dd 100644 --- a/lib/helpers/remark-rehype-plugins.ts +++ b/lib/helpers/remark-rehype-plugins.ts @@ -1,5 +1,5 @@ export { default as rehypeMdxImportMedia } from "rehype-mdx-import-media"; -export { default as rehypePrism } from "rehype-prism-plus"; +export { default as rehypePrettyCode } from "rehype-pretty-code"; export { default as rehypeSanitize } from "rehype-sanitize"; export { default as rehypeSlug } from "rehype-slug"; export { default as rehypeStringify } from "rehype-stringify"; diff --git a/next.config.ts b/next.config.ts index 822a2d0b..6fd9fa58 100644 --- a/next.config.ts +++ b/next.config.ts @@ -143,7 +143,19 @@ const withMDX = createMDX({ rehypePlugins: [ mdxPlugins.rehypeUnwrapImages, mdxPlugins.rehypeSlug, - [mdxPlugins.rehypePrism, { ignoreMissing: true }], + [ + mdxPlugins.rehypePrettyCode, + { + theme: { + light: "material-theme-lighter", + dark: "material-theme-darker", + }, + bypassInlineCode: true, + defaultLang: "plaintext", + grid: false, + keepBackground: false, + }, + ], mdxPlugins.rehypeMdxImportMedia, ], }, diff --git a/package.json b/package.json index 0f59f179..720a4eba 100644 --- a/package.json +++ b/package.json @@ -22,9 +22,9 @@ "@giscus/react": "^3.1.0", "@mdx-js/loader": "^3.1.0", "@mdx-js/react": "^3.1.0", - "@next/bundle-analyzer": "15.3.0-canary.9", - "@next/mdx": "15.3.0-canary.9", - "@next/third-parties": "15.3.0-canary.9", + "@next/bundle-analyzer": "15.3.0-canary.10", + "@next/mdx": "15.3.0-canary.10", + "@next/third-parties": "15.3.0-canary.10", "@octokit/graphql": "^8.2.1", "@octokit/graphql-schema": "^15.26.0", "@prisma/client": "^6.5.0", @@ -38,7 +38,7 @@ "html-entities": "^2.5.2", "lucide-react": "0.482.0", "modern-normalize": "^3.0.1", - "next": "15.3.0-canary.9", + "next": "15.3.0-canary.10", "obj-str": "^1.1.0", "p-map": "^7.0.3", "p-memoize": "^7.1.1", @@ -53,7 +53,7 @@ "react-turnstile": "^1.1.4", "react-tweet": "^3.2.2", "rehype-mdx-import-media": "^1.2.0", - "rehype-prism-plus": "^2.0.0", + "rehype-pretty-code": "^0.14.1", "rehype-sanitize": "^6.0.0", "rehype-slug": "^6.0.0", "rehype-stringify": "^10.0.1", @@ -63,6 +63,7 @@ "remark-rehype": "^11.1.1", "remark-smartypants": "^3.0.2", "resend": "^4.1.2", + "shiki": "^3.2.1", "unified": "^11.0.5", "zod": "^3.24.2" }, @@ -79,7 +80,7 @@ "@types/react-is": "^19.0.0", "cross-env": "^7.0.3", "eslint": "^9.22.0", - "eslint-config-next": "15.3.0-canary.9", + "eslint-config-next": "15.3.0-canary.10", "eslint-config-prettier": "^10.1.1", "eslint-plugin-css-modules": "^2.12.0", "eslint-plugin-import": "^2.31.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2023565e..5ef916ba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,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.3.0-canary.9 - version: 15.3.0-canary.9 + specifier: 15.3.0-canary.10 + version: 15.3.0-canary.10 '@next/mdx': - specifier: 15.3.0-canary.9 - version: 15.3.0-canary.9(@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.3.0-canary.10 + version: 15.3.0-canary.10(@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.3.0-canary.9 - version: 15.3.0-canary.9(next@15.3.0-canary.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) + specifier: 15.3.0-canary.10 + version: 15.3.0-canary.10(next@15.3.0-canary.10(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 @@ -58,7 +58,7 @@ importers: version: 4.2.2 geist: specifier: ^1.3.1 - version: 1.3.1(next@15.3.0-canary.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) + version: 1.3.1(next@15.3.0-canary.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) html-entities: specifier: ^2.5.2 version: 2.5.2 @@ -69,8 +69,8 @@ importers: specifier: ^3.0.1 version: 3.0.1 next: - specifier: 15.3.0-canary.9 - version: 15.3.0-canary.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 15.3.0-canary.10 + version: 15.3.0-canary.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0) obj-str: specifier: ^1.1.0 version: 1.1.0 @@ -113,9 +113,9 @@ importers: rehype-mdx-import-media: specifier: ^1.2.0 version: 1.2.0 - rehype-prism-plus: - specifier: ^2.0.0 - version: 2.0.0 + rehype-pretty-code: + specifier: ^0.14.1 + version: 0.14.1(shiki@3.2.1) rehype-sanitize: specifier: ^6.0.0 version: 6.0.0 @@ -143,6 +143,9 @@ importers: resend: specifier: ^4.1.2 version: 4.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + shiki: + specifier: ^3.2.1 + version: 3.2.1 unified: specifier: ^11.0.5 version: 11.0.5 @@ -187,8 +190,8 @@ importers: specifier: ^9.22.0 version: 9.22.0 eslint-config-next: - specifier: 15.3.0-canary.9 - version: 15.3.0-canary.9(eslint@9.22.0)(typescript@5.8.2) + specifier: 15.3.0-canary.10 + version: 15.3.0-canary.10(eslint@9.22.0)(typescript@5.8.2) eslint-config-prettier: specifier: ^10.1.1 version: 10.1.1(eslint@9.22.0) @@ -197,7 +200,7 @@ importers: version: 2.12.0(eslint@9.22.0) eslint-plugin-import: specifier: ^2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0)(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.7)(eslint@9.22.0) + version: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0)(typescript@5.8.2))(eslint-import-resolver-typescript@3.9.0)(eslint@9.22.0) eslint-plugin-jsx-a11y: specifier: ^6.10.2 version: 6.10.2(eslint@9.22.0) @@ -292,9 +295,15 @@ packages: '@dual-bundle/import-meta-resolve@4.1.0': resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==} + '@emnapi/core@1.3.1': + resolution: {integrity: sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==} + '@emnapi/runtime@1.3.1': resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + '@emnapi/wasi-threads@1.0.1': + resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} + '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} @@ -652,17 +661,20 @@ packages: '@types/react': '>=16' react: '>=16' - '@next/bundle-analyzer@15.3.0-canary.9': - resolution: {integrity: sha512-smWqfd9XCLQ3QCS14DMhPHS1KEOQrkUwoDzV6rh0t4tPfXn10OdJhKzZbGso0nDdDfOMmqUKNTMNnGc6782SEQ==} + '@napi-rs/wasm-runtime@0.2.7': + resolution: {integrity: sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==} - '@next/env@15.3.0-canary.9': - resolution: {integrity: sha512-kvABHn6GmJbyf02wozUzrC4evHdVSmc6FYV8I7Q4g3qZW1x64v6ppi3Hw1KEUzKieC1Car/maGT+r3oRalCg4Q==} + '@next/bundle-analyzer@15.3.0-canary.10': + resolution: {integrity: sha512-dE6lIG8G1TgB1nxjm/l0zJoemJhqXIsO6FYiZrPS8Z0EvEXDNu3nuDtQ7J/kKDENG2A5zmL4kYid1F+06apQzA==} - '@next/eslint-plugin-next@15.3.0-canary.9': - resolution: {integrity: sha512-jl7QuMIESjFFOzlKnFt3ssqOQqTVN+ZMjBUPBop09BC7kXcx0DYZRVmDXly8Esl02Pofj6GhmYOpK8z1lQanXQ==} + '@next/env@15.3.0-canary.10': + resolution: {integrity: sha512-W/JkRHQyELbL9iwqE0hNPmkewolbyumHQdRlVxIOvRI8lVfCICqAvl27MhQ4UweKi5wHMov+oPhNGgAAhekGxA==} - '@next/mdx@15.3.0-canary.9': - resolution: {integrity: sha512-sfT6OYKkTJF21TmKDdSJQEwYid+6xM2ICiVOOq1fOtVCKyTCb1xAeYfCGILEgmWwZ0C0IWiEyRIMBzRQFlb2og==} + '@next/eslint-plugin-next@15.3.0-canary.10': + resolution: {integrity: sha512-jMh292/BkGHdwaNLqZ1oQChB3Wmd/8ACKFdpnUz+vTLW9pjvXHdpRsgyHgm1eDgOCL24fkKu3DAGwJs403VLiQ==} + + '@next/mdx@15.3.0-canary.10': + resolution: {integrity: sha512-oHPwwyJmrRrCRvwytVX9rsgO4YxniYJB43FOJoLNICmi2mQaq0QueZ3r9OhQ9Dw4kgfq7Xx6dqD0DVr+ugCx4Q==} peerDependencies: '@mdx-js/loader': '>=0.15.0' '@mdx-js/react': '>=0.15.0' @@ -672,56 +684,56 @@ packages: '@mdx-js/react': optional: true - '@next/swc-darwin-arm64@15.3.0-canary.9': - resolution: {integrity: sha512-llJnHJGXQGux7sHJ4t0q5HbMnID+M3+s5ghvYBw79uP4QDkH5XVXRC2oQUwTvEPzHXUhWpB/kf6KUpWmOEI8xQ==} + '@next/swc-darwin-arm64@15.3.0-canary.10': + resolution: {integrity: sha512-1ZXY8o08g/PwV07G+vTPyxQYk8gLH5tdZmdC/bpgLeidqx8YG+2F8tSRqUpjYeblOAl46v/0mhLByLWjmFGFKw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.3.0-canary.9': - resolution: {integrity: sha512-igGqAeBB/3tJ4XLqbdcuzbgwgdNh9kRp2AFSME/Ok4jyetSPmcQFX43+C6piuMj2gQ06Q6gDWj3qib0MNf5IWw==} + '@next/swc-darwin-x64@15.3.0-canary.10': + resolution: {integrity: sha512-nlI1CiO4rbc+D7cjX9hCBTzdeFTffQpr9zAgxPx0YzgUEArnNlUifv49jh/R6TTaPOwWoqjFvOTFOBQ3xr+XjQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.3.0-canary.9': - resolution: {integrity: sha512-Ym9FxqbBmQyUjoe2bW7MsDkrYV3sSR8WXCEqJQthETjAqSsG6zwUfL86dMAKe2RUetqlNzWlXDH/+FM9fdPVOw==} + '@next/swc-linux-arm64-gnu@15.3.0-canary.10': + resolution: {integrity: sha512-mKz3G7OA0U1SS+uFUycJlONBcBsUg84p7sGPqQxk01WagW7UYgW1axbQBIPHxhAYz5o3+iLrdu7w5WeuHJcDRg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.3.0-canary.9': - resolution: {integrity: sha512-aB9umTo1HHcQWRTXffWSrt6wTMvhg+fYbtZ8PR7h28gBrQaYL6Lu8Kg7BQynYEx8Ze42GqVcS0MlwVsTQrpwMw==} + '@next/swc-linux-arm64-musl@15.3.0-canary.10': + resolution: {integrity: sha512-1q6HWePFxOtiLtZZKh1eF0XPzp8EM36aMJZqamQj+yPYdL8X0Iqin5QPEKqX5QeOwpsiXo82TZ2qnDyb/ps9Wg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.3.0-canary.9': - resolution: {integrity: sha512-d+tU/H5SaPAuHcxGJ9fiqt0qzXpkOmksu1lF9JQNHd6WKtBnnJMzpYL8onLLYXThrIPaETVSLpBiv1wvwIgwFg==} + '@next/swc-linux-x64-gnu@15.3.0-canary.10': + resolution: {integrity: sha512-aA04C+JDYlblbCdepWeP3UfPHXp0Bh6uNOCC3qH/AUwcdlMkUgaQxqDkn3rYN8DoVjkcvwtucRy5iQAQEWZMLA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.3.0-canary.9': - resolution: {integrity: sha512-b+V+36WIopplWQI2/xOIqzuRGCRGTDLVe2luhhtjcwewRqUujktGnphHW5zRcEVD9nNwwPCisxC01XLL3geggg==} + '@next/swc-linux-x64-musl@15.3.0-canary.10': + resolution: {integrity: sha512-NHLJqblMx4nERqt8FyQhGcnzq/woaZ4zsRFKjTo9eyqihlZCKxoPmN10PP4qQIDhBQfaxHAbzvYl5eAgn53xsA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.3.0-canary.9': - resolution: {integrity: sha512-6YbKTAP1Z+dnFtEoPQc4NuQ9J3VIN0vc8gHmZHBl5qfBQgF9f4DfBwcTrXMXEKIFVkQN4YMZU83v+2DSzT+7FQ==} + '@next/swc-win32-arm64-msvc@15.3.0-canary.10': + resolution: {integrity: sha512-KonCwSez8FNfVTjMkuK7RjBTqelZvT7TLVmni8C8TmulJARJlUwkDwsXSS2sTy9zmxH5XTROdVGppvEx+rLskA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.3.0-canary.9': - resolution: {integrity: sha512-Ujf4+i1memQV3Qk0EjY00C4bzumV6jOZze9kCdi4PnpPjzEefTj88CFGR7ACmYgu1qDHOKaZQxR08MALy/yvIw==} + '@next/swc-win32-x64-msvc@15.3.0-canary.10': + resolution: {integrity: sha512-KezU9dlIdQ6fXZb4lHvv+AeUG9RR4J/FVGExiLR/3+rkbHxIJRB8qzM/h/94vecrovvwomKBLiNRS/9ThZsGng==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@next/third-parties@15.3.0-canary.9': - resolution: {integrity: sha512-6Sy5adFXNpsYfOwVzS7p79bcETqvsh6Hewv3GhmwF/4MZtcWygt6mi04IUYGoVZbTlF1TkEPGSfBy9EqqDX8mw==} + '@next/third-parties@15.3.0-canary.10': + resolution: {integrity: sha512-tDoK9MYmRgRc4soQ+aIVsFh7onibTmeJ1ZNhLbYDJ8PxBhrHV9UNxJG8VWMPIMMb6xtvccyCoh9kYvSIeJph/w==} peerDependencies: next: ^13.0.0 || ^14.0.0 || ^15.0.0 react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 @@ -794,6 +806,61 @@ packages: '@one-ini/wasm@0.1.1': resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} + '@oxc-resolver/binding-darwin-arm64@5.0.0': + resolution: {integrity: sha512-zwHAf+owoxSWTDD4dFuwW+FkpaDzbaL30H5Ltocb+RmLyg4WKuteusRLKh5Y8b/cyu7UzhxM0haIqQjyqA1iuA==} + cpu: [arm64] + os: [darwin] + + '@oxc-resolver/binding-darwin-x64@5.0.0': + resolution: {integrity: sha512-1lS3aBNVjVQKBvZdHm13+8tSjvu2Tl1Cv4FnUyMYxqx6+rsom2YaOylS5LhDUwfZu0zAgpLMwK6kGpF/UPncNg==} + cpu: [x64] + os: [darwin] + + '@oxc-resolver/binding-freebsd-x64@5.0.0': + resolution: {integrity: sha512-q9sRd68wC1/AJ0eu6ClhxlklVfe8gH4wrUkSyEbIYTZ8zY5yjsLY3fpqqsaCvWJUx65nW+XtnAxCGCi5AXr1Mw==} + cpu: [x64] + os: [freebsd] + + '@oxc-resolver/binding-linux-arm-gnueabihf@5.0.0': + resolution: {integrity: sha512-catYavWsvqViYnCveQjhrK6yVYDEPFvIOgGLxnz5r2dcgrjpmquzREoyss0L2QG/J5HTTbwqwZ1kk+g56hE/1A==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-gnu@5.0.0': + resolution: {integrity: sha512-l/0pWoQM5kVmJLg4frQ1mKZOXgi0ex/hzvFt8E4WK2ifXr5JgKFUokxsb/oat7f5YzdJJh5r9p+qS/t3dA26Aw==} + cpu: [arm64] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-musl@5.0.0': + resolution: {integrity: sha512-bx0oz/oaAW4FGYqpIIxJCnmgb906YfMhTEWCJvYkxjpEI8VKLJEL3PQevYiqDq36SA0yRLJ/sQK2fqry8AFBfA==} + cpu: [arm64] + os: [linux] + + '@oxc-resolver/binding-linux-x64-gnu@5.0.0': + resolution: {integrity: sha512-4PH++qbSIhlRsFYdN1P9neDov4OGhTGo5nbQ1D7AL6gWFLo3gdZTc00FM2y8JjeTcPWEXkViZuwpuc0w5i6qHg==} + cpu: [x64] + os: [linux] + + '@oxc-resolver/binding-linux-x64-musl@5.0.0': + resolution: {integrity: sha512-mLfQFpX3/5y9oWi0b+9FbWDkL2hM0Y29653beCHiHxAdGyVgb2DsJbK74WkMTwtSz9by8vyBh8jGPZcg1yLZbQ==} + cpu: [x64] + os: [linux] + + '@oxc-resolver/binding-wasm32-wasi@5.0.0': + resolution: {integrity: sha512-uEhsAZSo65qsRi6+IfBTEUUFbjg7T2yruJeLYpFfEATpm3ory5Mgo5vx3L0c2/Cz1OUZXBgp3A8x6VMUB2jT2A==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-resolver/binding-win32-arm64-msvc@5.0.0': + resolution: {integrity: sha512-8DbSso9Jp1ns8AYuZFXdRfAcdJrzZwkFm/RjPuvAPTENsm685dosBF8G6gTHQlHvULnk6o3sa9ygZaTGC/UoEw==} + cpu: [arm64] + os: [win32] + + '@oxc-resolver/binding-win32-x64-msvc@5.0.0': + resolution: {integrity: sha512-ylppfPEg63NuRXOPNsXFlgyl37JrtRn0QMO26X3K3Ytp5HtLrMreQMGVtgr30e1l2YmAWqhvmKlCryOqzGPD/g==} + cpu: [x64] + os: [win32] + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -851,12 +918,36 @@ packages: '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} + '@shikijs/core@3.2.1': + resolution: {integrity: sha512-FhsdxMWYu/C11sFisEp7FMGBtX/OSSbnXZDMBhGuUDBNTdsoZlMSgQv5f90rwvzWAdWIW6VobD+G3IrazxA6dQ==} + + '@shikijs/engine-javascript@3.2.1': + resolution: {integrity: sha512-eMdcUzN3FMQYxOmRf2rmU8frikzoSHbQDFH2hIuXsrMO+IBOCI9BeeRkCiBkcLDHeRKbOCtYMJK3D6U32ooU9Q==} + + '@shikijs/engine-oniguruma@3.2.1': + resolution: {integrity: sha512-wZZAkayEn6qu2+YjenEoFqj0OyQI64EWsNR6/71d1EkG4sxEOFooowKivsWPpaWNBu3sxAG+zPz5kzBL/SsreQ==} + + '@shikijs/langs@3.2.1': + resolution: {integrity: sha512-If0iDHYRSGbihiA8+7uRsgb1er1Yj11pwpX1c6HLYnizDsKAw5iaT3JXj5ZpaimXSWky/IhxTm7C6nkiYVym+A==} + + '@shikijs/themes@3.2.1': + resolution: {integrity: sha512-k5DKJUT8IldBvAm8WcrDT5+7GA7se6lLksR+2E3SvyqGTyFMzU2F9Gb7rmD+t+Pga1MKrYFxDIeyWjMZWM6uBQ==} + + '@shikijs/types@3.2.1': + resolution: {integrity: sha512-/NTWAk4KE2M8uac0RhOsIhYQf4pdU0OywQuYDGIGAJ6Mjunxl2cGiuLkvu4HLCMn+OTTLRWkjZITp+aYJv60yA==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} @@ -875,9 +966,6 @@ packages: '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/hast@2.3.10': - resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} - '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -905,9 +993,6 @@ packages: '@types/node@22.13.10': resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} - '@types/prismjs@1.26.5': - resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} - '@types/prop-types@15.7.14': resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} @@ -1054,8 +1139,8 @@ packages: resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} engines: {node: '>= 0.4'} - array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} engines: {node: '>= 0.4'} array.prototype.flat@1.3.3: @@ -1152,8 +1237,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001704: - resolution: {integrity: sha512-+L2IgBbV6gXB4ETf0keSvLr7JUrRVbIaB/lrQ1+z8mRcQiisG5k+lG6O4n6Y5q6f5EuNfaYXKgymucphlEXQew==} + caniuse-lite@1.0.30001705: + resolution: {integrity: sha512-S0uyMMiYvA7CxNgomYBwwwPUnWzFD83f3B1ce5jHUfHTH//QL6hHsreI8RVC5606R4ssqravelYO5TU6t8sEyg==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1392,6 +1477,9 @@ packages: engines: {node: '>=14'} hasBin: true + emoji-regex-xs@1.0.0: + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} @@ -1401,10 +1489,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enhanced-resolve@5.18.1: - resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} - engines: {node: '>=10.13.0'} - entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -1479,8 +1563,8 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - eslint-config-next@15.3.0-canary.9: - resolution: {integrity: sha512-haW90iIvkZ70hVf8joY98NoQYl2bpixl0IXeSlWjniPR9cgvlq2U4BpNxb1nDO2n/iuy+kwig0dsEcqH1/7XLw==} + eslint-config-next@15.3.0-canary.10: + resolution: {integrity: sha512-ulrwZqqMpLZtDXeHtyCQNJTjEy20O6Z9urU9V8nU2TTM71eqIt1pz8dDS+vLoTRRJJjFRLWpOJI94QNPqvqFRw==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 typescript: '>=3.3.1' @@ -1497,8 +1581,8 @@ packages: eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-import-resolver-typescript@3.8.7: - resolution: {integrity: sha512-U7k84gOzrfl09c33qrIbD3TkWTWu3nt3dK5sDajHSekfoLlYGusIwSdPlPzVeA6TFpi0Wpj+ZdBD8hX4hxPoww==} + eslint-import-resolver-typescript@3.9.0: + resolution: {integrity: sha512-EUcFmaz0zAa6P2C9jAb5XDymRld8S6TURvWcIW7y+czOW+K8hrjgQgbhBsNE0J/dDZ6HLfcn70LqnIil9W+ICw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -1845,9 +1929,6 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -1907,9 +1988,6 @@ packages: hast-util-interactive@3.0.0: resolution: {integrity: sha512-9VFa3kP6AT40BNYcPmn3jpsG+1KPDF0rUFCrFVQDUsuUXZ3YLODm8UGV0tmYzFpcOIQXTAOi2ccS3ywlj2dQTA==} - hast-util-parse-selector@3.1.1: - resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} - hast-util-parse-selector@4.0.0: resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} @@ -1934,9 +2012,6 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - hastscript@7.2.0: - resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} - hastscript@9.0.1: resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} @@ -2221,8 +2296,8 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - keyv@5.3.1: - resolution: {integrity: sha512-13hQT2q2VIwOoaJdJa7nY3J8UVbYtMTJFHnwm9LI+SaQRfUiM6Em9KZeOVTCKbMnGcRIL3NSUFpAdjZCq24nLQ==} + keyv@5.3.2: + resolution: {integrity: sha512-Lji2XRxqqa5Wg+CHLVfFKBImfJZ4pCSccu9eVWK6w4c2SDFLd8JAn1zqTuSFnsxb7ope6rMsnIHfp+eBbRBRZQ==} kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} @@ -2542,16 +2617,16 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.9: - resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==} + nanoid@3.3.10: + resolution: {integrity: sha512-vSJJTG+t/dIKAUhUDw/dLdZ9s//5OxcHqLaDWWrW4Cdq7o6tdLIczUkMXt2MBNmk6sJRZBZRXVixs7URY1CmIg==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - next@15.3.0-canary.9: - resolution: {integrity: sha512-R9+FanTpLPN4cez/lJurj/kedcOERPCQebl/F5kevPSzCQzp8Dj/LCv6L10wTqBH3zBgqepp0eytzsVrjW8VjA==} + next@15.3.0-canary.10: + resolution: {integrity: sha512-M4o2+geTFAkeboP7IVCoRTsEfyyt56o+mLof7HW8LKwdG6TydvyCmsPbCvtRbU0V7Nl2IMRfGk/rts3TuB9bug==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -2627,8 +2702,8 @@ packages: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} - object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} engines: {node: '>= 0.4'} object.fromentries@2.0.8: @@ -2651,6 +2726,12 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} + oniguruma-parser@0.5.4: + resolution: {integrity: sha512-yNxcQ8sKvURiTwP0mV6bLQCYE7NKfKRRWunhbZnXgxSmB1OXa1lHrN3o4DZd+0Si0kU5blidK7BcROO8qv5TZA==} + + oniguruma-to-es@4.1.0: + resolution: {integrity: sha512-SNwG909cSLo4vPyyPbU/VJkEc9WOXqu2ycBlfd1UCXLqk1IijcQktSBb2yRQ2UFPsDhpkaf+C1dtT3PkLK/yWA==} + opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true @@ -2663,6 +2744,9 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} + oxc-resolver@5.0.0: + resolution: {integrity: sha512-66fopyAqCN8Mx4tzNiBXWbk8asCSuxUWN62gwTc3yfRs7JfWhX/eVJCf+fUrfbNOdQVOWn+o8pAKllp76ysMXA==} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -2831,9 +2915,6 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - property-information@7.0.0: resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} @@ -2918,12 +2999,18 @@ packages: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - refractor@4.9.0: - resolution: {integrity: sha512-nEG1SPXFoGGx+dcjftjv8cAjEusIh6ED1xhf5DG3C0x/k+rmZ2duKnc3QLpt6qeHv5fPb8uwN3VWN2BT7fr3Og==} - regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.0.1: + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} @@ -2934,8 +3021,11 @@ packages: rehype-parse@9.0.1: resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} - rehype-prism-plus@2.0.0: - resolution: {integrity: sha512-FeM/9V2N7EvDZVdR2dqhAzlw5YI49m9Tgn7ZrYJeYHIahM6gcXpH0K1y2gNnKanZCydOMluJvX2cB9z3lhY8XQ==} + rehype-pretty-code@0.14.1: + resolution: {integrity: sha512-IpG4OL0iYlbx78muVldsK86hdfNoht0z63AP7sekQNW2QOTmjxB7RbTO+rhIYNGRljgHxgVZoPwUl6bIC9SbjA==} + engines: {node: '>=18'} + peerDependencies: + shiki: ^1.0.0 || ^2.0.0 || ^3.0.0 rehype-recma@1.0.0: resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} @@ -3093,6 +3183,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shiki@3.2.1: + resolution: {integrity: sha512-VML/2o1/KGYkEf/stJJ+s9Ypn7jUKQPomGLGYso4JJFMFxVDyPNsjsI3MB3KLjlMOeH44gyaPdXC6rik2WXvUQ==} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -3163,8 +3256,8 @@ packages: spdx-license-ids@3.0.21: resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} - stable-hash@0.0.4: - resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} + stable-hash@0.0.5: + resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} @@ -3318,10 +3411,6 @@ packages: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - third-party-capital@1.0.20: resolution: {integrity: sha512-oB7yIimd8SuGptespDAZnNkzIz+NWaJCu2RMsbs4Wmp9zSDUM8Nhi3s2OOcqYuv3mN4hitXc8DVx+LyUmbUDiA==} @@ -3403,9 +3492,6 @@ packages: unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - unist-util-filter@5.0.1: - resolution: {integrity: sha512-pHx7D4Zt6+TsfwylH9+lYhBhzyhEnCXs/lbq/Hstxno5z4gVdyc2WEW0asfjGKPyG4pEKrnBv5hdkO6+aRnQJw==} - unist-util-inspect@8.1.0: resolution: {integrity: sha512-mOlg8Mp33pR0eeFpo5d2902ojqFFOKMMG2hF8bmH7ZlhnmjFgh0NI3/ZDwdaBJNbvrS7LZFVrBVtIE9KZ9s7vQ==} @@ -3629,11 +3715,22 @@ snapshots: '@dual-bundle/import-meta-resolve@4.1.0': {} + '@emnapi/core@1.3.1': + dependencies: + '@emnapi/wasi-threads': 1.0.1 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.3.1': dependencies: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.0.1': + dependencies: + tslib: 2.8.1 + optional: true + '@emotion/hash@0.9.2': {} '@esbuild/aix-ppc64@0.25.1': @@ -3916,53 +4013,60 @@ snapshots: '@types/react': 19.0.10 react: 19.0.0 - '@next/bundle-analyzer@15.3.0-canary.9': + '@napi-rs/wasm-runtime@0.2.7': + dependencies: + '@emnapi/core': 1.3.1 + '@emnapi/runtime': 1.3.1 + '@tybys/wasm-util': 0.9.0 + optional: true + + '@next/bundle-analyzer@15.3.0-canary.10': dependencies: webpack-bundle-analyzer: 4.10.1 transitivePeerDependencies: - bufferutil - utf-8-validate - '@next/env@15.3.0-canary.9': {} + '@next/env@15.3.0-canary.10': {} - '@next/eslint-plugin-next@15.3.0-canary.9': + '@next/eslint-plugin-next@15.3.0-canary.10': dependencies: fast-glob: 3.3.1 - '@next/mdx@15.3.0-canary.9(@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.3.0-canary.10(@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.3.0-canary.9': + '@next/swc-darwin-arm64@15.3.0-canary.10': optional: true - '@next/swc-darwin-x64@15.3.0-canary.9': + '@next/swc-darwin-x64@15.3.0-canary.10': optional: true - '@next/swc-linux-arm64-gnu@15.3.0-canary.9': + '@next/swc-linux-arm64-gnu@15.3.0-canary.10': optional: true - '@next/swc-linux-arm64-musl@15.3.0-canary.9': + '@next/swc-linux-arm64-musl@15.3.0-canary.10': optional: true - '@next/swc-linux-x64-gnu@15.3.0-canary.9': + '@next/swc-linux-x64-gnu@15.3.0-canary.10': optional: true - '@next/swc-linux-x64-musl@15.3.0-canary.9': + '@next/swc-linux-x64-musl@15.3.0-canary.10': optional: true - '@next/swc-win32-arm64-msvc@15.3.0-canary.9': + '@next/swc-win32-arm64-msvc@15.3.0-canary.10': optional: true - '@next/swc-win32-x64-msvc@15.3.0-canary.9': + '@next/swc-win32-x64-msvc@15.3.0-canary.10': optional: true - '@next/third-parties@15.3.0-canary.9(next@15.3.0-canary.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)': + '@next/third-parties@15.3.0-canary.10(next@15.3.0-canary.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)': dependencies: - next: 15.3.0-canary.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next: 15.3.0-canary.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: 19.0.0 third-party-capital: 1.0.20 @@ -4068,6 +4172,41 @@ snapshots: '@one-ini/wasm@0.1.1': {} + '@oxc-resolver/binding-darwin-arm64@5.0.0': + optional: true + + '@oxc-resolver/binding-darwin-x64@5.0.0': + optional: true + + '@oxc-resolver/binding-freebsd-x64@5.0.0': + optional: true + + '@oxc-resolver/binding-linux-arm-gnueabihf@5.0.0': + optional: true + + '@oxc-resolver/binding-linux-arm64-gnu@5.0.0': + optional: true + + '@oxc-resolver/binding-linux-arm64-musl@5.0.0': + optional: true + + '@oxc-resolver/binding-linux-x64-gnu@5.0.0': + optional: true + + '@oxc-resolver/binding-linux-x64-musl@5.0.0': + optional: true + + '@oxc-resolver/binding-wasm32-wasi@5.0.0': + dependencies: + '@napi-rs/wasm-runtime': 0.2.7 + optional: true + + '@oxc-resolver/binding-win32-arm64-msvc@5.0.0': + optional: true + + '@oxc-resolver/binding-win32-x64-msvc@5.0.0': + optional: true + '@pkgjs/parseargs@0.11.0': optional: true @@ -4125,12 +4264,50 @@ snapshots: domhandler: 5.0.3 selderee: 0.11.0 + '@shikijs/core@3.2.1': + dependencies: + '@shikijs/types': 3.2.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@3.2.1': + dependencies: + '@shikijs/types': 3.2.1 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.1.0 + + '@shikijs/engine-oniguruma@3.2.1': + dependencies: + '@shikijs/types': 3.2.1 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.2.1': + dependencies: + '@shikijs/types': 3.2.1 + + '@shikijs/themes@3.2.1': + dependencies: + '@shikijs/types': 3.2.1 + + '@shikijs/types@3.2.1': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + '@swc/counter@0.1.3': {} '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.8.1 + optional: true + '@types/acorn@4.0.6': dependencies: '@types/estree': 1.0.6 @@ -4151,10 +4328,6 @@ snapshots: '@types/estree@1.0.6': {} - '@types/hast@2.3.10': - dependencies: - '@types/unist': 2.0.11 - '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 @@ -4181,8 +4354,6 @@ snapshots: dependencies: undici-types: 6.20.0 - '@types/prismjs@1.26.5': {} - '@types/prop-types@15.7.14': {} '@types/react-dom@19.0.4(@types/react@19.0.10)': @@ -4355,9 +4526,10 @@ snapshots: es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 - array.prototype.findlastindex@1.2.5: + array.prototype.findlastindex@1.2.6: dependencies: call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 @@ -4447,7 +4619,7 @@ snapshots: cacheable@1.8.9: dependencies: hookified: 1.8.1 - keyv: 5.3.1 + keyv: 5.3.2 call-bind-apply-helpers@1.0.2: dependencies: @@ -4468,7 +4640,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001704: {} + caniuse-lite@1.0.30001705: {} ccount@2.0.1: {} @@ -4690,17 +4862,14 @@ snapshots: minimatch: 9.0.1 semver: 7.7.1 + emoji-regex-xs@1.0.0: {} + emoji-regex@10.4.0: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} - enhanced-resolve@5.18.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - entities@4.5.0: {} env-paths@2.2.1: {} @@ -4864,16 +5033,16 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-next@15.3.0-canary.9(eslint@9.22.0)(typescript@5.8.2): + eslint-config-next@15.3.0-canary.10(eslint@9.22.0)(typescript@5.8.2): dependencies: - '@next/eslint-plugin-next': 15.3.0-canary.9 + '@next/eslint-plugin-next': 15.3.0-canary.10 '@rushstack/eslint-patch': 1.11.0 '@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0)(typescript@5.8.2))(eslint@9.22.0)(typescript@5.8.2) '@typescript-eslint/parser': 8.26.1(eslint@9.22.0)(typescript@5.8.2) eslint: 9.22.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.8.7(eslint-plugin-import@2.31.0)(eslint@9.22.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0)(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.7)(eslint@9.22.0) + eslint-import-resolver-typescript: 3.9.0(eslint-plugin-import@2.31.0)(eslint@9.22.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0)(typescript@5.8.2))(eslint-import-resolver-typescript@3.9.0)(eslint@9.22.0) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.22.0) eslint-plugin-react: 7.37.4(eslint@9.22.0) eslint-plugin-react-hooks: 5.2.0(eslint@9.22.0) @@ -4896,18 +5065,18 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.8.7(eslint-plugin-import@2.31.0)(eslint@9.22.0): + eslint-import-resolver-typescript@3.9.0(eslint-plugin-import@2.31.0)(eslint@9.22.0): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.0 - enhanced-resolve: 5.18.1 eslint: 9.22.0 get-tsconfig: 4.10.0 is-bun-module: 1.3.0 - stable-hash: 0.0.4 + oxc-resolver: 5.0.0 + stable-hash: 0.0.5 tinyglobby: 0.2.12 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0)(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.7)(eslint@9.22.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0)(typescript@5.8.2))(eslint-import-resolver-typescript@3.9.0)(eslint@9.22.0) transitivePeerDependencies: - supports-color @@ -4932,14 +5101,14 @@ snapshots: - bluebird - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.7)(eslint@9.22.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.0)(eslint@9.22.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.26.1(eslint@9.22.0)(typescript@5.8.2) eslint: 9.22.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.8.7(eslint-plugin-import@2.31.0)(eslint@9.22.0) + eslint-import-resolver-typescript: 3.9.0(eslint-plugin-import@2.31.0)(eslint@9.22.0) transitivePeerDependencies: - supports-color @@ -4949,18 +5118,18 @@ snapshots: gonzales-pe: 4.3.0 lodash: 4.17.21 - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0)(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.7)(eslint@9.22.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0)(typescript@5.8.2))(eslint-import-resolver-typescript@3.9.0)(eslint@9.22.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 + array.prototype.findlastindex: 1.2.6 array.prototype.flat: 1.3.3 array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 eslint: 9.22.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.7)(eslint@9.22.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.0)(eslint@9.22.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -5039,7 +5208,7 @@ snapshots: hasown: 2.0.2 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.8 + object.entries: 1.1.9 object.fromentries: 2.0.8 object.values: 1.2.1 prop-types: 15.8.1 @@ -5273,9 +5442,9 @@ snapshots: functions-have-names@1.2.3: {} - geist@1.3.1(next@15.3.0-canary.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0)): + geist@1.3.1(next@15.3.0-canary.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0)): dependencies: - next: 15.3.0-canary.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next: 15.3.0-canary.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0) get-east-asian-width@1.3.0: {} @@ -5366,8 +5535,6 @@ snapshots: gopd@1.2.0: {} - graceful-fs@4.2.11: {} - graphemer@1.4.0: {} graphql-tag@2.12.6(graphql@16.10.0): @@ -5436,10 +5603,6 @@ snapshots: '@types/hast': 3.0.4 hast-util-has-property: 3.0.0 - hast-util-parse-selector@3.1.1: - dependencies: - '@types/hast': 2.3.10 - hast-util-parse-selector@4.0.0: dependencies: '@types/hast': 3.0.4 @@ -5526,14 +5689,6 @@ snapshots: dependencies: '@types/hast': 3.0.4 - hastscript@7.2.0: - dependencies: - '@types/hast': 2.3.10 - comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 3.1.1 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - hastscript@9.0.1: dependencies: '@types/hast': 3.0.4 @@ -5809,7 +5964,7 @@ snapshots: dependencies: json-buffer: 3.0.1 - keyv@5.3.1: + keyv@5.3.2: dependencies: '@keyv/serialize': 1.0.3 @@ -6396,30 +6551,30 @@ snapshots: ms@2.1.3: {} - nanoid@3.3.9: {} + nanoid@3.3.10: {} natural-compare@1.4.0: {} - next@15.3.0-canary.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + next@15.3.0-canary.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - '@next/env': 15.3.0-canary.9 + '@next/env': 15.3.0-canary.10 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 - caniuse-lite: 1.0.30001704 + caniuse-lite: 1.0.30001705 postcss: 8.4.31 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) styled-jsx: 5.1.6(react@19.0.0) optionalDependencies: - '@next/swc-darwin-arm64': 15.3.0-canary.9 - '@next/swc-darwin-x64': 15.3.0-canary.9 - '@next/swc-linux-arm64-gnu': 15.3.0-canary.9 - '@next/swc-linux-arm64-musl': 15.3.0-canary.9 - '@next/swc-linux-x64-gnu': 15.3.0-canary.9 - '@next/swc-linux-x64-musl': 15.3.0-canary.9 - '@next/swc-win32-arm64-msvc': 15.3.0-canary.9 - '@next/swc-win32-x64-msvc': 15.3.0-canary.9 + '@next/swc-darwin-arm64': 15.3.0-canary.10 + '@next/swc-darwin-x64': 15.3.0-canary.10 + '@next/swc-linux-arm64-gnu': 15.3.0-canary.10 + '@next/swc-linux-arm64-musl': 15.3.0-canary.10 + '@next/swc-linux-x64-gnu': 15.3.0-canary.10 + '@next/swc-linux-x64-musl': 15.3.0-canary.10 + '@next/swc-win32-arm64-msvc': 15.3.0-canary.10 + '@next/swc-win32-x64-msvc': 15.3.0-canary.10 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -6482,9 +6637,10 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 - object.entries@1.1.8: + object.entries@1.1.9: dependencies: call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 @@ -6516,6 +6672,15 @@ snapshots: dependencies: mimic-function: 5.0.1 + oniguruma-parser@0.5.4: {} + + oniguruma-to-es@4.1.0: + dependencies: + emoji-regex-xs: 1.0.0 + oniguruma-parser: 0.5.4 + regex: 6.0.1 + regex-recursion: 6.0.2 + opener@1.5.2: {} optionator@0.9.4: @@ -6533,6 +6698,20 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 + oxc-resolver@5.0.0: + optionalDependencies: + '@oxc-resolver/binding-darwin-arm64': 5.0.0 + '@oxc-resolver/binding-darwin-x64': 5.0.0 + '@oxc-resolver/binding-freebsd-x64': 5.0.0 + '@oxc-resolver/binding-linux-arm-gnueabihf': 5.0.0 + '@oxc-resolver/binding-linux-arm64-gnu': 5.0.0 + '@oxc-resolver/binding-linux-arm64-musl': 5.0.0 + '@oxc-resolver/binding-linux-x64-gnu': 5.0.0 + '@oxc-resolver/binding-linux-x64-musl': 5.0.0 + '@oxc-resolver/binding-wasm32-wasi': 5.0.0 + '@oxc-resolver/binding-win32-arm64-msvc': 5.0.0 + '@oxc-resolver/binding-win32-x64-msvc': 5.0.0 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -6650,13 +6829,13 @@ snapshots: postcss@8.4.31: dependencies: - nanoid: 3.3.9 + nanoid: 3.3.10 picocolors: 1.1.1 source-map-js: 1.2.1 postcss@8.5.3: dependencies: - nanoid: 3.3.9 + nanoid: 3.3.10 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -6693,8 +6872,6 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 - property-information@6.5.0: {} - property-information@7.0.0: {} proto-list@1.2.4: {} @@ -6802,15 +6979,18 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 - refractor@4.9.0: - dependencies: - '@types/hast': 2.3.10 - '@types/prismjs': 1.26.5 - hastscript: 7.2.0 - parse-entities: 4.0.2 - regenerator-runtime@0.14.1: {} + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.0.1: + dependencies: + regex-utilities: 2.3.0 + regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -6836,13 +7016,14 @@ snapshots: hast-util-from-html: 2.0.3 unified: 11.0.5 - rehype-prism-plus@2.0.0: + rehype-pretty-code@0.14.1(shiki@3.2.1): dependencies: + '@types/hast': 3.0.4 hast-util-to-string: 3.0.1 parse-numeric-range: 1.3.0 - refractor: 4.9.0 rehype-parse: 9.0.1 - unist-util-filter: 5.0.1 + shiki: 3.2.1 + unified: 11.0.5 unist-util-visit: 5.0.0 rehype-recma@1.0.0: @@ -7088,6 +7269,17 @@ snapshots: shebang-regex@3.0.0: {} + shiki@3.2.1: + dependencies: + '@shikijs/core': 3.2.1 + '@shikijs/engine-javascript': 3.2.1 + '@shikijs/engine-oniguruma': 3.2.1 + '@shikijs/langs': 3.2.1 + '@shikijs/themes': 3.2.1 + '@shikijs/types': 3.2.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -7169,7 +7361,7 @@ snapshots: spdx-license-ids@3.0.21: {} - stable-hash@0.0.4: {} + stable-hash@0.0.5: {} streamsearch@1.1.0: {} @@ -7391,8 +7583,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - tapable@2.2.1: {} - third-party-capital@1.0.20: {} tinyglobby@0.2.12: @@ -7514,12 +7704,6 @@ snapshots: trough: 2.2.0 vfile: 6.0.3 - unist-util-filter@5.0.1: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - unist-util-inspect@8.1.0: dependencies: '@types/unist': 3.0.3