diff --git a/.changeset/violet-walls-cover.md b/.changeset/violet-walls-cover.md new file mode 100644 index 0000000000..a98f317c24 --- /dev/null +++ b/.changeset/violet-walls-cover.md @@ -0,0 +1,5 @@ +--- +'nextra': minor +--- + +compile `nextra/components`, `nextra/hooks`, `nextra-theme-docs` and `nextra-theme-blog` source code with react-compiler diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 5c830de041..ad6ecfabf3 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -10,6 +10,11 @@ const TAILWIND_CONFIG = { } } +const REACT_COMPILER_RESTRICT = { + name: 'react', + importNames: ['memo', 'useCallback', 'useMemo', 'forwardRef'] +} + /** @type {import('eslint').Linter.Config} */ module.exports = { root: true, @@ -144,6 +149,14 @@ module.exports = { ] } }, + { + files: ['packages/**'], + plugins: ['eslint-plugin-react-compiler'], + rules: { + 'no-restricted-imports': ['error', REACT_COMPILER_RESTRICT], + 'react-compiler/react-compiler': 'error' + } + }, // ⚙️ nextra-theme-docs { ...TAILWIND_CONFIG, @@ -166,7 +179,8 @@ module.exports = { ...TAILWIND_CONFIG.rules, 'no-restricted-imports': [ 'error', - { name: 'next/link', message: 'Use `` instead' } + { name: 'next/link', message: 'Use `` instead' }, + REACT_COMPILER_RESTRICT ], // False positive due Tailwind CSS v4 'tailwindcss/no-custom-classname': 'off' diff --git a/docs/app/layout.tsx b/docs/app/layout.tsx index 7fd97797bb..f03ea0de85 100644 --- a/docs/app/layout.tsx +++ b/docs/app/layout.tsx @@ -1,7 +1,7 @@ import { NextraLogo, VercelLogo } from '@components/icons' import cn from 'clsx' import type { Metadata, Viewport } from 'next' -import { Footer, Layout, Link, Navbar } from 'nextra-theme-docs' +import { Footer, Layout, Navbar } from 'nextra-theme-docs' import { Banner, Head } from 'nextra/components' import { getPageMap } from 'nextra/page-map' import type { FC, ReactNode } from 'react' @@ -56,13 +56,8 @@ const RootLayout: FC<{ children: ReactNode }> = async ({ children }) => { const banner = ( - -
- Nextra 4.0 is released.{' '} - - Read more - -
+ + 🚧 This is WIP documentation for Nextra 4.0 ) const navbar = ( diff --git a/docs/app/page.tsx b/docs/app/page.tsx index 8882d74145..e0ab0d9923 100644 --- a/docs/app/page.tsx +++ b/docs/app/page.tsx @@ -39,7 +39,7 @@ const IndexPage: FC = () => {

-
+
-

{generateMetadata({ params }).title}

+

{(await generateMetadata({ params })).title}

{(await getPosts()) .filter(post => post.frontMatter.tags.includes(decodeURIComponent(params.tag)) diff --git a/package.json b/package.json index c204cbbb30..567cf1ad2a 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "eslint-plugin-deprecation": "3.0.0", "eslint-plugin-import": "2.31.0", "eslint-plugin-react": "7.37.2", + "eslint-plugin-react-compiler": "19.0.0-beta-df7b47d-20241124", "eslint-plugin-react-hooks": "5.0.0", "eslint-plugin-sonarjs": "^2.0.4", "eslint-plugin-tailwindcss": "3.17.3", diff --git a/packages/esbuild-react-compiler-plugin/package.json b/packages/esbuild-react-compiler-plugin/package.json new file mode 100644 index 0000000000..fffc8f4157 --- /dev/null +++ b/packages/esbuild-react-compiler-plugin/package.json @@ -0,0 +1,27 @@ +{ + "name": "esbuild-react-compiler-plugin", + "version": "0.0.0", + "type": "module", + "description": "", + "author": "Dimitri POSTOLOV", + "license": "ISC", + "private": true, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + }, + "./package.json": "./package.json" + }, + "types": "./dist/index.d.ts", + "scripts": { + "build": "tsup", + "dev": "tsup --watch" + }, + "dependencies": { + "react-compiler-webpack": "0.1.2" + }, + "devDependencies": { + "@types/node": "^22.0.0" + } +} diff --git a/packages/esbuild-react-compiler-plugin/src/env.d.ts b/packages/esbuild-react-compiler-plugin/src/env.d.ts new file mode 100644 index 0000000000..10439f37a1 --- /dev/null +++ b/packages/esbuild-react-compiler-plugin/src/env.d.ts @@ -0,0 +1,5 @@ +declare module 'react-compiler-webpack/dist/react-compiler-loader.js' { + export default function reactCompilerLoader( + source: string | Buffer + ): Promise +} diff --git a/packages/esbuild-react-compiler-plugin/src/index.ts b/packages/esbuild-react-compiler-plugin/src/index.ts new file mode 100644 index 0000000000..f0349fa787 --- /dev/null +++ b/packages/esbuild-react-compiler-plugin/src/index.ts @@ -0,0 +1,64 @@ +import fs from 'node:fs/promises' +import path from 'node:path' +import reactCompilerLoader from 'react-compiler-webpack/dist/react-compiler-loader.js' +import type { Options } from 'tsup' + +const reactCompilerConfig = { + sources(_filename: string) { + return true + }, + target: '18' +} + +export const reactCompilerPlugin = ( + filter: RegExp +): NonNullable[number] => ({ + name: 'react-compiler', + setup(build) { + build.onLoad({ filter }, async args => { + // Read the file content + const code = await fs.readFile(args.path) + return new Promise<{ + contents: string + loader: 'ts' | 'tsx' + }>((resolve, reject) => { + function callback(error: Error | null, result?: string) { + if (!result) { + reject(error) + return + } + // Mark the file as a ts/tsx file + const loader = path.extname(args.path).slice(1) as 'ts' | 'tsx' + const relativePath = path.relative(process.cwd(), args.path) + + if ( + /^import \{ c as _c } from "react-compiler-runtime";/m.test(result) + ) { + console.info( + '🚀 File', + relativePath, + 'was optimized with react-compiler' + ) + } else if (!/^'use no memo'/m.test(result)) { + console.error( + '❌ File', + relativePath, + 'was not optimized with react-compiler' + ) + } + + resolve({ contents: result, loader }) + } + + reactCompilerLoader.call( + { + async: () => callback, + getOptions: () => reactCompilerConfig, + resourcePath: args.path + }, + code + ) + }) + }) + } +}) diff --git a/packages/esbuild-react-compiler-plugin/tsconfig.json b/packages/esbuild-react-compiler-plugin/tsconfig.json new file mode 100644 index 0000000000..61aa255661 --- /dev/null +++ b/packages/esbuild-react-compiler-plugin/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "es2022", + "module": "ESNext", + "declaration": true, + "noEmit": true, + "esModuleInterop": true, + "strict": true, + "skipLibCheck": true, + "strictNullChecks": true, + "lib": ["esnext", "dom"], + "moduleResolution": "node", + "resolveJsonModule": true + }, + "exclude": ["dist"] +} diff --git a/packages/esbuild-react-compiler-plugin/tsup.config.ts b/packages/esbuild-react-compiler-plugin/tsup.config.ts new file mode 100644 index 0000000000..f598dfe9b4 --- /dev/null +++ b/packages/esbuild-react-compiler-plugin/tsup.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup' +import packageJson from './package.json' + +export default defineConfig({ + name: packageJson.name, + entry: ['src/**/*.ts'], + format: 'esm', + dts: true, + splitting: process.env.NODE_ENV === 'production', + bundle: false +}) diff --git a/packages/nextra-theme-blog/package.json b/packages/nextra-theme-blog/package.json index 1d1e9bb984..89d3282d07 100644 --- a/packages/nextra-theme-blog/package.json +++ b/packages/nextra-theme-blog/package.json @@ -31,12 +31,14 @@ }, "dependencies": { "next-themes": "^0.4.0", - "next-view-transitions": "^0.3.0" + "next-view-transitions": "^0.3.0", + "react-compiler-runtime": "19.0.0-beta-df7b47d-20241124" }, "devDependencies": { "@tailwindcss/postcss": "^4.0.0-beta.2", "@tailwindcss/typography": "^0.5.15", "@types/react": "^18.2.23", + "esbuild-react-compiler-plugin": "workspace:*", "next": "^15.0.2", "nextra": "workspace:*", "postcss": "^8.4.33", diff --git a/packages/nextra-theme-blog/src/components/cusdis.tsx b/packages/nextra-theme-blog/src/components/cusdis.tsx index 42ee692189..7619834a9d 100644 --- a/packages/nextra-theme-blog/src/components/cusdis.tsx +++ b/packages/nextra-theme-blog/src/components/cusdis.tsx @@ -17,7 +17,10 @@ export const Comments: FC<{ useEffect(() => { try { // update the theme for the cusdis iframe when theme changed - window.CUSDIS?.setTheme(resolvedTheme as 'dark' | 'light') + if (window.CUSDIS) { + // window.CUSDIS? doesn't work with react-compiler + window.CUSDIS.setTheme(resolvedTheme as 'dark' | 'light') + } } catch (error) { console.error(error) } @@ -25,10 +28,10 @@ export const Comments: FC<{ if (!appId) { console.warn('[nextra/cusdis] `appId` is required') - return + return null } if (!mounted) { - return + return null } return ( diff --git a/packages/nextra-theme-blog/src/components/go-back.tsx b/packages/nextra-theme-blog/src/components/go-back.tsx index c2808b1b35..5cae4ae503 100644 --- a/packages/nextra-theme-blog/src/components/go-back.tsx +++ b/packages/nextra-theme-blog/src/components/go-back.tsx @@ -10,7 +10,7 @@ export const GoBack: FC = () => { const segments = usePathname().split('/') const isNestedPage = segments.length > 2 - if (!isNestedPage) return + if (!isNestedPage) return null return (
) diff --git a/packages/nextra-theme-docs/src/components/footer/index.tsx b/packages/nextra-theme-docs/src/components/footer/index.tsx index 4e662c142c..ee5cbf1fd2 100644 --- a/packages/nextra-theme-docs/src/components/footer/index.tsx +++ b/packages/nextra-theme-docs/src/components/footer/index.tsx @@ -6,7 +6,7 @@ import { Switchers } from './switchers' export const Footer: FC> = ({ className, - children = `MIT ${new Date().getFullYear()} © Nextra.`, + children, ...props }) => { return ( @@ -17,7 +17,7 @@ export const Footer: FC> = ({
-
+
> = ({ )} {...props} > - {children} + {children || `MIT ${new Date().getFullYear()} © Nextra.`}
) diff --git a/packages/nextra-theme-docs/src/components/footer/switchers.ts b/packages/nextra-theme-docs/src/components/footer/switchers.ts index 51d974530d..8b9a774c71 100644 --- a/packages/nextra-theme-docs/src/components/footer/switchers.ts +++ b/packages/nextra-theme-docs/src/components/footer/switchers.ts @@ -10,5 +10,4 @@ export const Switchers: FC<{ children: ReactNode }> = ({ children }) => { if (hideSidebar && (darkMode || i18n.length)) { return children } - return null } diff --git a/packages/nextra-theme-docs/src/components/index.ts b/packages/nextra-theme-docs/src/components/index.ts index 0ae06404b0..646071c272 100644 --- a/packages/nextra-theme-docs/src/components/index.ts +++ b/packages/nextra-theme-docs/src/components/index.ts @@ -1,3 +1,5 @@ +'use no memo' + export { Breadcrumb } from './breadcrumb' export { Footer } from './footer' export { LastUpdated } from './last-updated' diff --git a/packages/nextra-theme-docs/src/components/locale-switch.tsx b/packages/nextra-theme-docs/src/components/locale-switch.tsx index 323440da1d..b39a98e4e3 100644 --- a/packages/nextra-theme-docs/src/components/locale-switch.tsx +++ b/packages/nextra-theme-docs/src/components/locale-switch.tsx @@ -17,7 +17,7 @@ interface LocaleSwitchProps { export const LocaleSwitch: FC = ({ lite, className }) => { const { i18n } = useThemeConfig() const pathname = usePathname() - if (!i18n.length) return + if (!i18n.length) return null const [, locale] = pathname.split('/', 2) return ( diff --git a/packages/nextra-theme-docs/src/components/navbar/index.tsx b/packages/nextra-theme-docs/src/components/navbar/index.tsx index 9275eba1df..a0e634d87d 100644 --- a/packages/nextra-theme-docs/src/components/navbar/index.tsx +++ b/packages/nextra-theme-docs/src/components/navbar/index.tsx @@ -46,7 +46,7 @@ export const Navbar: FC = props => { className={cn( 'nextra-navbar-blur', 'x:absolute x:-z-1 x:size-full', - 'bordered x:border-b', + 'nextra-border x:border-b', 'x:backdrop-blur-md x:bg-nextra-bg/70' )} /> diff --git a/packages/nextra-theme-docs/src/components/pagination.tsx b/packages/nextra-theme-docs/src/components/pagination.tsx index f96ec38161..9f732a0723 100644 --- a/packages/nextra-theme-docs/src/components/pagination.tsx +++ b/packages/nextra-theme-docs/src/components/pagination.tsx @@ -25,12 +25,12 @@ export const Pagination: FC = () => { if (prev && !prev.isUnderCurrentDocsTree) prev = false if (next && !next.isUnderCurrentDocsTree) next = false - if (!prev && !next) return + if (!prev && !next) return null return (
diff --git a/packages/nextra-theme-docs/src/components/sidebar.tsx b/packages/nextra-theme-docs/src/components/sidebar.tsx index a5811670d2..a88500c29e 100644 --- a/packages/nextra-theme-docs/src/components/sidebar.tsx +++ b/packages/nextra-theme-docs/src/components/sidebar.tsx @@ -1,5 +1,11 @@ +/* eslint-disable react-compiler/react-compiler, no-restricted-imports */ + 'use client' +// TODO: enable in the future +// This is a big component and something could be broken after enabling react-compiler +'use no memo' + import cn from 'clsx' import { usePathname } from 'next/navigation' import type { Heading } from 'nextra' @@ -54,9 +60,9 @@ const classes = { 'x:before:w-px x:before:bg-gray-200 x:before:content-[""] x:dark:before:bg-neutral-800', 'x:ps-3 x:before:start-0 x:pt-1 x:ms-3' ), - wrapper: cn('x:p-4 x:overflow-y-auto nextra-scrollbar mask'), + wrapper: cn('x:p-4 x:overflow-y-auto nextra-scrollbar nextra-mask'), footer: cn( - 'nextra-sidebar-footer x:border-t bordered x:flex x:items-center x:gap-2 x:py-4 x:mx-4' + 'nextra-sidebar-footer x:border-t nextra-border x:flex x:items-center x:gap-2 x:py-4 x:mx-4' ) } diff --git a/packages/nextra-theme-docs/src/components/toc.tsx b/packages/nextra-theme-docs/src/components/toc.tsx index 29a78318e4..6325c8536a 100644 --- a/packages/nextra-theme-docs/src/components/toc.tsx +++ b/packages/nextra-theme-docs/src/components/toc.tsx @@ -28,86 +28,74 @@ export const TOC: FC = ({ toc, filePath, pageTitle }) => { const tocRef = useRef(null!) const themeConfig = useThemeConfig() - const hasHeadings = toc.length > 0 - const hasMetaInfo = Boolean( + const hasMetaInfo = themeConfig.feedback.content || - themeConfig.editLink || - themeConfig.toc.extraContent || - themeConfig.toc.backToTop - ) + themeConfig.editLink || + themeConfig.toc.extraContent || + themeConfig.toc.backToTop const activeIndex = toc.findIndex(({ id }) => id === activeSlug) useEffect(() => { if (!activeSlug) return - const anchor = tocRef.current?.querySelector(`a[href="#${activeSlug}"]`) + const anchor = tocRef.current.querySelector(`a[href="#${activeSlug}"]`) + if (!anchor) return - if (anchor) { - scrollIntoView(anchor, { - behavior: 'smooth', - block: 'center', - inline: 'center', - scrollMode: 'if-needed', - boundary: tocRef.current - }) - } + scrollIntoView(anchor, { + behavior: 'smooth', + block: 'center', + inline: 'center', + scrollMode: 'if-needed', + boundary: tocRef.current + }) }, [activeSlug]) return (
- {hasHeadings && ( - <> -

- {themeConfig.toc.title} -

-
    - {toc.map(({ id, value, depth }) => ( -
  • - - {value} - -
  • - ))} -
- - )} +

+ {themeConfig.toc.title} +

+
    + {toc.map(({ id, value, depth }) => ( +
  • + + {value} + +
  • + ))} +
{hasMetaInfo && ( -
+
{themeConfig.feedback.content && ( ( diff --git a/packages/nextra-theme-docs/src/mdx-components/heading.tsx b/packages/nextra-theme-docs/src/mdx-components/heading.tsx index 7a69ddbdd7..94f103dbb8 100644 --- a/packages/nextra-theme-docs/src/mdx-components/heading.tsx +++ b/packages/nextra-theme-docs/src/mdx-components/heading.tsx @@ -1,3 +1,6 @@ +// TODO: Isn't optimized, due HOC? +'use no memo' + import cn from 'clsx' import type { ComponentProps, FC } from 'react' import { HeadingAnchor } from './heading-anchor.client' @@ -16,7 +19,7 @@ const createHeading = ( : 'x:font-semibold x:target:animate-[fade-in_1.5s]', { h1: 'x:mt-2 x:text-4xl', - h2: 'x:mt-10 x:border-b x:pb-1 x:text-3xl bordered', + h2: 'x:mt-10 x:border-b x:pb-1 x:text-3xl nextra-border', h3: 'x:mt-8 x:text-2xl', h4: 'x:mt-8 x:text-xl', h5: 'x:mt-8 x:text-lg', diff --git a/packages/nextra-theme-docs/src/mdx-components/index.tsx b/packages/nextra-theme-docs/src/mdx-components/index.tsx index 829b0963bc..147df912ca 100644 --- a/packages/nextra-theme-docs/src/mdx-components/index.tsx +++ b/packages/nextra-theme-docs/src/mdx-components/index.tsx @@ -1,3 +1,6 @@ +// should be used on server +'use no memo' + /* eslint sort-keys: error */ import cn from 'clsx' import { @@ -53,7 +56,7 @@ const DEFAULT_COMPONENTS = getNextraMDXComponents({ h4: H4, h5: H5, h6: H6, - hr: props =>
, + hr: props =>
, li: props =>
  • , ol: props => (
      ( - -) +export const Link: typeof Anchor = ({ className, ...props }) => { + return ( + + ) +} diff --git a/packages/nextra-theme-docs/src/stores/active-anchor.ts b/packages/nextra-theme-docs/src/stores/active-anchor.ts index f3b8008d48..8dbaca244b 100644 --- a/packages/nextra-theme-docs/src/stores/active-anchor.ts +++ b/packages/nextra-theme-docs/src/stores/active-anchor.ts @@ -1,3 +1,5 @@ +'use no memo' + import type { Dispatch } from 'react' import { create } from 'zustand' diff --git a/packages/nextra-theme-docs/src/stores/config.tsx b/packages/nextra-theme-docs/src/stores/config.tsx index 519f847601..1aaa1a3d4b 100644 --- a/packages/nextra-theme-docs/src/stores/config.tsx +++ b/packages/nextra-theme-docs/src/stores/config.tsx @@ -4,7 +4,7 @@ import type { PageMapItem } from 'nextra' import { useFSRoute } from 'nextra/hooks' import { normalizePages } from 'nextra/normalize-pages' import type { FC, ReactElement, ReactNode } from 'react' -import { createContext, useContext, useMemo } from 'react' +import { createContext, useContext } from 'react' const ConfigContext = createContext | null>( null @@ -30,14 +30,10 @@ export const ConfigProvider: FC<{ }> = ({ children, pageMap, navbar, footer }) => { const pathname = useFSRoute() - const normalizedPages = useMemo( - () => - normalizePages({ - list: pageMap, - route: pathname - }), - [pageMap, pathname] - ) + const normalizedPages = normalizePages({ + list: pageMap, + route: pathname + }) const { activeThemeContext } = normalizedPages return ( diff --git a/packages/nextra-theme-docs/src/stores/focused-route.ts b/packages/nextra-theme-docs/src/stores/focused-route.ts index a2268e3590..3e4f28ae22 100644 --- a/packages/nextra-theme-docs/src/stores/focused-route.ts +++ b/packages/nextra-theme-docs/src/stores/focused-route.ts @@ -1,3 +1,5 @@ +'use no memo' + import type { Dispatch } from 'react' import { create } from 'zustand' diff --git a/packages/nextra-theme-docs/src/stores/index.ts b/packages/nextra-theme-docs/src/stores/index.ts index 5711a140f2..6635245832 100644 --- a/packages/nextra-theme-docs/src/stores/index.ts +++ b/packages/nextra-theme-docs/src/stores/index.ts @@ -1,3 +1,5 @@ +'use no memo' + export { useActiveAnchor, setActiveSlug } from './active-anchor' export { useConfig, ConfigProvider } from './config' export { useFocusedRoute, setFocusedRoute } from './focused-route' diff --git a/packages/nextra-theme-docs/src/stores/menu.ts b/packages/nextra-theme-docs/src/stores/menu.ts index 36c5727c98..fbce3a4c90 100644 --- a/packages/nextra-theme-docs/src/stores/menu.ts +++ b/packages/nextra-theme-docs/src/stores/menu.ts @@ -1,3 +1,5 @@ +'use no memo' + import type { Dispatch, SetStateAction } from 'react' import { create } from 'zustand' diff --git a/packages/nextra-theme-docs/src/stores/theme-config.ts b/packages/nextra-theme-docs/src/stores/theme-config.ts index 07c1d1ae07..193c0e96d1 100644 --- a/packages/nextra-theme-docs/src/stores/theme-config.ts +++ b/packages/nextra-theme-docs/src/stores/theme-config.ts @@ -1,4 +1,5 @@ 'use client' +'use no memo' import type { ComponentProps } from 'react' import { createContext, createElement, useContext } from 'react' diff --git a/packages/nextra-theme-docs/src/style.css b/packages/nextra-theme-docs/src/style.css index 514547097a..1833a91cc4 100644 --- a/packages/nextra-theme-docs/src/style.css +++ b/packages/nextra-theme-docs/src/style.css @@ -57,11 +57,11 @@ html { } } -.bordered { +.nextra-border { @apply x:border-gray-200 x:dark:border-neutral-800 x:contrast-more:border-neutral-400!; } -.mask { +.nextra-mask { mask-image: linear-gradient( to bottom, transparent, diff --git a/packages/nextra-theme-docs/src/utils/get-git-issue-url.ts b/packages/nextra-theme-docs/src/utils/get-git-issue-url.ts index bd37bd685e..874d16ad08 100644 --- a/packages/nextra-theme-docs/src/utils/get-git-issue-url.ts +++ b/packages/nextra-theme-docs/src/utils/get-git-issue-url.ts @@ -1,3 +1,5 @@ +'use no memo' + import { gitUrlParse } from './git-url-parse' export function getGitIssueUrl({ diff --git a/packages/nextra-theme-docs/src/utils/git-url-parse.ts b/packages/nextra-theme-docs/src/utils/git-url-parse.ts index 66cc476f39..1322e545b6 100644 --- a/packages/nextra-theme-docs/src/utils/git-url-parse.ts +++ b/packages/nextra-theme-docs/src/utils/git-url-parse.ts @@ -1,3 +1,5 @@ +'use no memo' + export function gitUrlParse(url: string) { const { href, origin, pathname } = new URL(url) diff --git a/packages/nextra-theme-docs/src/utils/index.ts b/packages/nextra-theme-docs/src/utils/index.ts index dc0d9ac0de..77aea79c7e 100644 --- a/packages/nextra-theme-docs/src/utils/index.ts +++ b/packages/nextra-theme-docs/src/utils/index.ts @@ -1,2 +1,4 @@ +'use no memo' + export { getGitIssueUrl } from './get-git-issue-url' export { gitUrlParse } from './git-url-parse' diff --git a/packages/nextra-theme-docs/tsconfig.json b/packages/nextra-theme-docs/tsconfig.json index a9277e0dde..81499efef4 100644 --- a/packages/nextra-theme-docs/tsconfig.json +++ b/packages/nextra-theme-docs/tsconfig.json @@ -7,6 +7,7 @@ "esModuleInterop": true, "strict": true, "skipLibCheck": true, + "strictNullChecks": true, "jsx": "react-jsx", "moduleResolution": "bundler", "lib": ["ESNext", "DOM"], diff --git a/packages/nextra-theme-docs/tsup.config.ts b/packages/nextra-theme-docs/tsup.config.ts index 38a0d05e94..fda25a799d 100644 --- a/packages/nextra-theme-docs/tsup.config.ts +++ b/packages/nextra-theme-docs/tsup.config.ts @@ -1,3 +1,4 @@ +import { reactCompilerPlugin } from 'esbuild-react-compiler-plugin' import { defineConfig } from 'tsup' import packageJson from './package.json' @@ -15,7 +16,8 @@ export default defineConfig([ format: 'esm', dts: true, outExtension: () => ({ js: '.js' }), - bundle: false + bundle: false, + esbuildPlugins: [reactCompilerPlugin(/\.tsx?$/)] }, { name: `${packageJson.name}/css`, diff --git a/packages/nextra/package.json b/packages/nextra/package.json index 710d48757c..2d5beda68f 100644 --- a/packages/nextra/package.json +++ b/packages/nextra/package.json @@ -90,6 +90,7 @@ "mdast-util-gfm": "^3.0.0", "mdast-util-to-hast": "^13.2.0", "negotiator": "^1.0.0", + "react-compiler-runtime": "19.0.0-beta-df7b47d-20241124", "rehype-katex": "^7.0.0", "rehype-pretty-code": "0.14.0", "rehype-raw": "^7.0.0", @@ -118,6 +119,7 @@ "@types/webpack": "^5.28.5", "@vitejs/plugin-react": "^4.3.1", "esbuild-plugin-svgr": "^3.0.0", + "esbuild-react-compiler-plugin": "workspace:*", "next": "^15.0.2", "react": "18.3.1", "unified": "^11.0.5", diff --git a/packages/nextra/src/client/components/collapse.tsx b/packages/nextra/src/client/components/collapse.tsx index 88ce295983..ad4d05c0e0 100644 --- a/packages/nextra/src/client/components/collapse.tsx +++ b/packages/nextra/src/client/components/collapse.tsx @@ -2,7 +2,7 @@ import cn from 'clsx' import type { FC, ReactNode } from 'react' -import { Children, useEffect, useMemo, useRef } from 'react' +import { Children, useEffect, useRef, useState } from 'react' export const Collapse: FC<{ children: ReactNode @@ -18,7 +18,7 @@ export const Collapse: FC<{ closeDuration = 300 }) => { const containerRef = useRef(null!) - const initialOpen = useRef(isOpen) + const [initialOpen] = useState(isOpen) const animationRef = useRef(0) const initialRender = useRef(true) useEffect(() => { @@ -61,18 +61,16 @@ export const Collapse: FC<{ initialRender.current = false }, []) // Add inner
      only if children.length != 1 - const newChildren = useMemo( - () => - Children.count(children) === 1 && - children && - typeof children === 'object' && - 'type' in children ? ( - children - ) : ( -
      {children}
      - ), - [children] - ) + const newChildren = + Children.count(children) === 1 && + children && + typeof children === 'object' && + 'type' in children ? ( + children + ) : ( +
      {children}
      + ) + return (
      diff --git a/packages/nextra/src/client/components/file-tree/file.tsx b/packages/nextra/src/client/components/file-tree/file.tsx index b46ae13952..0d1b52ca84 100644 --- a/packages/nextra/src/client/components/file-tree/file.tsx +++ b/packages/nextra/src/client/components/file-tree/file.tsx @@ -7,15 +7,17 @@ export type FileProps = { active?: boolean } -export const File: FC = ({ name, active }) => ( -
    1. - {/* Text can shrink icon */} - - {name} -
    2. -) +export const File: FC = ({ name, active }) => { + return ( +
    3. + {/* Text can shrink icon */} + + {name} +
    4. + ) +} diff --git a/packages/nextra/src/client/components/file-tree/folder.tsx b/packages/nextra/src/client/components/file-tree/folder.tsx index 17d9ff0779..98b4db3d6f 100644 --- a/packages/nextra/src/client/components/file-tree/folder.tsx +++ b/packages/nextra/src/client/components/file-tree/folder.tsx @@ -1,8 +1,8 @@ 'use client' import cn from 'clsx' -import { memo, useCallback, useState } from 'react' -import type { ReactNode } from 'react' +import { useState } from 'react' +import type { FC, ReactNode } from 'react' import { FolderIcon, FolderOpenIcon } from '../../icons/index.js' import { Button } from '../button.js' import type { FileProps } from './file.js' @@ -13,41 +13,44 @@ type FolderProps = FileProps & { children: ReactNode } -export const Folder = memo( - ({ name, open, children, defaultOpen = false, active }) => { - const [isOpen, setIsOpen] = useState(defaultOpen) +export const Folder: FC = ({ + name, + open, + children, + defaultOpen = false, + active +}) => { + const [isOpen, setIsOpen] = useState(defaultOpen) - const toggle = useCallback(() => { - setIsOpen(v => !v) - }, []) + const toggle = () => { + setIsOpen(v => !v) + } - const isFolderOpen = open === undefined ? isOpen : open + const isFolderOpen = open === undefined ? isOpen : open - const ComponentToUse = isFolderOpen ? FolderOpenIcon : FolderIcon + const ComponentToUse = isFolderOpen ? FolderOpenIcon : FolderIcon - return ( -
    5. - - {isFolderOpen && ( -
        {children}
      - )} -
    6. - ) - } -) -Folder.displayName = 'Folder' + return ( +
    7. + + {isFolderOpen && ( +
        {children}
      + )} +
    8. + ) +} diff --git a/packages/nextra/src/client/components/file-tree/index.tsx b/packages/nextra/src/client/components/file-tree/index.tsx index ea8a5c7c9f..63c84c6038 100644 --- a/packages/nextra/src/client/components/file-tree/index.tsx +++ b/packages/nextra/src/client/components/file-tree/index.tsx @@ -1,3 +1,5 @@ +'use no memo' + import type { ComponentProps } from 'react' import { File } from './file.js' import { Folder } from './folder.js' diff --git a/packages/nextra/src/client/components/head.tsx b/packages/nextra/src/client/components/head.tsx index 40477b55cc..112133fd8e 100644 --- a/packages/nextra/src/client/components/head.tsx +++ b/packages/nextra/src/client/components/head.tsx @@ -58,7 +58,7 @@ type HeadProps = Partial> & { children?: ReactNode } -const _Head: FC = ({ children, ...props }) => { +const Head_: FC = ({ children, ...props }) => { const { data, error } = headSchema.safeParse(props) if (error) { throw fromZodError(error) @@ -112,7 +112,7 @@ function makePrimaryColor(val: string): string { return `hsl(${h + s + l})` } -export const Head = Object.assign(_Head, { +export const Head = Object.assign(Head_, { viewport: { themeColor: [ { media: '(prefers-color-scheme: light)', color: '#fff' }, diff --git a/packages/nextra/src/client/components/index.ts b/packages/nextra/src/client/components/index.ts index b9f8b8ccf2..ed4f585b6e 100644 --- a/packages/nextra/src/client/components/index.ts +++ b/packages/nextra/src/client/components/index.ts @@ -1,3 +1,5 @@ +'use no memo' + export { Banner } from './banner/index.js' export { FileTree } from './file-tree/index.js' export { SkipNavContent, SkipNavLink } from './skip-nav/index.js' diff --git a/packages/nextra/src/client/components/mathjax.ts b/packages/nextra/src/client/components/mathjax.ts index 300d4da0c7..80bb8840e4 100644 --- a/packages/nextra/src/client/components/mathjax.ts +++ b/packages/nextra/src/client/components/mathjax.ts @@ -1,3 +1,4 @@ 'use client' +'use no memo' export { MathJax, MathJaxContext } from 'better-react-mathjax' diff --git a/packages/nextra/src/client/components/playground.tsx b/packages/nextra/src/client/components/playground.tsx index 0395301a07..f593a7a7a5 100644 --- a/packages/nextra/src/client/components/playground.tsx +++ b/packages/nextra/src/client/components/playground.tsx @@ -28,7 +28,7 @@ export const Playground: FC< useEffect(() => { async function doCompile() { // Importing in useEffect to not increase global bundle size - const { compileMdx } = await import('../../server/compile.js') + const { compileMdx } = await importCompile() try { const rawJs = await compileMdx(source) setCompiledSource(rawJs) @@ -70,3 +70,8 @@ export const Playground: FC< return fallback } + +// Otherwise react-compiler fails +function importCompile() { + return import('../../server/compile.js') +} diff --git a/packages/nextra/src/client/components/popup/index.client.tsx b/packages/nextra/src/client/components/popup/index.client.tsx index 91a95815a0..195a305c60 100644 --- a/packages/nextra/src/client/components/popup/index.client.tsx +++ b/packages/nextra/src/client/components/popup/index.client.tsx @@ -3,7 +3,7 @@ import { Popover, PopoverPanel } from '@headlessui/react' import type { PopoverPanelProps, PopoverProps } from '@headlessui/react' import cn from 'clsx' -import { createContext, useCallback, useContext, useState } from 'react' +import { createContext, useContext, useState } from 'react' import type { FC, MouseEventHandler } from 'react' const PopupContext = createContext(null) @@ -19,9 +19,9 @@ function usePopup(): boolean { export const Popup: FC = props => { const [isOpen, setIsOpen] = useState(false) - const handleMouse: MouseEventHandler = useCallback(event => { + const handleMouse: MouseEventHandler = event => { setIsOpen(event.type === 'mouseenter') - }, []) + } return ( diff --git a/packages/nextra/src/client/components/popup/index.tsx b/packages/nextra/src/client/components/popup/index.tsx index b1a011c212..3d14f5348d 100644 --- a/packages/nextra/src/client/components/popup/index.tsx +++ b/packages/nextra/src/client/components/popup/index.tsx @@ -1,3 +1,5 @@ +'use no memo' + import { PopoverButton } from '@headlessui/react' import type { ComponentProps } from 'react' import { Popup as _Popup, PopupPanel } from './index.client.js' diff --git a/packages/nextra/src/client/components/search.tsx b/packages/nextra/src/client/components/search.tsx index 89dae7869c..82a2de0bce 100644 --- a/packages/nextra/src/client/components/search.tsx +++ b/packages/nextra/src/client/components/search.tsx @@ -11,16 +11,21 @@ import { addBasePath } from 'next/dist/client/add-base-path' import NextLink from 'next/link' import { useRouter } from 'next/navigation' import type { FC, FocusEventHandler, ReactElement, SyntheticEvent } from 'react' -import { - useCallback, - useDeferredValue, - useEffect, - useRef, - useState -} from 'react' -import { useMounted } from '../hooks/index.js' +import { useDeferredValue, useEffect, useRef, useState } from 'react' +import { useMounted } from '../hooks/use-mounted.js' import { InformationCircleIcon, SpinnerIcon } from '../icons/index.js' +// Fix React Compiler (BuildHIR::lowerExpression) Handle Import expressions +export async function importPagefind() { + window.pagefind = await import( + /* webpackIgnore: true */ addBasePath('/_pagefind/pagefind.js') + ) + await window.pagefind.options({ + baseUrl: '/' + // ... more search options + }) +} + type PagefindResult = { excerpt: string meta: { @@ -74,56 +79,49 @@ export const Search: FC = ({ // defer pagefind results update for prioritizing user input state const deferredSearch = useDeferredValue(search) - const handleSearch = useCallback(async (value: string) => { - if (!value) { - setResults([]) - setError('') - return - } - - if (!window.pagefind) { - setIsLoading(true) - setError('') - try { - window.pagefind = await import( - /* webpackIgnore: true */ addBasePath('/_pagefind/pagefind.js') - ) - await window.pagefind.options({ - baseUrl: '/' - // ... more search options - }) - } catch (error) { - const message = - error instanceof Error - ? process.env.NODE_ENV !== 'production' && - error.message.includes('Failed to fetch') - ? DEV_SEARCH_NOTICE // This error will be tree-shaked in production - : `${error.constructor.name}: ${error.message}` - : String(error) - setError(message) - setIsLoading(false) + useEffect(() => { + const handleSearch = async (value: string) => { + if (!value) { + setResults([]) + setError('') return } - } - const { results } = await window.pagefind.search(value) - const data = await Promise.all(results.map(o => o.data())) - setResults( - data.map(newData => ({ - ...newData, - sub_results: newData.sub_results.map(r => { - const url = r.url.replace(/\.html$/, '').replace(/\.html#/, '#') + if (!window.pagefind) { + setIsLoading(true) + setError('') + try { + await importPagefind() + } catch (error) { + const message = + error instanceof Error + ? process.env.NODE_ENV !== 'production' && + error.message.includes('Failed to fetch') + ? DEV_SEARCH_NOTICE // This error will be tree-shaked in production + : `${error.constructor.name}: ${error.message}` + : String(error) + setError(message) + setIsLoading(false) + return + } + } + const { results } = await window.pagefind.search(value) + const data = await Promise.all(results.map(o => o.data())) - return { ...r, url } - }) - })) - ) - setIsLoading(false) - }, []) + setResults( + data.map(newData => ({ + ...newData, + sub_results: newData.sub_results.map(r => { + const url = r.url.replace(/\.html$/, '').replace(/\.html#/, '#') - useEffect(() => { + return { ...r, url } + }) + })) + ) + setIsLoading(false) + } handleSearch(deferredSearch) - }, [handleSearch, deferredSearch]) + }, [deferredSearch]) const router = useRouter() const [focused, setFocused] = useState(false) @@ -164,7 +162,7 @@ export const Search: FC = ({ className={cn( 'x:absolute x:my-1.5 x:select-none x:end-1.5', 'x:h-5 x:rounded x:bg-nextra-bg x:px-1.5 x:font-mono x:text-[11px] x:font-medium x:text-gray-500', - 'x:border bordered', + 'x:border nextra-border', 'x:contrast-more:text-current', 'x:items-center x:gap-1 x:flex', 'x:max-sm:hidden not-prose' @@ -180,30 +178,24 @@ export const Search: FC = ({ ) - const handleFocus = useCallback(event => { + const handleFocus: FocusEventHandler = event => { const isFocus = event.type === 'focus' setFocused(isFocus) - }, []) + } - const handleChange = useCallback( - (event: SyntheticEvent) => { - const { value } = event.currentTarget - setSearch(value) - }, - [] - ) + const handleChange = (event: SyntheticEvent) => { + const { value } = event.currentTarget + setSearch(value) + } - const handleSelect = useCallback( - (searchResult: PagefindResult | null) => { - if (!searchResult) return - // Calling before navigation so selector `html:not(:has(*:focus))` in styles.css will work, - // and we'll have padding top since input is not focused - inputRef.current?.blur() - router.push(searchResult.url) - setSearch('') - }, - [router] - ) + const handleSelect = (searchResult: PagefindResult | null) => { + if (!searchResult) return + // Calling before navigation so selector `html:not(:has(*:focus))` in styles.css will work, + // and we'll have padding top since input is not focused + inputRef.current?.blur() + router.push(searchResult.url) + setSearch('') + } return ( diff --git a/packages/nextra/src/client/components/skip-nav/index.client.tsx b/packages/nextra/src/client/components/skip-nav/index.client.tsx index 765c5dcb9f..600457d1c5 100644 --- a/packages/nextra/src/client/components/skip-nav/index.client.tsx +++ b/packages/nextra/src/client/components/skip-nav/index.client.tsx @@ -40,20 +40,22 @@ export const SkipNavLink: FC = ({ className, id = DEFAULT_ID, children = DEFAULT_LABEL -}: Pick) => ( - -) +}: Pick) => { + return ( + + ) +} diff --git a/packages/nextra/src/client/components/skip-nav/index.tsx b/packages/nextra/src/client/components/skip-nav/index.tsx index f57d48bd2c..d32e2f89c9 100644 --- a/packages/nextra/src/client/components/skip-nav/index.tsx +++ b/packages/nextra/src/client/components/skip-nav/index.tsx @@ -6,4 +6,6 @@ export { SkipNavLink } from './index.client.js' export const SkipNavContent: FC, 'id'>> = ({ id = DEFAULT_ID -}) =>
      +}) => { + return
      +} diff --git a/packages/nextra/src/client/components/tabs/index.client.tsx b/packages/nextra/src/client/components/tabs/index.client.tsx index f73624a00f..d45a47d4e2 100644 --- a/packages/nextra/src/client/components/tabs/index.client.tsx +++ b/packages/nextra/src/client/components/tabs/index.client.tsx @@ -15,7 +15,7 @@ import type { } from '@headlessui/react' import cn from 'clsx' import type { FC, ReactElement, ReactNode } from 'react' -import { useCallback, useEffect, useState } from 'react' +import { useEffect, useState } from 'react' type TabItem = string | ReactElement @@ -75,7 +75,7 @@ export const Tabs: FC< } }, []) // eslint-disable-line react-hooks/exhaustive-deps -- only on mount - const handleChange = useCallback((index: number) => { + const handleChange = (index: number) => { if (storageKey) { const newValue = String(index) localStorage.setItem(storageKey, newValue) @@ -89,7 +89,7 @@ export const Tabs: FC< } setSelectedIndex(index) onChange?.(index) - }, []) // eslint-disable-line react-hooks/exhaustive-deps -- only on mount + } return ( > diff --git a/packages/nextra/src/client/hocs/with-icons.tsx b/packages/nextra/src/client/hocs/with-icons.tsx index 7d4b8bbeb6..95ec4d3f8a 100644 --- a/packages/nextra/src/client/hocs/with-icons.tsx +++ b/packages/nextra/src/client/hocs/with-icons.tsx @@ -1,3 +1,6 @@ +/* should be used on server, and hocs aren't optimized by react-compiler */ +'use no memo' + import path from 'node:path' import type { FC, SVGProps } from 'react' import { diff --git a/packages/nextra/src/client/hooks/index.ts b/packages/nextra/src/client/hooks/index.ts index 74671b8bdb..569ccd6a00 100644 --- a/packages/nextra/src/client/hooks/index.ts +++ b/packages/nextra/src/client/hooks/index.ts @@ -1,2 +1,4 @@ +'use no memo' + export { useMounted } from './use-mounted.js' export { useFSRoute } from './use-fs-route.js' diff --git a/packages/nextra/src/client/hooks/use-fs-route.ts b/packages/nextra/src/client/hooks/use-fs-route.ts index 0ef8e20992..6613cf687a 100644 --- a/packages/nextra/src/client/hooks/use-fs-route.ts +++ b/packages/nextra/src/client/hooks/use-fs-route.ts @@ -1,16 +1,13 @@ import { usePathname } from 'next/navigation' -import { useMemo } from 'react' const defaultLocale = process.env.NEXTRA_DEFAULT_LOCALE export function useFSRoute() { const pathname = usePathname() - return useMemo( - () => - (defaultLocale ? '/' + pathname.split('/').slice(2).join('/') : pathname) - .replace(/\.html$/, '') - .replace(/\/index(\/|$)/, '$1') - .replace(/\/$/, '') || '/', - [pathname] + return ( + (defaultLocale ? '/' + pathname.split('/').slice(2).join('/') : pathname) + .replace(/\.html$/, '') + .replace(/\/index(\/|$)/, '$1') + .replace(/\/$/, '') || '/' ) } diff --git a/packages/nextra/src/client/hooks/use-mounted.ts b/packages/nextra/src/client/hooks/use-mounted.ts index 23501126a5..2750894fe1 100644 --- a/packages/nextra/src/client/hooks/use-mounted.ts +++ b/packages/nextra/src/client/hooks/use-mounted.ts @@ -1,5 +1,8 @@ 'use client' +// don't need to memoize boolean `mounted` value +'use no memo' + import { useEffect, useState } from 'react' export function useMounted(): boolean { diff --git a/packages/nextra/src/client/icons/index.ts b/packages/nextra/src/client/icons/index.ts index 180e8eb6d5..7efde1c6e3 100644 --- a/packages/nextra/src/client/icons/index.ts +++ b/packages/nextra/src/client/icons/index.ts @@ -1,3 +1,5 @@ +'use no memo' + export { ReactComponent as ArrowRightIcon } from './arrow-right.svg' export { ReactComponent as CheckIcon } from './check.svg' export { ReactComponent as CopyIcon } from './copy.svg' diff --git a/packages/nextra/src/client/mdx-components.ts b/packages/nextra/src/client/mdx-components.ts index 2d267a969a..0481021151 100644 --- a/packages/nextra/src/client/mdx-components.ts +++ b/packages/nextra/src/client/mdx-components.ts @@ -1,3 +1,5 @@ +'use no memo' + import type { ComponentPropsWithoutRef, FC, JSX } from 'react' import type { MDXWrapper } from '../types.js' import { Anchor } from './mdx-components/anchor.js' diff --git a/packages/nextra/src/client/mdx-components/anchor.tsx b/packages/nextra/src/client/mdx-components/anchor.tsx index c9d1c2d2cd..0903d1d0b6 100644 --- a/packages/nextra/src/client/mdx-components/anchor.tsx +++ b/packages/nextra/src/client/mdx-components/anchor.tsx @@ -8,7 +8,10 @@ export const Anchor: FC> = ({ href = '', ...props }) => { - props.className = cn('x:focus-visible:nextra-focus', props.className) + props = { + ...props, + className: cn('x:focus-visible:nextra-focus', props.className) + } if (EXTERNAL_URL_RE.test(href)) { const { children } = props return ( diff --git a/packages/nextra/src/client/mdx-components/details.tsx b/packages/nextra/src/client/mdx-components/details.tsx index e4e09ce44b..bd769e8dc6 100644 --- a/packages/nextra/src/client/mdx-components/details.tsx +++ b/packages/nextra/src/client/mdx-components/details.tsx @@ -1,15 +1,14 @@ 'use client' import cn from 'clsx' -import type { ComponentProps, FC, ReactNode } from 'react' -import { - Children, - cloneElement, - useEffect, - useMemo, - useRef, - useState +import type { + ComponentProps, + Dispatch, + FC, + ReactNode, + SetStateAction } from 'react' +import { Children, cloneElement, useEffect, useRef, useState } from 'react' import { Collapse } from '../components/collapse.js' export const Details: FC> = ({ @@ -41,37 +40,7 @@ export const Details: FC> = ({ setDelayedOpenState(true) }, [isOpen]) - const [summaryElement, restChildren] = useMemo( - function findSummary(list = children): [summary: ReactNode, ReactNode] { - let summary: ReactNode - - const rest = Children.map(list, child => { - if ( - !summary && // Add onClick only for first summary - child && - typeof child === 'object' && - 'type' in child - ) { - if (child.type === 'summary') { - summary = cloneElement(child, { - onClick(event: MouseEvent) { - event.preventDefault() - setIsOpen(v => !v) - } - }) - return - } - if (child.type !== Details && child.props.children) { - ;[summary, child] = findSummary(child.props.children) - } - } - return child - }) - - return [summary, rest] - }, - [children] - ) + const [summaryElement, restChildren] = findSummary(children, setIsOpen) return (
      > = ({
      ) } + +// Fix Unsupported declaration type for hoisting. variable "findSummary" declared with FunctionExpression +function findSummary( + list: ReactNode, + setIsOpen: Dispatch> +): [summary: ReactNode, ReactNode] { + let summary: ReactNode + + const rest = Children.map(list, child => { + if ( + !summary && // Add onClick only for first summary + child && + typeof child === 'object' && + 'type' in child + ) { + if (child.type === 'summary') { + summary = cloneElement(child, { + onClick(event: MouseEvent) { + event.preventDefault() + setIsOpen(v => !v) + } + }) + return + } + if (child.type !== Details && child.props.children) { + ;[summary, child] = findSummary(child.props.children, setIsOpen) + } + } + return child + }) + + return [summary, rest] +} diff --git a/packages/nextra/src/client/mdx-components/image.ts b/packages/nextra/src/client/mdx-components/image.tsx similarity index 76% rename from packages/nextra/src/client/mdx-components/image.ts rename to packages/nextra/src/client/mdx-components/image.tsx index 8035be2b18..199db801dc 100644 --- a/packages/nextra/src/client/mdx-components/image.ts +++ b/packages/nextra/src/client/mdx-components/image.tsx @@ -1,7 +1,6 @@ import type { ImageProps } from 'next/image' import NextImage from 'next/image' import type { FC } from 'react' -import { createElement } from 'react' export const Image: FC = props => { if ( @@ -18,5 +17,7 @@ This is Turbopack bug, which will not occurs on production (since Webpack is use placeholder: 'empty' } } - return createElement(typeof props.src === 'object' ? NextImage : 'img', props) + const ComponentToUse = typeof props.src === 'object' ? NextImage : 'img' + // @ts-expect-error -- createElement isn't optimized by react compiler + return } diff --git a/packages/nextra/src/client/mdx-components/index.ts b/packages/nextra/src/client/mdx-components/index.ts index 33432c5962..afcbd922da 100644 --- a/packages/nextra/src/client/mdx-components/index.ts +++ b/packages/nextra/src/client/mdx-components/index.ts @@ -1,3 +1,5 @@ +'use no memo' + export { Pre } from './pre/index.js' export { Anchor } from './anchor.js' export { Code } from './code.js' diff --git a/packages/nextra/src/client/mdx-components/pre/copy-to-clipboard.tsx b/packages/nextra/src/client/mdx-components/pre/copy-to-clipboard.tsx index b8b283ee73..2ad20219a4 100644 --- a/packages/nextra/src/client/mdx-components/pre/copy-to-clipboard.tsx +++ b/packages/nextra/src/client/mdx-components/pre/copy-to-clipboard.tsx @@ -1,7 +1,7 @@ 'use client' import type { ComponentProps, FC } from 'react' -import { useCallback, useEffect, useState } from 'react' +import { useEffect, useState } from 'react' import { Button } from '../../components/button.js' import { CheckIcon, CopyIcon } from '../../icons/index.js' @@ -19,21 +19,23 @@ export const CopyToClipboard: FC> = props => { } }, [isCopied]) - const handleClick: NonNullable['onClick']> = - useCallback(async event => { - setCopied(true) - if (!navigator.clipboard) { - console.error('Access to clipboard rejected!') - return - } - try { - const container = event.currentTarget.parentNode!.parentNode! - const content = container.querySelector('pre code')?.textContent || '' - await navigator.clipboard.writeText(content) - } catch { - console.error('Failed to copy!') - } - }, []) + const handleClick: NonNullable< + ComponentProps<'button'>['onClick'] + > = async event => { + setCopied(true) + if (!navigator.clipboard) { + console.error('Access to clipboard rejected!') + return + } + const container = event.currentTarget.parentNode!.parentNode! + const content = container.querySelector('pre code')?.textContent || '' + try { + // container should be not inside a try/catch statement, otherwise react-compiler give an error + await navigator.clipboard.writeText(content) + } catch { + console.error('Failed to copy!') + } + } const IconToUse = isCopied ? CheckIcon : CopyIcon diff --git a/packages/nextra/src/client/mdx-components/summary.tsx b/packages/nextra/src/client/mdx-components/summary.tsx index 16d2728351..37f2657de2 100644 --- a/packages/nextra/src/client/mdx-components/summary.tsx +++ b/packages/nextra/src/client/mdx-components/summary.tsx @@ -6,28 +6,30 @@ export const Summary: FC> = ({ children, className, ...props -}) => ( - ` contains text with other elements, like `foo bar` - 'x:whitespace-pre-wrap', - 'x:select-none x:rounded', - className - )} - {...props} - > - {children} - { + return ( + summary:first-child>&]:rotate-90 x:transition' + 'x:focus-visible:nextra-focus', + 'x:flex x:items-center x:cursor-pointer x:p-1 x:transition-colors x:hover:bg-gray-100 x:dark:hover:bg-neutral-800', + 'x:[&::-webkit-details-marker]:hidden', // Safari + // display: flex removes whitespace when `` contains text with other elements, like `foo bar` + 'x:whitespace-pre-wrap', + 'x:select-none x:rounded', + className )} - strokeWidth="3" - /> - -) + {...props} + > + {children} + summary:first-child>&]:rotate-90 x:transition' + )} + strokeWidth="3" + /> + + ) +} diff --git a/packages/nextra/src/client/mdx-components/table.tsx b/packages/nextra/src/client/mdx-components/table.tsx index c87de7d295..3a6f6d3651 100644 --- a/packages/nextra/src/client/mdx-components/table.tsx +++ b/packages/nextra/src/client/mdx-components/table.tsx @@ -1,42 +1,50 @@ import cn from 'clsx' import type { ComponentProps, FC } from 'react' -const _Table: FC> = props => ( - -) -const Th: FC> = props => ( - -) -const Td: FC> = props => ( -
      -) -const Tr: FC> = props => ( -
      -) +const Table_: FC> = props => { + return ( + + ) +} +const Th: FC> = props => { + return ( + + ) +} +const Td: FC> = props => { + return ( +
      + ) +} +const Tr: FC> = props => { + return ( +
      + ) +} -export const Table = Object.assign(_Table, { +export const Table = Object.assign(Table_, { Th, Tr, Td diff --git a/packages/nextra/src/client/normalize-pages.ts b/packages/nextra/src/client/normalize-pages.ts index 7ab4e86648..d064df700f 100644 --- a/packages/nextra/src/client/normalize-pages.ts +++ b/packages/nextra/src/client/normalize-pages.ts @@ -1,3 +1,5 @@ +'use no memo' + import type { z } from 'zod' import type { itemSchema, menuSchema } from '../server/schemas' import type { Folder, FrontMatter, MdxFile, PageMapItem } from '../types.js' diff --git a/packages/nextra/src/client/pages.ts b/packages/nextra/src/client/pages.ts index 23c6db5972..25eefa12c7 100644 --- a/packages/nextra/src/client/pages.ts +++ b/packages/nextra/src/client/pages.ts @@ -1,3 +1,5 @@ +'use no memo' + import { notFound } from 'next/navigation' import { getRouteToFilepath } from '../server/page-map/get.js' import { logger } from '../server/utils.js' diff --git a/packages/nextra/src/client/remove-links.ts b/packages/nextra/src/client/remove-links.ts index f9838adf35..6c95c3cad3 100644 --- a/packages/nextra/src/client/remove-links.ts +++ b/packages/nextra/src/client/remove-links.ts @@ -1,3 +1,6 @@ +// should be used on server +'use no memo' + import type { ReactElement } from 'react' import { Children, cloneElement } from 'react' diff --git a/packages/nextra/src/client/setup-page.tsx b/packages/nextra/src/client/setup-page.tsx index b5403e44f1..389ebe7ff0 100644 --- a/packages/nextra/src/client/setup-page.tsx +++ b/packages/nextra/src/client/setup-page.tsx @@ -1,8 +1,10 @@ +/* should be used on server, and hocs aren't optimized by react-compiler */ +'use no memo' + /* * ⚠️ Attention! * This file should be never used directly, only in loader.ts */ - import { useMDXComponents as getMDXComponents } from 'next-mdx-import-source-file' import type { ComponentProps, FC } from 'react' import { createElement } from 'react' diff --git a/packages/nextra/src/env.d.ts b/packages/nextra/src/env.d.ts index cadb95abda..9ce9ff07f6 100644 --- a/packages/nextra/src/env.d.ts +++ b/packages/nextra/src/env.d.ts @@ -1,12 +1,3 @@ -declare module 'title' { - export default function title( - title: string, - special?: { - special: string[] - } - ) -} - declare namespace globalThis { var pagefind: { search: (query: string) => Promise<{ @@ -20,8 +11,7 @@ declare namespace globalThis { } declare module '*.svg' { - import type { FC, SVGProps } from 'react' - export const ReactComponent: FC> + export { ReactComponent } from './icon.js' } declare module 'next-mdx-import-source-file' { diff --git a/packages/nextra/src/icon.d.ts b/packages/nextra/src/icon.ts similarity index 62% rename from packages/nextra/src/icon.d.ts rename to packages/nextra/src/icon.ts index 950bfd7521..a4322f2922 100644 --- a/packages/nextra/src/icon.d.ts +++ b/packages/nextra/src/icon.ts @@ -1,3 +1,6 @@ +/* + * This file is used in tsup patch to generate types for SVG files. + **/ import type { FC, SVGProps } from 'react' declare const ReactComponent: FC> diff --git a/packages/nextra/tsconfig.json b/packages/nextra/tsconfig.json index 10ef30312e..73de49624f 100644 --- a/packages/nextra/tsconfig.json +++ b/packages/nextra/tsconfig.json @@ -7,6 +7,7 @@ "esModuleInterop": true, "strict": true, "skipLibCheck": true, + "strictNullChecks": true, "jsx": "react-jsx", "lib": ["esnext", "dom"], "moduleResolution": "node", diff --git a/packages/nextra/tsup.config.ts b/packages/nextra/tsup.config.ts index 0fb134523c..a08dc09968 100644 --- a/packages/nextra/tsup.config.ts +++ b/packages/nextra/tsup.config.ts @@ -1,14 +1,21 @@ import fs from 'node:fs/promises' import path from 'node:path' import svgr from 'esbuild-plugin-svgr' +import { reactCompilerPlugin } from 'esbuild-react-compiler-plugin' import { defineConfig } from 'tsup' import { defaultEntry } from '../nextra-theme-docs/tsup.config.js' import packageJson from './package.json' import { CWD, IS_PRODUCTION } from './src/server/constants.js' +const SEP = path.sep === '/' ? '/' : '\\\\' + +const CLIENT_FILE_RE = new RegExp( + '/nextra/src/client/.*\\.tsx?$'.replaceAll('/', SEP) +) + export default defineConfig({ name: packageJson.name, - entry: [...defaultEntry, '!src/types.ts', 'src/**/*.svg'], + entry: [...defaultEntry, '!src/icon.ts', 'src/**/*.svg'], format: 'esm', dts: true, splitting: IS_PRODUCTION, @@ -34,7 +41,8 @@ export default defineConfig({ ] } } - }) + }), + reactCompilerPlugin(CLIENT_FILE_RE) ], plugins: [ { diff --git a/patches/tsup@8.3.5.patch b/patches/tsup@8.3.5.patch index 4d8458980e..3e107320a8 100644 --- a/patches/tsup@8.3.5.patch +++ b/patches/tsup@8.3.5.patch @@ -8,7 +8,7 @@ index 226885535450922fb10e07d26cad66dd2e349ca3..981272bfd587251c552de42930292c9c ignoreFiles, + // https://stackoverflow.com/a/72679927 + require('@rollup/plugin-alias')({ -+ entries: [{ find: /^.*\.svg$/, replacement: 'src/icon.d.ts' }] ++ entries: [{ find: /^.*\.svg$/, replacement: 'src/icon.ts' }] + }), dtsPlugin.default({ tsconfig: options.tsconfig, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0984bbe4fb..a0af16e55e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,7 +25,7 @@ patchedDependencies: hash: ih2n7uyu6sqdsauhnxm6ovrrua path: patches/next@13.5.6.patch tsup@8.3.5: - hash: sh5kwwsnc5iccgx7xoo5prtbwy + hash: omll37iwfpv74y4pqujpifv454 path: patches/tsup@8.3.5.patch importers: @@ -65,6 +65,9 @@ importers: eslint-plugin-react: specifier: 7.37.2 version: 7.37.2(eslint@9.15.0) + eslint-plugin-react-compiler: + specifier: 19.0.0-beta-df7b47d-20241124 + version: 19.0.0-beta-df7b47d-20241124(eslint@9.15.0) eslint-plugin-react-hooks: specifier: 5.0.0 version: 5.0.0(eslint@9.15.0) @@ -94,7 +97,7 @@ importers: version: 6.0.1 tsup: specifier: 8.3.5 - version: 8.3.5(patch_hash=sh5kwwsnc5iccgx7xoo5prtbwy)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2) + version: 8.3.5(patch_hash=omll37iwfpv74y4pqujpifv454)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2) tsx: specifier: ^4.19.1 version: 4.19.2 @@ -232,6 +235,16 @@ importers: specifier: ^4.0.0-beta.2 version: 4.0.0-beta.2 + packages/esbuild-react-compiler-plugin: + dependencies: + react-compiler-webpack: + specifier: 0.1.2 + version: 0.1.2(babel-plugin-react-compiler@19.0.0-beta-df7b47d-20241124) + devDependencies: + '@types/node': + specifier: ^22.0.0 + version: 22.9.1 + packages/nextra: dependencies: '@formatjs/intl-localematcher': @@ -291,6 +304,9 @@ importers: negotiator: specifier: ^1.0.0 version: 1.0.0 + react-compiler-runtime: + specifier: 19.0.0-beta-df7b47d-20241124 + version: 19.0.0-beta-df7b47d-20241124(react@18.3.1) react-dom: specifier: '>=18' version: 18.3.1(react@18.3.1) @@ -373,6 +389,9 @@ importers: esbuild-plugin-svgr: specifier: ^3.0.0 version: 3.0.0(patch_hash=kmh2qsgxlktkyk6nn2h2tj76dm)(esbuild@0.24.0)(typescript@5.7.2) + esbuild-react-compiler-plugin: + specifier: workspace:* + version: link:../esbuild-react-compiler-plugin next: specifier: 15.0.3 version: 15.0.3(patch_hash=ih2n7uyu6sqdsauhnxm6ovrrua)(@babel/core@7.26.0)(react-dom@18.3.1)(react@18.3.1) @@ -394,6 +413,9 @@ importers: next-view-transitions: specifier: ^0.3.0 version: 0.3.2(next@15.0.3)(react-dom@18.3.1)(react@18.3.1) + react-compiler-runtime: + specifier: 19.0.0-beta-df7b47d-20241124 + version: 19.0.0-beta-df7b47d-20241124(react@18.3.1) react-dom: specifier: '>=18' version: 18.3.1(react@18.3.1) @@ -407,6 +429,9 @@ importers: '@types/react': specifier: ^18.2.23 version: 18.3.12 + esbuild-react-compiler-plugin: + specifier: workspace:* + version: link:../esbuild-react-compiler-plugin next: specifier: 15.0.3 version: 15.0.3(patch_hash=ih2n7uyu6sqdsauhnxm6ovrrua)(@babel/core@7.25.2)(react-dom@18.3.1)(react@18.3.1) @@ -437,6 +462,9 @@ importers: next-themes: specifier: ^0.4.0 version: 0.4.3(react-dom@18.3.1)(react@18.3.1) + react-compiler-runtime: + specifier: 19.0.0-beta-df7b47d-20241124 + version: 19.0.0-beta-df7b47d-20241124(react@18.3.1) react-dom: specifier: '>=18' version: 18.3.1(react@18.3.1) @@ -465,6 +493,9 @@ importers: '@vitejs/plugin-react': specifier: ^4.1.0 version: 4.3.3(vite@5.4.11) + esbuild-react-compiler-plugin: + specifier: workspace:* + version: link:../esbuild-react-compiler-plugin jsdom: specifier: ^25.0.0 version: 25.0.1 @@ -592,8 +623,8 @@ packages: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 - /@babel/helper-annotate-as-pure@7.25.7: - resolution: {integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==} + /@babel/helper-annotate-as-pure@7.25.9: + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.26.0 @@ -619,36 +650,36 @@ packages: lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-create-class-features-plugin@7.25.7(@babel/core@7.25.2): - resolution: {integrity: sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==} + /@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.25.2): + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-member-expression-to-functions': 7.25.7 - '@babel/helper-optimise-call-expression': 7.25.7 - '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.2) - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.25.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 '@babel/traverse': 7.25.9 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-create-class-features-plugin@7.25.7(@babel/core@7.26.0): - resolution: {integrity: sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==} + /@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-member-expression-to-functions': 7.25.7 - '@babel/helper-optimise-call-expression': 7.25.7 - '@babel/helper-replace-supers': 7.25.7(@babel/core@7.26.0) - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 '@babel/traverse': 7.25.9 semver: 6.3.1 transitivePeerDependencies: @@ -662,7 +693,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 regexpu-core: 6.1.1 semver: 6.3.1 dev: true @@ -674,7 +705,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 regexpu-core: 6.1.1 semver: 6.3.1 dev: true @@ -686,7 +717,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 debug: 4.3.7 lodash.debounce: 4.0.8 resolve: 1.22.8 @@ -701,7 +732,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 debug: 4.3.7 lodash.debounce: 4.0.8 resolve: 1.22.8 @@ -709,8 +740,8 @@ packages: - supports-color dev: true - /@babel/helper-member-expression-to-functions@7.25.7: - resolution: {integrity: sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==} + /@babel/helper-member-expression-to-functions@7.25.9: + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/traverse': 7.25.9 @@ -754,17 +785,16 @@ packages: transitivePeerDependencies: - supports-color - /@babel/helper-optimise-call-expression@7.25.7: - resolution: {integrity: sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==} + /@babel/helper-optimise-call-expression@7.25.9: + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.26.0 dev: true - /@babel/helper-plugin-utils@7.25.7: - resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} + /@babel/helper-plugin-utils@7.25.9: + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-remap-async-to-generator@7.25.7(@babel/core@7.25.2): resolution: {integrity: sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==} @@ -773,7 +803,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-wrap-function': 7.25.7 '@babel/traverse': 7.25.9 transitivePeerDependencies: @@ -787,36 +817,36 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-wrap-function': 7.25.7 '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-replace-supers@7.25.7(@babel/core@7.25.2): - resolution: {integrity: sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==} + /@babel/helper-replace-supers@7.25.9(@babel/core@7.25.2): + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-member-expression-to-functions': 7.25.7 - '@babel/helper-optimise-call-expression': 7.25.7 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-replace-supers@7.25.7(@babel/core@7.26.0): - resolution: {integrity: sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==} + /@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-member-expression-to-functions': 7.25.7 - '@babel/helper-optimise-call-expression': 7.25.7 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -832,8 +862,8 @@ packages: - supports-color dev: true - /@babel/helper-skip-transparent-expression-wrappers@7.25.7: - resolution: {integrity: sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==} + /@babel/helper-skip-transparent-expression-wrappers@7.25.9: + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} engines: {node: '>=6.9.0'} dependencies: '@babel/traverse': 7.25.9 @@ -886,7 +916,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -899,7 +929,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -912,7 +942,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7(@babel/core@7.26.0): @@ -922,7 +952,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7(@babel/core@7.25.2): @@ -932,7 +962,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7(@babel/core@7.26.0): @@ -942,7 +972,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7(@babel/core@7.25.2): @@ -952,8 +982,8 @@ packages: '@babel/core': ^7.13.0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 '@babel/plugin-transform-optional-chaining': 7.25.8(@babel/core@7.25.2) transitivePeerDependencies: - supports-color @@ -966,8 +996,8 @@ packages: '@babel/core': ^7.13.0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 '@babel/plugin-transform-optional-chaining': 7.25.8(@babel/core@7.26.0) transitivePeerDependencies: - supports-color @@ -980,7 +1010,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -993,7 +1023,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -1006,8 +1036,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-decorators': 7.25.7(@babel/core@7.25.2) transitivePeerDependencies: - supports-color @@ -1037,7 +1067,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0): @@ -1046,7 +1076,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2): @@ -1055,7 +1085,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0): @@ -1064,7 +1094,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2): @@ -1074,7 +1104,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0): @@ -1084,7 +1114,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-decorators@7.25.7(@babel/core@7.25.2): @@ -1094,7 +1124,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2): @@ -1103,7 +1133,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.0): @@ -1112,7 +1142,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.2): @@ -1121,7 +1151,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.26.0): @@ -1130,7 +1160,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-flow@7.25.7(@babel/core@7.25.2): @@ -1140,7 +1170,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-import-assertions@7.25.7(@babel/core@7.25.2): @@ -1150,7 +1180,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-import-assertions@7.25.7(@babel/core@7.26.0): @@ -1160,7 +1190,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-import-attributes@7.25.7(@babel/core@7.25.2): @@ -1170,7 +1200,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-import-attributes@7.25.7(@babel/core@7.26.0): @@ -1180,7 +1210,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2): @@ -1189,7 +1219,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0): @@ -1198,7 +1228,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2): @@ -1207,7 +1237,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0): @@ -1216,7 +1246,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.2): @@ -1226,7 +1256,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.26.0): @@ -1236,8 +1266,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 - dev: true + '@babel/helper-plugin-utils': 7.25.9 /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} @@ -1245,7 +1274,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0): @@ -1254,7 +1283,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2): @@ -1263,7 +1292,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0): @@ -1272,7 +1301,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2): @@ -1281,7 +1310,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0): @@ -1290,7 +1319,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2): @@ -1299,7 +1328,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0): @@ -1308,7 +1337,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2): @@ -1317,7 +1346,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0): @@ -1326,7 +1355,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2): @@ -1335,7 +1364,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0): @@ -1344,7 +1373,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2): @@ -1354,7 +1383,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0): @@ -1364,7 +1393,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2): @@ -1374,7 +1403,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0): @@ -1384,7 +1413,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.26.0): @@ -1394,8 +1423,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 - dev: true + '@babel/helper-plugin-utils': 7.25.9 /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} @@ -1405,7 +1433,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0): @@ -1416,7 +1444,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-arrow-functions@7.25.7(@babel/core@7.25.2): @@ -1426,7 +1454,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-arrow-functions@7.25.7(@babel/core@7.26.0): @@ -1436,7 +1464,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-async-generator-functions@7.25.8(@babel/core@7.25.2): @@ -1446,7 +1474,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.25.2) '@babel/traverse': 7.25.9 transitivePeerDependencies: @@ -1460,7 +1488,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.26.0) '@babel/traverse': 7.25.9 transitivePeerDependencies: @@ -1475,7 +1503,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.25.2) transitivePeerDependencies: - supports-color @@ -1489,7 +1517,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.26.0) transitivePeerDependencies: - supports-color @@ -1502,7 +1530,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-block-scoped-functions@7.25.7(@babel/core@7.26.0): @@ -1512,7 +1540,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-block-scoping@7.25.7(@babel/core@7.25.2): @@ -1522,7 +1550,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-block-scoping@7.25.7(@babel/core@7.26.0): @@ -1532,7 +1560,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-class-properties@7.25.7(@babel/core@7.25.2): @@ -1542,8 +1570,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -1555,8 +1583,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -1568,8 +1596,8 @@ packages: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -1581,8 +1609,8 @@ packages: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -1594,10 +1622,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.25.2) '@babel/traverse': 7.25.9 globals: 11.12.0 transitivePeerDependencies: @@ -1611,10 +1639,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-replace-supers': 7.25.7(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) '@babel/traverse': 7.25.9 globals: 11.12.0 transitivePeerDependencies: @@ -1628,7 +1656,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/template': 7.25.9 dev: true @@ -1639,7 +1667,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/template': 7.25.9 dev: true @@ -1650,7 +1678,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-destructuring@7.25.7(@babel/core@7.26.0): @@ -1660,7 +1688,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-dotall-regex@7.25.7(@babel/core@7.25.2): @@ -1671,7 +1699,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-dotall-regex@7.25.7(@babel/core@7.26.0): @@ -1682,7 +1710,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-duplicate-keys@7.25.7(@babel/core@7.25.2): @@ -1692,7 +1720,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-duplicate-keys@7.25.7(@babel/core@7.26.0): @@ -1702,7 +1730,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7(@babel/core@7.25.2): @@ -1713,7 +1741,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7(@babel/core@7.26.0): @@ -1724,7 +1752,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-dynamic-import@7.25.8(@babel/core@7.25.2): @@ -1734,7 +1762,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-dynamic-import@7.25.8(@babel/core@7.26.0): @@ -1744,7 +1772,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-exponentiation-operator@7.25.7(@babel/core@7.25.2): @@ -1755,7 +1783,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -1768,7 +1796,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -1780,7 +1808,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-export-namespace-from@7.25.8(@babel/core@7.26.0): @@ -1790,7 +1818,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-flow-strip-types@7.25.7(@babel/core@7.25.2): @@ -1800,7 +1828,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-flow': 7.25.7(@babel/core@7.25.2) dev: true @@ -1811,8 +1839,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -1824,8 +1852,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -1838,7 +1866,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -1852,7 +1880,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -1865,7 +1893,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-json-strings@7.25.8(@babel/core@7.26.0): @@ -1875,7 +1903,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-literals@7.25.7(@babel/core@7.25.2): @@ -1885,7 +1913,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-literals@7.25.7(@babel/core@7.26.0): @@ -1895,7 +1923,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-logical-assignment-operators@7.25.8(@babel/core@7.25.2): @@ -1905,7 +1933,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-logical-assignment-operators@7.25.8(@babel/core@7.26.0): @@ -1915,7 +1943,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-member-expression-literals@7.25.7(@babel/core@7.25.2): @@ -1925,7 +1953,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-member-expression-literals@7.25.7(@babel/core@7.26.0): @@ -1935,7 +1963,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-modules-amd@7.25.7(@babel/core@7.25.2): @@ -1946,7 +1974,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -1959,7 +1987,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -1972,7 +2000,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-simple-access': 7.25.7 transitivePeerDependencies: - supports-color @@ -1986,7 +2014,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-simple-access': 7.25.7 transitivePeerDependencies: - supports-color @@ -2000,7 +2028,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 '@babel/traverse': 7.25.9 transitivePeerDependencies: @@ -2015,7 +2043,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 '@babel/traverse': 7.25.9 transitivePeerDependencies: @@ -2030,7 +2058,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -2043,7 +2071,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -2056,7 +2084,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-named-capturing-groups-regex@7.25.7(@babel/core@7.26.0): @@ -2067,7 +2095,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-new-target@7.25.7(@babel/core@7.25.2): @@ -2077,7 +2105,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-new-target@7.25.7(@babel/core@7.26.0): @@ -2087,7 +2115,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-nullish-coalescing-operator@7.25.8(@babel/core@7.25.2): @@ -2097,7 +2125,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-nullish-coalescing-operator@7.25.8(@babel/core@7.26.0): @@ -2107,7 +2135,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-numeric-separator@7.25.8(@babel/core@7.25.2): @@ -2117,7 +2145,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-numeric-separator@7.25.8(@babel/core@7.26.0): @@ -2127,7 +2155,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-object-rest-spread@7.25.8(@babel/core@7.25.2): @@ -2138,7 +2166,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.2) dev: true @@ -2150,7 +2178,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.26.0) dev: true @@ -2161,8 +2189,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.25.2) transitivePeerDependencies: - supports-color dev: true @@ -2174,8 +2202,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-replace-supers': 7.25.7(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color dev: true @@ -2187,7 +2215,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-optional-catch-binding@7.25.8(@babel/core@7.26.0): @@ -2197,7 +2225,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-optional-chaining@7.25.8(@babel/core@7.25.2): @@ -2207,8 +2235,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -2220,8 +2248,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -2233,7 +2261,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-parameters@7.25.7(@babel/core@7.26.0): @@ -2243,31 +2271,31 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true - /@babel/plugin-transform-private-methods@7.25.7(@babel/core@7.25.2): - resolution: {integrity: sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==} + /@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.25.2): + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-private-methods@7.25.7(@babel/core@7.26.0): - resolution: {integrity: sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==} + /@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -2279,9 +2307,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -2293,9 +2321,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -2307,7 +2335,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-property-literals@7.25.7(@babel/core@7.26.0): @@ -2317,7 +2345,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-react-constant-elements@7.24.7(@babel/core@7.26.0): @@ -2327,7 +2355,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.25.2): @@ -2337,7 +2365,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.26.0): @@ -2347,7 +2375,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-react-jsx-development@7.24.7(@babel/core@7.25.2): @@ -2381,7 +2409,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-react-jsx-source@7.25.7(@babel/core@7.26.0): @@ -2391,7 +2419,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.25.2): @@ -2401,9 +2429,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.2) '@babel/types': 7.26.0 transitivePeerDependencies: @@ -2417,9 +2445,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.26.0) '@babel/types': 7.26.0 transitivePeerDependencies: @@ -2433,8 +2461,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-react-pure-annotations@7.24.7(@babel/core@7.26.0): @@ -2444,8 +2472,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-regenerator@7.25.7(@babel/core@7.25.2): @@ -2455,7 +2483,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 regenerator-transform: 0.15.2 dev: true @@ -2466,7 +2494,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 regenerator-transform: 0.15.2 dev: true @@ -2477,7 +2505,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-reserved-words@7.25.7(@babel/core@7.26.0): @@ -2487,7 +2515,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-shorthand-properties@7.25.7(@babel/core@7.25.2): @@ -2497,7 +2525,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-shorthand-properties@7.25.7(@babel/core@7.26.0): @@ -2507,7 +2535,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-spread@7.25.7(@babel/core@7.25.2): @@ -2517,8 +2545,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -2530,8 +2558,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -2543,7 +2571,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-sticky-regex@7.25.7(@babel/core@7.26.0): @@ -2553,7 +2581,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-template-literals@7.25.7(@babel/core@7.25.2): @@ -2563,7 +2591,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-template-literals@7.25.7(@babel/core@7.26.0): @@ -2573,7 +2601,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-typeof-symbol@7.25.7(@babel/core@7.25.2): @@ -2583,7 +2611,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-typeof-symbol@7.25.7(@babel/core@7.26.0): @@ -2593,7 +2621,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-typescript@7.24.8(@babel/core@7.26.0): @@ -2603,9 +2631,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.26.0) transitivePeerDependencies: - supports-color @@ -2618,7 +2646,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-unicode-escapes@7.25.7(@babel/core@7.26.0): @@ -2628,7 +2656,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-unicode-property-regex@7.25.7(@babel/core@7.25.2): @@ -2639,7 +2667,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-unicode-property-regex@7.25.7(@babel/core@7.26.0): @@ -2650,7 +2678,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-unicode-regex@7.25.7(@babel/core@7.25.2): @@ -2661,7 +2689,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-unicode-regex@7.25.7(@babel/core@7.26.0): @@ -2672,7 +2700,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-unicode-sets-regex@7.25.7(@babel/core@7.25.2): @@ -2683,7 +2711,7 @@ packages: dependencies: '@babel/core': 7.25.2 '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/plugin-transform-unicode-sets-regex@7.25.7(@babel/core@7.26.0): @@ -2694,7 +2722,7 @@ packages: dependencies: '@babel/core': 7.26.0 '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 dev: true /@babel/preset-env@7.25.4(@babel/core@7.25.2): @@ -2706,7 +2734,7 @@ packages: '@babel/compat-data': 7.26.0 '@babel/core': 7.25.2 '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-option': 7.25.9 '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.7(@babel/core@7.25.2) '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.7(@babel/core@7.25.2) @@ -2767,7 +2795,7 @@ packages: '@babel/plugin-transform-optional-catch-binding': 7.25.8(@babel/core@7.25.2) '@babel/plugin-transform-optional-chaining': 7.25.8(@babel/core@7.25.2) '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.2) - '@babel/plugin-transform-private-methods': 7.25.7(@babel/core@7.25.2) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-private-property-in-object': 7.25.8(@babel/core@7.25.2) '@babel/plugin-transform-property-literals': 7.25.7(@babel/core@7.25.2) '@babel/plugin-transform-regenerator': 7.25.7(@babel/core@7.25.2) @@ -2800,7 +2828,7 @@ packages: '@babel/compat-data': 7.26.0 '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-option': 7.25.9 '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.7(@babel/core@7.26.0) '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.7(@babel/core@7.26.0) @@ -2861,7 +2889,7 @@ packages: '@babel/plugin-transform-optional-catch-binding': 7.25.8(@babel/core@7.26.0) '@babel/plugin-transform-optional-chaining': 7.25.8(@babel/core@7.26.0) '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.26.0) - '@babel/plugin-transform-private-methods': 7.25.7(@babel/core@7.26.0) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-private-property-in-object': 7.25.8(@babel/core@7.26.0) '@babel/plugin-transform-property-literals': 7.25.7(@babel/core@7.26.0) '@babel/plugin-transform-regenerator': 7.25.7(@babel/core@7.26.0) @@ -2892,7 +2920,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-option': 7.25.9 '@babel/plugin-transform-flow-strip-types': 7.25.7(@babel/core@7.25.2) dev: true @@ -2903,7 +2931,7 @@ packages: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/types': 7.26.0 esutils: 2.0.3 dev: true @@ -2914,7 +2942,7 @@ packages: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/types': 7.26.0 esutils: 2.0.3 dev: true @@ -2926,7 +2954,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-option': 7.25.9 '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.25.2) '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.25.2) @@ -2943,7 +2971,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-option': 7.25.9 '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.26.0) @@ -2960,7 +2988,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-option': 7.25.9 '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.26.0) '@babel/plugin-transform-modules-commonjs': 7.25.7(@babel/core@7.26.0) @@ -5927,6 +5955,12 @@ packages: - supports-color dev: true + /babel-plugin-react-compiler@19.0.0-beta-df7b47d-20241124: + resolution: {integrity: sha512-93iSASR20HNsotcOTQ+KPL0zpgfRFVWL86AtXpmHp995HuMVnC9femd8Winr3GxkPEh8lEOyaw3nqY4q2HUm5w==} + dependencies: + '@babel/types': 7.26.0 + dev: false + /bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -6934,14 +6968,6 @@ packages: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true - /enhanced-resolve@5.10.0: - resolution: {integrity: sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==} - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - dev: true - /enhanced-resolve@5.17.1: resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} @@ -7350,6 +7376,23 @@ packages: string.prototype.includes: 2.0.1 dev: true + /eslint-plugin-react-compiler@19.0.0-beta-df7b47d-20241124(eslint@9.15.0): + resolution: {integrity: sha512-82PfnllC8jP/68KdLAbpWuYTcfmtGLzkqy2IW85WopKMTr+4rdQpp+lfliQ/QE79wWrv/dRoADrk3Pdhq25nTw==} + engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} + peerDependencies: + eslint: '>=7' + dependencies: + '@babel/core': 7.26.0 + '@babel/parser': 7.26.2 + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) + eslint: 9.15.0 + hermes-parser: 0.25.1 + zod: 3.23.8 + zod-validation-error: 3.4.0(zod@3.23.8) + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-react-hooks@4.6.2(eslint@9.15.0): resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} engines: {node: '>=10'} @@ -8314,6 +8357,16 @@ packages: space-separated-tokens: 2.0.2 dev: false + /hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + dev: true + + /hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + dependencies: + hermes-estree: 0.25.1 + dev: true + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -9061,6 +9114,11 @@ packages: engines: {node: '>=6.11.5'} dev: true + /loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + engines: {node: '>= 12.13.0'} + dev: false + /local-pkg@0.5.0: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} @@ -10670,6 +10728,28 @@ packages: safe-buffer: 5.2.1 dev: true + /react-compiler-runtime@19.0.0-beta-df7b47d-20241124(react@18.3.1): + resolution: {integrity: sha512-HLFbEf5rEhynZNxI/f1y26Hw0SCvFWh9aS0gCaDndak202oOAvRhy0qsUhmVyaeuRYqIxvPeltMvqDfvO+9/Fw==} + peerDependencies: + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + dependencies: + react: 18.3.1 + dev: false + + /react-compiler-webpack@0.1.2(babel-plugin-react-compiler@19.0.0-beta-df7b47d-20241124): + resolution: {integrity: sha512-NaT5Ft4FRqiDAllr8ywjmXWcv0+ouL/4GsYiLHj783C2HbTp4SGUtUC/6vpWT/UQ5LggV+PUMLUrdEdua+LOaQ==} + peerDependencies: + babel-plugin-react-compiler: '*' + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.26.0) + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.26.0) + babel-plugin-react-compiler: 19.0.0-beta-df7b47d-20241124 + loader-utils: 3.3.1 + transitivePeerDependencies: + - supports-color + dev: false + /react-dom@18.3.1(react@18.3.1): resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: @@ -11971,7 +12051,7 @@ packages: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} requiresBuild: true - /tsup@8.3.5(patch_hash=sh5kwwsnc5iccgx7xoo5prtbwy)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2): + /tsup@8.3.5(patch_hash=omll37iwfpv74y4pqujpifv454)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2): resolution: {integrity: sha512-Tunf6r6m6tnZsG9GYWndg0z8dEV7fD733VBFzFJ5Vcm1FtlXB8xBD/rtrBi2a3YKEV7hHtxiZtW5EAVADoe1pA==} engines: {node: '>=18'} hasBin: true @@ -12626,7 +12706,7 @@ packages: acorn-import-assertions: 1.8.0(acorn@8.14.0) browserslist: 4.24.2 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.10.0 + enhanced-resolve: 5.17.1 es-module-lexer: 0.9.3 eslint-scope: 5.1.1 events: 3.3.0 @@ -12838,11 +12918,9 @@ packages: zod: ^3.18.0 dependencies: zod: 3.23.8 - dev: false /zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} - dev: false /zustand@5.0.1(@types/react@18.3.12)(react@18.3.1): resolution: {integrity: sha512-pRET7Lao2z+n5R/HduXMio35TncTlSW68WsYBq2Lg1ASspsNGjpwLAsij3RpouyV6+kHMwwwzP0bZPD70/Jx/w==}