+
+
Cursorless Cheatsheet{" "}
@@ -35,36 +33,36 @@ export const CheatsheetPage: React.FC = ({
);
-};
-
-type CheatsheetProps = {
- cheatsheetInfo: CheatsheetInfo;
-};
+}
-const Cheatsheet: React.FC = ({ cheatsheetInfo }) => (
-
- {cheatsheetInfo.sections
- .filter((section) => section.items.length > 0)
- .map((section) => (
-
-
-
- ))}
-
-
-
-
-
-
-
-);
+function Cheatsheet({ cheatsheetInfo }: Props) {
+ return (
+
+ {cheatsheetInfo.sections
+ .filter((section) => section.items.length > 0)
+ .map((section) => (
+
+
+
+ ))}
+
+
+
+
+
+
+
+ );
+}
type CheatsheetSectionProps = {
children?: React.ReactNode;
};
-const CheatsheetSection: React.FC = ({ children }) => (
-
- {children}
-
-);
+function CheatsheetSection({ children }: CheatsheetSectionProps) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/packages/cheatsheet/src/lib/cheatsheet.spec.tsx b/packages/cheatsheet/src/lib/cheatsheet.spec.tsx
index 7da2c81bdb..5b87ae62be 100644
--- a/packages/cheatsheet/src/lib/cheatsheet.spec.tsx
+++ b/packages/cheatsheet/src/lib/cheatsheet.spec.tsx
@@ -1,6 +1,5 @@
import { render } from "@testing-library/react";
-
-import { CheatsheetPage } from "./cheatsheet";
+import { CheatsheetPage } from "./CheatsheetPage";
import { fakeCheatsheetInfo } from "./fakeCheatsheetInfo";
describe("Cheatsheet", () => {
diff --git a/packages/cheatsheet/src/lib/cheatsheetBodyClasses.tsx b/packages/cheatsheet/src/lib/cheatsheetBodyClasses.tsx
deleted file mode 100644
index 68886b917e..0000000000
--- a/packages/cheatsheet/src/lib/cheatsheetBodyClasses.tsx
+++ /dev/null
@@ -1,2 +0,0 @@
-// markup
-export const cheatsheetBodyClasses = "bg-stone-50 dark:bg-stone-800";
diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts
index 69b194422d..408f3bcd41 100644
--- a/packages/common/src/index.ts
+++ b/packages/common/src/index.ts
@@ -122,3 +122,4 @@ export * from "./util/type";
export * from "./util/typeUtils";
export * from "./util/uniqWithHash";
export * from "./util/zipStrict";
+export * from "./viteHtmlParamsPlugin";
diff --git a/packages/common/src/viteHtmlParamsPlugin.ts b/packages/common/src/viteHtmlParamsPlugin.ts
new file mode 100644
index 0000000000..0776a359c7
--- /dev/null
+++ b/packages/common/src/viteHtmlParamsPlugin.ts
@@ -0,0 +1,17 @@
+export function viteHtmlParams(params: Record) {
+ return {
+ name: "vite-html-params",
+ enforce: "post",
+
+ transformIndexHtml(html: string): string {
+ for (const [key, value] of Object.entries(params)) {
+ const pattern = `__${key}__`;
+ if (!html.includes(pattern)) {
+ throw new Error(`Expected index.html to contain pattern ${pattern}`);
+ }
+ html = html.replaceAll(pattern, value);
+ }
+ return html;
+ },
+ };
+}
diff --git a/packages/cursorless-org/eslintConfig.ts b/packages/cursorless-org/eslintConfig.ts
index 259f137046..a4fbc0de15 100644
--- a/packages/cursorless-org/eslintConfig.ts
+++ b/packages/cursorless-org/eslintConfig.ts
@@ -1,40 +1,10 @@
-import { fixupPluginRules } from "@eslint/compat";
import type { ConfigWithExtends } from "@eslint/config-helpers";
-import nextVitals from "eslint-config-next/core-web-vitals";
import tsEslint from "typescript-eslint";
-const nextVitalsCompat = nextVitals.map((config) => {
- if (config.plugins == null) {
- return config;
- }
-
- const plugins = { ...config.plugins };
-
- // The Next.js ESLint config includes the `react` plugin which is not compatible with eslint 10.
- if (plugins.react != null) {
- plugins.react = fixupPluginRules(plugins.react);
- }
-
- // The Next.js ESLint config includes the `import` plugin, which conflicts with our own import plugin in the root configuration.
- if (plugins.import != null) {
- delete plugins.import;
- }
-
- return { ...config, plugins };
-});
-
export const cursorlessOrgConfig: ConfigWithExtends = {
files: ["packages/cursorless-org/**/*"],
- extends: nextVitalsCompat,
-
languageOptions: {
parser: tsEslint.parser,
},
-
- settings: {
- next: {
- rootDir: "packages/cursorless-org",
- },
- },
};
diff --git a/packages/cursorless-org/index.html b/packages/cursorless-org/index.html
new file mode 100644
index 0000000000..805389453c
--- /dev/null
+++ b/packages/cursorless-org/index.html
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+ __TITLE__
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/cursorless-org/mdx-components.tsx b/packages/cursorless-org/mdx-components.tsx
deleted file mode 100644
index 4687d27db0..0000000000
--- a/packages/cursorless-org/mdx-components.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import type { MDXComponents } from "mdx/types";
-
-// This file allows you to provide custom React components
-// to be used in MDX files. You can import and use any
-// React component you want, including components from
-// other libraries.
-
-// This file is required to use MDX in `app` directory.
-export function useMDXComponents(components: MDXComponents): MDXComponents {
- return {
- // Allows customizing built-in components, e.g. to add styling.
- // h1: ({ children }) => {children}
,
- ...components,
- };
-}
diff --git a/packages/cursorless-org/next.config.js b/packages/cursorless-org/next.config.js
deleted file mode 100644
index 2cf755db22..0000000000
--- a/packages/cursorless-org/next.config.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import mdx from "@next/mdx";
-import { readFileSync } from "fs";
-import { join, dirname } from "path";
-import { fileURLToPath } from "url";
-
-const withMDX = mdx({
- options: {
- providerImportSource: "@mdx-js/react",
- },
-});
-
-const __dirname = dirname(fileURLToPath(import.meta.url));
-
-/**
- * The names of the packages that come from the same monorepo as this package.
- * We want these to be transpiled by Next.js because we are directly importing
- * the source typescript files from these packages.
- */
-const references = JSON.parse(
- readFileSync(join(__dirname, "tsconfig.json"), "utf-8"),
-).references.map(({ path }) => {
- return JSON.parse(
- readFileSync(join(__dirname, path, "package.json"), "utf-8"),
- ).name;
-});
-
-/** @type {import('next').NextConfig} */
-const nextConfig = {
- turbopack: {
- rules: {
- "*.svg": {
- loaders: ["@svgr/webpack"],
- as: "*.js",
- },
- },
- },
- experimental: {
- mdxRs: true,
- },
- transpilePackages: references,
- reactStrictMode: true,
- output: "export",
-};
-
-export default withMDX(nextConfig);
diff --git a/packages/cursorless-org/package.json b/packages/cursorless-org/package.json
index b300f37996..124a091205 100644
--- a/packages/cursorless-org/package.json
+++ b/packages/cursorless-org/package.json
@@ -19,10 +19,10 @@
}
},
"scripts": {
- "dev": "next dev",
- "build": "next build",
- "start": "http-server out -a 127.0.0.1 -p 8085",
- "lint": "next lint",
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview",
+ "lint": "eslint .",
"compile": "tsc --build",
"watch": "tsc --build --watch",
"clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build"
@@ -30,27 +30,23 @@
"dependencies": {
"@cursorless/cheatsheet": "workspace:*",
"@cursorless/common": "workspace:*",
- "@mdx-js/loader": "^3.1.1",
- "@mdx-js/react": "^3.1.1",
- "@next/mdx": "^16.1.6",
- "next": "^16.1.6",
"react": "^19.2.4",
"react-dom": "^19.2.4",
- "react-player": "^3.4.0"
+ "react-player": "^3.4.0",
+ "wouter": "^3.9.0"
},
"devDependencies": {
- "@eslint/compat": "^2.0.3",
- "@svgr/webpack": "^8.1.0",
"@tailwindcss/postcss": "^4.2.1",
- "@types/mdx": "^2.0.13",
"@types/node": "^24.12.0",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
+ "@vitejs/plugin-react": "^6.0.1",
"eslint": "^10.0.3",
- "eslint-config-next": "^16.1.6",
"http-server": "^14.1.1",
"postcss": "^8.5.8",
"tailwindcss": "^4.2.1",
- "typescript": "^5.9.3"
+ "typescript": "^5.9.3",
+ "vite": "^8.0.0",
+ "vite-plugin-svgr": "^4.5.0"
}
}
diff --git a/packages/cursorless-org/public/_redirects b/packages/cursorless-org/public/_redirects
new file mode 100644
index 0000000000..7797f7c6a7
--- /dev/null
+++ b/packages/cursorless-org/public/_redirects
@@ -0,0 +1 @@
+/* /index.html 200
diff --git a/packages/cursorless-org/public/andrew-dant.jpeg b/packages/cursorless-org/public/andrew-dant.jpeg
deleted file mode 100644
index b97798f53b..0000000000
Binary files a/packages/cursorless-org/public/andrew-dant.jpeg and /dev/null differ
diff --git a/packages/cursorless-org/public/big-hats.png b/packages/cursorless-org/public/big-hats.png
deleted file mode 100644
index 446085f52f..0000000000
Binary files a/packages/cursorless-org/public/big-hats.png and /dev/null differ
diff --git a/packages/cursorless-org/public/james-stout.jpeg b/packages/cursorless-org/public/james-stout.jpeg
deleted file mode 100644
index 9155024311..0000000000
Binary files a/packages/cursorless-org/public/james-stout.jpeg and /dev/null differ
diff --git a/packages/cursorless-org/public/max-foxley-marrable.jpeg b/packages/cursorless-org/public/max-foxley-marrable.jpeg
deleted file mode 100644
index e1f8c550c0..0000000000
Binary files a/packages/cursorless-org/public/max-foxley-marrable.jpeg and /dev/null differ
diff --git a/packages/cursorless-org/public/nathan-heffley.jpeg b/packages/cursorless-org/public/nathan-heffley.jpeg
deleted file mode 100644
index 3094f53024..0000000000
Binary files a/packages/cursorless-org/public/nathan-heffley.jpeg and /dev/null differ
diff --git a/packages/cursorless-org/public/sohee-yang.jpeg b/packages/cursorless-org/public/sohee-yang.jpeg
deleted file mode 100644
index 844a612275..0000000000
Binary files a/packages/cursorless-org/public/sohee-yang.jpeg and /dev/null differ
diff --git a/packages/cursorless-org/src/App.tsx b/packages/cursorless-org/src/App.tsx
new file mode 100644
index 0000000000..ebd7486802
--- /dev/null
+++ b/packages/cursorless-org/src/App.tsx
@@ -0,0 +1,17 @@
+import { Redirect, Route, Router, Switch } from "wouter";
+import { CheatsheetPage } from "./CheatsheetPage";
+import { LandingPage } from "./LandingPage";
+
+export function App() {
+ return (
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/packages/cursorless-org/src/Button.tsx b/packages/cursorless-org/src/Button.tsx
new file mode 100644
index 0000000000..a74c776b8b
--- /dev/null
+++ b/packages/cursorless-org/src/Button.tsx
@@ -0,0 +1,24 @@
+interface Props {
+ text: string;
+ href: string;
+ isExternal: boolean;
+}
+
+export function Button({ text, href, isExternal }: Props) {
+ const extraProps = isExternal
+ ? {
+ target: "_blank",
+ rel: "noreferrer",
+ }
+ : {};
+
+ return (
+
+ {text}
+
+ );
+}
diff --git a/packages/cursorless-org/src/CheatsheetPage.tsx b/packages/cursorless-org/src/CheatsheetPage.tsx
new file mode 100644
index 0000000000..107b829bee
--- /dev/null
+++ b/packages/cursorless-org/src/CheatsheetPage.tsx
@@ -0,0 +1,13 @@
+import {
+ CheatsheetPage as OriginalCheatsheetPage,
+ defaultCheatsheetInfo,
+} from "@cursorless/cheatsheet";
+
+export function CheatsheetPage() {
+ return (
+ <>
+ Cursorless cheatsheet
+
+ >
+ );
+}
diff --git a/packages/cursorless-org/src/LandingPage.tsx b/packages/cursorless-org/src/LandingPage.tsx
new file mode 100644
index 0000000000..f7dd9c4d7b
--- /dev/null
+++ b/packages/cursorless-org/src/LandingPage.tsx
@@ -0,0 +1,54 @@
+import { EmbeddedVideo } from "./embedded-video";
+import { Button } from "./Button";
+import { TITLE, YOUTUBE_SLUG } from "./constants";
+import Logo from "./logo.svg?react";
+
+export function LandingPage() {
+ const smallScaling = "sm:w-sm-base sm:h-sm-base sm:text-sm-base";
+
+ return (
+ <>
+ {TITLE}
+
+
+
+
+
+ Cursorless
+
+
+
+
+
+
+
+
+
+
+ {" "}
+
+
+
+
+
+ >
+ );
+}
+
+function Slogan() {
+ return (
+
+ Voice coding{" "}
+ at the speed of thought
+
+ );
+}
diff --git a/packages/cursorless-org/src/components/BaseSocial.tsx b/packages/cursorless-org/src/components/BaseSocial.tsx
deleted file mode 100644
index 757ed1f25f..0000000000
--- a/packages/cursorless-org/src/components/BaseSocial.tsx
+++ /dev/null
@@ -1,132 +0,0 @@
-import { CURSORLESS_ORG_URL } from "@cursorless/common";
-import {
- VIDEO_SHARE_THUMBNAIL_HEIGHT,
- VIDEO_SHARE_THUMBNAIL_URL,
- VIDEO_SHARE_THUMBNAIL_WIDTH,
-} from "./constants";
-
-export interface Props {
- title: string;
- description: string;
- relativeUrl: string;
- youtubeSlug?: string;
- thumbnailUrl?: string;
- thumbnailWidth?: string;
- thumbnailHeight?: string;
-}
-
-export default function BaseSocial({
- title,
- description,
- relativeUrl,
- youtubeSlug,
- thumbnailUrl = VIDEO_SHARE_THUMBNAIL_URL,
- thumbnailWidth = VIDEO_SHARE_THUMBNAIL_WIDTH,
- thumbnailHeight = VIDEO_SHARE_THUMBNAIL_HEIGHT,
-}: Props) {
- const url = `${CURSORLESS_ORG_URL}/${relativeUrl}`;
-
- return (
- <>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {youtubeSlug != null ? (
-
- ) : (
-
- )}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- >
- );
-}
-
-interface VideoProps {
- youtubeSlug: string;
-}
-
-function VideoSocial({ youtubeSlug }: VideoProps) {
- return (
- <>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- >
- );
-}
diff --git a/packages/cursorless-org/src/components/Button.tsx b/packages/cursorless-org/src/components/Button.tsx
deleted file mode 100644
index f193f835bf..0000000000
--- a/packages/cursorless-org/src/components/Button.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-interface Props {
- text: string;
- href: string;
- isExternal: boolean;
-}
-
-export default function Button({ text, href, isExternal }: Props) {
- const className =
- "text-center uppercase text-2xl sm:text-[2.4em] tracking-[0.18em] hover:text-salmon-400";
-
- const extraProps = isExternal
- ? {
- target: "_blank",
- rel: "noreferrer",
- }
- : {};
-
- return (
-
- {text}
-
- );
-}
diff --git a/packages/cursorless-org/src/components/IndexSocial.tsx b/packages/cursorless-org/src/components/IndexSocial.tsx
deleted file mode 100644
index 076e7e088f..0000000000
--- a/packages/cursorless-org/src/components/IndexSocial.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import BaseSocial from "./BaseSocial";
-import { DESCRIPTION, TITLE, VIDEO_SHARE_THUMBNAIL_URL } from "./constants";
-
-export default function IndexSocial() {
- return (
-
- );
-}
diff --git a/packages/cursorless-org/src/components/Layout.tsx b/packages/cursorless-org/src/components/Layout.tsx
deleted file mode 100644
index 6c0047e52b..0000000000
--- a/packages/cursorless-org/src/components/Layout.tsx
+++ /dev/null
@@ -1,135 +0,0 @@
-import { MDXProvider } from "@mdx-js/react";
-import type { MDXComponents } from "mdx/types.js";
-import Head from "next/head";
-import Logo from "../pages/logo.svg";
-import BaseSocial from "./BaseSocial";
-import { SpamProofEmailLink } from "./SpamProofEmailLink";
-import Link from "next/link";
-
-const components: MDXComponents = {
- h1: ({ children }) => (
-
- {children}
-
- ),
- h2: ({ children }) => (
-
- {children}
-
- ),
- h3: ({ children }) => (
-
- {children}
-
- ),
- h4: ({ children }) => (
-
- {children}
-
- ),
- hr: () =>
,
- ul: ({ children }) => {children}
,
- ol: ({ children }) => {children}
,
- li: ({ children }) => {children} ,
- img: ({ src, alt }) => (
- // FIXME: Figure out how to use next/image with MDX
- // eslint-disable-next-line @next/next/no-img-element
-
- ),
- CursorlessScreenshot: ({ src, alt }) => (
- // FIXME: Figure out how to use next/image with MDX
- // eslint-disable-next-line @next/next/no-img-element
-
- ),
- CalloutBox: ({ children }) => (
-
- {children}
-
- ),
- Testimonials: ({ children }) => (
- {children}
- ),
- Testimonial: ({ children, src, name, title, company }) => (
-
-
- {children}
-
-
- {/* eslint-disable-next-line @next/next/no-img-element */}
-
-
-
- {name}
-
- {title}
- {company}
-
-
-
- ),
- Tiers: ({ children }) => (
-
- {children}
-
- ),
- Tier: ({ emoji, type, price, address, subject, body }) => (
-
-
- {emoji} {type}
-
-
- {price}
-
-
- ),
-};
-
-export const bodyClasses = "bg-salmon-100 dark:bg-salmon-900";
-
-export interface Props extends React.PropsWithChildren {
- title: string;
- description: string;
- relativeUrl: string;
-}
-
-export function Layout({ title, description, relativeUrl, children }: Props) {
- return (
- <>
-
- {title}
-
-
-
-
-
-
-
-
- {children}
-
-
-
- >
- );
-}
diff --git a/packages/cursorless-org/src/components/SpamProofEmailLink.tsx b/packages/cursorless-org/src/components/SpamProofEmailLink.tsx
deleted file mode 100644
index a6d9d26002..0000000000
--- a/packages/cursorless-org/src/components/SpamProofEmailLink.tsx
+++ /dev/null
@@ -1,72 +0,0 @@
-import type { EmailAddress } from "../parseEmailAddress";
-
-interface Props extends React.PropsWithChildren {
- address: EmailAddress;
- subject?: string;
- body?: string;
-}
-
-/**
- * Encodes a string for use in a URL, but unlike encodeURIComponent, it encodes
- * every character, including regular ASCII characters [a-zA-Z] etc. For example:
- *
- * encodeURIComponent("user@example.com") === "%75%73%65%72%40%65%78%61%6D%70%6C%65%2E%63%6F%6D"
- *
- * @param str The string to encode
- * @returns A URL-encoded version of the string, where every character is encoded
- */
-function strictEncodeURIComponent(str: string) {
- const components: string[] = [];
- for (let i = 0; i < str.length; i++) {
- components.push("%" + str.charCodeAt(i).toString(16).toUpperCase());
- }
- return components.join("");
-}
-
-/**
- * A link to an email address, attempting to prevent spam bots from finding it.
- * Encodes the URI for the href using very aggressive uri encoding, and for the
- * displayed email text, injects dummy text in a hidden span so that bots will
- * see it but humans won't.
- *
- * Tricks taken from https://spencermortensen.com/articles/email-obfuscation/
- *
- * @param param0 The email address to use
- * @returns A link to the email address, attempting to prevent spam bots from
- * finding it
- */
-export function SpamProofEmailLink({
- address: { username, domain },
- subject,
- body,
- children,
-}: Props) {
- // URL encode every character of the email address, including the mailto: prefix
- const rawEmailHref = `${username}@${domain}`;
- let href = `mailto:${strictEncodeURIComponent(rawEmailHref)}`;
-
- if (subject != null) {
- const subjectEncoded = encodeURIComponent(subject).replace(/\+/g, "%20");
- href += `?subject=${subjectEncoded}`;
- }
-
- if (body != null) {
- const bodyEncoded = encodeURIComponent(body).replace(/\+/g, "%20");
- href += (href.includes("?") ? "&" : "?") + `body=${bodyEncoded}`;
- }
-
- return (
-
- {children ?? (
-
- {`${username}@`}
- Die spam!
- {domain}
-
- )}
-
- );
-}
diff --git a/packages/cursorless-org/src/components/embedded-video.tsx b/packages/cursorless-org/src/components/embedded-video.tsx
deleted file mode 100644
index c943910ec6..0000000000
--- a/packages/cursorless-org/src/components/embedded-video.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import { useState } from "react";
-
-interface Props {
- youtubeSlug: string;
-}
-
-import dynamic from "next/dynamic";
-const ReactPlayer = dynamic(
- () => import("react-player").then((mod) => mod.default),
- { ssr: false },
-);
-
-export function EmbeddedVideo({ youtubeSlug }: Props) {
- const [isError, setIsError] = useState(false);
-
- return (
-
- {isError ? (
-
- Error loading YouTube video
-
- ) : (
- {
- console.log(`Error loading YouTube video: ${e}`);
- setIsError(true);
- }}
- />
- )}
-
- );
-}
diff --git a/packages/cursorless-org/src/components/constants.ts b/packages/cursorless-org/src/constants.ts
similarity index 100%
rename from packages/cursorless-org/src/components/constants.ts
rename to packages/cursorless-org/src/constants.ts
diff --git a/packages/cursorless-org/src/content/enablement-group.mdx b/packages/cursorless-org/src/content/enablement-group.mdx
deleted file mode 100644
index f4dfa0496f..0000000000
--- a/packages/cursorless-org/src/content/enablement-group.mdx
+++ /dev/null
@@ -1,220 +0,0 @@
-export const meta = {
- title: "Cursorless Enablement Group",
- description:
- "Help enable the adoption of Cursorless by accelerating its development",
-};
-
-import { SpamProofEmailLink } from "../components/SpamProofEmailLink";
-export const emailSubject = "Cursorless Enablement Group";
-export const emailBody = `Hi Pokey,
-
-I'm interested in joining the Cursorless Enablement Group. Please send me more information.
-
-Thanks,
-
-`;
-
-# {meta.title}
-
----
-
-## {meta.description}
-
-Cursorless is an open-source spoken language for editing code, enabling users to write software entirely by voice faster than with a keyboard and mouse. Software engineers can code using high-level semantic manipulations (increased productivity), and all computer users can reduce strain on their wrists to prevent injury (preventative healthcare).
-
-
-
-## Cursorless development is user-led
-
-Your support will help Cursorless founder, Pokey Rule, and his team develop the following feature requests as quickly as possible:
-
-- Reduce the learning curve with interactive tutorials, videos, and documentation to increase the rate of adoption.
-- Launch Cursorless in other IDEs, such as JetBrains, emacs, etc, as well as in a web browser, and even work globally using OCR / accessibility APIs to operate anywhere on the screen.
-- Further improvements to the Cursorless execution engine to advance the state of the art in voice coding.
-
-## Developers love Cursorless
-
-
-
- "Phenomenal extension. This is the state of the art for coding by voice.
- Nothing else comes close. Awesome to see this from the open source community!"
-
-
-
- "This extension is a genuine game-changer. As someone who suffers with chronic
- RSI, I was seriously concerned I would be unfit to continue my career
- long-term. Discovering Talon and Cursorless has given me hope again and has
- additionally given me the means to write code and interface with my computer
- in ways I never thought possible. It's also made coding way more fun than
- before! I often feel like a code-slinging wizard!"
-
-
-
-
-"For developers turning to Talon due to typing limitations, Cursorless isn’t just beneficial—it’s indispensable. When I lost my ability to type due to RSI, I was consumed with the fear of significantly reduced productivity and potentially not being able to work anymore. However, when I discovered Cursorless, it gave me hope and confidence that I could regain my prior efficiency once I mastered the tool."
-
-
-
-
-
-"This is fantastic extension that is not only saving my career but is even speeding up my workflow within VS Code more than when I was typing anyway. The best part is you really feel like a hacker when you rattle off a long command and the code does exactly what you wanted!"
-
-
-
-
-
-## Goals
-
-Cursorless needs a dedicated, full-time software engineer on staff. This will cost $5,000 USD per month. The Enablement Group guides development and the participation fees contribute to this crucial funding. Cursorless will always be open source.
-
-## 🙌 Join the Cursorless Enablement Group
-
-The Enablement Group consists of stakeholders whose talents, lived experiences, and career experiences bring vital perspectives to the development of Cursorless. Support and input help increase the speed at which new features can be delivered.
-
-**To join, send an email to Cursorless founder Pokey Rule**
-
-
-
-## benefits
-
-Members of the Cursorless Enablement Group enjoy the following benefits:
-
-
-
-### Become a Distinguished Accessibility Champion
-
-By joining the Enablement Group, you solidify your position as a dedicated
-advocate for accessible technology and inclusion. Your active involvement
-showcases your commitment to driving positive change and making technology
-more accessible for everyone.
-
-### Gain Prominent Visibility Online
-
-As a valued member of the Enablement Group, you gain increased visibility
-within both the open source and accessible technology communities. Your
-participation will be recognized on all web properties including GitHub Repo,
-cursorless.org, social media, via any other acknowledgments in project
-updates, newsletters, and events to cement your role as a key player in
-advancing Cursorless.
-
-### Empower Future Accessibility
-
-Your commitment to the Enablement Group supports the long-term vision of
-creating a full-time staff engineer dedicated to developing Cursorless. As the
-group grows, the possibility of achieving this goal becomes more tangible,
-contributing to a sustainable and impactful initiative for accessible
-technology.
-
-### Join a Collaboration with Industry Leaders
-
-Joining the Enablement Group provides an opportunity to collaborate with
-like-minded individuals and industry leaders who share your passion for
-accessible technology. This network allows you to exchange insights, share
-best practices, and collectively drive the advancement of inclusive digital
-solutions.
-
-### Obtain Collective Influence on Development
-
-While the development of Cursorless is guided by its community of users, your
-annual fee directly contributes to the development of these feature requests!
-Use your expertise and experience to help prioritize and comment on effective
-solutions around feature requests. You're ensuring that development directly
-aligns with the needs of users who value inclusive and accessible technology
-and rely on it to succeed in their lives.
-
-
-
-### All participants also enjoy the following benefits
-
-Members of the Cursorless Enablement Group enjoy several privileges. The access and public visibility participants receive make for a dynamic combination of benefits. The value that individuals and companies gain from their involvement in the group is tangible.
-
-#### 🤓 Technical
-
-- Be the first to access Cursorless feature updates and new versions.
-- Lead the adoption of Cursorless by understanding its implementation and having superior knowledge of its use.
-- Have some influence over the direction of the technology through your expertise.
-- Gain an advanced and deeper knowledge of any outputs of the group (recommended practices, engineering guidelines)
-
-#### 🥽 Visibility
-
-- Ability to promote your organization as a champion for accessible technology and in particular Cursorless.
-- Ability to promote your organization as a leader in the area of accessible technology.
-- Opportunity to connect with other influencers in software and accessibility.
-- Networking and ability to cultivate deep relationships and potential partnerships with leaders, founders, and influencers.
-
-#### 🪖 Strategic
-
-- Support an initiative targeted at facilitating an increased and more rapid shift of adoption of Cursorless as a faster way to code and a healthier way to code.
-- Support of open standards approach. Standards are critical to interoperability and openness is consistent with a positive image in the industry.
-
-## 🚀 Join the Cursorless Enablement Group
-
-Your participation will help Cursorless maintain its growth trajectory and uphold its cutting-edge quality and esteemed 5-star reputation in coding by voice. And you'll make a lasting impact on the direction of accessible technology.
-
-## Annual Membership Rates
-
-
-
-
-
-
-
-_All prices listed are per annum._
-
----
-
-To join, send an email to Cursorless founder Pokey Rule
-
-
diff --git a/packages/cursorless-org/src/content/enablement-group.mdx.d.ts b/packages/cursorless-org/src/content/enablement-group.mdx.d.ts
deleted file mode 100644
index 0da46b532b..0000000000
--- a/packages/cursorless-org/src/content/enablement-group.mdx.d.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export { default } from "*.mdx";
-
-export const meta: {
- title: string;
- description: string;
-};
diff --git a/packages/cursorless-org/src/custom.d.ts b/packages/cursorless-org/src/custom.d.ts
deleted file mode 100644
index 8eaa8f3f2b..0000000000
--- a/packages/cursorless-org/src/custom.d.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-declare module "*.svg" {
- /**
- * Use `any` to avoid conflicts with
- * `@svgr/webpack` plugin or
- * `babel-plugin-inline-react-svg` plugin.
- */
- const content: any;
-
- export default content;
-}
diff --git a/packages/cursorless-org/src/embedded-video.tsx b/packages/cursorless-org/src/embedded-video.tsx
new file mode 100644
index 0000000000..ecaa5199b2
--- /dev/null
+++ b/packages/cursorless-org/src/embedded-video.tsx
@@ -0,0 +1,38 @@
+import { lazy, Suspense, useState } from "react";
+
+interface Props {
+ youtubeSlug: string;
+}
+
+const ReactPlayer = lazy(async () => import("react-player"));
+
+export function EmbeddedVideo({ youtubeSlug }: Props) {
+ const [isError, setIsError] = useState(false);
+
+ return (
+
+ {isError ? (
+
+ Error loading YouTube video
+
+ ) : (
+
+ {
+ console.log(`Error loading YouTube video: ${error}`);
+ setIsError(true);
+ }}
+ />
+
+ )}
+
+ );
+}
diff --git a/packages/cursorless-org/src/index.tsx b/packages/cursorless-org/src/index.tsx
new file mode 100644
index 0000000000..3fe4aa4f44
--- /dev/null
+++ b/packages/cursorless-org/src/index.tsx
@@ -0,0 +1,20 @@
+import React from "react";
+import { createRoot } from "react-dom/client";
+import { App } from "./App";
+import "./styles.css";
+
+const root = createRoot(getRoot());
+
+root.render(
+
+
+ ,
+);
+
+function getRoot() {
+ const root = document.getElementById("root");
+ if (root == null) {
+ throw new Error("Missing root container");
+ }
+ return root;
+}
diff --git a/packages/cursorless-org/src/pages/logo.svg b/packages/cursorless-org/src/logo.svg
similarity index 100%
rename from packages/cursorless-org/src/pages/logo.svg
rename to packages/cursorless-org/src/logo.svg
diff --git a/packages/cursorless-org/src/pages/_app.tsx b/packages/cursorless-org/src/pages/_app.tsx
deleted file mode 100644
index e924950f41..0000000000
--- a/packages/cursorless-org/src/pages/_app.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import "../styles/globals.css";
-import type { AppProps } from "next/app";
-import { useEffect } from "react";
-
-export default function App({ Component, pageProps }: AppProps) {
- // See https://github.com/vercel/next.js/discussions/12325#discussioncomment-1116108
- useEffect(() => {
- document.body.className = pageProps.bodyClasses;
- });
- return ;
-}
diff --git a/packages/cursorless-org/src/pages/_document.tsx b/packages/cursorless-org/src/pages/_document.tsx
deleted file mode 100644
index df7236dc94..0000000000
--- a/packages/cursorless-org/src/pages/_document.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import Document, { Html, Head, Main, NextScript } from "next/document";
-
-export default class MyDocument extends Document {
- render() {
- // See https://github.com/vercel/next.js/discussions/12325#discussioncomment-1116108
- const pageProps = this.props?.__NEXT_DATA__?.props?.pageProps;
-
- return (
-
-
-
-
-
-
-
- );
- }
-}
diff --git a/packages/cursorless-org/src/pages/cheatsheet.tsx b/packages/cursorless-org/src/pages/cheatsheet.tsx
deleted file mode 100644
index 771b4d79f7..0000000000
--- a/packages/cursorless-org/src/pages/cheatsheet.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import {
- cheatsheetBodyClasses,
- CheatsheetPage,
- defaultCheatsheetInfo,
-} from "@cursorless/cheatsheet";
-import Head from "next/head";
-
-// See https://github.com/vercel/next.js/discussions/12325#discussioncomment-1116108
-export async function getStaticProps() {
- return { props: { bodyClasses: cheatsheetBodyClasses } };
-}
-
-export function App() {
- return (
- <>
-
- Cursorless cheatsheet
-
-
- >
- );
-}
-
-export default App;
diff --git a/packages/cursorless-org/src/pages/enablement-group.tsx b/packages/cursorless-org/src/pages/enablement-group.tsx
deleted file mode 100644
index a27c5c13bf..0000000000
--- a/packages/cursorless-org/src/pages/enablement-group.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import {
- default as EnablementGroup,
- meta,
-} from "../content/enablement-group.mdx";
-import { Layout, bodyClasses } from "../components/Layout";
-import { env } from "process";
-import type { EmailAddress } from "../parseEmailAddress";
-import { parseEmailAddress } from "../parseEmailAddress";
-
-const RELATIVE_URL = "cursorless-enablement";
-
-export async function getStaticProps() {
- return {
- props: {
- // See https://github.com/vercel/next.js/discussions/12325#discussioncomment-1116108
- bodyClasses,
-
- //! IMPORTANT: Don't return the email address unparsed, because it will
- //! be serialized as JSON and exposed to the client, so spam bots might
- //! find it. Instead, parse it and return the parsed object.
- emailAddress: parseEmailAddress(
- env["ENABLEMENT_GROUP_EMAIL"] ?? "user@example.com",
- ),
- },
- };
-}
-
-interface Props extends React.PropsWithChildren {
- emailAddress: EmailAddress;
-}
-
-export default function Page({ emailAddress }: Props) {
- return (
-
-
-
- );
-}
diff --git a/packages/cursorless-org/src/pages/index.tsx b/packages/cursorless-org/src/pages/index.tsx
deleted file mode 100644
index a677258e0e..0000000000
--- a/packages/cursorless-org/src/pages/index.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-import { EmbeddedVideo } from "../components/embedded-video";
-import Head from "next/head";
-import Button from "../components/Button";
-import { TITLE, YOUTUBE_SLUG } from "../components/constants";
-import IndexSocial from "../components/IndexSocial";
-import Logo from "./logo.svg";
-
-// See https://github.com/vercel/next.js/discussions/12325#discussioncomment-1116108
-export async function getStaticProps() {
- return { props: { bodyClasses: "bg-salmon-100 dark:bg-salmon-900" } };
-}
-
-export default function LandingPage() {
- const smallScaling = "sm:w-sm-base sm:h-sm-base sm:text-sm-base";
- const stretchedScaling =
- "sm:stretched:w-stretched-base sm:stretched:h-stretched-base sm:stretched:text-stretched-base";
-
- return (
- <>
-
- {TITLE}
-
-
-
- {/*
- Note that the font scale gets applied to this element so that all nested elements can use
- `em` units and will automatically be scaled.
- FIXME: We should probably add the font size to the root element so that we can use `rem`
- units instead
- */}
-
-
-
-
- Cursorless
-
-
-
-
-
-
-
-
-
-
- {" "}
-
-
-
-
-
-
- >
- );
-}
-
-function Slogan() {
- return (
-
- Voice coding{" "}
- at the speed of thought
-
- );
-}
-
-function NetlifyFooter() {
- return (
-
- );
-}
diff --git a/packages/cursorless-org/src/parseEmailAddress.ts b/packages/cursorless-org/src/parseEmailAddress.ts
deleted file mode 100644
index 912f5ec99c..0000000000
--- a/packages/cursorless-org/src/parseEmailAddress.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-export interface EmailAddress {
- username: string;
- domain: string;
-}
-export function parseEmailAddress(email: string): EmailAddress {
- const [username, domain] = email.split("@");
- return { username, domain };
-}
diff --git a/packages/cursorless-org/src/styles/globals.css b/packages/cursorless-org/src/styles.css
similarity index 90%
rename from packages/cursorless-org/src/styles/globals.css
rename to packages/cursorless-org/src/styles.css
index 5a1feba4be..a7ad01e51e 100644
--- a/packages/cursorless-org/src/styles/globals.css
+++ b/packages/cursorless-org/src/styles.css
@@ -1,6 +1,6 @@
@import "tailwindcss";
-@config "../../tailwind.config.mjs";
+@config "../tailwind.config.mjs";
:root {
--safe-area-inset-top: env(safe-area-inset-top);
@@ -9,6 +9,18 @@
--safe-area-inset-right: env(safe-area-inset-right);
}
+@media (min-width: 640px) and (min-aspect-ratio: 2/1) {
+ .landing-page-scale {
+ @apply w-stretched-base h-stretched-base text-stretched-base;
+ }
+}
+
+@media (min-width: 640px) and (max-aspect-ratio: 1/1) {
+ .landing-page-scale {
+ @apply w-stretched-base h-stretched-base text-stretched-base;
+ }
+}
+
@font-face {
font-family: "Inconsolata-SemiExpanded";
font-style: normal;
diff --git a/packages/cursorless-org/src/vite-env.d.ts b/packages/cursorless-org/src/vite-env.d.ts
new file mode 100644
index 0000000000..d816124885
--- /dev/null
+++ b/packages/cursorless-org/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/packages/cursorless-org/tailwind.config.mjs b/packages/cursorless-org/tailwind.config.mjs
index 2eb995dced..3ab4f5a8ba 100644
--- a/packages/cursorless-org/tailwind.config.mjs
+++ b/packages/cursorless-org/tailwind.config.mjs
@@ -1,5 +1,3 @@
-/* eslint-disable import/no-anonymous-default-export */
-
import defaultTheme from "tailwindcss/defaultTheme";
import { readFileSync } from "node:fs";
@@ -53,9 +51,6 @@ export default {
content: [".", ...references].map((pkg) => `${pkg}/src/**/*.{js,ts,jsx,tsx}`),
theme: {
extend: {
- screens: {
- stretched: { raw: "(min-aspect-ratio: 2/1), (max-aspect-ratio: 1/1)" },
- },
fontFamily: {
mono: ["Inconsolata", ...defaultTheme.fontFamily.mono],
"mono-wide": [
diff --git a/packages/cursorless-org/tsconfig.json b/packages/cursorless-org/tsconfig.json
index 6a6bf5cab7..a8827596a0 100644
--- a/packages/cursorless-org/tsconfig.json
+++ b/packages/cursorless-org/tsconfig.json
@@ -3,8 +3,7 @@
"compilerOptions": {
"target": "es2022",
"lib": ["dom", "es2022"],
- "jsx": "preserve",
- "allowJs": true,
+ "jsx": "react-jsx",
"skipLibCheck": true,
"noEmit": true,
"esModuleInterop": true,
@@ -16,7 +15,6 @@
"src/**/*.ts",
"src/**/*.json",
"src/**/*.tsx",
- "next-env.d.ts",
"../../typings/**/*.d.ts"
],
"references": [
diff --git a/packages/cursorless-org/vite.config.ts b/packages/cursorless-org/vite.config.ts
new file mode 100644
index 0000000000..d4423107d2
--- /dev/null
+++ b/packages/cursorless-org/vite.config.ts
@@ -0,0 +1,57 @@
+import { CURSORLESS_ORG_URL, viteHtmlParams } from "@cursorless/common";
+import react from "@vitejs/plugin-react";
+import type { UserConfig } from "vite";
+import { defineConfig } from "vite";
+import svgr from "vite-plugin-svgr";
+import {
+ DESCRIPTION,
+ TITLE,
+ VIDEO_SHARE_THUMBNAIL_HEIGHT,
+ VIDEO_SHARE_THUMBNAIL_URL,
+ VIDEO_SHARE_THUMBNAIL_WIDTH,
+ YOUTUBE_SLUG,
+} from "./src/constants";
+
+export default defineConfig((): UserConfig => {
+ return {
+ build: {
+ outDir: "out",
+
+ rolldownOptions: {
+ onLog(level, log, defaultHandler) {
+ if (level === "warn") {
+ log.message = formatMessage(log.message);
+ }
+ defaultHandler(level, log);
+ },
+ },
+ },
+
+ resolve: {
+ conditions: ["cursorless:bundler"],
+ },
+
+ plugins: [
+ react(),
+ svgr(),
+ viteHtmlParams({
+ CURSORLESS_ORG_URL,
+ TITLE,
+ DESCRIPTION,
+ YOUTUBE_SLUG,
+ VIDEO_SHARE_THUMBNAIL_URL,
+ VIDEO_SHARE_THUMBNAIL_WIDTH,
+ VIDEO_SHARE_THUMBNAIL_HEIGHT,
+ }),
+ ],
+ };
+});
+
+function formatMessage(message: string): string {
+ const maxLength = 1000;
+ const lines = message
+ .split("\r?\n")
+ .map((l) => l.trimEnd())
+ .map((l) => (l.length > maxLength ? l.slice(0, maxLength) + "..." : l));
+ return lines.join("\n");
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7782b00196..9c66239561 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -138,6 +138,9 @@ importers:
'@cursorless/cheatsheet':
specifier: workspace:*
version: link:../cheatsheet
+ '@cursorless/common':
+ specifier: workspace:*
+ version: link:../common
react:
specifier: ^19.2.4
version: 19.2.4
@@ -473,18 +476,6 @@ importers:
'@cursorless/common':
specifier: workspace:*
version: link:../common
- '@mdx-js/loader':
- specifier: ^3.1.1
- version: 3.1.1(webpack@5.105.4(esbuild@0.27.4))
- '@mdx-js/react':
- specifier: ^3.1.1
- version: 3.1.1(@types/react@19.2.14)(react@19.2.4)
- '@next/mdx':
- specifier: ^16.1.6
- version: 16.1.6(@mdx-js/loader@3.1.1(webpack@5.105.4(esbuild@0.27.4)))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))
- next:
- specifier: ^16.1.6
- version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react:
specifier: ^19.2.4
version: 19.2.4
@@ -494,19 +485,13 @@ importers:
react-player:
specifier: ^3.4.0
version: 3.4.0(@svta/cml-cta@1.0.1(@svta/cml-structured-field-values@1.0.1(@svta/cml-utils@1.0.1))(@svta/cml-utils@1.0.1))(@svta/cml-structured-field-values@1.0.1(@svta/cml-utils@1.0.1))(@svta/cml-utils@1.0.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ wouter:
+ specifier: ^3.9.0
+ version: 3.9.0(react@19.2.4)
devDependencies:
- '@eslint/compat':
- specifier: ^2.0.3
- version: 2.0.3(eslint@10.0.3(jiti@2.6.1))
- '@svgr/webpack':
- specifier: ^8.1.0
- version: 8.1.0(typescript@5.9.3)
'@tailwindcss/postcss':
specifier: ^4.2.1
version: 4.2.1
- '@types/mdx':
- specifier: ^2.0.13
- version: 2.0.13
'@types/node':
specifier: ^24.12.0
version: 24.12.0
@@ -516,12 +501,12 @@ importers:
'@types/react-dom':
specifier: ^19.2.3
version: 19.2.3(@types/react@19.2.14)
+ '@vitejs/plugin-react':
+ specifier: ^6.0.1
+ version: 6.0.1(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
eslint:
specifier: ^10.0.3
version: 10.0.3(jiti@2.6.1)
- eslint-config-next:
- specifier: ^16.1.6
- version: 16.1.6(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)
http-server:
specifier: ^14.1.1
version: 14.1.1
@@ -534,6 +519,12 @@ importers:
typescript:
specifier: ^5.9.3
version: 5.9.3
+ vite:
+ specifier: ^8.0.0
+ version: 8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite-plugin-svgr:
+ specifier: ^4.5.0
+ version: 4.5.0(rollup@4.59.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
packages/cursorless-org-docs:
dependencies:
@@ -2443,15 +2434,6 @@ packages:
resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/compat@2.0.3':
- resolution: {integrity: sha512-SjIJhGigp8hmd1YGIBwh7Ovri7Kisl42GYFjrOyHhtfYGGoLW6teYi/5p8W50KSsawUPpuLOSmsq1bD0NGQLBw==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- peerDependencies:
- eslint: ^8.40 || 9 || 10
- peerDependenciesMeta:
- eslint:
- optional: true
-
'@eslint/config-array@0.23.3':
resolution: {integrity: sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
@@ -2530,159 +2512,6 @@ packages:
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
- '@img/colour@1.1.0':
- resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==}
- engines: {node: '>=18'}
-
- '@img/sharp-darwin-arm64@0.34.5':
- resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [darwin]
-
- '@img/sharp-darwin-x64@0.34.5':
- resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [darwin]
-
- '@img/sharp-libvips-darwin-arm64@1.2.4':
- resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==}
- cpu: [arm64]
- os: [darwin]
-
- '@img/sharp-libvips-darwin-x64@1.2.4':
- resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==}
- cpu: [x64]
- os: [darwin]
-
- '@img/sharp-libvips-linux-arm64@1.2.4':
- resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@img/sharp-libvips-linux-arm@1.2.4':
- resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==}
- cpu: [arm]
- os: [linux]
- libc: [glibc]
-
- '@img/sharp-libvips-linux-ppc64@1.2.4':
- resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==}
- cpu: [ppc64]
- os: [linux]
- libc: [glibc]
-
- '@img/sharp-libvips-linux-riscv64@1.2.4':
- resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==}
- cpu: [riscv64]
- os: [linux]
- libc: [glibc]
-
- '@img/sharp-libvips-linux-s390x@1.2.4':
- resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==}
- cpu: [s390x]
- os: [linux]
- libc: [glibc]
-
- '@img/sharp-libvips-linux-x64@1.2.4':
- resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
- resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@img/sharp-libvips-linuxmusl-x64@1.2.4':
- resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@img/sharp-linux-arm64@0.34.5':
- resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@img/sharp-linux-arm@0.34.5':
- resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm]
- os: [linux]
- libc: [glibc]
-
- '@img/sharp-linux-ppc64@0.34.5':
- resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [ppc64]
- os: [linux]
- libc: [glibc]
-
- '@img/sharp-linux-riscv64@0.34.5':
- resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [riscv64]
- os: [linux]
- libc: [glibc]
-
- '@img/sharp-linux-s390x@0.34.5':
- resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [s390x]
- os: [linux]
- libc: [glibc]
-
- '@img/sharp-linux-x64@0.34.5':
- resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@img/sharp-linuxmusl-arm64@0.34.5':
- resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@img/sharp-linuxmusl-x64@0.34.5':
- resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@img/sharp-wasm32@0.34.5':
- resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [wasm32]
-
- '@img/sharp-win32-arm64@0.34.5':
- resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [win32]
-
- '@img/sharp-win32-ia32@0.34.5':
- resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [ia32]
- os: [win32]
-
- '@img/sharp-win32-x64@0.34.5':
- resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [win32]
-
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
@@ -2944,14 +2773,6 @@ packages:
'@leichtgewicht/ip-codec@2.0.5':
resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==}
- '@mdx-js/loader@3.1.1':
- resolution: {integrity: sha512-0TTacJyZ9mDmY+VefuthVshaNIyCGZHJG2fMnGaDttCt8HmjUF7SizlHJpaCDoGnN635nK1wpzfpx/Xx5S4WnQ==}
- peerDependencies:
- webpack: '>=5'
- peerDependenciesMeta:
- webpack:
- optional: true
-
'@mdx-js/mdx@3.1.1':
resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==}
@@ -3017,75 +2838,6 @@ packages:
'@napi-rs/wasm-runtime@1.1.1':
resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==}
- '@next/env@16.1.6':
- resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==}
-
- '@next/eslint-plugin-next@16.1.6':
- resolution: {integrity: sha512-/Qq3PTagA6+nYVfryAtQ7/9FEr/6YVyvOtl6rZnGsbReGLf0jZU6gkpr1FuChAQpvV46a78p4cmHOVP8mbfSMQ==}
-
- '@next/mdx@16.1.6':
- resolution: {integrity: sha512-PT5JR4WPPYOls7WD6xEqUVVI9HDY8kY7XLQsNYB2lSZk5eJSXWu3ECtIYmfR0hZpx8Sg7BKZYKi2+u5OTSEx0w==}
- peerDependencies:
- '@mdx-js/loader': '>=0.15.0'
- '@mdx-js/react': '>=0.15.0'
- peerDependenciesMeta:
- '@mdx-js/loader':
- optional: true
- '@mdx-js/react':
- optional: true
-
- '@next/swc-darwin-arm64@16.1.6':
- resolution: {integrity: sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [darwin]
-
- '@next/swc-darwin-x64@16.1.6':
- resolution: {integrity: sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [darwin]
-
- '@next/swc-linux-arm64-gnu@16.1.6':
- resolution: {integrity: sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@next/swc-linux-arm64-musl@16.1.6':
- resolution: {integrity: sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@next/swc-linux-x64-gnu@16.1.6':
- resolution: {integrity: sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@next/swc-linux-x64-musl@16.1.6':
- resolution: {integrity: sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@next/swc-win32-arm64-msvc@16.1.6':
- resolution: {integrity: sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [win32]
-
- '@next/swc-win32-x64-msvc@16.1.6':
- resolution: {integrity: sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [win32]
-
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -3098,10 +2850,6 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- '@nolyfill/is-core-module@1.0.39':
- resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
- engines: {node: '>=12.4.0'}
-
'@npmcli/agent@3.0.0':
resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==}
engines: {node: ^18.17.0 || >=20.5.0}
@@ -3113,10 +2861,6 @@ packages:
'@one-ini/wasm@0.2.1':
resolution: {integrity: sha512-TUqERXGNTifZ9y2g3wPxQrw3HpHv/02DsW3D90T9x0hhonrL1ZqpSmNrU2XkoIq0fP1N6gZfVQzy2Fw1ZvGBNg==}
- '@opentelemetry/api@1.9.0':
- resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
- engines: {node: '>=8.0.0'}
-
'@oxc-project/runtime@0.115.0':
resolution: {integrity: sha512-Rg8Wlt5dCbXhQnsXPrkOjL1DTSvXLgb2R/KYfnf1/K+R0k6UMLEmbQXPM+kwrWqSmWA2t0B1EtHy2/3zikQpvQ==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -3861,6 +3605,15 @@ packages:
'@rolldown/pluginutils@1.0.0-rc.9':
resolution: {integrity: sha512-w6oiRWgEBl04QkFZgmW+jnU1EC9b57Oihi2ot3HNWIQRqgHp5PnYDia5iZ5FF7rpa4EQdiqMDXjlqKGXBhsoXw==}
+ '@rollup/pluginutils@5.3.0':
+ resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
'@rollup/rollup-android-arm-eabi@4.59.0':
resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==}
cpu: [arm]
@@ -5258,10 +5011,6 @@ packages:
aria-query@5.3.0:
resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
- aria-query@5.3.2:
- resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
- engines: {node: '>= 0.4'}
-
array-buffer-byte-length@1.0.2:
resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
engines: {node: '>= 0.4'}
@@ -5277,10 +5026,6 @@ packages:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
- array.prototype.findlast@1.2.5:
- resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
- engines: {node: '>= 0.4'}
-
array.prototype.findlastindex@1.2.6:
resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==}
engines: {node: '>= 0.4'}
@@ -5293,10 +5038,6 @@ packages:
resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
engines: {node: '>= 0.4'}
- array.prototype.tosorted@1.1.4:
- resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
- engines: {node: '>= 0.4'}
-
arraybuffer.prototype.slice@1.0.4:
resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
engines: {node: '>= 0.4'}
@@ -5312,9 +5053,6 @@ packages:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
- ast-types-flow@0.0.8:
- resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
-
astral-regex@2.0.0:
resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
engines: {node: '>=8'}
@@ -5341,14 +5079,6 @@ packages:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
- axe-core@4.11.1:
- resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==}
- engines: {node: '>=4'}
-
- axobject-query@4.1.0:
- resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
- engines: {node: '>= 0.4'}
-
babel-jest@30.3.0:
resolution: {integrity: sha512-gRpauEU2KRrCox5Z296aeVHR4jQ98BCnu0IO332D/xpHNOsIH/bgSRk9k6GbKIbBw8vFeN6ctuu6tV8WOyVfYQ==}
engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
@@ -5710,9 +5440,6 @@ packages:
resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
engines: {node: '>=8'}
- client-only@0.0.1:
- resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
-
clipanion@4.0.0-rc.4:
resolution: {integrity: sha512-CXkMQxU6s9GklO/1f714dkKBMu1lopS1WFF0B8o4AxPykR1hpozxSiUZ5ZUeBjfPgCWqbcNOtZVFhB8Lkfp1+Q==}
peerDependencies:
@@ -6056,9 +5783,6 @@ packages:
custom-media-element@1.4.5:
resolution: {integrity: sha512-cjrsQufETwxjvwZbYbKBCJNvmQ2++G9AvT45zDi7NXL9k2PdVcs2h0jQz96J6G4TMKRCcEsoJ+QTgQD00Igtjw==}
- damerau-levenshtein@1.0.8:
- resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
-
dash-video-element@0.3.1:
resolution: {integrity: sha512-KSdCd6lqjum4LizHLtB2EGvaGr7YJU7SZekTTDHixRondaRNcm0t9W2V3I7/itNBzQwdDbC1cKkXryc8I8IViA==}
@@ -6408,10 +6132,6 @@ packages:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
- es-iterator-helpers@1.3.1:
- resolution: {integrity: sha512-zWwRvqWiuBPr0muUG/78cW3aHROFCNIQ3zpmYDpwdbnt2m+xlNyRWpHBpa2lJjSBit7BQ+RXA1iwbSmu5yJ/EQ==}
- engines: {node: '>= 0.4'}
-
es-module-lexer@2.0.0:
resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==}
@@ -6469,15 +6189,6 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
- eslint-config-next@16.1.6:
- resolution: {integrity: sha512-vKq40io2B0XtkkNDYyleATwblNt8xuh3FWp8SpSz3pt7P01OkBFlKsJZ2mWt5WsCySlDQLckb1zMY9yE9Qy0LA==}
- peerDependencies:
- eslint: '>=9.0.0'
- typescript: '>=3.3.1'
- peerDependenciesMeta:
- typescript:
- optional: true
-
eslint-config-prettier@10.1.8:
resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==}
hasBin: true
@@ -6496,19 +6207,6 @@ packages:
eslint-import-resolver-node@0.3.9:
resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
- eslint-import-resolver-typescript@3.10.1:
- resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==}
- engines: {node: ^14.18.0 || >=16.0.0}
- peerDependencies:
- eslint: '*'
- eslint-plugin-import: '*'
- eslint-plugin-import-x: '*'
- peerDependenciesMeta:
- eslint-plugin-import:
- optional: true
- eslint-plugin-import-x:
- optional: true
-
eslint-import-resolver-typescript@4.4.4:
resolution: {integrity: sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==}
engines: {node: ^16.17.0 || >=18.6.0}
@@ -6553,29 +6251,11 @@ packages:
'@typescript-eslint/parser':
optional: true
- eslint-plugin-jsx-a11y@6.10.2:
- resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==}
- engines: {node: '>=4.0'}
- peerDependencies:
- eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
-
eslint-plugin-mocha@11.2.0:
resolution: {integrity: sha512-nMdy3tEXZac8AH5Z/9hwUkSfWu8xHf4XqwB5UEQzyTQGKcNlgFeciRAjLjliIKC3dR1Ex/a2/5sqgQzvYRkkkA==}
peerDependencies:
eslint: '>=9.0.0'
- eslint-plugin-react-hooks@7.0.1:
- resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==}
- engines: {node: '>=18'}
- peerDependencies:
- eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
-
- eslint-plugin-react@7.37.5:
- resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==}
- engines: {node: '>=4'}
- peerDependencies:
- eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
-
eslint-plugin-unicorn@63.0.0:
resolution: {integrity: sha512-Iqecl9118uQEXYh7adylgEmGfkn5es3/mlQTLLkd4pXkIk9CTGrAbeUux+YljSa2ohXCBmQQ0+Ej1kZaFgcfkA==}
engines: {node: ^20.10.0 || >=21.0.0}
@@ -6671,6 +6351,9 @@ packages:
estree-util-visit@2.0.0:
resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
@@ -6730,10 +6413,6 @@ packages:
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
- fast-glob@3.3.1:
- resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
- engines: {node: '>=8.6.0'}
-
fast-glob@3.3.3:
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
engines: {node: '>=8.6.0'}
@@ -7029,10 +6708,6 @@ packages:
resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
engines: {node: '>=18'}
- globals@16.4.0:
- resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==}
- engines: {node: '>=18'}
-
globals@16.5.0:
resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==}
engines: {node: '>=18'}
@@ -7152,12 +6827,6 @@ packages:
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
hasBin: true
- hermes-estree@0.25.1:
- resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==}
-
- hermes-parser@0.25.1:
- resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==}
-
history@4.10.1:
resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==}
@@ -7715,10 +7384,6 @@ packages:
resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==}
engines: {node: '>=8'}
- iterator.prototype@1.1.5:
- resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
- engines: {node: '>= 0.4'}
-
itertools@2.6.0:
resolution: {integrity: sha512-nCqtnZTEGq8Bcs+W3kqdYL77tV6sGuQCA1WvKeA8L5Bx+BUMWcyHfJTCY38yNf51EE0/uB9UQHB84AM1j+djIw==}
@@ -7944,10 +7609,6 @@ packages:
jsonfile@6.2.0:
resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
- jsx-ast-utils@3.3.5:
- resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
- engines: {node: '>=4.0'}
-
jszip@3.10.1:
resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
@@ -7965,13 +7626,6 @@ packages:
kuler@2.0.0:
resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==}
- language-subtag-registry@0.3.23:
- resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
-
- language-tags@1.0.9:
- resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
- engines: {node: '>=0.10'}
-
latest-version@7.0.0:
resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==}
engines: {node: '>=14.16'}
@@ -8651,6 +8305,9 @@ packages:
resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
engines: {node: '>= 18'}
+ mitt@3.0.1:
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
+
mocha@11.7.5:
resolution: {integrity: sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -8726,27 +8383,6 @@ packages:
resolution: {integrity: sha512-oWgXcUL3zi7KsPNoWLM2Z/EVaOMsZO8em4iAzJmqoo08zinMwsMvkrNbeLDztMdaPJryfYJvbx2OBoBYnPQKpg==}
engines: {node: '>=6'}
- next@16.1.6:
- resolution: {integrity: sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==}
- engines: {node: '>=20.9.0'}
- hasBin: true
- peerDependencies:
- '@opentelemetry/api': ^1.1.0
- '@playwright/test': ^1.51.1
- babel-plugin-react-compiler: '*'
- react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
- react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
- sass: ^1.3.0
- peerDependenciesMeta:
- '@opentelemetry/api':
- optional: true
- '@playwright/test':
- optional: true
- babel-plugin-react-compiler:
- optional: true
- sass:
- optional: true
-
no-case@3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
@@ -8754,10 +8390,6 @@ packages:
resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==}
engines: {node: '>=18'}
- node-exports-info@1.6.0:
- resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==}
- engines: {node: '>= 0.4'}
-
node-forge@1.3.3:
resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==}
engines: {node: '>= 6.13.0'}
@@ -8860,10 +8492,6 @@ packages:
resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
engines: {node: '>= 0.4'}
- object.entries@1.1.9:
- resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==}
- engines: {node: '>= 0.4'}
-
object.fromentries@2.0.8:
resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
engines: {node: '>= 0.4'}
@@ -9557,10 +9185,6 @@ packages:
peerDependencies:
postcss: ^8.4.31
- postcss@8.4.31:
- resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
- engines: {node: ^10 || ^12 || >=14}
-
postcss@8.5.8:
resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==}
engines: {node: ^10 || ^12 || >=14}
@@ -9927,6 +9551,10 @@ packages:
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
engines: {node: '>= 0.4'}
+ regexparam@3.0.0:
+ resolution: {integrity: sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==}
+ engines: {node: '>=8'}
+
regexpu-core@6.4.0:
resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==}
engines: {node: '>=4'}
@@ -10035,11 +9663,6 @@ packages:
engines: {node: '>= 0.4'}
hasBin: true
- resolve@2.0.0-next.6:
- resolution: {integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==}
- engines: {node: '>= 0.4'}
- hasBin: true
-
responselike@3.0.0:
resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==}
engines: {node: '>=14.16'}
@@ -10256,10 +9879,6 @@ packages:
shallowequal@1.1.0:
resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
- sharp@0.34.5:
- resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -10439,9 +10058,6 @@ packages:
resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==}
engines: {node: '>=12.0.0'}
- stable-hash@0.0.5:
- resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==}
-
stack-generator@2.0.10:
resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==}
@@ -10499,17 +10115,6 @@ packages:
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
engines: {node: '>=18'}
- string.prototype.includes@2.0.1:
- resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==}
- engines: {node: '>= 0.4'}
-
- string.prototype.matchall@4.0.12:
- resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
- engines: {node: '>= 0.4'}
-
- string.prototype.repeat@1.0.0:
- resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==}
-
string.prototype.trim@1.2.10:
resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
engines: {node: '>= 0.4'}
@@ -10583,22 +10188,9 @@ packages:
style-to-object@1.0.14:
resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==}
- styled-jsx@5.1.6:
- resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
- engines: {node: '>= 12.0.0'}
- peerDependencies:
- '@babel/core': '*'
- babel-plugin-macros: '*'
- react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0'
- peerDependenciesMeta:
- '@babel/core':
- optional: true
- babel-plugin-macros:
- optional: true
-
- stylehacks@6.1.1:
- resolution: {integrity: sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==}
- engines: {node: ^14 || ^16 || >=18.0}
+ stylehacks@6.1.1:
+ resolution: {integrity: sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==}
+ engines: {node: ^14 || ^16 || >=18.0}
peerDependencies:
postcss: ^8.4.31
@@ -11113,6 +10705,11 @@ packages:
file-loader:
optional: true
+ use-sync-external-store@1.6.0:
+ resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
utf8-byte-length@1.0.5:
resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==}
@@ -11186,6 +10783,11 @@ packages:
rollup: ^4.44.1
vite: ^5.4.11 || ^6.0.0 || ^7.0.0
+ vite-plugin-svgr@4.5.0:
+ resolution: {integrity: sha512-W+uoSpmVkSmNOGPSsDCWVW/DDAyv+9fap9AZXBvWiQqrboJ08j2vh0tFxTD/LjwqwAd3yYSVJgm54S/1GhbdnA==}
+ peerDependencies:
+ vite: '>=2.6.0'
+
vite@8.0.0:
resolution: {integrity: sha512-fPGaRNj9Zytaf8LEiBhY7Z6ijnFKdzU/+mL8EFBaKr7Vw1/FWcTBAMW0wLPJAGMPX38ZPVCVgLceWiEqeoqL2Q==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -11411,6 +11013,11 @@ packages:
workerpool@9.3.4:
resolution: {integrity: sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==}
+ wouter@3.9.0:
+ resolution: {integrity: sha512-sF/od/PIgqEQBQcrN7a2x3MX6MQE6nW0ygCfy9hQuUkuB28wEZuu/6M5GyqkrrEu9M6jxdkgE12yDFsQMKos4Q==}
+ peerDependencies:
+ react: '>=16.8.0'
+
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
@@ -11526,12 +11133,6 @@ packages:
youtube-video-element@1.9.0:
resolution: {integrity: sha512-Hh0dbQM+FVlUaYUbpYkZNUvdKxTNcSNvTGzkQKYShltnX+LRHEp2eYvC2Zm43eU8Np+CBZuoNR2i+seCYzzAyg==}
- zod-validation-error@4.0.2:
- resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==}
- engines: {node: '>=18.0.0'}
- peerDependencies:
- zod: ^3.25.0 || ^4.0.0
-
zod@4.3.6:
resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==}
@@ -13711,12 +13312,6 @@ snapshots:
'@eslint-community/regexpp@4.12.2': {}
- '@eslint/compat@2.0.3(eslint@10.0.3(jiti@2.6.1))':
- dependencies:
- '@eslint/core': 1.1.1
- optionalDependencies:
- eslint: 10.0.3(jiti@2.6.1)
-
'@eslint/config-array@0.23.3':
dependencies:
'@eslint/object-schema': 3.0.3
@@ -13792,103 +13387,6 @@ snapshots:
'@humanwhocodes/retry@0.4.3': {}
- '@img/colour@1.1.0':
- optional: true
-
- '@img/sharp-darwin-arm64@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-darwin-arm64': 1.2.4
- optional: true
-
- '@img/sharp-darwin-x64@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-darwin-x64': 1.2.4
- optional: true
-
- '@img/sharp-libvips-darwin-arm64@1.2.4':
- optional: true
-
- '@img/sharp-libvips-darwin-x64@1.2.4':
- optional: true
-
- '@img/sharp-libvips-linux-arm64@1.2.4':
- optional: true
-
- '@img/sharp-libvips-linux-arm@1.2.4':
- optional: true
-
- '@img/sharp-libvips-linux-ppc64@1.2.4':
- optional: true
-
- '@img/sharp-libvips-linux-riscv64@1.2.4':
- optional: true
-
- '@img/sharp-libvips-linux-s390x@1.2.4':
- optional: true
-
- '@img/sharp-libvips-linux-x64@1.2.4':
- optional: true
-
- '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
- optional: true
-
- '@img/sharp-libvips-linuxmusl-x64@1.2.4':
- optional: true
-
- '@img/sharp-linux-arm64@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-linux-arm64': 1.2.4
- optional: true
-
- '@img/sharp-linux-arm@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-linux-arm': 1.2.4
- optional: true
-
- '@img/sharp-linux-ppc64@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-linux-ppc64': 1.2.4
- optional: true
-
- '@img/sharp-linux-riscv64@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-linux-riscv64': 1.2.4
- optional: true
-
- '@img/sharp-linux-s390x@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-linux-s390x': 1.2.4
- optional: true
-
- '@img/sharp-linux-x64@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-linux-x64': 1.2.4
- optional: true
-
- '@img/sharp-linuxmusl-arm64@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
- optional: true
-
- '@img/sharp-linuxmusl-x64@0.34.5':
- optionalDependencies:
- '@img/sharp-libvips-linuxmusl-x64': 1.2.4
- optional: true
-
- '@img/sharp-wasm32@0.34.5':
- dependencies:
- '@emnapi/runtime': 1.9.0
- optional: true
-
- '@img/sharp-win32-arm64@0.34.5':
- optional: true
-
- '@img/sharp-win32-ia32@0.34.5':
- optional: true
-
- '@img/sharp-win32-x64@0.34.5':
- optional: true
-
'@isaacs/cliui@8.0.2':
dependencies:
string-width: 5.1.2
@@ -14272,15 +13770,6 @@ snapshots:
'@leichtgewicht/ip-codec@2.0.5': {}
- '@mdx-js/loader@3.1.1(webpack@5.105.4(esbuild@0.27.4))':
- dependencies:
- '@mdx-js/mdx': 3.1.1
- source-map: 0.7.6
- optionalDependencies:
- webpack: 5.105.4(esbuild@0.27.4)
- transitivePeerDependencies:
- - supports-color
-
'@mdx-js/mdx@3.1.1':
dependencies:
'@types/estree': 1.0.8
@@ -14402,43 +13891,6 @@ snapshots:
'@tybys/wasm-util': 0.10.1
optional: true
- '@next/env@16.1.6': {}
-
- '@next/eslint-plugin-next@16.1.6':
- dependencies:
- fast-glob: 3.3.1
-
- '@next/mdx@16.1.6(@mdx-js/loader@3.1.1(webpack@5.105.4(esbuild@0.27.4)))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))':
- dependencies:
- source-map: 0.7.6
- optionalDependencies:
- '@mdx-js/loader': 3.1.1(webpack@5.105.4(esbuild@0.27.4))
- '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.4)
-
- '@next/swc-darwin-arm64@16.1.6':
- optional: true
-
- '@next/swc-darwin-x64@16.1.6':
- optional: true
-
- '@next/swc-linux-arm64-gnu@16.1.6':
- optional: true
-
- '@next/swc-linux-arm64-musl@16.1.6':
- optional: true
-
- '@next/swc-linux-x64-gnu@16.1.6':
- optional: true
-
- '@next/swc-linux-x64-musl@16.1.6':
- optional: true
-
- '@next/swc-win32-arm64-msvc@16.1.6':
- optional: true
-
- '@next/swc-win32-x64-msvc@16.1.6':
- optional: true
-
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -14451,8 +13903,6 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.20.1
- '@nolyfill/is-core-module@1.0.39': {}
-
'@npmcli/agent@3.0.0':
dependencies:
agent-base: 7.1.4
@@ -14469,9 +13919,6 @@ snapshots:
'@one-ini/wasm@0.2.1': {}
- '@opentelemetry/api@1.9.0':
- optional: true
-
'@oxc-project/runtime@0.115.0': {}
'@oxc-project/types@0.115.0': {}
@@ -15670,6 +15117,14 @@ snapshots:
'@rolldown/pluginutils@1.0.0-rc.9': {}
+ '@rollup/pluginutils@5.3.0(rollup@4.59.0)':
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-walker: 2.0.2
+ picomatch: 4.0.3
+ optionalDependencies:
+ rollup: 4.59.0
+
'@rollup/rollup-android-arm-eabi@4.59.0':
optional: true
@@ -16083,6 +15538,7 @@ snapshots:
'@swc/helpers@0.5.15':
dependencies:
tslib: 2.8.1
+ optional: true
'@swc/html-darwin-arm64@1.15.18':
optional: true
@@ -16981,8 +16437,6 @@ snapshots:
dependencies:
dequal: 2.0.3
- aria-query@5.3.2: {}
-
array-buffer-byte-length@1.0.2:
dependencies:
call-bound: 1.0.4
@@ -17003,15 +16457,6 @@ snapshots:
array-union@2.1.0: {}
- array.prototype.findlast@1.2.5:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-abstract: 1.24.1
- es-errors: 1.3.0
- es-object-atoms: 1.1.1
- es-shim-unscopables: 1.1.0
-
array.prototype.findlastindex@1.2.6:
dependencies:
call-bind: 1.0.8
@@ -17036,14 +16481,6 @@ snapshots:
es-abstract: 1.24.1
es-shim-unscopables: 1.1.0
- array.prototype.tosorted@1.1.4:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-abstract: 1.24.1
- es-errors: 1.3.0
- es-shim-unscopables: 1.1.0
-
arraybuffer.prototype.slice@1.0.4:
dependencies:
array-buffer-byte-length: 1.0.2
@@ -17062,8 +16499,6 @@ snapshots:
assertion-error@2.0.1: {}
- ast-types-flow@0.0.8: {}
-
astral-regex@2.0.0: {}
astring@1.9.0: {}
@@ -17085,10 +16520,6 @@ snapshots:
dependencies:
possible-typed-array-names: 1.1.0
- axe-core@4.11.1: {}
-
- axobject-query@4.1.0: {}
-
babel-jest@30.3.0(@babel/core@7.29.0):
dependencies:
'@babel/core': 7.29.0
@@ -17532,8 +16963,6 @@ snapshots:
slice-ansi: 3.0.0
string-width: 4.2.3
- client-only@0.0.1: {}
-
clipanion@4.0.0-rc.4(typanion@3.14.0):
dependencies:
typanion: 3.14.0
@@ -17870,8 +17299,6 @@ snapshots:
custom-media-element@1.4.5: {}
- damerau-levenshtein@1.0.8: {}
-
dash-video-element@0.3.1(@svta/cml-cta@1.0.1(@svta/cml-structured-field-values@1.0.1(@svta/cml-utils@1.0.1))(@svta/cml-utils@1.0.1))(@svta/cml-structured-field-values@1.0.1(@svta/cml-utils@1.0.1))(@svta/cml-utils@1.0.1):
dependencies:
custom-media-element: 1.4.5
@@ -18254,26 +17681,6 @@ snapshots:
es-errors@1.3.0: {}
- es-iterator-helpers@1.3.1:
- dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- define-properties: 1.2.1
- es-abstract: 1.24.1
- es-errors: 1.3.0
- es-set-tostringtag: 2.1.0
- function-bind: 1.1.2
- get-intrinsic: 1.3.0
- globalthis: 1.0.4
- gopd: 1.2.0
- has-property-descriptors: 1.0.2
- has-proto: 1.2.0
- has-symbols: 1.1.0
- internal-slot: 1.1.0
- iterator.prototype: 1.1.5
- math-intrinsics: 1.1.0
- safe-array-concat: 1.1.3
-
es-module-lexer@2.0.0: {}
es-object-atoms@1.1.1:
@@ -18354,26 +17761,6 @@ snapshots:
escape-string-regexp@5.0.0: {}
- eslint-config-next@16.1.6(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3):
- dependencies:
- '@next/eslint-plugin-next': 16.1.6
- eslint: 10.0.3(jiti@2.6.1)
- eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)))(eslint@10.0.3(jiti@2.6.1))
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.0.3(jiti@2.6.1))
- eslint-plugin-jsx-a11y: 6.10.2(eslint@10.0.3(jiti@2.6.1))
- eslint-plugin-react: 7.37.5(eslint@10.0.3(jiti@2.6.1))
- eslint-plugin-react-hooks: 7.0.1(eslint@10.0.3(jiti@2.6.1))
- globals: 16.4.0
- typescript-eslint: 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)
- optionalDependencies:
- typescript: 5.9.3
- transitivePeerDependencies:
- - '@typescript-eslint/parser'
- - eslint-import-resolver-webpack
- - eslint-plugin-import-x
- - supports-color
-
eslint-config-prettier@10.1.8(eslint@10.0.3(jiti@2.6.1)):
dependencies:
eslint: 10.0.3(jiti@2.6.1)
@@ -18393,21 +17780,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)))(eslint@10.0.3(jiti@2.6.1)):
- dependencies:
- '@nolyfill/is-core-module': 1.0.39
- debug: 4.4.3(supports-color@8.1.1)
- eslint: 10.0.3(jiti@2.6.1)
- get-tsconfig: 4.13.6
- is-bun-module: 2.0.0
- stable-hash: 0.0.5
- tinyglobby: 0.2.15
- unrs-resolver: 1.11.1
- optionalDependencies:
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.0.3(jiti@2.6.1))
- transitivePeerDependencies:
- - supports-color
-
eslint-import-resolver-typescript@4.4.4(eslint-plugin-import@2.32.0)(eslint@10.0.3(jiti@2.6.1)):
dependencies:
debug: 4.4.3(supports-color@8.1.1)
@@ -18423,17 +17795,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)))(eslint@10.0.3(jiti@2.6.1)))(eslint@10.0.3(jiti@2.6.1)):
- dependencies:
- debug: 3.2.7
- optionalDependencies:
- '@typescript-eslint/parser': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)
- eslint: 10.0.3(jiti@2.6.1)
- eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)))(eslint@10.0.3(jiti@2.6.1))
- transitivePeerDependencies:
- - supports-color
-
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)):
dependencies:
debug: 3.2.7
@@ -18445,35 +17806,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.0.3(jiti@2.6.1)):
- dependencies:
- '@rtsao/scc': 1.1.0
- array-includes: 3.1.9
- 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: 10.0.3(jiti@2.6.1)
- eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)))(eslint@10.0.3(jiti@2.6.1)))(eslint@10.0.3(jiti@2.6.1))
- hasown: 2.0.2
- is-core-module: 2.16.1
- is-glob: 4.0.3
- minimatch: 3.1.5
- object.fromentries: 2.0.8
- object.groupby: 1.0.3
- object.values: 1.2.1
- semver: 6.3.1
- string.prototype.trimend: 1.0.9
- tsconfig-paths: 3.15.0
- optionalDependencies:
- '@typescript-eslint/parser': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)
- transitivePeerDependencies:
- - eslint-import-resolver-typescript
- - eslint-import-resolver-webpack
- - supports-color
-
eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)):
dependencies:
'@rtsao/scc': 1.1.0
@@ -18503,64 +17835,12 @@ snapshots:
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-jsx-a11y@6.10.2(eslint@10.0.3(jiti@2.6.1)):
- dependencies:
- aria-query: 5.3.2
- array-includes: 3.1.9
- array.prototype.flatmap: 1.3.3
- ast-types-flow: 0.0.8
- axe-core: 4.11.1
- axobject-query: 4.1.0
- damerau-levenshtein: 1.0.8
- emoji-regex: 9.2.2
- eslint: 10.0.3(jiti@2.6.1)
- hasown: 2.0.2
- jsx-ast-utils: 3.3.5
- language-tags: 1.0.9
- minimatch: 3.1.5
- object.fromentries: 2.0.8
- safe-regex-test: 1.1.0
- string.prototype.includes: 2.0.1
-
eslint-plugin-mocha@11.2.0(eslint@10.0.3(jiti@2.6.1)):
dependencies:
'@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3(jiti@2.6.1))
eslint: 10.0.3(jiti@2.6.1)
globals: 15.15.0
- eslint-plugin-react-hooks@7.0.1(eslint@10.0.3(jiti@2.6.1)):
- dependencies:
- '@babel/core': 7.29.0
- '@babel/parser': 7.29.0
- eslint: 10.0.3(jiti@2.6.1)
- hermes-parser: 0.25.1
- zod: 4.3.6
- zod-validation-error: 4.0.2(zod@4.3.6)
- transitivePeerDependencies:
- - supports-color
-
- eslint-plugin-react@7.37.5(eslint@10.0.3(jiti@2.6.1)):
- dependencies:
- array-includes: 3.1.9
- array.prototype.findlast: 1.2.5
- array.prototype.flatmap: 1.3.3
- array.prototype.tosorted: 1.1.4
- doctrine: 2.1.0
- es-iterator-helpers: 1.3.1
- eslint: 10.0.3(jiti@2.6.1)
- estraverse: 5.3.0
- hasown: 2.0.2
- jsx-ast-utils: 3.3.5
- minimatch: 3.1.5
- object.entries: 1.1.9
- object.fromentries: 2.0.8
- object.values: 1.2.1
- prop-types: 15.8.1
- resolve: 2.0.0-next.6
- semver: 6.3.1
- string.prototype.matchall: 4.0.12
- string.prototype.repeat: 1.0.0
-
eslint-plugin-unicorn@63.0.0(eslint@10.0.3(jiti@2.6.1)):
dependencies:
'@babel/helper-validator-identifier': 7.28.5
@@ -18701,6 +17981,8 @@ snapshots:
'@types/estree-jsx': 1.0.5
'@types/unist': 3.0.3
+ estree-walker@2.0.2: {}
+
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.8
@@ -18793,14 +18075,6 @@ snapshots:
fast-deep-equal@3.1.3: {}
- fast-glob@3.3.1:
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- '@nodelib/fs.walk': 1.2.8
- glob-parent: 5.1.2
- merge2: 1.4.1
- micromatch: 4.0.8
-
fast-glob@3.3.3:
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -19089,8 +18363,6 @@ snapshots:
globals@15.15.0: {}
- globals@16.4.0: {}
-
globals@16.5.0: {}
globalthis@1.0.4:
@@ -19302,12 +18574,6 @@ snapshots:
he@1.2.0: {}
- hermes-estree@0.25.1: {}
-
- hermes-parser@0.25.1:
- dependencies:
- hermes-estree: 0.25.1
-
history@4.10.1:
dependencies:
'@babel/runtime': 7.28.6
@@ -19847,15 +19113,6 @@ snapshots:
html-escaper: 2.0.2
istanbul-lib-report: 3.0.1
- iterator.prototype@1.1.5:
- dependencies:
- define-data-property: 1.1.4
- es-object-atoms: 1.1.1
- get-intrinsic: 1.3.0
- get-proto: 1.0.1
- has-symbols: 1.1.0
- set-function-name: 2.0.2
-
itertools@2.6.0: {}
jackspeak@3.4.3:
@@ -20285,13 +19542,6 @@ snapshots:
optionalDependencies:
graceful-fs: 4.2.11
- jsx-ast-utils@3.3.5:
- dependencies:
- array-includes: 3.1.9
- array.prototype.flat: 1.3.3
- object.assign: 4.1.7
- object.values: 1.2.1
-
jszip@3.10.1:
dependencies:
lie: 3.3.0
@@ -20309,12 +19559,6 @@ snapshots:
kuler@2.0.0: {}
- language-subtag-registry@0.3.23: {}
-
- language-tags@1.0.9:
- dependencies:
- language-subtag-registry: 0.3.23
-
latest-version@7.0.0:
dependencies:
package-json: 8.1.1
@@ -21258,6 +20502,8 @@ snapshots:
dependencies:
minipass: 7.1.3
+ mitt@3.0.1: {}
+
mocha@11.7.5:
dependencies:
browser-stdout: 1.3.1
@@ -21340,31 +20586,6 @@ snapshots:
next-path@1.0.0: {}
- next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
- dependencies:
- '@next/env': 16.1.6
- '@swc/helpers': 0.5.15
- baseline-browser-mapping: 2.10.7
- caniuse-lite: 1.0.30001778
- postcss: 8.4.31
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.4)
- optionalDependencies:
- '@next/swc-darwin-arm64': 16.1.6
- '@next/swc-darwin-x64': 16.1.6
- '@next/swc-linux-arm64-gnu': 16.1.6
- '@next/swc-linux-arm64-musl': 16.1.6
- '@next/swc-linux-x64-gnu': 16.1.6
- '@next/swc-linux-x64-musl': 16.1.6
- '@next/swc-win32-arm64-msvc': 16.1.6
- '@next/swc-win32-x64-msvc': 16.1.6
- '@opentelemetry/api': 1.9.0
- sharp: 0.34.5
- transitivePeerDependencies:
- - '@babel/core'
- - babel-plugin-macros
-
no-case@3.0.4:
dependencies:
lower-case: 2.0.2
@@ -21377,13 +20598,6 @@ snapshots:
emojilib: 2.4.0
skin-tone: 2.0.0
- node-exports-info@1.6.0:
- dependencies:
- array.prototype.flatmap: 1.3.3
- es-errors: 1.3.0
- object.entries: 1.1.9
- semver: 6.3.1
-
node-forge@1.3.3: {}
node-gyp@11.5.0:
@@ -21492,13 +20706,6 @@ snapshots:
has-symbols: 1.1.0
object-keys: 1.1.1
- 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
-
object.fromentries@2.0.8:
dependencies:
call-bind: 1.0.8
@@ -22242,12 +21449,6 @@ snapshots:
dependencies:
postcss: 8.5.8
- postcss@8.4.31:
- dependencies:
- nanoid: 3.3.11
- picocolors: 1.1.1
- source-map-js: 1.2.1
-
postcss@8.5.8:
dependencies:
nanoid: 3.3.11
@@ -22621,6 +21822,8 @@ snapshots:
gopd: 1.2.0
set-function-name: 2.0.2
+ regexparam@3.0.0: {}
+
regexpu-core@6.4.0:
dependencies:
regenerate: 1.4.2
@@ -22772,15 +21975,6 @@ snapshots:
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- resolve@2.0.0-next.6:
- dependencies:
- es-errors: 1.3.0
- is-core-module: 2.16.1
- node-exports-info: 1.6.0
- object-keys: 1.1.1
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
-
responselike@3.0.0:
dependencies:
lowercase-keys: 3.0.0
@@ -23072,38 +22266,6 @@ snapshots:
shallowequal@1.1.0: {}
- sharp@0.34.5:
- dependencies:
- '@img/colour': 1.1.0
- detect-libc: 2.1.2
- semver: 7.7.4
- optionalDependencies:
- '@img/sharp-darwin-arm64': 0.34.5
- '@img/sharp-darwin-x64': 0.34.5
- '@img/sharp-libvips-darwin-arm64': 1.2.4
- '@img/sharp-libvips-darwin-x64': 1.2.4
- '@img/sharp-libvips-linux-arm': 1.2.4
- '@img/sharp-libvips-linux-arm64': 1.2.4
- '@img/sharp-libvips-linux-ppc64': 1.2.4
- '@img/sharp-libvips-linux-riscv64': 1.2.4
- '@img/sharp-libvips-linux-s390x': 1.2.4
- '@img/sharp-libvips-linux-x64': 1.2.4
- '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
- '@img/sharp-libvips-linuxmusl-x64': 1.2.4
- '@img/sharp-linux-arm': 0.34.5
- '@img/sharp-linux-arm64': 0.34.5
- '@img/sharp-linux-ppc64': 0.34.5
- '@img/sharp-linux-riscv64': 0.34.5
- '@img/sharp-linux-s390x': 0.34.5
- '@img/sharp-linux-x64': 0.34.5
- '@img/sharp-linuxmusl-arm64': 0.34.5
- '@img/sharp-linuxmusl-x64': 0.34.5
- '@img/sharp-wasm32': 0.34.5
- '@img/sharp-win32-arm64': 0.34.5
- '@img/sharp-win32-ia32': 0.34.5
- '@img/sharp-win32-x64': 0.34.5
- optional: true
-
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
@@ -23309,8 +22471,6 @@ snapshots:
stable-hash-x@0.2.0: {}
- stable-hash@0.0.5: {}
-
stack-generator@2.0.10:
dependencies:
stackframe: 1.3.4
@@ -23375,33 +22535,6 @@ snapshots:
get-east-asian-width: 1.5.0
strip-ansi: 7.2.0
- string.prototype.includes@2.0.1:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-abstract: 1.24.1
-
- string.prototype.matchall@4.0.12:
- dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- define-properties: 1.2.1
- es-abstract: 1.24.1
- es-errors: 1.3.0
- es-object-atoms: 1.1.1
- get-intrinsic: 1.3.0
- gopd: 1.2.0
- has-symbols: 1.1.0
- internal-slot: 1.1.0
- regexp.prototype.flags: 1.5.4
- set-function-name: 2.0.2
- side-channel: 1.1.0
-
- string.prototype.repeat@1.0.0:
- dependencies:
- define-properties: 1.2.1
- es-abstract: 1.24.1
-
string.prototype.trim@1.2.10:
dependencies:
call-bind: 1.0.8
@@ -23478,13 +22611,6 @@ snapshots:
dependencies:
inline-style-parser: 0.2.7
- styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.2.4):
- dependencies:
- client-only: 0.0.1
- react: 19.2.4
- optionalDependencies:
- '@babel/core': 7.29.0
-
stylehacks@6.1.1(postcss@8.5.8):
dependencies:
browserslist: 4.28.1
@@ -23606,17 +22732,6 @@ snapshots:
'@swc/core': 1.15.18(@swc/helpers@0.5.15)
esbuild: 0.27.4
- terser-webpack-plugin@5.4.0(esbuild@0.27.4)(webpack@5.105.4(esbuild@0.27.4)):
- dependencies:
- '@jridgewell/trace-mapping': 0.3.31
- jest-worker: 27.5.1
- schema-utils: 4.3.3
- terser: 5.46.0
- webpack: 5.105.4(esbuild@0.27.4)
- optionalDependencies:
- esbuild: 0.27.4
- optional: true
-
terser@5.46.0:
dependencies:
'@jridgewell/source-map': 0.3.11
@@ -24011,6 +23126,10 @@ snapshots:
optionalDependencies:
file-loader: 6.2.0(webpack@5.105.4(@swc/core@1.15.18(@swc/helpers@0.5.15))(esbuild@0.27.4))
+ use-sync-external-store@1.6.0(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+
utf8-byte-length@1.0.5: {}
util-deprecate@1.0.2: {}
@@ -24079,6 +23198,17 @@ snapshots:
rollup: 4.59.0
vite: 8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite-plugin-svgr@4.5.0(rollup@4.59.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@4.59.0)
+ '@svgr/core': 8.1.0(typescript@5.9.3)
+ '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))
+ vite: 8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+ - typescript
+
vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
'@oxc-project/runtime': 0.115.0
@@ -24243,39 +23373,6 @@ snapshots:
- esbuild
- uglify-js
- webpack@5.105.4(esbuild@0.27.4):
- dependencies:
- '@types/eslint-scope': 3.7.7
- '@types/estree': 1.0.8
- '@types/json-schema': 7.0.15
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/wasm-edit': 1.14.1
- '@webassemblyjs/wasm-parser': 1.14.1
- acorn: 8.16.0
- acorn-import-phases: 1.0.4(acorn@8.16.0)
- browserslist: 4.28.1
- chrome-trace-event: 1.0.4
- enhanced-resolve: 5.20.0
- es-module-lexer: 2.0.0
- eslint-scope: 5.1.1
- events: 3.3.0
- glob-to-regexp: 0.4.1
- graceful-fs: 4.2.11
- json-parse-even-better-errors: 2.3.1
- loader-runner: 4.3.1
- mime-types: 2.1.35
- neo-async: 2.6.2
- schema-utils: 4.3.3
- tapable: 2.3.0
- terser-webpack-plugin: 5.4.0(esbuild@0.27.4)(webpack@5.105.4(esbuild@0.27.4))
- watchpack: 2.5.1
- webpack-sources: 3.3.4
- transitivePeerDependencies:
- - '@swc/core'
- - esbuild
- - uglify-js
- optional: true
-
webpackbar@6.0.1(webpack@5.105.4(@swc/core@1.15.18(@swc/helpers@0.5.15))(esbuild@0.27.4)):
dependencies:
ansi-escapes: 4.3.2
@@ -24409,6 +23506,13 @@ snapshots:
workerpool@9.3.4: {}
+ wouter@3.9.0(react@19.2.4):
+ dependencies:
+ mitt: 3.0.1
+ react: 19.2.4
+ regexparam: 3.0.0
+ use-sync-external-store: 1.6.0(react@19.2.4)
+
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
@@ -24505,10 +23609,6 @@ snapshots:
dependencies:
media-played-ranges-mixin: 0.1.0
- zod-validation-error@4.0.2(zod@4.3.6):
- dependencies:
- zod: 4.3.6
-
zod@4.3.6: {}
zwitch@2.0.4: {}
diff --git a/scripts/forbid-todo.sh b/scripts/forbid-todo.sh
index 80287b4f9b..bd719bc1db 100755
--- a/scripts/forbid-todo.sh
+++ b/scripts/forbid-todo.sh
@@ -4,7 +4,7 @@ set -euo pipefail
# Find the string 'TODO' in all files tracked by git, excluding
# this file
-TODOS_FOUND=$(git grep --color=always -nw TODO -- ':!scripts/forbid-todo.sh' ':!.github/workflows/forbid-todo.yml' || true)
+TODOS_FOUND=$(git grep --color=always -nw TODO -- ':!scripts/forbid-todo.sh' ':!.github/workflows/test.yml' || true)
if [ -n "$TODOS_FOUND" ]; then
printf "\e[1;31mERROR: \e[0mTODOs found in codebase:\n"
Cursorless Cheatsheet{" "}
@@ -35,36 +33,36 @@ export const CheatsheetPage: React.FC = ({
{children}
, - ...components, - }; -} diff --git a/packages/cursorless-org/next.config.js b/packages/cursorless-org/next.config.js deleted file mode 100644 index 2cf755db22..0000000000 --- a/packages/cursorless-org/next.config.js +++ /dev/null @@ -1,45 +0,0 @@ -import mdx from "@next/mdx"; -import { readFileSync } from "fs"; -import { join, dirname } from "path"; -import { fileURLToPath } from "url"; - -const withMDX = mdx({ - options: { - providerImportSource: "@mdx-js/react", - }, -}); - -const __dirname = dirname(fileURLToPath(import.meta.url)); - -/** - * The names of the packages that come from the same monorepo as this package. - * We want these to be transpiled by Next.js because we are directly importing - * the source typescript files from these packages. - */ -const references = JSON.parse( - readFileSync(join(__dirname, "tsconfig.json"), "utf-8"), -).references.map(({ path }) => { - return JSON.parse( - readFileSync(join(__dirname, path, "package.json"), "utf-8"), - ).name; -}); - -/** @type {import('next').NextConfig} */ -const nextConfig = { - turbopack: { - rules: { - "*.svg": { - loaders: ["@svgr/webpack"], - as: "*.js", - }, - }, - }, - experimental: { - mdxRs: true, - }, - transpilePackages: references, - reactStrictMode: true, - output: "export", -}; - -export default withMDX(nextConfig); diff --git a/packages/cursorless-org/package.json b/packages/cursorless-org/package.json index b300f37996..124a091205 100644 --- a/packages/cursorless-org/package.json +++ b/packages/cursorless-org/package.json @@ -19,10 +19,10 @@ } }, "scripts": { - "dev": "next dev", - "build": "next build", - "start": "http-server out -a 127.0.0.1 -p 8085", - "lint": "next lint", + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "lint": "eslint .", "compile": "tsc --build", "watch": "tsc --build --watch", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" @@ -30,27 +30,23 @@ "dependencies": { "@cursorless/cheatsheet": "workspace:*", "@cursorless/common": "workspace:*", - "@mdx-js/loader": "^3.1.1", - "@mdx-js/react": "^3.1.1", - "@next/mdx": "^16.1.6", - "next": "^16.1.6", "react": "^19.2.4", "react-dom": "^19.2.4", - "react-player": "^3.4.0" + "react-player": "^3.4.0", + "wouter": "^3.9.0" }, "devDependencies": { - "@eslint/compat": "^2.0.3", - "@svgr/webpack": "^8.1.0", "@tailwindcss/postcss": "^4.2.1", - "@types/mdx": "^2.0.13", "@types/node": "^24.12.0", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", "eslint": "^10.0.3", - "eslint-config-next": "^16.1.6", "http-server": "^14.1.1", "postcss": "^8.5.8", "tailwindcss": "^4.2.1", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vite": "^8.0.0", + "vite-plugin-svgr": "^4.5.0" } } diff --git a/packages/cursorless-org/public/_redirects b/packages/cursorless-org/public/_redirects new file mode 100644 index 0000000000..7797f7c6a7 --- /dev/null +++ b/packages/cursorless-org/public/_redirects @@ -0,0 +1 @@ +/* /index.html 200 diff --git a/packages/cursorless-org/public/andrew-dant.jpeg b/packages/cursorless-org/public/andrew-dant.jpeg deleted file mode 100644 index b97798f53b..0000000000 Binary files a/packages/cursorless-org/public/andrew-dant.jpeg and /dev/null differ diff --git a/packages/cursorless-org/public/big-hats.png b/packages/cursorless-org/public/big-hats.png deleted file mode 100644 index 446085f52f..0000000000 Binary files a/packages/cursorless-org/public/big-hats.png and /dev/null differ diff --git a/packages/cursorless-org/public/james-stout.jpeg b/packages/cursorless-org/public/james-stout.jpeg deleted file mode 100644 index 9155024311..0000000000 Binary files a/packages/cursorless-org/public/james-stout.jpeg and /dev/null differ diff --git a/packages/cursorless-org/public/max-foxley-marrable.jpeg b/packages/cursorless-org/public/max-foxley-marrable.jpeg deleted file mode 100644 index e1f8c550c0..0000000000 Binary files a/packages/cursorless-org/public/max-foxley-marrable.jpeg and /dev/null differ diff --git a/packages/cursorless-org/public/nathan-heffley.jpeg b/packages/cursorless-org/public/nathan-heffley.jpeg deleted file mode 100644 index 3094f53024..0000000000 Binary files a/packages/cursorless-org/public/nathan-heffley.jpeg and /dev/null differ diff --git a/packages/cursorless-org/public/sohee-yang.jpeg b/packages/cursorless-org/public/sohee-yang.jpeg deleted file mode 100644 index 844a612275..0000000000 Binary files a/packages/cursorless-org/public/sohee-yang.jpeg and /dev/null differ diff --git a/packages/cursorless-org/src/App.tsx b/packages/cursorless-org/src/App.tsx new file mode 100644 index 0000000000..ebd7486802 --- /dev/null +++ b/packages/cursorless-org/src/App.tsx @@ -0,0 +1,17 @@ +import { Redirect, Route, Router, Switch } from "wouter"; +import { CheatsheetPage } from "./CheatsheetPage"; +import { LandingPage } from "./LandingPage"; + +export function App() { + return ( ++ Voice coding{" "} + at the speed of thought +
+ ); +} diff --git a/packages/cursorless-org/src/components/BaseSocial.tsx b/packages/cursorless-org/src/components/BaseSocial.tsx deleted file mode 100644 index 757ed1f25f..0000000000 --- a/packages/cursorless-org/src/components/BaseSocial.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import { CURSORLESS_ORG_URL } from "@cursorless/common"; -import { - VIDEO_SHARE_THUMBNAIL_HEIGHT, - VIDEO_SHARE_THUMBNAIL_URL, - VIDEO_SHARE_THUMBNAIL_WIDTH, -} from "./constants"; - -export interface Props { - title: string; - description: string; - relativeUrl: string; - youtubeSlug?: string; - thumbnailUrl?: string; - thumbnailWidth?: string; - thumbnailHeight?: string; -} - -export default function BaseSocial({ - title, - description, - relativeUrl, - youtubeSlug, - thumbnailUrl = VIDEO_SHARE_THUMBNAIL_URL, - thumbnailWidth = VIDEO_SHARE_THUMBNAIL_WIDTH, - thumbnailHeight = VIDEO_SHARE_THUMBNAIL_HEIGHT, -}: Props) { - const url = `${CURSORLESS_ORG_URL}/${relativeUrl}`; - - return ( - <> - - - - - - - - - - - - - - - - - {youtubeSlug != null ? ( -- {children} -
- ), - h2: ({ children }) => ( -- {children} -
- ), - h3: ({ children }) => ( -- {children} -
- ), - h4: ({ children }) => ( -- {children} -
- ), - hr: () =>, - ul: ({ children }) =>
- {children}
- {children}
- {children} --