diff --git a/compiler/apps/playground/__tests__/e2e/page.spec.ts b/compiler/apps/playground/__tests__/e2e/page.spec.ts index 296f45a2776..17505024ffe 100644 --- a/compiler/apps/playground/__tests__/e2e/page.spec.ts +++ b/compiler/apps/playground/__tests__/e2e/page.spec.ts @@ -136,7 +136,7 @@ test('editor should compile from hash successfully', async ({page}) => { path: 'test-results/01-compiles-from-hash.png', }); const text = - (await page.locator('.monaco-editor').nth(1).allInnerTexts()) ?? []; + (await page.locator('.monaco-editor').nth(3).allInnerTexts()) ?? []; const output = await formatPrint(text); expect(output).not.toEqual(''); @@ -162,7 +162,7 @@ test('reset button works', async ({page}) => { path: 'test-results/02-reset-button-works.png', }); const text = - (await page.locator('.monaco-editor').nth(1).allInnerTexts()) ?? []; + (await page.locator('.monaco-editor').nth(3).allInnerTexts()) ?? []; const output = await formatPrint(text); expect(output).not.toEqual(''); @@ -183,7 +183,7 @@ TEST_CASE_INPUTS.forEach((t, idx) => }); const text = - (await page.locator('.monaco-editor').nth(1).allInnerTexts()) ?? []; + (await page.locator('.monaco-editor').nth(3).allInnerTexts()) ?? []; let output: string; if (t.noFormat) { output = text.join(''); diff --git a/compiler/apps/playground/app/index.tsx b/compiler/apps/playground/app/index.tsx deleted file mode 100644 index 3bbf2e9b555..00000000000 --- a/compiler/apps/playground/app/index.tsx +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -import type {NextPage} from 'next'; -import Head from 'next/head'; -import {SnackbarProvider} from 'notistack'; -import {Editor, Header, StoreProvider} from '../components'; -import MessageSnackbar from '../components/Message'; - -const Home: NextPage = () => { - return ( -
- - - {process.env.NODE_ENV === 'development' - ? '[DEV] React Compiler Playground' - : 'React Compiler Playground'} - - - - - - - - - -
- - - -
- ); -}; - -export default Home; diff --git a/compiler/apps/playground/components/AccordionWindow.tsx b/compiler/apps/playground/components/AccordionWindow.tsx index de3b01b0b05..bebbb0c4787 100644 --- a/compiler/apps/playground/components/AccordionWindow.tsx +++ b/compiler/apps/playground/components/AccordionWindow.tsx @@ -17,15 +17,6 @@ export default function AccordionWindow(props: { setTabsOpen: (newTab: Set) => void; changedPasses: Set; }): React.ReactElement { - if (props.tabs.size === 0) { - return ( -
- No compiler output detected, see errors below -
- ); - } return (
{Array.from(props.tabs.keys()).map(name => { diff --git a/compiler/apps/playground/components/Editor/ConfigEditor.tsx b/compiler/apps/playground/components/Editor/ConfigEditor.tsx index 162d82591cb..add42018a38 100644 --- a/compiler/apps/playground/components/Editor/ConfigEditor.tsx +++ b/compiler/apps/playground/components/Editor/ConfigEditor.tsx @@ -9,7 +9,7 @@ import MonacoEditor, {loader, type Monaco} from '@monaco-editor/react'; import {PluginOptions} from 'babel-plugin-react-compiler'; import type {editor} from 'monaco-editor'; import * as monaco from 'monaco-editor'; -import React, {useState} from 'react'; +import React, {useState, useRef, useEffect} from 'react'; import {Resizable} from 're-resizable'; import {useStore, useStoreDispatch} from '../StoreContext'; import {monacoOptions} from './monacoOptions'; @@ -28,10 +28,25 @@ export default function ConfigEditor({ }): React.ReactElement { const [isExpanded, setIsExpanded] = useState(false); - return isExpanded ? ( - - ) : ( - + return ( + // TODO: Use when it is compatible with Monaco: https://github.com/suren-atoyan/monaco-react/issues/753 + <> +
+ +
+
+ +
+ ); } @@ -44,16 +59,25 @@ function ExpandedEditor({ }): React.ReactElement { const store = useStore(); const dispatchStore = useStoreDispatch(); + const debounceTimerRef = useRef(null); - const handleChange: (value: string | undefined) => void = value => { + const handleChange: (value: string | undefined) => void = ( + value: string | undefined, + ) => { if (value === undefined) return; - dispatchStore({ - type: 'updateConfig', - payload: { - config: value, - }, - }); + if (debounceTimerRef.current) { + clearTimeout(debounceTimerRef.current); + } + + debounceTimerRef.current = setTimeout(() => { + dispatchStore({ + type: 'updateConfig', + payload: { + config: value, + }, + }); + }, 500); // 500ms debounce delay }; const handleMount: ( @@ -77,12 +101,6 @@ function ExpandedEditor({ allowSyntheticDefaultImports: true, jsx: monaco.languages.typescript.JsxEmit.React, }); - - const uri = monaco.Uri.parse(`file:///config.ts`); - const model = monaco.editor.getModel(uri); - if (model) { - model.updateOptions({tabSize: 2}); - } }; const formattedAppliedOptions = appliedOptions @@ -126,6 +144,7 @@ function ExpandedEditor({ value={store.config} onMount={handleMount} onChange={handleChange} + loading={''} options={{ ...monacoOptions, lineNumbers: 'off', @@ -139,7 +158,6 @@ function ExpandedEditor({ />
-

@@ -151,6 +169,7 @@ function ExpandedEditor({ path={'applied-config.js'} language={'javascript'} value={formattedAppliedOptions} + loading={''} options={{ ...monacoOptions, lineNumbers: 'off', diff --git a/compiler/apps/playground/components/Editor/EditorImpl.tsx b/compiler/apps/playground/components/Editor/EditorImpl.tsx index 8b75ce6ac5e..696bbd2559c 100644 --- a/compiler/apps/playground/components/Editor/EditorImpl.tsx +++ b/compiler/apps/playground/components/Editor/EditorImpl.tsx @@ -24,19 +24,8 @@ import BabelPluginReactCompiler, { printFunctionWithOutlined, type LoggerEvent, } from 'babel-plugin-react-compiler'; -import invariant from 'invariant'; -import {useSnackbar} from 'notistack'; import {useDeferredValue, useMemo} from 'react'; -import {useMountEffect} from '../../hooks'; -import {defaultStore} from '../../lib/defaultStore'; -import { - createMessage, - initStoreFromUrlOrLocalStorage, - MessageLevel, - MessageSource, - type Store, -} from '../../lib/stores'; -import {useStore, useStoreDispatch} from '../StoreContext'; +import {useStore} from '../StoreContext'; import ConfigEditor from './ConfigEditor'; import Input from './Input'; import { @@ -174,7 +163,6 @@ function parseOptions( // Parse config overrides from config editor let configOverrideOptions: any = {}; const configMatch = configOverrides.match(/^\s*import.*?\n\n\((.*)\)/s); - // TODO: initialize store with URL params, not empty store if (configOverrides.trim()) { if (configMatch && configMatch[1]) { const configString = configMatch[1].replace(/satisfies.*$/, '').trim(); @@ -327,8 +315,6 @@ function compile( export default function Editor(): JSX.Element { const store = useStore(); const deferredStore = useDeferredValue(store); - const dispatchStore = useStoreDispatch(); - const {enqueueSnackbar} = useSnackbar(); const [compilerOutput, language, appliedOptions] = useMemo( () => compile(deferredStore.source, 'compiler', deferredStore.config), [deferredStore.source, deferredStore.config], @@ -338,32 +324,6 @@ export default function Editor(): JSX.Element { [deferredStore.source, deferredStore.config], ); - useMountEffect(() => { - // Initialize store - let mountStore: Store; - try { - mountStore = initStoreFromUrlOrLocalStorage(); - } catch (e) { - invariant(e instanceof Error, 'Only Error may be caught.'); - enqueueSnackbar(e.message, { - variant: 'warning', - ...createMessage( - 'Bad URL - fell back to the default Playground.', - MessageLevel.Info, - MessageSource.Playground, - ), - }); - mountStore = defaultStore; - } - - dispatchStore({ - type: 'setStore', - payload: { - store: mountStore, - }, - }); - }); - let mergedOutput: CompilerOutput; let errors: Array; if (compilerOutput.kind === 'ok') { diff --git a/compiler/apps/playground/components/Editor/Input.tsx b/compiler/apps/playground/components/Editor/Input.tsx index 206b98300be..d8744c3ca97 100644 --- a/compiler/apps/playground/components/Editor/Input.tsx +++ b/compiler/apps/playground/components/Editor/Input.tsx @@ -13,7 +13,6 @@ import { import invariant from 'invariant'; import type {editor} from 'monaco-editor'; import * as monaco from 'monaco-editor'; -import {Resizable} from 're-resizable'; import {useEffect, useState} from 'react'; import {renderReactCompilerMarkers} from '../../lib/reactCompilerMonacoDiagnostics'; import {useStore, useStoreDispatch} from '../StoreContext'; @@ -46,11 +45,6 @@ export default function Input({errors, language}: Props): JSX.Element { details: errors, source: store.source, }); - /** - * N.B. that `tabSize` is a model property, not an editor property. - * So, the tab size has to be set per model. - */ - model.updateOptions({tabSize: 2}); }, [monaco, errors, store.source]); useEffect(() => { @@ -152,38 +146,24 @@ export default function Input({errors, language}: Props): JSX.Element { onMount={handleMount} onChange={handleChange} options={monacoOptions} + loading={''} /> ); const tabs = new Map([['Input', editorContent]]); const [activeTab, setActiveTab] = useState('Input'); - const tabbedContent = ( -
- -
- ); - return (
- {store.showInternals ? ( - - {tabbedContent} - - ) : ( -
{tabbedContent}
- )} +
+
+ +
+
); } diff --git a/compiler/apps/playground/components/Editor/Output.tsx b/compiler/apps/playground/components/Editor/Output.tsx index 22f908e51bb..bf73c192c11 100644 --- a/compiler/apps/playground/components/Editor/Output.tsx +++ b/compiler/apps/playground/components/Editor/Output.tsx @@ -324,6 +324,7 @@ function TextTabContent({ = { automaticLayout: true, wordWrap: 'on', wrappingIndent: 'same', + + tabSize: 2, }; diff --git a/compiler/apps/playground/components/StoreContext.tsx b/compiler/apps/playground/components/StoreContext.tsx index 52de6c0fa3e..3f55678edf1 100644 --- a/compiler/apps/playground/components/StoreContext.tsx +++ b/compiler/apps/playground/components/StoreContext.tsx @@ -6,10 +6,14 @@ */ import type {Dispatch, ReactNode} from 'react'; -import {useEffect, useReducer} from 'react'; +import {useState, useEffect, useReducer} from 'react'; import createContext from '../lib/createContext'; -import {emptyStore} from '../lib/defaultStore'; -import {saveStore, type Store} from '../lib/stores'; +import {emptyStore, defaultStore} from '../lib/defaultStore'; +import { + saveStore, + initStoreFromUrlOrLocalStorage, + type Store, +} from '../lib/stores'; const StoreContext = createContext(); @@ -30,6 +34,20 @@ export const useStoreDispatch = StoreDispatchContext.useContext; */ export function StoreProvider({children}: {children: ReactNode}): JSX.Element { const [store, dispatch] = useReducer(storeReducer, emptyStore); + const [isPageReady, setIsPageReady] = useState(false); + + useEffect(() => { + let mountStore: Store; + try { + mountStore = initStoreFromUrlOrLocalStorage(); + } catch (e) { + console.error('Failed to initialize store from URL or local storage', e); + mountStore = defaultStore; + } + dispatch({type: 'setStore', payload: {store: mountStore}}); + setIsPageReady(true); + }, []); + useEffect(() => { if (store !== emptyStore) { saveStore(store); @@ -39,7 +57,7 @@ export function StoreProvider({children}: {children: ReactNode}): JSX.Element { return ( - {children} + {isPageReady ? children : null} ); diff --git a/compiler/apps/playground/components/TabbedWindow.tsx b/compiler/apps/playground/components/TabbedWindow.tsx index 1751bd87e26..d2335687c22 100644 --- a/compiler/apps/playground/components/TabbedWindow.tsx +++ b/compiler/apps/playground/components/TabbedWindow.tsx @@ -16,13 +16,6 @@ export default function TabbedWindow({ activeTab: string; onTabChange: (tab: string) => void; }): React.ReactElement { - if (tabs.size === 0) { - return ( -
- No compiler output detected, see errors below -
- ); - } return (
diff --git a/compiler/apps/playground/lib/stores/store.ts b/compiler/apps/playground/lib/stores/store.ts index e67578c79bf..6655efa2740 100644 --- a/compiler/apps/playground/lib/stores/store.ts +++ b/compiler/apps/playground/lib/stores/store.ts @@ -71,7 +71,7 @@ export function initStoreFromUrlOrLocalStorage(): Store { // Make sure all properties are populated return { source: raw.source, - config: 'config' in raw ? raw.config : defaultConfig, + config: 'config' in raw && raw['config'] ? raw.config : defaultConfig, showInternals: 'showInternals' in raw ? raw.showInternals : false, }; } diff --git a/compiler/apps/playground/next-env.d.ts b/compiler/apps/playground/next-env.d.ts index 830fb594ca2..9edff1c7cac 100644 --- a/compiler/apps/playground/next-env.d.ts +++ b/compiler/apps/playground/next-env.d.ts @@ -1,6 +1,6 @@ /// /// -/// +import "./.next/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/compiler/apps/playground/package.json b/compiler/apps/playground/package.json index 44c1f101230..08aed45e0f3 100644 --- a/compiler/apps/playground/package.json +++ b/compiler/apps/playground/package.json @@ -34,7 +34,7 @@ "invariant": "^2.2.4", "lz-string": "^1.5.0", "monaco-editor": "^0.52.0", - "next": "15.5.2", + "next": "15.6.0-canary.7", "notistack": "^3.0.0-alpha.7", "prettier": "^3.3.3", "pretty-format": "^29.3.1", @@ -44,7 +44,7 @@ }, "devDependencies": { "@types/node": "18.11.9", - "@types/react": "19.1.12", + "@types/react": "19.1.13", "@types/react-dom": "19.1.9", "autoprefixer": "^10.4.13", "clsx": "^1.2.1", diff --git a/compiler/apps/playground/tsconfig.json b/compiler/apps/playground/tsconfig.json index eb7fcfe2b72..4f70dcef8ab 100644 --- a/compiler/apps/playground/tsconfig.json +++ b/compiler/apps/playground/tsconfig.json @@ -6,6 +6,9 @@ "dom.iterable", "esnext" ], + "types": [ + "react/experimental" + ], "allowJs": true, "skipLibCheck": true, "strict": true, @@ -16,7 +19,7 @@ "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve", + "jsx": "react-jsx", "incremental": true, "plugins": [ { diff --git a/compiler/apps/playground/yarn.lock b/compiler/apps/playground/yarn.lock index 9bf1bb0687b..53f0d24db70 100644 --- a/compiler/apps/playground/yarn.lock +++ b/compiler/apps/playground/yarn.lock @@ -715,10 +715,10 @@ dependencies: "@monaco-editor/loader" "^1.4.0" -"@next/env@15.5.2": - version "15.5.2" - resolved "https://registry.yarnpkg.com/@next/env/-/env-15.5.2.tgz#0c6b959313cd6e71afb69bf0deb417237f1d2f8a" - integrity sha512-Qe06ew4zt12LeO6N7j8/nULSOe3fMXE4dM6xgpBQNvdzyK1sv5y4oAP3bq4LamrvGCZtmRYnW8URFCeX5nFgGg== +"@next/env@15.6.0-canary.7": + version "15.6.0-canary.7" + resolved "https://registry.yarnpkg.com/@next/env/-/env-15.6.0-canary.7.tgz#cdbf2967a9437ef09eef755e203f315acc4d8d8f" + integrity sha512-LNZ7Yd3Cl9rKvjYdeJmszf2HmSDP76SQmfafKep2Ux16ZXKoN5OjwVHFTltKNdsB3vt2t+XJzLP2rhw5lBoFBA== "@next/eslint-plugin-next@15.5.2": version "15.5.2" @@ -727,45 +727,45 @@ dependencies: fast-glob "3.3.1" -"@next/swc-darwin-arm64@15.5.2": - version "15.5.2" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.2.tgz#f69713326fc08f2eff3726fe19165cdb429d67c7" - integrity sha512-8bGt577BXGSd4iqFygmzIfTYizHb0LGWqH+qgIF/2EDxS5JsSdERJKA8WgwDyNBZgTIIA4D8qUtoQHmxIIquoQ== - -"@next/swc-darwin-x64@15.5.2": - version "15.5.2" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.2.tgz#560a9da4126bae75cbbd6899646ad7a2e4fdcc9b" - integrity sha512-2DjnmR6JHK4X+dgTXt5/sOCu/7yPtqpYt8s8hLkHFK3MGkka2snTv3yRMdHvuRtJVkPwCGsvBSwmoQCHatauFQ== - -"@next/swc-linux-arm64-gnu@15.5.2": - version "15.5.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.2.tgz#80b2be276e775e5a9286369ae54e536b0cdf8c3a" - integrity sha512-3j7SWDBS2Wov/L9q0mFJtEvQ5miIqfO4l7d2m9Mo06ddsgUK8gWfHGgbjdFlCp2Ek7MmMQZSxpGFqcC8zGh2AA== - -"@next/swc-linux-arm64-musl@15.5.2": - version "15.5.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.2.tgz#68cf676301755fd99aca11a7ebdb5eae88d7c2e4" - integrity sha512-s6N8k8dF9YGc5T01UPQ08yxsK6fUow5gG1/axWc1HVVBYQBgOjca4oUZF7s4p+kwhkB1bDSGR8QznWrFZ/Rt5g== - -"@next/swc-linux-x64-gnu@15.5.2": - version "15.5.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.2.tgz#209d9a79d0f2333544f863b0daca3f7e29f2eaff" - integrity sha512-o1RV/KOODQh6dM6ZRJGZbc+MOAHww33Vbs5JC9Mp1gDk8cpEO+cYC/l7rweiEalkSm5/1WGa4zY7xrNwObN4+Q== - -"@next/swc-linux-x64-musl@15.5.2": - version "15.5.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.2.tgz#d4ad1cfb5e99e51db669fe2145710c1abeadbd7f" - integrity sha512-/VUnh7w8RElYZ0IV83nUcP/J4KJ6LLYliiBIri3p3aW2giF+PAVgZb6mk8jbQSB3WlTai8gEmCAr7kptFa1H6g== - -"@next/swc-win32-arm64-msvc@15.5.2": - version "15.5.2" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.2.tgz#070e10e370a5447a198c2db100389646aca2c496" - integrity sha512-sMPyTvRcNKXseNQ/7qRfVRLa0VhR0esmQ29DD6pqvG71+JdVnESJaHPA8t7bc67KD5spP3+DOCNLhqlEI2ZgQg== - -"@next/swc-win32-x64-msvc@15.5.2": - version "15.5.2" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.2.tgz#9237d40b82eaf2efc88baeba15b784d4126caf4a" - integrity sha512-W5VvyZHnxG/2ukhZF/9Ikdra5fdNftxI6ybeVKYvBPDtyx7x4jPPSNduUkfH5fo3zG0JQ0bPxgy41af2JX5D4Q== +"@next/swc-darwin-arm64@15.6.0-canary.7": + version "15.6.0-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.6.0-canary.7.tgz#628cd34ce9120000f1cb5b08963426431174fc57" + integrity sha512-POsBrxhrR3qvqXV+JZ6ZoBc8gJf8rhYe+OedceI1piPVqtJYOJa3EB4eaqcc+kMsllKRrH/goNlhLwtyhE+0Qg== + +"@next/swc-darwin-x64@15.6.0-canary.7": + version "15.6.0-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-15.6.0-canary.7.tgz#37d4ebab14da74a2f8028daf6d76aab410153e06" + integrity sha512-lmk9ysBuSiPlAJZTCo/3O4mXNFosg6EDIf4GrmynIwCG2as6/KxzyD1WqFp56Exp8eFDjP7SFapD10sV43vCsA== + +"@next/swc-linux-arm64-gnu@15.6.0-canary.7": + version "15.6.0-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.6.0-canary.7.tgz#ce700cc0e0d24763136838223105a524b36694fa" + integrity sha512-why8k6d0SBm3AKoOD5S7ir3g+BF34l9oFKIoZrLaZaKBvNGpFcjc7Ovc2TunNMeaMJzv9k1dHYSap0EI5oSuzg== + +"@next/swc-linux-arm64-musl@15.6.0-canary.7": + version "15.6.0-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.6.0-canary.7.tgz#c791b8e15bf2c338b4cc0387fe7afb3ef83ecfcf" + integrity sha512-HzvTRsKvYj32Va4YuJN3n3xOxvk+6QwB63d/EsgmdkeA/vrqciUAmJDYpuzZEvRc3Yp2nyPq8KZxtHAr6ISZ2Q== + +"@next/swc-linux-x64-gnu@15.6.0-canary.7": + version "15.6.0-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.6.0-canary.7.tgz#c01c3a3d8e71660c49298dd053d078379b6b5919" + integrity sha512-6yRFrg2qWXOqa+1BI53J9EmHWFzKg9U2r+5R7n7BFUp8PH5SC92WBsmYTnh/RkvAYvdupiVzMervwwswCs6kFg== + +"@next/swc-linux-x64-musl@15.6.0-canary.7": + version "15.6.0-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.6.0-canary.7.tgz#3f4b39faef4a5f88b13e4c726b008ddc9717f819" + integrity sha512-O/JjvOvNK/Wao/OIQaA6evDkxkmFFQgJ1/hI1dVk6/PAeKmW2/Q+6Dodh97eAkOwedS1ZdQl2mojf87TzLvzdQ== + +"@next/swc-win32-arm64-msvc@15.6.0-canary.7": + version "15.6.0-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.6.0-canary.7.tgz#9bc5da0907b7ce67eedda02a6d56a09d9a539ccf" + integrity sha512-p9DvrDgnePofZCtiWVY7qZtwXxiOGJlAyy2LoGPYSGOUDhjbTG8j6XMUFXpV9UwpH+l7st522psO1BVzbpT8IQ== + +"@next/swc-win32-x64-msvc@15.6.0-canary.7": + version "15.6.0-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.6.0-canary.7.tgz#5b271c591ccbe67d5fa966dd22db86c547414fd1" + integrity sha512-f1ywT3xWu4StWKA1mZRyGfelu/h+W0OEEyBxQNXzXyYa0VGZb9LyCNb5cYoNKBm0Bw18Hp1PVe0bHuusemGCcw== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -866,6 +866,13 @@ dependencies: csstype "^3.0.2" +"@types/react@19.1.13": + version "19.1.13" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.13.tgz#fc650ffa680d739a25a530f5d7ebe00cdd771883" + integrity sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ== + dependencies: + csstype "^3.0.2" + "@typescript-eslint/eslint-plugin@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": version "8.10.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.10.0.tgz#9c8218ed62f9a322df10ded7c34990f014df44f2" @@ -3199,25 +3206,25 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -next@15.5.2: - version "15.5.2" - resolved "https://registry.yarnpkg.com/next/-/next-15.5.2.tgz#5e50102443fb0328a9dfcac2d82465c7bac93693" - integrity sha512-H8Otr7abj1glFhbGnvUt3gz++0AF1+QoCXEBmd/6aKbfdFwrn0LpA836Ed5+00va/7HQSDD+mOoVhn3tNy3e/Q== +next@15.6.0-canary.7: + version "15.6.0-canary.7" + resolved "https://registry.yarnpkg.com/next/-/next-15.6.0-canary.7.tgz#bfc2ac3c9a78e23d550c303d18247a263e6b5bc1" + integrity sha512-4ukX2mxat9wWT6E0Gw/3TOR9ULV1q399E42F86cwsPSFgTWa04ABhcTqO0r9J/QR1YWPR8WEgh9qUzmWA/1yEw== dependencies: - "@next/env" "15.5.2" + "@next/env" "15.6.0-canary.7" "@swc/helpers" "0.5.15" caniuse-lite "^1.0.30001579" postcss "8.4.31" styled-jsx "5.1.6" optionalDependencies: - "@next/swc-darwin-arm64" "15.5.2" - "@next/swc-darwin-x64" "15.5.2" - "@next/swc-linux-arm64-gnu" "15.5.2" - "@next/swc-linux-arm64-musl" "15.5.2" - "@next/swc-linux-x64-gnu" "15.5.2" - "@next/swc-linux-x64-musl" "15.5.2" - "@next/swc-win32-arm64-msvc" "15.5.2" - "@next/swc-win32-x64-msvc" "15.5.2" + "@next/swc-darwin-arm64" "15.6.0-canary.7" + "@next/swc-darwin-x64" "15.6.0-canary.7" + "@next/swc-linux-arm64-gnu" "15.6.0-canary.7" + "@next/swc-linux-arm64-musl" "15.6.0-canary.7" + "@next/swc-linux-x64-gnu" "15.6.0-canary.7" + "@next/swc-linux-x64-musl" "15.6.0-canary.7" + "@next/swc-win32-arm64-msvc" "15.6.0-canary.7" + "@next/swc-win32-x64-msvc" "15.6.0-canary.7" sharp "^0.34.3" node-releases@^2.0.18: