From c5741d52309a1eeca40228c6b12731d0dd645831 Mon Sep 17 00:00:00 2001 From: Joseph Date: Fri, 11 Sep 2026 16:01:14 +0200 Subject: [PATCH 1/5] fix(devtools): handle pointercancel when dragging the indicator (#98506) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #98468 ## Claude explanation of the fix `useDrag` listened for `pointermove` and `pointerup`, but never `pointercancel`. When a user agent cancels a gesture — a browser or system gesture takes over, a second finger arrives — it fires `pointercancel` and no `pointerup`, implicitly releasing pointer capture as it does. So `cancel()` never ran: the state machine stayed `{ state: 'drag' }` and `cleanup.current` was never invoked, leaving the `pointermove`/`pointerup` listeners on `window`. The next `pointerup` anywhere on the page then hit those orphaned listeners, reached `cancel()` with the state still `'drag'`, and called `releasePointerCapture()` on a pointer that no longer existed — the reported `NotFoundError`. Each cancelled drag also leaked another listener pair. This registers `pointercancel` alongside `pointerup` and removes it in the same cleanup, so the machine unwinds when a gesture is cancelled; and it releases pointer capture only when `hasPointerCapture()` says it is still held, which is preferable to `try/catch` swallowing genuine faults too. Note `touch-action: none` (#97723) removed the common touch trigger, but not the defect: on canary a forced `touchCancel` still throws. https://github.com/user-attachments/assets/45a9524d-9ffa-40b6-b59a-5af9d947f8c7 ## Fixed version https://github.com/user-attachments/assets/b5ada68c-7442-42ef-a256-bacc512fbeca ## Browser checks - [x] Chrome, as describe by the bug report - [x] FF works fine pre and post fix (with and without the pointer simulation) - [x] iOS safari simulator, before the fix, I can't see an error, but, the drag gets frozen, with this fix it works correctly https://github.com/user-attachments/assets/bcfdc786-bada-4462-b530-299523fdca6d 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5 (1M context) --- .../errors/dev-tools-indicator/draggable.tsx | 21 ++++-- .../default-position.test.ts | 64 +++++++++++++++++++ 2 files changed, 81 insertions(+), 4 deletions(-) diff --git a/packages/next/src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/draggable.tsx b/packages/next/src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/draggable.tsx index c6667bb84e45..669a4e911d8e 100644 --- a/packages/next/src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/draggable.tsx +++ b/packages/next/src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/draggable.tsx @@ -187,7 +187,14 @@ function useDrag(options: UseDragOptions) { const cancel = useCallback(() => { if (machine.current.state === 'drag') { - ref.current?.releasePointerCapture(machine.current.pointerId) + // The user agent implicitly releases pointer capture when a gesture ends + // or is cancelled, so the pointer may already be inactive by the time we + // get here. Releasing an inactive pointer throws NotFoundError, so only + // release capture we still hold. + const { pointerId } = machine.current + if (ref.current?.hasPointerCapture(pointerId)) { + ref.current.releasePointerCapture(pointerId) + } } machine.current = @@ -282,7 +289,11 @@ function useDrag(options: UseDragOptions) { origin.current = { x: e.clientX, y: e.clientY } machine.current = { state: 'press' } window.addEventListener('pointermove', onPointerMove) - window.addEventListener('pointerup', onPointerUp) + // A gesture ends in either pointerup or pointercancel, and a cancelled one + // never fires pointerup. Listening for only the former strands the machine + // in 'drag' with these listeners still attached. + window.addEventListener('pointerup', onPointerEnd) + window.addEventListener('pointercancel', onPointerEnd) if (cleanup.current !== null) { cleanup.current() @@ -290,7 +301,8 @@ function useDrag(options: UseDragOptions) { } cleanup.current = () => { window.removeEventListener('pointermove', onPointerMove) - window.removeEventListener('pointerup', onPointerUp) + window.removeEventListener('pointerup', onPointerEnd) + window.removeEventListener('pointercancel', onPointerEnd) } ref.current?.addEventListener('click', onClick) @@ -343,7 +355,8 @@ function useDrag(options: UseDragOptions) { options.onDrag?.(translation.current) } - function onPointerUp() { + /** Ends the gesture, whether it was released (pointerup) or cancelled. */ + function onPointerEnd() { const velocity = calculateVelocity(velocities.current) cancel() diff --git a/test/development/app-dir/devtools-position/default-position.test.ts b/test/development/app-dir/devtools-position/default-position.test.ts index b47bc348cc91..efd2580c2305 100644 --- a/test/development/app-dir/devtools-position/default-position.test.ts +++ b/test/development/app-dir/devtools-position/default-position.test.ts @@ -29,4 +29,68 @@ describe('devtools-position-default', () => { expect(touchAction).toBe('none') }) + + it('should end the drag when the pointer is cancelled', async () => { + const browser = await next.browser('/') + await getDevIndicatorPosition(browser) + + // A user agent cancels a gesture (a browser/system gesture takes over, a + // second finger arrives) by firing pointercancel and no pointerup, and it + // implicitly releases pointer capture as it does so. Pointer capture is + // owned by the UA and cannot be driven from script, so the three capture + // methods are stubbed to exactly that post-cancel behaviour: capture is no + // longer held, and releasing it throws NotFoundError. + const result = await browser.eval(() => { + const portal = Array.from( + document.querySelectorAll('nextjs-portal') + ).find((p) => p.shadowRoot?.querySelector('[data-nextjs-toast]')) + const indicator = portal?.shadowRoot?.querySelector('[data-nextjs-toast]') + const draggable = indicator?.firstElementChild as HTMLElement + + Element.prototype.setPointerCapture = function () {} + Element.prototype.hasPointerCapture = function () { + return false + } + Element.prototype.releasePointerCapture = function () { + throw new DOMException( + "Failed to execute 'releasePointerCapture' on 'Element': No active pointer with the given id is found.", + 'NotFoundError' + ) + } + + const errors: string[] = [] + window.addEventListener('error', (event) => errors.push(event.message)) + + const pointerEvent = (type: string, x: number, y: number) => + new PointerEvent(type, { + pointerId: 1, + button: 0, + buttons: 1, + clientX: x, + clientY: y, + bubbles: true, + }) + + const box = draggable.getBoundingClientRect() + const x = box.x + box.width / 2 + const y = box.y + box.height / 2 + + draggable.dispatchEvent(pointerEvent('pointerdown', x, y)) + // past the 5px threshold, so the drag actually starts + window.dispatchEvent(pointerEvent('pointermove', x + 40, y - 40)) + window.dispatchEvent(pointerEvent('pointercancel', x + 40, y - 40)) + const afterCancel = draggable.style.translate + + // The gesture is over. Neither of these may still be treated as a drag: + // the move must be ignored, and the up must not release a pointer that + // no longer exists. + window.dispatchEvent(pointerEvent('pointermove', x + 200, y - 200)) + window.dispatchEvent(pointerEvent('pointerup', x + 200, y - 200)) + + return { errors, afterCancel, afterMove: draggable.style.translate } + }) + + expect(result.errors).toEqual([]) + expect(result.afterMove).toBe(result.afterCancel) + }) }) From d155ba9ebfffe4742efefda8d68c2e0e8e490924 Mon Sep 17 00:00:00 2001 From: Jimmy Miller Date: Fri, 11 Sep 2026 08:29:43 -0600 Subject: [PATCH 2/5] [turbopack] Lazily compile dynamic imports in development (client side) (#97203) ## Summary Defer compiling client-side dynamic import targets in Turbopack development until the browser requests their manifest chunk. This avoids compiling untouched dynamic imports while preserving server-side imports, CSS loading, Server Actions, source maps, and Fast Refresh behavior. One caveat on this is next/dynamic still does some eagerness. I looked a bit at changing things. But it breaks some of the guarantees there and decided to leave it off the table. --------- Co-authored-by: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> --- crates/next-api/src/app.rs | 8 +- crates/next-api/src/project.rs | 17 + crates/next-core/src/next_client/context.rs | 11 +- crates/next-core/src/next_config.rs | 14 + .../src/next_api/project.rs | 19 +- .../next/src/build/swc/generated-native.d.ts | 5 + packages/next/src/build/swc/index.ts | 4 + packages/next/src/build/swc/types.ts | 2 + packages/next/src/server/config-schema.ts | 1 + packages/next/src/server/config-shared.ts | 7 + .../src/server/dev/hot-reloader-turbopack.ts | 29 ++ .../lazy-dynamic-imports/app/actions.ts | 5 + .../app/client-next-dynamic/page.tsx | 19 + .../app/client-next-dynamic/target.tsx | 3 + .../app-dir/lazy-dynamic-imports/app/demo.tsx | 36 ++ .../app/direct-css/direct-css-demo.tsx | 40 ++ .../app/direct-css/page.tsx | 5 + .../lazy-dynamic-imports/app/direct.css | 4 + .../app/direct.module.css | 3 + .../app/duplicate/duplicate-demo.tsx | 33 ++ .../app/duplicate/load-target.ts | 3 + .../app/duplicate/page.tsx | 5 + .../app/duplicate/target.ts | 1 + .../lazy-dynamic-imports/app/layout.tsx | 8 + .../app-dir/lazy-dynamic-imports/app/page.tsx | 5 + .../app/parse-error/page.tsx | 5 + .../app/parse-error/parse-error-demo.tsx | 19 + .../app/parse-error/parse-error-target.ts | 1 + .../lazy-dynamic-imports/app/pattern/page.tsx | 5 + .../app/pattern/pattern-demo.tsx | 20 + .../app/pattern/targets/a.ts | 1 + .../app/pattern/targets/b.ts | 1 + .../app/proxy-identity/page.tsx | 25 + .../app/proxy-identity/target.ts | 1 + .../app/server-graph/actions.ts | 5 + .../app/server-graph/hidden-client.tsx | 24 + .../app/server-graph/lazy-server-content.tsx | 11 + .../app/server-graph/page.tsx | 19 + .../app/server-import/page.tsx | 4 + .../app/server-import/value.ts | 1 + .../app/server-next-dynamic/page.tsx | 7 + .../app/server-next-dynamic/value.tsx | 3 + .../lazy-dynamic-imports/app/shared.ts | 1 + .../app/target.module.css | 3 + .../lazy-dynamic-imports/app/target.tsx | 26 + .../app/top-level-await/page.tsx | 16 + .../app/top-level-await/target.ts | 1 + .../app/untouched/page.tsx | 5 + .../app/untouched/untouched-demo.tsx | 22 + .../app/untouched/untouched-target.tsx | 3 + .../lazy-dynamic-imports.test.ts | 472 ++++++++++++++++++ .../lazy-dynamic-imports/next.config.js | 10 + .../turbopack-browser/src/chunking_context.rs | 68 ++- .../src/chunk/chunking_context.rs | 24 + .../crates/turbopack-core/src/chunk/mod.rs | 4 +- .../crates/turbopack-core/src/issue/mod.rs | 8 + .../turbopack-core/src/reference_type.rs | 30 ++ .../src/async_chunk/mod.rs | 1 + .../src/async_chunk/proxy.rs | 354 +++++++++++++ .../crates/turbopack-ecmascript/src/lib.rs | 3 + .../src/manifest/chunk_asset.rs | 53 +- .../src/manifest/loader_module.rs | 38 +- .../src/module_canonicalization.rs | 95 ++++ .../src/references/esm/dynamic.rs | 25 +- .../src/references/mod.rs | 7 + .../turbopack-nodejs/src/chunking_context.rs | 57 ++- .../dynamic-import/input/index.js | 7 + .../dynamic-import/input/modules/identity.js | 1 + turbopack/crates/turbopack/src/lib.rs | 105 ++-- .../turbopack/src/module_options/mod.rs | 2 + .../module_options/module_options_context.rs | 2 + 71 files changed, 1763 insertions(+), 119 deletions(-) create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/actions.ts create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/client-next-dynamic/page.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/client-next-dynamic/target.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/demo.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/direct-css/direct-css-demo.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/direct-css/page.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/direct.css create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/direct.module.css create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/duplicate/duplicate-demo.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/duplicate/load-target.ts create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/duplicate/page.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/duplicate/target.ts create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/layout.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/page.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/parse-error/page.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/parse-error/parse-error-demo.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/parse-error/parse-error-target.ts create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/pattern/page.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/pattern/pattern-demo.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/pattern/targets/a.ts create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/pattern/targets/b.ts create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/proxy-identity/page.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/proxy-identity/target.ts create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/server-graph/actions.ts create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/server-graph/hidden-client.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/server-graph/lazy-server-content.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/server-graph/page.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/server-import/page.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/server-import/value.ts create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/server-next-dynamic/page.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/server-next-dynamic/value.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/shared.ts create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/target.module.css create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/target.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/top-level-await/page.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/top-level-await/target.ts create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/untouched/page.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/untouched/untouched-demo.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/app/untouched/untouched-target.tsx create mode 100644 test/development/app-dir/lazy-dynamic-imports/lazy-dynamic-imports.test.ts create mode 100644 test/development/app-dir/lazy-dynamic-imports/next.config.js create mode 100644 turbopack/crates/turbopack-ecmascript/src/async_chunk/proxy.rs create mode 100644 turbopack/crates/turbopack-ecmascript/src/module_canonicalization.rs create mode 100644 turbopack/crates/turbopack-tests/tests/execution/turbopack/tree-shaking/dynamic-import/input/modules/identity.js diff --git a/crates/next-api/src/app.rs b/crates/next-api/src/app.rs index ad0afab16809..7725ba6530fd 100644 --- a/crates/next-api/src/app.rs +++ b/crates/next-api/src/app.rs @@ -52,7 +52,7 @@ use turbopack_core::{ asset::AssetContent, chunk::{ ChunkGroupResult, ChunkingContext, ChunkingContextExt, EvaluatableAsset, EvaluatableAssets, - availability_info::AvailabilityInfo, + HmrChunkListSource, availability_info::AvailabilityInfo, }, file_source::FileSource, ident::{AssetIdent, Layer}, @@ -1434,7 +1434,11 @@ impl AppEndpoint { let client_reference_chunks = get_client_references_chunks_for_hmr(*client_references_chunks); client_chunking_context - .hmr_chunk_list(client_components_chunks_ident, client_reference_chunks) + .hmr_chunk_list( + client_components_chunks_ident, + client_reference_chunks, + HmrChunkListSource::Entry, + ) .await? .iter() .copied() diff --git a/crates/next-api/src/project.rs b/crates/next-api/src/project.rs index 175da27fcd8d..10c2b27c2b75 100644 --- a/crates/next-api/src/project.rs +++ b/crates/next-api/src/project.rs @@ -87,6 +87,9 @@ use turbopack_core::{ NotFoundVersion, OptionVersionedContent, Update, Version, VersionState, VersionedContent, }, }; +use turbopack_ecmascript::async_chunk::proxy::{ + activation_key_from_chunk_path, lazy_compilation_state, +}; #[cfg(all(feature = "process_pool", not(target_family = "wasm")))] use turbopack_node::child_process_backend; use turbopack_node::execution_context::ExecutionContext; @@ -456,6 +459,17 @@ fn project_operation(project: ResolvedVc) -> Vc { project.project() } +/// Activates the lazy dynamic import that `chunk_path` names, returning whether it named one. The +/// caller has to rebuild the owning entrypoint before serving the request. +#[turbo_tasks::function(operation, root)] +pub async fn activate_lazy_chunk_operation(chunk_path: RcStr) -> Result> { + let Some(key) = activation_key_from_chunk_path(&chunk_path) else { + return Ok(Vc::cell(false)); + }; + lazy_compilation_state(key).await?.activate(); + Ok(Vc::cell(true)) +} + #[turbo_tasks::function(operation, root)] fn project_fs_operation(project: ResolvedVc) -> Vc { project.project_fs() @@ -1599,6 +1613,9 @@ impl Project { .turbo_nested_async_chunking(self.next_mode(), true), shared_runtime: self.next_config().turbo_shared_runtime(self.next_mode()), per_page_module_graph: self.per_page_module_graph(), + lazy_dynamic_imports: self + .next_config() + .turbopack_lazy_dynamic_imports(*self.next_mode().await?), debug_ids: self.next_config().turbopack_debug_ids(), worker_asset_prefix: self.next_config().turbopack_worker_asset_prefix(), should_use_absolute_url_references: self.next_config().inline_css(), diff --git a/crates/next-core/src/next_client/context.rs b/crates/next-core/src/next_client/context.rs index 26c5078cdd1f..7435afc7d792 100644 --- a/crates/next-core/src/next_client/context.rs +++ b/crates/next-core/src/next_client/context.rs @@ -379,6 +379,9 @@ pub async fn get_client_module_options_context( mangle_export_names: *next_config.turbopack_mangle_export_names(mode).await?, cjs_scope_hoisting: *next_config.turbopack_cjs_scope_hoisting().await?, cross_module_constants: *next_config.turbopack_cross_module_constants().await?, + lazy_compilation: *next_config + .turbopack_lazy_dynamic_imports(*next_mode) + .await?, preset_env_config, ..Default::default() }, @@ -411,6 +414,7 @@ pub async fn get_client_module_options_context( enable_typeof_window_inlining: None, // Ignore e.g. import(`${url}`) requests in node_modules. ignore_dynamic_requests: true, + lazy_compilation: false, // Don't inject core-js polyfills into node_modules — only user code // should be processed by preset_env's usage/entry mode. preset_env_config: None, @@ -433,6 +437,7 @@ pub async fn get_client_module_options_context( enable_jsx: Some(JsxTransformOptions::default().resolved_cell()), // Don't inject core-js polyfills into framework internals. preset_env_config: None, + lazy_compilation: false, ..module_options_context.ecmascript.clone() }, enable_postcss_transform: None, @@ -492,6 +497,7 @@ pub struct ClientChunkingContextOptions { pub nested_async_chunking: Vc, pub shared_runtime: Vc, pub per_page_module_graph: Vc, + pub lazy_dynamic_imports: Vc, pub debug_ids: Vc, pub worker_asset_prefix: Vc>, pub should_use_absolute_url_references: Vc, @@ -541,6 +547,7 @@ pub async fn get_client_chunking_context( nested_async_chunking, shared_runtime, per_page_module_graph, + lazy_dynamic_imports, debug_ids, worker_asset_prefix, should_use_absolute_url_references, @@ -618,7 +625,9 @@ pub async fn get_client_chunking_context( builder = builder .hot_module_replacement() .source_map_source_type(SourceMapSourceType::AbsoluteFileUri) - .dynamic_chunk_content_loading(true); + .dynamic_chunk_content_loading(true) + // A manifest chunk keeps a lazily compiled import's URL stable across activation. + .manifest_chunks(*lazy_dynamic_imports.await?); } else { builder = builder .chunking_config( diff --git a/crates/next-core/src/next_config.rs b/crates/next-core/src/next_config.rs index 5bcb83615cf1..62a6842f3347 100644 --- a/crates/next-core/src/next_config.rs +++ b/crates/next-core/src/next_config.rs @@ -1416,6 +1416,9 @@ pub struct ExperimentalConfig { turbopack_worker_asset_prefix: Option, turbopack_client_side_nested_async_chunking: Option, turbopack_server_side_nested_async_chunking: Option, + /// Compile client dynamic import targets when their runtime proxy is first activated. + /// Development only. + turbopack_lazy_dynamic_imports: Option, turbopack_import_type_bytes: Option, /// Disable automatic configuration of the sass loader. #[serde(default)] @@ -2741,6 +2744,17 @@ impl NextConfig { })) } + #[turbo_tasks::function] + pub async fn turbopack_lazy_dynamic_imports(&self, next_mode: NextMode) -> Vc { + Vc::cell( + next_mode.is_development() + && self + .experimental + .turbopack_lazy_dynamic_imports + .unwrap_or(false), + ) + } + #[turbo_tasks::function] pub async fn turbopack_import_type_bytes(&self) -> Vc { Vc::cell( diff --git a/crates/next-napi-bindings/src/next_api/project.rs b/crates/next-napi-bindings/src/next_api/project.rs index e84e25b597b8..5f96e6d3eeb9 100644 --- a/crates/next-napi-bindings/src/next_api/project.rs +++ b/crates/next-napi-bindings/src/next_api/project.rs @@ -30,7 +30,7 @@ use next_api::{ }, project::{ DebugBuildPaths, DefineEnv, DraftModeOptions, PartialProjectOptions, Project, - ProjectContainer, ProjectOptions, WatchOptions, + ProjectContainer, ProjectOptions, WatchOptions, activate_lazy_chunk_operation, }, project_asset_hashes_manifest::immutable_hashes_manifest_asset_if_enabled, route::{Endpoint, EndpointGroupKey, Route}, @@ -747,6 +747,23 @@ pub async fn project_update( .await } +#[tracing::instrument(level = "info", name = "activate lazy chunk", skip_all)] +#[napi] +pub async fn project_activate_lazy_chunk( + #[napi(ts_arg_type = "{ __napiType: \"Project\" }")] project: &External, + chunk_path: RcStr, +) -> napi::Result { + let ctx = &project.turbopack_ctx; + ctx.turbo_tasks() + .run(async move { + Ok(*activate_lazy_chunk_operation(chunk_path) + .read_strongly_consistent() + .await?) + }) + .await + .map_err(|error| napi::Error::from_reason(PrettyPrintError(&error.into()).to_string())) +} + /// Invalidates the filesystem cache so that it will be deleted next time that a turbopack project /// is created with filesystem cache enabled. #[napi] diff --git a/packages/next/src/build/swc/generated-native.d.ts b/packages/next/src/build/swc/generated-native.d.ts index d162392983cf..ddf19d0c7eb9 100644 --- a/packages/next/src/build/swc/generated-native.d.ts +++ b/packages/next/src/build/swc/generated-native.d.ts @@ -567,6 +567,11 @@ export declare function parse( signal?: AbortSignal | undefined | null ): Promise +export declare function projectActivateLazyChunk( + project: { __napiType: 'Project' }, + chunkPath: RcStr +): Promise + export declare function projectClientHmrChunkNamesSubscribe( project: { __napiType: 'Project' }, func: (err: Error, value: TurbopackResult) => void diff --git a/packages/next/src/build/swc/index.ts b/packages/next/src/build/swc/index.ts index 4c581bd81c67..55a9eff4d536 100644 --- a/packages/next/src/build/swc/index.ts +++ b/packages/next/src/build/swc/index.ts @@ -696,6 +696,10 @@ function bindingToApi( ) } + async activateLazyChunk(chunkPath: string): Promise { + return binding.projectActivateLazyChunk(this._nativeProject, chunkPath) + } + async writeAnalyzeData( appDirOnly: boolean ): Promise> { diff --git a/packages/next/src/build/swc/types.ts b/packages/next/src/build/swc/types.ts index 569959182b01..2ee384433079 100644 --- a/packages/next/src/build/swc/types.ts +++ b/packages/next/src/build/swc/types.ts @@ -317,6 +317,8 @@ export interface UpdateInfo { export interface Project { update(options: Partial): Promise + activateLazyChunk(chunkPath: string): Promise + writeAnalyzeData(appDirOnly: boolean): Promise> getAllCompilationIssues(): Promise> diff --git a/packages/next/src/server/config-schema.ts b/packages/next/src/server/config-schema.ts index a48eca1f7e73..5c823037531e 100644 --- a/packages/next/src/server/config-schema.ts +++ b/packages/next/src/server/config-schema.ts @@ -416,6 +416,7 @@ export const experimentalSchema = { turbopackWorkerAssetPrefix: z.string().optional(), turbopackClientSideNestedAsyncChunking: z.boolean().optional(), turbopackServerSideNestedAsyncChunking: z.boolean().optional(), + turbopackLazyDynamicImports: z.boolean().optional(), turbopackImportTypeBytes: z.boolean().optional(), turbopackUseBuiltinBabel: z.boolean().optional(), turbopackUseBuiltinSass: z.boolean().optional(), diff --git a/packages/next/src/server/config-shared.ts b/packages/next/src/server/config-shared.ts index ba2b83614602..7f11c5851ede 100644 --- a/packages/next/src/server/config-shared.ts +++ b/packages/next/src/server/config-shared.ts @@ -948,6 +948,13 @@ export interface ExperimentalConfig { */ turbopackServerSideNestedAsyncChunking?: boolean + /** + * Compile client dynamic import targets when they are first used in development. + * + * Defaults to `false`. + */ + turbopackLazyDynamicImports?: boolean + /** * Enable filesystem cache for the turbopack dev server. * diff --git a/packages/next/src/server/dev/hot-reloader-turbopack.ts b/packages/next/src/server/dev/hot-reloader-turbopack.ts index a881bc6d5d11..b201c1555281 100644 --- a/packages/next/src/server/dev/hot-reloader-turbopack.ts +++ b/packages/next/src/server/dev/hot-reloader-turbopack.ts @@ -404,6 +404,7 @@ export async function createHotReloaderTurbopack( const dev = true const buildId = 'development' const { nextConfig, dir: projectPath } = opts + const lazyDynamicImports = nextConfig.experimental.turbopackLazyDynamicImports const bindings = getBindingsSync() @@ -1436,6 +1437,34 @@ export async function createHotReloaderTurbopack( } } + // Requesting the manifest chunk of a lazily compiled dynamic import is what activates it, + // so the owning entrypoints have to be rebuilt before the static handler reads it off disk. + if ( + lazyDynamicImports && + req.url?.startsWith('/_next/static/chunks/') && + req.url.includes('lazy-compilation-') + ) { + // Turbopack names chunks relative to `/_next`, and so does `AssetMapper`. + const chunkPath = decodeURIComponent( + req.url.split('?')[0].slice('/_next/'.length) + ) + const keys = assetMapper.getKeysByAsset(chunkPath) + try { + if (keys.length > 0 && (await project.activateLazyChunk(chunkPath))) { + for (const key of keys) { + await hotReloader.ensurePage({ + page: splitEntryKey(key).page, + clientOnly: false, + definition: undefined, + url: req.url, + }) + } + } + } catch (err) { + console.error(err) + } + } + for (const middleware of middlewares) { let calledNext = false diff --git a/test/development/app-dir/lazy-dynamic-imports/app/actions.ts b/test/development/app-dir/lazy-dynamic-imports/app/actions.ts new file mode 100644 index 000000000000..8584e8d9656d --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/actions.ts @@ -0,0 +1,5 @@ +'use server' + +export async function lazyAction() { + return 'lazy-action-result' +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/client-next-dynamic/page.tsx b/test/development/app-dir/lazy-dynamic-imports/app/client-next-dynamic/page.tsx new file mode 100644 index 000000000000..5534f6b9a17f --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/client-next-dynamic/page.tsx @@ -0,0 +1,19 @@ +'use client' + +import dynamic from 'next/dynamic' +import { useState } from 'react' + +const Target = dynamic(() => import('./target')) + +export default function Page() { + const [show, setShow] = useState(false) + + return ( + <> + + {show ? :

not rendered

} + + ) +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/client-next-dynamic/target.tsx b/test/development/app-dir/lazy-dynamic-imports/app/client-next-dynamic/target.tsx new file mode 100644 index 000000000000..e1a5eb896170 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/client-next-dynamic/target.tsx @@ -0,0 +1,3 @@ +export default function Target() { + return

next-dynamic-parse-marker

+} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/demo.tsx b/test/development/app-dir/lazy-dynamic-imports/app/demo.tsx new file mode 100644 index 000000000000..37197b060d3a --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/demo.tsx @@ -0,0 +1,36 @@ +'use client' + +import { useState } from 'react' +import { sharedValue } from './shared' + +export function Demo() { + const [Target, setTarget] = useState(null) + const [overlapResult, setOverlapResult] = useState('overlap idle') + + return ( + <> +

eager-marker-7c2a

+

{sharedValue}

+ +

{overlapResult}

+ + {Target ? :

idle

} + + ) +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/direct-css/direct-css-demo.tsx b/test/development/app-dir/lazy-dynamic-imports/app/direct-css/direct-css-demo.tsx new file mode 100644 index 000000000000..3e1673364978 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/direct-css/direct-css-demo.tsx @@ -0,0 +1,40 @@ +'use client' + +import { useState } from 'react' + +export function DirectCssDemo() { + const [result, setResult] = useState('direct CSS idle') + const [moduleClass, setModuleClass] = useState('') + + return ( + <> + +

+ {result} +

+ +

+ {moduleClass || 'direct CSS Module idle'} +

+ + ) +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/direct-css/page.tsx b/test/development/app-dir/lazy-dynamic-imports/app/direct-css/page.tsx new file mode 100644 index 000000000000..6e280bbd2e06 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/direct-css/page.tsx @@ -0,0 +1,5 @@ +import { DirectCssDemo } from './direct-css-demo' + +export default function Page() { + return +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/direct.css b/test/development/app-dir/lazy-dynamic-imports/app/direct.css new file mode 100644 index 000000000000..b8bd9b661871 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/direct.css @@ -0,0 +1,4 @@ +.direct-css-target { + color: rgb(12, 34, 56); + --direct-css-marker: direct-css-marker-f6a1; +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/direct.module.css b/test/development/app-dir/lazy-dynamic-imports/app/direct.module.css new file mode 100644 index 000000000000..b749adda5fb4 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/direct.module.css @@ -0,0 +1,3 @@ +.target { + color: rgb(70, 80, 90); +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/duplicate/duplicate-demo.tsx b/test/development/app-dir/lazy-dynamic-imports/app/duplicate/duplicate-demo.tsx new file mode 100644 index 000000000000..7c510d9ac392 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/duplicate/duplicate-demo.tsx @@ -0,0 +1,33 @@ +'use client' + +import { useState } from 'react' +import { loadTarget } from './load-target' + +export function DuplicateDemo() { + const [first, setFirst] = useState('first idle') + const [second, setSecond] = useState('second idle') + const [third, setThird] = useState('third idle') + + return ( + <> + + + + + ) +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/duplicate/load-target.ts b/test/development/app-dir/lazy-dynamic-imports/app/duplicate/load-target.ts new file mode 100644 index 000000000000..c77678e23d57 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/duplicate/load-target.ts @@ -0,0 +1,3 @@ +export async function loadTarget() { + return (await import('./target')).value +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/duplicate/page.tsx b/test/development/app-dir/lazy-dynamic-imports/app/duplicate/page.tsx new file mode 100644 index 000000000000..b700e3a54d81 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/duplicate/page.tsx @@ -0,0 +1,5 @@ +import { DuplicateDemo } from './duplicate-demo' + +export default function Page() { + return +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/duplicate/target.ts b/test/development/app-dir/lazy-dynamic-imports/app/duplicate/target.ts new file mode 100644 index 000000000000..a3461563cd5c --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/duplicate/target.ts @@ -0,0 +1 @@ +export const value = 'duplicate target' diff --git a/test/development/app-dir/lazy-dynamic-imports/app/layout.tsx b/test/development/app-dir/lazy-dynamic-imports/app/layout.tsx new file mode 100644 index 000000000000..888614deda3b --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/layout.tsx @@ -0,0 +1,8 @@ +import { ReactNode } from 'react' +export default function Root({ children }: { children: ReactNode }) { + return ( + + {children} + + ) +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/page.tsx b/test/development/app-dir/lazy-dynamic-imports/app/page.tsx new file mode 100644 index 000000000000..0e3ad7d23c8f --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/page.tsx @@ -0,0 +1,5 @@ +import { Demo } from './demo' + +export default function Page() { + return +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/parse-error/page.tsx b/test/development/app-dir/lazy-dynamic-imports/app/parse-error/page.tsx new file mode 100644 index 000000000000..b5cf2697f2a4 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/parse-error/page.tsx @@ -0,0 +1,5 @@ +import { ParseErrorDemo } from './parse-error-demo' + +export default function Page() { + return +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/parse-error/parse-error-demo.tsx b/test/development/app-dir/lazy-dynamic-imports/app/parse-error/parse-error-demo.tsx new file mode 100644 index 000000000000..5c01ad82aae7 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/parse-error/parse-error-demo.tsx @@ -0,0 +1,19 @@ +'use client' + +export function ParseErrorDemo() { + return ( + <> + +

not parsed

+ + ) +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/parse-error/parse-error-target.ts b/test/development/app-dir/lazy-dynamic-imports/app/parse-error/parse-error-target.ts new file mode 100644 index 000000000000..f39070330308 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/parse-error/parse-error-target.ts @@ -0,0 +1 @@ +export const parseError = 'parse-error-proves-target-was-analyzed' diff --git a/test/development/app-dir/lazy-dynamic-imports/app/pattern/page.tsx b/test/development/app-dir/lazy-dynamic-imports/app/pattern/page.tsx new file mode 100644 index 000000000000..0e047a37147b --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/pattern/page.tsx @@ -0,0 +1,5 @@ +import { PatternDemo } from './pattern-demo' + +export default function Page() { + return +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/pattern/pattern-demo.tsx b/test/development/app-dir/lazy-dynamic-imports/app/pattern/pattern-demo.tsx new file mode 100644 index 000000000000..45f5da7ac185 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/pattern/pattern-demo.tsx @@ -0,0 +1,20 @@ +'use client' + +import { useState } from 'react' + +export function PatternDemo() { + const [value, setValue] = useState('idle') + + return ( + + ) +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/pattern/targets/a.ts b/test/development/app-dir/lazy-dynamic-imports/app/pattern/targets/a.ts new file mode 100644 index 000000000000..ef456be4288e --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/pattern/targets/a.ts @@ -0,0 +1 @@ +export const value = 'pattern a' diff --git a/test/development/app-dir/lazy-dynamic-imports/app/pattern/targets/b.ts b/test/development/app-dir/lazy-dynamic-imports/app/pattern/targets/b.ts new file mode 100644 index 000000000000..483e66fd8927 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/pattern/targets/b.ts @@ -0,0 +1 @@ +export const value = 'pattern b' diff --git a/test/development/app-dir/lazy-dynamic-imports/app/proxy-identity/page.tsx b/test/development/app-dir/lazy-dynamic-imports/app/proxy-identity/page.tsx new file mode 100644 index 000000000000..815d8d06c392 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/proxy-identity/page.tsx @@ -0,0 +1,25 @@ +'use client' + +import { useState } from 'react' + +export default function Page() { + const [first, setFirst] = useState('first idle') + const [second, setSecond] = useState('second idle') + + return ( + <> + + + + ) +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/proxy-identity/target.ts b/test/development/app-dir/lazy-dynamic-imports/app/proxy-identity/target.ts new file mode 100644 index 000000000000..c3a213552b02 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/proxy-identity/target.ts @@ -0,0 +1 @@ +export const value = 'proxy identity target' diff --git a/test/development/app-dir/lazy-dynamic-imports/app/server-graph/actions.ts b/test/development/app-dir/lazy-dynamic-imports/app/server-graph/actions.ts new file mode 100644 index 000000000000..f7f317c805a0 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/server-graph/actions.ts @@ -0,0 +1,5 @@ +'use server' + +export async function hiddenAction() { + return 'hidden-action-result' +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/server-graph/hidden-client.tsx b/test/development/app-dir/lazy-dynamic-imports/app/server-graph/hidden-client.tsx new file mode 100644 index 000000000000..efe5947711bd --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/server-graph/hidden-client.tsx @@ -0,0 +1,24 @@ +'use client' + +import { useState } from 'react' + +export function HiddenClient({ action }: { action: () => Promise }) { + const [hydrated, setHydrated] = useState(false) + const [actionResult, setActionResult] = useState('action idle') + + return ( + <> + +

{hydrated ? 'hydrated' : 'not hydrated'}

+ +

{actionResult}

+ + ) +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/server-graph/lazy-server-content.tsx b/test/development/app-dir/lazy-dynamic-imports/app/server-graph/lazy-server-content.tsx new file mode 100644 index 000000000000..948824881577 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/server-graph/lazy-server-content.tsx @@ -0,0 +1,11 @@ +import { hiddenAction } from './actions' +import { HiddenClient } from './hidden-client' + +export function LazyServerContent() { + return ( + <> +

server-graph-marker

+ + + ) +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/server-graph/page.tsx b/test/development/app-dir/lazy-dynamic-imports/app/server-graph/page.tsx new file mode 100644 index 000000000000..1d608cd3c9e2 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/server-graph/page.tsx @@ -0,0 +1,19 @@ +import Link from 'next/link' + +export default async function Page({ + searchParams, +}: { + searchParams: Promise<{ show?: string }> +}) { + if ((await searchParams).show !== '1') { + return ( + + reveal server graph + + ) + } + + const { LazyServerContent } = await import('./lazy-server-content') + + return +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/server-import/page.tsx b/test/development/app-dir/lazy-dynamic-imports/app/server-import/page.tsx new file mode 100644 index 000000000000..a906bec334a8 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/server-import/page.tsx @@ -0,0 +1,4 @@ +export default async function Page() { + const { value } = await import('./value') + return

{value}

+} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/server-import/value.ts b/test/development/app-dir/lazy-dynamic-imports/app/server-import/value.ts new file mode 100644 index 000000000000..5c445e8e8c45 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/server-import/value.ts @@ -0,0 +1 @@ +export const value = 'server-dynamic-import' diff --git a/test/development/app-dir/lazy-dynamic-imports/app/server-next-dynamic/page.tsx b/test/development/app-dir/lazy-dynamic-imports/app/server-next-dynamic/page.tsx new file mode 100644 index 000000000000..94899115cf5a --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/server-next-dynamic/page.tsx @@ -0,0 +1,7 @@ +import dynamic from 'next/dynamic' + +const Value = dynamic(() => import('./value')) + +export default function Page() { + return +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/server-next-dynamic/value.tsx b/test/development/app-dir/lazy-dynamic-imports/app/server-next-dynamic/value.tsx new file mode 100644 index 000000000000..2d80119b47ef --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/server-next-dynamic/value.tsx @@ -0,0 +1,3 @@ +export default function Value() { + return

server-next-dynamic

+} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/shared.ts b/test/development/app-dir/lazy-dynamic-imports/app/shared.ts new file mode 100644 index 000000000000..40665595f8d2 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/shared.ts @@ -0,0 +1 @@ +export const sharedValue = 'shared-dependency-marker-b31f' diff --git a/test/development/app-dir/lazy-dynamic-imports/app/target.module.css b/test/development/app-dir/lazy-dynamic-imports/app/target.module.css new file mode 100644 index 000000000000..f63af039b54d --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/target.module.css @@ -0,0 +1,3 @@ +.target { + color: green; +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/target.tsx b/test/development/app-dir/lazy-dynamic-imports/app/target.tsx new file mode 100644 index 000000000000..d7a45e2cee61 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/target.tsx @@ -0,0 +1,26 @@ +'use client' + +import { useState } from 'react' +import { lazyAction } from './actions' +import { sharedValue } from './shared' +import styles from './target.module.css' + +export function Target() { + const [actionResult, setActionResult] = useState('action idle') + + return ( + <> +

+ lazy-marker-9a4e +

+

{sharedValue}

+ +

{actionResult}

+ + ) +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/top-level-await/page.tsx b/test/development/app-dir/lazy-dynamic-imports/app/top-level-await/page.tsx new file mode 100644 index 000000000000..01cc25651f38 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/top-level-await/page.tsx @@ -0,0 +1,16 @@ +'use client' + +import { useState } from 'react' + +export default function Page() { + const [result, setResult] = useState('top-level await idle') + + return ( + + ) +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/top-level-await/target.ts b/test/development/app-dir/lazy-dynamic-imports/app/top-level-await/target.ts new file mode 100644 index 000000000000..5b3f536cdd6d --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/top-level-await/target.ts @@ -0,0 +1 @@ +export const value = await Promise.resolve('top-level await target') diff --git a/test/development/app-dir/lazy-dynamic-imports/app/untouched/page.tsx b/test/development/app-dir/lazy-dynamic-imports/app/untouched/page.tsx new file mode 100644 index 000000000000..d5758f388e68 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/untouched/page.tsx @@ -0,0 +1,5 @@ +import { UntouchedDemo } from './untouched-demo' + +export default function Page() { + return +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/untouched/untouched-demo.tsx b/test/development/app-dir/lazy-dynamic-imports/app/untouched/untouched-demo.tsx new file mode 100644 index 000000000000..11f2efb53d44 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/untouched/untouched-demo.tsx @@ -0,0 +1,22 @@ +'use client' + +import { useState } from 'react' + +export function UntouchedDemo() { + const [Target, setTarget] = useState(null) + + return ( + <> + + {Target ? :

untouched idle

} + + ) +} diff --git a/test/development/app-dir/lazy-dynamic-imports/app/untouched/untouched-target.tsx b/test/development/app-dir/lazy-dynamic-imports/app/untouched/untouched-target.tsx new file mode 100644 index 000000000000..5ed5ca26e56e --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/app/untouched/untouched-target.tsx @@ -0,0 +1,3 @@ +export function UntouchedTarget() { + return

untouched-marker-2d8c

+} diff --git a/test/development/app-dir/lazy-dynamic-imports/lazy-dynamic-imports.test.ts b/test/development/app-dir/lazy-dynamic-imports/lazy-dynamic-imports.test.ts new file mode 100644 index 000000000000..5e4e2287deb0 --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/lazy-dynamic-imports.test.ts @@ -0,0 +1,472 @@ +import { promises as fs } from 'fs' +import path from 'path' +import { nextTestSetup } from 'e2e-utils' +import { getRedboxSource, retry, waitForRedbox } from 'next-test-utils' +;(process.env.IS_TURBOPACK_TEST ? describe : describe.skip)( + 'lazy-dynamic-imports', + () => { + const { next } = nextTestSetup({ + files: __dirname, + patchFileDelay: 500, + }) + + async function assetsContaining(marker: string): Promise { + const root = path.join(next.testDir, next.distDir, 'static') + const matches: string[] = [] + + async function walk(dir: string) { + for (const entry of await fs.readdir(dir, { withFileTypes: true })) { + const entryPath = path.join(dir, entry.name) + if (entry.isDirectory()) { + await walk(entryPath) + } else if ( + // The dev server may rewrite a chunk while we are walking it. + (await fs.readFile(entryPath, 'utf8').catch(() => '')).includes( + marker + ) + ) { + matches.push(entryPath) + } + } + } + + await walk(root) + return matches + } + + it('activates a dynamic import over HTTP and keeps Fast Refresh working', async () => { + const targetPath = path.join('app', 'target.tsx') + const originalTarget = await next.readFile(targetPath) + + expect(await next.render('/server-import')).toContain( + 'server-dynamic-import' + ) + expect(await next.render('/server-next-dynamic')).toContain( + 'server-next-dynamic' + ) + expect(await next.fetch('/untouched').then((res) => res.status)).toBe(200) + + const browser = await next.browser('/') + + expect(await browser.elementByCss('#eager').text()).toBe( + 'eager-marker-7c2a' + ) + expect(await browser.elementByCss('#eager-shared').text()).toBe( + 'shared-dependency-marker-b31f' + ) + const initialChunkPaths: string[] = await browser.eval(` + [...new Set(performance.getEntriesByType('resource') + .map((entry) => new URL(entry.name).pathname) + .filter((pathname) => pathname.endsWith('.js')))] + `) + const initialChunkContents = await Promise.all( + initialChunkPaths.map((chunkPath) => + next.fetch(chunkPath).then((res) => res.text()) + ) + ) + expect( + initialChunkContents.some((content) => + content.includes('shared-dependency-marker-b31f') + ) + ).toBe(true) + + await browser.elementByCss('#load-overlap').click() + await retry(async () => { + expect(await browser.elementByCss('#overlap-result').text()).toBe( + 'shared-dependency-marker-b31f' + ) + }) + const chunksAfterOverlap: string[] = await browser.eval(` + [...new Set(performance.getEntriesByType('resource') + .map((entry) => new URL(entry.name).pathname) + .filter((pathname) => pathname.endsWith('.js')))] + `) + const overlapChunkPaths = chunksAfterOverlap.filter( + (chunkPath) => !initialChunkPaths.includes(chunkPath) + ) + expect(overlapChunkPaths).not.toHaveLength(0) + const overlapChunkContents = await Promise.all( + overlapChunkPaths.map((chunkPath) => + next.fetch(chunkPath).then((res) => res.text()) + ) + ) + expect( + overlapChunkContents.some((content) => + content.includes('shared-dependency-marker-b31f') + ) + ).toBe(false) + + expect(await assetsContaining('lazy-marker-9a4e')).toHaveLength(0) + expect(await assetsContaining('color: green')).toHaveLength(0) + expect(await assetsContaining('untouched-marker-2d8c')).toHaveLength(0) + // A valid-looking activation path that no lazy proxy owns falls through to the static handler. + expect( + await next + .fetch( + '/_next/static/chunks/not-a-lazy-chunk-lazy-compilation-0123456789abcdef.js' + ) + .then((res) => res.status) + ).toBe(404) + + const initialTimeOrigin = await browser.eval('performance.timeOrigin') + await browser.elementByCss('#load').click() + await retry(async () => { + expect(await browser.elementByCss('#target').text()).toBe( + 'lazy-marker-9a4e' + ) + }) + expect(await browser.elementByCss('#lazy-shared').text()).toBe( + 'shared-dependency-marker-b31f' + ) + const loadedChunkPaths: string[] = await browser.eval(` + [...new Set(performance.getEntriesByType('resource') + .map((entry) => new URL(entry.name).pathname) + .filter((pathname) => pathname.endsWith('.js')))] + `) + const lazyChunkPaths = loadedChunkPaths.filter( + (chunkPath) => !chunksAfterOverlap.includes(chunkPath) + ) + expect(lazyChunkPaths).not.toHaveLength(0) + const lazyChunkContents = await Promise.all( + lazyChunkPaths.map((chunkPath) => + next.fetch(chunkPath).then((res) => res.text()) + ) + ) + expect( + lazyChunkContents.some((content) => + content.includes('lazy-marker-9a4e') + ) + ).toBe(true) + expect( + lazyChunkContents.some((content) => + content.includes('shared-dependency-marker-b31f') + ) + ).toBe(false) + expect( + await browser.eval( + `getComputedStyle(document.querySelector('#target')).color` + ) + ).toBe('rgb(0, 128, 0)') + expect(await assetsContaining('lazy-marker-9a4e')).not.toHaveLength(0) + expect(await assetsContaining('color: green')).not.toHaveLength(0) + expect(await assetsContaining('untouched-marker-2d8c')).toHaveLength(0) + expect(await browser.eval('performance.timeOrigin')).toBe( + initialTimeOrigin + ) + + await browser.elementByCss('#run-action').click() + await retry(async () => { + expect(await browser.elementByCss('#action-result').text()).toBe( + 'lazy-action-result' + ) + }) + + const targetAsset = (await assetsContaining('lazy-marker-9a4e')).find( + (asset) => asset.endsWith('.js') + ) + expect(targetAsset).toBeDefined() + const sourceMapResponse = await next.fetch( + `/__nextjs_source-map?filename=${encodeURIComponent(targetAsset!)}` + ) + expect(sourceMapResponse.status).toBe(200) + expect(await sourceMapResponse.json()).toHaveProperty('version', 3) + + const timeOrigin = await browser.eval('performance.timeOrigin') + try { + await next.patchFile( + targetPath, + originalTarget.replace('lazy-marker-9a4e', 'updated-marker') + ) + await retry(async () => { + expect(await browser.elementByCss('#target').text()).toBe( + 'updated-marker' + ) + }) + expect(await browser.eval('performance.timeOrigin')).toBe(timeOrigin) + } finally { + await next.patchFile(targetPath, originalTarget) + } + }) + + it('preserves client and server references behind a server dynamic import', async () => { + const browser = await next.browser('/server-graph') + + expect( + await browser.hasElementByCssSelector('#server-graph-marker') + ).toBe(false) + await browser.elementByCss('#reveal-server-graph').click() + await retry(async () => { + expect(await browser.elementByCss('#server-graph-marker').text()).toBe( + 'server-graph-marker' + ) + }) + + await browser.elementByCss('#hydrate-client').click() + await retry(async () => { + expect(await browser.elementByCss('#hydration-result').text()).toBe( + 'hydrated' + ) + }) + + await browser.elementByCss('#run-hidden-action').click() + await retry(async () => { + expect(await browser.elementByCss('#hidden-action-result').text()).toBe( + 'hidden-action-result' + ) + }) + }) + + it('does not parse a dynamic import target before activation', async () => { + const targetPath = path.join( + 'app', + 'parse-error', + 'parse-error-target.ts' + ) + const demoPath = path.join('app', 'parse-error', 'parse-error-demo.tsx') + const originalTarget = await next.readFile(targetPath) + const originalDemo = await next.readFile(demoPath) + + try { + await next.patchFile( + targetPath, + `export const parseError = 'parse-error-proves-target-was-analyzed' +export const invalid = ;` + ) + const browser = await next.browser('/parse-error') + + expect(await browser.elementByCss('#parse-error-idle').text()).toBe( + 'not parsed' + ) + + await next.patchFile( + demoPath, + originalDemo.replace('not parsed', 'still not parsed') + ) + await retry(async () => { + expect(await browser.elementByCss('#parse-error-idle').text()).toBe( + 'still not parsed' + ) + }) + expect( + await browser.eval(` + Boolean(document.querySelector('nextjs-portal')?.shadowRoot + ?.querySelector('[data-nextjs-dialog]')) + `) + ).toBe(false) + + await browser.elementByCss('#load-parse-error').click() + await waitForRedbox(browser) + expect(await getRedboxSource(browser)).toContain( + 'parse-error-proves-target-was-analyzed' + ) + } finally { + await next.patchFile(targetPath, originalTarget) + await next.patchFile(demoPath, originalDemo) + } + }) + + it('parses a client next/dynamic target before it is rendered', async () => { + const targetPath = path.join('app', 'client-next-dynamic', 'target.tsx') + const originalTarget = await next.readFile(targetPath) + + try { + await next.patchFile( + targetPath, + `${originalTarget}\nexport const invalid = ;` + ) + const browser = await next.browser('/client-next-dynamic') + + await waitForRedbox(browser) + expect(await getRedboxSource(browser)).toContain( + './app/client-next-dynamic/target.tsx' + ) + } finally { + await next.patchFile(targetPath, originalTarget) + } + }) + + it('activates a pattern import without colliding with its target', async () => { + const browser = await next.browser('/pattern') + const getActivationKeys = async (): Promise => + browser.eval(` + [...new Set(performance.getEntriesByType('resource') + .map((entry) => entry.name.match(/lazy-compilation-([0-9a-f]{16})/)?.[1]) + .filter(Boolean))] + `) + const initialManifests = await getActivationKeys() + + await browser.elementByCss('#load-pattern').click() + await retry(async () => { + expect(await browser.elementByCss('#load-pattern').text()).toBe( + 'pattern a' + ) + }) + const manifestsAfterA = await getActivationKeys() + expect( + manifestsAfterA.filter( + (pathname) => !initialManifests.includes(pathname) + ) + ).toHaveLength(1) + + await browser.eval(`location.hash = 'b'`) + await browser.elementByCss('#load-pattern').click() + await retry(async () => { + expect(await browser.elementByCss('#load-pattern').text()).toBe( + 'pattern b' + ) + }) + const manifestsAfterB = await getActivationKeys() + expect( + manifestsAfterB.filter( + (pathname) => !manifestsAfterA.includes(pathname) + ) + ).toHaveLength(1) + }) + + it('shares a proxy for repeated imports', async () => { + const browser = await next.browser('/duplicate') + const getActivationKeys = async (): Promise => + browser.eval(` + [...new Set(performance.getEntriesByType('resource') + .map((entry) => entry.name.match(/lazy-compilation-([0-9a-f]{16})/)?.[1]) + .filter(Boolean))] + `) + const initialManifests = await getActivationKeys() + + await browser.elementByCss('#load-first').click() + await retry(async () => { + expect(await browser.elementByCss('#load-first').text()).toBe( + 'duplicate target' + ) + }) + expect(await browser.elementByCss('#load-second').text()).toBe( + 'second idle' + ) + const manifestsAfterFirst = await getActivationKeys() + expect( + manifestsAfterFirst.filter( + (pathname) => !initialManifests.includes(pathname) + ) + ).toHaveLength(1) + + await browser.elementByCss('#load-second').click() + await retry(async () => { + expect(await browser.elementByCss('#load-second').text()).toBe( + 'duplicate target' + ) + }) + const manifestsAfterSecond = await getActivationKeys() + expect( + manifestsAfterSecond.filter( + (pathname) => !manifestsAfterFirst.includes(pathname) + ) + ).toHaveLength(0) + + await browser.elementByCss('#load-third').click() + await retry(async () => { + expect(await browser.elementByCss('#load-third').text()).toBe( + 'duplicate target' + ) + }) + const manifestsAfterThird = await getActivationKeys() + expect( + manifestsAfterThird.filter( + (pathname) => !manifestsAfterSecond.includes(pathname) + ) + ).toHaveLength(0) + }) + + it('supports different requests from one origin resolving to the same target', async () => { + const browser = await next.browser('/proxy-identity') + const getActivationKeys = async (): Promise => + browser.eval(` + [...new Set(performance.getEntriesByType('resource') + .map((entry) => entry.name.match(/lazy-compilation-([0-9a-f]{16})/)?.[1]) + .filter(Boolean))] + `) + const initialManifests = await getActivationKeys() + + await browser.elementByCss('#load-extensionless').click() + await retry(async () => { + expect(await browser.elementByCss('#load-extensionless').text()).toBe( + 'proxy identity target' + ) + }) + const manifestsAfterFirst = await getActivationKeys() + expect( + manifestsAfterFirst.filter( + (pathname) => !initialManifests.includes(pathname) + ) + ).toHaveLength(1) + await browser.elementByCss('#load-explicit-extension').click() + await retry(async () => { + expect( + await browser.elementByCss('#load-explicit-extension').text() + ).toBe('proxy identity target') + }) + const manifestsAfterSecond = await getActivationKeys() + expect( + manifestsAfterSecond.filter( + (pathname) => !manifestsAfterFirst.includes(pathname) + ) + ).toHaveLength(0) + }) + + it('waits for top-level await in an activated target', async () => { + const browser = await next.browser('/top-level-await') + + expect(await browser.elementByCss('#load-top-level-await').text()).toBe( + 'top-level await idle' + ) + await browser.elementByCss('#load-top-level-await').click() + await retry(async () => { + expect(await browser.elementByCss('#load-top-level-await').text()).toBe( + 'top-level await target' + ) + }) + }) + + it('supports direct dynamic CSS imports', async () => { + const cssPath = path.join('app', 'direct.css') + const originalCss = await next.readFile(cssPath) + + try { + const browser = await next.browser('/direct-css') + await browser.elementByCss('#load-direct-css').click() + await retry(async () => { + expect(await browser.elementByCss('#direct-css-result').text()).toBe( + 'rgb(12, 34, 56)' + ) + }) + expect( + await assetsContaining('direct-css-marker-f6a1') + ).not.toHaveLength(0) + + await browser.elementByCss('#load-direct-css-module').click() + await retry(async () => { + expect( + await browser.eval( + `getComputedStyle(document.querySelector('#direct-css-module-result')).color` + ) + ).toBe('rgb(70, 80, 90)') + }) + + const timeOrigin = await browser.eval('performance.timeOrigin') + await next.patchFile( + cssPath, + originalCss.replace('rgb(12, 34, 56)', 'rgb(65, 43, 21)') + ) + await retry(async () => { + expect( + await browser.eval( + `getComputedStyle(document.querySelector('#direct-css-result')).color` + ) + ).toBe('rgb(65, 43, 21)') + }) + expect(await browser.eval('performance.timeOrigin')).toBe(timeOrigin) + } finally { + await next.patchFile(cssPath, originalCss) + } + }) + } +) diff --git a/test/development/app-dir/lazy-dynamic-imports/next.config.js b/test/development/app-dir/lazy-dynamic-imports/next.config.js new file mode 100644 index 000000000000..86280a319ddd --- /dev/null +++ b/test/development/app-dir/lazy-dynamic-imports/next.config.js @@ -0,0 +1,10 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + turbopackLazyDynamicImports: true, + }, +} + +module.exports = nextConfig diff --git a/turbopack/crates/turbopack-browser/src/chunking_context.rs b/turbopack/crates/turbopack-browser/src/chunking_context.rs index b13aada1aa7f..811c9bb8adae 100644 --- a/turbopack/crates/turbopack-browser/src/chunking_context.rs +++ b/turbopack/crates/turbopack-browser/src/chunking_context.rs @@ -10,11 +10,11 @@ use turbo_tasks_hash::HashAlgorithm; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ - AssetSuffix, Chunk, ChunkGroupResult, ChunkItem, ChunkLoadRetry, ChunkType, - ChunkableModule, ChunkingConfig, ChunkingConfigs, ChunkingContext, ContentHashing, - CrossOrigin, EntryChunkGroupResult, EvaluatableAsset, EvaluatableAssets, MinifyType, - SourceMapSourceType, SourceMapsType, UnusedReferences, UrlBehavior, - WorkerConfigurationOptions, + AssetSuffix, Chunk, ChunkGroupResult, ChunkItem, ChunkItemOrBatchWithAsyncModuleInfo, + ChunkItemWithAsyncModuleInfo, ChunkLoadRetry, ChunkType, ChunkableModule, ChunkingConfig, + ChunkingConfigs, ChunkingContext, ContentHashing, CrossOrigin, EntryChunkGroupResult, + EvaluatableAsset, EvaluatableAssets, HmrChunkListSource, MinifyType, SourceMapSourceType, + SourceMapsType, UnusedReferences, UrlBehavior, WorkerConfigurationOptions, availability_info::AvailabilityInfo, chunk_group::{MakeChunkGroupResult, make_chunk_group}, chunk_id_strategy::ModuleIdStrategy, @@ -32,7 +32,9 @@ use turbopack_core::{ }; use turbopack_ecmascript::{ async_chunk::module::AsyncLoaderModule, - chunk::{EcmascriptChunk, EcmascriptChunkContent, EcmascriptChunkType}, + chunk::{ + EcmascriptChunk, EcmascriptChunkContent, EcmascriptChunkPlaceable, EcmascriptChunkType, + }, manifest::{chunk_asset::ManifestAsyncModule, loader_module::ManifestLoaderModule}, }; use turbopack_ecmascript_runtime::RuntimeType; @@ -1075,6 +1077,7 @@ impl ChunkingContext for BrowserChunkingContext { self: Vc, ident: Vc, chunks: Vc, + source: HmrChunkListSource, ) -> Result> { let this = self.await?; if !this.enable_hot_module_replacement { @@ -1088,7 +1091,10 @@ impl ChunkingContext for BrowserChunkingContext { ident, EvaluatableAssets::empty(), chunks, - EcmascriptDevChunkListSource::Entry, + match source { + HmrChunkListSource::Entry => EcmascriptDevChunkListSource::Entry, + HmrChunkListSource::Dynamic => EcmascriptDevChunkListSource::Dynamic, + }, ) .to_resolved() .await?, @@ -1221,7 +1227,14 @@ impl ChunkingContext for BrowserChunkingContext { .emit(); return Ok(module.as_chunk_item(module_graph, *chunking_context)); } - Ok(if self.await?.manifest_chunks { + let use_manifest = self.await?.manifest_chunks + // This guard is in place so that only javascript goes + // this path for lazy loading dynamic imports not things like css. + && ResolvedVc::try_downcast::>( + module.to_resolved().await?, + ) + .is_some(); + Ok(if use_manifest { let manifest_asset = ManifestAsyncModule::new( module, module_graph, @@ -1236,12 +1249,49 @@ impl ChunkingContext for BrowserChunkingContext { }) } + #[turbo_tasks::function] + async fn standalone_chunk( + self: Vc, + chunk_item: ResolvedVc>, + ) -> Result>> { + let chunk_type = chunk_item + .into_trait_ref() + .await? + .ty() + .to_resolved() + .await?; + let chunk = chunk_type + .chunk( + Vc::upcast(self), + vec![ChunkItemOrBatchWithAsyncModuleInfo::ChunkItem( + ChunkItemWithAsyncModuleInfo { + chunk_item, + chunk_type, + module: None, + async_info: None, + }, + )], + Vec::new(), + Vec::new(), + ) + .to_resolved() + .await?; + Ok(*self.generate_chunk(chunk).await?) + } + #[turbo_tasks::function] async fn async_loader_chunk_item_ident( self: Vc, module: Vc>, ) -> Result> { - Ok(if self.await?.manifest_chunks { + let use_manifest = self.await?.manifest_chunks + // This guard is in place so that only javascript goes + // this path for lazy loading dynamic imports not things like css. + && ResolvedVc::try_downcast::>( + module.to_resolved().await?, + ) + .is_some(); + Ok(if use_manifest { ManifestLoaderModule::asset_ident_for(module) } else { AsyncLoaderModule::asset_ident_for(module) diff --git a/turbopack/crates/turbopack-core/src/chunk/chunking_context.rs b/turbopack/crates/turbopack-core/src/chunk/chunking_context.rs index 44965ead4b1d..ef508a037808 100644 --- a/turbopack/crates/turbopack-core/src/chunk/chunking_context.rs +++ b/turbopack/crates/turbopack-core/src/chunk/chunking_context.rs @@ -293,6 +293,21 @@ pub struct ChunkingConfig { #[turbo_tasks::value(transparent)] pub struct ChunkingConfigs(FxHashMap>, ChunkingConfig>); +/// turbopack-browser needs to know the original +/// source of the hmr chunk list to properly map to a +/// EcmascriptDevChunkListSource and provide the correct +/// updates. This maps one to one with that. +/// We could consider lifting EcmascriptDevChunkListSource to +/// core instead if this grows. Or using this type in browser instead. +#[turbo_tasks::task_input] +#[derive( + Eq, PartialEq, Debug, Clone, Copy, Hash, TraceRawVcs, Serialize, Deserialize, Encode, Decode, +)] +pub enum HmrChunkListSource { + Entry, + Dynamic, +} + #[turbo_tasks::value(shared)] #[derive(Debug, Clone, Copy, Hash, Default, Deserialize)] pub enum SourceMapSourceType { @@ -463,6 +478,14 @@ pub trait ChunkingContext { fn async_loader_chunk_item_ident(&self, module: Vc>) -> Vc; + /// Places a synthesized chunk item into a standalone output chunk without module graph + /// traversal. + #[turbo_tasks::function] + fn standalone_chunk( + self: Vc, + chunk_item: ResolvedVc>, + ) -> Vc>; + #[turbo_tasks::function] fn chunk_group( self: Vc, @@ -500,6 +523,7 @@ pub trait ChunkingContext { self: Vc, _ident: Vc, _chunks: Vc, + _source: HmrChunkListSource, ) -> Vc { OutputAssets::empty() } diff --git a/turbopack/crates/turbopack-core/src/chunk/mod.rs b/turbopack/crates/turbopack-core/src/chunk/mod.rs index 4276d109e771..66d334079f85 100644 --- a/turbopack/crates/turbopack-core/src/chunk/mod.rs +++ b/turbopack/crates/turbopack-core/src/chunk/mod.rs @@ -28,8 +28,8 @@ pub use crate::chunk::{ }, chunking_context::{ AssetSuffix, ChunkGroupResult, ChunkGroupType, ChunkingConfig, ChunkingConfigs, - ChunkingContext, ChunkingContextExt, EntryChunkGroupResult, MangleType, MinifyType, - SourceMapSourceType, SourceMapsType, UnusedReferences, UrlBehavior, + ChunkingContext, ChunkingContextExt, EntryChunkGroupResult, HmrChunkListSource, MangleType, + MinifyType, SourceMapSourceType, SourceMapsType, UnusedReferences, UrlBehavior, WorkerConfigurationOptions, }, data::{ChunkData, ChunkDataOption, ChunksData}, diff --git a/turbopack/crates/turbopack-core/src/issue/mod.rs b/turbopack/crates/turbopack-core/src/issue/mod.rs index 5ed42693725d..e47b8ecb27b4 100644 --- a/turbopack/crates/turbopack-core/src/issue/mod.rs +++ b/turbopack/crates/turbopack-core/src/issue/mod.rs @@ -454,6 +454,14 @@ impl IssueSource { } } + /// Drops the precise range while preserving the source file. + pub fn without_range(self) -> Self { + IssueSource { + range: None, + ..self + } + } + pub fn from_line_col( source: ResolvedVc>, start: SourcePos, diff --git a/turbopack/crates/turbopack-core/src/reference_type.rs b/turbopack/crates/turbopack-core/src/reference_type.rs index 0ae796b6b5ff..386cf0588a16 100644 --- a/turbopack/crates/turbopack-core/src/reference_type.rs +++ b/turbopack/crates/turbopack-core/src/reference_type.rs @@ -61,6 +61,7 @@ pub enum EcmaScriptModulesReferenceSubType { module_type: Option, }, DynamicImport, + LazyDynamicImport, Emit, Custom(u8), #[default] @@ -329,6 +330,18 @@ pub enum ReferenceTypeCondition { impl ReferenceTypeCondition { pub fn includes(&self, other: &ReferenceType) -> bool { + if matches!( + self, + ReferenceTypeCondition::EcmaScriptModules(Some( + EcmaScriptModulesReferenceSubType::DynamicImport + )) + ) && matches!( + other, + ReferenceType::EcmaScriptModules(EcmaScriptModulesReferenceSubType::LazyDynamicImport) + ) { + return true; + } + if matches!( self, ReferenceTypeCondition::Css(Some(CssReferenceSubType::AtImport(_))) @@ -383,3 +396,20 @@ impl ReferenceTypeCondition { false } } + +#[cfg(test)] +mod tests { + use super::{EcmaScriptModulesReferenceSubType, ReferenceType, ReferenceTypeCondition}; + + #[test] + fn lazy_dynamic_import_matches_dynamic_import_condition() { + assert!( + ReferenceTypeCondition::EcmaScriptModules(Some( + EcmaScriptModulesReferenceSubType::DynamicImport + )) + .includes(&ReferenceType::EcmaScriptModules( + EcmaScriptModulesReferenceSubType::LazyDynamicImport + )) + ); + } +} diff --git a/turbopack/crates/turbopack-ecmascript/src/async_chunk/mod.rs b/turbopack/crates/turbopack-ecmascript/src/async_chunk/mod.rs index cc57a848e889..7d45bf167410 100644 --- a/turbopack/crates/turbopack-ecmascript/src/async_chunk/mod.rs +++ b/turbopack/crates/turbopack-ecmascript/src/async_chunk/mod.rs @@ -1 +1,2 @@ pub mod module; +pub mod proxy; diff --git a/turbopack/crates/turbopack-ecmascript/src/async_chunk/proxy.rs b/turbopack/crates/turbopack-ecmascript/src/async_chunk/proxy.rs new file mode 100644 index 000000000000..4458eae82f50 --- /dev/null +++ b/turbopack/crates/turbopack-ecmascript/src/async_chunk/proxy.rs @@ -0,0 +1,354 @@ +use anyhow::Result; +use indoc::formatdoc; +use turbo_rcstr::{RcStr, rcstr}; +use turbo_tasks::{ResolvedVc, State, ValueToString, Vc}; +use turbo_tasks_hash::hash_xxh3_hash64; +use turbopack_core::{ + chunk::{AsyncModuleInfo, ChunkableModule, ChunkingContext, ChunkingType}, + ident::AssetIdent, + module::{Module, ModuleSideEffects}, + module_graph::ModuleGraph, + reference::{ModuleReference, ModuleReferences}, + resolve::{BindingUsage, ExportUsage, ImportUsage, ModuleResolveResult}, +}; + +use crate::{ + EcmascriptModuleAsset, + chunk::{ + EcmascriptChunkItemContent, EcmascriptChunkPlaceable, EcmascriptExports, + ecmascript_chunk_item, + }, + module_canonicalization::{EcmascriptModuleCanonicalization, canonicalize_ecmascript_module}, + runtime_functions::{TURBOPACK_ASYNC_LOADER, TURBOPACK_EXPORT_NAMESPACE}, + utils::{StringifyJs, StringifyModuleId}, +}; + +#[turbo_tasks::value(serialization = "skip", evict = "never")] +pub struct LazyCompilationState { + active: State, +} + +impl LazyCompilationState { + pub fn is_active(&self) -> bool { + *self.active.get() + } + + pub fn activate(&self) { + self.active.set(true); + } +} + +/// Marks the file name of a lazily compiled dynamic import's manifest chunk, followed by +/// [`ACTIVATION_KEY_HEX_LEN`] hex digits. +const ACTIVATION_KEY_MARKER: &str = "lazy-compilation-"; +const ACTIVATION_KEY_HEX_LEN: usize = 16; + +/// The key that activates the lazily compiled dynamic import represented by `proxy_ident`. +/// +/// The key is embedded in the file name of the proxy's manifest chunk (see +/// `ManifestAsyncModule::ident`), so a request for that chunk names the import to activate. +pub fn activation_key(proxy_ident: &str) -> RcStr { + format!( + "{ACTIVATION_KEY_MARKER}{:0width$x}", + hash_xxh3_hash64(proxy_ident), + width = ACTIVATION_KEY_HEX_LEN + ) + .into() +} + +/// Recovers the [`activation_key`] from the path of a requested chunk, if it is the manifest chunk +/// of a lazily compiled dynamic import. +pub fn activation_key_from_chunk_path(path: &str) -> Option { + let start = path.rfind(ACTIVATION_KEY_MARKER)?; + let key = path.get(start..start + ACTIVATION_KEY_MARKER.len() + ACTIVATION_KEY_HEX_LEN)?; + key[ACTIVATION_KEY_MARKER.len()..] + .bytes() + .all(|byte| matches!(byte, b'0'..=b'9' | b'a'..=b'f')) + .then(|| key.into()) +} + +/// The activation state of the lazily compiled dynamic import identified by `key`. +/// +/// Memoized per key, so every proxy and every reader of a given key observe the same bit. +#[turbo_tasks::function] +pub fn lazy_compilation_state(key: RcStr) -> Vc { + let _ = key; + LazyCompilationState { + active: State::new(false), + } + .cell() +} + +#[turbo_tasks::value] +#[derive(ValueToString)] +#[value_to_string("lazy compilation reference")] +enum LazyCompilationReference { + Deferred { + module: ResolvedVc, + canonicalization: EcmascriptModuleCanonicalization, + }, + Direct(ResolvedVc>), +} + +impl LazyCompilationReference { + async fn referenced_module(&self) -> Result>> { + match self { + Self::Deferred { + module, + canonicalization, + } => { + canonicalize_ecmascript_module(**module, canonicalization.clone()) + .to_resolved() + .await + } + Self::Direct(module) => Ok(*module), + } + } +} + +#[turbo_tasks::value_impl] +impl LazyCompilationReference { + #[turbo_tasks::function] + fn deferred( + module: ResolvedVc, + canonicalization: EcmascriptModuleCanonicalization, + ) -> Vc { + Self::cell(Self::Deferred { + module, + canonicalization, + }) + } + + #[turbo_tasks::function] + fn direct(module: ResolvedVc>) -> Vc { + Self::cell(Self::Direct(module)) + } + + #[turbo_tasks::function] + async fn proxy_ident(&self) -> Result> { + let ident = match self { + Self::Deferred { + module, + canonicalization, + } => module + .ident() + .owned() + .await? + .with_modifier(format!("lazy compilation proxy {canonicalization:?}").into()), + Self::Direct(module) => module + .ident() + .owned() + .await? + .with_modifier(rcstr!("lazy compilation proxy")), + }; + Ok(ident.into_vc()) + } +} + +#[turbo_tasks::value_impl] +impl ModuleReference for LazyCompilationReference { + #[turbo_tasks::function] + async fn resolve_reference(&self) -> Result> { + let module = self.referenced_module().await?; + Ok(*ModuleResolveResult::module(ResolvedVc::upcast(module))) + } + + fn chunking_type(&self) -> Option { + Some(ChunkingType::Async) + } + + fn binding_usage(&self) -> BindingUsage { + BindingUsage { + import: ImportUsage::TopLevel, + export: ExportUsage::All, + } + } +} + +#[turbo_tasks::value] +pub struct LazyCompilationProxyModule { + target: ResolvedVc, + ident: ResolvedVc, + /// The key that requesting this proxy's manifest chunk activates. + pub(crate) key: RcStr, +} + +#[turbo_tasks::value_impl] +impl LazyCompilationProxyModule { + #[turbo_tasks::function] + pub async fn new_deferred( + module: ResolvedVc, + canonicalization: EcmascriptModuleCanonicalization, + ) -> Result> { + let target = LazyCompilationReference::deferred(*module, canonicalization) + .to_resolved() + .await?; + Ok(Self::new(*target)) + } + + #[turbo_tasks::function] + pub async fn new_direct( + module: ResolvedVc>, + ) -> Result> { + let target = LazyCompilationReference::direct(*module) + .to_resolved() + .await?; + Ok(Self::new(*target)) + } + + #[turbo_tasks::function] + async fn new(target: ResolvedVc) -> Result> { + let ident = target.proxy_ident().to_resolved().await?; + let key = activation_key(&ident.to_string().await?); + Ok(Self::cell(Self { target, ident, key })) + } +} + +#[turbo_tasks::value_impl] +impl Module for LazyCompilationProxyModule { + #[turbo_tasks::function] + fn ident(&self) -> Vc { + *self.ident + } + + #[turbo_tasks::function] + fn source(&self) -> Vc { + Vc::cell(None) + } + + #[turbo_tasks::function] + async fn references(&self) -> Result> { + if !lazy_compilation_state(self.key.clone()).await?.is_active() { + return Ok(ModuleReferences::empty()); + } + + Ok(Vc::cell(vec![ResolvedVc::upcast(self.target)])) + } + + #[turbo_tasks::function] + fn side_effects(self: Vc) -> Vc { + ModuleSideEffects::SideEffectful.cell() + } +} + +#[turbo_tasks::value_impl] +impl ChunkableModule for LazyCompilationProxyModule { + #[turbo_tasks::function] + fn as_chunk_item( + self: ResolvedVc, + module_graph: ResolvedVc, + chunking_context: ResolvedVc>, + ) -> Vc> { + ecmascript_chunk_item(ResolvedVc::upcast(self), module_graph, chunking_context) + } +} + +#[turbo_tasks::value_impl] +impl EcmascriptChunkPlaceable for LazyCompilationProxyModule { + #[turbo_tasks::function] + fn get_exports(&self) -> Vc { + EcmascriptExports::DynamicNamespace.cell() + } + + #[turbo_tasks::function] + async fn chunk_item_content( + self: Vc, + chunking_context: Vc>, + _module_graph: Vc, + _async_module_info: Option>, + estimated: bool, + ) -> Result> { + let this = self.await?; + if estimated { + return Ok(EcmascriptChunkItemContent::default().cell()); + } + + let state = lazy_compilation_state(this.key.clone()).await?; + let inner_code = if state.is_active() { + let target = this.target.await?.referenced_module().await?; + let loader_ident = chunking_context.async_loader_chunk_item_ident(Vc::upcast(*target)); + let loader_id = chunking_context + .chunk_item_id_strategy() + .await? + .get_id_from_ident(loader_ident) + .await?; + formatdoc! { + r#" + {TURBOPACK_EXPORT_NAMESPACE}({TURBOPACK_ASYNC_LOADER}({loader_id})); + "#, + loader_id = StringifyModuleId(&loader_id), + } + } else { + // The manifest chunk that lists this chunk is only served once the proxy is active, + // so this is only reachable through a stale cache. + formatdoc! { + r#" + {TURBOPACK_EXPORT_NAMESPACE}(Promise.reject(new Error({message}))); + "#, + message = StringifyJs(&format!( + "Lazily compiled dynamic import of {} was not activated", + this.ident.to_string().await? + )), + } + }; + + Ok(EcmascriptChunkItemContent { + inner_code: inner_code.into(), + ..Default::default() + } + .cell()) + } + + #[turbo_tasks::function] + async fn chunk_item_content_ident( + self: Vc, + _chunking_context: Vc>, + _module_graph: Vc, + ) -> Result> { + let this = self.await?; + let state = lazy_compilation_state(this.key.clone()).await?; + Ok(self + .ident() + .owned() + .await? + .with_modifier(if state.is_active() { + rcstr!("active") + } else { + rcstr!("inactive") + }) + .into_vc()) + } +} + +#[cfg(test)] +mod tests { + use super::{activation_key, activation_key_from_chunk_path}; + + #[test] + fn recovers_the_key_from_a_chunk_path() { + let key = activation_key("[project]/app/target.tsx [app-client] (ecmascript)"); + // How the key survives `AssetIdent::output_name`: `/` and `.` become `_`, and the ident + // hash is appended after it. + let path = format!("static/chunks/app_target_tsx_{key}_1a2b3c4.js"); + assert_eq!( + activation_key_from_chunk_path(&path).as_deref(), + Some(&*key) + ); + } + + #[test] + fn ignores_paths_without_a_key() { + assert_eq!( + activation_key_from_chunk_path("static/chunks/app_page_1a2b3c4.js"), + None + ); + assert_eq!( + activation_key_from_chunk_path("static/chunks/a_lazy-compilation-0123.js"), + None + ); + assert_eq!( + activation_key_from_chunk_path("static/chunks/a_lazy-compilation-zzzzzzzzzzzzzzzz.js"), + None + ); + } +} diff --git a/turbopack/crates/turbopack-ecmascript/src/lib.rs b/turbopack/crates/turbopack-ecmascript/src/lib.rs index 748c46fa0dfa..a84d5abc79bf 100644 --- a/turbopack/crates/turbopack-ecmascript/src/lib.rs +++ b/turbopack/crates/turbopack-ecmascript/src/lib.rs @@ -24,6 +24,7 @@ pub mod magic_identifier; pub mod manifest; mod merged_module; pub mod minify; +pub mod module_canonicalization; pub mod module_fragments; pub mod parse; mod path_visitor; @@ -250,6 +251,8 @@ pub struct EcmascriptOptions { pub cjs_scope_hoisting: bool, /// Whether to enable cross-module constant inlining. Defaults to false. pub cross_module_constants: bool, + /// Whether dynamic import targets are compiled after their runtime proxy is activated. + pub lazy_compilation: bool, } #[turbo_tasks::value(task_input)] diff --git a/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs b/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs index 2925637ed5f4..634dd4576085 100644 --- a/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs +++ b/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs @@ -5,17 +5,18 @@ use turbo_tasks::{ResolvedVc, TryJoinIterExt, Vc}; use turbopack_core::{ chunk::{ AsyncModuleInfo, ChunkData, ChunkableModule, ChunkingContext, ChunkingContextExt, - ChunksData, availability_info::AvailabilityInfo, + ChunksData, HmrChunkListSource, availability_info::AvailabilityInfo, }, ident::AssetIdent, module::{Module, ModuleSideEffects}, module_graph::{ ModuleGraph, chunk_group_info::ChunkGroup, module_batch::ChunkableModuleOrBatch, }, - output::OutputAssetsWithReferenced, + output::{OutputAssets, OutputAssetsWithReferenced}, }; use crate::{ + async_chunk::proxy::LazyCompilationProxyModule, chunk::{ EcmascriptChunkItemContent, EcmascriptChunkPlaceable, EcmascriptExports, data::EcmascriptChunkData, ecmascript_chunk_item, @@ -94,11 +95,29 @@ impl ManifestAsyncModule { .cell()); } } - Ok(this.chunking_context.chunk_group_assets( + let chunk_item = self.as_chunk_item(*this.module_graph, *this.chunking_context); + let chunk = this + .chunking_context + .standalone_chunk(chunk_item) + .to_resolved() + .await?; + Ok(OutputAssetsWithReferenced { + assets: ResolvedVc::cell(vec![chunk]), + referenced_assets: ResolvedVc::cell(vec![]), + references: ResolvedVc::cell(vec![]), + } + .cell()) + } + + /// Without a chunk list of its own, modules that are only reachable through this dynamic + /// import never receive updates. + #[turbo_tasks::function] + async fn hmr_chunk_list(self: Vc) -> Result> { + let this = self.await?; + Ok(this.chunking_context.hmr_chunk_list( self.ident(), - ChunkGroup::Async(ResolvedVc::upcast(self)), - *this.module_graph, - this.availability_info, + *self.chunk_group().await?.assets, + HmrChunkListSource::Dynamic, )) } @@ -128,7 +147,10 @@ impl ManifestAsyncModule { let this = self.await?; Ok(ChunkData::from_assets( this.chunking_context.output_root().owned().await?, - *self.chunk_group().await?.assets, + self.chunk_group() + .await? + .assets + .concatenate(self.hmr_chunk_list()), )) } } @@ -141,12 +163,22 @@ fn manifest_chunk_reference_description() -> RcStr { impl Module for ManifestAsyncModule { #[turbo_tasks::function] async fn ident(&self) -> Result> { - Ok(self + let ident = self .inner .ident() .owned() .await? - .with_modifier(manifest_chunk_reference_description()) + .with_modifier(manifest_chunk_reference_description()); + // Requesting the manifest chunk of a lazily compiled dynamic import is what activates it, + // so the key has to survive into the file name, and the path is the only part of an ident + // that appears there literally. It must not move to the proxy's own ident, which also + // names chunks that ship with the entrypoint and would activate the import on page load. + let Some(proxy) = ResolvedVc::try_downcast_type::(self.inner) + else { + return Ok(ident.into_vc()); + }; + Ok(ident + .rename_as(&format!("*.{}.js", proxy.await?.key)) .into_vc()) } @@ -225,5 +257,8 @@ impl EcmascriptChunkPlaceable for ManifestAsyncModule { _module_graph: Vc, ) -> Vc { self.chunk_group() + .concatenate(OutputAssetsWithReferenced::from_assets( + self.hmr_chunk_list(), + )) } } diff --git a/turbopack/crates/turbopack-ecmascript/src/manifest/loader_module.rs b/turbopack/crates/turbopack-ecmascript/src/manifest/loader_module.rs index 7332f126b128..3cfe4146c77c 100644 --- a/turbopack/crates/turbopack-ecmascript/src/manifest/loader_module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/manifest/loader_module.rs @@ -145,21 +145,41 @@ impl EcmascriptChunkPlaceable for ManifestLoaderModule { // will perform the actual chunk traversal and generate load statements. let chunks_server_data = &*self.chunks_data().await?.iter().try_join().await?; - // We also need the manifest chunk item's id, which points to a CJS module that - // exports a promise for all of the necessary chunk loads. - let item_id = this - .manifest - .chunk_item_id(*manifest.chunking_context) - .await?; - - // Finally, we need the id of the module that we're actually trying to + // We also need the id of the module that we're actually trying to // dynamically import. let placeable = ResolvedVc::try_downcast::>(manifest.inner) .ok_or_else(|| anyhow!("asset is not placeable in ecmascript chunk"))?; let dynamic_id = placeable.chunk_item_id(*manifest.chunking_context).await?; - // This is the code that will be executed when the dynamic import is reached. + if chunks_server_data.is_empty() { + // No chunks need to be loaded and thus the module is already available, + // so we can just require the module. + writedoc!( + code, + r#" + {TURBOPACK_EXPORT_VALUE}(() => {{ + return Promise.resolve().then(() => {TURBOPACK_REQUIRE}({dynamic_id})); + }}); + "#, + dynamic_id = StringifyModuleId(&dynamic_id), + )?; + + return Ok(EcmascriptChunkItemContent { + inner_code: code.into(), + ..Default::default() + } + .cell()); + } + + // The manifest chunk item's id points to a CJS module that exports the + // chunks required by the dynamic import. + let item_id = this + .manifest + .chunk_item_id(*manifest.chunking_context) + .await?; + + // This code will be executed when the dynamic import is reached. // It will load the manifest chunk, which will load all the chunks needed by // the dynamic import, and finally we'll be able to import the module we're // trying to dynamically import. diff --git a/turbopack/crates/turbopack-ecmascript/src/module_canonicalization.rs b/turbopack/crates/turbopack-ecmascript/src/module_canonicalization.rs new file mode 100644 index 000000000000..3279cf8f2e8a --- /dev/null +++ b/turbopack/crates/turbopack-ecmascript/src/module_canonicalization.rs @@ -0,0 +1,95 @@ +use anyhow::{Result, bail}; +use bincode::{Decode, Encode}; +use turbo_tasks::{ResolvedVc, Vc, trace::TraceRawVcs}; +use turbopack_core::resolve::ModulePart; + +use crate::{ + EcmascriptModuleAsset, + chunk::EcmascriptChunkPlaceable, + module_fragments::part::module::EcmascriptModulePartAsset, + references::{FollowExportsResult, follow_reexports}, + rename::module::EcmascriptModuleRenameModule, + side_effect_optimization::{ + facade::module::EcmascriptModuleFacadeModule, locals::module::EcmascriptModuleLocalsModule, + }, +}; + +#[turbo_tasks::task_input] +#[derive(Clone, Debug, Hash, PartialEq, Eq, TraceRawVcs, Encode, Decode)] +pub enum EcmascriptModuleCanonicalization { + None, + ModuleFragments(ModulePart), + FollowReexports(Option), +} + +#[turbo_tasks::function] +pub async fn canonicalize_ecmascript_module( + module: ResolvedVc, + canonicalization: EcmascriptModuleCanonicalization, +) -> Result>> { + Ok(match canonicalization { + EcmascriptModuleCanonicalization::None => Vc::upcast(*module), + EcmascriptModuleCanonicalization::ModuleFragments(part) => { + EcmascriptModulePartAsset::select_part(*module, part) + } + EcmascriptModuleCanonicalization::FollowReexports(part) => { + if *module.get_exports().split_locals_and_reexports().await? { + if let Some(part) = part { + match part { + ModulePart::Evaluation => { + Vc::upcast(EcmascriptModuleLocalsModule::new(*module)) + } + ModulePart::Export(_) => { + apply_reexport_tree_shaking( + Vc::upcast( + *EcmascriptModuleFacadeModule::new(Vc::upcast(*module)) + .to_resolved() + .await?, + ), + part, + ) + .await? + } + _ => bail!( + "Invalid module part \"{}\" for reexports only tree shaking mode", + part + ), + } + } else { + Vc::upcast(EcmascriptModuleFacadeModule::new(Vc::upcast(*module))) + } + } else { + Vc::upcast(*module) + } + } + }) +} + +async fn apply_reexport_tree_shaking( + module: Vc>, + part: ModulePart, +) -> Result>> { + if let ModulePart::Export(export) = &part { + let FollowExportsResult { + module: final_module, + export_name: new_export, + .. + } = &*follow_reexports(module, export.clone(), true).await?; + return Ok(if let Some(new_export) = new_export { + if *new_export == *export { + **final_module + } else { + Vc::upcast(EcmascriptModuleRenameModule::new( + **final_module, + ModulePart::renamed_export(new_export.clone(), export.clone()), + )) + } + } else { + Vc::upcast(EcmascriptModuleRenameModule::new( + **final_module, + ModulePart::renamed_namespace(export.clone()), + )) + }); + } + Ok(module) +} diff --git a/turbopack/crates/turbopack-ecmascript/src/references/esm/dynamic.rs b/turbopack/crates/turbopack-ecmascript/src/references/esm/dynamic.rs index cac798a27299..6bea35ac035e 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/esm/dynamic.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/esm/dynamic.rs @@ -24,6 +24,8 @@ use turbopack_resolve::ecmascript::esm_resolve; use crate::{ analyzer::imports::ImportAnnotations, + async_chunk::proxy::LazyCompilationProxyModule, + chunk::EcmascriptChunkPlaceable, code_gen::{CodeGen, CodeGeneration, IntoCodeGenReference}, create_visitor, references::{ @@ -46,6 +48,8 @@ pub struct EsmAsyncAssetReference { /// callback destructuring, or webpackExports/turbopackExports comments. pub export_usage: ExportUsage, pub resolve_override: Option>>, + /// Whether the target is compiled only after its runtime proxy is activated. + pub lazy_compilation: bool, } impl EsmAsyncAssetReference { @@ -59,6 +63,7 @@ impl EsmAsyncAssetReference { import_externals: bool, export_usage: ExportUsage, resolve_override: Option>>, + lazy_compilation: bool, ) -> Result { // Apply any annotation-driven transition eagerly so the stored origin is final and the // `annotations` don't need to be retained on the reference. @@ -79,6 +84,7 @@ impl EsmAsyncAssetReference { import_externals, export_usage, resolve_override, + lazy_compilation, }) } } @@ -87,14 +93,27 @@ impl EsmAsyncAssetReference { impl ModuleReference for EsmAsyncAssetReference { #[turbo_tasks::function] async fn resolve_reference(&self) -> Result> { - if let Some(resolved) = &self.resolve_override { - return Ok(*ModuleResolveResult::module(*resolved)); + if let Some(resolved) = self.resolve_override { + if self.lazy_compilation + && let Some(module) = + ResolvedVc::try_sidecast::>(resolved) + { + let proxy = LazyCompilationProxyModule::new_direct(*module) + .to_resolved() + .await?; + return Ok(*ModuleResolveResult::module(ResolvedVc::upcast(proxy))); + } + return Ok(*ModuleResolveResult::module(resolved)); } esm_resolve( *self.origin, *self.request, - EcmaScriptModulesReferenceSubType::DynamicImport, + if self.lazy_compilation { + EcmaScriptModulesReferenceSubType::LazyDynamicImport + } else { + EcmaScriptModulesReferenceSubType::DynamicImport + }, self.error_mode, Some(self.issue_source), ) diff --git a/turbopack/crates/turbopack-ecmascript/src/references/mod.rs b/turbopack/crates/turbopack-ecmascript/src/references/mod.rs index 426b97a6618f..1e5eeeb3f27d 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/mod.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/mod.rs @@ -514,6 +514,7 @@ struct AnalysisState<'a> { module_fragments_enabled: bool, cjs_tree_shaking: bool, cross_module_constants: bool, + lazy_compilation: bool, import_externals: bool, ignore_dynamic_requests: bool, url_rewrite_behavior: Option, @@ -882,6 +883,7 @@ async fn analyze_ecmascript_module_internal( module_fragments_enabled: options.module_fragments_enabled, cjs_tree_shaking: options.cjs_tree_shaking, cross_module_constants: options.cross_module_constants, + lazy_compilation: options.lazy_compilation, import_externals: options.import_externals, ignore_dynamic_requests: options.ignore_dynamic_requests, url_rewrite_behavior: options.url_rewrite_behavior, @@ -1791,6 +1793,7 @@ async fn handle_dynamic_import<'a>( origin, source, ignore_dynamic_requests, + lazy_compilation, .. } = state; @@ -1823,6 +1826,7 @@ async fn handle_dynamic_import<'a>( state.import_externals, export_usage, link_context, + lazy_compilation, ) .await } @@ -1841,6 +1845,7 @@ async fn handle_dynamic_import_with_linked_args( import_externals: bool, export_usage: ExportUsage, link_context: ValueLinkContext, + lazy_compilation: bool, ) -> Result<()> { if linked_args.len() == 1 || linked_args.len() == 2 { let pat = js_value_to_pattern(&linked_args[0]); @@ -1901,6 +1906,7 @@ async fn handle_dynamic_import_with_linked_args( import_externals, export_usage, resolve_override, + lazy_compilation, ) .await?, ast_path.to_vec().into(), @@ -2230,6 +2236,7 @@ where state.import_externals, export_usage, link_context, + state.lazy_compilation, ) .await?; } diff --git a/turbopack/crates/turbopack-nodejs/src/chunking_context.rs b/turbopack/crates/turbopack-nodejs/src/chunking_context.rs index 446afdf4f202..1a6551b2f240 100644 --- a/turbopack/crates/turbopack-nodejs/src/chunking_context.rs +++ b/turbopack/crates/turbopack-nodejs/src/chunking_context.rs @@ -9,10 +9,11 @@ use turbo_tasks_hash::HashAlgorithm; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ - AssetSuffix, Chunk, ChunkGroupResult, ChunkItem, ChunkType, ChunkableModule, - ChunkingConfig, ChunkingConfigs, ChunkingContext, ContentHashing, EntryChunkGroupResult, - EvaluatableAsset, MinifyType, SourceMapSourceType, SourceMapsType, UnusedReferences, - UrlBehavior, WorkerConfigurationOptions, + AssetSuffix, Chunk, ChunkGroupResult, ChunkItem, ChunkItemOrBatchWithAsyncModuleInfo, + ChunkItemWithAsyncModuleInfo, ChunkType, ChunkableModule, ChunkingConfig, ChunkingConfigs, + ChunkingContext, ContentHashing, EntryChunkGroupResult, EvaluatableAsset, MinifyType, + SourceMapSourceType, SourceMapsType, UnusedReferences, UrlBehavior, + WorkerConfigurationOptions, availability_info::AvailabilityInfo, chunk_group::{MakeChunkGroupResult, make_chunk_group}, chunk_id_strategy::ModuleIdStrategy, @@ -717,7 +718,14 @@ impl ChunkingContext for NodeJsChunkingContext { Vc::upcast::>(self) .to_resolved() .await?; - Ok(if self.await?.manifest_chunks { + let use_manifest = self.await?.manifest_chunks + // This guard is in place so that only javascript goes + // this path for lazy loading dynamic imports not things like css. + && ResolvedVc::try_downcast::>( + module.to_resolved().await?, + ) + .is_some(); + Ok(if use_manifest { let manifest_asset = ManifestAsyncModule::new( module, module_graph, @@ -734,12 +742,49 @@ impl ChunkingContext for NodeJsChunkingContext { }) } + #[turbo_tasks::function] + async fn standalone_chunk( + self: Vc, + chunk_item: ResolvedVc>, + ) -> Result>> { + let chunk_type = chunk_item + .into_trait_ref() + .await? + .ty() + .to_resolved() + .await?; + let chunk = chunk_type + .chunk( + Vc::upcast(self), + vec![ChunkItemOrBatchWithAsyncModuleInfo::ChunkItem( + ChunkItemWithAsyncModuleInfo { + chunk_item, + chunk_type, + module: None, + async_info: None, + }, + )], + Vec::new(), + Vec::new(), + ) + .to_resolved() + .await?; + Ok(*self.generate_chunk(chunk).await?) + } + #[turbo_tasks::function] async fn async_loader_chunk_item_ident( self: Vc, module: Vc>, ) -> Result> { - Ok(if self.await?.manifest_chunks { + let use_manifest = self.await?.manifest_chunks + // This guard is in place so that only javascript goes + // this path for lazy loading dynamic imports not things like css. + && ResolvedVc::try_downcast::>( + module.to_resolved().await?, + ) + .is_some(); + Ok(if use_manifest { ManifestLoaderModule::asset_ident_for(module) } else { AsyncLoaderModule::asset_ident_for(module) diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/tree-shaking/dynamic-import/input/index.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/tree-shaking/dynamic-import/input/index.js index 4cebe22767fb..447fdd8c45b1 100644 --- a/turbopack/crates/turbopack-tests/tests/execution/turbopack/tree-shaking/dynamic-import/input/index.js +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/tree-shaking/dynamic-import/input/index.js @@ -1,3 +1,10 @@ +import { identity as staticIdentity } from './modules/identity' + +it('should share module identity between static and dynamic imports', async () => { + const { identity: dynamicIdentity } = await import('./modules/identity') + expect(dynamicIdentity).toBe(staticIdentity) +}) + it('should mark all exports as used with non-destructured dynamic import', async () => { const lib = await import('./modules/all') expect(lib.cat).toBe('cat') diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/tree-shaking/dynamic-import/input/modules/identity.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/tree-shaking/dynamic-import/input/modules/identity.js new file mode 100644 index 000000000000..01ba6b92d144 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/tree-shaking/dynamic-import/input/modules/identity.js @@ -0,0 +1 @@ +export const identity = {} diff --git a/turbopack/crates/turbopack/src/lib.rs b/turbopack/crates/turbopack/src/lib.rs index ff30cc543eb5..ebd49c8783de 100644 --- a/turbopack/crates/turbopack/src/lib.rs +++ b/turbopack/crates/turbopack/src/lib.rs @@ -50,16 +50,10 @@ use turbopack_css::{CssModule, EcmascriptCssModule}; use turbopack_ecmascript::{ AnalyzeMode, EcmascriptInputTransforms, EcmascriptModuleAsset, EcmascriptModuleAssetType, EcmascriptOptions, - chunk::EcmascriptChunkPlaceable, - module_fragments::part::module::EcmascriptModulePartAsset, - references::{ - FollowExportsResult, - external_module::{CachedExternalModule, CachedExternalTracingMode, CachedExternalType}, - follow_reexports, - }, - rename::module::EcmascriptModuleRenameModule, - side_effect_optimization::{ - facade::module::EcmascriptModuleFacadeModule, locals::module::EcmascriptModuleLocalsModule, + async_chunk::proxy::LazyCompilationProxyModule, + module_canonicalization::{EcmascriptModuleCanonicalization, canonicalize_ecmascript_module}, + references::external_module::{ + CachedExternalModule, CachedExternalTracingMode, CachedExternalType, }, }; use turbopack_node::transforms::webpack::{WebpackLoaderItem, WebpackLoaderItems, WebpackLoaders}; @@ -100,6 +94,10 @@ async fn apply_module_type( _ => None, }; let is_evaluation = matches!(&part, Some(ModulePart::Evaluation)); + let is_lazy_dynamic_import = matches!( + &reference_type, + ReferenceType::EcmaScriptModules(EcmaScriptModulesReferenceSubType::LazyDynamicImport) + ); let module_type = &*module_type.await?; let module = match module_type { @@ -200,46 +198,29 @@ async fn apply_module_type( } } - if module_fragments_enabled { - Vc::upcast(EcmascriptModulePartAsset::select_part( - *module, - part.cloned().unwrap_or(ModulePart::facade()), - )) + let canonicalization = if module_fragments_enabled { + EcmascriptModuleCanonicalization::ModuleFragments( + part.cloned().unwrap_or_else(ModulePart::facade), + ) } else if follow_reexports { - if *module.get_exports().split_locals_and_reexports().await? { - if let Some(part) = part { - match part { - ModulePart::Evaluation => { - Vc::upcast(EcmascriptModuleLocalsModule::new(*module)) - } - ModulePart::Export(_) => { - apply_reexport_tree_shaking( - Vc::upcast( - *EcmascriptModuleFacadeModule::new(Vc::upcast(*module)) - .to_resolved() - .await?, - ), - part.clone(), - ) - .await? - } - _ => bail!( - "Invalid module part \"{}\" for reexports only tree shaking \ - mode", - part - ), - } - } else { - Vc::upcast(EcmascriptModuleFacadeModule::new(Vc::upcast(*module))) - } - } else { - Vc::upcast(*module) - } + EcmascriptModuleCanonicalization::FollowReexports(part.cloned()) + } else { + EcmascriptModuleCanonicalization::None + }; + + if is_lazy_dynamic_import { + ResolvedVc::upcast( + LazyCompilationProxyModule::new_deferred(*module, canonicalization) + .to_resolved() + .await?, + ) } else { - Vc::upcast(*module) + ResolvedVc::upcast( + canonicalize_ecmascript_module(*module, canonicalization) + .to_resolved() + .await?, + ) } - .to_resolved() - .await? } } ModuleType::Raw => ResolvedVc::upcast(RawModule::new(*source).to_resolved().await?), @@ -307,36 +288,6 @@ async fn apply_module_type( Ok(ProcessResult::Module(module).cell()) } -async fn apply_reexport_tree_shaking( - module: Vc>, - part: ModulePart, -) -> Result>> { - if let ModulePart::Export(export) = &part { - let FollowExportsResult { - module: final_module, - export_name: new_export, - .. - } = &*follow_reexports(module, export.clone(), true).await?; - let module = if let Some(new_export) = new_export { - if *new_export == *export { - Vc::upcast(**final_module) - } else { - Vc::upcast(EcmascriptModuleRenameModule::new( - **final_module, - ModulePart::renamed_export(new_export.clone(), export.clone()), - )) - } - } else { - Vc::upcast(EcmascriptModuleRenameModule::new( - **final_module, - ModulePart::renamed_namespace(export.clone()), - )) - }; - return Ok(module); - } - Ok(Vc::upcast(module)) -} - #[turbo_tasks::value] #[derive(Debug)] pub struct ModuleAssetContext { diff --git a/turbopack/crates/turbopack/src/module_options/mod.rs b/turbopack/crates/turbopack/src/module_options/mod.rs index cf925a13e34a..96bb68cb70c1 100644 --- a/turbopack/crates/turbopack/src/module_options/mod.rs +++ b/turbopack/crates/turbopack/src/module_options/mod.rs @@ -250,6 +250,7 @@ impl ModuleOptions { mangle_export_names, cjs_scope_hoisting, cross_module_constants, + lazy_compilation, ref preset_env_config, .. }, @@ -347,6 +348,7 @@ impl ModuleOptions { mangle_export_names, cjs_scope_hoisting, cross_module_constants, + lazy_compilation, ..Default::default() }; let ecmascript_options_vc = ecmascript_options.resolved_cell(); diff --git a/turbopack/crates/turbopack/src/module_options/module_options_context.rs b/turbopack/crates/turbopack/src/module_options/module_options_context.rs index d20026a3231f..b39605317259 100644 --- a/turbopack/crates/turbopack/src/module_options/module_options_context.rs +++ b/turbopack/crates/turbopack/src/module_options/module_options_context.rs @@ -296,6 +296,8 @@ pub struct EcmascriptOptionsContext { /// Whether to enable cross-module constant inlining. Defaults to false. pub cross_module_constants: bool, + /// Whether dynamic import targets are compiled after their runtime proxy is activated. + pub lazy_compilation: bool, /// Additional SWC preset-env options (mode, coreJs, include, exclude, etc.). pub preset_env_config: Option>, From deed868499de11336b8df141e84a6477e5ccf47b Mon Sep 17 00:00:00 2001 From: Steven Date: Fri, 11 Sep 2026 13:58:21 -0400 Subject: [PATCH 3/5] feat(next/image): Add experimental imgOptMozjpeg config (#98571) In a previous PR, `mozjpeg` was set to true which might be the reason output jpeg spikes cpu. - https://github.com/vercel/next.js/pull/65846 I made a benchmark and found that disabling MozJPEG saved 72% CPU, with average outputs 31% larger. - https://github.com/lovell/sharp/issues/4603 So this PR adds a new experimental flag to enable (or rather disable) mozjpeg and try with real workloads. This is useful becaues in many cases, cpu is more costly than bandwidth since most CDNs provide [near unlimited bandwidth](https://vercel.com/blog/introducing-flat-rate-cdn). --- packages/next/src/server/config-schema.ts | 1 + packages/next/src/server/config-shared.ts | 4 +++ packages/next/src/server/image-optimizer.ts | 1 + .../src/server/image-optimizer/transform.ts | 6 +++- test/unit/image-optimizer/transform.test.ts | 32 +++++++++++++++++-- test/unit/isolated/config.test.ts | 21 ++++++++++++ 6 files changed, 61 insertions(+), 4 deletions(-) diff --git a/packages/next/src/server/config-schema.ts b/packages/next/src/server/config-schema.ts index 5c823037531e..cbb16874d1db 100644 --- a/packages/next/src/server/config-schema.ts +++ b/packages/next/src/server/config-schema.ts @@ -273,6 +273,7 @@ export const experimentalSchema = { imgOptTimeoutInSeconds: z.number().int().optional(), imgOptMaxInputPixels: z.number().int().optional(), imgOptSequentialRead: z.boolean().optional().nullable(), + imgOptMozjpeg: z.boolean().optional(), isrFlushToDisk: z.boolean().optional(), largePageDataBytes: z.number().optional(), linkNoTouchStart: z.boolean().optional(), diff --git a/packages/next/src/server/config-shared.ts b/packages/next/src/server/config-shared.ts index 7f11c5851ede..eb2b87572d19 100644 --- a/packages/next/src/server/config-shared.ts +++ b/packages/next/src/server/config-shared.ts @@ -606,6 +606,7 @@ export interface ExperimentalConfig { imgOptTimeoutInSeconds?: number imgOptMaxInputPixels?: number imgOptSequentialRead?: boolean | null + imgOptMozjpeg?: boolean optimisticClientCache?: boolean /** * @deprecated use config.expireTime instead @@ -2333,6 +2334,7 @@ export const defaultConfig = Object.freeze({ imgOptTimeoutInSeconds: 7, imgOptMaxInputPixels: 268_402_689, // https://sharp.pixelplumbing.com/api-constructor#:~:text=%5Boptions.limitInputPixels%5D imgOptSequentialRead: null, + imgOptMozjpeg: true, isrFlushToDisk: true, workerThreads: false, proxyTimeout: undefined, @@ -2502,6 +2504,7 @@ export interface NextConfigRuntime { | 'imgOptMaxInputPixels' | 'imgOptSequentialRead' | 'imgOptTimeoutInSeconds' + | 'imgOptMozjpeg' | 'proxyClientMaxBodySize' | 'proxyTimeout' | 'testProxy' @@ -2573,6 +2576,7 @@ export function getNextConfigRuntime( imgOptMaxInputPixels: ex.imgOptMaxInputPixels, imgOptSequentialRead: ex.imgOptSequentialRead, imgOptTimeoutInSeconds: ex.imgOptTimeoutInSeconds, + imgOptMozjpeg: ex.imgOptMozjpeg, proxyClientMaxBodySize: ex.proxyClientMaxBodySize, proxyTimeout: ex.proxyTimeout, testProxy: ex.testProxy, diff --git a/packages/next/src/server/image-optimizer.ts b/packages/next/src/server/image-optimizer.ts index 6ecce812767c..f3fe9f0b7f66 100644 --- a/packages/next/src/server/image-optimizer.ts +++ b/packages/next/src/server/image-optimizer.ts @@ -752,6 +752,7 @@ export async function imageOptimizer( | 'imgOptMaxInputPixels' | 'imgOptSequentialRead' | 'imgOptTimeoutInSeconds' + | 'imgOptMozjpeg' > images: Pick< NextConfigComplete['images'], diff --git a/packages/next/src/server/image-optimizer/transform.ts b/packages/next/src/server/image-optimizer/transform.ts index 548e605d2846..d674f389fd62 100644 --- a/packages/next/src/server/image-optimizer/transform.ts +++ b/packages/next/src/server/image-optimizer/transform.ts @@ -49,6 +49,7 @@ export type ImageOptimizerTransformConfig = { | 'imgOptMaxInputPixels' | 'imgOptSequentialRead' | 'imgOptTimeoutInSeconds' + | 'imgOptMozjpeg' > images: Pick< NextConfigComplete['images'], @@ -139,6 +140,7 @@ export async function optimizeImage({ limitInputPixels, sequentialRead, timeoutInSeconds, + mozjpeg = true, }: { buffer: Buffer contentType: string @@ -150,6 +152,7 @@ export async function optimizeImage({ limitInputPixels?: number sequentialRead?: boolean | null timeoutInSeconds?: number + mozjpeg?: boolean }): Promise { const sharp = getSharp(concurrency, operationCache) const transformer = sharp(buffer, { @@ -182,7 +185,7 @@ export async function optimizeImage({ } else if (contentType === PNG) { transformer.png({ quality }) } else if (contentType === JPEG) { - transformer.jpeg({ quality, mozjpeg: true }) + transformer.jpeg({ quality, mozjpeg }) } const optimizedBuffer = await transformer.toBuffer() @@ -283,6 +286,7 @@ export async function imageOptimizerTransform( limitInputPixels: nextConfig.experimental.imgOptMaxInputPixels, sequentialRead: nextConfig.experimental.imgOptSequentialRead, timeoutInSeconds: nextConfig.experimental.imgOptTimeoutInSeconds, + mozjpeg: nextConfig.experimental.imgOptMozjpeg, }) if (opts.handleDevOutput) { const output = await opts.handleDevOutput(optimizedBuffer, contentType) diff --git a/test/unit/image-optimizer/transform.test.ts b/test/unit/image-optimizer/transform.test.ts index f251eb8ebab1..9168fc338902 100644 --- a/test/unit/image-optimizer/transform.test.ts +++ b/test/unit/image-optimizer/transform.test.ts @@ -1,7 +1,11 @@ /* eslint-env jest */ import { readFile } from 'fs-extra' import { join } from 'path' -import { imageOptimizerTransform } from 'next/dist/server/image-optimizer/transform' +import { + getSharp, + imageOptimizerTransform, + type ImageOptimizerTransformConfig, +} from 'next/dist/server/image-optimizer/transform' import type { CachedRouteKind, IncrementalResponseCacheEntry, @@ -24,7 +28,11 @@ const config = { }, } -async function transform(filename: string, mimeType = 'image/webp') { +async function transform( + filename: string, + mimeType = 'image/webp', + nextConfig: ImageOptimizerTransformConfig = config +) { const buffer = await getImage(filename) return imageOptimizerTransform( { @@ -34,7 +42,7 @@ async function transform(filename: string, mimeType = 'image/webp') { etag: 'source-etag', }, { href: `/${filename}`, width: 64, quality: 75, mimeType }, - config + nextConfig ) } @@ -88,6 +96,24 @@ describe('imageOptimizerTransform', () => { expect(result.maxAge).toBe(120) }) + it.each([undefined, true, false])( + 'encodes JPEGs with imgOptMozjpeg=%s', + async (imgOptMozjpeg) => { + const result = await transform('test.jpg', 'image/jpeg', { + ...config, + experimental: { ...config.experimental, imgOptMozjpeg }, + }) + expect(result.error).toBeUndefined() + expect(result.contentType).toBe('image/jpeg') + const sharp = getSharp(1, false) + expect(await sharp(result.buffer).metadata()).toMatchObject({ + format: 'jpeg', + width: 64, + isProgressive: imgOptMozjpeg ?? true, + }) + } + ) + it('preserves the source format when no output format is requested', async () => { const result = await transform('test.png', '') expect(result.contentType).toBe('image/png') diff --git a/test/unit/isolated/config.test.ts b/test/unit/isolated/config.test.ts index 694d86379e64..2f30374fb883 100644 --- a/test/unit/isolated/config.test.ts +++ b/test/unit/isolated/config.test.ts @@ -108,6 +108,27 @@ describe('config', () => { expect(disabledConfig.experimental.devMemoryThresholdRestart).toBe(false) }) + it.each([undefined, true, false])( + 'Should preserve imgOptMozjpeg=%s in the runtime config', + async (imgOptMozjpeg) => { + const config = await loadConfig(PHASE_DEVELOPMENT_SERVER, '', { + customConfig: { + experimental: { + imgOptMozjpeg, + runtimeServerDeploymentId: true, + }, + }, + }) + const { getNextConfigRuntime } = await import( + 'next/dist/server/config-shared' + ) + expect(config.experimental.imgOptMozjpeg).toBe(imgOptMozjpeg ?? true) + expect(getNextConfigRuntime(config).experimental.imgOptMozjpeg).toBe( + imgOptMozjpeg ?? true + ) + } + ) + it('Should allow bundler-specific options during the test phase', async () => { const config = await loadConfig(PHASE_TEST, '-test-phase', { customConfig: { From 83cb4fb70f60a8652c138960d98c2c6d59c468e4 Mon Sep 17 00:00:00 2001 From: "next-js-bot[bot]" <279046576+next-js-bot[bot]@users.noreply.github.com> Date: Fri, 11 Sep 2026 17:58:49 +0000 Subject: [PATCH 4/5] Upgrade React from `6c0e1047-20260908` to `019019be-20260911` (#98576) --- examples/reproduction-template/package.json | 4 +- package.json | 30 +- packages/create-next-app/templates/index.ts | 2 +- .../cjs/react-dom-client.development.js | 12 +- .../cjs/react-dom-client.production.js | 12 +- .../cjs/react-dom-profiling.development.js | 12 +- .../cjs/react-dom-profiling.profiling.js | 12 +- ...t-dom-server-legacy.browser.development.js | 2 +- ...ct-dom-server-legacy.browser.production.js | 2 +- ...eact-dom-server-legacy.node.development.js | 2 +- ...react-dom-server-legacy.node.production.js | 2 +- .../react-dom-server.browser.development.js | 6 +- .../react-dom-server.browser.production.js | 6 +- .../cjs/react-dom-server.bun.production.js | 6 +- .../cjs/react-dom-server.edge.development.js | 6 +- .../cjs/react-dom-server.edge.production.js | 6 +- .../cjs/react-dom-server.node.development.js | 6 +- .../cjs/react-dom-server.node.production.js | 6 +- .../react-dom-unstable_testing.development.js | 12 +- .../react-dom-unstable_testing.production.js | 12 +- .../cjs/react-dom.development.js | 2 +- .../cjs/react-dom.production.js | 2 +- .../cjs/react-dom.react-server.development.js | 2 +- .../cjs/react-dom.react-server.production.js | 2 +- .../react-dom-experimental/package.json | 4 +- .../cjs/react-dom-client.development.js | 12 +- .../cjs/react-dom-client.production.js | 12 +- .../cjs/react-dom-profiling.development.js | 12 +- .../cjs/react-dom-profiling.profiling.js | 12 +- ...t-dom-server-legacy.browser.development.js | 2 +- ...ct-dom-server-legacy.browser.production.js | 2 +- ...eact-dom-server-legacy.node.development.js | 2 +- ...react-dom-server-legacy.node.production.js | 2 +- .../react-dom-server.browser.development.js | 6 +- .../react-dom-server.browser.production.js | 6 +- .../cjs/react-dom-server.bun.production.js | 6 +- .../cjs/react-dom-server.edge.development.js | 6 +- .../cjs/react-dom-server.edge.production.js | 6 +- .../cjs/react-dom-server.node.development.js | 6 +- .../cjs/react-dom-server.node.production.js | 6 +- .../react-dom/cjs/react-dom.development.js | 2 +- .../react-dom/cjs/react-dom.production.js | 2 +- .../cjs/react-dom.react-server.development.js | 2 +- .../cjs/react-dom.react-server.production.js | 2 +- .../next/src/compiled/react-dom/package.json | 4 +- .../cjs/react.development.js | 2 +- .../cjs/react.production.js | 2 +- .../cjs/react.react-server.development.js | 2 +- .../cjs/react.react-server.production.js | 2 +- .../next/src/compiled/react-is/package.json | 2 +- ...om-turbopack-client.browser.development.js | 4 +- .../package.json | 4 +- ...om-turbopack-client.browser.development.js | 4 +- .../react-server-dom-turbopack/package.json | 4 +- ...-dom-webpack-client.browser.development.js | 4 +- .../package.json | 4 +- ...-dom-webpack-client.browser.development.js | 4 +- .../react-server-dom-webpack/package.json | 4 +- .../compiled/react/cjs/react.development.js | 2 +- .../compiled/react/cjs/react.production.js | 2 +- .../cjs/react.react-server.development.js | 2 +- .../cjs/react.react-server.production.js | 2 +- .../next/src/compiled/unistore/unistore.js | 2 +- pnpm-lock.yaml | 1192 ++++++++--------- run-tests.js | 2 +- test/.stats-app/package.json | 4 +- .../first-time-setup-js/package.json | 4 +- .../first-time-setup-ts/package.json | 4 +- test/lib/next-modes/base.ts | 2 +- 69 files changed, 770 insertions(+), 770 deletions(-) diff --git a/examples/reproduction-template/package.json b/examples/reproduction-template/package.json index 388570c1f243..c13d41fc37e9 100644 --- a/examples/reproduction-template/package.json +++ b/examples/reproduction-template/package.json @@ -7,8 +7,8 @@ }, "dependencies": { "next": "canary", - "react": "19.2.8", - "react-dom": "19.2.8" + "react": "19.3.0", + "react-dom": "19.3.0" }, "devDependencies": { "@types/node": "^22", diff --git a/package.json b/package.json index c9d9ab684e0e..5018da0a6563 100644 --- a/package.json +++ b/package.json @@ -255,24 +255,24 @@ "pretty-ms": "7.0.0", "random-seed": "0.3.0", "react": "19.0.0", - "react-builtin": "npm:react@19.3.0-canary-6c0e1047-20260908", + "react-builtin": "npm:react@19.3.0-canary-019019be-20260911", "react-dom": "19.0.0", - "react-dom-builtin": "npm:react-dom@19.3.0-canary-6c0e1047-20260908", - "react-dom-experimental-builtin": "npm:react-dom@0.0.0-experimental-6c0e1047-20260908", - "react-experimental-builtin": "npm:react@0.0.0-experimental-6c0e1047-20260908", - "react-is-builtin": "npm:react-is@19.3.0-canary-6c0e1047-20260908", - "react-server-dom-turbopack": "npm:react-server-dom-turbopack@19.3.0-canary-6c0e1047-20260908", - "react-server-dom-turbopack-experimental": "npm:react-server-dom-turbopack@0.0.0-experimental-6c0e1047-20260908", - "react-server-dom-webpack": "npm:react-server-dom-webpack@19.3.0-canary-6c0e1047-20260908", - "react-server-dom-webpack-experimental": "npm:react-server-dom-webpack@0.0.0-experimental-6c0e1047-20260908", + "react-dom-builtin": "npm:react-dom@19.3.0-canary-019019be-20260911", + "react-dom-experimental-builtin": "npm:react-dom@0.0.0-experimental-019019be-20260911", + "react-experimental-builtin": "npm:react@0.0.0-experimental-019019be-20260911", + "react-is-builtin": "npm:react-is@19.3.0-canary-019019be-20260911", + "react-server-dom-turbopack": "npm:react-server-dom-turbopack@19.3.0-canary-019019be-20260911", + "react-server-dom-turbopack-experimental": "npm:react-server-dom-turbopack@0.0.0-experimental-019019be-20260911", + "react-server-dom-webpack": "npm:react-server-dom-webpack@19.3.0-canary-019019be-20260911", + "react-server-dom-webpack-experimental": "npm:react-server-dom-webpack@0.0.0-experimental-019019be-20260911", "react-ssr-prepass": "1.0.8", "react-virtualized": "9.22.3", "request-promise-core": "1.1.2", "resolve-from": "5.0.0", "sass": "1.54.0", "satori": "0.29.0", - "scheduler-builtin": "npm:scheduler@0.28.0-canary-6c0e1047-20260908", - "scheduler-experimental-builtin": "npm:scheduler@0.0.0-experimental-6c0e1047-20260908", + "scheduler-builtin": "npm:scheduler@0.28.0-canary-019019be-20260911", + "scheduler-experimental-builtin": "npm:scheduler@0.0.0-experimental-019019be-20260911", "seedrandom": "3.0.5", "semver": "7.3.7", "serve-handler": "6.1.6", @@ -316,10 +316,10 @@ "@types/react-dom": "19.2.4", "@types/retry": "0.12.0", "jest-snapshot": "30.0.0-alpha.6", - "react": "npm:react@19.3.0-canary-6c0e1047-20260908", - "react-dom": "npm:react-dom@19.3.0-canary-6c0e1047-20260908", - "react-is": "npm:react-is@19.3.0-canary-6c0e1047-20260908", - "scheduler": "npm:scheduler@0.28.0-canary-6c0e1047-20260908" + "react": "npm:react@19.3.0-canary-019019be-20260911", + "react-dom": "npm:react-dom@19.3.0-canary-019019be-20260911", + "react-is": "npm:react-is@19.3.0-canary-019019be-20260911", + "scheduler": "npm:scheduler@0.28.0-canary-019019be-20260911" }, "packageExtensions": { "eslint-plugin-react-hooks@0.0.0-experimental-6de32a5a-20250822": { diff --git a/packages/create-next-app/templates/index.ts b/packages/create-next-app/templates/index.ts index 992e3b454ebb..28f294aec093 100644 --- a/packages/create-next-app/templates/index.ts +++ b/packages/create-next-app/templates/index.ts @@ -18,7 +18,7 @@ import { Bundler, GetTemplateFileArgs, InstallTemplateArgs } from "./types"; // Do not rename or format. sync-react script relies on this line. // prettier-ignore -const nextjsReactPeerVersion = "19.2.8"; +const nextjsReactPeerVersion = "19.3.0"; function sorted(obj: Record) { return Object.keys(obj) .sort() diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.development.js index cc5fabafcf56..9f77b57439a7 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.development.js @@ -26981,7 +26981,7 @@ if (documentPosition & Node.DOCUMENT_POSITION_CONTAINS) { if (null === otherFiber) return ( - (otherFiber = otherNode.ownerDocument), + (otherFiber = getOwnerDocumentFromRootContainer(otherNode)), otherNode === otherFiber || otherNode === otherFiber.documentElement || otherNode === otherFiber.body @@ -33463,11 +33463,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -33504,10 +33504,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-experimental-6c0e1047-20260908", + version: "19.3.0-experimental-019019be-20260911", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-6c0e1047-20260908" + reconcilerVersion: "19.3.0-experimental-019019be-20260911" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -33655,7 +33655,7 @@ listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; - exports.version = "19.3.0-experimental-6c0e1047-20260908"; + exports.version = "19.3.0-experimental-019019be-20260911"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.production.js index e712cc12e99e..74302b6e152f 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.production.js @@ -18370,7 +18370,7 @@ function validateDocumentPositionWithFiberTree( if (documentPosition & Node.DOCUMENT_POSITION_CONTAINS) { if (null === otherFiber) return ( - (otherFiber = otherNode.ownerDocument), + (otherFiber = getOwnerDocumentFromRootContainer(otherNode)), otherNode === otherFiber || otherNode === otherFiber.documentElement || otherNode === otherFiber.body @@ -20458,14 +20458,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2236 = React.version; if ( - "19.3.0-experimental-6c0e1047-20260908" !== + "19.3.0-experimental-019019be-20260911" !== isomorphicReactPackageVersion$jscomp$inline_2236 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2236, - "19.3.0-experimental-6c0e1047-20260908" + "19.3.0-experimental-019019be-20260911" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -20487,10 +20487,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2892 = { bundleType: 0, - version: "19.3.0-experimental-6c0e1047-20260908", + version: "19.3.0-experimental-019019be-20260911", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-6c0e1047-20260908" + reconcilerVersion: "19.3.0-experimental-019019be-20260911" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2893 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -20597,4 +20597,4 @@ exports.hydrateRoot = function (container, initialChildren, options) { listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; -exports.version = "19.3.0-experimental-6c0e1047-20260908"; +exports.version = "19.3.0-experimental-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-profiling.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-profiling.development.js index 8e3109021faa..b5d14dc53f3a 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-profiling.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-profiling.development.js @@ -26989,7 +26989,7 @@ if (documentPosition & Node.DOCUMENT_POSITION_CONTAINS) { if (null === otherFiber) return ( - (otherFiber = otherNode.ownerDocument), + (otherFiber = getOwnerDocumentFromRootContainer(otherNode)), otherNode === otherFiber || otherNode === otherFiber.documentElement || otherNode === otherFiber.body @@ -33520,11 +33520,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -33561,10 +33561,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-experimental-6c0e1047-20260908", + version: "19.3.0-experimental-019019be-20260911", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-6c0e1047-20260908" + reconcilerVersion: "19.3.0-experimental-019019be-20260911" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -34054,7 +34054,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.3.0-experimental-6c0e1047-20260908"; + exports.version = "19.3.0-experimental-019019be-20260911"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-profiling.profiling.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-profiling.profiling.js index 180a787641d2..9a0c82e2022e 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-profiling.profiling.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-profiling.profiling.js @@ -20435,7 +20435,7 @@ function validateDocumentPositionWithFiberTree( if (documentPosition & Node.DOCUMENT_POSITION_CONTAINS) { if (null === otherFiber) return ( - (otherFiber = otherNode.ownerDocument), + (otherFiber = getOwnerDocumentFromRootContainer(otherNode)), otherNode === otherFiber || otherNode === otherFiber.documentElement || otherNode === otherFiber.body @@ -22545,14 +22545,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2540 = React.version; if ( - "19.3.0-experimental-6c0e1047-20260908" !== + "19.3.0-experimental-019019be-20260911" !== isomorphicReactPackageVersion$jscomp$inline_2540 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2540, - "19.3.0-experimental-6c0e1047-20260908" + "19.3.0-experimental-019019be-20260911" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -22574,10 +22574,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_3213 = { bundleType: 0, - version: "19.3.0-experimental-6c0e1047-20260908", + version: "19.3.0-experimental-019019be-20260911", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-6c0e1047-20260908" + reconcilerVersion: "19.3.0-experimental-019019be-20260911" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_3214 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -22857,7 +22857,7 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.3.0-experimental-6c0e1047-20260908"; +exports.version = "19.3.0-experimental-019019be-20260911"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.development.js index 812b8a79f239..848836b330cd 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.development.js @@ -10825,5 +10825,5 @@ 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' ); }; - exports.version = "19.3.0-experimental-6c0e1047-20260908"; + exports.version = "19.3.0-experimental-019019be-20260911"; })(); diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.production.js index 0bd40cd96076..9bbc9ea05f37 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.production.js @@ -7253,4 +7253,4 @@ exports.renderToString = function (children, options) { 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' ); }; -exports.version = "19.3.0-experimental-6c0e1047-20260908"; +exports.version = "19.3.0-experimental-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.node.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.node.development.js index df536dad109b..3e3ff62f746e 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.node.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.node.development.js @@ -10825,5 +10825,5 @@ 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToPipeableStream" which supports Suspense on the server' ); }; - exports.version = "19.3.0-experimental-6c0e1047-20260908"; + exports.version = "19.3.0-experimental-019019be-20260911"; })(); diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.node.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.node.production.js index 20f464e868ad..96bc30acbf6e 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.node.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.node.production.js @@ -7358,4 +7358,4 @@ exports.renderToString = function (children, options) { 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToPipeableStream" which supports Suspense on the server' ); }; -exports.version = "19.3.0-experimental-6c0e1047-20260908"; +exports.version = "19.3.0-experimental-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.browser.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.browser.development.js index ece7575d9dd7..8702267e4cda 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.browser.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.browser.development.js @@ -9857,11 +9857,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react-experimental"), @@ -11658,5 +11658,5 @@ startWork(request); }); }; - exports.version = "19.3.0-experimental-6c0e1047-20260908"; + exports.version = "19.3.0-experimental-019019be-20260911"; })(); diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.browser.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.browser.production.js index f170e349ea50..29015578d3d5 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.browser.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.browser.production.js @@ -7980,12 +7980,12 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion, - "19.3.0-experimental-6c0e1047-20260908" + "19.3.0-experimental-019019be-20260911" ) ); } @@ -8200,4 +8200,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.3.0-experimental-6c0e1047-20260908"; +exports.version = "19.3.0-experimental-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.bun.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.bun.production.js index 162f9e89aca8..c16e439fc1fc 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.bun.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.bun.production.js @@ -7674,11 +7674,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -8171,4 +8171,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.3.0-experimental-6c0e1047-20260908"; +exports.version = "19.3.0-experimental-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.edge.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.edge.development.js index 85ebbebd59e7..ecbf01b9d31b 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.edge.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.edge.development.js @@ -9886,11 +9886,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react-experimental"), @@ -11683,5 +11683,5 @@ startWork(request); }); }; - exports.version = "19.3.0-experimental-6c0e1047-20260908"; + exports.version = "19.3.0-experimental-019019be-20260911"; })(); diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.edge.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.edge.production.js index 13766b83cf50..816c24c468d4 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.edge.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.edge.production.js @@ -8100,11 +8100,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -8318,4 +8318,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.3.0-experimental-6c0e1047-20260908"; +exports.version = "19.3.0-experimental-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.node.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.node.development.js index 09bec4f00faf..d97a27bfa9ee 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.node.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.node.development.js @@ -9747,11 +9747,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); } function createDrainHandler(destination, request) { @@ -11834,5 +11834,5 @@ } }; }; - exports.version = "19.3.0-experimental-6c0e1047-20260908"; + exports.version = "19.3.0-experimental-019019be-20260911"; })(); diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.node.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.node.production.js index cd163775eed8..76635395d39a 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.node.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.node.production.js @@ -7979,11 +7979,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -8481,4 +8481,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.3.0-experimental-6c0e1047-20260908"; +exports.version = "19.3.0-experimental-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-unstable_testing.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-unstable_testing.development.js index 14b812c93076..233be3e1696e 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-unstable_testing.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-unstable_testing.development.js @@ -27204,7 +27204,7 @@ if (documentPosition & Node.DOCUMENT_POSITION_CONTAINS) { if (null === otherFiber) return ( - (otherFiber = otherNode.ownerDocument), + (otherFiber = getOwnerDocumentFromRootContainer(otherNode)), otherNode === otherFiber || otherNode === otherFiber.documentElement || otherNode === otherFiber.body @@ -33784,11 +33784,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -33825,10 +33825,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-experimental-6c0e1047-20260908", + version: "19.3.0-experimental-019019be-20260911", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-6c0e1047-20260908" + reconcilerVersion: "19.3.0-experimental-019019be-20260911" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -34142,5 +34142,5 @@ } }; }; - exports.version = "19.3.0-experimental-6c0e1047-20260908"; + exports.version = "19.3.0-experimental-019019be-20260911"; })(); diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-unstable_testing.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-unstable_testing.production.js index be9965f0d68d..3248dc218dcc 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-unstable_testing.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-unstable_testing.production.js @@ -18642,7 +18642,7 @@ function validateDocumentPositionWithFiberTree( if (documentPosition & Node.DOCUMENT_POSITION_CONTAINS) { if (null === otherFiber) return ( - (otherFiber = otherNode.ownerDocument), + (otherFiber = getOwnerDocumentFromRootContainer(otherNode)), otherNode === otherFiber || otherNode === otherFiber.documentElement || otherNode === otherFiber.body @@ -20774,14 +20774,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2265 = React.version; if ( - "19.3.0-experimental-6c0e1047-20260908" !== + "19.3.0-experimental-019019be-20260911" !== isomorphicReactPackageVersion$jscomp$inline_2265 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2265, - "19.3.0-experimental-6c0e1047-20260908" + "19.3.0-experimental-019019be-20260911" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -20803,10 +20803,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2926 = { bundleType: 0, - version: "19.3.0-experimental-6c0e1047-20260908", + version: "19.3.0-experimental-019019be-20260911", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-6c0e1047-20260908" + reconcilerVersion: "19.3.0-experimental-019019be-20260911" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2927 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -21064,4 +21064,4 @@ exports.observeVisibleRects = function ( } }; }; -exports.version = "19.3.0-experimental-6c0e1047-20260908"; +exports.version = "19.3.0-experimental-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.development.js index 6fa911a49048..18a87683a19d 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.development.js @@ -435,7 +435,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.3.0-experimental-6c0e1047-20260908"; + exports.version = "19.3.0-experimental-019019be-20260911"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.production.js index 17ac540bfa4d..531b4981368e 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.production.js @@ -226,4 +226,4 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.3.0-experimental-6c0e1047-20260908"; +exports.version = "19.3.0-experimental-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.react-server.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.react-server.development.js index 9209062a32d4..951b34d1fb94 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.react-server.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.react-server.development.js @@ -345,5 +345,5 @@ })) : Internals.d.m(href)); }; - exports.version = "19.3.0-experimental-6c0e1047-20260908"; + exports.version = "19.3.0-experimental-019019be-20260911"; })(); diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.react-server.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.react-server.production.js index e354a5885b06..a379b2bd0497 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.react-server.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.react-server.production.js @@ -158,4 +158,4 @@ exports.preloadModule = function (href, options) { }); } else Internals.d.m(href); }; -exports.version = "19.3.0-experimental-6c0e1047-20260908"; +exports.version = "19.3.0-experimental-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom-experimental/package.json b/packages/next/src/compiled/react-dom-experimental/package.json index 7b6357112568..c62dd1445c07 100644 --- a/packages/next/src/compiled/react-dom-experimental/package.json +++ b/packages/next/src/compiled/react-dom-experimental/package.json @@ -72,10 +72,10 @@ "./package.json": "./package.json" }, "dependencies": { - "scheduler": "0.0.0-experimental-6c0e1047-20260908" + "scheduler": "0.0.0-experimental-019019be-20260911" }, "peerDependencies": { - "react": "0.0.0-experimental-6c0e1047-20260908" + "react": "0.0.0-experimental-019019be-20260911" }, "browser": { "./server.js": "./server.browser.js", diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-client.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom-client.development.js index ba6938806293..2a19b060bd39 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-client.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-client.development.js @@ -24642,7 +24642,7 @@ if (documentPosition & Node.DOCUMENT_POSITION_CONTAINS) { if (null === otherFiber) return ( - (otherFiber = otherNode.ownerDocument), + (otherFiber = getOwnerDocumentFromRootContainer(otherNode)), otherNode === otherFiber || otherNode === otherFiber.documentElement || otherNode === otherFiber.body @@ -31075,11 +31075,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-canary-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -31116,10 +31116,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-canary-6c0e1047-20260908", + version: "19.3.0-canary-019019be-20260911", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-6c0e1047-20260908" + reconcilerVersion: "19.3.0-canary-019019be-20260911" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -31257,7 +31257,7 @@ listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; - exports.version = "19.3.0-canary-6c0e1047-20260908"; + exports.version = "19.3.0-canary-019019be-20260911"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-client.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom-client.production.js index 7e0904ea0b61..7bf3549645c1 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-client.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-client.production.js @@ -16427,7 +16427,7 @@ function validateDocumentPositionWithFiberTree( if (documentPosition & Node.DOCUMENT_POSITION_CONTAINS) { if (null === otherFiber) return ( - (otherFiber = otherNode.ownerDocument), + (otherFiber = getOwnerDocumentFromRootContainer(otherNode)), otherNode === otherFiber || otherNode === otherFiber.documentElement || otherNode === otherFiber.body @@ -18527,14 +18527,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2043 = React.version; if ( - "19.3.0-canary-6c0e1047-20260908" !== + "19.3.0-canary-019019be-20260911" !== isomorphicReactPackageVersion$jscomp$inline_2043 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2043, - "19.3.0-canary-6c0e1047-20260908" + "19.3.0-canary-019019be-20260911" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -18556,10 +18556,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2586 = { bundleType: 0, - version: "19.3.0-canary-6c0e1047-20260908", + version: "19.3.0-canary-019019be-20260911", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-6c0e1047-20260908" + reconcilerVersion: "19.3.0-canary-019019be-20260911" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2587 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -18657,4 +18657,4 @@ exports.hydrateRoot = function (container, initialChildren, options) { listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; -exports.version = "19.3.0-canary-6c0e1047-20260908"; +exports.version = "19.3.0-canary-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-profiling.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom-profiling.development.js index 5f0ab468f932..344bc4e4ff7e 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-profiling.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-profiling.development.js @@ -24650,7 +24650,7 @@ if (documentPosition & Node.DOCUMENT_POSITION_CONTAINS) { if (null === otherFiber) return ( - (otherFiber = otherNode.ownerDocument), + (otherFiber = getOwnerDocumentFromRootContainer(otherNode)), otherNode === otherFiber || otherNode === otherFiber.documentElement || otherNode === otherFiber.body @@ -31133,11 +31133,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-canary-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -31174,10 +31174,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-canary-6c0e1047-20260908", + version: "19.3.0-canary-019019be-20260911", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-6c0e1047-20260908" + reconcilerVersion: "19.3.0-canary-019019be-20260911" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -31657,7 +31657,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.3.0-canary-6c0e1047-20260908"; + exports.version = "19.3.0-canary-019019be-20260911"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-profiling.profiling.js b/packages/next/src/compiled/react-dom/cjs/react-dom-profiling.profiling.js index c956a3fda3eb..db3f00006adb 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-profiling.profiling.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-profiling.profiling.js @@ -18339,7 +18339,7 @@ function validateDocumentPositionWithFiberTree( if (documentPosition & Node.DOCUMENT_POSITION_CONTAINS) { if (null === otherFiber) return ( - (otherFiber = otherNode.ownerDocument), + (otherFiber = getOwnerDocumentFromRootContainer(otherNode)), otherNode === otherFiber || otherNode === otherFiber.documentElement || otherNode === otherFiber.body @@ -20461,14 +20461,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2347 = React.version; if ( - "19.3.0-canary-6c0e1047-20260908" !== + "19.3.0-canary-019019be-20260911" !== isomorphicReactPackageVersion$jscomp$inline_2347 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2347, - "19.3.0-canary-6c0e1047-20260908" + "19.3.0-canary-019019be-20260911" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -20490,10 +20490,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2903 = { bundleType: 0, - version: "19.3.0-canary-6c0e1047-20260908", + version: "19.3.0-canary-019019be-20260911", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-6c0e1047-20260908" + reconcilerVersion: "19.3.0-canary-019019be-20260911" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2904 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -20764,7 +20764,7 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.3.0-canary-6c0e1047-20260908"; +exports.version = "19.3.0-canary-019019be-20260911"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.browser.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.browser.development.js index ba4823365b24..a0b038a373f0 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.browser.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.browser.development.js @@ -10438,5 +10438,5 @@ 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' ); }; - exports.version = "19.3.0-canary-6c0e1047-20260908"; + exports.version = "19.3.0-canary-019019be-20260911"; })(); diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.browser.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.browser.production.js index 0140e5cc8bcd..9270b5177d46 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.browser.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.browser.production.js @@ -6975,4 +6975,4 @@ exports.renderToString = function (children, options) { 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' ); }; -exports.version = "19.3.0-canary-6c0e1047-20260908"; +exports.version = "19.3.0-canary-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.node.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.node.development.js index 15460b597a23..f7470ed4137d 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.node.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.node.development.js @@ -10438,5 +10438,5 @@ 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToPipeableStream" which supports Suspense on the server' ); }; - exports.version = "19.3.0-canary-6c0e1047-20260908"; + exports.version = "19.3.0-canary-019019be-20260911"; })(); diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.node.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.node.production.js index 94d0c053d6a2..78b88a38346e 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.node.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.node.production.js @@ -7069,4 +7069,4 @@ exports.renderToString = function (children, options) { 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToPipeableStream" which supports Suspense on the server' ); }; -exports.version = "19.3.0-canary-6c0e1047-20260908"; +exports.version = "19.3.0-canary-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server.browser.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server.browser.development.js index a18868ae1e02..ad86b05da81d 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server.browser.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server.browser.development.js @@ -9425,11 +9425,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-canary-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react"), @@ -11209,5 +11209,5 @@ startWork(request); }); }; - exports.version = "19.3.0-canary-6c0e1047-20260908"; + exports.version = "19.3.0-canary-019019be-20260911"; })(); diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server.browser.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server.browser.production.js index aeb908a639ef..c07eed6a9f02 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server.browser.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server.browser.production.js @@ -7619,12 +7619,12 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion, - "19.3.0-canary-6c0e1047-20260908" + "19.3.0-canary-019019be-20260911" ) ); } @@ -7839,4 +7839,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.3.0-canary-6c0e1047-20260908"; +exports.version = "19.3.0-canary-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server.bun.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server.bun.production.js index fda7e68f2833..4b68e1227882 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server.bun.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server.bun.production.js @@ -7328,11 +7328,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-canary-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -7825,4 +7825,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.3.0-canary-6c0e1047-20260908"; +exports.version = "19.3.0-canary-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server.edge.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server.edge.development.js index de06710e0c71..59d2406eb102 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server.edge.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server.edge.development.js @@ -9448,11 +9448,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-canary-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react"), @@ -11228,5 +11228,5 @@ startWork(request); }); }; - exports.version = "19.3.0-canary-6c0e1047-20260908"; + exports.version = "19.3.0-canary-019019be-20260911"; })(); diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server.edge.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server.edge.production.js index 3171ab9fb53a..26e658cc700a 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server.edge.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server.edge.production.js @@ -7728,11 +7728,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-canary-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -7946,4 +7946,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.3.0-canary-6c0e1047-20260908"; +exports.version = "19.3.0-canary-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server.node.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server.node.development.js index b4f2ab899ba7..c83ebeed60f6 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server.node.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server.node.development.js @@ -9323,11 +9323,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-canary-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); } function createDrainHandler(destination, request) { @@ -11393,5 +11393,5 @@ } }; }; - exports.version = "19.3.0-canary-6c0e1047-20260908"; + exports.version = "19.3.0-canary-019019be-20260911"; })(); diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server.node.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server.node.production.js index d36f5ddd51d8..47949252291a 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server.node.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server.node.production.js @@ -7621,11 +7621,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-6c0e1047-20260908" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-019019be-20260911" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-canary-6c0e1047-20260908\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-019019be-20260911\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -8123,4 +8123,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.3.0-canary-6c0e1047-20260908"; +exports.version = "19.3.0-canary-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom.development.js index 77da25e4e537..006cadabdc21 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom.development.js @@ -435,7 +435,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.3.0-canary-6c0e1047-20260908"; + exports.version = "19.3.0-canary-019019be-20260911"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom.production.js index 5b5edfaf00e3..d81637c0f704 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom.production.js @@ -226,4 +226,4 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.3.0-canary-6c0e1047-20260908"; +exports.version = "19.3.0-canary-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom.react-server.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom.react-server.development.js index 2fa8dabadd80..f2a6791ba69b 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom.react-server.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom.react-server.development.js @@ -345,5 +345,5 @@ })) : Internals.d.m(href)); }; - exports.version = "19.3.0-canary-6c0e1047-20260908"; + exports.version = "19.3.0-canary-019019be-20260911"; })(); diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom.react-server.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom.react-server.production.js index 296fdeaac64d..310c05d3f4e5 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom.react-server.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom.react-server.production.js @@ -158,4 +158,4 @@ exports.preloadModule = function (href, options) { }); } else Internals.d.m(href); }; -exports.version = "19.3.0-canary-6c0e1047-20260908"; +exports.version = "19.3.0-canary-019019be-20260911"; diff --git a/packages/next/src/compiled/react-dom/package.json b/packages/next/src/compiled/react-dom/package.json index 3ecf9eeb3d33..6ce6184bfb01 100644 --- a/packages/next/src/compiled/react-dom/package.json +++ b/packages/next/src/compiled/react-dom/package.json @@ -67,10 +67,10 @@ "./package.json": "./package.json" }, "dependencies": { - "scheduler": "0.28.0-canary-6c0e1047-20260908" + "scheduler": "0.28.0-canary-019019be-20260911" }, "peerDependencies": { - "react": "19.3.0-canary-6c0e1047-20260908" + "react": "19.3.0-canary-019019be-20260911" }, "browser": { "./server.js": "./server.browser.js", diff --git a/packages/next/src/compiled/react-experimental/cjs/react.development.js b/packages/next/src/compiled/react-experimental/cjs/react.development.js index b51d4bbcb579..9ee54dafea21 100644 --- a/packages/next/src/compiled/react-experimental/cjs/react.development.js +++ b/packages/next/src/compiled/react-experimental/cjs/react.development.js @@ -1391,7 +1391,7 @@ exports.useTransition = function () { return resolveDispatcher().useTransition(); }; - exports.version = "19.3.0-experimental-6c0e1047-20260908"; + exports.version = "19.3.0-experimental-019019be-20260911"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-experimental/cjs/react.production.js b/packages/next/src/compiled/react-experimental/cjs/react.production.js index 142979a83730..42221f48cbf0 100644 --- a/packages/next/src/compiled/react-experimental/cjs/react.production.js +++ b/packages/next/src/compiled/react-experimental/cjs/react.production.js @@ -613,4 +613,4 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactSharedInternals.H.useTransition(); }; -exports.version = "19.3.0-experimental-6c0e1047-20260908"; +exports.version = "19.3.0-experimental-019019be-20260911"; diff --git a/packages/next/src/compiled/react-experimental/cjs/react.react-server.development.js b/packages/next/src/compiled/react-experimental/cjs/react.react-server.development.js index 42aba18cd207..9e58439f80e2 100644 --- a/packages/next/src/compiled/react-experimental/cjs/react.react-server.development.js +++ b/packages/next/src/compiled/react-experimental/cjs/react.react-server.development.js @@ -1061,5 +1061,5 @@ exports.useMemo = function (create, deps) { return resolveDispatcher().useMemo(create, deps); }; - exports.version = "19.3.0-experimental-6c0e1047-20260908"; + exports.version = "19.3.0-experimental-019019be-20260911"; })(); diff --git a/packages/next/src/compiled/react-experimental/cjs/react.react-server.production.js b/packages/next/src/compiled/react-experimental/cjs/react.react-server.production.js index f07a214d53c5..a4f20f76bf6c 100644 --- a/packages/next/src/compiled/react-experimental/cjs/react.react-server.production.js +++ b/packages/next/src/compiled/react-experimental/cjs/react.react-server.production.js @@ -579,4 +579,4 @@ exports.useId = function () { exports.useMemo = function (create, deps) { return ReactSharedInternals.H.useMemo(create, deps); }; -exports.version = "19.3.0-experimental-6c0e1047-20260908"; +exports.version = "19.3.0-experimental-019019be-20260911"; diff --git a/packages/next/src/compiled/react-is/package.json b/packages/next/src/compiled/react-is/package.json index d092fb35f734..8295b4ece43a 100644 --- a/packages/next/src/compiled/react-is/package.json +++ b/packages/next/src/compiled/react-is/package.json @@ -1,6 +1,6 @@ { "name": "react-is", - "version": "19.3.0-canary-6c0e1047-20260908", + "version": "19.3.0-canary-019019be-20260911", "description": "Brand checking of React Elements.", "main": "index.js", "sideEffects": false, diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.browser.development.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.browser.development.js index 4a67cb6e9aa8..2b941f6d6ae8 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.browser.development.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.browser.development.js @@ -5332,10 +5332,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-experimental-6c0e1047-20260908", + version: "19.3.0-experimental-019019be-20260911", rendererPackageName: "react-server-dom-turbopack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-6c0e1047-20260908", + reconcilerVersion: "19.3.0-experimental-019019be-20260911", getCurrentComponentInfo: function () { return currentOwnerInDEV; } diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/package.json b/packages/next/src/compiled/react-server-dom-turbopack-experimental/package.json index a7283c81a6da..b559f40466f8 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/package.json +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/package.json @@ -48,7 +48,7 @@ "neo-async": "^2.6.1" }, "peerDependencies": { - "react": "0.0.0-experimental-6c0e1047-20260908", - "react-dom": "0.0.0-experimental-6c0e1047-20260908" + "react": "0.0.0-experimental-019019be-20260911", + "react-dom": "0.0.0-experimental-019019be-20260911" } } \ No newline at end of file diff --git a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js index 92b4a0a042df..ae1d6a9df7ee 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js @@ -5313,10 +5313,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-canary-6c0e1047-20260908", + version: "19.3.0-canary-019019be-20260911", rendererPackageName: "react-server-dom-turbopack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-6c0e1047-20260908", + reconcilerVersion: "19.3.0-canary-019019be-20260911", getCurrentComponentInfo: function () { return currentOwnerInDEV; } diff --git a/packages/next/src/compiled/react-server-dom-turbopack/package.json b/packages/next/src/compiled/react-server-dom-turbopack/package.json index e2bf16891fc8..3828949660f7 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/package.json +++ b/packages/next/src/compiled/react-server-dom-turbopack/package.json @@ -48,7 +48,7 @@ "neo-async": "^2.6.1" }, "peerDependencies": { - "react": "19.3.0-canary-6c0e1047-20260908", - "react-dom": "19.3.0-canary-6c0e1047-20260908" + "react": "19.3.0-canary-019019be-20260911", + "react-dom": "19.3.0-canary-019019be-20260911" } } \ No newline at end of file diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.browser.development.js b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.browser.development.js index e656842714cf..1bffaa997727 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.browser.development.js +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.browser.development.js @@ -5344,10 +5344,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-experimental-6c0e1047-20260908", + version: "19.3.0-experimental-019019be-20260911", rendererPackageName: "react-server-dom-webpack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-6c0e1047-20260908", + reconcilerVersion: "19.3.0-experimental-019019be-20260911", getCurrentComponentInfo: function () { return currentOwnerInDEV; } diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/package.json b/packages/next/src/compiled/react-server-dom-webpack-experimental/package.json index 25eb3735c9b9..fece3eb43465 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/package.json +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/package.json @@ -52,8 +52,8 @@ "webpack-sources": "^3.2.0" }, "peerDependencies": { - "react": "0.0.0-experimental-6c0e1047-20260908", - "react-dom": "0.0.0-experimental-6c0e1047-20260908", + "react": "0.0.0-experimental-019019be-20260911", + "react-dom": "0.0.0-experimental-019019be-20260911", "webpack": "^5.59.0" } } \ No newline at end of file diff --git a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js index 7224f5672177..02ba48924c54 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +++ b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js @@ -5325,10 +5325,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-canary-6c0e1047-20260908", + version: "19.3.0-canary-019019be-20260911", rendererPackageName: "react-server-dom-webpack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-6c0e1047-20260908", + reconcilerVersion: "19.3.0-canary-019019be-20260911", getCurrentComponentInfo: function () { return currentOwnerInDEV; } diff --git a/packages/next/src/compiled/react-server-dom-webpack/package.json b/packages/next/src/compiled/react-server-dom-webpack/package.json index 26e65b571d1b..f2c6fa491942 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/package.json +++ b/packages/next/src/compiled/react-server-dom-webpack/package.json @@ -52,8 +52,8 @@ "webpack-sources": "^3.2.0" }, "peerDependencies": { - "react": "19.3.0-canary-6c0e1047-20260908", - "react-dom": "19.3.0-canary-6c0e1047-20260908", + "react": "19.3.0-canary-019019be-20260911", + "react-dom": "19.3.0-canary-019019be-20260911", "webpack": "^5.59.0" } } \ No newline at end of file diff --git a/packages/next/src/compiled/react/cjs/react.development.js b/packages/next/src/compiled/react/cjs/react.development.js index cc6b6a9dac9a..1a759cb1a9f2 100644 --- a/packages/next/src/compiled/react/cjs/react.development.js +++ b/packages/next/src/compiled/react/cjs/react.development.js @@ -1322,7 +1322,7 @@ exports.useTransition = function () { return resolveDispatcher().useTransition(); }; - exports.version = "19.3.0-canary-6c0e1047-20260908"; + exports.version = "19.3.0-canary-019019be-20260911"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react/cjs/react.production.js b/packages/next/src/compiled/react/cjs/react.production.js index aef16618a183..b8731f19d056 100644 --- a/packages/next/src/compiled/react/cjs/react.production.js +++ b/packages/next/src/compiled/react/cjs/react.production.js @@ -562,4 +562,4 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactSharedInternals.H.useTransition(); }; -exports.version = "19.3.0-canary-6c0e1047-20260908"; +exports.version = "19.3.0-canary-019019be-20260911"; diff --git a/packages/next/src/compiled/react/cjs/react.react-server.development.js b/packages/next/src/compiled/react/cjs/react.react-server.development.js index 26e89994cc1f..54acffc5cd32 100644 --- a/packages/next/src/compiled/react/cjs/react.react-server.development.js +++ b/packages/next/src/compiled/react/cjs/react.react-server.development.js @@ -874,5 +874,5 @@ exports.useMemo = function (create, deps) { return resolveDispatcher().useMemo(create, deps); }; - exports.version = "19.3.0-canary-6c0e1047-20260908"; + exports.version = "19.3.0-canary-019019be-20260911"; })(); diff --git a/packages/next/src/compiled/react/cjs/react.react-server.production.js b/packages/next/src/compiled/react/cjs/react.react-server.production.js index 972009626e96..24d91eaa1a0c 100644 --- a/packages/next/src/compiled/react/cjs/react.react-server.production.js +++ b/packages/next/src/compiled/react/cjs/react.react-server.production.js @@ -433,4 +433,4 @@ exports.useId = function () { exports.useMemo = function (create, deps) { return ReactSharedInternals.H.useMemo(create, deps); }; -exports.version = "19.3.0-canary-6c0e1047-20260908"; +exports.version = "19.3.0-canary-019019be-20260911"; diff --git a/packages/next/src/compiled/unistore/unistore.js b/packages/next/src/compiled/unistore/unistore.js index b442082a9a9b..cc3ca3f79138 100644 --- a/packages/next/src/compiled/unistore/unistore.js +++ b/packages/next/src/compiled/unistore/unistore.js @@ -1 +1 @@ -(()=>{var t={590:t=>{function n(t,i){for(var _ in i)t[_]=i[_];return t}t.exports=function(t){var i=[];function u(t){for(var _=[],a=0;a{var t={327:t=>{function n(t,i){for(var _ in i)t[_]=i[_];return t}t.exports=function(t){var i=[];function u(t){for(var _=[],a=0;a=0.15.0' - version: 2.2.1(react@19.3.0-canary-6c0e1047-20260908) + version: 2.2.1(react@19.3.0-canary-019019be-20260911) source-map: specifier: ^0.7.0 version: 0.7.3 @@ -1944,7 +1944,7 @@ importers: devDependencies: '@napi-rs/cli': specifier: 3.7.2 - version: 3.7.2(@emnapi/runtime@1.9.2)(@types/node@20.17.7(patch_hash=fe6957869a9b616ec526ededb72bbe846b863bd2349204218772df5c1e62d6ab))(node-addon-api@6.1.0) + version: 3.7.2(@emnapi/runtime@1.11.2)(@types/node@20.17.7(patch_hash=fe6957869a9b616ec526ededb72bbe846b863bd2349204218772df5c1e62d6ab))(node-addon-api@6.1.0) cross-env: specifier: 6.0.3 version: 6.0.3 @@ -1964,8 +1964,8 @@ importers: packages/third-parties: dependencies: react: - specifier: npm:react@19.3.0-canary-6c0e1047-20260908 - version: 19.3.0-canary-6c0e1047-20260908 + specifier: npm:react@19.3.0-canary-019019be-20260911 + version: 19.3.0-canary-019019be-20260911 third-party-capital: specifier: 1.0.20 version: 1.0.20 @@ -2028,14 +2028,14 @@ importers: specifier: 29.5.0 version: 29.5.0 react: - specifier: npm:react@19.3.0-canary-6c0e1047-20260908 - version: 19.3.0-canary-6c0e1047-20260908 + specifier: npm:react@19.3.0-canary-019019be-20260911 + version: 19.3.0-canary-019019be-20260911 react-test-renderer: specifier: 18.2.0 - version: 18.2.0(react@19.3.0-canary-6c0e1047-20260908) + version: 18.2.0(react@19.3.0-canary-019019be-20260911) styled-jsx: specifier: ^5.1.2 - version: 5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-6c0e1047-20260908) + version: 5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-019019be-20260911) packages: @@ -16007,18 +16007,18 @@ packages: resolution: {integrity: sha512-APPU8HB2uZnpl6Vt/+0AFoVYgSRtfiP6FLrZgPPTDmqSb2R4qZRbgd0A3VzIFxDt5e+Fozjx79WjLWnF69DK8g==} engines: {node: '>=16.14.0'} - react-dom@0.0.0-experimental-6c0e1047-20260908: - resolution: {integrity: sha512-/KyzP/DWJ3w+e3PrYQ4d4N3uZhT6kaIrkSTHKKoTG3a4mxkwUi3L5QucUGZsPotR1K1ztQmFCvA9/2Wupx1zXg==} + react-dom@0.0.0-experimental-019019be-20260911: + resolution: {integrity: sha512-AfLXtFN1ctuKcWXwLcuT4zem71sy4ngaH8eOceAz+VXipBlXs306LCv4AfrPzMsfFSmQ051qj+bAWtrD6U/9Tw==} peerDependencies: - react: 0.0.0-experimental-6c0e1047-20260908 + react: 0.0.0-experimental-019019be-20260911 - react-dom@19.3.0-canary-6c0e1047-20260908: - resolution: {integrity: sha512-JvxhM15VDh3GHbbS0JOlPFor+3FtLN0QDMUQSEZC3Y2K7SK+JAHyc7/5HtDyNaw+/Rjybp3B4M7RKPt40jaQ1Q==} + react-dom@19.3.0-canary-019019be-20260911: + resolution: {integrity: sha512-4xxnra/PuzGddAbhw+b6VrIdhx2WTtACav6J8w6dlZuUeLdpIpNyl14LR8En4IDf7942syyCTIOsHtOZBL2i2w==} peerDependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 - react-is@19.3.0-canary-6c0e1047-20260908: - resolution: {integrity: sha512-aZ3yapYD6bGd8PJlvvdoC1MbbDR0xI/IfaTWIX7M0ZXWqPvwX0xh49q2nUwSVzlNTBP4kWqjNoo4dTnt+xRWpQ==} + react-is@19.3.0-canary-019019be-20260911: + resolution: {integrity: sha512-MO0b5rsUgg9WvJT4xSJHpBlMk2XGBth2YLNBSyHRSMCSQ1Ja2i5JZ0kJ0KdBTrqKMDJXS/pdQCEYgBoHnU/j0w==} react-lifecycles-compat@3.0.4: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} @@ -16073,34 +16073,34 @@ packages: '@types/react': optional: true - react-server-dom-turbopack@0.0.0-experimental-6c0e1047-20260908: - resolution: {integrity: sha512-K6UMmQTknSSJglDCi4HRGuPbEkm4nPzDW+W536uptpLS8yiqxNFf/1OFYtqAuBHpbYRzkRg2zfhe7gcVhJJ0TQ==} + react-server-dom-turbopack@0.0.0-experimental-019019be-20260911: + resolution: {integrity: sha512-hAXxINcdHIPoK3MHYsbazVVlEafUf+gaH5iDx3kOaT6PQXX0N3OMxIGrF+pWgolccWbj1BXuwlN+GhyaGHmgYw==} engines: {node: '>=0.10.0'} peerDependencies: - react: 0.0.0-experimental-6c0e1047-20260908 - react-dom: 0.0.0-experimental-6c0e1047-20260908 + react: 0.0.0-experimental-019019be-20260911 + react-dom: 0.0.0-experimental-019019be-20260911 - react-server-dom-turbopack@19.3.0-canary-6c0e1047-20260908: - resolution: {integrity: sha512-bEQrTWed+1jIW5fVS5bakPKAskJ2ORi8G33TZOX0hafOrV3XchN8VTveAlaZcZMdqUilrQorVwBNI5Ht8GnF+A==} + react-server-dom-turbopack@19.3.0-canary-019019be-20260911: + resolution: {integrity: sha512-Zt2BfsfSmpQ7HU2Fud2cRjd/OiWqegM5mC6UXPUydijaAnLgXDiCxrFhiYnKLkxh1mmHSodxaaKlTn45QmRSpQ==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911 - react-server-dom-webpack@0.0.0-experimental-6c0e1047-20260908: - resolution: {integrity: sha512-mJF309fiPO/g5eajoFsqays4Ilca9NgtzDR7hgf8WSNMScYKvN+S7JlYtE3M3LhCFotFxceaIdEIgDRSrg32tQ==} + react-server-dom-webpack@0.0.0-experimental-019019be-20260911: + resolution: {integrity: sha512-tsE/Y2KDLXBcWCHvEDcYjRulDIBYlfc/NvUYmk077SqKANxjvCDyiBmGZk9e7p82IPfZ/u8ko4a3G+1l0RecxA==} engines: {node: '>=0.10.0'} peerDependencies: - react: 0.0.0-experimental-6c0e1047-20260908 - react-dom: 0.0.0-experimental-6c0e1047-20260908 + react: 0.0.0-experimental-019019be-20260911 + react-dom: 0.0.0-experimental-019019be-20260911 webpack: 5.98.0 - react-server-dom-webpack@19.3.0-canary-6c0e1047-20260908: - resolution: {integrity: sha512-RZ/gG/QdMr8sgXvtWfooIDsqq8Kc0qRjgxR7xa1tOS6e9nnYEyTdpiLh0mnPBnFD1FlQV6MHW61FJvOBkTHv8w==} + react-server-dom-webpack@19.3.0-canary-019019be-20260911: + resolution: {integrity: sha512-600dMH7dkF0wKGKumC0en8/LlbQfow2HwvfttjUmHlipyCwBieYqVN+X713mr/mlqlZyqbsCk5QLb+W950wnRw==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911 webpack: 5.98.0 react-shallow-renderer@16.15.0: @@ -16151,12 +16151,12 @@ packages: react: ^15.3.0 || ^16.0.0-alpha react-dom: ^15.3.0 || ^16.0.0-alpha - react@0.0.0-experimental-6c0e1047-20260908: - resolution: {integrity: sha512-4Te072JIgBo91NYzzp8aOov+gUj9aVxBCq6Gx+lhdBFTWkgX4bGTW9HyjvI/BENfpTDatnQ1KXMur7Ze43GNjw==} + react@0.0.0-experimental-019019be-20260911: + resolution: {integrity: sha512-9vIvq/7kC6qJ/38Xt1xd+dWVeM/Pgr/WqmmhXY82wrkrgvvwDxgzAl3QW6x+M5i8lbcSmTQMadTOWnPBY4b0Sw==} engines: {node: '>=0.10.0'} - react@19.3.0-canary-6c0e1047-20260908: - resolution: {integrity: sha512-jWrDgsqef21ynhNh9fLfzuCvrWY+QrWDpkDfJUrcwCd0ttwKyoq5vlzByb20hfZMEOOm1KkFOBm5o1RbkuLoOQ==} + react@19.3.0-canary-019019be-20260911: + resolution: {integrity: sha512-V5rDav6NZ5Pl0T3jxSop3mFPh/AMsfCBZXhlp8hgZ4iWhch5PDSDoRy98+D1mDT8HHxOhIgmxk8qc7yJ84KOuQ==} engines: {node: '>=0.10.0'} read-all-stream@3.1.0: @@ -16688,11 +16688,11 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.0.0-experimental-6c0e1047-20260908: - resolution: {integrity: sha512-Fa71LOoNBpyoKYTbwcgODk1ev/BETkhXA7hcQkk9EePNjE1cbo7kq4R4tyZz8lBA1c3T5dtwnJSQqR5WSf0c2g==} + scheduler@0.0.0-experimental-019019be-20260911: + resolution: {integrity: sha512-8ztgM1FQdRhClSqpsf/m3khKpZkeNEZj1bE+hTVcE6GJ6lhiOPeWQzsKougAnWnEBTBitLK5RR5LTcq4z3IEaQ==} - scheduler@0.28.0-canary-6c0e1047-20260908: - resolution: {integrity: sha512-JL47KN4FfQMWNeu/ROA4IPyxnIN8PqfP+54hHrfvUZ4NtAkfk1tGKosCs7HfCorr60eAG7LwjlwJ0A8wLP5eMg==} + scheduler@0.28.0-canary-019019be-20260911: + resolution: {integrity: sha512-3sBZZREI5vnnN3FM/igmS0bFKvVPEskqzinLLOhrM3foMMIsFtJ3tRBydDu7UGKzFmuEhxwa6aahfZ/rPDLVYw==} schema-utils@2.7.1: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} @@ -20006,28 +20006,28 @@ snapshots: '@balena/dockerignore@1.0.2': {} - '@base-ui-components/react@1.0.0-beta.2(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@base-ui-components/react@1.0.0-beta.2(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: '@babel/runtime': 7.27.6 - '@base-ui-components/utils': 0.1.0(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) + '@base-ui-components/utils': 0.1.0(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) '@floating-ui/utils': 0.2.10 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) reselect: 5.1.1 tabbable: 6.2.0 - use-sync-external-store: 1.5.0(react@19.3.0-canary-6c0e1047-20260908) + use-sync-external-store: 1.5.0(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 - '@base-ui-components/utils@0.1.0(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@base-ui-components/utils@0.1.0(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: '@babel/runtime': 7.27.6 '@floating-ui/utils': 0.2.10 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) reselect: 5.1.1 - use-sync-external-store: 1.5.0(react@19.3.0-canary-6c0e1047-20260908) + use-sync-external-store: 1.5.0(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 @@ -20225,17 +20225,17 @@ snapshots: '@emotion/memoize@0.8.1': {} - '@emotion/react@11.11.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@emotion/react@11.11.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: '@babel/runtime': 7.27.0 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.2 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@19.3.0-canary-6c0e1047-20260908) + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@19.3.0-canary-019019be-20260911) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 hoist-non-react-statics: 3.3.2 - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 transitivePeerDependencies: @@ -20253,9 +20253,9 @@ snapshots: '@emotion/unitless@0.8.1': {} - '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@19.3.0-canary-6c0e1047-20260908)': + '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 '@emotion/utils@1.2.1': {} @@ -20677,24 +20677,24 @@ snapshots: '@floating-ui/core': 1.7.3 '@floating-ui/utils': 0.2.10 - '@floating-ui/react-dom@2.1.0(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@floating-ui/react-dom@2.1.0(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: '@floating-ui/dom': 1.7.3 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) - '@floating-ui/react-dom@2.1.5(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@floating-ui/react-dom@2.1.5(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: '@floating-ui/dom': 1.7.3 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) - '@floating-ui/react@0.26.16(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@floating-ui/react@0.26.16(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@floating-ui/react-dom': 2.1.0(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) + '@floating-ui/react-dom': 2.1.0(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) '@floating-ui/utils': 0.2.2 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) tabbable: 6.2.0 '@floating-ui/utils@0.2.10': {} @@ -21705,23 +21705,23 @@ snapshots: dependencies: call-bind: 1.0.8 - '@mantine/core@7.10.1(@mantine/hooks@7.10.1(react@19.3.0-canary-6c0e1047-20260908))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@mantine/core@7.10.1(@mantine/hooks@7.10.1(react@19.3.0-canary-019019be-20260911))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@floating-ui/react': 0.26.16(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@mantine/hooks': 7.10.1(react@19.3.0-canary-6c0e1047-20260908) + '@floating-ui/react': 0.26.16(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@mantine/hooks': 7.10.1(react@19.3.0-canary-019019be-20260911) clsx: 2.1.1 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) - react-number-format: 5.4.0(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - react-remove-scroll: 2.5.10(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react-textarea-autosize: 8.5.3(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) + react-number-format: 5.4.0(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + react-remove-scroll: 2.5.10(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react-textarea-autosize: 8.5.3(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) type-fest: 4.18.3 transitivePeerDependencies: - '@types/react' - '@mantine/hooks@7.10.1(react@19.3.0-canary-6c0e1047-20260908)': + '@mantine/hooks@7.10.1(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 '@mapbox/node-pre-gyp@2.0.3(encoding@0.1.13)': dependencies: @@ -21766,17 +21766,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@2.2.1(react@19.3.0-canary-6c0e1047-20260908)': + '@mdx-js/react@2.2.1(react@19.3.0-canary-019019be-20260911)': dependencies: '@types/mdx': 2.0.13 '@types/react': 19.2.18 - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 - '@mdx-js/react@3.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@mdx-js/react@3.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: '@types/mdx': 2.0.13 '@types/react': 19.2.18 - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 '@modelcontextprotocol/sdk@1.18.1(patch_hash=680fe4edb7abd1de29d08cdf217a22506e815a8cc1c2282201d5d47aa3e5da12)': dependencies: @@ -21842,7 +21842,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@napi-rs/cli@3.7.2(@emnapi/runtime@1.9.2)(@types/node@20.17.7(patch_hash=fe6957869a9b616ec526ededb72bbe846b863bd2349204218772df5c1e62d6ab))(node-addon-api@6.1.0)': + '@napi-rs/cli@3.7.2(@emnapi/runtime@1.11.2)(@types/node@20.17.7(patch_hash=fe6957869a9b616ec526ededb72bbe846b863bd2349204218772df5c1e62d6ab))(node-addon-api@6.1.0)': dependencies: '@inquirer/prompts': 8.5.2(@types/node@20.17.7(patch_hash=fe6957869a9b616ec526ededb72bbe846b863bd2349204218772df5c1e62d6ab)) '@napi-rs/cross-toolchain': 1.0.3 @@ -21857,7 +21857,7 @@ snapshots: semver: 7.8.5 typanion: 3.14.0 optionalDependencies: - '@emnapi/runtime': 1.9.2 + '@emnapi/runtime': 1.11.2 transitivePeerDependencies: - '@napi-rs/cross-toolchain-arm64-target-aarch64' - '@napi-rs/cross-toolchain-arm64-target-armv7' @@ -22841,589 +22841,589 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-arrow@1.1.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-arrow@1.1.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-arrow@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-arrow@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-collection@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-collection@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-slot': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-slot': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-compose-refs@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-compose-refs@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-compose-refs@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-compose-refs@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-context@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-context@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-context@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-context@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-context@1.1.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-context@1.1.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-dialog@1.1.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-dialog@1.1.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-slot': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-id': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-slot': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) aria-hidden: 1.2.6 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) - react-remove-scroll: 2.7.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) + react-remove-scroll: 2.7.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-direction@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-direction@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-direction@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-direction@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-dismissable-layer@1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-dismissable-layer@1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-focus-guards@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-focus-guards@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-focus-scope@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-focus-scope@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-id@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-id@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-id@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-id@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-popover@1.1.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-popover@1.1.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-slot': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-id': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-slot': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) aria-hidden: 1.2.6 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) - react-remove-scroll: 2.7.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) + react-remove-scroll: 2.7.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-popper@1.2.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': - dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-arrow': 1.1.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-context': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-popper@1.2.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': + dependencies: + '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-arrow': 1.1.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-context': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) '@radix-ui/rect': 1.1.0 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-popper@1.2.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': - dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-arrow': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-popper@1.2.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': + dependencies: + '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-arrow': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) '@radix-ui/rect': 1.1.0 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': - dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': + dependencies: + '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) '@radix-ui/rect': 1.1.1 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-portal@1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-portal@1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-portal@1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-portal@1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-presence@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-presence@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-presence@1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-presence@1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-primitive@2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-primitive@2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-slot': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-slot': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-slot': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-slot': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-direction': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-direction': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-id': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) aria-hidden: 1.2.6 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) - react-remove-scroll: 2.7.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) + react-remove-scroll: 2.7.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-slot@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-slot@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-slot@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-slot@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-slot@1.2.3(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-slot@1.2.3(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-toggle-group@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-toggle-group@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-direction': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-toggle': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-direction': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-toggle': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-toggle@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-toggle@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-tooltip@1.1.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-tooltip@1.1.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-portal': 1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-presence': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-slot': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-id': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-slot': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-rect@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-use-rect@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: '@radix-ui/rect': 1.1.0 - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: '@radix-ui/rect': 1.1.1 - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-size@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-use-size@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) @@ -23730,12 +23730,12 @@ snapshots: '@storybook/addon-docs@8.6.0(@types/react@19.2.18)(storybook@8.6.0(prettier@3.6.2))': dependencies: - '@mdx-js/react': 3.1.0(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@storybook/blocks': 8.6.0(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)(storybook@8.6.0(prettier@3.6.2)) + '@mdx-js/react': 3.1.0(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@storybook/blocks': 8.6.0(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)(storybook@8.6.0(prettier@3.6.2)) '@storybook/csf-plugin': 8.6.0(storybook@8.6.0(prettier@3.6.2)) - '@storybook/react-dom-shim': 8.6.0(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)(storybook@8.6.0(prettier@3.6.2)) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@storybook/react-dom-shim': 8.6.0(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)(storybook@8.6.0(prettier@3.6.2)) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) storybook: 8.6.0(prettier@3.6.2) ts-dedent: 2.2.0 transitivePeerDependencies: @@ -23800,14 +23800,14 @@ snapshots: - '@swc/helpers' - webpack - '@storybook/blocks@8.6.0(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)(storybook@8.6.0(prettier@3.6.2))': + '@storybook/blocks@8.6.0(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)(storybook@8.6.0(prettier@3.6.2))': dependencies: - '@storybook/icons': 1.3.0(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) + '@storybook/icons': 1.3.0(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) storybook: 8.6.0(prettier@3.6.2) ts-dedent: 2.2.0 optionalDependencies: - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) '@storybook/builder-webpack5@8.6.0(@rspack/core@1.6.7(patch_hash=4cf28ea116b0e27c7c80b09035905f9d16a7b18d1f2b7d312fc80d42cd57068d)(@swc/helpers@0.5.23))(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2)': dependencies: @@ -23886,10 +23886,10 @@ snapshots: '@storybook/global@5.0.0': {} - '@storybook/icons@1.3.0(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@storybook/icons@1.3.0(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) '@storybook/instrumenter@8.6.0(storybook@8.6.0(prettier@3.6.2))': dependencies: @@ -23901,17 +23901,17 @@ snapshots: dependencies: storybook: 8.6.0(prettier@3.6.2) - '@storybook/preset-react-webpack@8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2)': + '@storybook/preset-react-webpack@8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2)': dependencies: '@storybook/core-webpack': 8.6.0(storybook@8.6.0(prettier@3.6.2)) - '@storybook/react': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2) + '@storybook/react': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@6.0.2)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)) '@types/semver': 7.5.6 find-up: 5.0.0 magic-string: 0.30.19 - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 react-docgen: 7.1.0 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) resolve: 1.22.10 semver: 7.6.3 storybook: 8.6.0(prettier@3.6.2) @@ -23945,19 +23945,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/react-dom-shim@8.6.0(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)(storybook@8.6.0(prettier@3.6.2))': + '@storybook/react-dom-shim@8.6.0(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)(storybook@8.6.0(prettier@3.6.2))': dependencies: - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) storybook: 8.6.0(prettier@3.6.2) - '@storybook/react-webpack5@8.6.0(@rspack/core@1.6.7(patch_hash=4cf28ea116b0e27c7c80b09035905f9d16a7b18d1f2b7d312fc80d42cd57068d)(@swc/helpers@0.5.23))(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2)': + '@storybook/react-webpack5@8.6.0(@rspack/core@1.6.7(patch_hash=4cf28ea116b0e27c7c80b09035905f9d16a7b18d1f2b7d312fc80d42cd57068d)(@swc/helpers@0.5.23))(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2)': dependencies: '@storybook/builder-webpack5': 8.6.0(@rspack/core@1.6.7(patch_hash=4cf28ea116b0e27c7c80b09035905f9d16a7b18d1f2b7d312fc80d42cd57068d)(@swc/helpers@0.5.23))(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2) - '@storybook/preset-react-webpack': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2) - '@storybook/react': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + '@storybook/preset-react-webpack': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2) + '@storybook/react': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) storybook: 8.6.0(prettier@3.6.2) optionalDependencies: typescript: 6.0.2 @@ -23970,16 +23970,16 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react@8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2)': + '@storybook/react@8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2)': dependencies: '@storybook/components': 8.6.0(storybook@8.6.0(prettier@3.6.2)) '@storybook/global': 5.0.0 '@storybook/manager-api': 8.6.0(storybook@8.6.0(prettier@3.6.2)) '@storybook/preview-api': 8.6.0(storybook@8.6.0(prettier@3.6.2)) - '@storybook/react-dom-shim': 8.6.0(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)(storybook@8.6.0(prettier@3.6.2)) + '@storybook/react-dom-shim': 8.6.0(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)(storybook@8.6.0(prettier@3.6.2)) '@storybook/theming': 8.6.0(storybook@8.6.0(prettier@3.6.2)) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) storybook: 8.6.0(prettier@3.6.2) optionalDependencies: '@storybook/test': 8.6.0(storybook@8.6.0(prettier@3.6.2)) @@ -24261,13 +24261,13 @@ snapshots: lodash: 4.18.1 redent: 3.0.0 - '@testing-library/react@15.0.7(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)': + '@testing-library/react@15.0.7(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)': dependencies: '@babel/runtime': 7.27.0 '@testing-library/dom': 10.1.0 '@types/react-dom': 19.2.4(@types/react@19.2.18) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 @@ -26553,14 +26553,14 @@ snapshots: cmd-shim@7.0.0: {} - cmdk@1.0.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908): + cmdk@1.0.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911): dependencies: - '@radix-ui/react-dialog': 1.1.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908) - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) - use-sync-external-store: 1.5.0(react@19.3.0-canary-6c0e1047-20260908) + '@radix-ui/react-dialog': 1.1.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) + use-sync-external-store: 1.5.0(react@19.3.0-canary-019019be-20260911) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -29993,7 +29993,7 @@ snapshots: hoist-non-react-statics@3.3.2: dependencies: - react-is: 19.3.0-canary-6c0e1047-20260908 + react-is: 19.3.0-canary-019019be-20260911 homedir-polyfill@1.0.3: dependencies: @@ -32211,13 +32211,13 @@ snapshots: lru-cache@7.18.3: {} - lucide-react@0.383.0(react@19.3.0-canary-6c0e1047-20260908): + lucide-react@0.383.0(react@19.3.0-canary-019019be-20260911): dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 - lucide-react@0.554.0(react@19.3.0-canary-6c0e1047-20260908): + lucide-react@0.554.0(react@19.3.0-canary-019019be-20260911): dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 lz-string@1.5.0: {} @@ -33425,23 +33425,23 @@ snapshots: dependencies: inherits: 2.0.4 - next-themes@0.4.6(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908): + next-themes@0.4.6(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911): dependencies: - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) next-tick@1.0.0: {} - next@16.2.3(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-1371fcb-20260227)(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)(sass@1.77.8): + next@16.2.3(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-1371fcb-20260227)(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)(sass@1.77.8): dependencies: '@next/env': 16.2.3 '@swc/helpers': 0.5.15 baseline-browser-mapping: 2.9.19 caniuse-lite: 1.0.30001746 postcss: 8.5.23 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) - styled-jsx: 5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) + styled-jsx: 5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@next/swc-darwin-arm64': 16.2.3 '@next/swc-darwin-x64': 16.2.3 @@ -35144,31 +35144,31 @@ snapshots: dependencies: ansi-regex: 5.0.1 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-6c0e1047-20260908 + react-is: 19.3.0-canary-019019be-20260911 pretty-format@29.5.0: dependencies: '@jest/schemas': 29.4.3 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-6c0e1047-20260908 + react-is: 19.3.0-canary-019019be-20260911 pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-6c0e1047-20260908 + react-is: 19.3.0-canary-019019be-20260911 pretty-format@30.0.0-alpha.6: dependencies: '@jest/schemas': 30.0.0-alpha.6 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-6c0e1047-20260908 + react-is: 19.3.0-canary-019019be-20260911 pretty-format@30.2.0: dependencies: '@jest/schemas': 30.0.5 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-6c0e1047-20260908 + react-is: 19.3.0-canary-019019be-20260911 pretty-ms@7.0.0: dependencies: @@ -35230,7 +35230,7 @@ snapshots: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 - react-is: 19.3.0-canary-6c0e1047-20260908 + react-is: 19.3.0-canary-019019be-20260911 property-information@5.6.0: dependencies: @@ -35453,157 +35453,157 @@ snapshots: transitivePeerDependencies: - supports-color - react-dom@0.0.0-experimental-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908): + react-dom@0.0.0-experimental-019019be-20260911(react@19.3.0-canary-019019be-20260911): dependencies: - react: 19.3.0-canary-6c0e1047-20260908 - scheduler: 0.28.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 + scheduler: 0.28.0-canary-019019be-20260911 - react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908): + react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911): dependencies: - react: 19.3.0-canary-6c0e1047-20260908 - scheduler: 0.28.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 + scheduler: 0.28.0-canary-019019be-20260911 - react-is@19.3.0-canary-6c0e1047-20260908: {} + react-is@19.3.0-canary-019019be-20260911: {} react-lifecycles-compat@3.0.4: {} - react-number-format@5.4.0(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908): + react-number-format@5.4.0(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911): dependencies: prop-types: 15.8.1 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) react-refresh@0.12.0: {} - react-remove-scroll-bar@2.3.6(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908): + react-remove-scroll-bar@2.3.6(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911): dependencies: - react: 19.3.0-canary-6c0e1047-20260908 - react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.18 - react-remove-scroll-bar@2.3.8(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908): + react-remove-scroll-bar@2.3.8(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911): dependencies: - react: 19.3.0-canary-6c0e1047-20260908 - react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.18 - react-remove-scroll@2.5.10(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908): + react-remove-scroll@2.5.10(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911): dependencies: - react: 19.3.0-canary-6c0e1047-20260908 - react-remove-scroll-bar: 2.3.6(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react-style-singleton: 2.2.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-remove-scroll-bar: 2.3.6(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react-style-singleton: 2.2.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) tslib: 2.8.1 - use-callback-ref: 1.3.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - use-sidecar: 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + use-callback-ref: 1.3.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + use-sidecar: 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 - react-remove-scroll@2.7.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908): + react-remove-scroll@2.7.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911): dependencies: - react: 19.3.0-canary-6c0e1047-20260908 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) - use-sidecar: 1.1.3(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + use-callback-ref: 1.3.3(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) + use-sidecar: 1.1.3(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 - react-server-dom-turbopack@0.0.0-experimental-6c0e1047-20260908(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908): + react-server-dom-turbopack@0.0.0-experimental-019019be-20260911(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) - react-server-dom-turbopack@19.3.0-canary-6c0e1047-20260908(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908): + react-server-dom-turbopack@19.3.0-canary-019019be-20260911(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) - react-server-dom-webpack@0.0.0-experimental-6c0e1047-20260908(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.23))): + react-server-dom-webpack@0.0.0-experimental-019019be-20260911(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.23))): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) webpack: 5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.23)) webpack-sources: 3.2.3(patch_hash=26afc15966a3fc37a3d1d366312a95ce66723513f6a3a720e4166a37147da8bd) - react-server-dom-webpack@19.3.0-canary-6c0e1047-20260908(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.23))): + react-server-dom-webpack@19.3.0-canary-019019be-20260911(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.23))): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) webpack: 5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.23)) webpack-sources: 3.2.3(patch_hash=26afc15966a3fc37a3d1d366312a95ce66723513f6a3a720e4166a37147da8bd) - react-shallow-renderer@16.15.0(react@19.3.0-canary-6c0e1047-20260908): + react-shallow-renderer@16.15.0(react@19.3.0-canary-019019be-20260911): dependencies: object-assign: 4.1.1 - react: 19.3.0-canary-6c0e1047-20260908 - react-is: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 + react-is: 19.3.0-canary-019019be-20260911 - react-ssr-prepass@1.0.8(react-is@19.3.0-canary-6c0e1047-20260908)(react@19.3.0-canary-6c0e1047-20260908): + react-ssr-prepass@1.0.8(react-is@19.3.0-canary-019019be-20260911)(react@19.3.0-canary-019019be-20260911): dependencies: object-is: 1.0.2 - react: 19.3.0-canary-6c0e1047-20260908 - react-is: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 + react-is: 19.3.0-canary-019019be-20260911 - react-style-singleton@2.2.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908): + react-style-singleton@2.2.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911): dependencies: get-nonce: 1.0.1 invariant: 2.2.4 - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.18 - react-style-singleton@2.2.3(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908): + react-style-singleton@2.2.3(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911): dependencies: get-nonce: 1.0.1 - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.18 - react-test-renderer@18.2.0(react@19.3.0-canary-6c0e1047-20260908): + react-test-renderer@18.2.0(react@19.3.0-canary-019019be-20260911): dependencies: - react: 19.3.0-canary-6c0e1047-20260908 - react-is: 19.3.0-canary-6c0e1047-20260908 - react-shallow-renderer: 16.15.0(react@19.3.0-canary-6c0e1047-20260908) - scheduler: 0.28.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 + react-is: 19.3.0-canary-019019be-20260911 + react-shallow-renderer: 16.15.0(react@19.3.0-canary-019019be-20260911) + scheduler: 0.28.0-canary-019019be-20260911 - react-textarea-autosize@8.5.3(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908): + react-textarea-autosize@8.5.3(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911): dependencies: '@babel/runtime': 7.27.0 - react: 19.3.0-canary-6c0e1047-20260908 - use-composed-ref: 1.3.0(react@19.3.0-canary-6c0e1047-20260908) - use-latest: 1.2.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + use-composed-ref: 1.3.0(react@19.3.0-canary-019019be-20260911) + use-latest: 1.2.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) transitivePeerDependencies: - '@types/react' - react-virtualized@9.22.3(react-dom@19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908))(react@19.3.0-canary-6c0e1047-20260908): + react-virtualized@9.22.3(react-dom@19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911))(react@19.3.0-canary-019019be-20260911): dependencies: '@babel/runtime': 7.27.0 clsx: 1.1.1 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.3.0-canary-6c0e1047-20260908 - react-dom: 19.3.0-canary-6c0e1047-20260908(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + react-dom: 19.3.0-canary-019019be-20260911(react@19.3.0-canary-019019be-20260911) react-lifecycles-compat: 3.0.4 - react@0.0.0-experimental-6c0e1047-20260908: {} + react@0.0.0-experimental-019019be-20260911: {} - react@19.3.0-canary-6c0e1047-20260908: {} + react@19.3.0-canary-019019be-20260911: {} read-all-stream@3.1.0: dependencies: @@ -36294,9 +36294,9 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.0.0-experimental-6c0e1047-20260908: {} + scheduler@0.0.0-experimental-019019be-20260911: {} - scheduler@0.28.0-canary-6c0e1047-20260908: {} + scheduler@0.28.0-canary-019019be-20260911: {} schema-utils@2.7.1: dependencies: @@ -37176,10 +37176,10 @@ snapshots: postcss: 8.5.23 postcss-load-plugins: 2.3.0 - styled-jsx@5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-6c0e1047-20260908): + styled-jsx@5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-019019be-20260911): dependencies: client-only: 0.0.1 - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@babel/core': 7.26.10 babel-plugin-macros: 3.1.0 @@ -37279,11 +37279,11 @@ snapshots: '@swc/counter': 0.1.3 webpack: 5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9) - swr@2.2.4(react@19.3.0-canary-6c0e1047-20260908): + swr@2.2.4(react@19.3.0-canary-019019be-20260911): dependencies: client-only: 0.0.1 - react: 19.3.0-canary-6c0e1047-20260908 - use-sync-external-store: 1.5.0(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + use-sync-external-store: 1.5.0(react@19.3.0-canary-019019be-20260911) symbol-tree@3.2.4: {} @@ -38109,9 +38109,9 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - unistore@3.4.1(react@19.3.0-canary-6c0e1047-20260908): + unistore@3.4.1(react@19.3.0-canary-019019be-20260911): optionalDependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 universal-github-app-jwt@1.1.1: dependencies: @@ -38228,56 +38228,56 @@ snapshots: punycode: 1.4.1 qs: 6.14.0 - use-callback-ref@1.3.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908): + use-callback-ref@1.3.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911): dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.18 - use-callback-ref@1.3.3(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908): + use-callback-ref@1.3.3(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911): dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.18 - use-composed-ref@1.3.0(react@19.3.0-canary-6c0e1047-20260908): + use-composed-ref@1.3.0(react@19.3.0-canary-019019be-20260911): dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 - use-isomorphic-layout-effect@1.1.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908): + use-isomorphic-layout-effect@1.1.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911): dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 optionalDependencies: '@types/react': 19.2.18 - use-latest@1.2.1(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908): + use-latest@1.2.1(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911): dependencies: - react: 19.3.0-canary-6c0e1047-20260908 - use-isomorphic-layout-effect: 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908) + react: 19.3.0-canary-019019be-20260911 + use-isomorphic-layout-effect: 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911) optionalDependencies: '@types/react': 19.2.18 - use-sidecar@1.1.2(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908): + use-sidecar@1.1.2(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911): dependencies: detect-node-es: 1.1.0 - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.18 - use-sidecar@1.1.3(@types/react@19.2.18)(react@19.3.0-canary-6c0e1047-20260908): + use-sidecar@1.1.3(@types/react@19.2.18)(react@19.3.0-canary-019019be-20260911): dependencies: detect-node-es: 1.1.0 - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.18 - use-sync-external-store@1.5.0(react@19.3.0-canary-6c0e1047-20260908): + use-sync-external-store@1.5.0(react@19.3.0-canary-019019be-20260911): dependencies: - react: 19.3.0-canary-6c0e1047-20260908 + react: 19.3.0-canary-019019be-20260911 util-deprecate@1.0.2: {} diff --git a/run-tests.js b/run-tests.js index 9bd774d1dcf8..5657ce38ea87 100644 --- a/run-tests.js +++ b/run-tests.js @@ -156,7 +156,7 @@ class TestProfile { // Do not rename or format. sync-react script relies on this line. // prettier-ignore -const nextjsReactPeerVersion = "19.2.8"; +const nextjsReactPeerVersion = "19.3.0"; let argv = require('yargs/yargs')(process.argv.slice(2)) .string('type') diff --git a/test/.stats-app/package.json b/test/.stats-app/package.json index 0d2abbe2ce43..13f0e14e29bc 100644 --- a/test/.stats-app/package.json +++ b/test/.stats-app/package.json @@ -4,8 +4,8 @@ "license": "MIT", "dependencies": { "next": "latest", - "react": "19.2.8", - "react-dom": "19.2.8" + "react": "19.3.0", + "react-dom": "19.3.0" }, "engines": { "node": ">=20.9.0" diff --git a/test/e2e/next-test/first-time-setup-js/package.json b/test/e2e/next-test/first-time-setup-js/package.json index 850bee827751..e16136a6ef1f 100644 --- a/test/e2e/next-test/first-time-setup-js/package.json +++ b/test/e2e/next-test/first-time-setup-js/package.json @@ -8,7 +8,7 @@ }, "dependencies": { "next": "canary", - "react": "19.2.8", - "react-dom": "19.2.8" + "react": "19.3.0", + "react-dom": "19.3.0" } } diff --git a/test/e2e/next-test/first-time-setup-ts/package.json b/test/e2e/next-test/first-time-setup-ts/package.json index aaa14d5eea8e..31f1b6d55d54 100644 --- a/test/e2e/next-test/first-time-setup-ts/package.json +++ b/test/e2e/next-test/first-time-setup-ts/package.json @@ -8,8 +8,8 @@ }, "dependencies": { "next": "canary", - "react": "19.2.8", - "react-dom": "19.2.8" + "react": "19.3.0", + "react-dom": "19.3.0" }, "devDependencies": { "@types/react": "^18", diff --git a/test/lib/next-modes/base.ts b/test/lib/next-modes/base.ts index 1180327e2d77..7fd09cf47123 100644 --- a/test/lib/next-modes/base.ts +++ b/test/lib/next-modes/base.ts @@ -85,7 +85,7 @@ type OmitFirstArgument = F extends ( // Do not rename or format. sync-react script relies on this line. // prettier-ignore -const nextjsReactPeerVersion = "19.2.8"; +const nextjsReactPeerVersion = "19.3.0"; const ROOT_PACKAGE_MANAGER: string = require('../../../package.json').packageManager From 30d6d8f4975839faa01edc4677f6cb300052ff75 Mon Sep 17 00:00:00 2001 From: Jimmy Miller Date: Fri, 11 Sep 2026 13:05:03 -0600 Subject: [PATCH 5/5] Adds this.mode for webpack loaders (#98532) Pretty straightforward. But a number of loaders depend on it including - postcss-loader - sass-loader - stylus-loader - vue-loader - nunjucks-loader - thread-loader --- .../next-core/src/next_shared/webpack_rules/mod.rs | 6 ++++++ .../05-config/01-next-config-js/turbopack.mdx | 5 ----- test/development/sass-error/index.test.ts | 11 ++++++++--- .../app/client.misc-test.js} | 0 .../app/layout.tsx | 0 test/e2e/app-dir/webpack-loader-misc/app/page.tsx | 12 ++++++++++++ .../webpack-loader-misc/app/server.misc-test.js | 4 ++++ test/e2e/app-dir/webpack-loader-misc/misc-loader.js | 5 +++++ .../next.config.ts | 6 +++--- .../webpack-loader-misc.test.ts} | 7 ++++--- test/e2e/app-dir/webpack-loader-target/app/page.tsx | 11 ----------- .../webpack-loader-target/app/server.target-test.js | 3 --- .../app-dir/webpack-loader-target/target-loader.js | 3 --- .../js/src/transforms/webpack-loaders.ts | 2 ++ .../crates/turbopack-node/src/transforms/webpack.rs | 4 ++++ turbopack/crates/turbopack/src/lib.rs | 1 + turbopack/crates/turbopack/src/module_options/mod.rs | 1 + .../src/module_options/module_options_context.rs | 1 + 18 files changed, 51 insertions(+), 31 deletions(-) rename test/e2e/app-dir/{webpack-loader-target/app/client.target-test.js => webpack-loader-misc/app/client.misc-test.js} (100%) rename test/e2e/app-dir/{webpack-loader-target => webpack-loader-misc}/app/layout.tsx (100%) create mode 100644 test/e2e/app-dir/webpack-loader-misc/app/page.tsx create mode 100644 test/e2e/app-dir/webpack-loader-misc/app/server.misc-test.js create mode 100644 test/e2e/app-dir/webpack-loader-misc/misc-loader.js rename test/e2e/app-dir/{webpack-loader-target => webpack-loader-misc}/next.config.ts (70%) rename test/e2e/app-dir/{webpack-loader-target/webpack-loader-target.test.ts => webpack-loader-misc/webpack-loader-misc.test.ts} (60%) delete mode 100644 test/e2e/app-dir/webpack-loader-target/app/page.tsx delete mode 100644 test/e2e/app-dir/webpack-loader-target/app/server.target-test.js delete mode 100644 test/e2e/app-dir/webpack-loader-target/target-loader.js diff --git a/crates/next-core/src/next_shared/webpack_rules/mod.rs b/crates/next-core/src/next_shared/webpack_rules/mod.rs index 287bce40ed0b..94a59d1628ec 100644 --- a/crates/next-core/src/next_shared/webpack_rules/mod.rs +++ b/crates/next-core/src/next_shared/webpack_rules/mod.rs @@ -157,6 +157,11 @@ pub async fn webpack_loader_options( rcstr!("web") }, ); + let mode = if builtin_conditions.contains(&WebpackLoaderBuiltinCondition::Development) { + rcstr!("development") + } else { + rcstr!("production") + }; Ok(Vc::cell(Some( WebpackLoadersOptions { @@ -166,6 +171,7 @@ pub async fn webpack_loader_options( .to_resolved() .await?, target, + mode, } .resolved_cell(), ))) diff --git a/docs/01-app/03-api-reference/05-config/01-next-config-js/turbopack.mdx b/docs/01-app/03-api-reference/05-config/01-next-config-js/turbopack.mdx index 8f3ac62d71d6..89cba5c919d0 100644 --- a/docs/01-app/03-api-reference/05-config/01-next-config-js/turbopack.mdx +++ b/docs/01-app/03-api-reference/05-config/01-next-config-js/turbopack.mdx @@ -79,11 +79,6 @@ Turbopack uses the [`loader-runner`](https://github.com/webpack/loader-runner) l - [`fs`](https://webpack.js.org/api/loaders/#thisfs) - Partial support: only `fs.readFile` is currently implemented. - [`emitFile`](https://webpack.js.org/api/loaders/#thisemitfile) - No support -**Context properties:** - -- [`version`](https://webpack.js.org/api/loaders/#thisversion) - No support -- [`mode`](https://webpack.js.org/api/loaders/#thismode) - No support - **Utilities:** - [`utils`](https://webpack.js.org/api/loaders/#thisutils) - No support diff --git a/test/development/sass-error/index.test.ts b/test/development/sass-error/index.test.ts index 2d4d4f57aef7..1031a7bf5627 100644 --- a/test/development/sass-error/index.test.ts +++ b/test/development/sass-error/index.test.ts @@ -38,9 +38,14 @@ describe('app dir - css', () => { Pseudo-elements like '::before' or '::after' can't be followed by selectors like 'Ident("path")' Generated code of PostCSS transform of loaders [next/dist/build/webpack/loaders/resolve-url-loader/index, next/dist/compiled/sass-loader] transform of file content of app/global.scss: - ./app/global.scss.css:1:884 - > 1 | ...ate(-50%, 0px)}input.defaultCheckbox::before path{fill:currentColor}input:checked.defaul... - | ^ + ./app/global.scss.css:46:30 + 44 | } + 45 | + > 46 | input.defaultCheckbox::before path { + | ^ + 47 | fill: currentColor; + 48 | } + 49 | Import trace: Client Component Browser: diff --git a/test/e2e/app-dir/webpack-loader-target/app/client.target-test.js b/test/e2e/app-dir/webpack-loader-misc/app/client.misc-test.js similarity index 100% rename from test/e2e/app-dir/webpack-loader-target/app/client.target-test.js rename to test/e2e/app-dir/webpack-loader-misc/app/client.misc-test.js diff --git a/test/e2e/app-dir/webpack-loader-target/app/layout.tsx b/test/e2e/app-dir/webpack-loader-misc/app/layout.tsx similarity index 100% rename from test/e2e/app-dir/webpack-loader-target/app/layout.tsx rename to test/e2e/app-dir/webpack-loader-misc/app/layout.tsx diff --git a/test/e2e/app-dir/webpack-loader-misc/app/page.tsx b/test/e2e/app-dir/webpack-loader-misc/app/page.tsx new file mode 100644 index 000000000000..4b8364b89a8e --- /dev/null +++ b/test/e2e/app-dir/webpack-loader-misc/app/page.tsx @@ -0,0 +1,12 @@ +import ClientTarget from './client.misc-test' +import { mode, target } from './server.misc-test' + +export default function Page() { + return ( +
+

{JSON.stringify(target)}

+

{mode}

+ +
+ ) +} diff --git a/test/e2e/app-dir/webpack-loader-misc/app/server.misc-test.js b/test/e2e/app-dir/webpack-loader-misc/app/server.misc-test.js new file mode 100644 index 000000000000..ebe3cc3f2523 --- /dev/null +++ b/test/e2e/app-dir/webpack-loader-misc/app/server.misc-test.js @@ -0,0 +1,4 @@ +export const target = '__TARGET__' +export const mode = '__MODE__' + +export default target diff --git a/test/e2e/app-dir/webpack-loader-misc/misc-loader.js b/test/e2e/app-dir/webpack-loader-misc/misc-loader.js new file mode 100644 index 000000000000..e0e932d8b06a --- /dev/null +++ b/test/e2e/app-dir/webpack-loader-misc/misc-loader.js @@ -0,0 +1,5 @@ +module.exports = function (source) { + return source + .replaceAll("'__TARGET__'", JSON.stringify(this.target)) + .replaceAll("'__MODE__'", JSON.stringify(this.mode)) +} diff --git a/test/e2e/app-dir/webpack-loader-target/next.config.ts b/test/e2e/app-dir/webpack-loader-misc/next.config.ts similarity index 70% rename from test/e2e/app-dir/webpack-loader-target/next.config.ts rename to test/e2e/app-dir/webpack-loader-misc/next.config.ts index f6dc4d75a036..1bb19df91445 100644 --- a/test/e2e/app-dir/webpack-loader-target/next.config.ts +++ b/test/e2e/app-dir/webpack-loader-misc/next.config.ts @@ -1,18 +1,18 @@ import type { NextConfig } from 'next' -const loader = require.resolve('./target-loader.js') +const loader = require.resolve('./misc-loader.js') const nextConfig: NextConfig = { turbopack: { rules: { - '*.target-test.js': { + '*.misc-test.js': { loaders: [loader], }, }, }, webpack(config) { config.module.rules.push({ - test: /\.target-test\.js$/, + test: /\.misc-test\.js$/, use: loader, }) return config diff --git a/test/e2e/app-dir/webpack-loader-target/webpack-loader-target.test.ts b/test/e2e/app-dir/webpack-loader-misc/webpack-loader-misc.test.ts similarity index 60% rename from test/e2e/app-dir/webpack-loader-target/webpack-loader-target.test.ts rename to test/e2e/app-dir/webpack-loader-misc/webpack-loader-misc.test.ts index 34f9d22124bb..455dde3a0ae9 100644 --- a/test/e2e/app-dir/webpack-loader-target/webpack-loader-target.test.ts +++ b/test/e2e/app-dir/webpack-loader-misc/webpack-loader-misc.test.ts @@ -1,13 +1,14 @@ import { nextTestSetup } from 'e2e-utils' -describe('webpack-loader-target', () => { - const { next } = nextTestSetup({ +describe('webpack-loader-misc', () => { + const { next, isNextDev } = nextTestSetup({ files: __dirname, }) - it('exposes the server compilation target to loaders', async () => { + it('exposes the server compilation target and mode to loaders', async () => { const $ = await next.render$('/') expect($('#server-target').text()).toBe('"node"') + expect($('#mode').text()).toBe(isNextDev ? 'development' : 'production') }) it('exposes the browser compilation target to loaders', async () => { diff --git a/test/e2e/app-dir/webpack-loader-target/app/page.tsx b/test/e2e/app-dir/webpack-loader-target/app/page.tsx deleted file mode 100644 index 46735793e1b0..000000000000 --- a/test/e2e/app-dir/webpack-loader-target/app/page.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import ClientTarget from './client.target-test' -import serverTarget from './server.target-test' - -export default function Page() { - return ( -
-

{JSON.stringify(serverTarget)}

- -
- ) -} diff --git a/test/e2e/app-dir/webpack-loader-target/app/server.target-test.js b/test/e2e/app-dir/webpack-loader-target/app/server.target-test.js deleted file mode 100644 index 446e56eb5dcb..000000000000 --- a/test/e2e/app-dir/webpack-loader-target/app/server.target-test.js +++ /dev/null @@ -1,3 +0,0 @@ -const target = '__TARGET__' - -export default target diff --git a/test/e2e/app-dir/webpack-loader-target/target-loader.js b/test/e2e/app-dir/webpack-loader-target/target-loader.js deleted file mode 100644 index 99c39bbd5389..000000000000 --- a/test/e2e/app-dir/webpack-loader-target/target-loader.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function (source) { - return source.replaceAll("'__TARGET__'", JSON.stringify(this.target)) -} diff --git a/turbopack/crates/turbopack-node/js/src/transforms/webpack-loaders.ts b/turbopack/crates/turbopack-node/js/src/transforms/webpack-loaders.ts index ac60bff7a361..dd507558b1be 100644 --- a/turbopack/crates/turbopack-node/js/src/transforms/webpack-loaders.ts +++ b/turbopack/crates/turbopack-node/js/src/transforms/webpack-loaders.ts @@ -163,6 +163,7 @@ const transform = ( query: string, loaders: LoaderConfig[], target: string, + mode: 'development' | 'production', sourceMap: boolean ) => { return new Promise((resolve, reject) => { @@ -193,6 +194,7 @@ const transform = ( currentTraceSpan: new DummySpan(), rootContext: contextDir, target, + mode, sourceMap, getOptions() { const entry = this.loaders[this.loaderIndex] diff --git a/turbopack/crates/turbopack-node/src/transforms/webpack.rs b/turbopack/crates/turbopack-node/src/transforms/webpack.rs index 09fd1e631f62..c30d07ed0536 100644 --- a/turbopack/crates/turbopack-node/src/transforms/webpack.rs +++ b/turbopack/crates/turbopack-node/src/transforms/webpack.rs @@ -98,6 +98,7 @@ pub struct WebpackLoaders { execution_context: ResolvedVc, loaders: ResolvedVc, target: ResolvedVc, + mode: RcStr, rename_as: Option, resolve_options_context: ResolvedVc, source_maps: bool, @@ -111,6 +112,7 @@ impl WebpackLoaders { execution_context: ResolvedVc, loaders: ResolvedVc, target: ResolvedVc, + mode: RcStr, rename_as: Option, resolve_options_context: ResolvedVc, source_maps: bool, @@ -120,6 +122,7 @@ impl WebpackLoaders { execution_context, loaders, target, + mode, rename_as, resolve_options_context, source_maps, @@ -323,6 +326,7 @@ impl WebpackLoadersProcessedAsset { ResolvedVc::cell(self.source.ident().await?.query.to_string().into()), ResolvedVc::cell(json!(*loaders)), ResolvedVc::cell(transform.target.await?.to_string().into()), + ResolvedVc::cell(transform.mode.to_string().into()), ResolvedVc::cell(transform.source_maps.into()), ], additional_invalidation: Completion::immutable().to_resolved().await?, diff --git a/turbopack/crates/turbopack/src/lib.rs b/turbopack/crates/turbopack/src/lib.rs index ebd49c8783de..ddda5cd8ab1a 100644 --- a/turbopack/crates/turbopack/src/lib.rs +++ b/turbopack/crates/turbopack/src/lib.rs @@ -684,6 +684,7 @@ async fn process_default_internal( *execution_context, loaders_vc, *webpack_loaders_options.target, + webpack_loaders_options.mode.clone(), rename_as.clone(), *resolve_options_context, source_maps, diff --git a/turbopack/crates/turbopack/src/module_options/mod.rs b/turbopack/crates/turbopack/src/module_options/mod.rs index 96bb68cb70c1..18027878c1fe 100644 --- a/turbopack/crates/turbopack/src/module_options/mod.rs +++ b/turbopack/crates/turbopack/src/module_options/mod.rs @@ -503,6 +503,7 @@ impl ModuleOptions { *execution_context, *rule.loaders, *webpack_loaders_options.target, + webpack_loaders_options.mode.clone(), rule.rename_as.clone(), resolve_options_context, matches!(ecmascript_source_maps, SourceMapsType::Full), diff --git a/turbopack/crates/turbopack/src/module_options/module_options_context.rs b/turbopack/crates/turbopack/src/module_options/module_options_context.rs index b39605317259..0ee72250d450 100644 --- a/turbopack/crates/turbopack/src/module_options/module_options_context.rs +++ b/turbopack/crates/turbopack/src/module_options/module_options_context.rs @@ -84,6 +84,7 @@ pub struct WebpackLoadersOptions { pub builtin_conditions: ResolvedVc>, pub loader_runner_package: Option>, pub target: ResolvedVc, + pub mode: RcStr, } pub enum WebpackLoaderBuiltinConditionSetMatch {