From 6ebc52541698d64973caddd8a7d5ae12e74e919e Mon Sep 17 00:00:00 2001 From: Vercel Release Bot <88769842+vercel-release-bot@users.noreply.github.com> Date: Sun, 12 Jan 2025 22:38:11 +0100 Subject: [PATCH 01/65] Upgrade React from `056073de-20250109` to `540efebc-20250112` (#74805) [diff facebook/react@056073de...540efebc](https://github.com/facebook/react/compare/056073de...540efebc)
React upstream changes - https://github.com/facebook/react/pull/32041 - https://github.com/facebook/react/pull/32038
--- package.json | 30 +- .../cjs/react-dom-client.development.js | 2321 +++++++++-------- .../cjs/react-dom-client.production.js | 1116 ++++---- .../cjs/react-dom-profiling.development.js | 2321 +++++++++-------- .../cjs/react-dom-profiling.profiling.js | 1826 +++++++------ ...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 | 2297 ++++++++-------- .../react-dom-unstable_testing.production.js | 1116 ++++---- .../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 | 1649 ++++++------ .../cjs/react-dom-client.production.js | 721 ++--- .../cjs/react-dom-profiling.development.js | 1649 ++++++------ .../cjs/react-dom-profiling.profiling.js | 721 ++--- ...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 | 478 ++-- 62 files changed, 8585 insertions(+), 7836 deletions(-) diff --git a/package.json b/package.json index 8c1023a9c2d75..e092ef46bb197 100644 --- a/package.json +++ b/package.json @@ -213,16 +213,16 @@ "pretty-ms": "7.0.0", "random-seed": "0.3.0", "react": "19.0.0", - "react-builtin": "npm:react@19.1.0-canary-056073de-20250109", + "react-builtin": "npm:react@19.1.0-canary-540efebc-20250112", "react-dom": "19.0.0", - "react-dom-builtin": "npm:react-dom@19.1.0-canary-056073de-20250109", - "react-dom-experimental-builtin": "npm:react-dom@0.0.0-experimental-056073de-20250109", - "react-experimental-builtin": "npm:react@0.0.0-experimental-056073de-20250109", - "react-is-builtin": "npm:react-is@19.1.0-canary-056073de-20250109", - "react-server-dom-turbopack": "19.1.0-canary-056073de-20250109", - "react-server-dom-turbopack-experimental": "npm:react-server-dom-turbopack@0.0.0-experimental-056073de-20250109", - "react-server-dom-webpack": "19.1.0-canary-056073de-20250109", - "react-server-dom-webpack-experimental": "npm:react-server-dom-webpack@0.0.0-experimental-056073de-20250109", + "react-dom-builtin": "npm:react-dom@19.1.0-canary-540efebc-20250112", + "react-dom-experimental-builtin": "npm:react-dom@0.0.0-experimental-540efebc-20250112", + "react-experimental-builtin": "npm:react@0.0.0-experimental-540efebc-20250112", + "react-is-builtin": "npm:react-is@19.1.0-canary-540efebc-20250112", + "react-server-dom-turbopack": "19.1.0-canary-540efebc-20250112", + "react-server-dom-turbopack-experimental": "npm:react-server-dom-turbopack@0.0.0-experimental-540efebc-20250112", + "react-server-dom-webpack": "19.1.0-canary-540efebc-20250112", + "react-server-dom-webpack-experimental": "npm:react-server-dom-webpack@0.0.0-experimental-540efebc-20250112", "react-ssr-prepass": "1.0.8", "react-virtualized": "9.22.3", "relay-compiler": "13.0.2", @@ -232,8 +232,8 @@ "resolve-from": "5.0.0", "sass": "1.54.0", "satori": "0.10.9", - "scheduler-builtin": "npm:scheduler@0.26.0-canary-056073de-20250109", - "scheduler-experimental-builtin": "npm:scheduler@0.0.0-experimental-056073de-20250109", + "scheduler-builtin": "npm:scheduler@0.26.0-canary-540efebc-20250112", + "scheduler-experimental-builtin": "npm:scheduler@0.0.0-experimental-540efebc-20250112", "seedrandom": "3.0.5", "semver": "7.3.7", "shell-quote": "1.7.3", @@ -274,10 +274,10 @@ "@types/react": "19.0.0", "@types/react-dom": "19.0.0", "jest-snapshot": "30.0.0-alpha.6", - "react": "19.1.0-canary-056073de-20250109", - "react-dom": "19.1.0-canary-056073de-20250109", - "react-is": "19.1.0-canary-056073de-20250109", - "scheduler": "0.26.0-canary-056073de-20250109" + "react": "19.1.0-canary-540efebc-20250112", + "react-dom": "19.1.0-canary-540efebc-20250112", + "react-is": "19.1.0-canary-540efebc-20250112", + "scheduler": "0.26.0-canary-540efebc-20250112" }, "patchedDependencies": { "webpack-sources@3.2.3": "patches/webpack-sources@3.2.3.patch", 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 30fc29b987e82..1d4057e147ccb 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 @@ -3692,242 +3692,23 @@ topLevelEventsToReactNames.set(domEventName, reactName); registerTwoPhaseEvent(reactName, [domEventName]); } - function setCurrentTrackFromLanes(lanes) { - reusableLaneDevToolDetails.track = - lanes & 63 - ? "Blocking" - : lanes & 4194240 - ? "Transition" - : lanes & 62914560 - ? "Suspense" - : lanes & 2080374784 - ? "Idle" - : "Other"; - } - function logComponentRender(fiber, startTime, endTime, wasHydrated) { - var name = getComponentNameFromFiber(fiber); - if (null !== name && supportsUserTiming) { - var selfTime = fiber.actualDuration; - if (null === fiber.alternate || fiber.alternate.child !== fiber.child) - for (fiber = fiber.child; null !== fiber; fiber = fiber.sibling) - selfTime -= fiber.actualDuration; - reusableComponentDevToolDetails.color = - 0.5 > selfTime - ? wasHydrated - ? "tertiary-light" - : "primary-light" - : 10 > selfTime - ? wasHydrated - ? "tertiary" - : "primary" - : 100 > selfTime - ? wasHydrated - ? "tertiary-dark" - : "primary-dark" - : "error"; - reusableComponentOptions.start = startTime; - reusableComponentOptions.end = endTime; - performance.measure(name, reusableComponentOptions); - } - } - function logComponentErrored(fiber, startTime, endTime, errors) { - if (supportsUserTiming) { - var name = getComponentNameFromFiber(fiber); - if (null !== name) { - for (var properties = [], i = 0; i < errors.length; i++) { - var error = errors[i].value; - properties.push([ - "Error", - "object" === typeof error && - null !== error && - "string" === typeof error.message - ? String(error.message) - : String(error) - ]); - } - performance.measure(name, { - start: startTime, - end: endTime, - detail: { - devtools: { - color: "error", - track: COMPONENTS_TRACK, - tooltipText: - 13 === fiber.tag - ? "Hydration failed" - : "Error boundary caught an error", - properties: properties - } - } - }); - } - } - } - function logComponentEffect(fiber, startTime, endTime, selfTime, errors) { - if (null !== errors) { - if ( - supportsUserTiming && - ((selfTime = getComponentNameFromFiber(fiber)), null !== selfTime) - ) { - fiber = []; - for (var i = 0; i < errors.length; i++) { - var error = errors[i].value; - fiber.push([ - "Error", - "object" === typeof error && - null !== error && - "string" === typeof error.message - ? String(error.message) - : String(error) - ]); - } - performance.measure(selfTime, { - start: startTime, - end: endTime, - detail: { - devtools: { - color: "error", - track: COMPONENTS_TRACK, - tooltipText: "A lifecycle or effect errored", - properties: fiber - } - } - }); - } - } else - (errors = getComponentNameFromFiber(fiber)), - null !== errors && - supportsUserTiming && - ((reusableComponentDevToolDetails.color = - 1 > selfTime - ? "secondary-light" - : 100 > selfTime - ? "secondary" - : 500 > selfTime - ? "secondary-dark" - : "error"), - (reusableComponentOptions.start = startTime), - (reusableComponentOptions.end = endTime), - performance.measure(errors, reusableComponentOptions)); - } - function logRenderPhase(startTime, endTime, lanes) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = - (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure( - (lanes & 536870912) === lanes - ? "Prepared" - : (lanes & 201326677) === lanes - ? "Hydrated" - : "Render", - reusableLaneOptions - )); - } - function logSuspendedRenderPhase(startTime, endTime, lanes) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = - (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure("Prewarm", reusableLaneOptions)); - } - function logSuspendedWithDelayPhase(startTime, endTime, lanes) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = - (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure("Suspended", reusableLaneOptions)); - } - function logRecoveredRenderPhase( - startTime, - endTime, - lanes, - recoverableErrors, - hydrationFailed - ) { - if (supportsUserTiming) { - lanes = []; - for (var i = 0; i < recoverableErrors.length; i++) { - var error = recoverableErrors[i].value; - lanes.push([ - "Recoverable Error", - "object" === typeof error && - null !== error && - "string" === typeof error.message - ? String(error.message) - : String(error) - ]); - } - performance.measure("Recovered", { - start: startTime, - end: endTime, - detail: { - devtools: { - color: "primary-dark", - track: reusableLaneDevToolDetails.track, - trackGroup: LANES_TRACK_GROUP, - tooltipText: hydrationFailed - ? "Hydration Failed" - : "Recovered after Error", - properties: lanes - } - } - }); - } - } - function logErroredRenderPhase(startTime, endTime) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = "error"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure("Errored", reusableLaneOptions)); - } - function logSuspenseThrottlePhase(startTime, endTime) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = "secondary-light"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure("Throttled", reusableLaneOptions)); - } - function logSuspendedCommitPhase(startTime, endTime) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = "secondary-light"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure("Suspended", reusableLaneOptions)); - } - function logCommitErrored(startTime, endTime, errors, passive) { - if (supportsUserTiming) { - for (var properties = [], i = 0; i < errors.length; i++) { - var error = errors[i].value; - properties.push([ - "Error", - "object" === typeof error && - null !== error && - "string" === typeof error.message - ? String(error.message) - : String(error) - ]); - } - performance.measure("Errored", { - start: startTime, - end: endTime, - detail: { - devtools: { - color: "error", - track: reusableLaneDevToolDetails.track, - trackGroup: LANES_TRACK_GROUP, - tooltipText: passive - ? "Remaining Effects Errored" - : "Commit Errored", - properties: properties - } - } - }); + function createCapturedValueAtFiber(value, source) { + if ("object" === typeof value && null !== value) { + var existing = CapturedStacks.get(value); + if (void 0 !== existing) return existing; + source = { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; + CapturedStacks.set(value, source); + return source; } + return { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; } function finishQueueingConcurrentUpdates() { for ( @@ -4254,11 +4035,248 @@ for (var child = fiber.child; child; ) (fiber.actualDuration += child.actualDuration), (child = child.sibling); } - function resetContextDependencies() { - lastContextDependency = currentlyRenderingFiber$1 = null; - isDisallowedContextReadInDEV = !1; - } - function pushProvider(providerFiber, context, nextValue) { + function setCurrentTrackFromLanes(lanes) { + reusableLaneDevToolDetails.track = + lanes & 63 + ? "Blocking" + : lanes & 4194240 + ? "Transition" + : lanes & 62914560 + ? "Suspense" + : lanes & 2080374784 + ? "Idle" + : "Other"; + } + function logComponentRender(fiber, startTime, endTime, wasHydrated) { + var name = getComponentNameFromFiber(fiber); + if (null !== name && supportsUserTiming) { + var selfTime = fiber.actualDuration; + if (null === fiber.alternate || fiber.alternate.child !== fiber.child) + for (fiber = fiber.child; null !== fiber; fiber = fiber.sibling) + selfTime -= fiber.actualDuration; + reusableComponentDevToolDetails.color = + 0.5 > selfTime + ? wasHydrated + ? "tertiary-light" + : "primary-light" + : 10 > selfTime + ? wasHydrated + ? "tertiary" + : "primary" + : 100 > selfTime + ? wasHydrated + ? "tertiary-dark" + : "primary-dark" + : "error"; + reusableComponentOptions.start = startTime; + reusableComponentOptions.end = endTime; + performance.measure(name, reusableComponentOptions); + } + } + function logComponentErrored(fiber, startTime, endTime, errors) { + if (supportsUserTiming) { + var name = getComponentNameFromFiber(fiber); + if (null !== name) { + for (var properties = [], i = 0; i < errors.length; i++) { + var error = errors[i].value; + properties.push([ + "Error", + "object" === typeof error && + null !== error && + "string" === typeof error.message + ? String(error.message) + : String(error) + ]); + } + performance.measure(name, { + start: startTime, + end: endTime, + detail: { + devtools: { + color: "error", + track: COMPONENTS_TRACK, + tooltipText: + 13 === fiber.tag + ? "Hydration failed" + : "Error boundary caught an error", + properties: properties + } + } + }); + } + } + } + function logComponentEffect(fiber, startTime, endTime, selfTime, errors) { + if (null !== errors) { + if ( + supportsUserTiming && + ((selfTime = getComponentNameFromFiber(fiber)), null !== selfTime) + ) { + fiber = []; + for (var i = 0; i < errors.length; i++) { + var error = errors[i].value; + fiber.push([ + "Error", + "object" === typeof error && + null !== error && + "string" === typeof error.message + ? String(error.message) + : String(error) + ]); + } + performance.measure(selfTime, { + start: startTime, + end: endTime, + detail: { + devtools: { + color: "error", + track: COMPONENTS_TRACK, + tooltipText: "A lifecycle or effect errored", + properties: fiber + } + } + }); + } + } else + (errors = getComponentNameFromFiber(fiber)), + null !== errors && + supportsUserTiming && + ((reusableComponentDevToolDetails.color = + 1 > selfTime + ? "secondary-light" + : 100 > selfTime + ? "secondary" + : 500 > selfTime + ? "secondary-dark" + : "error"), + (reusableComponentOptions.start = startTime), + (reusableComponentOptions.end = endTime), + performance.measure(errors, reusableComponentOptions)); + } + function logRenderPhase(startTime, endTime, lanes) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = + (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure( + (lanes & 536870912) === lanes + ? "Prepared" + : (lanes & 201326677) === lanes + ? "Hydrated" + : "Render", + reusableLaneOptions + )); + } + function logSuspendedRenderPhase(startTime, endTime, lanes) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = + (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure("Prewarm", reusableLaneOptions)); + } + function logSuspendedWithDelayPhase(startTime, endTime, lanes) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = + (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure("Suspended", reusableLaneOptions)); + } + function logRecoveredRenderPhase( + startTime, + endTime, + lanes, + recoverableErrors, + hydrationFailed + ) { + if (supportsUserTiming) { + lanes = []; + for (var i = 0; i < recoverableErrors.length; i++) { + var error = recoverableErrors[i].value; + lanes.push([ + "Recoverable Error", + "object" === typeof error && + null !== error && + "string" === typeof error.message + ? String(error.message) + : String(error) + ]); + } + performance.measure("Recovered", { + start: startTime, + end: endTime, + detail: { + devtools: { + color: "primary-dark", + track: reusableLaneDevToolDetails.track, + trackGroup: LANES_TRACK_GROUP, + tooltipText: hydrationFailed + ? "Hydration Failed" + : "Recovered after Error", + properties: lanes + } + } + }); + } + } + function logErroredRenderPhase(startTime, endTime) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = "error"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure("Errored", reusableLaneOptions)); + } + function logSuspenseThrottlePhase(startTime, endTime) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = "secondary-light"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure("Throttled", reusableLaneOptions)); + } + function logSuspendedCommitPhase(startTime, endTime) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = "secondary-light"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure("Suspended", reusableLaneOptions)); + } + function logCommitErrored(startTime, endTime, errors, passive) { + if (supportsUserTiming) { + for (var properties = [], i = 0; i < errors.length; i++) { + var error = errors[i].value; + properties.push([ + "Error", + "object" === typeof error && + null !== error && + "string" === typeof error.message + ? String(error.message) + : String(error) + ]); + } + performance.measure("Errored", { + start: startTime, + end: endTime, + detail: { + devtools: { + color: "error", + track: reusableLaneDevToolDetails.track, + trackGroup: LANES_TRACK_GROUP, + tooltipText: passive + ? "Remaining Effects Errored" + : "Commit Errored", + properties: properties + } + } + }); + } + } + function resetContextDependencies() { + lastContextDependency = currentlyRenderingFiber$1 = null; + isDisallowedContextReadInDEV = !1; + } + function pushProvider(providerFiber, context, nextValue) { push(valueCursor, context._currentValue, providerFiber); context._currentValue = nextValue; push(rendererCursorDEV, context._currentRenderer, providerFiber); @@ -4849,23 +4867,128 @@ cache.controller.abort(); }); } - function createCapturedValueAtFiber(value, source) { - if ("object" === typeof value && null !== value) { - var existing = CapturedStacks.get(value); - if (void 0 !== existing) return existing; - source = { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; - CapturedStacks.set(value, source); - return source; - } - return { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; + function warnOnInvalidCallback(callback) { + if (null !== callback && "function" !== typeof callback) { + var key = String(callback); + didWarnOnInvalidCallback.has(key) || + (didWarnOnInvalidCallback.add(key), + console.error( + "Expected the last optional `callback` argument to be a function. Instead received: %s.", + callback + )); + } + } + function applyDerivedStateFromProps( + workInProgress, + ctor, + getDerivedStateFromProps, + nextProps + ) { + var prevState = workInProgress.memoizedState, + partialState = getDerivedStateFromProps(nextProps, prevState); + if (workInProgress.mode & StrictLegacyMode) { + setIsStrictModeForDevtools(!0); + try { + partialState = getDerivedStateFromProps(nextProps, prevState); + } finally { + setIsStrictModeForDevtools(!1); + } + } + void 0 === partialState && + ((ctor = getComponentNameFromType(ctor) || "Component"), + didWarnAboutUndefinedDerivedState.has(ctor) || + (didWarnAboutUndefinedDerivedState.add(ctor), + console.error( + "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.", + ctor + ))); + prevState = + null === partialState || void 0 === partialState + ? prevState + : assign({}, prevState, partialState); + workInProgress.memoizedState = prevState; + 0 === workInProgress.lanes && + (workInProgress.updateQueue.baseState = prevState); + } + function checkShouldComponentUpdate( + workInProgress, + ctor, + oldProps, + newProps, + oldState, + newState, + nextContext + ) { + var instance = workInProgress.stateNode; + if ("function" === typeof instance.shouldComponentUpdate) { + oldProps = instance.shouldComponentUpdate( + newProps, + newState, + nextContext + ); + if (workInProgress.mode & StrictLegacyMode) { + setIsStrictModeForDevtools(!0); + try { + oldProps = instance.shouldComponentUpdate( + newProps, + newState, + nextContext + ); + } finally { + setIsStrictModeForDevtools(!1); + } + } + void 0 === oldProps && + console.error( + "%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.", + getComponentNameFromType(ctor) || "Component" + ); + return oldProps; + } + return ctor.prototype && ctor.prototype.isPureReactComponent + ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState) + : !0; + } + function callComponentWillReceiveProps( + workInProgress, + instance, + newProps, + nextContext + ) { + var oldState = instance.state; + "function" === typeof instance.componentWillReceiveProps && + instance.componentWillReceiveProps(newProps, nextContext); + "function" === typeof instance.UNSAFE_componentWillReceiveProps && + instance.UNSAFE_componentWillReceiveProps(newProps, nextContext); + instance.state !== oldState && + ((workInProgress = + getComponentNameFromFiber(workInProgress) || "Component"), + didWarnAboutStateAssignmentForComponent.has(workInProgress) || + (didWarnAboutStateAssignmentForComponent.add(workInProgress), + console.error( + "%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.", + workInProgress + )), + classComponentUpdater.enqueueReplaceState( + instance, + instance.state, + null + )); + } + function resolveClassComponentProps(Component, baseProps) { + var newProps = baseProps; + if ("ref" in baseProps) { + newProps = {}; + for (var propName in baseProps) + "ref" !== propName && (newProps[propName] = baseProps[propName]); + } + if ((Component = Component.defaultProps)) { + newProps === baseProps && (newProps = assign({}, newProps)); + for (var _propName in Component) + void 0 === newProps[_propName] && + (newProps[_propName] = Component[_propName]); + } + return newProps; } function getTreeId() { var overflow = treeContextOverflow, @@ -4938,518 +5061,144 @@ "Expected to be hydrating. This is a bug in React. Please file an issue." ); } - function buildHydrationDiffNode(fiber, distanceFromLeaf) { - if (null === fiber.return) { - if (null === hydrationDiffRootDEV) - hydrationDiffRootDEV = { - fiber: fiber, - children: [], - serverProps: void 0, - serverTail: [], - distanceFromLeaf: distanceFromLeaf - }; - else { - if (hydrationDiffRootDEV.fiber !== fiber) - throw Error( - "Saw multiple hydration diff roots in a pass. This is a bug in React." + function createThenableState() { + return { didWarnAboutUncachedPromise: !1, thenables: [] }; + } + function isThenableResolved(thenable) { + thenable = thenable.status; + return "fulfilled" === thenable || "rejected" === thenable; + } + function noop$3() {} + function trackUsedThenable(thenableState, thenable, index) { + null !== ReactSharedInternals.actQueue && + (ReactSharedInternals.didUsePromise = !0); + var trackedThenables = thenableState.thenables; + index = trackedThenables[index]; + void 0 === index + ? trackedThenables.push(thenable) + : index !== thenable && + (thenableState.didWarnAboutUncachedPromise || + ((thenableState.didWarnAboutUncachedPromise = !0), + console.error( + "A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework." + )), + thenable.then(noop$3, noop$3), + (thenable = index)); + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw ( + ((thenableState = thenable.reason), + checkIfUseWrappedInAsyncCatch(thenableState), + thenableState) + ); + default: + if ("string" === typeof thenable.status) + thenable.then(noop$3, noop$3); + else { + thenableState = workInProgressRoot; + if ( + null !== thenableState && + 100 < thenableState.shellSuspendCounter + ) + throw Error( + "async/await is not yet supported in Client Components, only Server Components. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." + ); + thenableState = thenable; + thenableState.status = "pending"; + thenableState.then( + function (fulfilledValue) { + if ("pending" === thenable.status) { + var fulfilledThenable = thenable; + fulfilledThenable.status = "fulfilled"; + fulfilledThenable.value = fulfilledValue; + } + }, + function (error) { + if ("pending" === thenable.status) { + var rejectedThenable = thenable; + rejectedThenable.status = "rejected"; + rejectedThenable.reason = error; + } + } ); - hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf && - (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf); - } - return hydrationDiffRootDEV; + } + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw ( + ((thenableState = thenable.reason), + checkIfUseWrappedInAsyncCatch(thenableState), + thenableState) + ); + } + suspendedThenable = thenable; + needsToResetSuspendedThenableDEV = !0; + throw SuspenseException; } - var siblings = buildHydrationDiffNode( - fiber.return, - distanceFromLeaf + 1 - ).children; - if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber) - return ( - (siblings = siblings[siblings.length - 1]), - siblings.distanceFromLeaf > distanceFromLeaf && - (siblings.distanceFromLeaf = distanceFromLeaf), - siblings - ); - distanceFromLeaf = { - fiber: fiber, - children: [], - serverProps: void 0, - serverTail: [], - distanceFromLeaf: distanceFromLeaf - }; - siblings.push(distanceFromLeaf); - return distanceFromLeaf; } - function warnNonHydratedInstance(fiber, rejectedCandidate) { - didSuspendOrErrorDEV || - ((fiber = buildHydrationDiffNode(fiber, 0)), - (fiber.serverProps = null), - null !== rejectedCandidate && - ((rejectedCandidate = - describeHydratableInstanceForDevWarnings(rejectedCandidate)), - fiber.serverTail.push(rejectedCandidate))); + function getSuspendedThenable() { + if (null === suspendedThenable) + throw Error( + "Expected a suspended thenable. This is a bug in React. Please file an issue." + ); + var thenable = suspendedThenable; + suspendedThenable = null; + needsToResetSuspendedThenableDEV = !1; + return thenable; } - function throwOnHydrationMismatch(fiber) { - var diff = "", - diffRoot = hydrationDiffRootDEV; - null !== diffRoot && - ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot))); - queueHydrationError( - createCapturedValueAtFiber( - Error( - "Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\nhttps://react.dev/link/hydration-mismatch" + - diff - ), - fiber - ) - ); - throw HydrationMismatchException; - } - function prepareToHydrateHostInstance(fiber) { - var didHydrate = fiber.stateNode; - var type = fiber.type, - props = fiber.memoizedProps; - didHydrate[internalInstanceKey] = fiber; - didHydrate[internalPropsKey] = props; - validatePropertiesInDevelopment(type, props); - switch (type) { - case "dialog": - listenToNonDelegatedEvent("cancel", didHydrate); - listenToNonDelegatedEvent("close", didHydrate); - break; - case "iframe": - case "object": - case "embed": - listenToNonDelegatedEvent("load", didHydrate); - break; - case "video": - case "audio": - for (type = 0; type < mediaEventTypes.length; type++) - listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate); - break; - case "source": - listenToNonDelegatedEvent("error", didHydrate); - break; - case "img": - case "image": - case "link": - listenToNonDelegatedEvent("error", didHydrate); - listenToNonDelegatedEvent("load", didHydrate); - break; - case "details": - listenToNonDelegatedEvent("toggle", didHydrate); - break; - case "input": - checkControlledValueProps("input", props); - listenToNonDelegatedEvent("invalid", didHydrate); - validateInputProps(didHydrate, props); - initInput( - didHydrate, - props.value, - props.defaultValue, - props.checked, - props.defaultChecked, - props.type, - props.name, - !0 - ); - track(didHydrate); - break; - case "option": - validateOptionProps(didHydrate, props); - break; - case "select": - checkControlledValueProps("select", props); - listenToNonDelegatedEvent("invalid", didHydrate); - validateSelectProps(didHydrate, props); - break; - case "textarea": - checkControlledValueProps("textarea", props), - listenToNonDelegatedEvent("invalid", didHydrate), - validateTextareaProps(didHydrate, props), - initTextarea( - didHydrate, - props.value, - props.defaultValue, - props.children - ), - track(didHydrate); - } - type = props.children; - ("string" !== typeof type && - "number" !== typeof type && - "bigint" !== typeof type) || - didHydrate.textContent === "" + type || - !0 === props.suppressHydrationWarning || - checkForUnmatchedText(didHydrate.textContent, type) - ? (null != props.popover && - (listenToNonDelegatedEvent("beforetoggle", didHydrate), - listenToNonDelegatedEvent("toggle", didHydrate)), - null != props.onScroll && - listenToNonDelegatedEvent("scroll", didHydrate), - null != props.onScrollEnd && - listenToNonDelegatedEvent("scrollend", didHydrate), - null != props.onClick && (didHydrate.onclick = noop$1), - (didHydrate = !0)) - : (didHydrate = !1); - didHydrate || throwOnHydrationMismatch(fiber); - } - function popToNextHostParent(fiber) { - for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) - switch (hydrationParentFiber.tag) { - case 3: - case 27: - rootOrSingletonContext = !0; - return; - case 5: - case 13: - rootOrSingletonContext = !1; - return; - default: - hydrationParentFiber = hydrationParentFiber.return; - } + function checkIfUseWrappedInAsyncCatch(rejectedReason) { + if ( + rejectedReason === SuspenseException || + rejectedReason === SuspenseActionException + ) + throw Error( + "Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." + ); } - function popHydrationState(fiber) { - if (fiber !== hydrationParentFiber) return !1; - if (!isHydrating) - return popToNextHostParent(fiber), (isHydrating = !0), !1; - var shouldClear = !1, - JSCompiler_temp; - if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { - if ((JSCompiler_temp = 5 === fiber.tag)) - (JSCompiler_temp = fiber.type), - (JSCompiler_temp = - !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || - shouldSetTextContent(fiber.type, fiber.memoizedProps)); - JSCompiler_temp = !JSCompiler_temp; - } - JSCompiler_temp && (shouldClear = !0); - if (shouldClear && nextHydratableInstance) { - for (shouldClear = nextHydratableInstance; shouldClear; ) { - JSCompiler_temp = buildHydrationDiffNode(fiber, 0); - var description = - describeHydratableInstanceForDevWarnings(shouldClear); - JSCompiler_temp.serverTail.push(description); - shouldClear = - "Suspense" === description.type - ? getNextHydratableInstanceAfterSuspenseInstance(shouldClear) - : getNextHydratable(shouldClear.nextSibling); - } - throwOnHydrationMismatch(fiber); - } - popToNextHostParent(fiber); - if (13 === fiber.tag) { - fiber = fiber.memoizedState; - fiber = null !== fiber ? fiber.dehydrated : null; - if (!fiber) - throw Error( - "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue." - ); - nextHydratableInstance = - getNextHydratableInstanceAfterSuspenseInstance(fiber); - } else - nextHydratableInstance = hydrationParentFiber - ? getNextHydratable(fiber.stateNode.nextSibling) - : null; - return !0; + function pushHiddenContext(fiber, context) { + var prevEntangledRenderLanes = entangledRenderLanes; + push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber); + push(currentTreeHiddenStackCursor, context, fiber); + entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes; } - function resetHydrationState() { - nextHydratableInstance = hydrationParentFiber = null; - didSuspendOrErrorDEV = isHydrating = !1; + function reuseHiddenContextOnStack(fiber) { + push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber); + push( + currentTreeHiddenStackCursor, + currentTreeHiddenStackCursor.current, + fiber + ); } - function upgradeHydrationErrorsToRecoverable() { - var queuedErrors = hydrationErrors; - null !== queuedErrors && - (null === workInProgressRootRecoverableErrors - ? (workInProgressRootRecoverableErrors = queuedErrors) - : workInProgressRootRecoverableErrors.push.apply( - workInProgressRootRecoverableErrors, - queuedErrors - ), - (hydrationErrors = null)); - return queuedErrors; + function popHiddenContext(fiber) { + entangledRenderLanes = prevEntangledRenderLanesCursor.current; + pop(currentTreeHiddenStackCursor, fiber); + pop(prevEntangledRenderLanesCursor, fiber); } - function queueHydrationError(error) { - null === hydrationErrors - ? (hydrationErrors = [error]) - : hydrationErrors.push(error); + function peekCacheFromPool() { + var cacheResumedFromPreviousRender = resumedCache.current; + return null !== cacheResumedFromPreviousRender + ? cacheResumedFromPreviousRender + : workInProgressRoot.pooledCache; } - function emitPendingHydrationWarnings() { - var diffRoot = hydrationDiffRootDEV; - null !== diffRoot && - ((hydrationDiffRootDEV = null), - (diffRoot = describeDiff(diffRoot)), - console.error( - "A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\n%s%s", - "https://react.dev/link/hydration-mismatch", - diffRoot - )); + function pushTransition(offscreenWorkInProgress, prevCachePool) { + null === prevCachePool + ? push(resumedCache, resumedCache.current, offscreenWorkInProgress) + : push(resumedCache, prevCachePool.pool, offscreenWorkInProgress); } - function getViewTransitionName(props, instance) { - return null != props.name && "auto" !== props.name - ? props.name - : instance.autoName; + function getSuspendedCache() { + var cacheFromPool = peekCacheFromPool(); + return null === cacheFromPool + ? null + : { parent: CacheContext._currentValue, pool: cacheFromPool }; } - function warnOnInvalidCallback(callback) { - if (null !== callback && "function" !== typeof callback) { - var key = String(callback); - didWarnOnInvalidCallback.has(key) || - (didWarnOnInvalidCallback.add(key), - console.error( - "Expected the last optional `callback` argument to be a function. Instead received: %s.", - callback - )); - } - } - function applyDerivedStateFromProps( - workInProgress, - ctor, - getDerivedStateFromProps, - nextProps - ) { - var prevState = workInProgress.memoizedState, - partialState = getDerivedStateFromProps(nextProps, prevState); - if (workInProgress.mode & StrictLegacyMode) { - setIsStrictModeForDevtools(!0); - try { - partialState = getDerivedStateFromProps(nextProps, prevState); - } finally { - setIsStrictModeForDevtools(!1); - } - } - void 0 === partialState && - ((ctor = getComponentNameFromType(ctor) || "Component"), - didWarnAboutUndefinedDerivedState.has(ctor) || - (didWarnAboutUndefinedDerivedState.add(ctor), - console.error( - "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.", - ctor - ))); - prevState = - null === partialState || void 0 === partialState - ? prevState - : assign({}, prevState, partialState); - workInProgress.memoizedState = prevState; - 0 === workInProgress.lanes && - (workInProgress.updateQueue.baseState = prevState); - } - function checkShouldComponentUpdate( - workInProgress, - ctor, - oldProps, - newProps, - oldState, - newState, - nextContext - ) { - var instance = workInProgress.stateNode; - if ("function" === typeof instance.shouldComponentUpdate) { - oldProps = instance.shouldComponentUpdate( - newProps, - newState, - nextContext - ); - if (workInProgress.mode & StrictLegacyMode) { - setIsStrictModeForDevtools(!0); - try { - oldProps = instance.shouldComponentUpdate( - newProps, - newState, - nextContext - ); - } finally { - setIsStrictModeForDevtools(!1); - } - } - void 0 === oldProps && - console.error( - "%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.", - getComponentNameFromType(ctor) || "Component" - ); - return oldProps; - } - return ctor.prototype && ctor.prototype.isPureReactComponent - ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState) - : !0; - } - function callComponentWillReceiveProps( - workInProgress, - instance, - newProps, - nextContext - ) { - var oldState = instance.state; - "function" === typeof instance.componentWillReceiveProps && - instance.componentWillReceiveProps(newProps, nextContext); - "function" === typeof instance.UNSAFE_componentWillReceiveProps && - instance.UNSAFE_componentWillReceiveProps(newProps, nextContext); - instance.state !== oldState && - ((workInProgress = - getComponentNameFromFiber(workInProgress) || "Component"), - didWarnAboutStateAssignmentForComponent.has(workInProgress) || - (didWarnAboutStateAssignmentForComponent.add(workInProgress), - console.error( - "%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.", - workInProgress - )), - classComponentUpdater.enqueueReplaceState( - instance, - instance.state, - null - )); - } - function resolveClassComponentProps(Component, baseProps) { - var newProps = baseProps; - if ("ref" in baseProps) { - newProps = {}; - for (var propName in baseProps) - "ref" !== propName && (newProps[propName] = baseProps[propName]); - } - if ((Component = Component.defaultProps)) { - newProps === baseProps && (newProps = assign({}, newProps)); - for (var _propName in Component) - void 0 === newProps[_propName] && - (newProps[_propName] = Component[_propName]); - } - return newProps; - } - function createThenableState() { - return { didWarnAboutUncachedPromise: !1, thenables: [] }; - } - function isThenableResolved(thenable) { - thenable = thenable.status; - return "fulfilled" === thenable || "rejected" === thenable; - } - function noop$3() {} - function trackUsedThenable(thenableState, thenable, index) { - null !== ReactSharedInternals.actQueue && - (ReactSharedInternals.didUsePromise = !0); - var trackedThenables = thenableState.thenables; - index = trackedThenables[index]; - void 0 === index - ? trackedThenables.push(thenable) - : index !== thenable && - (thenableState.didWarnAboutUncachedPromise || - ((thenableState.didWarnAboutUncachedPromise = !0), - console.error( - "A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework." - )), - thenable.then(noop$3, noop$3), - (thenable = index)); - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw ( - ((thenableState = thenable.reason), - checkIfUseWrappedInAsyncCatch(thenableState), - thenableState) - ); - default: - if ("string" === typeof thenable.status) - thenable.then(noop$3, noop$3); - else { - thenableState = workInProgressRoot; - if ( - null !== thenableState && - 100 < thenableState.shellSuspendCounter - ) - throw Error( - "async/await is not yet supported in Client Components, only Server Components. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." - ); - thenableState = thenable; - thenableState.status = "pending"; - thenableState.then( - function (fulfilledValue) { - if ("pending" === thenable.status) { - var fulfilledThenable = thenable; - fulfilledThenable.status = "fulfilled"; - fulfilledThenable.value = fulfilledValue; - } - }, - function (error) { - if ("pending" === thenable.status) { - var rejectedThenable = thenable; - rejectedThenable.status = "rejected"; - rejectedThenable.reason = error; - } - } - ); - } - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw ( - ((thenableState = thenable.reason), - checkIfUseWrappedInAsyncCatch(thenableState), - thenableState) - ); - } - suspendedThenable = thenable; - needsToResetSuspendedThenableDEV = !0; - throw SuspenseException; - } - } - function getSuspendedThenable() { - if (null === suspendedThenable) - throw Error( - "Expected a suspended thenable. This is a bug in React. Please file an issue." - ); - var thenable = suspendedThenable; - suspendedThenable = null; - needsToResetSuspendedThenableDEV = !1; - return thenable; - } - function checkIfUseWrappedInAsyncCatch(rejectedReason) { - if ( - rejectedReason === SuspenseException || - rejectedReason === SuspenseActionException - ) - throw Error( - "Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." - ); - } - function pushHiddenContext(fiber, context) { - var prevEntangledRenderLanes = entangledRenderLanes; - push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber); - push(currentTreeHiddenStackCursor, context, fiber); - entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes; - } - function reuseHiddenContextOnStack(fiber) { - push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber); - push( - currentTreeHiddenStackCursor, - currentTreeHiddenStackCursor.current, - fiber - ); - } - function popHiddenContext(fiber) { - entangledRenderLanes = prevEntangledRenderLanesCursor.current; - pop(currentTreeHiddenStackCursor, fiber); - pop(prevEntangledRenderLanesCursor, fiber); - } - function peekCacheFromPool() { - var cacheResumedFromPreviousRender = resumedCache.current; - return null !== cacheResumedFromPreviousRender - ? cacheResumedFromPreviousRender - : workInProgressRoot.pooledCache; - } - function pushTransition(offscreenWorkInProgress, prevCachePool) { - null === prevCachePool - ? push(resumedCache, resumedCache.current, offscreenWorkInProgress) - : push(resumedCache, prevCachePool.pool, offscreenWorkInProgress); - } - function getSuspendedCache() { - var cacheFromPool = peekCacheFromPool(); - return null === cacheFromPool - ? null - : { parent: CacheContext._currentValue, pool: cacheFromPool }; - } - function mountHookTypesDev() { - var hookName = currentHookNameInDev; - null === hookTypesDev - ? (hookTypesDev = [hookName]) - : hookTypesDev.push(hookName); + function mountHookTypesDev() { + var hookName = currentHookNameInDev; + null === hookTypesDev + ? (hookTypesDev = [hookName]) + : hookTypesDev.push(hookName); } function updateHookTypesDev() { var hookName = currentHookNameInDev; @@ -6926,7 +6675,7 @@ 0 < treeId && (identifierPrefix += "H" + treeId.toString(32)); identifierPrefix += ":"; } else - (treeId = globalClientIdCounter++), + (treeId = globalClientIdCounter$1++), (identifierPrefix = ":" + identifierPrefix + "r" + treeId.toString(32) + ":"); return (hook.memoizedState = identifierPrefix); @@ -9576,33 +9325,33 @@ return current; } function updateSuspenseComponent(current, workInProgress, renderLanes) { - var JSCompiler_object_inline_componentStack_2529; - var JSCompiler_object_inline_stack_2528 = workInProgress.pendingProps; + var JSCompiler_object_inline_componentStack_2545; + var JSCompiler_object_inline_stack_2544 = workInProgress.pendingProps; shouldSuspendImpl(workInProgress) && (workInProgress.flags |= 128); - var JSCompiler_object_inline_message_2526 = !1; + var JSCompiler_object_inline_message_2542 = !1; var didSuspend = 0 !== (workInProgress.flags & 128); - (JSCompiler_object_inline_componentStack_2529 = didSuspend) || - (JSCompiler_object_inline_componentStack_2529 = + (JSCompiler_object_inline_componentStack_2545 = didSuspend) || + (JSCompiler_object_inline_componentStack_2545 = null !== current && null === current.memoizedState ? !1 : 0 !== (suspenseStackCursor.current & ForceSuspenseFallback)); - JSCompiler_object_inline_componentStack_2529 && - ((JSCompiler_object_inline_message_2526 = !0), + JSCompiler_object_inline_componentStack_2545 && + ((JSCompiler_object_inline_message_2542 = !0), (workInProgress.flags &= -129)); - JSCompiler_object_inline_componentStack_2529 = + JSCompiler_object_inline_componentStack_2545 = 0 !== (workInProgress.flags & 32); workInProgress.flags &= -33; if (null === current) { if (isHydrating) { - JSCompiler_object_inline_message_2526 + JSCompiler_object_inline_message_2542 ? pushPrimaryTreeSuspenseHandler(workInProgress) : reuseSuspenseHandlerOnStack(workInProgress); if (isHydrating) { - var JSCompiler_object_inline_digest_2527 = nextHydratableInstance; + var JSCompiler_object_inline_digest_2543 = nextHydratableInstance; var JSCompiler_temp; - if (!(JSCompiler_temp = !JSCompiler_object_inline_digest_2527)) { + if (!(JSCompiler_temp = !JSCompiler_object_inline_digest_2543)) { c: { - var instance = JSCompiler_object_inline_digest_2527; + var instance = JSCompiler_object_inline_digest_2543; for ( JSCompiler_temp = rootOrSingletonContext; 8 !== instance.nodeType; @@ -9644,87 +9393,87 @@ JSCompiler_temp && (warnNonHydratedInstance( workInProgress, - JSCompiler_object_inline_digest_2527 + JSCompiler_object_inline_digest_2543 ), throwOnHydrationMismatch(workInProgress)); } - JSCompiler_object_inline_digest_2527 = workInProgress.memoizedState; + JSCompiler_object_inline_digest_2543 = workInProgress.memoizedState; if ( - null !== JSCompiler_object_inline_digest_2527 && - ((JSCompiler_object_inline_digest_2527 = - JSCompiler_object_inline_digest_2527.dehydrated), - null !== JSCompiler_object_inline_digest_2527) + null !== JSCompiler_object_inline_digest_2543 && + ((JSCompiler_object_inline_digest_2543 = + JSCompiler_object_inline_digest_2543.dehydrated), + null !== JSCompiler_object_inline_digest_2543) ) return ( - isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2527) + isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2543) ? (workInProgress.lanes = 32) : (workInProgress.lanes = 536870912), null ); popSuspenseHandler(workInProgress); } - JSCompiler_object_inline_digest_2527 = - JSCompiler_object_inline_stack_2528.children; - JSCompiler_temp = JSCompiler_object_inline_stack_2528.fallback; - if (JSCompiler_object_inline_message_2526) + JSCompiler_object_inline_digest_2543 = + JSCompiler_object_inline_stack_2544.children; + JSCompiler_temp = JSCompiler_object_inline_stack_2544.fallback; + if (JSCompiler_object_inline_message_2542) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_stack_2528 = + (JSCompiler_object_inline_stack_2544 = mountSuspenseFallbackChildren( workInProgress, - JSCompiler_object_inline_digest_2527, + JSCompiler_object_inline_digest_2543, JSCompiler_temp, renderLanes )), - (JSCompiler_object_inline_message_2526 = workInProgress.child), - (JSCompiler_object_inline_message_2526.memoizedState = + (JSCompiler_object_inline_message_2542 = workInProgress.child), + (JSCompiler_object_inline_message_2542.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_message_2526.childLanes = + (JSCompiler_object_inline_message_2542.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2529, + JSCompiler_object_inline_componentStack_2545, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - JSCompiler_object_inline_stack_2528 + JSCompiler_object_inline_stack_2544 ); if ( "number" === - typeof JSCompiler_object_inline_stack_2528.unstable_expectedLoadTime + typeof JSCompiler_object_inline_stack_2544.unstable_expectedLoadTime ) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_stack_2528 = + (JSCompiler_object_inline_stack_2544 = mountSuspenseFallbackChildren( workInProgress, - JSCompiler_object_inline_digest_2527, + JSCompiler_object_inline_digest_2543, JSCompiler_temp, renderLanes )), - (JSCompiler_object_inline_message_2526 = workInProgress.child), - (JSCompiler_object_inline_message_2526.memoizedState = + (JSCompiler_object_inline_message_2542 = workInProgress.child), + (JSCompiler_object_inline_message_2542.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_message_2526.childLanes = + (JSCompiler_object_inline_message_2542.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2529, + JSCompiler_object_inline_componentStack_2545, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), (workInProgress.lanes = 4194304), - JSCompiler_object_inline_stack_2528 + JSCompiler_object_inline_stack_2544 ); pushPrimaryTreeSuspenseHandler(workInProgress); return mountSuspensePrimaryChildren( workInProgress, - JSCompiler_object_inline_digest_2527 + JSCompiler_object_inline_digest_2543 ); } var prevState = current.memoizedState; if ( null !== prevState && - ((JSCompiler_object_inline_digest_2527 = prevState.dehydrated), - null !== JSCompiler_object_inline_digest_2527) + ((JSCompiler_object_inline_digest_2543 = prevState.dehydrated), + null !== JSCompiler_object_inline_digest_2543) ) { if (didSuspend) workInProgress.flags & 256 @@ -9741,94 +9490,94 @@ (workInProgress.flags |= 128), (workInProgress = null)) : (reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_message_2526 = - JSCompiler_object_inline_stack_2528.fallback), - (JSCompiler_object_inline_digest_2527 = workInProgress.mode), - (JSCompiler_object_inline_stack_2528 = + (JSCompiler_object_inline_message_2542 = + JSCompiler_object_inline_stack_2544.fallback), + (JSCompiler_object_inline_digest_2543 = workInProgress.mode), + (JSCompiler_object_inline_stack_2544 = mountWorkInProgressOffscreenFiber( { mode: "visible", - children: JSCompiler_object_inline_stack_2528.children + children: JSCompiler_object_inline_stack_2544.children }, - JSCompiler_object_inline_digest_2527 + JSCompiler_object_inline_digest_2543 )), - (JSCompiler_object_inline_message_2526 = + (JSCompiler_object_inline_message_2542 = createFiberFromFragment( - JSCompiler_object_inline_message_2526, - JSCompiler_object_inline_digest_2527, + JSCompiler_object_inline_message_2542, + JSCompiler_object_inline_digest_2543, renderLanes, null )), - (JSCompiler_object_inline_message_2526.flags |= 2), - (JSCompiler_object_inline_stack_2528.return = workInProgress), - (JSCompiler_object_inline_message_2526.return = workInProgress), - (JSCompiler_object_inline_stack_2528.sibling = - JSCompiler_object_inline_message_2526), - (workInProgress.child = JSCompiler_object_inline_stack_2528), + (JSCompiler_object_inline_message_2542.flags |= 2), + (JSCompiler_object_inline_stack_2544.return = workInProgress), + (JSCompiler_object_inline_message_2542.return = workInProgress), + (JSCompiler_object_inline_stack_2544.sibling = + JSCompiler_object_inline_message_2542), + (workInProgress.child = JSCompiler_object_inline_stack_2544), reconcileChildFibers( workInProgress, current.child, null, renderLanes ), - (JSCompiler_object_inline_stack_2528 = workInProgress.child), - (JSCompiler_object_inline_stack_2528.memoizedState = + (JSCompiler_object_inline_stack_2544 = workInProgress.child), + (JSCompiler_object_inline_stack_2544.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_stack_2528.childLanes = + (JSCompiler_object_inline_stack_2544.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2529, + JSCompiler_object_inline_componentStack_2545, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - (workInProgress = JSCompiler_object_inline_message_2526)); + (workInProgress = JSCompiler_object_inline_message_2542)); else if ( (pushPrimaryTreeSuspenseHandler(workInProgress), isHydrating && console.error( "We should not be hydrating here. This is a bug in React. Please file a bug." ), - isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2527)) + isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2543)) ) { - JSCompiler_object_inline_componentStack_2529 = - JSCompiler_object_inline_digest_2527.nextSibling && - JSCompiler_object_inline_digest_2527.nextSibling.dataset; - if (JSCompiler_object_inline_componentStack_2529) { - JSCompiler_temp = JSCompiler_object_inline_componentStack_2529.dgst; - var message = JSCompiler_object_inline_componentStack_2529.msg; - instance = JSCompiler_object_inline_componentStack_2529.stck; + JSCompiler_object_inline_componentStack_2545 = + JSCompiler_object_inline_digest_2543.nextSibling && + JSCompiler_object_inline_digest_2543.nextSibling.dataset; + if (JSCompiler_object_inline_componentStack_2545) { + JSCompiler_temp = JSCompiler_object_inline_componentStack_2545.dgst; + var message = JSCompiler_object_inline_componentStack_2545.msg; + instance = JSCompiler_object_inline_componentStack_2545.stck; var componentStack = - JSCompiler_object_inline_componentStack_2529.cstck; + JSCompiler_object_inline_componentStack_2545.cstck; } - JSCompiler_object_inline_message_2526 = message; - JSCompiler_object_inline_digest_2527 = JSCompiler_temp; - JSCompiler_object_inline_stack_2528 = instance; - JSCompiler_temp = JSCompiler_object_inline_componentStack_2529 = + JSCompiler_object_inline_message_2542 = message; + JSCompiler_object_inline_digest_2543 = JSCompiler_temp; + JSCompiler_object_inline_stack_2544 = instance; + JSCompiler_temp = JSCompiler_object_inline_componentStack_2545 = componentStack; - "POSTPONE" !== JSCompiler_object_inline_digest_2527 && - ((JSCompiler_object_inline_componentStack_2529 = - JSCompiler_object_inline_message_2526 - ? Error(JSCompiler_object_inline_message_2526) + "POSTPONE" !== JSCompiler_object_inline_digest_2543 && + ((JSCompiler_object_inline_componentStack_2545 = + JSCompiler_object_inline_message_2542 + ? Error(JSCompiler_object_inline_message_2542) : Error( "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." )), - (JSCompiler_object_inline_componentStack_2529.stack = - JSCompiler_object_inline_stack_2528 || ""), - (JSCompiler_object_inline_componentStack_2529.digest = - JSCompiler_object_inline_digest_2527), - (JSCompiler_object_inline_stack_2528 = + (JSCompiler_object_inline_componentStack_2545.stack = + JSCompiler_object_inline_stack_2544 || ""), + (JSCompiler_object_inline_componentStack_2545.digest = + JSCompiler_object_inline_digest_2543), + (JSCompiler_object_inline_stack_2544 = void 0 === JSCompiler_temp ? null : JSCompiler_temp), - (JSCompiler_object_inline_message_2526 = { - value: JSCompiler_object_inline_componentStack_2529, + (JSCompiler_object_inline_message_2542 = { + value: JSCompiler_object_inline_componentStack_2545, source: null, - stack: JSCompiler_object_inline_stack_2528 + stack: JSCompiler_object_inline_stack_2544 }), - "string" === typeof JSCompiler_object_inline_stack_2528 && + "string" === typeof JSCompiler_object_inline_stack_2544 && CapturedStacks.set( - JSCompiler_object_inline_componentStack_2529, - JSCompiler_object_inline_message_2526 + JSCompiler_object_inline_componentStack_2545, + JSCompiler_object_inline_message_2542 ), - queueHydrationError(JSCompiler_object_inline_message_2526)); + queueHydrationError(JSCompiler_object_inline_message_2542)); workInProgress = retrySuspenseComponentWithoutHydrating( current, workInProgress, @@ -9842,44 +9591,44 @@ renderLanes, !1 ), - (JSCompiler_object_inline_componentStack_2529 = + (JSCompiler_object_inline_componentStack_2545 = 0 !== (renderLanes & current.childLanes)), - didReceiveUpdate || JSCompiler_object_inline_componentStack_2529) + didReceiveUpdate || JSCompiler_object_inline_componentStack_2545) ) { - JSCompiler_object_inline_componentStack_2529 = workInProgressRoot; + JSCompiler_object_inline_componentStack_2545 = workInProgressRoot; if ( - null !== JSCompiler_object_inline_componentStack_2529 && - ((JSCompiler_object_inline_stack_2528 = renderLanes & -renderLanes), - (JSCompiler_object_inline_stack_2528 = - 0 !== (JSCompiler_object_inline_stack_2528 & 42) + null !== JSCompiler_object_inline_componentStack_2545 && + ((JSCompiler_object_inline_stack_2544 = renderLanes & -renderLanes), + (JSCompiler_object_inline_stack_2544 = + 0 !== (JSCompiler_object_inline_stack_2544 & 42) ? 1 : getBumpedLaneForHydrationByLane( - JSCompiler_object_inline_stack_2528 + JSCompiler_object_inline_stack_2544 )), - (JSCompiler_object_inline_stack_2528 = + (JSCompiler_object_inline_stack_2544 = 0 !== - (JSCompiler_object_inline_stack_2528 & - (JSCompiler_object_inline_componentStack_2529.suspendedLanes | + (JSCompiler_object_inline_stack_2544 & + (JSCompiler_object_inline_componentStack_2545.suspendedLanes | renderLanes)) ? 0 - : JSCompiler_object_inline_stack_2528), - 0 !== JSCompiler_object_inline_stack_2528 && - JSCompiler_object_inline_stack_2528 !== prevState.retryLane) + : JSCompiler_object_inline_stack_2544), + 0 !== JSCompiler_object_inline_stack_2544 && + JSCompiler_object_inline_stack_2544 !== prevState.retryLane) ) throw ( - ((prevState.retryLane = JSCompiler_object_inline_stack_2528), + ((prevState.retryLane = JSCompiler_object_inline_stack_2544), enqueueConcurrentRenderForLane( current, - JSCompiler_object_inline_stack_2528 + JSCompiler_object_inline_stack_2544 ), scheduleUpdateOnFiber( - JSCompiler_object_inline_componentStack_2529, + JSCompiler_object_inline_componentStack_2545, current, - JSCompiler_object_inline_stack_2528 + JSCompiler_object_inline_stack_2544 ), SelectiveHydrationException) ); - JSCompiler_object_inline_digest_2527.data === + JSCompiler_object_inline_digest_2543.data === SUSPENSE_PENDING_START_DATA || renderDidSuspendDelayIfPossible(); workInProgress = retrySuspenseComponentWithoutHydrating( current, @@ -9887,14 +9636,14 @@ renderLanes ); } else - JSCompiler_object_inline_digest_2527.data === + JSCompiler_object_inline_digest_2543.data === SUSPENSE_PENDING_START_DATA ? ((workInProgress.flags |= 192), (workInProgress.child = current.child), (workInProgress = null)) : ((current = prevState.treeContext), (nextHydratableInstance = getNextHydratable( - JSCompiler_object_inline_digest_2527.nextSibling + JSCompiler_object_inline_digest_2543.nextSibling )), (hydrationParentFiber = workInProgress), (isHydrating = !0), @@ -9912,54 +9661,54 @@ (treeContextProvider = workInProgress)), (workInProgress = mountSuspensePrimaryChildren( workInProgress, - JSCompiler_object_inline_stack_2528.children + JSCompiler_object_inline_stack_2544.children )), (workInProgress.flags |= 4096)); return workInProgress; } - if (JSCompiler_object_inline_message_2526) + if (JSCompiler_object_inline_message_2542) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_message_2526 = - JSCompiler_object_inline_stack_2528.fallback), - (JSCompiler_object_inline_digest_2527 = workInProgress.mode), + (JSCompiler_object_inline_message_2542 = + JSCompiler_object_inline_stack_2544.fallback), + (JSCompiler_object_inline_digest_2543 = workInProgress.mode), (JSCompiler_temp = current.child), (instance = JSCompiler_temp.sibling), - (JSCompiler_object_inline_stack_2528 = createWorkInProgress( + (JSCompiler_object_inline_stack_2544 = createWorkInProgress( JSCompiler_temp, { mode: "hidden", - children: JSCompiler_object_inline_stack_2528.children + children: JSCompiler_object_inline_stack_2544.children } )), - (JSCompiler_object_inline_stack_2528.subtreeFlags = + (JSCompiler_object_inline_stack_2544.subtreeFlags = JSCompiler_temp.subtreeFlags & 65011712), null !== instance - ? (JSCompiler_object_inline_message_2526 = createWorkInProgress( + ? (JSCompiler_object_inline_message_2542 = createWorkInProgress( instance, - JSCompiler_object_inline_message_2526 + JSCompiler_object_inline_message_2542 )) - : ((JSCompiler_object_inline_message_2526 = createFiberFromFragment( - JSCompiler_object_inline_message_2526, - JSCompiler_object_inline_digest_2527, + : ((JSCompiler_object_inline_message_2542 = createFiberFromFragment( + JSCompiler_object_inline_message_2542, + JSCompiler_object_inline_digest_2543, renderLanes, null )), - (JSCompiler_object_inline_message_2526.flags |= 2)), - (JSCompiler_object_inline_message_2526.return = workInProgress), - (JSCompiler_object_inline_stack_2528.return = workInProgress), - (JSCompiler_object_inline_stack_2528.sibling = - JSCompiler_object_inline_message_2526), - (workInProgress.child = JSCompiler_object_inline_stack_2528), - (JSCompiler_object_inline_stack_2528 = - JSCompiler_object_inline_message_2526), - (JSCompiler_object_inline_message_2526 = workInProgress.child), - (JSCompiler_object_inline_digest_2527 = current.child.memoizedState), - null === JSCompiler_object_inline_digest_2527 - ? (JSCompiler_object_inline_digest_2527 = + (JSCompiler_object_inline_message_2542.flags |= 2)), + (JSCompiler_object_inline_message_2542.return = workInProgress), + (JSCompiler_object_inline_stack_2544.return = workInProgress), + (JSCompiler_object_inline_stack_2544.sibling = + JSCompiler_object_inline_message_2542), + (workInProgress.child = JSCompiler_object_inline_stack_2544), + (JSCompiler_object_inline_stack_2544 = + JSCompiler_object_inline_message_2542), + (JSCompiler_object_inline_message_2542 = workInProgress.child), + (JSCompiler_object_inline_digest_2543 = current.child.memoizedState), + null === JSCompiler_object_inline_digest_2543 + ? (JSCompiler_object_inline_digest_2543 = mountSuspenseOffscreenState(renderLanes)) : ((JSCompiler_temp = - JSCompiler_object_inline_digest_2527.cachePool), + JSCompiler_object_inline_digest_2543.cachePool), null !== JSCompiler_temp ? ((instance = CacheContext._currentValue), (JSCompiler_temp = @@ -9967,38 +9716,38 @@ ? { parent: instance, pool: instance } : JSCompiler_temp)) : (JSCompiler_temp = getSuspendedCache()), - (JSCompiler_object_inline_digest_2527 = { + (JSCompiler_object_inline_digest_2543 = { baseLanes: - JSCompiler_object_inline_digest_2527.baseLanes | renderLanes, + JSCompiler_object_inline_digest_2543.baseLanes | renderLanes, cachePool: JSCompiler_temp })), - (JSCompiler_object_inline_message_2526.memoizedState = - JSCompiler_object_inline_digest_2527), - (JSCompiler_object_inline_message_2526.childLanes = + (JSCompiler_object_inline_message_2542.memoizedState = + JSCompiler_object_inline_digest_2543), + (JSCompiler_object_inline_message_2542.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2529, + JSCompiler_object_inline_componentStack_2545, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - JSCompiler_object_inline_stack_2528 + JSCompiler_object_inline_stack_2544 ); pushPrimaryTreeSuspenseHandler(workInProgress); renderLanes = current.child; current = renderLanes.sibling; renderLanes = createWorkInProgress(renderLanes, { mode: "visible", - children: JSCompiler_object_inline_stack_2528.children + children: JSCompiler_object_inline_stack_2544.children }); renderLanes.return = workInProgress; renderLanes.sibling = null; null !== current && - ((JSCompiler_object_inline_componentStack_2529 = + ((JSCompiler_object_inline_componentStack_2545 = workInProgress.deletions), - null === JSCompiler_object_inline_componentStack_2529 + null === JSCompiler_object_inline_componentStack_2545 ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16)) - : JSCompiler_object_inline_componentStack_2529.push(current)); + : JSCompiler_object_inline_componentStack_2545.push(current)); workInProgress.child = renderLanes; workInProgress.memoizedState = null; return renderLanes; @@ -11082,7 +10831,7 @@ ? ((nextState = getTreeId()), (nextProps = "\u00ab" + nextProps + "T" + nextState + "\u00bb")) - : ((nextState = globalClientIdCounter$1++), + : ((nextState = globalClientIdCounter++), (nextProps = "\u00ab" + nextProps + @@ -11090,6 +10839,9 @@ nextState.toString(32) + "\u00bb")), (prevSibling.autoName = nextProps)), + null !== current && current.memoizedProps.name !== returnFiber.name + ? (workInProgress.flags |= 4194816) + : markRef(current, workInProgress), reconcileChildren( current, workInProgress, @@ -11366,15 +11118,34 @@ function commitAttachRef(finishedWork) { var ref = finishedWork.ref; if (null !== ref) { - var instance = finishedWork.stateNode; + switch (finishedWork.tag) { + case 26: + case 27: + case 5: + var instanceToUse = finishedWork.stateNode; + break; + case 30: + instanceToUse = finishedWork.stateNode; + var name = getViewTransitionName( + finishedWork.memoizedProps, + instanceToUse + ); + if (null === instanceToUse.ref || instanceToUse.ref.name !== name) + instanceToUse.ref = createViewTransitionInstance(name); + instanceToUse = instanceToUse.ref; + break; + default: + instanceToUse = finishedWork.stateNode; + } if ("function" === typeof ref) if (shouldProfile(finishedWork)) try { - startEffectTimer(), (finishedWork.refCleanup = ref(instance)); + startEffectTimer(), + (finishedWork.refCleanup = ref(instanceToUse)); } finally { recordEffectDuration(); } - else finishedWork.refCleanup = ref(instance); + else finishedWork.refCleanup = ref(instanceToUse); else "string" === typeof ref ? console.error("String refs are no longer supported.") @@ -11383,7 +11154,7 @@ "Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().", getComponentNameFromFiber(finishedWork) ), - (ref.current = instance); + (ref.current = instanceToUse); } } function safelyAttachRef(current, nearestMountedAncestor) { @@ -11905,11 +11676,12 @@ function commitAppearingPairViewTransitions(placement) { if (0 !== (placement.subtreeFlags & 2097152)) for (placement = placement.child; null !== placement; ) { - if (22 !== placement.tag || null !== placement.memoizedState) { + if (22 !== placement.tag || null !== placement.memoizedState) if ( + (commitAppearingPairViewTransitions(placement), 30 === placement.tag && - 0 !== (placement.flags & 2097152) && - placement.stateNode.paired + 0 !== (placement.flags & 2097152) && + placement.stateNode.paired) ) { var props = placement.memoizedProps; if (null == props.name || "auto" === props.name) @@ -11925,8 +11697,6 @@ !1 ) || restoreViewTransitionOnHostInstances(placement.child, !1); } - commitAppearingPairViewTransitions(placement); - } placement = placement.sibling; } } @@ -11942,7 +11712,9 @@ null, !1 ) - ? commitAppearingPairViewTransitions(placement) + ? (commitAppearingPairViewTransitions(placement), + placement.stateNode.paired || + scheduleViewTransitionEvent(placement, props.onEnter)) : restoreViewTransitionOnHostInstances(placement.child, !1); } else if (0 !== (placement.subtreeFlags & 33554432)) for (placement = placement.child; null !== placement; ) @@ -11975,7 +11747,8 @@ null, !1 ) - ? (pair.paired = deletion.stateNode) + ? ((pair.paired = deletion.stateNode), + scheduleViewTransitionEvent(deletion, props.onShare)) : restoreViewTransitionOnHostInstances(deletion.child, !1), appearingViewTransitions.delete(name), 0 === appearingViewTransitions.size) @@ -11996,23 +11769,28 @@ var props = deletion.memoizedProps, name = getViewTransitionName(props, deletion.stateNode); viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - deletion.child, - name, - props.className, - null, - !1 + if ( + applyViewTransitionToHostInstances( + deletion.child, + name, + props.className, + null, + !1 + ) ) - ? null !== appearingViewTransitions && - ((props = appearingViewTransitions.get(name)), - void 0 !== props && - ((props.paired = deletion.stateNode), - appearingViewTransitions.delete(name)), + if (null !== appearingViewTransitions) { + var pair = appearingViewTransitions.get(name); + void 0 !== pair + ? ((pair.paired = deletion.stateNode), + appearingViewTransitions.delete(name), + scheduleViewTransitionEvent(deletion, props.onShare)) + : scheduleViewTransitionEvent(deletion, props.onExit); commitDeletedPairViewTransitions( deletion, appearingViewTransitions - )) - : restoreViewTransitionOnHostInstances(deletion.child, !1); + ); + } else scheduleViewTransitionEvent(deletion, props.onExit); + else restoreViewTransitionOnHostInstances(deletion.child, !1); } else if (0 !== (deletion.subtreeFlags & 33554432)) for (deletion = deletion.child; null !== deletion; ) commitExitViewTransitions(deletion, appearingViewTransitions), @@ -12180,6 +11958,10 @@ changedParent.child, changedParent.memoizedState, !1 + ), + scheduleViewTransitionEvent( + changedParent, + changedParent.memoizedProps.onLayout )); } else 0 !== (changedParent.subtreeFlags & 33554432) && @@ -12376,6 +12158,10 @@ ? safelyAttachRef(finishedWork, finishedWork.return) : safelyDetachRef(finishedWork, finishedWork.return)); break; + case 30: + recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); + flags & 512 && safelyAttachRef(finishedWork, finishedWork.return); + break; default: recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); } @@ -13176,6 +12962,10 @@ attachSuspenseRetryListeners(finishedWork, current))); break; case 30: + flags & 512 && + (offscreenSubtreeWasHidden || + null === current || + safelyDetachRef(current, current.return)); flags = viewTransitionMutationContext; viewTransitionMutationContext = !1; recursivelyTraverseMutationEffects(root, finishedWork, lanes); @@ -13250,12 +13040,12 @@ viewTransitionCancelableChildren = null; if (null !== finishedWork) for (var i = 0; i < finishedWork.length; i += 3) { - current = finishedWork[i]; - var oldName = finishedWork[i + 1]; - restoreViewTransitionName(current, finishedWork[i + 2]); - current = current.ownerDocument.documentElement; - null !== current && - current.animate( + var instance = finishedWork[i], + oldName = finishedWork[i + 1]; + restoreViewTransitionName(instance, finishedWork[i + 2]); + instance = instance.ownerDocument.documentElement; + null !== instance && + instance.animate( { opacity: [0, 0], pointerEvents: ["none", "none"] }, { duration: 0, @@ -13302,8 +13092,9 @@ break; case 30: 0 !== (finishedWork.subtreeFlags & 8246) && - ((i = viewTransitionContextChanged), - (oldName = viewTransitionCancelableChildren), + ((i = 0 !== (finishedWork.flags & 4)), + (oldName = viewTransitionContextChanged), + (instance = viewTransitionCancelableChildren), (viewTransitionContextChanged = !1), (viewTransitionCancelableChildren = null), recursivelyTraverseAfterMutationEffects(root, finishedWork), @@ -13320,15 +13111,22 @@ viewTransitionHostInstanceIdx !== (null === root ? 0 : root.length) && (finishedWork.flags |= 32), 0 !== (finishedWork.flags & 4) && current - ? (viewTransitionCancelableChildren = oldName) - : null !== oldName && - (oldName.push.apply( - oldName, + ? ((root = finishedWork.memoizedProps), + scheduleViewTransitionEvent( + finishedWork, + i || viewTransitionContextChanged + ? root.onUpdate + : root.onLayout + ), + (viewTransitionCancelableChildren = instance)) + : null !== instance && + (instance.push.apply( + instance, viewTransitionCancelableChildren ), - (viewTransitionCancelableChildren = oldName)), + (viewTransitionCancelableChildren = instance)), (viewTransitionContextChanged = - 0 !== (finishedWork.flags & 32) ? !0 : i)); + 0 !== (finishedWork.flags & 32) ? !0 : oldName)); break; default: recursivelyTraverseAfterMutationEffects(root, finishedWork); @@ -13377,6 +13175,8 @@ null === finishedWork.memoizedState && recursivelyTraverseDisappearLayoutEffects(finishedWork); break; + case 30: + safelyDetachRef(finishedWork, finishedWork.return); default: recursivelyTraverseDisappearLayoutEffects(finishedWork); } @@ -13515,6 +13315,14 @@ ); safelyAttachRef(finishedWork, finishedWork.return); break; + case 30: + recursivelyTraverseReappearLayoutEffects( + finishedRoot, + finishedWork, + includeWorkInProgressEffects + ); + safelyAttachRef(finishedWork, finishedWork.return); + break; default: recursivelyTraverseReappearLayoutEffects( finishedRoot, @@ -14527,7 +14335,7 @@ (key = createFiber(30, pendingProps, key, mode)), (key.elementType = REACT_VIEW_TRANSITION_TYPE), (key.lanes = lanes), - (key.stateNode = { autoName: null, paired: null }), + (key.stateNode = { autoName: null, paired: null, ref: null }), key ); default: @@ -14604,73 +14412,324 @@ mode._debugTask = element._debugTask; return mode; } - function createFiberFromFragment(elements, mode, lanes, key) { - elements = createFiber(7, elements, key, mode); - elements.lanes = lanes; - return elements; + function createFiberFromFragment(elements, mode, lanes, key) { + elements = createFiber(7, elements, key, mode); + elements.lanes = lanes; + return elements; + } + function createFiberFromOffscreen(pendingProps, mode, lanes, key) { + pendingProps = createFiber(22, pendingProps, key, mode); + pendingProps.elementType = REACT_OFFSCREEN_TYPE; + pendingProps.lanes = lanes; + var primaryChildInstance = { + _visibility: OffscreenVisible, + _pendingVisibility: OffscreenVisible, + _pendingMarkers: null, + _retryCache: null, + _transitions: null, + _current: null, + detach: function () { + var instance = primaryChildInstance, + fiber = instance._current; + if (null === fiber) + throw Error( + "Calling Offscreen.detach before instance handle has been set." + ); + if (0 === (instance._pendingVisibility & OffscreenDetached)) { + var root = enqueueConcurrentRenderForLane(fiber, 2); + null !== root && + ((instance._pendingVisibility |= OffscreenDetached), + scheduleUpdateOnFiber(root, fiber, 2)); + } + }, + attach: function () { + var instance = primaryChildInstance, + fiber = instance._current; + if (null === fiber) + throw Error( + "Calling Offscreen.detach before instance handle has been set." + ); + if (0 !== (instance._pendingVisibility & OffscreenDetached)) { + var root = enqueueConcurrentRenderForLane(fiber, 2); + null !== root && + ((instance._pendingVisibility &= ~OffscreenDetached), + scheduleUpdateOnFiber(root, fiber, 2)); + } + } + }; + pendingProps.stateNode = primaryChildInstance; + return pendingProps; + } + function createFiberFromText(content, mode, lanes) { + content = createFiber(6, content, null, mode); + content.lanes = lanes; + return content; + } + function createFiberFromPortal(portal, mode, lanes) { + mode = createFiber( + 4, + null !== portal.children ? portal.children : [], + portal.key, + mode + ); + mode.lanes = lanes; + mode.stateNode = { + containerInfo: portal.containerInfo, + pendingChildren: null, + implementation: portal.implementation + }; + return mode; + } + function buildHydrationDiffNode(fiber, distanceFromLeaf) { + if (null === fiber.return) { + if (null === hydrationDiffRootDEV) + hydrationDiffRootDEV = { + fiber: fiber, + children: [], + serverProps: void 0, + serverTail: [], + distanceFromLeaf: distanceFromLeaf + }; + else { + if (hydrationDiffRootDEV.fiber !== fiber) + throw Error( + "Saw multiple hydration diff roots in a pass. This is a bug in React." + ); + hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf && + (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf); + } + return hydrationDiffRootDEV; + } + var siblings = buildHydrationDiffNode( + fiber.return, + distanceFromLeaf + 1 + ).children; + if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber) + return ( + (siblings = siblings[siblings.length - 1]), + siblings.distanceFromLeaf > distanceFromLeaf && + (siblings.distanceFromLeaf = distanceFromLeaf), + siblings + ); + distanceFromLeaf = { + fiber: fiber, + children: [], + serverProps: void 0, + serverTail: [], + distanceFromLeaf: distanceFromLeaf + }; + siblings.push(distanceFromLeaf); + return distanceFromLeaf; + } + function warnNonHydratedInstance(fiber, rejectedCandidate) { + didSuspendOrErrorDEV || + ((fiber = buildHydrationDiffNode(fiber, 0)), + (fiber.serverProps = null), + null !== rejectedCandidate && + ((rejectedCandidate = + describeHydratableInstanceForDevWarnings(rejectedCandidate)), + fiber.serverTail.push(rejectedCandidate))); + } + function throwOnHydrationMismatch(fiber) { + var diff = "", + diffRoot = hydrationDiffRootDEV; + null !== diffRoot && + ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot))); + queueHydrationError( + createCapturedValueAtFiber( + Error( + "Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\nhttps://react.dev/link/hydration-mismatch" + + diff + ), + fiber + ) + ); + throw HydrationMismatchException; + } + function prepareToHydrateHostInstance(fiber) { + var didHydrate = fiber.stateNode; + var type = fiber.type, + props = fiber.memoizedProps; + didHydrate[internalInstanceKey] = fiber; + didHydrate[internalPropsKey] = props; + validatePropertiesInDevelopment(type, props); + switch (type) { + case "dialog": + listenToNonDelegatedEvent("cancel", didHydrate); + listenToNonDelegatedEvent("close", didHydrate); + break; + case "iframe": + case "object": + case "embed": + listenToNonDelegatedEvent("load", didHydrate); + break; + case "video": + case "audio": + for (type = 0; type < mediaEventTypes.length; type++) + listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate); + break; + case "source": + listenToNonDelegatedEvent("error", didHydrate); + break; + case "img": + case "image": + case "link": + listenToNonDelegatedEvent("error", didHydrate); + listenToNonDelegatedEvent("load", didHydrate); + break; + case "details": + listenToNonDelegatedEvent("toggle", didHydrate); + break; + case "input": + checkControlledValueProps("input", props); + listenToNonDelegatedEvent("invalid", didHydrate); + validateInputProps(didHydrate, props); + initInput( + didHydrate, + props.value, + props.defaultValue, + props.checked, + props.defaultChecked, + props.type, + props.name, + !0 + ); + track(didHydrate); + break; + case "option": + validateOptionProps(didHydrate, props); + break; + case "select": + checkControlledValueProps("select", props); + listenToNonDelegatedEvent("invalid", didHydrate); + validateSelectProps(didHydrate, props); + break; + case "textarea": + checkControlledValueProps("textarea", props), + listenToNonDelegatedEvent("invalid", didHydrate), + validateTextareaProps(didHydrate, props), + initTextarea( + didHydrate, + props.value, + props.defaultValue, + props.children + ), + track(didHydrate); + } + type = props.children; + ("string" !== typeof type && + "number" !== typeof type && + "bigint" !== typeof type) || + didHydrate.textContent === "" + type || + !0 === props.suppressHydrationWarning || + checkForUnmatchedText(didHydrate.textContent, type) + ? (null != props.popover && + (listenToNonDelegatedEvent("beforetoggle", didHydrate), + listenToNonDelegatedEvent("toggle", didHydrate)), + null != props.onScroll && + listenToNonDelegatedEvent("scroll", didHydrate), + null != props.onScrollEnd && + listenToNonDelegatedEvent("scrollend", didHydrate), + null != props.onClick && (didHydrate.onclick = noop$1), + (didHydrate = !0)) + : (didHydrate = !1); + didHydrate || throwOnHydrationMismatch(fiber); + } + function popToNextHostParent(fiber) { + for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) + switch (hydrationParentFiber.tag) { + case 3: + case 27: + rootOrSingletonContext = !0; + return; + case 5: + case 13: + rootOrSingletonContext = !1; + return; + default: + hydrationParentFiber = hydrationParentFiber.return; + } + } + function popHydrationState(fiber) { + if (fiber !== hydrationParentFiber) return !1; + if (!isHydrating) + return popToNextHostParent(fiber), (isHydrating = !0), !1; + var shouldClear = !1, + JSCompiler_temp; + if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { + if ((JSCompiler_temp = 5 === fiber.tag)) + (JSCompiler_temp = fiber.type), + (JSCompiler_temp = + !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || + shouldSetTextContent(fiber.type, fiber.memoizedProps)); + JSCompiler_temp = !JSCompiler_temp; + } + JSCompiler_temp && (shouldClear = !0); + if (shouldClear && nextHydratableInstance) { + for (shouldClear = nextHydratableInstance; shouldClear; ) { + JSCompiler_temp = buildHydrationDiffNode(fiber, 0); + var description = + describeHydratableInstanceForDevWarnings(shouldClear); + JSCompiler_temp.serverTail.push(description); + shouldClear = + "Suspense" === description.type + ? getNextHydratableInstanceAfterSuspenseInstance(shouldClear) + : getNextHydratable(shouldClear.nextSibling); + } + throwOnHydrationMismatch(fiber); + } + popToNextHostParent(fiber); + if (13 === fiber.tag) { + fiber = fiber.memoizedState; + fiber = null !== fiber ? fiber.dehydrated : null; + if (!fiber) + throw Error( + "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue." + ); + nextHydratableInstance = + getNextHydratableInstanceAfterSuspenseInstance(fiber); + } else + nextHydratableInstance = hydrationParentFiber + ? getNextHydratable(fiber.stateNode.nextSibling) + : null; + return !0; + } + function resetHydrationState() { + nextHydratableInstance = hydrationParentFiber = null; + didSuspendOrErrorDEV = isHydrating = !1; } - function createFiberFromOffscreen(pendingProps, mode, lanes, key) { - pendingProps = createFiber(22, pendingProps, key, mode); - pendingProps.elementType = REACT_OFFSCREEN_TYPE; - pendingProps.lanes = lanes; - var primaryChildInstance = { - _visibility: OffscreenVisible, - _pendingVisibility: OffscreenVisible, - _pendingMarkers: null, - _retryCache: null, - _transitions: null, - _current: null, - detach: function () { - var instance = primaryChildInstance, - fiber = instance._current; - if (null === fiber) - throw Error( - "Calling Offscreen.detach before instance handle has been set." - ); - if (0 === (instance._pendingVisibility & OffscreenDetached)) { - var root = enqueueConcurrentRenderForLane(fiber, 2); - null !== root && - ((instance._pendingVisibility |= OffscreenDetached), - scheduleUpdateOnFiber(root, fiber, 2)); - } - }, - attach: function () { - var instance = primaryChildInstance, - fiber = instance._current; - if (null === fiber) - throw Error( - "Calling Offscreen.detach before instance handle has been set." - ); - if (0 !== (instance._pendingVisibility & OffscreenDetached)) { - var root = enqueueConcurrentRenderForLane(fiber, 2); - null !== root && - ((instance._pendingVisibility &= ~OffscreenDetached), - scheduleUpdateOnFiber(root, fiber, 2)); - } - } - }; - pendingProps.stateNode = primaryChildInstance; - return pendingProps; + function upgradeHydrationErrorsToRecoverable() { + var queuedErrors = hydrationErrors; + null !== queuedErrors && + (null === workInProgressRootRecoverableErrors + ? (workInProgressRootRecoverableErrors = queuedErrors) + : workInProgressRootRecoverableErrors.push.apply( + workInProgressRootRecoverableErrors, + queuedErrors + ), + (hydrationErrors = null)); + return queuedErrors; } - function createFiberFromText(content, mode, lanes) { - content = createFiber(6, content, null, mode); - content.lanes = lanes; - return content; + function queueHydrationError(error) { + null === hydrationErrors + ? (hydrationErrors = [error]) + : hydrationErrors.push(error); } - function createFiberFromPortal(portal, mode, lanes) { - mode = createFiber( - 4, - null !== portal.children ? portal.children : [], - portal.key, - mode - ); - mode.lanes = lanes; - mode.stateNode = { - containerInfo: portal.containerInfo, - pendingChildren: null, - implementation: portal.implementation - }; - return mode; + function emitPendingHydrationWarnings() { + var diffRoot = hydrationDiffRootDEV; + null !== diffRoot && + ((hydrationDiffRootDEV = null), + (diffRoot = describeDiff(diffRoot)), + console.error( + "A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\n%s%s", + "https://react.dev/link/hydration-mismatch", + diffRoot + )); + } + function getViewTransitionName(props, instance) { + return null != props.name && "auto" !== props.name + ? props.name + : instance.autoName; } function markUpdate(workInProgress) { workInProgress.flags |= 4; @@ -15530,6 +15589,20 @@ null !== suspenseHandler && (suspenseHandler.flags |= 32); return workInProgressDeferredLane; } + function scheduleViewTransitionEvent(fiber, callback) { + if (null != callback) { + var state = fiber.stateNode, + instance = state.ref; + null === instance && + (instance = state.ref = + createViewTransitionInstance( + getViewTransitionName(fiber.memoizedProps, state) + )); + null === pendingViewTransitionEvents && + (pendingViewTransitionEvents = []); + pendingViewTransitionEvents.push(callback.bind(null, instance)); + } + } function scheduleUpdateOnFiber(root, fiber, lane) { isRunningInsertionEffect && console.error("useInsertionEffect must not schedule updates."); @@ -16808,6 +16881,7 @@ pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate; pendingPassiveTransitions = transitions; pendingRecoverableErrors = recoverableErrors; + pendingViewTransitionEvents = null; pendingEffectsRenderEndTime = completedRenderEndTime; pendingSuspendedCommitReason = suspendedCommitReason; recoverableErrors = (lanes & 335544192) === lanes ? 10262 : 10256; @@ -17152,6 +17226,14 @@ (ReactDOMSharedInternals.p = schedulerPriority); } } + recoverableErrors = pendingViewTransitionEvents; + if (null !== recoverableErrors) + for ( + pendingViewTransitionEvents = null, onRecoverableError = 0; + onRecoverableError < recoverableErrors.length; + onRecoverableError++ + ) + (0, recoverableErrors[onRecoverableError])(); 0 !== (pendingEffectsLanes & 3) && flushPendingEffects(); ensureRootIsScheduled(root); suspendedCommitReason = root.pendingLanes; @@ -21083,6 +21165,19 @@ return !1; } } + function ViewTransitionPseudoElement(pseudo, name) { + this._scope = document.documentElement; + this._selector = "::view-transition-" + pseudo + "(" + name + ")"; + } + function createViewTransitionInstance(name) { + return { + name: name, + group: new ViewTransitionPseudoElement("group", name), + imagePair: new ViewTransitionPseudoElement("image-pair", name), + old: new ViewTransitionPseudoElement("old", name), + new: new ViewTransitionPseudoElement("new", name) + }; + } function clearContainerSparingly(container) { var nextNode = container.firstChild; nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling); @@ -24100,6 +24195,52 @@ "abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll scrollEnd toggle touchMove waiting wheel".split( " " ), + CapturedStacks = new WeakMap(), + OffscreenVisible = 1, + OffscreenDetached = 2, + OffscreenPassiveEffectsConnected = 4, + concurrentQueues = [], + concurrentQueuesIndex = 0, + concurrentlyUpdatedLanes = 0, + emptyContextObject = {}; + Object.freeze(emptyContextObject); + var resolveFamily = null, + failedBoundaries = null, + NoMode = 0, + ConcurrentMode = 1, + ProfileMode = 2, + StrictLegacyMode = 8, + StrictEffectsMode = 16, + NoStrictPassiveEffectsMode = 64, + now = Scheduler.unstable_now, + renderStartTime = -0, + commitStartTime = -0, + commitEndTime = -0, + commitErrors = null, + profilerStartTime = -1.1, + profilerEffectDuration = -0, + componentEffectDuration = -0, + componentEffectStartTime = -1.1, + componentEffectEndTime = -1.1, + componentEffectErrors = null, + blockingClampTime = -0, + blockingUpdateTime = -1.1, + blockingEventTime = -1.1, + blockingEventType = null, + blockingEventIsRepeat = !1, + blockingSpawnedUpdate = !1, + blockingSuspendedTime = -1.1, + transitionClampTime = -0, + transitionStartTime = -1.1, + transitionUpdateTime = -1.1, + transitionEventTime = -1.1, + transitionEventType = null, + transitionEventIsRepeat = !1, + transitionSuspendedTime = -1.1, + yieldReason = 0, + yieldStartTime = -1.1, + currentUpdateIsNested = !1, + nestedUpdateScheduled = !1, supportsUserTiming = "undefined" !== typeof performance && "function" === typeof performance.measure, @@ -24164,51 +24305,6 @@ } } }, - OffscreenVisible = 1, - OffscreenDetached = 2, - OffscreenPassiveEffectsConnected = 4, - concurrentQueues = [], - concurrentQueuesIndex = 0, - concurrentlyUpdatedLanes = 0, - emptyContextObject = {}; - Object.freeze(emptyContextObject); - var resolveFamily = null, - failedBoundaries = null, - NoMode = 0, - ConcurrentMode = 1, - ProfileMode = 2, - StrictLegacyMode = 8, - StrictEffectsMode = 16, - NoStrictPassiveEffectsMode = 64, - now = Scheduler.unstable_now, - renderStartTime = -0, - commitStartTime = -0, - commitEndTime = -0, - commitErrors = null, - profilerStartTime = -1.1, - profilerEffectDuration = -0, - componentEffectDuration = -0, - componentEffectStartTime = -1.1, - componentEffectEndTime = -1.1, - componentEffectErrors = null, - blockingClampTime = -0, - blockingUpdateTime = -1.1, - blockingEventTime = -1.1, - blockingEventType = null, - blockingEventIsRepeat = !1, - blockingSpawnedUpdate = !1, - blockingSuspendedTime = -1.1, - transitionClampTime = -0, - transitionStartTime = -1.1, - transitionUpdateTime = -1.1, - transitionEventTime = -1.1, - transitionEventType = null, - transitionEventIsRepeat = !1, - transitionSuspendedTime = -1.1, - yieldReason = 0, - yieldStartTime = -1.1, - currentUpdateIsNested = !1, - nestedUpdateScheduled = !1, valueCursor = createCursor(null); var rendererCursorDEV = createCursor(null); var rendererSigil = {}; @@ -24262,27 +24358,6 @@ _currentRenderer: null, _currentRenderer2: null }, - CapturedStacks = new WeakMap(), - forkStack = [], - forkStackIndex = 0, - treeForkProvider = null, - treeForkCount = 0, - idStack = [], - idStackIndex = 0, - treeContextProvider = null, - treeContextId = 1, - treeContextOverflow = "", - hydrationParentFiber = null, - nextHydratableInstance = null, - isHydrating = !1, - didSuspendOrErrorDEV = !1, - hydrationDiffRootDEV = null, - hydrationErrors = null, - rootOrSingletonContext = !1, - HydrationMismatchException = Error( - "Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React." - ), - globalClientIdCounter$1 = 0, ReactStrictModeWarnings = { recordUnsafeLifecycleWarnings: function () {}, flushPendingUnsafeLifecycleWarnings: function () {}, @@ -24534,6 +24609,15 @@ entangleTransitions(callback, inst, lane)); } }, + forkStack = [], + forkStackIndex = 0, + treeForkProvider = null, + treeForkCount = 0, + idStack = [], + idStackIndex = 0, + treeContextProvider = null, + treeContextId = 1, + treeContextOverflow = "", SuspenseException = Error( "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`." ), @@ -24594,7 +24678,7 @@ localIdCounter = 0, thenableIndexCounter$1 = 0, thenableState$1 = null, - globalClientIdCounter = 0, + globalClientIdCounter$1 = 0, RE_RENDER_LIMIT = 25, currentHookNameInDev = null, hookTypesDev = null, @@ -25912,19 +25996,30 @@ } catch (e$7) { hasBadMapPolyfill = !0; } - var DefaultAsyncDispatcher = { - getCacheForType: function (resourceType) { - var cache = readContext(CacheContext), - cacheForType = cache.data.get(resourceType); - void 0 === cacheForType && - ((cacheForType = resourceType()), - cache.data.set(resourceType, cacheForType)); - return cacheForType; - }, - getOwner: function () { - return current; - } - }; + var hydrationParentFiber = null, + nextHydratableInstance = null, + isHydrating = !1, + didSuspendOrErrorDEV = !1, + hydrationDiffRootDEV = null, + hydrationErrors = null, + rootOrSingletonContext = !1, + HydrationMismatchException = Error( + "Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React." + ), + globalClientIdCounter = 0, + DefaultAsyncDispatcher = { + getCacheForType: function (resourceType) { + var cache = readContext(CacheContext), + cacheForType = cache.data.get(resourceType); + void 0 === cacheForType && + ((cacheForType = resourceType()), + cache.data.set(resourceType, cacheForType)); + return cacheForType; + }, + getOwner: function () { + return current; + } + }; if ("function" === typeof Symbol && Symbol.for) { var symbolFor = Symbol.for; symbolFor("selector.component"); @@ -25998,6 +26093,7 @@ pendingEffectsRenderEndTime = -0, pendingPassiveTransitions = null, pendingRecoverableErrors = null, + pendingViewTransitionEvents = null, pendingSuspendedCommitReason = IMMEDIATE_COMMIT, NESTED_UPDATE_LIMIT = 50, nestedUpdateCount = 0, @@ -26129,8 +26225,37 @@ .catch(handleErrorInNextTick); } : scheduleTimeout, - SUSPENSEY_FONT_TIMEOUT = 500, - NotLoaded = 0, + SUSPENSEY_FONT_TIMEOUT = 500; + ViewTransitionPseudoElement.prototype.animate = function ( + keyframes, + options + ) { + options = + "number" === typeof options + ? { duration: options } + : assign({}, options); + options.pseudoElement = this._selector; + return this._scope.animate(keyframes, options); + }; + ViewTransitionPseudoElement.prototype.getAnimations = function () { + for ( + var scope = this._scope, + selector = this._selector, + animations = scope.getAnimations({ subtree: !0 }), + result = [], + i = 0; + i < animations.length; + i++ + ) { + var effect = animations[i].effect; + null !== effect && + effect.target === scope && + effect.pseudoElement === selector && + result.push(animations[i]); + } + return result; + }; + var NotLoaded = 0, Loaded = 1, Errored = 2, Settled = 3, @@ -26545,11 +26670,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-540efebc-20250112" !== 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.1.0-experimental-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -26586,10 +26711,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.1.0-experimental-056073de-20250109", + version: "19.1.0-experimental-540efebc-20250112", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-056073de-20250109" + reconcilerVersion: "19.1.0-experimental-540efebc-20250112" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -26733,7 +26858,7 @@ listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; - exports.version = "19.1.0-experimental-056073de-20250109"; + exports.version = "19.1.0-experimental-540efebc-20250112"; "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 116db86f17115..9befb8925e3e4 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 @@ -2023,19 +2023,19 @@ function getTargetInstForChangeEvent(domEventName, targetInst) { } var isInputEventSupported = !1; if (canUseDOM) { - var JSCompiler_inline_result$jscomp$284; + var JSCompiler_inline_result$jscomp$285; if (canUseDOM) { - var isSupported$jscomp$inline_418 = "oninput" in document; - if (!isSupported$jscomp$inline_418) { - var element$jscomp$inline_419 = document.createElement("div"); - element$jscomp$inline_419.setAttribute("oninput", "return;"); - isSupported$jscomp$inline_418 = - "function" === typeof element$jscomp$inline_419.oninput; + var isSupported$jscomp$inline_423 = "oninput" in document; + if (!isSupported$jscomp$inline_423) { + var element$jscomp$inline_424 = document.createElement("div"); + element$jscomp$inline_424.setAttribute("oninput", "return;"); + isSupported$jscomp$inline_423 = + "function" === typeof element$jscomp$inline_424.oninput; } - JSCompiler_inline_result$jscomp$284 = isSupported$jscomp$inline_418; - } else JSCompiler_inline_result$jscomp$284 = !1; + JSCompiler_inline_result$jscomp$285 = isSupported$jscomp$inline_423; + } else JSCompiler_inline_result$jscomp$285 = !1; isInputEventSupported = - JSCompiler_inline_result$jscomp$284 && + JSCompiler_inline_result$jscomp$285 && (!document.documentMode || 9 < document.documentMode); } function stopWatchingForValueChange() { @@ -2282,6 +2282,25 @@ function registerSimpleEvent(domEventName, reactName) { topLevelEventsToReactNames.set(domEventName, reactName); registerTwoPhaseEvent(reactName, [domEventName]); } +var CapturedStacks = new WeakMap(); +function createCapturedValueAtFiber(value, source) { + if ("object" === typeof value && null !== value) { + var existing = CapturedStacks.get(value); + if (void 0 !== existing) return existing; + source = { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; + CapturedStacks.set(value, source); + return source; + } + return { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; +} var concurrentQueues = [], concurrentQueuesIndex = 0, concurrentlyUpdatedLanes = 0; @@ -2878,267 +2897,6 @@ function releaseCache(cache) { cache.controller.abort(); }); } -var CapturedStacks = new WeakMap(); -function createCapturedValueAtFiber(value, source) { - if ("object" === typeof value && null !== value) { - var existing = CapturedStacks.get(value); - if (void 0 !== existing) return existing; - source = { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; - CapturedStacks.set(value, source); - return source; - } - return { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; -} -var forkStack = [], - forkStackIndex = 0, - treeForkProvider = null, - treeForkCount = 0, - idStack = [], - idStackIndex = 0, - treeContextProvider = null, - treeContextId = 1, - treeContextOverflow = ""; -function getTreeId() { - var overflow = treeContextOverflow, - idWithLeadingBit = treeContextId; - return ( - (idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))).toString( - 32 - ) + overflow - ); -} -function pushTreeFork(workInProgress, totalChildren) { - forkStack[forkStackIndex++] = treeForkCount; - forkStack[forkStackIndex++] = treeForkProvider; - treeForkProvider = workInProgress; - treeForkCount = totalChildren; -} -function pushTreeId(workInProgress, totalChildren, index) { - idStack[idStackIndex++] = treeContextId; - idStack[idStackIndex++] = treeContextOverflow; - idStack[idStackIndex++] = treeContextProvider; - treeContextProvider = workInProgress; - var baseIdWithLeadingBit = treeContextId; - workInProgress = treeContextOverflow; - var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; - baseIdWithLeadingBit &= ~(1 << baseLength); - index += 1; - var length = 32 - clz32(totalChildren) + baseLength; - if (30 < length) { - var numberOfOverflowBits = baseLength - (baseLength % 5); - length = ( - baseIdWithLeadingBit & - ((1 << numberOfOverflowBits) - 1) - ).toString(32); - baseIdWithLeadingBit >>= numberOfOverflowBits; - baseLength -= numberOfOverflowBits; - treeContextId = - (1 << (32 - clz32(totalChildren) + baseLength)) | - (index << baseLength) | - baseIdWithLeadingBit; - treeContextOverflow = length + workInProgress; - } else - (treeContextId = - (1 << length) | (index << baseLength) | baseIdWithLeadingBit), - (treeContextOverflow = workInProgress); -} -function pushMaterializedTreeId(workInProgress) { - null !== workInProgress.return && - (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0)); -} -function popTreeContext(workInProgress) { - for (; workInProgress === treeForkProvider; ) - (treeForkProvider = forkStack[--forkStackIndex]), - (forkStack[forkStackIndex] = null), - (treeForkCount = forkStack[--forkStackIndex]), - (forkStack[forkStackIndex] = null); - for (; workInProgress === treeContextProvider; ) - (treeContextProvider = idStack[--idStackIndex]), - (idStack[idStackIndex] = null), - (treeContextOverflow = idStack[--idStackIndex]), - (idStack[idStackIndex] = null), - (treeContextId = idStack[--idStackIndex]), - (idStack[idStackIndex] = null); -} -var hydrationParentFiber = null, - nextHydratableInstance = null, - isHydrating = !1, - hydrationErrors = null, - rootOrSingletonContext = !1, - HydrationMismatchException = Error(formatProdErrorMessage(519)); -function throwOnHydrationMismatch(fiber) { - var error = Error(formatProdErrorMessage(418, "")); - queueHydrationError(createCapturedValueAtFiber(error, fiber)); - throw HydrationMismatchException; -} -function prepareToHydrateHostInstance(fiber) { - var instance = fiber.stateNode, - type = fiber.type, - props = fiber.memoizedProps; - instance[internalInstanceKey] = fiber; - instance[internalPropsKey] = props; - switch (type) { - case "dialog": - listenToNonDelegatedEvent("cancel", instance); - listenToNonDelegatedEvent("close", instance); - break; - case "iframe": - case "object": - case "embed": - listenToNonDelegatedEvent("load", instance); - break; - case "video": - case "audio": - for (type = 0; type < mediaEventTypes.length; type++) - listenToNonDelegatedEvent(mediaEventTypes[type], instance); - break; - case "source": - listenToNonDelegatedEvent("error", instance); - break; - case "img": - case "image": - case "link": - listenToNonDelegatedEvent("error", instance); - listenToNonDelegatedEvent("load", instance); - break; - case "details": - listenToNonDelegatedEvent("toggle", instance); - break; - case "input": - listenToNonDelegatedEvent("invalid", instance); - initInput( - instance, - props.value, - props.defaultValue, - props.checked, - props.defaultChecked, - props.type, - props.name, - !0 - ); - track(instance); - break; - case "select": - listenToNonDelegatedEvent("invalid", instance); - break; - case "textarea": - listenToNonDelegatedEvent("invalid", instance), - initTextarea(instance, props.value, props.defaultValue, props.children), - track(instance); - } - type = props.children; - ("string" !== typeof type && - "number" !== typeof type && - "bigint" !== typeof type) || - instance.textContent === "" + type || - !0 === props.suppressHydrationWarning || - checkForUnmatchedText(instance.textContent, type) - ? (null != props.popover && - (listenToNonDelegatedEvent("beforetoggle", instance), - listenToNonDelegatedEvent("toggle", instance)), - null != props.onScroll && listenToNonDelegatedEvent("scroll", instance), - null != props.onScrollEnd && - listenToNonDelegatedEvent("scrollend", instance), - null != props.onClick && (instance.onclick = noop$1), - (instance = !0)) - : (instance = !1); - instance || throwOnHydrationMismatch(fiber); -} -function popToNextHostParent(fiber) { - for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) - switch (hydrationParentFiber.tag) { - case 3: - case 27: - rootOrSingletonContext = !0; - return; - case 5: - case 13: - rootOrSingletonContext = !1; - return; - default: - hydrationParentFiber = hydrationParentFiber.return; - } -} -function popHydrationState(fiber) { - if (fiber !== hydrationParentFiber) return !1; - if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1; - var shouldClear = !1, - JSCompiler_temp; - if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { - if ((JSCompiler_temp = 5 === fiber.tag)) - (JSCompiler_temp = fiber.type), - (JSCompiler_temp = - !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || - shouldSetTextContent(fiber.type, fiber.memoizedProps)); - JSCompiler_temp = !JSCompiler_temp; - } - JSCompiler_temp && (shouldClear = !0); - shouldClear && nextHydratableInstance && throwOnHydrationMismatch(fiber); - popToNextHostParent(fiber); - if (13 === fiber.tag) { - fiber = fiber.memoizedState; - fiber = null !== fiber ? fiber.dehydrated : null; - if (!fiber) throw Error(formatProdErrorMessage(317)); - a: { - fiber = fiber.nextSibling; - for (shouldClear = 0; fiber; ) { - if (8 === fiber.nodeType) - if (((JSCompiler_temp = fiber.data), "/$" === JSCompiler_temp)) { - if (0 === shouldClear) { - nextHydratableInstance = getNextHydratable(fiber.nextSibling); - break a; - } - shouldClear--; - } else - ("$" !== JSCompiler_temp && - "$!" !== JSCompiler_temp && - "$?" !== JSCompiler_temp) || - shouldClear++; - fiber = fiber.nextSibling; - } - nextHydratableInstance = null; - } - } else - nextHydratableInstance = hydrationParentFiber - ? getNextHydratable(fiber.stateNode.nextSibling) - : null; - return !0; -} -function resetHydrationState() { - nextHydratableInstance = hydrationParentFiber = null; - isHydrating = !1; -} -function upgradeHydrationErrorsToRecoverable() { - var queuedErrors = hydrationErrors; - null !== queuedErrors && - (null === workInProgressRootRecoverableErrors - ? (workInProgressRootRecoverableErrors = queuedErrors) - : workInProgressRootRecoverableErrors.push.apply( - workInProgressRootRecoverableErrors, - queuedErrors - ), - (hydrationErrors = null)); - return queuedErrors; -} -function queueHydrationError(error) { - null === hydrationErrors - ? (hydrationErrors = [error]) - : hydrationErrors.push(error); -} -var globalClientIdCounter$1 = 0; -function getViewTransitionName(props, instance) { - return null != props.name && "auto" !== props.name - ? props.name - : instance.autoName; -} function applyDerivedStateFromProps( workInProgress, ctor, @@ -3230,12 +2988,83 @@ function resolveClassComponentProps(Component, baseProps) { } if ((Component = Component.defaultProps)) { newProps === baseProps && (newProps = assign({}, newProps)); - for (var propName$30 in Component) - void 0 === newProps[propName$30] && - (newProps[propName$30] = Component[propName$30]); + for (var propName$28 in Component) + void 0 === newProps[propName$28] && + (newProps[propName$28] = Component[propName$28]); } return newProps; } +var forkStack = [], + forkStackIndex = 0, + treeForkProvider = null, + treeForkCount = 0, + idStack = [], + idStackIndex = 0, + treeContextProvider = null, + treeContextId = 1, + treeContextOverflow = ""; +function getTreeId() { + var overflow = treeContextOverflow, + idWithLeadingBit = treeContextId; + return ( + (idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))).toString( + 32 + ) + overflow + ); +} +function pushTreeFork(workInProgress, totalChildren) { + forkStack[forkStackIndex++] = treeForkCount; + forkStack[forkStackIndex++] = treeForkProvider; + treeForkProvider = workInProgress; + treeForkCount = totalChildren; +} +function pushTreeId(workInProgress, totalChildren, index) { + idStack[idStackIndex++] = treeContextId; + idStack[idStackIndex++] = treeContextOverflow; + idStack[idStackIndex++] = treeContextProvider; + treeContextProvider = workInProgress; + var baseIdWithLeadingBit = treeContextId; + workInProgress = treeContextOverflow; + var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; + baseIdWithLeadingBit &= ~(1 << baseLength); + index += 1; + var length = 32 - clz32(totalChildren) + baseLength; + if (30 < length) { + var numberOfOverflowBits = baseLength - (baseLength % 5); + length = ( + baseIdWithLeadingBit & + ((1 << numberOfOverflowBits) - 1) + ).toString(32); + baseIdWithLeadingBit >>= numberOfOverflowBits; + baseLength -= numberOfOverflowBits; + treeContextId = + (1 << (32 - clz32(totalChildren) + baseLength)) | + (index << baseLength) | + baseIdWithLeadingBit; + treeContextOverflow = length + workInProgress; + } else + (treeContextId = + (1 << length) | (index << baseLength) | baseIdWithLeadingBit), + (treeContextOverflow = workInProgress); +} +function pushMaterializedTreeId(workInProgress) { + null !== workInProgress.return && + (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0)); +} +function popTreeContext(workInProgress) { + for (; workInProgress === treeForkProvider; ) + (treeForkProvider = forkStack[--forkStackIndex]), + (forkStack[forkStackIndex] = null), + (treeForkCount = forkStack[--forkStackIndex]), + (forkStack[forkStackIndex] = null); + for (; workInProgress === treeContextProvider; ) + (treeContextProvider = idStack[--idStackIndex]), + (idStack[idStackIndex] = null), + (treeContextOverflow = idStack[--idStackIndex]), + (idStack[idStackIndex] = null), + (treeContextId = idStack[--idStackIndex]), + (idStack[idStackIndex] = null); +} var SuspenseException = Error(formatProdErrorMessage(460)), SuspenseyCommitException = Error(formatProdErrorMessage(474)), SuspenseActionException = Error(formatProdErrorMessage(542)), @@ -3366,7 +3195,7 @@ var renderLanes = 0, localIdCounter = 0, thenableIndexCounter$1 = 0, thenableState$1 = null, - globalClientIdCounter = 0; + globalClientIdCounter$1 = 0; function throwInvalidHookError() { throw Error(formatProdErrorMessage(321)); } @@ -4658,7 +4487,7 @@ var HooksDispatcherOnMount = { 0 < treeId && (identifierPrefix += "H" + treeId.toString(32)); identifierPrefix += ":"; } else - (treeId = globalClientIdCounter++), + (treeId = globalClientIdCounter$1++), (identifierPrefix = ":" + identifierPrefix + "r" + treeId.toString(32) + ":"); return (hook.memoizedState = identifierPrefix); @@ -7342,14 +7171,17 @@ function beginWork(current, workInProgress, renderLanes) { workInProgress.child ); case 5: - if (null === current && isHydrating) { - if ((init = lazyComponent = nextHydratableInstance)) - (lazyComponent = canHydrateInstance( - lazyComponent, - workInProgress.type, - workInProgress.pendingProps, - rootOrSingletonContext - )), + return ( + null === current && + isHydrating && + ((lazyComponent = nextHydratableInstance), + (init = !lazyComponent) || + ((lazyComponent = canHydrateInstance( + lazyComponent, + workInProgress.type, + workInProgress.pendingProps, + rootOrSingletonContext + )), null !== lazyComponent ? ((workInProgress.stateNode = lazyComponent), (hydrationParentFiber = workInProgress), @@ -7357,50 +7189,55 @@ function beginWork(current, workInProgress, renderLanes) { lazyComponent.firstChild )), (rootOrSingletonContext = !1), - (init = !0)) - : (init = !1); - init || throwOnHydrationMismatch(workInProgress); - } - pushHostContext(workInProgress); - init = workInProgress.type; - nextProps = workInProgress.pendingProps; - nextState = null !== current ? current.memoizedProps : null; - lazyComponent = nextProps.children; - shouldSetTextContent(init, nextProps) - ? (lazyComponent = null) - : null !== nextState && - shouldSetTextContent(init, nextState) && - (workInProgress.flags |= 32); - null !== workInProgress.memoizedState && - ((init = renderWithHooks( - current, - workInProgress, - TransitionAwareHostComponent, - null, - null, - renderLanes - )), - (HostTransitionContext._currentValue = init)); - markRef(current, workInProgress); - reconcileChildren(current, workInProgress, lazyComponent, renderLanes); - return workInProgress.child; - case 6: - if (null === current && isHydrating) { - if ((current = renderLanes = nextHydratableInstance)) - (renderLanes = canHydrateTextInstance( - renderLanes, - workInProgress.pendingProps, - rootOrSingletonContext + (lazyComponent = !0)) + : (lazyComponent = !1), + (init = !lazyComponent)), + init && throwOnHydrationMismatch(workInProgress)), + pushHostContext(workInProgress), + (init = workInProgress.type), + (nextProps = workInProgress.pendingProps), + (nextState = null !== current ? current.memoizedProps : null), + (lazyComponent = nextProps.children), + shouldSetTextContent(init, nextProps) + ? (lazyComponent = null) + : null !== nextState && + shouldSetTextContent(init, nextState) && + (workInProgress.flags |= 32), + null !== workInProgress.memoizedState && + ((init = renderWithHooks( + current, + workInProgress, + TransitionAwareHostComponent, + null, + null, + renderLanes )), + (HostTransitionContext._currentValue = init)), + markRef(current, workInProgress), + reconcileChildren(current, workInProgress, lazyComponent, renderLanes), + workInProgress.child + ); + case 6: + return ( + null === current && + isHydrating && + ((renderLanes = nextHydratableInstance), + (current = !renderLanes) || + ((renderLanes = canHydrateTextInstance( + renderLanes, + workInProgress.pendingProps, + rootOrSingletonContext + )), null !== renderLanes ? ((workInProgress.stateNode = renderLanes), (hydrationParentFiber = workInProgress), (nextHydratableInstance = null), - (current = !0)) - : (current = !1); - current || throwOnHydrationMismatch(workInProgress); - } - return null; + (renderLanes = !0)) + : (renderLanes = !1), + (current = !renderLanes)), + current && throwOnHydrationMismatch(workInProgress)), + null + ); case 13: return updateSuspenseComponent(current, workInProgress, renderLanes); case 4: @@ -7569,7 +7406,7 @@ function beginWork(current, workInProgress, renderLanes) { isHydrating ? ((nextState = getTreeId()), (nextProps = "\u00ab" + nextProps + "T" + nextState + "\u00bb")) - : ((nextState = globalClientIdCounter$1++), + : ((nextState = globalClientIdCounter++), (nextProps = "\u00ab" + nextProps + @@ -7577,6 +7414,9 @@ function beginWork(current, workInProgress, renderLanes) { nextState.toString(32) + "\u00bb")), (init.autoName = nextProps)), + null !== current && current.memoizedProps.name !== lazyComponent.name + ? (workInProgress.flags |= 4194816) + : markRef(current, workInProgress), reconcileChildren( current, workInProgress, @@ -7680,15 +7520,21 @@ function safelyAttachRef(current, nearestMountedAncestor) { try { var ref = current.ref; if (null !== ref) { - var instance = current.stateNode; switch (current.tag) { case 26: case 27: case 5: - var instanceToUse = instance; + var instanceToUse = current.stateNode; + break; + case 30: + var instance = current.stateNode, + name = getViewTransitionName(current.memoizedProps, instance); + if (null === instance.ref || instance.ref.name !== name) + instance.ref = createViewTransitionInstance(name); + instanceToUse = instance.ref; break; default: - instanceToUse = instance; + instanceToUse = current.stateNode; } "function" === typeof ref ? (current.refCleanup = ref(instanceToUse)) @@ -8116,11 +7962,12 @@ function restoreViewTransitionOnHostInstances( function commitAppearingPairViewTransitions(placement) { if (0 !== (placement.subtreeFlags & 2097152)) for (placement = placement.child; null !== placement; ) { - if (22 !== placement.tag || null !== placement.memoizedState) { + if (22 !== placement.tag || null !== placement.memoizedState) if ( + (commitAppearingPairViewTransitions(placement), 30 === placement.tag && - 0 !== (placement.flags & 2097152) && - placement.stateNode.paired + 0 !== (placement.flags & 2097152) && + placement.stateNode.paired) ) { var props = placement.memoizedProps; if (null == props.name || "auto" === props.name) @@ -8134,8 +7981,6 @@ function commitAppearingPairViewTransitions(placement) { !1 ) || restoreViewTransitionOnHostInstances(placement.child, !1); } - commitAppearingPairViewTransitions(placement); - } placement = placement.sibling; } } @@ -8151,7 +7996,9 @@ function commitEnterViewTransitions(placement) { null, !1 ) - ? commitAppearingPairViewTransitions(placement) + ? (commitAppearingPairViewTransitions(placement), + placement.stateNode.paired || + scheduleViewTransitionEvent(placement, props.onEnter)) : restoreViewTransitionOnHostInstances(placement.child, !1); } else if (0 !== (placement.subtreeFlags & 33554432)) for (placement = placement.child; null !== placement; ) @@ -8180,7 +8027,8 @@ function commitDeletedPairViewTransitions(deletion, appearingViewTransitions) { null, !1 ) - ? (pair.paired = deletion.stateNode) + ? ((pair.paired = deletion.stateNode), + scheduleViewTransitionEvent(deletion, props.onShare)) : restoreViewTransitionOnHostInstances(deletion.child, !1), appearingViewTransitions.delete(name), 0 === appearingViewTransitions.size) @@ -8198,20 +8046,25 @@ function commitExitViewTransitions(deletion, appearingViewTransitions) { var props = deletion.memoizedProps, name = getViewTransitionName(props, deletion.stateNode); viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - deletion.child, - name, - props.className, - null, - !1 + if ( + applyViewTransitionToHostInstances( + deletion.child, + name, + props.className, + null, + !1 + ) ) - ? null !== appearingViewTransitions && - ((props = appearingViewTransitions.get(name)), - void 0 !== props && - ((props.paired = deletion.stateNode), - appearingViewTransitions.delete(name)), - commitDeletedPairViewTransitions(deletion, appearingViewTransitions)) - : restoreViewTransitionOnHostInstances(deletion.child, !1); + if (null !== appearingViewTransitions) { + var pair = appearingViewTransitions.get(name); + void 0 !== pair + ? ((pair.paired = deletion.stateNode), + appearingViewTransitions.delete(name), + scheduleViewTransitionEvent(deletion, props.onShare)) + : scheduleViewTransitionEvent(deletion, props.onExit); + commitDeletedPairViewTransitions(deletion, appearingViewTransitions); + } else scheduleViewTransitionEvent(deletion, props.onExit); + else restoreViewTransitionOnHostInstances(deletion.child, !1); } else if (0 !== (deletion.subtreeFlags & 33554432)) for (deletion = deletion.child; null !== deletion; ) commitExitViewTransitions(deletion, appearingViewTransitions), @@ -8376,6 +8229,10 @@ function measureNestedViewTransitions(changedParent) { changedParent.child, changedParent.memoizedState, !1 + ), + scheduleViewTransitionEvent( + changedParent, + changedParent.memoizedProps.onLayout )); } else 0 !== (changedParent.subtreeFlags & 33554432) && @@ -8496,6 +8353,10 @@ function commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) { ? safelyAttachRef(finishedWork, finishedWork.return) : safelyDetachRef(finishedWork, finishedWork.return)); break; + case 30: + recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); + flags & 512 && safelyAttachRef(finishedWork, finishedWork.return); + break; default: recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); } @@ -9194,6 +9055,10 @@ function commitMutationEffectsOnFiber(finishedWork, root, lanes) { attachSuspenseRetryListeners(finishedWork, flags))); break; case 30: + flags & 512 && + (offscreenSubtreeWasHidden || + null === current || + safelyDetachRef(current, current.return)); flags = viewTransitionMutationContext; viewTransitionMutationContext = !1; recursivelyTraverseMutationEffects(root, finishedWork, lanes); @@ -9293,12 +9158,12 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { viewTransitionCancelableChildren = null; if (null !== finishedWork) for (var i = 0; i < finishedWork.length; i += 3) { - current = finishedWork[i]; - var oldName = finishedWork[i + 1]; - restoreViewTransitionName(current, finishedWork[i + 2]); - current = current.ownerDocument.documentElement; - null !== current && - current.animate( + var instance = finishedWork[i], + oldName = finishedWork[i + 1]; + restoreViewTransitionName(instance, finishedWork[i + 2]); + instance = instance.ownerDocument.documentElement; + null !== instance && + instance.animate( { opacity: [0, 0], pointerEvents: ["none", "none"] }, { duration: 0, @@ -9344,8 +9209,9 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { break; case 30: 0 !== (finishedWork.subtreeFlags & 8246) && - ((i = viewTransitionContextChanged), - (oldName = viewTransitionCancelableChildren), + ((i = 0 !== (finishedWork.flags & 4)), + (oldName = viewTransitionContextChanged), + (instance = viewTransitionCancelableChildren), (viewTransitionContextChanged = !1), (viewTransitionCancelableChildren = null), recursivelyTraverseAfterMutationEffects(root, finishedWork), @@ -9362,12 +9228,19 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { viewTransitionHostInstanceIdx !== (null === root ? 0 : root.length) && (finishedWork.flags |= 32), 0 !== (finishedWork.flags & 4) && current - ? (viewTransitionCancelableChildren = oldName) - : null !== oldName && - (oldName.push.apply(oldName, viewTransitionCancelableChildren), - (viewTransitionCancelableChildren = oldName)), + ? ((root = finishedWork.memoizedProps), + scheduleViewTransitionEvent( + finishedWork, + i || viewTransitionContextChanged + ? root.onUpdate + : root.onLayout + ), + (viewTransitionCancelableChildren = instance)) + : null !== instance && + (instance.push.apply(instance, viewTransitionCancelableChildren), + (viewTransitionCancelableChildren = instance)), (viewTransitionContextChanged = - 0 !== (finishedWork.flags & 32) ? !0 : i)); + 0 !== (finishedWork.flags & 32) ? !0 : oldName)); break; default: recursivelyTraverseAfterMutationEffects(root, finishedWork); @@ -9412,6 +9285,8 @@ function recursivelyTraverseDisappearLayoutEffects(parentFiber) { null === finishedWork.memoizedState && recursivelyTraverseDisappearLayoutEffects(finishedWork); break; + case 30: + safelyDetachRef(finishedWork, finishedWork.return); default: recursivelyTraverseDisappearLayoutEffects(finishedWork); } @@ -9517,6 +9392,14 @@ function recursivelyTraverseReappearLayoutEffects( ); safelyAttachRef(finishedWork, finishedWork.return); break; + case 30: + recursivelyTraverseReappearLayoutEffects( + finishedRoot, + finishedWork, + includeWorkInProgressEffects + ); + safelyAttachRef(finishedWork, finishedWork.return); + break; default: recursivelyTraverseReappearLayoutEffects( finishedRoot, @@ -10198,7 +10081,7 @@ function createFiberFromTypeAndProps( (type = createFiberImplClass(30, pendingProps, key, mode)), (type.elementType = REACT_VIEW_TRANSITION_TYPE), (type.lanes = lanes), - (type.stateNode = { autoName: null, paired: null }), + (type.stateNode = { autoName: null, paired: null, ref: null }), type ); default: @@ -10294,6 +10177,177 @@ function createFiberFromPortal(portal, mode, lanes) { }; return mode; } +var hydrationParentFiber = null, + nextHydratableInstance = null, + isHydrating = !1, + hydrationErrors = null, + rootOrSingletonContext = !1, + HydrationMismatchException = Error(formatProdErrorMessage(519)); +function throwOnHydrationMismatch(fiber) { + var error = Error(formatProdErrorMessage(418, "")); + queueHydrationError(createCapturedValueAtFiber(error, fiber)); + throw HydrationMismatchException; +} +function prepareToHydrateHostInstance(fiber) { + var instance = fiber.stateNode, + type = fiber.type, + props = fiber.memoizedProps; + instance[internalInstanceKey] = fiber; + instance[internalPropsKey] = props; + switch (type) { + case "dialog": + listenToNonDelegatedEvent("cancel", instance); + listenToNonDelegatedEvent("close", instance); + break; + case "iframe": + case "object": + case "embed": + listenToNonDelegatedEvent("load", instance); + break; + case "video": + case "audio": + for (type = 0; type < mediaEventTypes.length; type++) + listenToNonDelegatedEvent(mediaEventTypes[type], instance); + break; + case "source": + listenToNonDelegatedEvent("error", instance); + break; + case "img": + case "image": + case "link": + listenToNonDelegatedEvent("error", instance); + listenToNonDelegatedEvent("load", instance); + break; + case "details": + listenToNonDelegatedEvent("toggle", instance); + break; + case "input": + listenToNonDelegatedEvent("invalid", instance); + initInput( + instance, + props.value, + props.defaultValue, + props.checked, + props.defaultChecked, + props.type, + props.name, + !0 + ); + track(instance); + break; + case "select": + listenToNonDelegatedEvent("invalid", instance); + break; + case "textarea": + listenToNonDelegatedEvent("invalid", instance), + initTextarea(instance, props.value, props.defaultValue, props.children), + track(instance); + } + type = props.children; + ("string" !== typeof type && + "number" !== typeof type && + "bigint" !== typeof type) || + instance.textContent === "" + type || + !0 === props.suppressHydrationWarning || + checkForUnmatchedText(instance.textContent, type) + ? (null != props.popover && + (listenToNonDelegatedEvent("beforetoggle", instance), + listenToNonDelegatedEvent("toggle", instance)), + null != props.onScroll && listenToNonDelegatedEvent("scroll", instance), + null != props.onScrollEnd && + listenToNonDelegatedEvent("scrollend", instance), + null != props.onClick && (instance.onclick = noop$1), + (instance = !0)) + : (instance = !1); + instance || throwOnHydrationMismatch(fiber); +} +function popToNextHostParent(fiber) { + for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) + switch (hydrationParentFiber.tag) { + case 3: + case 27: + rootOrSingletonContext = !0; + return; + case 5: + case 13: + rootOrSingletonContext = !1; + return; + default: + hydrationParentFiber = hydrationParentFiber.return; + } +} +function popHydrationState(fiber) { + if (fiber !== hydrationParentFiber) return !1; + if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1; + var shouldClear = !1, + JSCompiler_temp; + if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { + if ((JSCompiler_temp = 5 === fiber.tag)) + (JSCompiler_temp = fiber.type), + (JSCompiler_temp = + !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || + shouldSetTextContent(fiber.type, fiber.memoizedProps)); + JSCompiler_temp = !JSCompiler_temp; + } + JSCompiler_temp && (shouldClear = !0); + shouldClear && nextHydratableInstance && throwOnHydrationMismatch(fiber); + popToNextHostParent(fiber); + if (13 === fiber.tag) { + fiber = fiber.memoizedState; + fiber = null !== fiber ? fiber.dehydrated : null; + if (!fiber) throw Error(formatProdErrorMessage(317)); + a: { + fiber = fiber.nextSibling; + for (shouldClear = 0; fiber; ) { + if (8 === fiber.nodeType) + if (((JSCompiler_temp = fiber.data), "/$" === JSCompiler_temp)) { + if (0 === shouldClear) { + nextHydratableInstance = getNextHydratable(fiber.nextSibling); + break a; + } + shouldClear--; + } else + ("$" !== JSCompiler_temp && + "$!" !== JSCompiler_temp && + "$?" !== JSCompiler_temp) || + shouldClear++; + fiber = fiber.nextSibling; + } + nextHydratableInstance = null; + } + } else + nextHydratableInstance = hydrationParentFiber + ? getNextHydratable(fiber.stateNode.nextSibling) + : null; + return !0; +} +function resetHydrationState() { + nextHydratableInstance = hydrationParentFiber = null; + isHydrating = !1; +} +function upgradeHydrationErrorsToRecoverable() { + var queuedErrors = hydrationErrors; + null !== queuedErrors && + (null === workInProgressRootRecoverableErrors + ? (workInProgressRootRecoverableErrors = queuedErrors) + : workInProgressRootRecoverableErrors.push.apply( + workInProgressRootRecoverableErrors, + queuedErrors + ), + (hydrationErrors = null)); + return queuedErrors; +} +function queueHydrationError(error) { + null === hydrationErrors + ? (hydrationErrors = [error]) + : hydrationErrors.push(error); +} +var globalClientIdCounter = 0; +function getViewTransitionName(props, instance) { + return null != props.name && "auto" !== props.name + ? props.name + : instance.autoName; +} function markUpdate(workInProgress) { workInProgress.flags |= 4; } @@ -10971,6 +11025,7 @@ var DefaultAsyncDispatcher = { pendingEffectsRemainingLanes = 0, pendingPassiveTransitions = null, pendingRecoverableErrors = null, + pendingViewTransitionEvents = null, nestedUpdateCount = 0, rootWithNestedUpdates = null; function requestUpdateLane() { @@ -10992,6 +11047,19 @@ function requestDeferredLane() { null !== suspenseHandler && (suspenseHandler.flags |= 32); return workInProgressDeferredLane; } +function scheduleViewTransitionEvent(fiber, callback) { + if (null != callback) { + var state = fiber.stateNode, + instance = state.ref; + null === instance && + (instance = state.ref = + createViewTransitionInstance( + getViewTransitionName(fiber.memoizedProps, state) + )); + null === pendingViewTransitionEvents && (pendingViewTransitionEvents = []); + pendingViewTransitionEvents.push(callback.bind(null, instance)); + } +} function scheduleUpdateOnFiber(root, fiber, lane) { if ( (root === workInProgressRoot && @@ -11825,6 +11893,7 @@ function commitRoot( pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate; pendingPassiveTransitions = transitions; pendingRecoverableErrors = recoverableErrors; + pendingViewTransitionEvents = null; recoverableErrors = (lanes & 335544192) === lanes ? 10262 : 10256; 0 !== (finishedWork.subtreeFlags & recoverableErrors) || 0 !== (finishedWork.flags & recoverableErrors) @@ -12071,6 +12140,14 @@ function flushSpawnedWork() { (ReactDOMSharedInternals.p = passiveSubtreeMask); } } + recoverableErrors = pendingViewTransitionEvents; + if (null !== recoverableErrors) + for ( + pendingViewTransitionEvents = null, onRecoverableError = 0; + onRecoverableError < recoverableErrors.length; + onRecoverableError++ + ) + (0, recoverableErrors[onRecoverableError])(); 0 !== (pendingEffectsLanes & 3) && flushPendingEffects(); ensureRootIsScheduled(root); passiveSubtreeMask = root.pendingLanes; @@ -12275,14 +12352,14 @@ function flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) { isFlushingWork = !0; do { var didPerformSomeWork = !1; - for (var root$175 = firstScheduledRoot; null !== root$175; ) { + for (var root$176 = firstScheduledRoot; null !== root$176; ) { if (!onlyLegacy) if (0 !== syncTransitionLanes) { - var pendingLanes = root$175.pendingLanes; + var pendingLanes = root$176.pendingLanes; if (0 === pendingLanes) var JSCompiler_inline_result = 0; else { - var suspendedLanes = root$175.suspendedLanes, - pingedLanes = root$175.pingedLanes; + var suspendedLanes = root$176.suspendedLanes, + pingedLanes = root$176.pingedLanes; JSCompiler_inline_result = (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1; JSCompiler_inline_result &= @@ -12296,20 +12373,20 @@ function flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) { } 0 !== JSCompiler_inline_result && ((didPerformSomeWork = !0), - performSyncWorkOnRoot(root$175, JSCompiler_inline_result)); + performSyncWorkOnRoot(root$176, JSCompiler_inline_result)); } else (JSCompiler_inline_result = workInProgressRootRenderLanes), (JSCompiler_inline_result = getNextLanes( - root$175, - root$175 === workInProgressRoot ? JSCompiler_inline_result : 0, - null !== root$175.cancelPendingCommit || - -1 !== root$175.timeoutHandle + root$176, + root$176 === workInProgressRoot ? JSCompiler_inline_result : 0, + null !== root$176.cancelPendingCommit || + -1 !== root$176.timeoutHandle )), 0 === (JSCompiler_inline_result & 3) || - checkIfRootIsPrerendering(root$175, JSCompiler_inline_result) || + checkIfRootIsPrerendering(root$176, JSCompiler_inline_result) || ((didPerformSomeWork = !0), - performSyncWorkOnRoot(root$175, JSCompiler_inline_result)); - root$175 = root$175.next; + performSyncWorkOnRoot(root$176, JSCompiler_inline_result)); + root$176 = root$176.next; } } while (didPerformSomeWork); isFlushingWork = !1; @@ -12549,20 +12626,20 @@ function extractEvents$1( } } for ( - var i$jscomp$inline_1527 = 0; - i$jscomp$inline_1527 < simpleEventPluginEvents.length; - i$jscomp$inline_1527++ + var i$jscomp$inline_1547 = 0; + i$jscomp$inline_1547 < simpleEventPluginEvents.length; + i$jscomp$inline_1547++ ) { - var eventName$jscomp$inline_1528 = - simpleEventPluginEvents[i$jscomp$inline_1527], - domEventName$jscomp$inline_1529 = - eventName$jscomp$inline_1528.toLowerCase(), - capitalizedEvent$jscomp$inline_1530 = - eventName$jscomp$inline_1528[0].toUpperCase() + - eventName$jscomp$inline_1528.slice(1); + var eventName$jscomp$inline_1548 = + simpleEventPluginEvents[i$jscomp$inline_1547], + domEventName$jscomp$inline_1549 = + eventName$jscomp$inline_1548.toLowerCase(), + capitalizedEvent$jscomp$inline_1550 = + eventName$jscomp$inline_1548[0].toUpperCase() + + eventName$jscomp$inline_1548.slice(1); registerSimpleEvent( - domEventName$jscomp$inline_1529, - "on" + capitalizedEvent$jscomp$inline_1530 + domEventName$jscomp$inline_1549, + "on" + capitalizedEvent$jscomp$inline_1550 ); } registerSimpleEvent(ANIMATION_END, "onAnimationEnd"); @@ -13750,34 +13827,34 @@ function setInitialProperties(domElement, tag, props) { defaultChecked = null; for (hasSrc in props) if (props.hasOwnProperty(hasSrc)) { - var propValue$189 = props[hasSrc]; - if (null != propValue$189) + var propValue$190 = props[hasSrc]; + if (null != propValue$190) switch (hasSrc) { case "name": - hasSrcSet = propValue$189; + hasSrcSet = propValue$190; break; case "type": - propValue = propValue$189; + propValue = propValue$190; break; case "checked": - checked = propValue$189; + checked = propValue$190; break; case "defaultChecked": - defaultChecked = propValue$189; + defaultChecked = propValue$190; break; case "value": - propKey = propValue$189; + propKey = propValue$190; break; case "defaultValue": - defaultValue = propValue$189; + defaultValue = propValue$190; break; case "children": case "dangerouslySetInnerHTML": - if (null != propValue$189) + if (null != propValue$190) throw Error(formatProdErrorMessage(137, tag)); break; default: - setProp(domElement, tag, hasSrc, propValue$189, props, null); + setProp(domElement, tag, hasSrc, propValue$190, props, null); } } initInput( @@ -13914,14 +13991,14 @@ function setInitialProperties(domElement, tag, props) { return; default: if (isCustomElement(tag)) { - for (propValue$189 in props) - props.hasOwnProperty(propValue$189) && - ((hasSrc = props[propValue$189]), + for (propValue$190 in props) + props.hasOwnProperty(propValue$190) && + ((hasSrc = props[propValue$190]), void 0 !== hasSrc && setPropOnCustomElement( domElement, tag, - propValue$189, + propValue$190, hasSrc, props, void 0 @@ -13969,14 +14046,14 @@ function updateProperties(domElement, tag, lastProps, nextProps) { setProp(domElement, tag, propKey, null, nextProps, lastProp); } } - for (var propKey$206 in nextProps) { - var propKey = nextProps[propKey$206]; - lastProp = lastProps[propKey$206]; + for (var propKey$207 in nextProps) { + var propKey = nextProps[propKey$207]; + lastProp = lastProps[propKey$207]; if ( - nextProps.hasOwnProperty(propKey$206) && + nextProps.hasOwnProperty(propKey$207) && (null != propKey || null != lastProp) ) - switch (propKey$206) { + switch (propKey$207) { case "type": propKey !== lastProp && (viewTransitionMutationContext = !0); type = propKey; @@ -14011,7 +14088,7 @@ function updateProperties(domElement, tag, lastProps, nextProps) { setProp( domElement, tag, - propKey$206, + propKey$207, propKey, nextProps, lastProp @@ -14030,7 +14107,7 @@ function updateProperties(domElement, tag, lastProps, nextProps) { ); return; case "select": - propKey = value = defaultValue = propKey$206 = null; + propKey = value = defaultValue = propKey$207 = null; for (type in lastProps) if ( ((lastDefaultValue = lastProps[type]), @@ -14062,7 +14139,7 @@ function updateProperties(domElement, tag, lastProps, nextProps) { switch (name) { case "value": type !== lastDefaultValue && (viewTransitionMutationContext = !0); - propKey$206 = type; + propKey$207 = type; break; case "defaultValue": type !== lastDefaultValue && (viewTransitionMutationContext = !0); @@ -14085,15 +14162,15 @@ function updateProperties(domElement, tag, lastProps, nextProps) { tag = defaultValue; lastProps = value; nextProps = propKey; - null != propKey$206 - ? updateOptions(domElement, !!lastProps, propKey$206, !1) + null != propKey$207 + ? updateOptions(domElement, !!lastProps, propKey$207, !1) : !!nextProps !== !!lastProps && (null != tag ? updateOptions(domElement, !!lastProps, tag, !0) : updateOptions(domElement, !!lastProps, lastProps ? [] : "", !1)); return; case "textarea": - propKey = propKey$206 = null; + propKey = propKey$207 = null; for (defaultValue in lastProps) if ( ((name = lastProps[defaultValue]), @@ -14118,7 +14195,7 @@ function updateProperties(domElement, tag, lastProps, nextProps) { switch (value) { case "value": name !== type && (viewTransitionMutationContext = !0); - propKey$206 = name; + propKey$207 = name; break; case "defaultValue": name !== type && (viewTransitionMutationContext = !0); @@ -14133,17 +14210,17 @@ function updateProperties(domElement, tag, lastProps, nextProps) { name !== type && setProp(domElement, tag, value, name, nextProps, type); } - updateTextarea(domElement, propKey$206, propKey); + updateTextarea(domElement, propKey$207, propKey); return; case "option": - for (var propKey$222 in lastProps) + for (var propKey$223 in lastProps) if ( - ((propKey$206 = lastProps[propKey$222]), - lastProps.hasOwnProperty(propKey$222) && - null != propKey$206 && - !nextProps.hasOwnProperty(propKey$222)) + ((propKey$207 = lastProps[propKey$223]), + lastProps.hasOwnProperty(propKey$223) && + null != propKey$207 && + !nextProps.hasOwnProperty(propKey$223)) ) - switch (propKey$222) { + switch (propKey$223) { case "selected": domElement.selected = !1; break; @@ -14151,34 +14228,34 @@ function updateProperties(domElement, tag, lastProps, nextProps) { setProp( domElement, tag, - propKey$222, + propKey$223, null, nextProps, - propKey$206 + propKey$207 ); } for (lastDefaultValue in nextProps) if ( - ((propKey$206 = nextProps[lastDefaultValue]), + ((propKey$207 = nextProps[lastDefaultValue]), (propKey = lastProps[lastDefaultValue]), nextProps.hasOwnProperty(lastDefaultValue) && - propKey$206 !== propKey && - (null != propKey$206 || null != propKey)) + propKey$207 !== propKey && + (null != propKey$207 || null != propKey)) ) switch (lastDefaultValue) { case "selected": - propKey$206 !== propKey && (viewTransitionMutationContext = !0); + propKey$207 !== propKey && (viewTransitionMutationContext = !0); domElement.selected = - propKey$206 && - "function" !== typeof propKey$206 && - "symbol" !== typeof propKey$206; + propKey$207 && + "function" !== typeof propKey$207 && + "symbol" !== typeof propKey$207; break; default: setProp( domElement, tag, lastDefaultValue, - propKey$206, + propKey$207, nextProps, propKey ); @@ -14199,24 +14276,24 @@ function updateProperties(domElement, tag, lastProps, nextProps) { case "track": case "wbr": case "menuitem": - for (var propKey$227 in lastProps) - (propKey$206 = lastProps[propKey$227]), - lastProps.hasOwnProperty(propKey$227) && - null != propKey$206 && - !nextProps.hasOwnProperty(propKey$227) && - setProp(domElement, tag, propKey$227, null, nextProps, propKey$206); + for (var propKey$228 in lastProps) + (propKey$207 = lastProps[propKey$228]), + lastProps.hasOwnProperty(propKey$228) && + null != propKey$207 && + !nextProps.hasOwnProperty(propKey$228) && + setProp(domElement, tag, propKey$228, null, nextProps, propKey$207); for (checked in nextProps) if ( - ((propKey$206 = nextProps[checked]), + ((propKey$207 = nextProps[checked]), (propKey = lastProps[checked]), nextProps.hasOwnProperty(checked) && - propKey$206 !== propKey && - (null != propKey$206 || null != propKey)) + propKey$207 !== propKey && + (null != propKey$207 || null != propKey)) ) switch (checked) { case "children": case "dangerouslySetInnerHTML": - if (null != propKey$206) + if (null != propKey$207) throw Error(formatProdErrorMessage(137, tag)); break; default: @@ -14224,7 +14301,7 @@ function updateProperties(domElement, tag, lastProps, nextProps) { domElement, tag, checked, - propKey$206, + propKey$207, nextProps, propKey ); @@ -14232,49 +14309,49 @@ function updateProperties(domElement, tag, lastProps, nextProps) { return; default: if (isCustomElement(tag)) { - for (var propKey$232 in lastProps) - (propKey$206 = lastProps[propKey$232]), - lastProps.hasOwnProperty(propKey$232) && - void 0 !== propKey$206 && - !nextProps.hasOwnProperty(propKey$232) && + for (var propKey$233 in lastProps) + (propKey$207 = lastProps[propKey$233]), + lastProps.hasOwnProperty(propKey$233) && + void 0 !== propKey$207 && + !nextProps.hasOwnProperty(propKey$233) && setPropOnCustomElement( domElement, tag, - propKey$232, + propKey$233, void 0, nextProps, - propKey$206 + propKey$207 ); for (defaultChecked in nextProps) - (propKey$206 = nextProps[defaultChecked]), + (propKey$207 = nextProps[defaultChecked]), (propKey = lastProps[defaultChecked]), !nextProps.hasOwnProperty(defaultChecked) || - propKey$206 === propKey || - (void 0 === propKey$206 && void 0 === propKey) || + propKey$207 === propKey || + (void 0 === propKey$207 && void 0 === propKey) || setPropOnCustomElement( domElement, tag, defaultChecked, - propKey$206, + propKey$207, nextProps, propKey ); return; } } - for (var propKey$237 in lastProps) - (propKey$206 = lastProps[propKey$237]), - lastProps.hasOwnProperty(propKey$237) && - null != propKey$206 && - !nextProps.hasOwnProperty(propKey$237) && - setProp(domElement, tag, propKey$237, null, nextProps, propKey$206); + for (var propKey$238 in lastProps) + (propKey$207 = lastProps[propKey$238]), + lastProps.hasOwnProperty(propKey$238) && + null != propKey$207 && + !nextProps.hasOwnProperty(propKey$238) && + setProp(domElement, tag, propKey$238, null, nextProps, propKey$207); for (lastProp in nextProps) - (propKey$206 = nextProps[lastProp]), + (propKey$207 = nextProps[lastProp]), (propKey = lastProps[lastProp]), !nextProps.hasOwnProperty(lastProp) || - propKey$206 === propKey || - (null == propKey$206 && null == propKey) || - setProp(domElement, tag, lastProp, propKey$206, nextProps, propKey); + propKey$207 === propKey || + (null == propKey$207 && null == propKey) || + setProp(domElement, tag, lastProp, propKey$207, nextProps, propKey); } var eventsEnabled = null, selectionInformation = null; @@ -14473,6 +14550,43 @@ function startViewTransition( return !1; } } +function ViewTransitionPseudoElement(pseudo, name) { + this._scope = document.documentElement; + this._selector = "::view-transition-" + pseudo + "(" + name + ")"; +} +ViewTransitionPseudoElement.prototype.animate = function (keyframes, options) { + options = + "number" === typeof options ? { duration: options } : assign({}, options); + options.pseudoElement = this._selector; + return this._scope.animate(keyframes, options); +}; +ViewTransitionPseudoElement.prototype.getAnimations = function () { + for ( + var scope = this._scope, + selector = this._selector, + animations = scope.getAnimations({ subtree: !0 }), + result = [], + i = 0; + i < animations.length; + i++ + ) { + var effect = animations[i].effect; + null !== effect && + effect.target === scope && + effect.pseudoElement === selector && + result.push(animations[i]); + } + return result; +}; +function createViewTransitionInstance(name) { + return { + name: name, + group: new ViewTransitionPseudoElement("group", name), + imagePair: new ViewTransitionPseudoElement("image-pair", name), + old: new ViewTransitionPseudoElement("old", name), + new: new ViewTransitionPseudoElement("new", name) + }; +} function clearContainerSparingly(container) { var nextNode = container.firstChild; nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling); @@ -14945,26 +15059,26 @@ function getResource(type, currentProps, pendingProps, currentResource) { "string" === typeof pendingProps.precedence ) { type = getStyleKey(pendingProps.href); - var styles$245 = getResourcesFromRoot( + var styles$246 = getResourcesFromRoot( JSCompiler_inline_result ).hoistableStyles, - resource$246 = styles$245.get(type); - resource$246 || + resource$247 = styles$246.get(type); + resource$247 || ((JSCompiler_inline_result = JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result), - (resource$246 = { + (resource$247 = { type: "stylesheet", instance: null, count: 0, state: { loading: 0, preload: null } }), - styles$245.set(type, resource$246), - (styles$245 = JSCompiler_inline_result.querySelector( + styles$246.set(type, resource$247), + (styles$246 = JSCompiler_inline_result.querySelector( getStylesheetSelectorFromKey(type) )) && - !styles$245._p && - ((resource$246.instance = styles$245), - (resource$246.state.loading = 5)), + !styles$246._p && + ((resource$247.instance = styles$246), + (resource$247.state.loading = 5)), preloadPropsMap.has(type) || ((pendingProps = { rel: "preload", @@ -14977,16 +15091,16 @@ function getResource(type, currentProps, pendingProps, currentResource) { referrerPolicy: pendingProps.referrerPolicy }), preloadPropsMap.set(type, pendingProps), - styles$245 || + styles$246 || preloadStylesheet( JSCompiler_inline_result, type, pendingProps, - resource$246.state + resource$247.state ))); if (currentProps && null === currentResource) throw Error(formatProdErrorMessage(528, "")); - return resource$246; + return resource$247; } if (currentProps && null !== currentResource) throw Error(formatProdErrorMessage(529, "")); @@ -15083,37 +15197,37 @@ function acquireResource(hoistableRoot, resource, props) { return (resource.instance = instance); case "stylesheet": styleProps = getStyleKey(props.href); - var instance$251 = hoistableRoot.querySelector( + var instance$252 = hoistableRoot.querySelector( getStylesheetSelectorFromKey(styleProps) ); - if (instance$251) + if (instance$252) return ( (resource.state.loading |= 4), - (resource.instance = instance$251), - markNodeAsHoistable(instance$251), - instance$251 + (resource.instance = instance$252), + markNodeAsHoistable(instance$252), + instance$252 ); instance = stylesheetPropsFromRawProps(props); (styleProps = preloadPropsMap.get(styleProps)) && adoptPreloadPropsForStylesheet(instance, styleProps); - instance$251 = ( + instance$252 = ( hoistableRoot.ownerDocument || hoistableRoot ).createElement("link"); - markNodeAsHoistable(instance$251); - var linkInstance = instance$251; + markNodeAsHoistable(instance$252); + var linkInstance = instance$252; linkInstance._p = new Promise(function (resolve, reject) { linkInstance.onload = resolve; linkInstance.onerror = reject; }); - setInitialProperties(instance$251, "link", instance); + setInitialProperties(instance$252, "link", instance); resource.state.loading |= 4; - insertStylesheet(instance$251, props.precedence, hoistableRoot); - return (resource.instance = instance$251); + insertStylesheet(instance$252, props.precedence, hoistableRoot); + return (resource.instance = instance$252); case "script": - instance$251 = getScriptKey(props.src); + instance$252 = getScriptKey(props.src); if ( (styleProps = hoistableRoot.querySelector( - getScriptSelectorFromKey(instance$251) + getScriptSelectorFromKey(instance$252) )) ) return ( @@ -15122,7 +15236,7 @@ function acquireResource(hoistableRoot, resource, props) { styleProps ); instance = props; - if ((styleProps = preloadPropsMap.get(instance$251))) + if ((styleProps = preloadPropsMap.get(instance$252))) (instance = assign({}, props)), adoptPreloadPropsForScript(instance, styleProps); hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot; @@ -16141,16 +16255,16 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { 0 === i && attemptExplicitHydrationTarget(target); } }; -var isomorphicReactPackageVersion$jscomp$inline_1774 = React.version; +var isomorphicReactPackageVersion$jscomp$inline_1794 = React.version; if ( - "19.1.0-experimental-056073de-20250109" !== - isomorphicReactPackageVersion$jscomp$inline_1774 + "19.1.0-experimental-540efebc-20250112" !== + isomorphicReactPackageVersion$jscomp$inline_1794 ) throw Error( formatProdErrorMessage( 527, - isomorphicReactPackageVersion$jscomp$inline_1774, - "19.1.0-experimental-056073de-20250109" + isomorphicReactPackageVersion$jscomp$inline_1794, + "19.1.0-experimental-540efebc-20250112" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -16170,24 +16284,24 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { null === componentOrElement ? null : componentOrElement.stateNode; return componentOrElement; }; -var internals$jscomp$inline_2295 = { +var internals$jscomp$inline_2323 = { bundleType: 0, - version: "19.1.0-experimental-056073de-20250109", + version: "19.1.0-experimental-540efebc-20250112", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-056073de-20250109" + reconcilerVersion: "19.1.0-experimental-540efebc-20250112" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_2296 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_2324 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_2296.isDisabled && - hook$jscomp$inline_2296.supportsFiber + !hook$jscomp$inline_2324.isDisabled && + hook$jscomp$inline_2324.supportsFiber ) try { - (rendererID = hook$jscomp$inline_2296.inject( - internals$jscomp$inline_2295 + (rendererID = hook$jscomp$inline_2324.inject( + internals$jscomp$inline_2323 )), - (injectedHook = hook$jscomp$inline_2296); + (injectedHook = hook$jscomp$inline_2324); } catch (err) {} } exports.createRoot = function (container, options) { @@ -16281,4 +16395,4 @@ exports.hydrateRoot = function (container, initialChildren, options) { listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; -exports.version = "19.1.0-experimental-056073de-20250109"; +exports.version = "19.1.0-experimental-540efebc-20250112"; 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 23795342bdf90..8031d6511d3d5 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 @@ -3700,242 +3700,23 @@ topLevelEventsToReactNames.set(domEventName, reactName); registerTwoPhaseEvent(reactName, [domEventName]); } - function setCurrentTrackFromLanes(lanes) { - reusableLaneDevToolDetails.track = - lanes & 63 - ? "Blocking" - : lanes & 4194240 - ? "Transition" - : lanes & 62914560 - ? "Suspense" - : lanes & 2080374784 - ? "Idle" - : "Other"; - } - function logComponentRender(fiber, startTime, endTime, wasHydrated) { - var name = getComponentNameFromFiber(fiber); - if (null !== name && supportsUserTiming) { - var selfTime = fiber.actualDuration; - if (null === fiber.alternate || fiber.alternate.child !== fiber.child) - for (fiber = fiber.child; null !== fiber; fiber = fiber.sibling) - selfTime -= fiber.actualDuration; - reusableComponentDevToolDetails.color = - 0.5 > selfTime - ? wasHydrated - ? "tertiary-light" - : "primary-light" - : 10 > selfTime - ? wasHydrated - ? "tertiary" - : "primary" - : 100 > selfTime - ? wasHydrated - ? "tertiary-dark" - : "primary-dark" - : "error"; - reusableComponentOptions.start = startTime; - reusableComponentOptions.end = endTime; - performance.measure(name, reusableComponentOptions); - } - } - function logComponentErrored(fiber, startTime, endTime, errors) { - if (supportsUserTiming) { - var name = getComponentNameFromFiber(fiber); - if (null !== name) { - for (var properties = [], i = 0; i < errors.length; i++) { - var error = errors[i].value; - properties.push([ - "Error", - "object" === typeof error && - null !== error && - "string" === typeof error.message - ? String(error.message) - : String(error) - ]); - } - performance.measure(name, { - start: startTime, - end: endTime, - detail: { - devtools: { - color: "error", - track: COMPONENTS_TRACK, - tooltipText: - 13 === fiber.tag - ? "Hydration failed" - : "Error boundary caught an error", - properties: properties - } - } - }); - } - } - } - function logComponentEffect(fiber, startTime, endTime, selfTime, errors) { - if (null !== errors) { - if ( - supportsUserTiming && - ((selfTime = getComponentNameFromFiber(fiber)), null !== selfTime) - ) { - fiber = []; - for (var i = 0; i < errors.length; i++) { - var error = errors[i].value; - fiber.push([ - "Error", - "object" === typeof error && - null !== error && - "string" === typeof error.message - ? String(error.message) - : String(error) - ]); - } - performance.measure(selfTime, { - start: startTime, - end: endTime, - detail: { - devtools: { - color: "error", - track: COMPONENTS_TRACK, - tooltipText: "A lifecycle or effect errored", - properties: fiber - } - } - }); - } - } else - (errors = getComponentNameFromFiber(fiber)), - null !== errors && - supportsUserTiming && - ((reusableComponentDevToolDetails.color = - 1 > selfTime - ? "secondary-light" - : 100 > selfTime - ? "secondary" - : 500 > selfTime - ? "secondary-dark" - : "error"), - (reusableComponentOptions.start = startTime), - (reusableComponentOptions.end = endTime), - performance.measure(errors, reusableComponentOptions)); - } - function logRenderPhase(startTime, endTime, lanes) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = - (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure( - (lanes & 536870912) === lanes - ? "Prepared" - : (lanes & 201326677) === lanes - ? "Hydrated" - : "Render", - reusableLaneOptions - )); - } - function logSuspendedRenderPhase(startTime, endTime, lanes) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = - (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure("Prewarm", reusableLaneOptions)); - } - function logSuspendedWithDelayPhase(startTime, endTime, lanes) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = - (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure("Suspended", reusableLaneOptions)); - } - function logRecoveredRenderPhase( - startTime, - endTime, - lanes, - recoverableErrors, - hydrationFailed - ) { - if (supportsUserTiming) { - lanes = []; - for (var i = 0; i < recoverableErrors.length; i++) { - var error = recoverableErrors[i].value; - lanes.push([ - "Recoverable Error", - "object" === typeof error && - null !== error && - "string" === typeof error.message - ? String(error.message) - : String(error) - ]); - } - performance.measure("Recovered", { - start: startTime, - end: endTime, - detail: { - devtools: { - color: "primary-dark", - track: reusableLaneDevToolDetails.track, - trackGroup: LANES_TRACK_GROUP, - tooltipText: hydrationFailed - ? "Hydration Failed" - : "Recovered after Error", - properties: lanes - } - } - }); - } - } - function logErroredRenderPhase(startTime, endTime) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = "error"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure("Errored", reusableLaneOptions)); - } - function logSuspenseThrottlePhase(startTime, endTime) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = "secondary-light"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure("Throttled", reusableLaneOptions)); - } - function logSuspendedCommitPhase(startTime, endTime) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = "secondary-light"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure("Suspended", reusableLaneOptions)); - } - function logCommitErrored(startTime, endTime, errors, passive) { - if (supportsUserTiming) { - for (var properties = [], i = 0; i < errors.length; i++) { - var error = errors[i].value; - properties.push([ - "Error", - "object" === typeof error && - null !== error && - "string" === typeof error.message - ? String(error.message) - : String(error) - ]); - } - performance.measure("Errored", { - start: startTime, - end: endTime, - detail: { - devtools: { - color: "error", - track: reusableLaneDevToolDetails.track, - trackGroup: LANES_TRACK_GROUP, - tooltipText: passive - ? "Remaining Effects Errored" - : "Commit Errored", - properties: properties - } - } - }); + function createCapturedValueAtFiber(value, source) { + if ("object" === typeof value && null !== value) { + var existing = CapturedStacks.get(value); + if (void 0 !== existing) return existing; + source = { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; + CapturedStacks.set(value, source); + return source; } + return { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; } function finishQueueingConcurrentUpdates() { for ( @@ -4262,11 +4043,248 @@ for (var child = fiber.child; child; ) (fiber.actualDuration += child.actualDuration), (child = child.sibling); } - function resetContextDependencies() { - lastContextDependency = currentlyRenderingFiber$1 = null; - isDisallowedContextReadInDEV = !1; - } - function pushProvider(providerFiber, context, nextValue) { + function setCurrentTrackFromLanes(lanes) { + reusableLaneDevToolDetails.track = + lanes & 63 + ? "Blocking" + : lanes & 4194240 + ? "Transition" + : lanes & 62914560 + ? "Suspense" + : lanes & 2080374784 + ? "Idle" + : "Other"; + } + function logComponentRender(fiber, startTime, endTime, wasHydrated) { + var name = getComponentNameFromFiber(fiber); + if (null !== name && supportsUserTiming) { + var selfTime = fiber.actualDuration; + if (null === fiber.alternate || fiber.alternate.child !== fiber.child) + for (fiber = fiber.child; null !== fiber; fiber = fiber.sibling) + selfTime -= fiber.actualDuration; + reusableComponentDevToolDetails.color = + 0.5 > selfTime + ? wasHydrated + ? "tertiary-light" + : "primary-light" + : 10 > selfTime + ? wasHydrated + ? "tertiary" + : "primary" + : 100 > selfTime + ? wasHydrated + ? "tertiary-dark" + : "primary-dark" + : "error"; + reusableComponentOptions.start = startTime; + reusableComponentOptions.end = endTime; + performance.measure(name, reusableComponentOptions); + } + } + function logComponentErrored(fiber, startTime, endTime, errors) { + if (supportsUserTiming) { + var name = getComponentNameFromFiber(fiber); + if (null !== name) { + for (var properties = [], i = 0; i < errors.length; i++) { + var error = errors[i].value; + properties.push([ + "Error", + "object" === typeof error && + null !== error && + "string" === typeof error.message + ? String(error.message) + : String(error) + ]); + } + performance.measure(name, { + start: startTime, + end: endTime, + detail: { + devtools: { + color: "error", + track: COMPONENTS_TRACK, + tooltipText: + 13 === fiber.tag + ? "Hydration failed" + : "Error boundary caught an error", + properties: properties + } + } + }); + } + } + } + function logComponentEffect(fiber, startTime, endTime, selfTime, errors) { + if (null !== errors) { + if ( + supportsUserTiming && + ((selfTime = getComponentNameFromFiber(fiber)), null !== selfTime) + ) { + fiber = []; + for (var i = 0; i < errors.length; i++) { + var error = errors[i].value; + fiber.push([ + "Error", + "object" === typeof error && + null !== error && + "string" === typeof error.message + ? String(error.message) + : String(error) + ]); + } + performance.measure(selfTime, { + start: startTime, + end: endTime, + detail: { + devtools: { + color: "error", + track: COMPONENTS_TRACK, + tooltipText: "A lifecycle or effect errored", + properties: fiber + } + } + }); + } + } else + (errors = getComponentNameFromFiber(fiber)), + null !== errors && + supportsUserTiming && + ((reusableComponentDevToolDetails.color = + 1 > selfTime + ? "secondary-light" + : 100 > selfTime + ? "secondary" + : 500 > selfTime + ? "secondary-dark" + : "error"), + (reusableComponentOptions.start = startTime), + (reusableComponentOptions.end = endTime), + performance.measure(errors, reusableComponentOptions)); + } + function logRenderPhase(startTime, endTime, lanes) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = + (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure( + (lanes & 536870912) === lanes + ? "Prepared" + : (lanes & 201326677) === lanes + ? "Hydrated" + : "Render", + reusableLaneOptions + )); + } + function logSuspendedRenderPhase(startTime, endTime, lanes) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = + (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure("Prewarm", reusableLaneOptions)); + } + function logSuspendedWithDelayPhase(startTime, endTime, lanes) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = + (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure("Suspended", reusableLaneOptions)); + } + function logRecoveredRenderPhase( + startTime, + endTime, + lanes, + recoverableErrors, + hydrationFailed + ) { + if (supportsUserTiming) { + lanes = []; + for (var i = 0; i < recoverableErrors.length; i++) { + var error = recoverableErrors[i].value; + lanes.push([ + "Recoverable Error", + "object" === typeof error && + null !== error && + "string" === typeof error.message + ? String(error.message) + : String(error) + ]); + } + performance.measure("Recovered", { + start: startTime, + end: endTime, + detail: { + devtools: { + color: "primary-dark", + track: reusableLaneDevToolDetails.track, + trackGroup: LANES_TRACK_GROUP, + tooltipText: hydrationFailed + ? "Hydration Failed" + : "Recovered after Error", + properties: lanes + } + } + }); + } + } + function logErroredRenderPhase(startTime, endTime) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = "error"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure("Errored", reusableLaneOptions)); + } + function logSuspenseThrottlePhase(startTime, endTime) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = "secondary-light"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure("Throttled", reusableLaneOptions)); + } + function logSuspendedCommitPhase(startTime, endTime) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = "secondary-light"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure("Suspended", reusableLaneOptions)); + } + function logCommitErrored(startTime, endTime, errors, passive) { + if (supportsUserTiming) { + for (var properties = [], i = 0; i < errors.length; i++) { + var error = errors[i].value; + properties.push([ + "Error", + "object" === typeof error && + null !== error && + "string" === typeof error.message + ? String(error.message) + : String(error) + ]); + } + performance.measure("Errored", { + start: startTime, + end: endTime, + detail: { + devtools: { + color: "error", + track: reusableLaneDevToolDetails.track, + trackGroup: LANES_TRACK_GROUP, + tooltipText: passive + ? "Remaining Effects Errored" + : "Commit Errored", + properties: properties + } + } + }); + } + } + function resetContextDependencies() { + lastContextDependency = currentlyRenderingFiber$1 = null; + isDisallowedContextReadInDEV = !1; + } + function pushProvider(providerFiber, context, nextValue) { push(valueCursor, context._currentValue, providerFiber); context._currentValue = nextValue; push(rendererCursorDEV, context._currentRenderer, providerFiber); @@ -4857,23 +4875,128 @@ cache.controller.abort(); }); } - function createCapturedValueAtFiber(value, source) { - if ("object" === typeof value && null !== value) { - var existing = CapturedStacks.get(value); - if (void 0 !== existing) return existing; - source = { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; - CapturedStacks.set(value, source); - return source; - } - return { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; + function warnOnInvalidCallback(callback) { + if (null !== callback && "function" !== typeof callback) { + var key = String(callback); + didWarnOnInvalidCallback.has(key) || + (didWarnOnInvalidCallback.add(key), + console.error( + "Expected the last optional `callback` argument to be a function. Instead received: %s.", + callback + )); + } + } + function applyDerivedStateFromProps( + workInProgress, + ctor, + getDerivedStateFromProps, + nextProps + ) { + var prevState = workInProgress.memoizedState, + partialState = getDerivedStateFromProps(nextProps, prevState); + if (workInProgress.mode & StrictLegacyMode) { + setIsStrictModeForDevtools(!0); + try { + partialState = getDerivedStateFromProps(nextProps, prevState); + } finally { + setIsStrictModeForDevtools(!1); + } + } + void 0 === partialState && + ((ctor = getComponentNameFromType(ctor) || "Component"), + didWarnAboutUndefinedDerivedState.has(ctor) || + (didWarnAboutUndefinedDerivedState.add(ctor), + console.error( + "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.", + ctor + ))); + prevState = + null === partialState || void 0 === partialState + ? prevState + : assign({}, prevState, partialState); + workInProgress.memoizedState = prevState; + 0 === workInProgress.lanes && + (workInProgress.updateQueue.baseState = prevState); + } + function checkShouldComponentUpdate( + workInProgress, + ctor, + oldProps, + newProps, + oldState, + newState, + nextContext + ) { + var instance = workInProgress.stateNode; + if ("function" === typeof instance.shouldComponentUpdate) { + oldProps = instance.shouldComponentUpdate( + newProps, + newState, + nextContext + ); + if (workInProgress.mode & StrictLegacyMode) { + setIsStrictModeForDevtools(!0); + try { + oldProps = instance.shouldComponentUpdate( + newProps, + newState, + nextContext + ); + } finally { + setIsStrictModeForDevtools(!1); + } + } + void 0 === oldProps && + console.error( + "%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.", + getComponentNameFromType(ctor) || "Component" + ); + return oldProps; + } + return ctor.prototype && ctor.prototype.isPureReactComponent + ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState) + : !0; + } + function callComponentWillReceiveProps( + workInProgress, + instance, + newProps, + nextContext + ) { + var oldState = instance.state; + "function" === typeof instance.componentWillReceiveProps && + instance.componentWillReceiveProps(newProps, nextContext); + "function" === typeof instance.UNSAFE_componentWillReceiveProps && + instance.UNSAFE_componentWillReceiveProps(newProps, nextContext); + instance.state !== oldState && + ((workInProgress = + getComponentNameFromFiber(workInProgress) || "Component"), + didWarnAboutStateAssignmentForComponent.has(workInProgress) || + (didWarnAboutStateAssignmentForComponent.add(workInProgress), + console.error( + "%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.", + workInProgress + )), + classComponentUpdater.enqueueReplaceState( + instance, + instance.state, + null + )); + } + function resolveClassComponentProps(Component, baseProps) { + var newProps = baseProps; + if ("ref" in baseProps) { + newProps = {}; + for (var propName in baseProps) + "ref" !== propName && (newProps[propName] = baseProps[propName]); + } + if ((Component = Component.defaultProps)) { + newProps === baseProps && (newProps = assign({}, newProps)); + for (var _propName in Component) + void 0 === newProps[_propName] && + (newProps[_propName] = Component[_propName]); + } + return newProps; } function getTreeId() { var overflow = treeContextOverflow, @@ -4946,518 +5069,144 @@ "Expected to be hydrating. This is a bug in React. Please file an issue." ); } - function buildHydrationDiffNode(fiber, distanceFromLeaf) { - if (null === fiber.return) { - if (null === hydrationDiffRootDEV) - hydrationDiffRootDEV = { - fiber: fiber, - children: [], - serverProps: void 0, - serverTail: [], - distanceFromLeaf: distanceFromLeaf - }; - else { - if (hydrationDiffRootDEV.fiber !== fiber) - throw Error( - "Saw multiple hydration diff roots in a pass. This is a bug in React." + function createThenableState() { + return { didWarnAboutUncachedPromise: !1, thenables: [] }; + } + function isThenableResolved(thenable) { + thenable = thenable.status; + return "fulfilled" === thenable || "rejected" === thenable; + } + function noop$4() {} + function trackUsedThenable(thenableState, thenable, index) { + null !== ReactSharedInternals.actQueue && + (ReactSharedInternals.didUsePromise = !0); + var trackedThenables = thenableState.thenables; + index = trackedThenables[index]; + void 0 === index + ? trackedThenables.push(thenable) + : index !== thenable && + (thenableState.didWarnAboutUncachedPromise || + ((thenableState.didWarnAboutUncachedPromise = !0), + console.error( + "A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework." + )), + thenable.then(noop$4, noop$4), + (thenable = index)); + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw ( + ((thenableState = thenable.reason), + checkIfUseWrappedInAsyncCatch(thenableState), + thenableState) + ); + default: + if ("string" === typeof thenable.status) + thenable.then(noop$4, noop$4); + else { + thenableState = workInProgressRoot; + if ( + null !== thenableState && + 100 < thenableState.shellSuspendCounter + ) + throw Error( + "async/await is not yet supported in Client Components, only Server Components. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." + ); + thenableState = thenable; + thenableState.status = "pending"; + thenableState.then( + function (fulfilledValue) { + if ("pending" === thenable.status) { + var fulfilledThenable = thenable; + fulfilledThenable.status = "fulfilled"; + fulfilledThenable.value = fulfilledValue; + } + }, + function (error) { + if ("pending" === thenable.status) { + var rejectedThenable = thenable; + rejectedThenable.status = "rejected"; + rejectedThenable.reason = error; + } + } ); - hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf && - (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf); - } - return hydrationDiffRootDEV; + } + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw ( + ((thenableState = thenable.reason), + checkIfUseWrappedInAsyncCatch(thenableState), + thenableState) + ); + } + suspendedThenable = thenable; + needsToResetSuspendedThenableDEV = !0; + throw SuspenseException; } - var siblings = buildHydrationDiffNode( - fiber.return, - distanceFromLeaf + 1 - ).children; - if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber) - return ( - (siblings = siblings[siblings.length - 1]), - siblings.distanceFromLeaf > distanceFromLeaf && - (siblings.distanceFromLeaf = distanceFromLeaf), - siblings - ); - distanceFromLeaf = { - fiber: fiber, - children: [], - serverProps: void 0, - serverTail: [], - distanceFromLeaf: distanceFromLeaf - }; - siblings.push(distanceFromLeaf); - return distanceFromLeaf; } - function warnNonHydratedInstance(fiber, rejectedCandidate) { - didSuspendOrErrorDEV || - ((fiber = buildHydrationDiffNode(fiber, 0)), - (fiber.serverProps = null), - null !== rejectedCandidate && - ((rejectedCandidate = - describeHydratableInstanceForDevWarnings(rejectedCandidate)), - fiber.serverTail.push(rejectedCandidate))); + function getSuspendedThenable() { + if (null === suspendedThenable) + throw Error( + "Expected a suspended thenable. This is a bug in React. Please file an issue." + ); + var thenable = suspendedThenable; + suspendedThenable = null; + needsToResetSuspendedThenableDEV = !1; + return thenable; } - function throwOnHydrationMismatch(fiber) { - var diff = "", - diffRoot = hydrationDiffRootDEV; - null !== diffRoot && - ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot))); - queueHydrationError( - createCapturedValueAtFiber( - Error( - "Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\nhttps://react.dev/link/hydration-mismatch" + - diff - ), - fiber - ) - ); - throw HydrationMismatchException; - } - function prepareToHydrateHostInstance(fiber) { - var didHydrate = fiber.stateNode; - var type = fiber.type, - props = fiber.memoizedProps; - didHydrate[internalInstanceKey] = fiber; - didHydrate[internalPropsKey] = props; - validatePropertiesInDevelopment(type, props); - switch (type) { - case "dialog": - listenToNonDelegatedEvent("cancel", didHydrate); - listenToNonDelegatedEvent("close", didHydrate); - break; - case "iframe": - case "object": - case "embed": - listenToNonDelegatedEvent("load", didHydrate); - break; - case "video": - case "audio": - for (type = 0; type < mediaEventTypes.length; type++) - listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate); - break; - case "source": - listenToNonDelegatedEvent("error", didHydrate); - break; - case "img": - case "image": - case "link": - listenToNonDelegatedEvent("error", didHydrate); - listenToNonDelegatedEvent("load", didHydrate); - break; - case "details": - listenToNonDelegatedEvent("toggle", didHydrate); - break; - case "input": - checkControlledValueProps("input", props); - listenToNonDelegatedEvent("invalid", didHydrate); - validateInputProps(didHydrate, props); - initInput( - didHydrate, - props.value, - props.defaultValue, - props.checked, - props.defaultChecked, - props.type, - props.name, - !0 - ); - track(didHydrate); - break; - case "option": - validateOptionProps(didHydrate, props); - break; - case "select": - checkControlledValueProps("select", props); - listenToNonDelegatedEvent("invalid", didHydrate); - validateSelectProps(didHydrate, props); - break; - case "textarea": - checkControlledValueProps("textarea", props), - listenToNonDelegatedEvent("invalid", didHydrate), - validateTextareaProps(didHydrate, props), - initTextarea( - didHydrate, - props.value, - props.defaultValue, - props.children - ), - track(didHydrate); - } - type = props.children; - ("string" !== typeof type && - "number" !== typeof type && - "bigint" !== typeof type) || - didHydrate.textContent === "" + type || - !0 === props.suppressHydrationWarning || - checkForUnmatchedText(didHydrate.textContent, type) - ? (null != props.popover && - (listenToNonDelegatedEvent("beforetoggle", didHydrate), - listenToNonDelegatedEvent("toggle", didHydrate)), - null != props.onScroll && - listenToNonDelegatedEvent("scroll", didHydrate), - null != props.onScrollEnd && - listenToNonDelegatedEvent("scrollend", didHydrate), - null != props.onClick && (didHydrate.onclick = noop$2), - (didHydrate = !0)) - : (didHydrate = !1); - didHydrate || throwOnHydrationMismatch(fiber); - } - function popToNextHostParent(fiber) { - for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) - switch (hydrationParentFiber.tag) { - case 3: - case 27: - rootOrSingletonContext = !0; - return; - case 5: - case 13: - rootOrSingletonContext = !1; - return; - default: - hydrationParentFiber = hydrationParentFiber.return; - } + function checkIfUseWrappedInAsyncCatch(rejectedReason) { + if ( + rejectedReason === SuspenseException || + rejectedReason === SuspenseActionException + ) + throw Error( + "Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." + ); } - function popHydrationState(fiber) { - if (fiber !== hydrationParentFiber) return !1; - if (!isHydrating) - return popToNextHostParent(fiber), (isHydrating = !0), !1; - var shouldClear = !1, - JSCompiler_temp; - if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { - if ((JSCompiler_temp = 5 === fiber.tag)) - (JSCompiler_temp = fiber.type), - (JSCompiler_temp = - !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || - shouldSetTextContent(fiber.type, fiber.memoizedProps)); - JSCompiler_temp = !JSCompiler_temp; - } - JSCompiler_temp && (shouldClear = !0); - if (shouldClear && nextHydratableInstance) { - for (shouldClear = nextHydratableInstance; shouldClear; ) { - JSCompiler_temp = buildHydrationDiffNode(fiber, 0); - var description = - describeHydratableInstanceForDevWarnings(shouldClear); - JSCompiler_temp.serverTail.push(description); - shouldClear = - "Suspense" === description.type - ? getNextHydratableInstanceAfterSuspenseInstance(shouldClear) - : getNextHydratable(shouldClear.nextSibling); - } - throwOnHydrationMismatch(fiber); - } - popToNextHostParent(fiber); - if (13 === fiber.tag) { - fiber = fiber.memoizedState; - fiber = null !== fiber ? fiber.dehydrated : null; - if (!fiber) - throw Error( - "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue." - ); - nextHydratableInstance = - getNextHydratableInstanceAfterSuspenseInstance(fiber); - } else - nextHydratableInstance = hydrationParentFiber - ? getNextHydratable(fiber.stateNode.nextSibling) - : null; - return !0; + function pushHiddenContext(fiber, context) { + var prevEntangledRenderLanes = entangledRenderLanes; + push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber); + push(currentTreeHiddenStackCursor, context, fiber); + entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes; } - function resetHydrationState() { - nextHydratableInstance = hydrationParentFiber = null; - didSuspendOrErrorDEV = isHydrating = !1; + function reuseHiddenContextOnStack(fiber) { + push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber); + push( + currentTreeHiddenStackCursor, + currentTreeHiddenStackCursor.current, + fiber + ); } - function upgradeHydrationErrorsToRecoverable() { - var queuedErrors = hydrationErrors; - null !== queuedErrors && - (null === workInProgressRootRecoverableErrors - ? (workInProgressRootRecoverableErrors = queuedErrors) - : workInProgressRootRecoverableErrors.push.apply( - workInProgressRootRecoverableErrors, - queuedErrors - ), - (hydrationErrors = null)); - return queuedErrors; + function popHiddenContext(fiber) { + entangledRenderLanes = prevEntangledRenderLanesCursor.current; + pop(currentTreeHiddenStackCursor, fiber); + pop(prevEntangledRenderLanesCursor, fiber); } - function queueHydrationError(error) { - null === hydrationErrors - ? (hydrationErrors = [error]) - : hydrationErrors.push(error); + function peekCacheFromPool() { + var cacheResumedFromPreviousRender = resumedCache.current; + return null !== cacheResumedFromPreviousRender + ? cacheResumedFromPreviousRender + : workInProgressRoot.pooledCache; } - function emitPendingHydrationWarnings() { - var diffRoot = hydrationDiffRootDEV; - null !== diffRoot && - ((hydrationDiffRootDEV = null), - (diffRoot = describeDiff(diffRoot)), - console.error( - "A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\n%s%s", - "https://react.dev/link/hydration-mismatch", - diffRoot - )); + function pushTransition(offscreenWorkInProgress, prevCachePool) { + null === prevCachePool + ? push(resumedCache, resumedCache.current, offscreenWorkInProgress) + : push(resumedCache, prevCachePool.pool, offscreenWorkInProgress); } - function getViewTransitionName(props, instance) { - return null != props.name && "auto" !== props.name - ? props.name - : instance.autoName; + function getSuspendedCache() { + var cacheFromPool = peekCacheFromPool(); + return null === cacheFromPool + ? null + : { parent: CacheContext._currentValue, pool: cacheFromPool }; } - function warnOnInvalidCallback(callback) { - if (null !== callback && "function" !== typeof callback) { - var key = String(callback); - didWarnOnInvalidCallback.has(key) || - (didWarnOnInvalidCallback.add(key), - console.error( - "Expected the last optional `callback` argument to be a function. Instead received: %s.", - callback - )); - } - } - function applyDerivedStateFromProps( - workInProgress, - ctor, - getDerivedStateFromProps, - nextProps - ) { - var prevState = workInProgress.memoizedState, - partialState = getDerivedStateFromProps(nextProps, prevState); - if (workInProgress.mode & StrictLegacyMode) { - setIsStrictModeForDevtools(!0); - try { - partialState = getDerivedStateFromProps(nextProps, prevState); - } finally { - setIsStrictModeForDevtools(!1); - } - } - void 0 === partialState && - ((ctor = getComponentNameFromType(ctor) || "Component"), - didWarnAboutUndefinedDerivedState.has(ctor) || - (didWarnAboutUndefinedDerivedState.add(ctor), - console.error( - "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.", - ctor - ))); - prevState = - null === partialState || void 0 === partialState - ? prevState - : assign({}, prevState, partialState); - workInProgress.memoizedState = prevState; - 0 === workInProgress.lanes && - (workInProgress.updateQueue.baseState = prevState); - } - function checkShouldComponentUpdate( - workInProgress, - ctor, - oldProps, - newProps, - oldState, - newState, - nextContext - ) { - var instance = workInProgress.stateNode; - if ("function" === typeof instance.shouldComponentUpdate) { - oldProps = instance.shouldComponentUpdate( - newProps, - newState, - nextContext - ); - if (workInProgress.mode & StrictLegacyMode) { - setIsStrictModeForDevtools(!0); - try { - oldProps = instance.shouldComponentUpdate( - newProps, - newState, - nextContext - ); - } finally { - setIsStrictModeForDevtools(!1); - } - } - void 0 === oldProps && - console.error( - "%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.", - getComponentNameFromType(ctor) || "Component" - ); - return oldProps; - } - return ctor.prototype && ctor.prototype.isPureReactComponent - ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState) - : !0; - } - function callComponentWillReceiveProps( - workInProgress, - instance, - newProps, - nextContext - ) { - var oldState = instance.state; - "function" === typeof instance.componentWillReceiveProps && - instance.componentWillReceiveProps(newProps, nextContext); - "function" === typeof instance.UNSAFE_componentWillReceiveProps && - instance.UNSAFE_componentWillReceiveProps(newProps, nextContext); - instance.state !== oldState && - ((workInProgress = - getComponentNameFromFiber(workInProgress) || "Component"), - didWarnAboutStateAssignmentForComponent.has(workInProgress) || - (didWarnAboutStateAssignmentForComponent.add(workInProgress), - console.error( - "%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.", - workInProgress - )), - classComponentUpdater.enqueueReplaceState( - instance, - instance.state, - null - )); - } - function resolveClassComponentProps(Component, baseProps) { - var newProps = baseProps; - if ("ref" in baseProps) { - newProps = {}; - for (var propName in baseProps) - "ref" !== propName && (newProps[propName] = baseProps[propName]); - } - if ((Component = Component.defaultProps)) { - newProps === baseProps && (newProps = assign({}, newProps)); - for (var _propName in Component) - void 0 === newProps[_propName] && - (newProps[_propName] = Component[_propName]); - } - return newProps; - } - function createThenableState() { - return { didWarnAboutUncachedPromise: !1, thenables: [] }; - } - function isThenableResolved(thenable) { - thenable = thenable.status; - return "fulfilled" === thenable || "rejected" === thenable; - } - function noop$4() {} - function trackUsedThenable(thenableState, thenable, index) { - null !== ReactSharedInternals.actQueue && - (ReactSharedInternals.didUsePromise = !0); - var trackedThenables = thenableState.thenables; - index = trackedThenables[index]; - void 0 === index - ? trackedThenables.push(thenable) - : index !== thenable && - (thenableState.didWarnAboutUncachedPromise || - ((thenableState.didWarnAboutUncachedPromise = !0), - console.error( - "A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework." - )), - thenable.then(noop$4, noop$4), - (thenable = index)); - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw ( - ((thenableState = thenable.reason), - checkIfUseWrappedInAsyncCatch(thenableState), - thenableState) - ); - default: - if ("string" === typeof thenable.status) - thenable.then(noop$4, noop$4); - else { - thenableState = workInProgressRoot; - if ( - null !== thenableState && - 100 < thenableState.shellSuspendCounter - ) - throw Error( - "async/await is not yet supported in Client Components, only Server Components. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." - ); - thenableState = thenable; - thenableState.status = "pending"; - thenableState.then( - function (fulfilledValue) { - if ("pending" === thenable.status) { - var fulfilledThenable = thenable; - fulfilledThenable.status = "fulfilled"; - fulfilledThenable.value = fulfilledValue; - } - }, - function (error) { - if ("pending" === thenable.status) { - var rejectedThenable = thenable; - rejectedThenable.status = "rejected"; - rejectedThenable.reason = error; - } - } - ); - } - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw ( - ((thenableState = thenable.reason), - checkIfUseWrappedInAsyncCatch(thenableState), - thenableState) - ); - } - suspendedThenable = thenable; - needsToResetSuspendedThenableDEV = !0; - throw SuspenseException; - } - } - function getSuspendedThenable() { - if (null === suspendedThenable) - throw Error( - "Expected a suspended thenable. This is a bug in React. Please file an issue." - ); - var thenable = suspendedThenable; - suspendedThenable = null; - needsToResetSuspendedThenableDEV = !1; - return thenable; - } - function checkIfUseWrappedInAsyncCatch(rejectedReason) { - if ( - rejectedReason === SuspenseException || - rejectedReason === SuspenseActionException - ) - throw Error( - "Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." - ); - } - function pushHiddenContext(fiber, context) { - var prevEntangledRenderLanes = entangledRenderLanes; - push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber); - push(currentTreeHiddenStackCursor, context, fiber); - entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes; - } - function reuseHiddenContextOnStack(fiber) { - push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber); - push( - currentTreeHiddenStackCursor, - currentTreeHiddenStackCursor.current, - fiber - ); - } - function popHiddenContext(fiber) { - entangledRenderLanes = prevEntangledRenderLanesCursor.current; - pop(currentTreeHiddenStackCursor, fiber); - pop(prevEntangledRenderLanesCursor, fiber); - } - function peekCacheFromPool() { - var cacheResumedFromPreviousRender = resumedCache.current; - return null !== cacheResumedFromPreviousRender - ? cacheResumedFromPreviousRender - : workInProgressRoot.pooledCache; - } - function pushTransition(offscreenWorkInProgress, prevCachePool) { - null === prevCachePool - ? push(resumedCache, resumedCache.current, offscreenWorkInProgress) - : push(resumedCache, prevCachePool.pool, offscreenWorkInProgress); - } - function getSuspendedCache() { - var cacheFromPool = peekCacheFromPool(); - return null === cacheFromPool - ? null - : { parent: CacheContext._currentValue, pool: cacheFromPool }; - } - function mountHookTypesDev() { - var hookName = currentHookNameInDev; - null === hookTypesDev - ? (hookTypesDev = [hookName]) - : hookTypesDev.push(hookName); + function mountHookTypesDev() { + var hookName = currentHookNameInDev; + null === hookTypesDev + ? (hookTypesDev = [hookName]) + : hookTypesDev.push(hookName); } function updateHookTypesDev() { var hookName = currentHookNameInDev; @@ -6934,7 +6683,7 @@ 0 < treeId && (identifierPrefix += "H" + treeId.toString(32)); identifierPrefix += ":"; } else - (treeId = globalClientIdCounter++), + (treeId = globalClientIdCounter$1++), (identifierPrefix = ":" + identifierPrefix + "r" + treeId.toString(32) + ":"); return (hook.memoizedState = identifierPrefix); @@ -9584,33 +9333,33 @@ return current; } function updateSuspenseComponent(current, workInProgress, renderLanes) { - var JSCompiler_object_inline_componentStack_2534; - var JSCompiler_object_inline_stack_2533 = workInProgress.pendingProps; + var JSCompiler_object_inline_componentStack_2550; + var JSCompiler_object_inline_stack_2549 = workInProgress.pendingProps; shouldSuspendImpl(workInProgress) && (workInProgress.flags |= 128); - var JSCompiler_object_inline_message_2531 = !1; + var JSCompiler_object_inline_message_2547 = !1; var didSuspend = 0 !== (workInProgress.flags & 128); - (JSCompiler_object_inline_componentStack_2534 = didSuspend) || - (JSCompiler_object_inline_componentStack_2534 = + (JSCompiler_object_inline_componentStack_2550 = didSuspend) || + (JSCompiler_object_inline_componentStack_2550 = null !== current && null === current.memoizedState ? !1 : 0 !== (suspenseStackCursor.current & ForceSuspenseFallback)); - JSCompiler_object_inline_componentStack_2534 && - ((JSCompiler_object_inline_message_2531 = !0), + JSCompiler_object_inline_componentStack_2550 && + ((JSCompiler_object_inline_message_2547 = !0), (workInProgress.flags &= -129)); - JSCompiler_object_inline_componentStack_2534 = + JSCompiler_object_inline_componentStack_2550 = 0 !== (workInProgress.flags & 32); workInProgress.flags &= -33; if (null === current) { if (isHydrating) { - JSCompiler_object_inline_message_2531 + JSCompiler_object_inline_message_2547 ? pushPrimaryTreeSuspenseHandler(workInProgress) : reuseSuspenseHandlerOnStack(workInProgress); if (isHydrating) { - var JSCompiler_object_inline_digest_2532 = nextHydratableInstance; + var JSCompiler_object_inline_digest_2548 = nextHydratableInstance; var JSCompiler_temp; - if (!(JSCompiler_temp = !JSCompiler_object_inline_digest_2532)) { + if (!(JSCompiler_temp = !JSCompiler_object_inline_digest_2548)) { c: { - var instance = JSCompiler_object_inline_digest_2532; + var instance = JSCompiler_object_inline_digest_2548; for ( JSCompiler_temp = rootOrSingletonContext; 8 !== instance.nodeType; @@ -9652,87 +9401,87 @@ JSCompiler_temp && (warnNonHydratedInstance( workInProgress, - JSCompiler_object_inline_digest_2532 + JSCompiler_object_inline_digest_2548 ), throwOnHydrationMismatch(workInProgress)); } - JSCompiler_object_inline_digest_2532 = workInProgress.memoizedState; + JSCompiler_object_inline_digest_2548 = workInProgress.memoizedState; if ( - null !== JSCompiler_object_inline_digest_2532 && - ((JSCompiler_object_inline_digest_2532 = - JSCompiler_object_inline_digest_2532.dehydrated), - null !== JSCompiler_object_inline_digest_2532) + null !== JSCompiler_object_inline_digest_2548 && + ((JSCompiler_object_inline_digest_2548 = + JSCompiler_object_inline_digest_2548.dehydrated), + null !== JSCompiler_object_inline_digest_2548) ) return ( - isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2532) + isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2548) ? (workInProgress.lanes = 32) : (workInProgress.lanes = 536870912), null ); popSuspenseHandler(workInProgress); } - JSCompiler_object_inline_digest_2532 = - JSCompiler_object_inline_stack_2533.children; - JSCompiler_temp = JSCompiler_object_inline_stack_2533.fallback; - if (JSCompiler_object_inline_message_2531) + JSCompiler_object_inline_digest_2548 = + JSCompiler_object_inline_stack_2549.children; + JSCompiler_temp = JSCompiler_object_inline_stack_2549.fallback; + if (JSCompiler_object_inline_message_2547) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_stack_2533 = + (JSCompiler_object_inline_stack_2549 = mountSuspenseFallbackChildren( workInProgress, - JSCompiler_object_inline_digest_2532, + JSCompiler_object_inline_digest_2548, JSCompiler_temp, renderLanes )), - (JSCompiler_object_inline_message_2531 = workInProgress.child), - (JSCompiler_object_inline_message_2531.memoizedState = + (JSCompiler_object_inline_message_2547 = workInProgress.child), + (JSCompiler_object_inline_message_2547.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_message_2531.childLanes = + (JSCompiler_object_inline_message_2547.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2534, + JSCompiler_object_inline_componentStack_2550, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - JSCompiler_object_inline_stack_2533 + JSCompiler_object_inline_stack_2549 ); if ( "number" === - typeof JSCompiler_object_inline_stack_2533.unstable_expectedLoadTime + typeof JSCompiler_object_inline_stack_2549.unstable_expectedLoadTime ) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_stack_2533 = + (JSCompiler_object_inline_stack_2549 = mountSuspenseFallbackChildren( workInProgress, - JSCompiler_object_inline_digest_2532, + JSCompiler_object_inline_digest_2548, JSCompiler_temp, renderLanes )), - (JSCompiler_object_inline_message_2531 = workInProgress.child), - (JSCompiler_object_inline_message_2531.memoizedState = + (JSCompiler_object_inline_message_2547 = workInProgress.child), + (JSCompiler_object_inline_message_2547.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_message_2531.childLanes = + (JSCompiler_object_inline_message_2547.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2534, + JSCompiler_object_inline_componentStack_2550, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), (workInProgress.lanes = 4194304), - JSCompiler_object_inline_stack_2533 + JSCompiler_object_inline_stack_2549 ); pushPrimaryTreeSuspenseHandler(workInProgress); return mountSuspensePrimaryChildren( workInProgress, - JSCompiler_object_inline_digest_2532 + JSCompiler_object_inline_digest_2548 ); } var prevState = current.memoizedState; if ( null !== prevState && - ((JSCompiler_object_inline_digest_2532 = prevState.dehydrated), - null !== JSCompiler_object_inline_digest_2532) + ((JSCompiler_object_inline_digest_2548 = prevState.dehydrated), + null !== JSCompiler_object_inline_digest_2548) ) { if (didSuspend) workInProgress.flags & 256 @@ -9749,94 +9498,94 @@ (workInProgress.flags |= 128), (workInProgress = null)) : (reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_message_2531 = - JSCompiler_object_inline_stack_2533.fallback), - (JSCompiler_object_inline_digest_2532 = workInProgress.mode), - (JSCompiler_object_inline_stack_2533 = + (JSCompiler_object_inline_message_2547 = + JSCompiler_object_inline_stack_2549.fallback), + (JSCompiler_object_inline_digest_2548 = workInProgress.mode), + (JSCompiler_object_inline_stack_2549 = mountWorkInProgressOffscreenFiber( { mode: "visible", - children: JSCompiler_object_inline_stack_2533.children + children: JSCompiler_object_inline_stack_2549.children }, - JSCompiler_object_inline_digest_2532 + JSCompiler_object_inline_digest_2548 )), - (JSCompiler_object_inline_message_2531 = + (JSCompiler_object_inline_message_2547 = createFiberFromFragment( - JSCompiler_object_inline_message_2531, - JSCompiler_object_inline_digest_2532, + JSCompiler_object_inline_message_2547, + JSCompiler_object_inline_digest_2548, renderLanes, null )), - (JSCompiler_object_inline_message_2531.flags |= 2), - (JSCompiler_object_inline_stack_2533.return = workInProgress), - (JSCompiler_object_inline_message_2531.return = workInProgress), - (JSCompiler_object_inline_stack_2533.sibling = - JSCompiler_object_inline_message_2531), - (workInProgress.child = JSCompiler_object_inline_stack_2533), + (JSCompiler_object_inline_message_2547.flags |= 2), + (JSCompiler_object_inline_stack_2549.return = workInProgress), + (JSCompiler_object_inline_message_2547.return = workInProgress), + (JSCompiler_object_inline_stack_2549.sibling = + JSCompiler_object_inline_message_2547), + (workInProgress.child = JSCompiler_object_inline_stack_2549), reconcileChildFibers( workInProgress, current.child, null, renderLanes ), - (JSCompiler_object_inline_stack_2533 = workInProgress.child), - (JSCompiler_object_inline_stack_2533.memoizedState = + (JSCompiler_object_inline_stack_2549 = workInProgress.child), + (JSCompiler_object_inline_stack_2549.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_stack_2533.childLanes = + (JSCompiler_object_inline_stack_2549.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2534, + JSCompiler_object_inline_componentStack_2550, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - (workInProgress = JSCompiler_object_inline_message_2531)); + (workInProgress = JSCompiler_object_inline_message_2547)); else if ( (pushPrimaryTreeSuspenseHandler(workInProgress), isHydrating && console.error( "We should not be hydrating here. This is a bug in React. Please file a bug." ), - isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2532)) + isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2548)) ) { - JSCompiler_object_inline_componentStack_2534 = - JSCompiler_object_inline_digest_2532.nextSibling && - JSCompiler_object_inline_digest_2532.nextSibling.dataset; - if (JSCompiler_object_inline_componentStack_2534) { - JSCompiler_temp = JSCompiler_object_inline_componentStack_2534.dgst; - var message = JSCompiler_object_inline_componentStack_2534.msg; - instance = JSCompiler_object_inline_componentStack_2534.stck; + JSCompiler_object_inline_componentStack_2550 = + JSCompiler_object_inline_digest_2548.nextSibling && + JSCompiler_object_inline_digest_2548.nextSibling.dataset; + if (JSCompiler_object_inline_componentStack_2550) { + JSCompiler_temp = JSCompiler_object_inline_componentStack_2550.dgst; + var message = JSCompiler_object_inline_componentStack_2550.msg; + instance = JSCompiler_object_inline_componentStack_2550.stck; var componentStack = - JSCompiler_object_inline_componentStack_2534.cstck; + JSCompiler_object_inline_componentStack_2550.cstck; } - JSCompiler_object_inline_message_2531 = message; - JSCompiler_object_inline_digest_2532 = JSCompiler_temp; - JSCompiler_object_inline_stack_2533 = instance; - JSCompiler_temp = JSCompiler_object_inline_componentStack_2534 = + JSCompiler_object_inline_message_2547 = message; + JSCompiler_object_inline_digest_2548 = JSCompiler_temp; + JSCompiler_object_inline_stack_2549 = instance; + JSCompiler_temp = JSCompiler_object_inline_componentStack_2550 = componentStack; - "POSTPONE" !== JSCompiler_object_inline_digest_2532 && - ((JSCompiler_object_inline_componentStack_2534 = - JSCompiler_object_inline_message_2531 - ? Error(JSCompiler_object_inline_message_2531) + "POSTPONE" !== JSCompiler_object_inline_digest_2548 && + ((JSCompiler_object_inline_componentStack_2550 = + JSCompiler_object_inline_message_2547 + ? Error(JSCompiler_object_inline_message_2547) : Error( "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." )), - (JSCompiler_object_inline_componentStack_2534.stack = - JSCompiler_object_inline_stack_2533 || ""), - (JSCompiler_object_inline_componentStack_2534.digest = - JSCompiler_object_inline_digest_2532), - (JSCompiler_object_inline_stack_2533 = + (JSCompiler_object_inline_componentStack_2550.stack = + JSCompiler_object_inline_stack_2549 || ""), + (JSCompiler_object_inline_componentStack_2550.digest = + JSCompiler_object_inline_digest_2548), + (JSCompiler_object_inline_stack_2549 = void 0 === JSCompiler_temp ? null : JSCompiler_temp), - (JSCompiler_object_inline_message_2531 = { - value: JSCompiler_object_inline_componentStack_2534, + (JSCompiler_object_inline_message_2547 = { + value: JSCompiler_object_inline_componentStack_2550, source: null, - stack: JSCompiler_object_inline_stack_2533 + stack: JSCompiler_object_inline_stack_2549 }), - "string" === typeof JSCompiler_object_inline_stack_2533 && + "string" === typeof JSCompiler_object_inline_stack_2549 && CapturedStacks.set( - JSCompiler_object_inline_componentStack_2534, - JSCompiler_object_inline_message_2531 + JSCompiler_object_inline_componentStack_2550, + JSCompiler_object_inline_message_2547 ), - queueHydrationError(JSCompiler_object_inline_message_2531)); + queueHydrationError(JSCompiler_object_inline_message_2547)); workInProgress = retrySuspenseComponentWithoutHydrating( current, workInProgress, @@ -9850,44 +9599,44 @@ renderLanes, !1 ), - (JSCompiler_object_inline_componentStack_2534 = + (JSCompiler_object_inline_componentStack_2550 = 0 !== (renderLanes & current.childLanes)), - didReceiveUpdate || JSCompiler_object_inline_componentStack_2534) + didReceiveUpdate || JSCompiler_object_inline_componentStack_2550) ) { - JSCompiler_object_inline_componentStack_2534 = workInProgressRoot; + JSCompiler_object_inline_componentStack_2550 = workInProgressRoot; if ( - null !== JSCompiler_object_inline_componentStack_2534 && - ((JSCompiler_object_inline_stack_2533 = renderLanes & -renderLanes), - (JSCompiler_object_inline_stack_2533 = - 0 !== (JSCompiler_object_inline_stack_2533 & 42) + null !== JSCompiler_object_inline_componentStack_2550 && + ((JSCompiler_object_inline_stack_2549 = renderLanes & -renderLanes), + (JSCompiler_object_inline_stack_2549 = + 0 !== (JSCompiler_object_inline_stack_2549 & 42) ? 1 : getBumpedLaneForHydrationByLane( - JSCompiler_object_inline_stack_2533 + JSCompiler_object_inline_stack_2549 )), - (JSCompiler_object_inline_stack_2533 = + (JSCompiler_object_inline_stack_2549 = 0 !== - (JSCompiler_object_inline_stack_2533 & - (JSCompiler_object_inline_componentStack_2534.suspendedLanes | + (JSCompiler_object_inline_stack_2549 & + (JSCompiler_object_inline_componentStack_2550.suspendedLanes | renderLanes)) ? 0 - : JSCompiler_object_inline_stack_2533), - 0 !== JSCompiler_object_inline_stack_2533 && - JSCompiler_object_inline_stack_2533 !== prevState.retryLane) + : JSCompiler_object_inline_stack_2549), + 0 !== JSCompiler_object_inline_stack_2549 && + JSCompiler_object_inline_stack_2549 !== prevState.retryLane) ) throw ( - ((prevState.retryLane = JSCompiler_object_inline_stack_2533), + ((prevState.retryLane = JSCompiler_object_inline_stack_2549), enqueueConcurrentRenderForLane( current, - JSCompiler_object_inline_stack_2533 + JSCompiler_object_inline_stack_2549 ), scheduleUpdateOnFiber( - JSCompiler_object_inline_componentStack_2534, + JSCompiler_object_inline_componentStack_2550, current, - JSCompiler_object_inline_stack_2533 + JSCompiler_object_inline_stack_2549 ), SelectiveHydrationException) ); - JSCompiler_object_inline_digest_2532.data === + JSCompiler_object_inline_digest_2548.data === SUSPENSE_PENDING_START_DATA || renderDidSuspendDelayIfPossible(); workInProgress = retrySuspenseComponentWithoutHydrating( current, @@ -9895,14 +9644,14 @@ renderLanes ); } else - JSCompiler_object_inline_digest_2532.data === + JSCompiler_object_inline_digest_2548.data === SUSPENSE_PENDING_START_DATA ? ((workInProgress.flags |= 192), (workInProgress.child = current.child), (workInProgress = null)) : ((current = prevState.treeContext), (nextHydratableInstance = getNextHydratable( - JSCompiler_object_inline_digest_2532.nextSibling + JSCompiler_object_inline_digest_2548.nextSibling )), (hydrationParentFiber = workInProgress), (isHydrating = !0), @@ -9920,54 +9669,54 @@ (treeContextProvider = workInProgress)), (workInProgress = mountSuspensePrimaryChildren( workInProgress, - JSCompiler_object_inline_stack_2533.children + JSCompiler_object_inline_stack_2549.children )), (workInProgress.flags |= 4096)); return workInProgress; } - if (JSCompiler_object_inline_message_2531) + if (JSCompiler_object_inline_message_2547) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_message_2531 = - JSCompiler_object_inline_stack_2533.fallback), - (JSCompiler_object_inline_digest_2532 = workInProgress.mode), + (JSCompiler_object_inline_message_2547 = + JSCompiler_object_inline_stack_2549.fallback), + (JSCompiler_object_inline_digest_2548 = workInProgress.mode), (JSCompiler_temp = current.child), (instance = JSCompiler_temp.sibling), - (JSCompiler_object_inline_stack_2533 = createWorkInProgress( + (JSCompiler_object_inline_stack_2549 = createWorkInProgress( JSCompiler_temp, { mode: "hidden", - children: JSCompiler_object_inline_stack_2533.children + children: JSCompiler_object_inline_stack_2549.children } )), - (JSCompiler_object_inline_stack_2533.subtreeFlags = + (JSCompiler_object_inline_stack_2549.subtreeFlags = JSCompiler_temp.subtreeFlags & 65011712), null !== instance - ? (JSCompiler_object_inline_message_2531 = createWorkInProgress( + ? (JSCompiler_object_inline_message_2547 = createWorkInProgress( instance, - JSCompiler_object_inline_message_2531 + JSCompiler_object_inline_message_2547 )) - : ((JSCompiler_object_inline_message_2531 = createFiberFromFragment( - JSCompiler_object_inline_message_2531, - JSCompiler_object_inline_digest_2532, + : ((JSCompiler_object_inline_message_2547 = createFiberFromFragment( + JSCompiler_object_inline_message_2547, + JSCompiler_object_inline_digest_2548, renderLanes, null )), - (JSCompiler_object_inline_message_2531.flags |= 2)), - (JSCompiler_object_inline_message_2531.return = workInProgress), - (JSCompiler_object_inline_stack_2533.return = workInProgress), - (JSCompiler_object_inline_stack_2533.sibling = - JSCompiler_object_inline_message_2531), - (workInProgress.child = JSCompiler_object_inline_stack_2533), - (JSCompiler_object_inline_stack_2533 = - JSCompiler_object_inline_message_2531), - (JSCompiler_object_inline_message_2531 = workInProgress.child), - (JSCompiler_object_inline_digest_2532 = current.child.memoizedState), - null === JSCompiler_object_inline_digest_2532 - ? (JSCompiler_object_inline_digest_2532 = + (JSCompiler_object_inline_message_2547.flags |= 2)), + (JSCompiler_object_inline_message_2547.return = workInProgress), + (JSCompiler_object_inline_stack_2549.return = workInProgress), + (JSCompiler_object_inline_stack_2549.sibling = + JSCompiler_object_inline_message_2547), + (workInProgress.child = JSCompiler_object_inline_stack_2549), + (JSCompiler_object_inline_stack_2549 = + JSCompiler_object_inline_message_2547), + (JSCompiler_object_inline_message_2547 = workInProgress.child), + (JSCompiler_object_inline_digest_2548 = current.child.memoizedState), + null === JSCompiler_object_inline_digest_2548 + ? (JSCompiler_object_inline_digest_2548 = mountSuspenseOffscreenState(renderLanes)) : ((JSCompiler_temp = - JSCompiler_object_inline_digest_2532.cachePool), + JSCompiler_object_inline_digest_2548.cachePool), null !== JSCompiler_temp ? ((instance = CacheContext._currentValue), (JSCompiler_temp = @@ -9975,38 +9724,38 @@ ? { parent: instance, pool: instance } : JSCompiler_temp)) : (JSCompiler_temp = getSuspendedCache()), - (JSCompiler_object_inline_digest_2532 = { + (JSCompiler_object_inline_digest_2548 = { baseLanes: - JSCompiler_object_inline_digest_2532.baseLanes | renderLanes, + JSCompiler_object_inline_digest_2548.baseLanes | renderLanes, cachePool: JSCompiler_temp })), - (JSCompiler_object_inline_message_2531.memoizedState = - JSCompiler_object_inline_digest_2532), - (JSCompiler_object_inline_message_2531.childLanes = + (JSCompiler_object_inline_message_2547.memoizedState = + JSCompiler_object_inline_digest_2548), + (JSCompiler_object_inline_message_2547.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2534, + JSCompiler_object_inline_componentStack_2550, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - JSCompiler_object_inline_stack_2533 + JSCompiler_object_inline_stack_2549 ); pushPrimaryTreeSuspenseHandler(workInProgress); renderLanes = current.child; current = renderLanes.sibling; renderLanes = createWorkInProgress(renderLanes, { mode: "visible", - children: JSCompiler_object_inline_stack_2533.children + children: JSCompiler_object_inline_stack_2549.children }); renderLanes.return = workInProgress; renderLanes.sibling = null; null !== current && - ((JSCompiler_object_inline_componentStack_2534 = + ((JSCompiler_object_inline_componentStack_2550 = workInProgress.deletions), - null === JSCompiler_object_inline_componentStack_2534 + null === JSCompiler_object_inline_componentStack_2550 ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16)) - : JSCompiler_object_inline_componentStack_2534.push(current)); + : JSCompiler_object_inline_componentStack_2550.push(current)); workInProgress.child = renderLanes; workInProgress.memoizedState = null; return renderLanes; @@ -11090,7 +10839,7 @@ ? ((nextState = getTreeId()), (nextProps = "\u00ab" + nextProps + "T" + nextState + "\u00bb")) - : ((nextState = globalClientIdCounter$1++), + : ((nextState = globalClientIdCounter++), (nextProps = "\u00ab" + nextProps + @@ -11098,6 +10847,9 @@ nextState.toString(32) + "\u00bb")), (prevSibling.autoName = nextProps)), + null !== current && current.memoizedProps.name !== returnFiber.name + ? (workInProgress.flags |= 4194816) + : markRef(current, workInProgress), reconcileChildren( current, workInProgress, @@ -11374,15 +11126,34 @@ function commitAttachRef(finishedWork) { var ref = finishedWork.ref; if (null !== ref) { - var instance = finishedWork.stateNode; + switch (finishedWork.tag) { + case 26: + case 27: + case 5: + var instanceToUse = finishedWork.stateNode; + break; + case 30: + instanceToUse = finishedWork.stateNode; + var name = getViewTransitionName( + finishedWork.memoizedProps, + instanceToUse + ); + if (null === instanceToUse.ref || instanceToUse.ref.name !== name) + instanceToUse.ref = createViewTransitionInstance(name); + instanceToUse = instanceToUse.ref; + break; + default: + instanceToUse = finishedWork.stateNode; + } if ("function" === typeof ref) if (shouldProfile(finishedWork)) try { - startEffectTimer(), (finishedWork.refCleanup = ref(instance)); + startEffectTimer(), + (finishedWork.refCleanup = ref(instanceToUse)); } finally { recordEffectDuration(); } - else finishedWork.refCleanup = ref(instance); + else finishedWork.refCleanup = ref(instanceToUse); else "string" === typeof ref ? console.error("String refs are no longer supported.") @@ -11391,7 +11162,7 @@ "Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().", getComponentNameFromFiber(finishedWork) ), - (ref.current = instance); + (ref.current = instanceToUse); } } function safelyAttachRef(current, nearestMountedAncestor) { @@ -11913,11 +11684,12 @@ function commitAppearingPairViewTransitions(placement) { if (0 !== (placement.subtreeFlags & 2097152)) for (placement = placement.child; null !== placement; ) { - if (22 !== placement.tag || null !== placement.memoizedState) { + if (22 !== placement.tag || null !== placement.memoizedState) if ( + (commitAppearingPairViewTransitions(placement), 30 === placement.tag && - 0 !== (placement.flags & 2097152) && - placement.stateNode.paired + 0 !== (placement.flags & 2097152) && + placement.stateNode.paired) ) { var props = placement.memoizedProps; if (null == props.name || "auto" === props.name) @@ -11933,8 +11705,6 @@ !1 ) || restoreViewTransitionOnHostInstances(placement.child, !1); } - commitAppearingPairViewTransitions(placement); - } placement = placement.sibling; } } @@ -11950,7 +11720,9 @@ null, !1 ) - ? commitAppearingPairViewTransitions(placement) + ? (commitAppearingPairViewTransitions(placement), + placement.stateNode.paired || + scheduleViewTransitionEvent(placement, props.onEnter)) : restoreViewTransitionOnHostInstances(placement.child, !1); } else if (0 !== (placement.subtreeFlags & 33554432)) for (placement = placement.child; null !== placement; ) @@ -11983,7 +11755,8 @@ null, !1 ) - ? (pair.paired = deletion.stateNode) + ? ((pair.paired = deletion.stateNode), + scheduleViewTransitionEvent(deletion, props.onShare)) : restoreViewTransitionOnHostInstances(deletion.child, !1), appearingViewTransitions.delete(name), 0 === appearingViewTransitions.size) @@ -12004,23 +11777,28 @@ var props = deletion.memoizedProps, name = getViewTransitionName(props, deletion.stateNode); viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - deletion.child, - name, - props.className, - null, - !1 + if ( + applyViewTransitionToHostInstances( + deletion.child, + name, + props.className, + null, + !1 + ) ) - ? null !== appearingViewTransitions && - ((props = appearingViewTransitions.get(name)), - void 0 !== props && - ((props.paired = deletion.stateNode), - appearingViewTransitions.delete(name)), + if (null !== appearingViewTransitions) { + var pair = appearingViewTransitions.get(name); + void 0 !== pair + ? ((pair.paired = deletion.stateNode), + appearingViewTransitions.delete(name), + scheduleViewTransitionEvent(deletion, props.onShare)) + : scheduleViewTransitionEvent(deletion, props.onExit); commitDeletedPairViewTransitions( deletion, appearingViewTransitions - )) - : restoreViewTransitionOnHostInstances(deletion.child, !1); + ); + } else scheduleViewTransitionEvent(deletion, props.onExit); + else restoreViewTransitionOnHostInstances(deletion.child, !1); } else if (0 !== (deletion.subtreeFlags & 33554432)) for (deletion = deletion.child; null !== deletion; ) commitExitViewTransitions(deletion, appearingViewTransitions), @@ -12188,6 +11966,10 @@ changedParent.child, changedParent.memoizedState, !1 + ), + scheduleViewTransitionEvent( + changedParent, + changedParent.memoizedProps.onLayout )); } else 0 !== (changedParent.subtreeFlags & 33554432) && @@ -12384,6 +12166,10 @@ ? safelyAttachRef(finishedWork, finishedWork.return) : safelyDetachRef(finishedWork, finishedWork.return)); break; + case 30: + recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); + flags & 512 && safelyAttachRef(finishedWork, finishedWork.return); + break; default: recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); } @@ -13184,6 +12970,10 @@ attachSuspenseRetryListeners(finishedWork, current))); break; case 30: + flags & 512 && + (offscreenSubtreeWasHidden || + null === current || + safelyDetachRef(current, current.return)); flags = viewTransitionMutationContext; viewTransitionMutationContext = !1; recursivelyTraverseMutationEffects(root, finishedWork, lanes); @@ -13258,12 +13048,12 @@ viewTransitionCancelableChildren = null; if (null !== finishedWork) for (var i = 0; i < finishedWork.length; i += 3) { - current = finishedWork[i]; - var oldName = finishedWork[i + 1]; - restoreViewTransitionName(current, finishedWork[i + 2]); - current = current.ownerDocument.documentElement; - null !== current && - current.animate( + var instance = finishedWork[i], + oldName = finishedWork[i + 1]; + restoreViewTransitionName(instance, finishedWork[i + 2]); + instance = instance.ownerDocument.documentElement; + null !== instance && + instance.animate( { opacity: [0, 0], pointerEvents: ["none", "none"] }, { duration: 0, @@ -13310,8 +13100,9 @@ break; case 30: 0 !== (finishedWork.subtreeFlags & 8246) && - ((i = viewTransitionContextChanged), - (oldName = viewTransitionCancelableChildren), + ((i = 0 !== (finishedWork.flags & 4)), + (oldName = viewTransitionContextChanged), + (instance = viewTransitionCancelableChildren), (viewTransitionContextChanged = !1), (viewTransitionCancelableChildren = null), recursivelyTraverseAfterMutationEffects(root, finishedWork), @@ -13328,15 +13119,22 @@ viewTransitionHostInstanceIdx !== (null === root ? 0 : root.length) && (finishedWork.flags |= 32), 0 !== (finishedWork.flags & 4) && current - ? (viewTransitionCancelableChildren = oldName) - : null !== oldName && - (oldName.push.apply( - oldName, + ? ((root = finishedWork.memoizedProps), + scheduleViewTransitionEvent( + finishedWork, + i || viewTransitionContextChanged + ? root.onUpdate + : root.onLayout + ), + (viewTransitionCancelableChildren = instance)) + : null !== instance && + (instance.push.apply( + instance, viewTransitionCancelableChildren ), - (viewTransitionCancelableChildren = oldName)), + (viewTransitionCancelableChildren = instance)), (viewTransitionContextChanged = - 0 !== (finishedWork.flags & 32) ? !0 : i)); + 0 !== (finishedWork.flags & 32) ? !0 : oldName)); break; default: recursivelyTraverseAfterMutationEffects(root, finishedWork); @@ -13385,6 +13183,8 @@ null === finishedWork.memoizedState && recursivelyTraverseDisappearLayoutEffects(finishedWork); break; + case 30: + safelyDetachRef(finishedWork, finishedWork.return); default: recursivelyTraverseDisappearLayoutEffects(finishedWork); } @@ -13523,6 +13323,14 @@ ); safelyAttachRef(finishedWork, finishedWork.return); break; + case 30: + recursivelyTraverseReappearLayoutEffects( + finishedRoot, + finishedWork, + includeWorkInProgressEffects + ); + safelyAttachRef(finishedWork, finishedWork.return); + break; default: recursivelyTraverseReappearLayoutEffects( finishedRoot, @@ -14535,7 +14343,7 @@ (key = createFiber(30, pendingProps, key, mode)), (key.elementType = REACT_VIEW_TRANSITION_TYPE), (key.lanes = lanes), - (key.stateNode = { autoName: null, paired: null }), + (key.stateNode = { autoName: null, paired: null, ref: null }), key ); default: @@ -14612,73 +14420,324 @@ mode._debugTask = element._debugTask; return mode; } - function createFiberFromFragment(elements, mode, lanes, key) { - elements = createFiber(7, elements, key, mode); - elements.lanes = lanes; - return elements; + function createFiberFromFragment(elements, mode, lanes, key) { + elements = createFiber(7, elements, key, mode); + elements.lanes = lanes; + return elements; + } + function createFiberFromOffscreen(pendingProps, mode, lanes, key) { + pendingProps = createFiber(22, pendingProps, key, mode); + pendingProps.elementType = REACT_OFFSCREEN_TYPE; + pendingProps.lanes = lanes; + var primaryChildInstance = { + _visibility: OffscreenVisible, + _pendingVisibility: OffscreenVisible, + _pendingMarkers: null, + _retryCache: null, + _transitions: null, + _current: null, + detach: function () { + var instance = primaryChildInstance, + fiber = instance._current; + if (null === fiber) + throw Error( + "Calling Offscreen.detach before instance handle has been set." + ); + if (0 === (instance._pendingVisibility & OffscreenDetached)) { + var root = enqueueConcurrentRenderForLane(fiber, 2); + null !== root && + ((instance._pendingVisibility |= OffscreenDetached), + scheduleUpdateOnFiber(root, fiber, 2)); + } + }, + attach: function () { + var instance = primaryChildInstance, + fiber = instance._current; + if (null === fiber) + throw Error( + "Calling Offscreen.detach before instance handle has been set." + ); + if (0 !== (instance._pendingVisibility & OffscreenDetached)) { + var root = enqueueConcurrentRenderForLane(fiber, 2); + null !== root && + ((instance._pendingVisibility &= ~OffscreenDetached), + scheduleUpdateOnFiber(root, fiber, 2)); + } + } + }; + pendingProps.stateNode = primaryChildInstance; + return pendingProps; + } + function createFiberFromText(content, mode, lanes) { + content = createFiber(6, content, null, mode); + content.lanes = lanes; + return content; + } + function createFiberFromPortal(portal, mode, lanes) { + mode = createFiber( + 4, + null !== portal.children ? portal.children : [], + portal.key, + mode + ); + mode.lanes = lanes; + mode.stateNode = { + containerInfo: portal.containerInfo, + pendingChildren: null, + implementation: portal.implementation + }; + return mode; + } + function buildHydrationDiffNode(fiber, distanceFromLeaf) { + if (null === fiber.return) { + if (null === hydrationDiffRootDEV) + hydrationDiffRootDEV = { + fiber: fiber, + children: [], + serverProps: void 0, + serverTail: [], + distanceFromLeaf: distanceFromLeaf + }; + else { + if (hydrationDiffRootDEV.fiber !== fiber) + throw Error( + "Saw multiple hydration diff roots in a pass. This is a bug in React." + ); + hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf && + (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf); + } + return hydrationDiffRootDEV; + } + var siblings = buildHydrationDiffNode( + fiber.return, + distanceFromLeaf + 1 + ).children; + if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber) + return ( + (siblings = siblings[siblings.length - 1]), + siblings.distanceFromLeaf > distanceFromLeaf && + (siblings.distanceFromLeaf = distanceFromLeaf), + siblings + ); + distanceFromLeaf = { + fiber: fiber, + children: [], + serverProps: void 0, + serverTail: [], + distanceFromLeaf: distanceFromLeaf + }; + siblings.push(distanceFromLeaf); + return distanceFromLeaf; + } + function warnNonHydratedInstance(fiber, rejectedCandidate) { + didSuspendOrErrorDEV || + ((fiber = buildHydrationDiffNode(fiber, 0)), + (fiber.serverProps = null), + null !== rejectedCandidate && + ((rejectedCandidate = + describeHydratableInstanceForDevWarnings(rejectedCandidate)), + fiber.serverTail.push(rejectedCandidate))); + } + function throwOnHydrationMismatch(fiber) { + var diff = "", + diffRoot = hydrationDiffRootDEV; + null !== diffRoot && + ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot))); + queueHydrationError( + createCapturedValueAtFiber( + Error( + "Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\nhttps://react.dev/link/hydration-mismatch" + + diff + ), + fiber + ) + ); + throw HydrationMismatchException; + } + function prepareToHydrateHostInstance(fiber) { + var didHydrate = fiber.stateNode; + var type = fiber.type, + props = fiber.memoizedProps; + didHydrate[internalInstanceKey] = fiber; + didHydrate[internalPropsKey] = props; + validatePropertiesInDevelopment(type, props); + switch (type) { + case "dialog": + listenToNonDelegatedEvent("cancel", didHydrate); + listenToNonDelegatedEvent("close", didHydrate); + break; + case "iframe": + case "object": + case "embed": + listenToNonDelegatedEvent("load", didHydrate); + break; + case "video": + case "audio": + for (type = 0; type < mediaEventTypes.length; type++) + listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate); + break; + case "source": + listenToNonDelegatedEvent("error", didHydrate); + break; + case "img": + case "image": + case "link": + listenToNonDelegatedEvent("error", didHydrate); + listenToNonDelegatedEvent("load", didHydrate); + break; + case "details": + listenToNonDelegatedEvent("toggle", didHydrate); + break; + case "input": + checkControlledValueProps("input", props); + listenToNonDelegatedEvent("invalid", didHydrate); + validateInputProps(didHydrate, props); + initInput( + didHydrate, + props.value, + props.defaultValue, + props.checked, + props.defaultChecked, + props.type, + props.name, + !0 + ); + track(didHydrate); + break; + case "option": + validateOptionProps(didHydrate, props); + break; + case "select": + checkControlledValueProps("select", props); + listenToNonDelegatedEvent("invalid", didHydrate); + validateSelectProps(didHydrate, props); + break; + case "textarea": + checkControlledValueProps("textarea", props), + listenToNonDelegatedEvent("invalid", didHydrate), + validateTextareaProps(didHydrate, props), + initTextarea( + didHydrate, + props.value, + props.defaultValue, + props.children + ), + track(didHydrate); + } + type = props.children; + ("string" !== typeof type && + "number" !== typeof type && + "bigint" !== typeof type) || + didHydrate.textContent === "" + type || + !0 === props.suppressHydrationWarning || + checkForUnmatchedText(didHydrate.textContent, type) + ? (null != props.popover && + (listenToNonDelegatedEvent("beforetoggle", didHydrate), + listenToNonDelegatedEvent("toggle", didHydrate)), + null != props.onScroll && + listenToNonDelegatedEvent("scroll", didHydrate), + null != props.onScrollEnd && + listenToNonDelegatedEvent("scrollend", didHydrate), + null != props.onClick && (didHydrate.onclick = noop$2), + (didHydrate = !0)) + : (didHydrate = !1); + didHydrate || throwOnHydrationMismatch(fiber); + } + function popToNextHostParent(fiber) { + for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) + switch (hydrationParentFiber.tag) { + case 3: + case 27: + rootOrSingletonContext = !0; + return; + case 5: + case 13: + rootOrSingletonContext = !1; + return; + default: + hydrationParentFiber = hydrationParentFiber.return; + } + } + function popHydrationState(fiber) { + if (fiber !== hydrationParentFiber) return !1; + if (!isHydrating) + return popToNextHostParent(fiber), (isHydrating = !0), !1; + var shouldClear = !1, + JSCompiler_temp; + if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { + if ((JSCompiler_temp = 5 === fiber.tag)) + (JSCompiler_temp = fiber.type), + (JSCompiler_temp = + !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || + shouldSetTextContent(fiber.type, fiber.memoizedProps)); + JSCompiler_temp = !JSCompiler_temp; + } + JSCompiler_temp && (shouldClear = !0); + if (shouldClear && nextHydratableInstance) { + for (shouldClear = nextHydratableInstance; shouldClear; ) { + JSCompiler_temp = buildHydrationDiffNode(fiber, 0); + var description = + describeHydratableInstanceForDevWarnings(shouldClear); + JSCompiler_temp.serverTail.push(description); + shouldClear = + "Suspense" === description.type + ? getNextHydratableInstanceAfterSuspenseInstance(shouldClear) + : getNextHydratable(shouldClear.nextSibling); + } + throwOnHydrationMismatch(fiber); + } + popToNextHostParent(fiber); + if (13 === fiber.tag) { + fiber = fiber.memoizedState; + fiber = null !== fiber ? fiber.dehydrated : null; + if (!fiber) + throw Error( + "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue." + ); + nextHydratableInstance = + getNextHydratableInstanceAfterSuspenseInstance(fiber); + } else + nextHydratableInstance = hydrationParentFiber + ? getNextHydratable(fiber.stateNode.nextSibling) + : null; + return !0; + } + function resetHydrationState() { + nextHydratableInstance = hydrationParentFiber = null; + didSuspendOrErrorDEV = isHydrating = !1; } - function createFiberFromOffscreen(pendingProps, mode, lanes, key) { - pendingProps = createFiber(22, pendingProps, key, mode); - pendingProps.elementType = REACT_OFFSCREEN_TYPE; - pendingProps.lanes = lanes; - var primaryChildInstance = { - _visibility: OffscreenVisible, - _pendingVisibility: OffscreenVisible, - _pendingMarkers: null, - _retryCache: null, - _transitions: null, - _current: null, - detach: function () { - var instance = primaryChildInstance, - fiber = instance._current; - if (null === fiber) - throw Error( - "Calling Offscreen.detach before instance handle has been set." - ); - if (0 === (instance._pendingVisibility & OffscreenDetached)) { - var root = enqueueConcurrentRenderForLane(fiber, 2); - null !== root && - ((instance._pendingVisibility |= OffscreenDetached), - scheduleUpdateOnFiber(root, fiber, 2)); - } - }, - attach: function () { - var instance = primaryChildInstance, - fiber = instance._current; - if (null === fiber) - throw Error( - "Calling Offscreen.detach before instance handle has been set." - ); - if (0 !== (instance._pendingVisibility & OffscreenDetached)) { - var root = enqueueConcurrentRenderForLane(fiber, 2); - null !== root && - ((instance._pendingVisibility &= ~OffscreenDetached), - scheduleUpdateOnFiber(root, fiber, 2)); - } - } - }; - pendingProps.stateNode = primaryChildInstance; - return pendingProps; + function upgradeHydrationErrorsToRecoverable() { + var queuedErrors = hydrationErrors; + null !== queuedErrors && + (null === workInProgressRootRecoverableErrors + ? (workInProgressRootRecoverableErrors = queuedErrors) + : workInProgressRootRecoverableErrors.push.apply( + workInProgressRootRecoverableErrors, + queuedErrors + ), + (hydrationErrors = null)); + return queuedErrors; } - function createFiberFromText(content, mode, lanes) { - content = createFiber(6, content, null, mode); - content.lanes = lanes; - return content; + function queueHydrationError(error) { + null === hydrationErrors + ? (hydrationErrors = [error]) + : hydrationErrors.push(error); } - function createFiberFromPortal(portal, mode, lanes) { - mode = createFiber( - 4, - null !== portal.children ? portal.children : [], - portal.key, - mode - ); - mode.lanes = lanes; - mode.stateNode = { - containerInfo: portal.containerInfo, - pendingChildren: null, - implementation: portal.implementation - }; - return mode; + function emitPendingHydrationWarnings() { + var diffRoot = hydrationDiffRootDEV; + null !== diffRoot && + ((hydrationDiffRootDEV = null), + (diffRoot = describeDiff(diffRoot)), + console.error( + "A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\n%s%s", + "https://react.dev/link/hydration-mismatch", + diffRoot + )); + } + function getViewTransitionName(props, instance) { + return null != props.name && "auto" !== props.name + ? props.name + : instance.autoName; } function markUpdate(workInProgress) { workInProgress.flags |= 4; @@ -15538,6 +15597,20 @@ null !== suspenseHandler && (suspenseHandler.flags |= 32); return workInProgressDeferredLane; } + function scheduleViewTransitionEvent(fiber, callback) { + if (null != callback) { + var state = fiber.stateNode, + instance = state.ref; + null === instance && + (instance = state.ref = + createViewTransitionInstance( + getViewTransitionName(fiber.memoizedProps, state) + )); + null === pendingViewTransitionEvents && + (pendingViewTransitionEvents = []); + pendingViewTransitionEvents.push(callback.bind(null, instance)); + } + } function scheduleUpdateOnFiber(root, fiber, lane) { isRunningInsertionEffect && console.error("useInsertionEffect must not schedule updates."); @@ -16816,6 +16889,7 @@ pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate; pendingPassiveTransitions = transitions; pendingRecoverableErrors = recoverableErrors; + pendingViewTransitionEvents = null; pendingEffectsRenderEndTime = completedRenderEndTime; pendingSuspendedCommitReason = suspendedCommitReason; recoverableErrors = (lanes & 335544192) === lanes ? 10262 : 10256; @@ -17160,6 +17234,14 @@ (ReactDOMSharedInternals.p = schedulerPriority); } } + recoverableErrors = pendingViewTransitionEvents; + if (null !== recoverableErrors) + for ( + pendingViewTransitionEvents = null, onRecoverableError = 0; + onRecoverableError < recoverableErrors.length; + onRecoverableError++ + ) + (0, recoverableErrors[onRecoverableError])(); 0 !== (pendingEffectsLanes & 3) && flushPendingEffects(); ensureRootIsScheduled(root); suspendedCommitReason = root.pendingLanes; @@ -21091,6 +21173,19 @@ return !1; } } + function ViewTransitionPseudoElement(pseudo, name) { + this._scope = document.documentElement; + this._selector = "::view-transition-" + pseudo + "(" + name + ")"; + } + function createViewTransitionInstance(name) { + return { + name: name, + group: new ViewTransitionPseudoElement("group", name), + imagePair: new ViewTransitionPseudoElement("image-pair", name), + old: new ViewTransitionPseudoElement("old", name), + new: new ViewTransitionPseudoElement("new", name) + }; + } function clearContainerSparingly(container) { var nextNode = container.firstChild; nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling); @@ -24153,6 +24248,52 @@ "abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll scrollEnd toggle touchMove waiting wheel".split( " " ), + CapturedStacks = new WeakMap(), + OffscreenVisible = 1, + OffscreenDetached = 2, + OffscreenPassiveEffectsConnected = 4, + concurrentQueues = [], + concurrentQueuesIndex = 0, + concurrentlyUpdatedLanes = 0, + emptyContextObject = {}; + Object.freeze(emptyContextObject); + var resolveFamily = null, + failedBoundaries = null, + NoMode = 0, + ConcurrentMode = 1, + ProfileMode = 2, + StrictLegacyMode = 8, + StrictEffectsMode = 16, + NoStrictPassiveEffectsMode = 64, + now = Scheduler.unstable_now, + renderStartTime = -0, + commitStartTime = -0, + commitEndTime = -0, + commitErrors = null, + profilerStartTime = -1.1, + profilerEffectDuration = -0, + componentEffectDuration = -0, + componentEffectStartTime = -1.1, + componentEffectEndTime = -1.1, + componentEffectErrors = null, + blockingClampTime = -0, + blockingUpdateTime = -1.1, + blockingEventTime = -1.1, + blockingEventType = null, + blockingEventIsRepeat = !1, + blockingSpawnedUpdate = !1, + blockingSuspendedTime = -1.1, + transitionClampTime = -0, + transitionStartTime = -1.1, + transitionUpdateTime = -1.1, + transitionEventTime = -1.1, + transitionEventType = null, + transitionEventIsRepeat = !1, + transitionSuspendedTime = -1.1, + yieldReason = 0, + yieldStartTime = -1.1, + currentUpdateIsNested = !1, + nestedUpdateScheduled = !1, supportsUserTiming = "undefined" !== typeof performance && "function" === typeof performance.measure, @@ -24217,51 +24358,6 @@ } } }, - OffscreenVisible = 1, - OffscreenDetached = 2, - OffscreenPassiveEffectsConnected = 4, - concurrentQueues = [], - concurrentQueuesIndex = 0, - concurrentlyUpdatedLanes = 0, - emptyContextObject = {}; - Object.freeze(emptyContextObject); - var resolveFamily = null, - failedBoundaries = null, - NoMode = 0, - ConcurrentMode = 1, - ProfileMode = 2, - StrictLegacyMode = 8, - StrictEffectsMode = 16, - NoStrictPassiveEffectsMode = 64, - now = Scheduler.unstable_now, - renderStartTime = -0, - commitStartTime = -0, - commitEndTime = -0, - commitErrors = null, - profilerStartTime = -1.1, - profilerEffectDuration = -0, - componentEffectDuration = -0, - componentEffectStartTime = -1.1, - componentEffectEndTime = -1.1, - componentEffectErrors = null, - blockingClampTime = -0, - blockingUpdateTime = -1.1, - blockingEventTime = -1.1, - blockingEventType = null, - blockingEventIsRepeat = !1, - blockingSpawnedUpdate = !1, - blockingSuspendedTime = -1.1, - transitionClampTime = -0, - transitionStartTime = -1.1, - transitionUpdateTime = -1.1, - transitionEventTime = -1.1, - transitionEventType = null, - transitionEventIsRepeat = !1, - transitionSuspendedTime = -1.1, - yieldReason = 0, - yieldStartTime = -1.1, - currentUpdateIsNested = !1, - nestedUpdateScheduled = !1, valueCursor = createCursor(null); var rendererCursorDEV = createCursor(null); var rendererSigil = {}; @@ -24315,27 +24411,6 @@ _currentRenderer: null, _currentRenderer2: null }, - CapturedStacks = new WeakMap(), - forkStack = [], - forkStackIndex = 0, - treeForkProvider = null, - treeForkCount = 0, - idStack = [], - idStackIndex = 0, - treeContextProvider = null, - treeContextId = 1, - treeContextOverflow = "", - hydrationParentFiber = null, - nextHydratableInstance = null, - isHydrating = !1, - didSuspendOrErrorDEV = !1, - hydrationDiffRootDEV = null, - hydrationErrors = null, - rootOrSingletonContext = !1, - HydrationMismatchException = Error( - "Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React." - ), - globalClientIdCounter$1 = 0, ReactStrictModeWarnings = { recordUnsafeLifecycleWarnings: function () {}, flushPendingUnsafeLifecycleWarnings: function () {}, @@ -24587,6 +24662,15 @@ entangleTransitions(callback, inst, lane)); } }, + forkStack = [], + forkStackIndex = 0, + treeForkProvider = null, + treeForkCount = 0, + idStack = [], + idStackIndex = 0, + treeContextProvider = null, + treeContextId = 1, + treeContextOverflow = "", SuspenseException = Error( "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`." ), @@ -24647,7 +24731,7 @@ localIdCounter = 0, thenableIndexCounter$1 = 0, thenableState$1 = null, - globalClientIdCounter = 0, + globalClientIdCounter$1 = 0, RE_RENDER_LIMIT = 25, currentHookNameInDev = null, hookTypesDev = null, @@ -25965,19 +26049,30 @@ } catch (e$7) { hasBadMapPolyfill = !0; } - var DefaultAsyncDispatcher = { - getCacheForType: function (resourceType) { - var cache = readContext(CacheContext), - cacheForType = cache.data.get(resourceType); - void 0 === cacheForType && - ((cacheForType = resourceType()), - cache.data.set(resourceType, cacheForType)); - return cacheForType; - }, - getOwner: function () { - return current; - } - }; + var hydrationParentFiber = null, + nextHydratableInstance = null, + isHydrating = !1, + didSuspendOrErrorDEV = !1, + hydrationDiffRootDEV = null, + hydrationErrors = null, + rootOrSingletonContext = !1, + HydrationMismatchException = Error( + "Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React." + ), + globalClientIdCounter = 0, + DefaultAsyncDispatcher = { + getCacheForType: function (resourceType) { + var cache = readContext(CacheContext), + cacheForType = cache.data.get(resourceType); + void 0 === cacheForType && + ((cacheForType = resourceType()), + cache.data.set(resourceType, cacheForType)); + return cacheForType; + }, + getOwner: function () { + return current; + } + }; if ("function" === typeof Symbol && Symbol.for) { var symbolFor = Symbol.for; symbolFor("selector.component"); @@ -26051,6 +26146,7 @@ pendingEffectsRenderEndTime = -0, pendingPassiveTransitions = null, pendingRecoverableErrors = null, + pendingViewTransitionEvents = null, pendingSuspendedCommitReason = IMMEDIATE_COMMIT, NESTED_UPDATE_LIMIT = 50, nestedUpdateCount = 0, @@ -26182,8 +26278,37 @@ .catch(handleErrorInNextTick); } : scheduleTimeout, - SUSPENSEY_FONT_TIMEOUT = 500, - NotLoaded = 0, + SUSPENSEY_FONT_TIMEOUT = 500; + ViewTransitionPseudoElement.prototype.animate = function ( + keyframes, + options + ) { + options = + "number" === typeof options + ? { duration: options } + : assign({}, options); + options.pseudoElement = this._selector; + return this._scope.animate(keyframes, options); + }; + ViewTransitionPseudoElement.prototype.getAnimations = function () { + for ( + var scope = this._scope, + selector = this._selector, + animations = scope.getAnimations({ subtree: !0 }), + result = [], + i = 0; + i < animations.length; + i++ + ) { + var effect = animations[i].effect; + null !== effect && + effect.target === scope && + effect.pseudoElement === selector && + result.push(animations[i]); + } + return result; + }; + var NotLoaded = 0, Loaded = 1, Errored = 2, Settled = 3, @@ -26598,11 +26723,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-540efebc-20250112" !== 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.1.0-experimental-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -26639,10 +26764,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.1.0-experimental-056073de-20250109", + version: "19.1.0-experimental-540efebc-20250112", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-056073de-20250109" + reconcilerVersion: "19.1.0-experimental-540efebc-20250112" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -27116,7 +27241,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.1.0-experimental-056073de-20250109"; + exports.version = "19.1.0-experimental-540efebc-20250112"; "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 a87c23b122702..9297340ba2648 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 @@ -2116,19 +2116,19 @@ function getTargetInstForChangeEvent(domEventName, targetInst) { } var isInputEventSupported = !1; if (canUseDOM) { - var JSCompiler_inline_result$jscomp$307; + var JSCompiler_inline_result$jscomp$308; if (canUseDOM) { - var isSupported$jscomp$inline_442 = "oninput" in document; - if (!isSupported$jscomp$inline_442) { - var element$jscomp$inline_443 = document.createElement("div"); - element$jscomp$inline_443.setAttribute("oninput", "return;"); - isSupported$jscomp$inline_442 = - "function" === typeof element$jscomp$inline_443.oninput; + var isSupported$jscomp$inline_447 = "oninput" in document; + if (!isSupported$jscomp$inline_447) { + var element$jscomp$inline_448 = document.createElement("div"); + element$jscomp$inline_448.setAttribute("oninput", "return;"); + isSupported$jscomp$inline_447 = + "function" === typeof element$jscomp$inline_448.oninput; } - JSCompiler_inline_result$jscomp$307 = isSupported$jscomp$inline_442; - } else JSCompiler_inline_result$jscomp$307 = !1; + JSCompiler_inline_result$jscomp$308 = isSupported$jscomp$inline_447; + } else JSCompiler_inline_result$jscomp$308 = !1; isInputEventSupported = - JSCompiler_inline_result$jscomp$307 && + JSCompiler_inline_result$jscomp$308 && (!document.documentMode || 9 < document.documentMode); } function stopWatchingForValueChange() { @@ -2375,6 +2375,240 @@ function registerSimpleEvent(domEventName, reactName) { topLevelEventsToReactNames.set(domEventName, reactName); registerTwoPhaseEvent(reactName, [domEventName]); } +var CapturedStacks = new WeakMap(); +function createCapturedValueAtFiber(value, source) { + if ("object" === typeof value && null !== value) { + var existing = CapturedStacks.get(value); + if (void 0 !== existing) return existing; + source = { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; + CapturedStacks.set(value, source); + return source; + } + return { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; +} +var concurrentQueues = [], + concurrentQueuesIndex = 0, + concurrentlyUpdatedLanes = 0; +function finishQueueingConcurrentUpdates() { + for ( + var endIndex = concurrentQueuesIndex, + i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0); + i < endIndex; + + ) { + var fiber = concurrentQueues[i]; + concurrentQueues[i++] = null; + var queue = concurrentQueues[i]; + concurrentQueues[i++] = null; + var update = concurrentQueues[i]; + concurrentQueues[i++] = null; + var lane = concurrentQueues[i]; + concurrentQueues[i++] = null; + if (null !== queue && null !== update) { + var pending = queue.pending; + null === pending + ? (update.next = update) + : ((update.next = pending.next), (pending.next = update)); + queue.pending = update; + } + 0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane); + } +} +function enqueueUpdate$1(fiber, queue, update, lane) { + concurrentQueues[concurrentQueuesIndex++] = fiber; + concurrentQueues[concurrentQueuesIndex++] = queue; + concurrentQueues[concurrentQueuesIndex++] = update; + concurrentQueues[concurrentQueuesIndex++] = lane; + concurrentlyUpdatedLanes |= lane; + fiber.lanes |= lane; + fiber = fiber.alternate; + null !== fiber && (fiber.lanes |= lane); +} +function enqueueConcurrentHookUpdate(fiber, queue, update, lane) { + enqueueUpdate$1(fiber, queue, update, lane); + return getRootForUpdatedFiber(fiber); +} +function enqueueConcurrentRenderForLane(fiber, lane) { + enqueueUpdate$1(fiber, null, null, lane); + return getRootForUpdatedFiber(fiber); +} +function markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) { + sourceFiber.lanes |= lane; + var alternate = sourceFiber.alternate; + null !== alternate && (alternate.lanes |= lane); + for (var isHidden = !1, parent = sourceFiber.return; null !== parent; ) + (parent.childLanes |= lane), + (alternate = parent.alternate), + null !== alternate && (alternate.childLanes |= lane), + 22 === parent.tag && + ((sourceFiber = parent.stateNode), + null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)), + (sourceFiber = parent), + (parent = parent.return); + isHidden && + null !== update && + 3 === sourceFiber.tag && + ((parent = sourceFiber.stateNode), + (isHidden = 31 - clz32(lane)), + (parent = parent.hiddenUpdates), + (sourceFiber = parent[isHidden]), + null === sourceFiber + ? (parent[isHidden] = [update]) + : sourceFiber.push(update), + (update.lane = lane | 536870912)); +} +function getRootForUpdatedFiber(sourceFiber) { + if (50 < nestedUpdateCount) + throw ( + ((nestedUpdateCount = 0), + (rootWithNestedUpdates = null), + Error(formatProdErrorMessage(185))) + ); + for (var parent = sourceFiber.return; null !== parent; ) + (sourceFiber = parent), (parent = sourceFiber.return); + return 3 === sourceFiber.tag ? sourceFiber.stateNode : null; +} +var emptyContextObject = {}, + now = Scheduler.unstable_now, + renderStartTime = -0, + commitStartTime = -0, + commitEndTime = -0, + commitErrors = null, + profilerStartTime = -1.1, + profilerEffectDuration = -0, + componentEffectDuration = -0, + componentEffectStartTime = -1.1, + componentEffectEndTime = -1.1, + componentEffectErrors = null, + blockingClampTime = -0, + blockingUpdateTime = -1.1, + blockingEventTime = -1.1, + blockingEventType = null, + blockingEventIsRepeat = !1, + blockingSpawnedUpdate = !1, + blockingSuspendedTime = -1.1, + transitionClampTime = -0, + transitionStartTime = -1.1, + transitionUpdateTime = -1.1, + transitionEventTime = -1.1, + transitionEventType = null, + transitionEventIsRepeat = !1, + transitionSuspendedTime = -1.1, + yieldReason = 0, + yieldStartTime = -1.1; +function startUpdateTimerByLane(lane) { + var JSCompiler_temp; + (JSCompiler_temp = 0 !== (lane & 3)) || (JSCompiler_temp = 0 !== (lane & 60)); + if (JSCompiler_temp) + 0 > blockingUpdateTime && + ((blockingUpdateTime = now()), + 0 !== (executionContext & 6) && (blockingSpawnedUpdate = !0), + (lane = resolveEventTimeStamp()), + (JSCompiler_temp = resolveEventType()), + lane !== blockingEventTime || JSCompiler_temp !== blockingEventType + ? (blockingEventIsRepeat = !1) + : null !== JSCompiler_temp && (blockingSpawnedUpdate = !0), + (blockingEventTime = lane), + (blockingEventType = JSCompiler_temp)); + else if ( + 0 !== (lane & 4194176) && + 0 > transitionUpdateTime && + ((transitionUpdateTime = now()), 0 > transitionStartTime) + ) { + lane = resolveEventTimeStamp(); + JSCompiler_temp = resolveEventType(); + if (lane !== transitionEventTime || JSCompiler_temp !== transitionEventType) + transitionEventIsRepeat = !1; + transitionEventTime = lane; + transitionEventType = JSCompiler_temp; + } +} +function pushNestedEffectDurations() { + var prevEffectDuration = profilerEffectDuration; + profilerEffectDuration = 0; + return prevEffectDuration; +} +function popNestedEffectDurations(prevEffectDuration) { + var elapsedTime = profilerEffectDuration; + profilerEffectDuration = prevEffectDuration; + return elapsedTime; +} +function bubbleNestedEffectDurations(prevEffectDuration) { + var elapsedTime = profilerEffectDuration; + profilerEffectDuration += prevEffectDuration; + return elapsedTime; +} +function resetComponentEffectTimers() { + componentEffectEndTime = componentEffectStartTime = -1.1; +} +function pushComponentEffectStart() { + var prevEffectStart = componentEffectStartTime; + componentEffectStartTime = -1.1; + componentEffectDuration = -0; + return prevEffectStart; +} +function popComponentEffectStart(prevEffectStart) { + 0 <= prevEffectStart && (componentEffectStartTime = prevEffectStart); +} +function pushComponentEffectErrors() { + var prevErrors = componentEffectErrors; + componentEffectErrors = null; + return prevErrors; +} +var currentUpdateIsNested = !1, + nestedUpdateScheduled = !1; +function startProfilerTimer(fiber) { + profilerStartTime = now(); + 0 > fiber.actualStartTime && (fiber.actualStartTime = profilerStartTime); +} +function stopProfilerTimerIfRunningAndRecordDuration(fiber) { + if (0 <= profilerStartTime) { + var elapsedTime = now() - profilerStartTime; + fiber.actualDuration += elapsedTime; + fiber.selfBaseDuration = elapsedTime; + profilerStartTime = -1; + } +} +function stopProfilerTimerIfRunningAndRecordIncompleteDuration(fiber) { + if (0 <= profilerStartTime) { + var elapsedTime = now() - profilerStartTime; + fiber.actualDuration += elapsedTime; + profilerStartTime = -1; + } +} +function recordEffectDuration() { + if (0 <= profilerStartTime) { + var endTime = now(), + elapsedTime = endTime - profilerStartTime; + profilerStartTime = -1; + profilerEffectDuration += elapsedTime; + componentEffectDuration += elapsedTime; + componentEffectEndTime = endTime; + } +} +function recordEffectError(errorInfo) { + null === componentEffectErrors && (componentEffectErrors = []); + componentEffectErrors.push(errorInfo); + null === commitErrors && (commitErrors = []); + commitErrors.push(errorInfo); +} +function startEffectTimer() { + profilerStartTime = now(); + 0 > componentEffectStartTime && + (componentEffectStartTime = profilerStartTime); +} +function transferActualDuration(fiber) { + for (var child = fiber.child; child; ) + (fiber.actualDuration += child.actualDuration), (child = child.sibling); +} var supportsUserTiming = "undefined" !== typeof performance && "function" === typeof performance.measure, @@ -2596,221 +2830,6 @@ function logCommitErrored(startTime, endTime, errors, passive) { } }); } -var concurrentQueues = [], - concurrentQueuesIndex = 0, - concurrentlyUpdatedLanes = 0; -function finishQueueingConcurrentUpdates() { - for ( - var endIndex = concurrentQueuesIndex, - i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0); - i < endIndex; - - ) { - var fiber = concurrentQueues[i]; - concurrentQueues[i++] = null; - var queue = concurrentQueues[i]; - concurrentQueues[i++] = null; - var update = concurrentQueues[i]; - concurrentQueues[i++] = null; - var lane = concurrentQueues[i]; - concurrentQueues[i++] = null; - if (null !== queue && null !== update) { - var pending = queue.pending; - null === pending - ? (update.next = update) - : ((update.next = pending.next), (pending.next = update)); - queue.pending = update; - } - 0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane); - } -} -function enqueueUpdate$1(fiber, queue, update, lane) { - concurrentQueues[concurrentQueuesIndex++] = fiber; - concurrentQueues[concurrentQueuesIndex++] = queue; - concurrentQueues[concurrentQueuesIndex++] = update; - concurrentQueues[concurrentQueuesIndex++] = lane; - concurrentlyUpdatedLanes |= lane; - fiber.lanes |= lane; - fiber = fiber.alternate; - null !== fiber && (fiber.lanes |= lane); -} -function enqueueConcurrentHookUpdate(fiber, queue, update, lane) { - enqueueUpdate$1(fiber, queue, update, lane); - return getRootForUpdatedFiber(fiber); -} -function enqueueConcurrentRenderForLane(fiber, lane) { - enqueueUpdate$1(fiber, null, null, lane); - return getRootForUpdatedFiber(fiber); -} -function markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) { - sourceFiber.lanes |= lane; - var alternate = sourceFiber.alternate; - null !== alternate && (alternate.lanes |= lane); - for (var isHidden = !1, parent = sourceFiber.return; null !== parent; ) - (parent.childLanes |= lane), - (alternate = parent.alternate), - null !== alternate && (alternate.childLanes |= lane), - 22 === parent.tag && - ((sourceFiber = parent.stateNode), - null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)), - (sourceFiber = parent), - (parent = parent.return); - isHidden && - null !== update && - 3 === sourceFiber.tag && - ((parent = sourceFiber.stateNode), - (isHidden = 31 - clz32(lane)), - (parent = parent.hiddenUpdates), - (sourceFiber = parent[isHidden]), - null === sourceFiber - ? (parent[isHidden] = [update]) - : sourceFiber.push(update), - (update.lane = lane | 536870912)); -} -function getRootForUpdatedFiber(sourceFiber) { - if (50 < nestedUpdateCount) - throw ( - ((nestedUpdateCount = 0), - (rootWithNestedUpdates = null), - Error(formatProdErrorMessage(185))) - ); - for (var parent = sourceFiber.return; null !== parent; ) - (sourceFiber = parent), (parent = sourceFiber.return); - return 3 === sourceFiber.tag ? sourceFiber.stateNode : null; -} -var emptyContextObject = {}, - now = Scheduler.unstable_now, - renderStartTime = -0, - commitStartTime = -0, - commitEndTime = -0, - commitErrors = null, - profilerStartTime = -1.1, - profilerEffectDuration = -0, - componentEffectDuration = -0, - componentEffectStartTime = -1.1, - componentEffectEndTime = -1.1, - componentEffectErrors = null, - blockingClampTime = -0, - blockingUpdateTime = -1.1, - blockingEventTime = -1.1, - blockingEventType = null, - blockingEventIsRepeat = !1, - blockingSpawnedUpdate = !1, - blockingSuspendedTime = -1.1, - transitionClampTime = -0, - transitionStartTime = -1.1, - transitionUpdateTime = -1.1, - transitionEventTime = -1.1, - transitionEventType = null, - transitionEventIsRepeat = !1, - transitionSuspendedTime = -1.1, - yieldReason = 0, - yieldStartTime = -1.1; -function startUpdateTimerByLane(lane) { - var JSCompiler_temp; - (JSCompiler_temp = 0 !== (lane & 3)) || (JSCompiler_temp = 0 !== (lane & 60)); - if (JSCompiler_temp) - 0 > blockingUpdateTime && - ((blockingUpdateTime = now()), - 0 !== (executionContext & 6) && (blockingSpawnedUpdate = !0), - (lane = resolveEventTimeStamp()), - (JSCompiler_temp = resolveEventType()), - lane !== blockingEventTime || JSCompiler_temp !== blockingEventType - ? (blockingEventIsRepeat = !1) - : null !== JSCompiler_temp && (blockingSpawnedUpdate = !0), - (blockingEventTime = lane), - (blockingEventType = JSCompiler_temp)); - else if ( - 0 !== (lane & 4194176) && - 0 > transitionUpdateTime && - ((transitionUpdateTime = now()), 0 > transitionStartTime) - ) { - lane = resolveEventTimeStamp(); - JSCompiler_temp = resolveEventType(); - if (lane !== transitionEventTime || JSCompiler_temp !== transitionEventType) - transitionEventIsRepeat = !1; - transitionEventTime = lane; - transitionEventType = JSCompiler_temp; - } -} -function pushNestedEffectDurations() { - var prevEffectDuration = profilerEffectDuration; - profilerEffectDuration = 0; - return prevEffectDuration; -} -function popNestedEffectDurations(prevEffectDuration) { - var elapsedTime = profilerEffectDuration; - profilerEffectDuration = prevEffectDuration; - return elapsedTime; -} -function bubbleNestedEffectDurations(prevEffectDuration) { - var elapsedTime = profilerEffectDuration; - profilerEffectDuration += prevEffectDuration; - return elapsedTime; -} -function resetComponentEffectTimers() { - componentEffectEndTime = componentEffectStartTime = -1.1; -} -function pushComponentEffectStart() { - var prevEffectStart = componentEffectStartTime; - componentEffectStartTime = -1.1; - componentEffectDuration = -0; - return prevEffectStart; -} -function popComponentEffectStart(prevEffectStart) { - 0 <= prevEffectStart && (componentEffectStartTime = prevEffectStart); -} -function pushComponentEffectErrors() { - var prevErrors = componentEffectErrors; - componentEffectErrors = null; - return prevErrors; -} -var currentUpdateIsNested = !1, - nestedUpdateScheduled = !1; -function startProfilerTimer(fiber) { - profilerStartTime = now(); - 0 > fiber.actualStartTime && (fiber.actualStartTime = profilerStartTime); -} -function stopProfilerTimerIfRunningAndRecordDuration(fiber) { - if (0 <= profilerStartTime) { - var elapsedTime = now() - profilerStartTime; - fiber.actualDuration += elapsedTime; - fiber.selfBaseDuration = elapsedTime; - profilerStartTime = -1; - } -} -function stopProfilerTimerIfRunningAndRecordIncompleteDuration(fiber) { - if (0 <= profilerStartTime) { - var elapsedTime = now() - profilerStartTime; - fiber.actualDuration += elapsedTime; - profilerStartTime = -1; - } -} -function recordEffectDuration() { - if (0 <= profilerStartTime) { - var endTime = now(), - elapsedTime = endTime - profilerStartTime; - profilerStartTime = -1; - profilerEffectDuration += elapsedTime; - componentEffectDuration += elapsedTime; - componentEffectEndTime = endTime; - } -} -function recordEffectError(errorInfo) { - null === componentEffectErrors && (componentEffectErrors = []); - componentEffectErrors.push(errorInfo); - null === commitErrors && (commitErrors = []); - commitErrors.push(errorInfo); -} -function startEffectTimer() { - profilerStartTime = now(); - 0 > componentEffectStartTime && - (componentEffectStartTime = profilerStartTime); -} -function transferActualDuration(fiber) { - for (var child = fiber.child; child; ) - (fiber.actualDuration += child.actualDuration), (child = child.sibling); -} var valueCursor = createCursor(null), currentlyRenderingFiber$1 = null, lastContextDependency = null; @@ -3179,412 +3198,151 @@ function processUpdateQueue( pendingQueue = firstBaseUpdate; do { var updateLane = pendingQueue.lane & -536870913, - isHiddenUpdate = updateLane !== pendingQueue.lane; - if ( - isHiddenUpdate - ? (workInProgressRootRenderLanes & updateLane) === updateLane - : (renderLanes & updateLane) === updateLane - ) { - 0 !== updateLane && - updateLane === currentEntangledLane && - (didReadFromEntangledAsyncAction = !0); - null !== current && - (current = current.next = - { - lane: 0, - tag: pendingQueue.tag, - payload: pendingQueue.payload, - callback: null, - next: null - }); - a: { - var workInProgress = workInProgress$jscomp$0, - update = pendingQueue; - updateLane = props; - var instance = instance$jscomp$0; - switch (update.tag) { - case 1: - workInProgress = update.payload; - if ("function" === typeof workInProgress) { - newState = workInProgress.call(instance, newState, updateLane); - break a; - } - newState = workInProgress; - break a; - case 3: - workInProgress.flags = (workInProgress.flags & -65537) | 128; - case 0: - workInProgress = update.payload; - updateLane = - "function" === typeof workInProgress - ? workInProgress.call(instance, newState, updateLane) - : workInProgress; - if (null === updateLane || void 0 === updateLane) break a; - newState = assign({}, newState, updateLane); - break a; - case 2: - hasForceUpdate = !0; - } - } - updateLane = pendingQueue.callback; - null !== updateLane && - ((workInProgress$jscomp$0.flags |= 64), - isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192), - (isHiddenUpdate = queue.callbacks), - null === isHiddenUpdate - ? (queue.callbacks = [updateLane]) - : isHiddenUpdate.push(updateLane)); - } else - (isHiddenUpdate = { - lane: updateLane, - tag: pendingQueue.tag, - payload: pendingQueue.payload, - callback: pendingQueue.callback, - next: null - }), - null === current - ? ((firstPendingUpdate = current = isHiddenUpdate), - (lastPendingUpdate = newState)) - : (current = current.next = isHiddenUpdate), - (lastBaseUpdate |= updateLane); - pendingQueue = pendingQueue.next; - if (null === pendingQueue) - if (((pendingQueue = queue.shared.pending), null === pendingQueue)) - break; - else - (isHiddenUpdate = pendingQueue), - (pendingQueue = isHiddenUpdate.next), - (isHiddenUpdate.next = null), - (queue.lastBaseUpdate = isHiddenUpdate), - (queue.shared.pending = null); - } while (1); - null === current && (lastPendingUpdate = newState); - queue.baseState = lastPendingUpdate; - queue.firstBaseUpdate = firstPendingUpdate; - queue.lastBaseUpdate = current; - null === firstBaseUpdate && (queue.shared.lanes = 0); - workInProgressRootSkippedLanes |= lastBaseUpdate; - workInProgress$jscomp$0.lanes = lastBaseUpdate; - workInProgress$jscomp$0.memoizedState = newState; - } -} -function callCallback(callback, context) { - if ("function" !== typeof callback) - throw Error(formatProdErrorMessage(191, callback)); - callback.call(context); -} -function commitCallbacks(updateQueue, context) { - var callbacks = updateQueue.callbacks; - if (null !== callbacks) - for ( - updateQueue.callbacks = null, updateQueue = 0; - updateQueue < callbacks.length; - updateQueue++ - ) - callCallback(callbacks[updateQueue], context); -} -var AbortControllerLocal = - "undefined" !== typeof AbortController - ? AbortController - : function () { - var listeners = [], - signal = (this.signal = { - aborted: !1, - addEventListener: function (type, listener) { - listeners.push(listener); - } - }); - this.abort = function () { - signal.aborted = !0; - listeners.forEach(function (listener) { - return listener(); - }); - }; - }, - scheduleCallback$2 = Scheduler.unstable_scheduleCallback, - NormalPriority = Scheduler.unstable_NormalPriority, - CacheContext = { - $$typeof: REACT_CONTEXT_TYPE, - Consumer: null, - Provider: null, - _currentValue: null, - _currentValue2: null, - _threadCount: 0 - }; -function createCache() { - return { - controller: new AbortControllerLocal(), - data: new Map(), - refCount: 0 - }; -} -function releaseCache(cache) { - cache.refCount--; - 0 === cache.refCount && - scheduleCallback$2(NormalPriority, function () { - cache.controller.abort(); - }); -} -var CapturedStacks = new WeakMap(); -function createCapturedValueAtFiber(value, source) { - if ("object" === typeof value && null !== value) { - var existing = CapturedStacks.get(value); - if (void 0 !== existing) return existing; - source = { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; - CapturedStacks.set(value, source); - return source; - } - return { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; -} -var forkStack = [], - forkStackIndex = 0, - treeForkProvider = null, - treeForkCount = 0, - idStack = [], - idStackIndex = 0, - treeContextProvider = null, - treeContextId = 1, - treeContextOverflow = ""; -function getTreeId() { - var overflow = treeContextOverflow, - idWithLeadingBit = treeContextId; - return ( - (idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))).toString( - 32 - ) + overflow - ); -} -function pushTreeFork(workInProgress, totalChildren) { - forkStack[forkStackIndex++] = treeForkCount; - forkStack[forkStackIndex++] = treeForkProvider; - treeForkProvider = workInProgress; - treeForkCount = totalChildren; -} -function pushTreeId(workInProgress, totalChildren, index) { - idStack[idStackIndex++] = treeContextId; - idStack[idStackIndex++] = treeContextOverflow; - idStack[idStackIndex++] = treeContextProvider; - treeContextProvider = workInProgress; - var baseIdWithLeadingBit = treeContextId; - workInProgress = treeContextOverflow; - var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; - baseIdWithLeadingBit &= ~(1 << baseLength); - index += 1; - var length = 32 - clz32(totalChildren) + baseLength; - if (30 < length) { - var numberOfOverflowBits = baseLength - (baseLength % 5); - length = ( - baseIdWithLeadingBit & - ((1 << numberOfOverflowBits) - 1) - ).toString(32); - baseIdWithLeadingBit >>= numberOfOverflowBits; - baseLength -= numberOfOverflowBits; - treeContextId = - (1 << (32 - clz32(totalChildren) + baseLength)) | - (index << baseLength) | - baseIdWithLeadingBit; - treeContextOverflow = length + workInProgress; - } else - (treeContextId = - (1 << length) | (index << baseLength) | baseIdWithLeadingBit), - (treeContextOverflow = workInProgress); -} -function pushMaterializedTreeId(workInProgress) { - null !== workInProgress.return && - (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0)); -} -function popTreeContext(workInProgress) { - for (; workInProgress === treeForkProvider; ) - (treeForkProvider = forkStack[--forkStackIndex]), - (forkStack[forkStackIndex] = null), - (treeForkCount = forkStack[--forkStackIndex]), - (forkStack[forkStackIndex] = null); - for (; workInProgress === treeContextProvider; ) - (treeContextProvider = idStack[--idStackIndex]), - (idStack[idStackIndex] = null), - (treeContextOverflow = idStack[--idStackIndex]), - (idStack[idStackIndex] = null), - (treeContextId = idStack[--idStackIndex]), - (idStack[idStackIndex] = null); -} -var hydrationParentFiber = null, - nextHydratableInstance = null, - isHydrating = !1, - hydrationErrors = null, - rootOrSingletonContext = !1, - HydrationMismatchException = Error(formatProdErrorMessage(519)); -function throwOnHydrationMismatch(fiber) { - var error = Error(formatProdErrorMessage(418, "")); - queueHydrationError(createCapturedValueAtFiber(error, fiber)); - throw HydrationMismatchException; -} -function prepareToHydrateHostInstance(fiber) { - var instance = fiber.stateNode, - type = fiber.type, - props = fiber.memoizedProps; - instance[internalInstanceKey] = fiber; - instance[internalPropsKey] = props; - switch (type) { - case "dialog": - listenToNonDelegatedEvent("cancel", instance); - listenToNonDelegatedEvent("close", instance); - break; - case "iframe": - case "object": - case "embed": - listenToNonDelegatedEvent("load", instance); - break; - case "video": - case "audio": - for (type = 0; type < mediaEventTypes.length; type++) - listenToNonDelegatedEvent(mediaEventTypes[type], instance); - break; - case "source": - listenToNonDelegatedEvent("error", instance); - break; - case "img": - case "image": - case "link": - listenToNonDelegatedEvent("error", instance); - listenToNonDelegatedEvent("load", instance); - break; - case "details": - listenToNonDelegatedEvent("toggle", instance); - break; - case "input": - listenToNonDelegatedEvent("invalid", instance); - initInput( - instance, - props.value, - props.defaultValue, - props.checked, - props.defaultChecked, - props.type, - props.name, - !0 - ); - track(instance); - break; - case "select": - listenToNonDelegatedEvent("invalid", instance); - break; - case "textarea": - listenToNonDelegatedEvent("invalid", instance), - initTextarea(instance, props.value, props.defaultValue, props.children), - track(instance); - } - type = props.children; - ("string" !== typeof type && - "number" !== typeof type && - "bigint" !== typeof type) || - instance.textContent === "" + type || - !0 === props.suppressHydrationWarning || - checkForUnmatchedText(instance.textContent, type) - ? (null != props.popover && - (listenToNonDelegatedEvent("beforetoggle", instance), - listenToNonDelegatedEvent("toggle", instance)), - null != props.onScroll && listenToNonDelegatedEvent("scroll", instance), - null != props.onScrollEnd && - listenToNonDelegatedEvent("scrollend", instance), - null != props.onClick && (instance.onclick = noop$2), - (instance = !0)) - : (instance = !1); - instance || throwOnHydrationMismatch(fiber); -} -function popToNextHostParent(fiber) { - for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) - switch (hydrationParentFiber.tag) { - case 3: - case 27: - rootOrSingletonContext = !0; - return; - case 5: - case 13: - rootOrSingletonContext = !1; - return; - default: - hydrationParentFiber = hydrationParentFiber.return; - } -} -function popHydrationState(fiber) { - if (fiber !== hydrationParentFiber) return !1; - if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1; - var shouldClear = !1, - JSCompiler_temp; - if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { - if ((JSCompiler_temp = 5 === fiber.tag)) - (JSCompiler_temp = fiber.type), - (JSCompiler_temp = - !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || - shouldSetTextContent(fiber.type, fiber.memoizedProps)); - JSCompiler_temp = !JSCompiler_temp; - } - JSCompiler_temp && (shouldClear = !0); - shouldClear && nextHydratableInstance && throwOnHydrationMismatch(fiber); - popToNextHostParent(fiber); - if (13 === fiber.tag) { - fiber = fiber.memoizedState; - fiber = null !== fiber ? fiber.dehydrated : null; - if (!fiber) throw Error(formatProdErrorMessage(317)); - a: { - fiber = fiber.nextSibling; - for (shouldClear = 0; fiber; ) { - if (8 === fiber.nodeType) - if (((JSCompiler_temp = fiber.data), "/$" === JSCompiler_temp)) { - if (0 === shouldClear) { - nextHydratableInstance = getNextHydratable(fiber.nextSibling); + isHiddenUpdate = updateLane !== pendingQueue.lane; + if ( + isHiddenUpdate + ? (workInProgressRootRenderLanes & updateLane) === updateLane + : (renderLanes & updateLane) === updateLane + ) { + 0 !== updateLane && + updateLane === currentEntangledLane && + (didReadFromEntangledAsyncAction = !0); + null !== current && + (current = current.next = + { + lane: 0, + tag: pendingQueue.tag, + payload: pendingQueue.payload, + callback: null, + next: null + }); + a: { + var workInProgress = workInProgress$jscomp$0, + update = pendingQueue; + updateLane = props; + var instance = instance$jscomp$0; + switch (update.tag) { + case 1: + workInProgress = update.payload; + if ("function" === typeof workInProgress) { + newState = workInProgress.call(instance, newState, updateLane); + break a; + } + newState = workInProgress; break a; - } - shouldClear--; - } else - ("$" !== JSCompiler_temp && - "$!" !== JSCompiler_temp && - "$?" !== JSCompiler_temp) || - shouldClear++; - fiber = fiber.nextSibling; - } - nextHydratableInstance = null; - } - } else - nextHydratableInstance = hydrationParentFiber - ? getNextHydratable(fiber.stateNode.nextSibling) - : null; - return !0; + case 3: + workInProgress.flags = (workInProgress.flags & -65537) | 128; + case 0: + workInProgress = update.payload; + updateLane = + "function" === typeof workInProgress + ? workInProgress.call(instance, newState, updateLane) + : workInProgress; + if (null === updateLane || void 0 === updateLane) break a; + newState = assign({}, newState, updateLane); + break a; + case 2: + hasForceUpdate = !0; + } + } + updateLane = pendingQueue.callback; + null !== updateLane && + ((workInProgress$jscomp$0.flags |= 64), + isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192), + (isHiddenUpdate = queue.callbacks), + null === isHiddenUpdate + ? (queue.callbacks = [updateLane]) + : isHiddenUpdate.push(updateLane)); + } else + (isHiddenUpdate = { + lane: updateLane, + tag: pendingQueue.tag, + payload: pendingQueue.payload, + callback: pendingQueue.callback, + next: null + }), + null === current + ? ((firstPendingUpdate = current = isHiddenUpdate), + (lastPendingUpdate = newState)) + : (current = current.next = isHiddenUpdate), + (lastBaseUpdate |= updateLane); + pendingQueue = pendingQueue.next; + if (null === pendingQueue) + if (((pendingQueue = queue.shared.pending), null === pendingQueue)) + break; + else + (isHiddenUpdate = pendingQueue), + (pendingQueue = isHiddenUpdate.next), + (isHiddenUpdate.next = null), + (queue.lastBaseUpdate = isHiddenUpdate), + (queue.shared.pending = null); + } while (1); + null === current && (lastPendingUpdate = newState); + queue.baseState = lastPendingUpdate; + queue.firstBaseUpdate = firstPendingUpdate; + queue.lastBaseUpdate = current; + null === firstBaseUpdate && (queue.shared.lanes = 0); + workInProgressRootSkippedLanes |= lastBaseUpdate; + workInProgress$jscomp$0.lanes = lastBaseUpdate; + workInProgress$jscomp$0.memoizedState = newState; + } } -function resetHydrationState() { - nextHydratableInstance = hydrationParentFiber = null; - isHydrating = !1; +function callCallback(callback, context) { + if ("function" !== typeof callback) + throw Error(formatProdErrorMessage(191, callback)); + callback.call(context); } -function upgradeHydrationErrorsToRecoverable() { - var queuedErrors = hydrationErrors; - null !== queuedErrors && - (null === workInProgressRootRecoverableErrors - ? (workInProgressRootRecoverableErrors = queuedErrors) - : workInProgressRootRecoverableErrors.push.apply( - workInProgressRootRecoverableErrors, - queuedErrors - ), - (hydrationErrors = null)); - return queuedErrors; +function commitCallbacks(updateQueue, context) { + var callbacks = updateQueue.callbacks; + if (null !== callbacks) + for ( + updateQueue.callbacks = null, updateQueue = 0; + updateQueue < callbacks.length; + updateQueue++ + ) + callCallback(callbacks[updateQueue], context); } -function queueHydrationError(error) { - null === hydrationErrors - ? (hydrationErrors = [error]) - : hydrationErrors.push(error); +var AbortControllerLocal = + "undefined" !== typeof AbortController + ? AbortController + : function () { + var listeners = [], + signal = (this.signal = { + aborted: !1, + addEventListener: function (type, listener) { + listeners.push(listener); + } + }); + this.abort = function () { + signal.aborted = !0; + listeners.forEach(function (listener) { + return listener(); + }); + }; + }, + scheduleCallback$2 = Scheduler.unstable_scheduleCallback, + NormalPriority = Scheduler.unstable_NormalPriority, + CacheContext = { + $$typeof: REACT_CONTEXT_TYPE, + Consumer: null, + Provider: null, + _currentValue: null, + _currentValue2: null, + _threadCount: 0 + }; +function createCache() { + return { + controller: new AbortControllerLocal(), + data: new Map(), + refCount: 0 + }; } -var globalClientIdCounter$1 = 0; -function getViewTransitionName(props, instance) { - return null != props.name && "auto" !== props.name - ? props.name - : instance.autoName; +function releaseCache(cache) { + cache.refCount--; + 0 === cache.refCount && + scheduleCallback$2(NormalPriority, function () { + cache.controller.abort(); + }); } function applyDerivedStateFromProps( workInProgress, @@ -3680,12 +3438,83 @@ function resolveClassComponentProps(Component, baseProps) { } if ((Component = Component.defaultProps)) { newProps === baseProps && (newProps = assign({}, newProps)); - for (var propName$34 in Component) - void 0 === newProps[propName$34] && - (newProps[propName$34] = Component[propName$34]); + for (var propName$32 in Component) + void 0 === newProps[propName$32] && + (newProps[propName$32] = Component[propName$32]); } return newProps; } +var forkStack = [], + forkStackIndex = 0, + treeForkProvider = null, + treeForkCount = 0, + idStack = [], + idStackIndex = 0, + treeContextProvider = null, + treeContextId = 1, + treeContextOverflow = ""; +function getTreeId() { + var overflow = treeContextOverflow, + idWithLeadingBit = treeContextId; + return ( + (idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))).toString( + 32 + ) + overflow + ); +} +function pushTreeFork(workInProgress, totalChildren) { + forkStack[forkStackIndex++] = treeForkCount; + forkStack[forkStackIndex++] = treeForkProvider; + treeForkProvider = workInProgress; + treeForkCount = totalChildren; +} +function pushTreeId(workInProgress, totalChildren, index) { + idStack[idStackIndex++] = treeContextId; + idStack[idStackIndex++] = treeContextOverflow; + idStack[idStackIndex++] = treeContextProvider; + treeContextProvider = workInProgress; + var baseIdWithLeadingBit = treeContextId; + workInProgress = treeContextOverflow; + var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; + baseIdWithLeadingBit &= ~(1 << baseLength); + index += 1; + var length = 32 - clz32(totalChildren) + baseLength; + if (30 < length) { + var numberOfOverflowBits = baseLength - (baseLength % 5); + length = ( + baseIdWithLeadingBit & + ((1 << numberOfOverflowBits) - 1) + ).toString(32); + baseIdWithLeadingBit >>= numberOfOverflowBits; + baseLength -= numberOfOverflowBits; + treeContextId = + (1 << (32 - clz32(totalChildren) + baseLength)) | + (index << baseLength) | + baseIdWithLeadingBit; + treeContextOverflow = length + workInProgress; + } else + (treeContextId = + (1 << length) | (index << baseLength) | baseIdWithLeadingBit), + (treeContextOverflow = workInProgress); +} +function pushMaterializedTreeId(workInProgress) { + null !== workInProgress.return && + (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0)); +} +function popTreeContext(workInProgress) { + for (; workInProgress === treeForkProvider; ) + (treeForkProvider = forkStack[--forkStackIndex]), + (forkStack[forkStackIndex] = null), + (treeForkCount = forkStack[--forkStackIndex]), + (forkStack[forkStackIndex] = null); + for (; workInProgress === treeContextProvider; ) + (treeContextProvider = idStack[--idStackIndex]), + (idStack[idStackIndex] = null), + (treeContextOverflow = idStack[--idStackIndex]), + (idStack[idStackIndex] = null), + (treeContextId = idStack[--idStackIndex]), + (idStack[idStackIndex] = null); +} var SuspenseException = Error(formatProdErrorMessage(460)), SuspenseyCommitException = Error(formatProdErrorMessage(474)), SuspenseActionException = Error(formatProdErrorMessage(542)), @@ -3831,7 +3660,7 @@ var renderLanes = 0, localIdCounter = 0, thenableIndexCounter$1 = 0, thenableState$1 = null, - globalClientIdCounter = 0; + globalClientIdCounter$1 = 0; function throwInvalidHookError() { throw Error(formatProdErrorMessage(321)); } @@ -5127,7 +4956,7 @@ var HooksDispatcherOnMount = { 0 < treeId && (identifierPrefix += "H" + treeId.toString(32)); identifierPrefix += ":"; } else - (treeId = globalClientIdCounter++), + (treeId = globalClientIdCounter$1++), (identifierPrefix = ":" + identifierPrefix + "r" + treeId.toString(32) + ":"); return (hook.memoizedState = identifierPrefix); @@ -7820,14 +7649,17 @@ function beginWork(current, workInProgress, renderLanes) { workInProgress.child ); case 5: - if (null === current && isHydrating) { - if ((init = lazyComponent = nextHydratableInstance)) - (lazyComponent = canHydrateInstance( - lazyComponent, - workInProgress.type, - workInProgress.pendingProps, - rootOrSingletonContext - )), + return ( + null === current && + isHydrating && + ((lazyComponent = nextHydratableInstance), + (init = !lazyComponent) || + ((lazyComponent = canHydrateInstance( + lazyComponent, + workInProgress.type, + workInProgress.pendingProps, + rootOrSingletonContext + )), null !== lazyComponent ? ((workInProgress.stateNode = lazyComponent), (hydrationParentFiber = workInProgress), @@ -7835,50 +7667,55 @@ function beginWork(current, workInProgress, renderLanes) { lazyComponent.firstChild )), (rootOrSingletonContext = !1), - (init = !0)) - : (init = !1); - init || throwOnHydrationMismatch(workInProgress); - } - pushHostContext(workInProgress); - init = workInProgress.type; - nextProps = workInProgress.pendingProps; - nextState = null !== current ? current.memoizedProps : null; - lazyComponent = nextProps.children; - shouldSetTextContent(init, nextProps) - ? (lazyComponent = null) - : null !== nextState && - shouldSetTextContent(init, nextState) && - (workInProgress.flags |= 32); - null !== workInProgress.memoizedState && - ((init = renderWithHooks( - current, - workInProgress, - TransitionAwareHostComponent, - null, - null, - renderLanes - )), - (HostTransitionContext._currentValue = init)); - markRef(current, workInProgress); - reconcileChildren(current, workInProgress, lazyComponent, renderLanes); - return workInProgress.child; - case 6: - if (null === current && isHydrating) { - if ((current = renderLanes = nextHydratableInstance)) - (renderLanes = canHydrateTextInstance( - renderLanes, - workInProgress.pendingProps, - rootOrSingletonContext + (lazyComponent = !0)) + : (lazyComponent = !1), + (init = !lazyComponent)), + init && throwOnHydrationMismatch(workInProgress)), + pushHostContext(workInProgress), + (init = workInProgress.type), + (nextProps = workInProgress.pendingProps), + (nextState = null !== current ? current.memoizedProps : null), + (lazyComponent = nextProps.children), + shouldSetTextContent(init, nextProps) + ? (lazyComponent = null) + : null !== nextState && + shouldSetTextContent(init, nextState) && + (workInProgress.flags |= 32), + null !== workInProgress.memoizedState && + ((init = renderWithHooks( + current, + workInProgress, + TransitionAwareHostComponent, + null, + null, + renderLanes )), + (HostTransitionContext._currentValue = init)), + markRef(current, workInProgress), + reconcileChildren(current, workInProgress, lazyComponent, renderLanes), + workInProgress.child + ); + case 6: + return ( + null === current && + isHydrating && + ((renderLanes = nextHydratableInstance), + (current = !renderLanes) || + ((renderLanes = canHydrateTextInstance( + renderLanes, + workInProgress.pendingProps, + rootOrSingletonContext + )), null !== renderLanes ? ((workInProgress.stateNode = renderLanes), (hydrationParentFiber = workInProgress), (nextHydratableInstance = null), - (current = !0)) - : (current = !1); - current || throwOnHydrationMismatch(workInProgress); - } - return null; + (renderLanes = !0)) + : (renderLanes = !1), + (current = !renderLanes)), + current && throwOnHydrationMismatch(workInProgress)), + null + ); case 13: return updateSuspenseComponent(current, workInProgress, renderLanes); case 4: @@ -8052,7 +7889,7 @@ function beginWork(current, workInProgress, renderLanes) { isHydrating ? ((nextState = getTreeId()), (nextProps = "\u00ab" + nextProps + "T" + nextState + "\u00bb")) - : ((nextState = globalClientIdCounter$1++), + : ((nextState = globalClientIdCounter++), (nextProps = "\u00ab" + nextProps + @@ -8060,6 +7897,9 @@ function beginWork(current, workInProgress, renderLanes) { nextState.toString(32) + "\u00bb")), (init.autoName = nextProps)), + null !== current && current.memoizedProps.name !== lazyComponent.name + ? (workInProgress.flags |= 4194816) + : markRef(current, workInProgress), reconcileChildren( current, workInProgress, @@ -8227,15 +8067,21 @@ function safelyAttachRef(current, nearestMountedAncestor) { try { var ref = current.ref; if (null !== ref) { - var instance = current.stateNode; switch (current.tag) { case 26: case 27: case 5: - var instanceToUse = instance; + var instanceToUse = current.stateNode; + break; + case 30: + var instance = current.stateNode, + name = getViewTransitionName(current.memoizedProps, instance); + if (null === instance.ref || instance.ref.name !== name) + instance.ref = createViewTransitionInstance(name); + instanceToUse = instance.ref; break; default: - instanceToUse = instance; + instanceToUse = current.stateNode; } if ("function" === typeof ref) if (shouldProfile(current)) @@ -8716,11 +8562,12 @@ function restoreViewTransitionOnHostInstances( function commitAppearingPairViewTransitions(placement) { if (0 !== (placement.subtreeFlags & 2097152)) for (placement = placement.child; null !== placement; ) { - if (22 !== placement.tag || null !== placement.memoizedState) { + if (22 !== placement.tag || null !== placement.memoizedState) if ( + (commitAppearingPairViewTransitions(placement), 30 === placement.tag && - 0 !== (placement.flags & 2097152) && - placement.stateNode.paired + 0 !== (placement.flags & 2097152) && + placement.stateNode.paired) ) { var props = placement.memoizedProps; if (null == props.name || "auto" === props.name) @@ -8734,8 +8581,6 @@ function commitAppearingPairViewTransitions(placement) { !1 ) || restoreViewTransitionOnHostInstances(placement.child, !1); } - commitAppearingPairViewTransitions(placement); - } placement = placement.sibling; } } @@ -8751,7 +8596,9 @@ function commitEnterViewTransitions(placement) { null, !1 ) - ? commitAppearingPairViewTransitions(placement) + ? (commitAppearingPairViewTransitions(placement), + placement.stateNode.paired || + scheduleViewTransitionEvent(placement, props.onEnter)) : restoreViewTransitionOnHostInstances(placement.child, !1); } else if (0 !== (placement.subtreeFlags & 33554432)) for (placement = placement.child; null !== placement; ) @@ -8780,7 +8627,8 @@ function commitDeletedPairViewTransitions(deletion, appearingViewTransitions) { null, !1 ) - ? (pair.paired = deletion.stateNode) + ? ((pair.paired = deletion.stateNode), + scheduleViewTransitionEvent(deletion, props.onShare)) : restoreViewTransitionOnHostInstances(deletion.child, !1), appearingViewTransitions.delete(name), 0 === appearingViewTransitions.size) @@ -8798,20 +8646,25 @@ function commitExitViewTransitions(deletion, appearingViewTransitions) { var props = deletion.memoizedProps, name = getViewTransitionName(props, deletion.stateNode); viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - deletion.child, - name, - props.className, - null, - !1 + if ( + applyViewTransitionToHostInstances( + deletion.child, + name, + props.className, + null, + !1 + ) ) - ? null !== appearingViewTransitions && - ((props = appearingViewTransitions.get(name)), - void 0 !== props && - ((props.paired = deletion.stateNode), - appearingViewTransitions.delete(name)), - commitDeletedPairViewTransitions(deletion, appearingViewTransitions)) - : restoreViewTransitionOnHostInstances(deletion.child, !1); + if (null !== appearingViewTransitions) { + var pair = appearingViewTransitions.get(name); + void 0 !== pair + ? ((pair.paired = deletion.stateNode), + appearingViewTransitions.delete(name), + scheduleViewTransitionEvent(deletion, props.onShare)) + : scheduleViewTransitionEvent(deletion, props.onExit); + commitDeletedPairViewTransitions(deletion, appearingViewTransitions); + } else scheduleViewTransitionEvent(deletion, props.onExit); + else restoreViewTransitionOnHostInstances(deletion.child, !1); } else if (0 !== (deletion.subtreeFlags & 33554432)) for (deletion = deletion.child; null !== deletion; ) commitExitViewTransitions(deletion, appearingViewTransitions), @@ -8976,6 +8829,10 @@ function measureNestedViewTransitions(changedParent) { changedParent.child, changedParent.memoizedState, !1 + ), + scheduleViewTransitionEvent( + changedParent, + changedParent.memoizedProps.onLayout )); } else 0 !== (changedParent.subtreeFlags & 33554432) && @@ -9138,6 +8995,10 @@ function commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) { ? safelyAttachRef(finishedWork, finishedWork.return) : safelyDetachRef(finishedWork, finishedWork.return)); break; + case 30: + recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); + flags & 512 && safelyAttachRef(finishedWork, finishedWork.return); + break; default: recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); } @@ -9862,6 +9723,10 @@ function commitMutationEffectsOnFiber(finishedWork, root, lanes) { attachSuspenseRetryListeners(finishedWork, flags))); break; case 30: + flags & 512 && + (offscreenSubtreeWasHidden || + null === current || + safelyDetachRef(current, current.return)); flags = viewTransitionMutationContext; viewTransitionMutationContext = !1; recursivelyTraverseMutationEffects(root, finishedWork, lanes); @@ -9974,12 +9839,12 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { viewTransitionCancelableChildren = null; if (null !== finishedWork) for (var i = 0; i < finishedWork.length; i += 3) { - current = finishedWork[i]; - var oldName = finishedWork[i + 1]; - restoreViewTransitionName(current, finishedWork[i + 2]); - current = current.ownerDocument.documentElement; - null !== current && - current.animate( + var instance = finishedWork[i], + oldName = finishedWork[i + 1]; + restoreViewTransitionName(instance, finishedWork[i + 2]); + instance = instance.ownerDocument.documentElement; + null !== instance && + instance.animate( { opacity: [0, 0], pointerEvents: ["none", "none"] }, { duration: 0, @@ -10025,8 +9890,9 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { break; case 30: 0 !== (finishedWork.subtreeFlags & 8246) && - ((i = viewTransitionContextChanged), - (oldName = viewTransitionCancelableChildren), + ((i = 0 !== (finishedWork.flags & 4)), + (oldName = viewTransitionContextChanged), + (instance = viewTransitionCancelableChildren), (viewTransitionContextChanged = !1), (viewTransitionCancelableChildren = null), recursivelyTraverseAfterMutationEffects(root, finishedWork), @@ -10043,12 +9909,19 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { viewTransitionHostInstanceIdx !== (null === root ? 0 : root.length) && (finishedWork.flags |= 32), 0 !== (finishedWork.flags & 4) && current - ? (viewTransitionCancelableChildren = oldName) - : null !== oldName && - (oldName.push.apply(oldName, viewTransitionCancelableChildren), - (viewTransitionCancelableChildren = oldName)), + ? ((root = finishedWork.memoizedProps), + scheduleViewTransitionEvent( + finishedWork, + i || viewTransitionContextChanged + ? root.onUpdate + : root.onLayout + ), + (viewTransitionCancelableChildren = instance)) + : null !== instance && + (instance.push.apply(instance, viewTransitionCancelableChildren), + (viewTransitionCancelableChildren = instance)), (viewTransitionContextChanged = - 0 !== (finishedWork.flags & 32) ? !0 : i)); + 0 !== (finishedWork.flags & 32) ? !0 : oldName)); break; default: recursivelyTraverseAfterMutationEffects(root, finishedWork); @@ -10095,6 +9968,8 @@ function recursivelyTraverseDisappearLayoutEffects(parentFiber) { null === finishedWork.memoizedState && recursivelyTraverseDisappearLayoutEffects(finishedWork); break; + case 30: + safelyDetachRef(finishedWork, finishedWork.return); default: recursivelyTraverseDisappearLayoutEffects(finishedWork); } @@ -10230,6 +10105,14 @@ function recursivelyTraverseReappearLayoutEffects( ); safelyAttachRef(finishedWork, finishedWork.return); break; + case 30: + recursivelyTraverseReappearLayoutEffects( + finishedRoot, + finishedWork, + includeWorkInProgressEffects + ); + safelyAttachRef(finishedWork, finishedWork.return); + break; default: recursivelyTraverseReappearLayoutEffects( finishedRoot, @@ -11147,7 +11030,7 @@ function createFiberFromTypeAndProps( (type = createFiberImplClass(30, pendingProps, key, mode)), (type.elementType = REACT_VIEW_TRANSITION_TYPE), (type.lanes = lanes), - (type.stateNode = { autoName: null, paired: null }), + (type.stateNode = { autoName: null, paired: null, ref: null }), type ); default: @@ -11243,6 +11126,177 @@ function createFiberFromPortal(portal, mode, lanes) { }; return mode; } +var hydrationParentFiber = null, + nextHydratableInstance = null, + isHydrating = !1, + hydrationErrors = null, + rootOrSingletonContext = !1, + HydrationMismatchException = Error(formatProdErrorMessage(519)); +function throwOnHydrationMismatch(fiber) { + var error = Error(formatProdErrorMessage(418, "")); + queueHydrationError(createCapturedValueAtFiber(error, fiber)); + throw HydrationMismatchException; +} +function prepareToHydrateHostInstance(fiber) { + var instance = fiber.stateNode, + type = fiber.type, + props = fiber.memoizedProps; + instance[internalInstanceKey] = fiber; + instance[internalPropsKey] = props; + switch (type) { + case "dialog": + listenToNonDelegatedEvent("cancel", instance); + listenToNonDelegatedEvent("close", instance); + break; + case "iframe": + case "object": + case "embed": + listenToNonDelegatedEvent("load", instance); + break; + case "video": + case "audio": + for (type = 0; type < mediaEventTypes.length; type++) + listenToNonDelegatedEvent(mediaEventTypes[type], instance); + break; + case "source": + listenToNonDelegatedEvent("error", instance); + break; + case "img": + case "image": + case "link": + listenToNonDelegatedEvent("error", instance); + listenToNonDelegatedEvent("load", instance); + break; + case "details": + listenToNonDelegatedEvent("toggle", instance); + break; + case "input": + listenToNonDelegatedEvent("invalid", instance); + initInput( + instance, + props.value, + props.defaultValue, + props.checked, + props.defaultChecked, + props.type, + props.name, + !0 + ); + track(instance); + break; + case "select": + listenToNonDelegatedEvent("invalid", instance); + break; + case "textarea": + listenToNonDelegatedEvent("invalid", instance), + initTextarea(instance, props.value, props.defaultValue, props.children), + track(instance); + } + type = props.children; + ("string" !== typeof type && + "number" !== typeof type && + "bigint" !== typeof type) || + instance.textContent === "" + type || + !0 === props.suppressHydrationWarning || + checkForUnmatchedText(instance.textContent, type) + ? (null != props.popover && + (listenToNonDelegatedEvent("beforetoggle", instance), + listenToNonDelegatedEvent("toggle", instance)), + null != props.onScroll && listenToNonDelegatedEvent("scroll", instance), + null != props.onScrollEnd && + listenToNonDelegatedEvent("scrollend", instance), + null != props.onClick && (instance.onclick = noop$2), + (instance = !0)) + : (instance = !1); + instance || throwOnHydrationMismatch(fiber); +} +function popToNextHostParent(fiber) { + for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) + switch (hydrationParentFiber.tag) { + case 3: + case 27: + rootOrSingletonContext = !0; + return; + case 5: + case 13: + rootOrSingletonContext = !1; + return; + default: + hydrationParentFiber = hydrationParentFiber.return; + } +} +function popHydrationState(fiber) { + if (fiber !== hydrationParentFiber) return !1; + if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1; + var shouldClear = !1, + JSCompiler_temp; + if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { + if ((JSCompiler_temp = 5 === fiber.tag)) + (JSCompiler_temp = fiber.type), + (JSCompiler_temp = + !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || + shouldSetTextContent(fiber.type, fiber.memoizedProps)); + JSCompiler_temp = !JSCompiler_temp; + } + JSCompiler_temp && (shouldClear = !0); + shouldClear && nextHydratableInstance && throwOnHydrationMismatch(fiber); + popToNextHostParent(fiber); + if (13 === fiber.tag) { + fiber = fiber.memoizedState; + fiber = null !== fiber ? fiber.dehydrated : null; + if (!fiber) throw Error(formatProdErrorMessage(317)); + a: { + fiber = fiber.nextSibling; + for (shouldClear = 0; fiber; ) { + if (8 === fiber.nodeType) + if (((JSCompiler_temp = fiber.data), "/$" === JSCompiler_temp)) { + if (0 === shouldClear) { + nextHydratableInstance = getNextHydratable(fiber.nextSibling); + break a; + } + shouldClear--; + } else + ("$" !== JSCompiler_temp && + "$!" !== JSCompiler_temp && + "$?" !== JSCompiler_temp) || + shouldClear++; + fiber = fiber.nextSibling; + } + nextHydratableInstance = null; + } + } else + nextHydratableInstance = hydrationParentFiber + ? getNextHydratable(fiber.stateNode.nextSibling) + : null; + return !0; +} +function resetHydrationState() { + nextHydratableInstance = hydrationParentFiber = null; + isHydrating = !1; +} +function upgradeHydrationErrorsToRecoverable() { + var queuedErrors = hydrationErrors; + null !== queuedErrors && + (null === workInProgressRootRecoverableErrors + ? (workInProgressRootRecoverableErrors = queuedErrors) + : workInProgressRootRecoverableErrors.push.apply( + workInProgressRootRecoverableErrors, + queuedErrors + ), + (hydrationErrors = null)); + return queuedErrors; +} +function queueHydrationError(error) { + null === hydrationErrors + ? (hydrationErrors = [error]) + : hydrationErrors.push(error); +} +var globalClientIdCounter = 0; +function getViewTransitionName(props, instance) { + return null != props.name && "auto" !== props.name + ? props.name + : instance.autoName; +} function markUpdate(workInProgress) { workInProgress.flags |= 4; } @@ -11987,6 +12041,7 @@ var DefaultAsyncDispatcher = { pendingEffectsRenderEndTime = -0, pendingPassiveTransitions = null, pendingRecoverableErrors = null, + pendingViewTransitionEvents = null, pendingSuspendedCommitReason = 0, nestedUpdateCount = 0, rootWithNestedUpdates = null; @@ -12009,6 +12064,19 @@ function requestDeferredLane() { null !== suspenseHandler && (suspenseHandler.flags |= 32); return workInProgressDeferredLane; } +function scheduleViewTransitionEvent(fiber, callback) { + if (null != callback) { + var state = fiber.stateNode, + instance = state.ref; + null === instance && + (instance = state.ref = + createViewTransitionInstance( + getViewTransitionName(fiber.memoizedProps, state) + )); + null === pendingViewTransitionEvents && (pendingViewTransitionEvents = []); + pendingViewTransitionEvents.push(callback.bind(null, instance)); + } +} function scheduleUpdateOnFiber(root, fiber, lane) { if ( (root === workInProgressRoot && @@ -13109,6 +13177,7 @@ function commitRoot( pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate; pendingPassiveTransitions = transitions; pendingRecoverableErrors = recoverableErrors; + pendingViewTransitionEvents = null; pendingEffectsRenderEndTime = completedRenderEndTime; pendingSuspendedCommitReason = suspendedCommitReason; recoverableErrors = (lanes & 335544192) === lanes ? 10262 : 10256; @@ -13414,6 +13483,14 @@ function flushSpawnedWork() { (ReactDOMSharedInternals.p = schedulerPriority); } } + recoverableErrors = pendingViewTransitionEvents; + if (null !== recoverableErrors) + for ( + pendingViewTransitionEvents = null, onRecoverableError = 0; + onRecoverableError < recoverableErrors.length; + onRecoverableError++ + ) + (0, recoverableErrors[onRecoverableError])(); 0 !== (pendingEffectsLanes & 3) && flushPendingEffects(); ensureRootIsScheduled(root); suspendedCommitReason = root.pendingLanes; @@ -13673,14 +13750,14 @@ function flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) { isFlushingWork = !0; do { var didPerformSomeWork = !1; - for (var root$197 = firstScheduledRoot; null !== root$197; ) { + for (var root$198 = firstScheduledRoot; null !== root$198; ) { if (!onlyLegacy) if (0 !== syncTransitionLanes) { - var pendingLanes = root$197.pendingLanes; + var pendingLanes = root$198.pendingLanes; if (0 === pendingLanes) var JSCompiler_inline_result = 0; else { - var suspendedLanes = root$197.suspendedLanes, - pingedLanes = root$197.pingedLanes; + var suspendedLanes = root$198.suspendedLanes, + pingedLanes = root$198.pingedLanes; JSCompiler_inline_result = (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1; JSCompiler_inline_result &= @@ -13694,20 +13771,20 @@ function flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) { } 0 !== JSCompiler_inline_result && ((didPerformSomeWork = !0), - performSyncWorkOnRoot(root$197, JSCompiler_inline_result)); + performSyncWorkOnRoot(root$198, JSCompiler_inline_result)); } else (JSCompiler_inline_result = workInProgressRootRenderLanes), (JSCompiler_inline_result = getNextLanes( - root$197, - root$197 === workInProgressRoot ? JSCompiler_inline_result : 0, - null !== root$197.cancelPendingCommit || - -1 !== root$197.timeoutHandle + root$198, + root$198 === workInProgressRoot ? JSCompiler_inline_result : 0, + null !== root$198.cancelPendingCommit || + -1 !== root$198.timeoutHandle )), 0 === (JSCompiler_inline_result & 3) || - checkIfRootIsPrerendering(root$197, JSCompiler_inline_result) || + checkIfRootIsPrerendering(root$198, JSCompiler_inline_result) || ((didPerformSomeWork = !0), - performSyncWorkOnRoot(root$197, JSCompiler_inline_result)); - root$197 = root$197.next; + performSyncWorkOnRoot(root$198, JSCompiler_inline_result)); + root$198 = root$198.next; } } while (didPerformSomeWork); isFlushingWork = !1; @@ -13955,20 +14032,20 @@ function extractEvents$1( } } for ( - var i$jscomp$inline_1675 = 0; - i$jscomp$inline_1675 < simpleEventPluginEvents.length; - i$jscomp$inline_1675++ + var i$jscomp$inline_1695 = 0; + i$jscomp$inline_1695 < simpleEventPluginEvents.length; + i$jscomp$inline_1695++ ) { - var eventName$jscomp$inline_1676 = - simpleEventPluginEvents[i$jscomp$inline_1675], - domEventName$jscomp$inline_1677 = - eventName$jscomp$inline_1676.toLowerCase(), - capitalizedEvent$jscomp$inline_1678 = - eventName$jscomp$inline_1676[0].toUpperCase() + - eventName$jscomp$inline_1676.slice(1); + var eventName$jscomp$inline_1696 = + simpleEventPluginEvents[i$jscomp$inline_1695], + domEventName$jscomp$inline_1697 = + eventName$jscomp$inline_1696.toLowerCase(), + capitalizedEvent$jscomp$inline_1698 = + eventName$jscomp$inline_1696[0].toUpperCase() + + eventName$jscomp$inline_1696.slice(1); registerSimpleEvent( - domEventName$jscomp$inline_1677, - "on" + capitalizedEvent$jscomp$inline_1678 + domEventName$jscomp$inline_1697, + "on" + capitalizedEvent$jscomp$inline_1698 ); } registerSimpleEvent(ANIMATION_END, "onAnimationEnd"); @@ -15156,34 +15233,34 @@ function setInitialProperties(domElement, tag, props) { defaultChecked = null; for (hasSrc in props) if (props.hasOwnProperty(hasSrc)) { - var propValue$211 = props[hasSrc]; - if (null != propValue$211) + var propValue$212 = props[hasSrc]; + if (null != propValue$212) switch (hasSrc) { case "name": - hasSrcSet = propValue$211; + hasSrcSet = propValue$212; break; case "type": - propValue = propValue$211; + propValue = propValue$212; break; case "checked": - checked = propValue$211; + checked = propValue$212; break; case "defaultChecked": - defaultChecked = propValue$211; + defaultChecked = propValue$212; break; case "value": - propKey = propValue$211; + propKey = propValue$212; break; case "defaultValue": - defaultValue = propValue$211; + defaultValue = propValue$212; break; case "children": case "dangerouslySetInnerHTML": - if (null != propValue$211) + if (null != propValue$212) throw Error(formatProdErrorMessage(137, tag)); break; default: - setProp(domElement, tag, hasSrc, propValue$211, props, null); + setProp(domElement, tag, hasSrc, propValue$212, props, null); } } initInput( @@ -15320,14 +15397,14 @@ function setInitialProperties(domElement, tag, props) { return; default: if (isCustomElement(tag)) { - for (propValue$211 in props) - props.hasOwnProperty(propValue$211) && - ((hasSrc = props[propValue$211]), + for (propValue$212 in props) + props.hasOwnProperty(propValue$212) && + ((hasSrc = props[propValue$212]), void 0 !== hasSrc && setPropOnCustomElement( domElement, tag, - propValue$211, + propValue$212, hasSrc, props, void 0 @@ -15375,14 +15452,14 @@ function updateProperties(domElement, tag, lastProps, nextProps) { setProp(domElement, tag, propKey, null, nextProps, lastProp); } } - for (var propKey$228 in nextProps) { - var propKey = nextProps[propKey$228]; - lastProp = lastProps[propKey$228]; + for (var propKey$229 in nextProps) { + var propKey = nextProps[propKey$229]; + lastProp = lastProps[propKey$229]; if ( - nextProps.hasOwnProperty(propKey$228) && + nextProps.hasOwnProperty(propKey$229) && (null != propKey || null != lastProp) ) - switch (propKey$228) { + switch (propKey$229) { case "type": propKey !== lastProp && (viewTransitionMutationContext = !0); type = propKey; @@ -15417,7 +15494,7 @@ function updateProperties(domElement, tag, lastProps, nextProps) { setProp( domElement, tag, - propKey$228, + propKey$229, propKey, nextProps, lastProp @@ -15436,7 +15513,7 @@ function updateProperties(domElement, tag, lastProps, nextProps) { ); return; case "select": - propKey = value = defaultValue = propKey$228 = null; + propKey = value = defaultValue = propKey$229 = null; for (type in lastProps) if ( ((lastDefaultValue = lastProps[type]), @@ -15468,7 +15545,7 @@ function updateProperties(domElement, tag, lastProps, nextProps) { switch (name) { case "value": type !== lastDefaultValue && (viewTransitionMutationContext = !0); - propKey$228 = type; + propKey$229 = type; break; case "defaultValue": type !== lastDefaultValue && (viewTransitionMutationContext = !0); @@ -15491,15 +15568,15 @@ function updateProperties(domElement, tag, lastProps, nextProps) { tag = defaultValue; lastProps = value; nextProps = propKey; - null != propKey$228 - ? updateOptions(domElement, !!lastProps, propKey$228, !1) + null != propKey$229 + ? updateOptions(domElement, !!lastProps, propKey$229, !1) : !!nextProps !== !!lastProps && (null != tag ? updateOptions(domElement, !!lastProps, tag, !0) : updateOptions(domElement, !!lastProps, lastProps ? [] : "", !1)); return; case "textarea": - propKey = propKey$228 = null; + propKey = propKey$229 = null; for (defaultValue in lastProps) if ( ((name = lastProps[defaultValue]), @@ -15524,7 +15601,7 @@ function updateProperties(domElement, tag, lastProps, nextProps) { switch (value) { case "value": name !== type && (viewTransitionMutationContext = !0); - propKey$228 = name; + propKey$229 = name; break; case "defaultValue": name !== type && (viewTransitionMutationContext = !0); @@ -15539,17 +15616,17 @@ function updateProperties(domElement, tag, lastProps, nextProps) { name !== type && setProp(domElement, tag, value, name, nextProps, type); } - updateTextarea(domElement, propKey$228, propKey); + updateTextarea(domElement, propKey$229, propKey); return; case "option": - for (var propKey$244 in lastProps) + for (var propKey$245 in lastProps) if ( - ((propKey$228 = lastProps[propKey$244]), - lastProps.hasOwnProperty(propKey$244) && - null != propKey$228 && - !nextProps.hasOwnProperty(propKey$244)) + ((propKey$229 = lastProps[propKey$245]), + lastProps.hasOwnProperty(propKey$245) && + null != propKey$229 && + !nextProps.hasOwnProperty(propKey$245)) ) - switch (propKey$244) { + switch (propKey$245) { case "selected": domElement.selected = !1; break; @@ -15557,34 +15634,34 @@ function updateProperties(domElement, tag, lastProps, nextProps) { setProp( domElement, tag, - propKey$244, + propKey$245, null, nextProps, - propKey$228 + propKey$229 ); } for (lastDefaultValue in nextProps) if ( - ((propKey$228 = nextProps[lastDefaultValue]), + ((propKey$229 = nextProps[lastDefaultValue]), (propKey = lastProps[lastDefaultValue]), nextProps.hasOwnProperty(lastDefaultValue) && - propKey$228 !== propKey && - (null != propKey$228 || null != propKey)) + propKey$229 !== propKey && + (null != propKey$229 || null != propKey)) ) switch (lastDefaultValue) { case "selected": - propKey$228 !== propKey && (viewTransitionMutationContext = !0); + propKey$229 !== propKey && (viewTransitionMutationContext = !0); domElement.selected = - propKey$228 && - "function" !== typeof propKey$228 && - "symbol" !== typeof propKey$228; + propKey$229 && + "function" !== typeof propKey$229 && + "symbol" !== typeof propKey$229; break; default: setProp( domElement, tag, lastDefaultValue, - propKey$228, + propKey$229, nextProps, propKey ); @@ -15605,24 +15682,24 @@ function updateProperties(domElement, tag, lastProps, nextProps) { case "track": case "wbr": case "menuitem": - for (var propKey$249 in lastProps) - (propKey$228 = lastProps[propKey$249]), - lastProps.hasOwnProperty(propKey$249) && - null != propKey$228 && - !nextProps.hasOwnProperty(propKey$249) && - setProp(domElement, tag, propKey$249, null, nextProps, propKey$228); + for (var propKey$250 in lastProps) + (propKey$229 = lastProps[propKey$250]), + lastProps.hasOwnProperty(propKey$250) && + null != propKey$229 && + !nextProps.hasOwnProperty(propKey$250) && + setProp(domElement, tag, propKey$250, null, nextProps, propKey$229); for (checked in nextProps) if ( - ((propKey$228 = nextProps[checked]), + ((propKey$229 = nextProps[checked]), (propKey = lastProps[checked]), nextProps.hasOwnProperty(checked) && - propKey$228 !== propKey && - (null != propKey$228 || null != propKey)) + propKey$229 !== propKey && + (null != propKey$229 || null != propKey)) ) switch (checked) { case "children": case "dangerouslySetInnerHTML": - if (null != propKey$228) + if (null != propKey$229) throw Error(formatProdErrorMessage(137, tag)); break; default: @@ -15630,7 +15707,7 @@ function updateProperties(domElement, tag, lastProps, nextProps) { domElement, tag, checked, - propKey$228, + propKey$229, nextProps, propKey ); @@ -15638,49 +15715,49 @@ function updateProperties(domElement, tag, lastProps, nextProps) { return; default: if (isCustomElement(tag)) { - for (var propKey$254 in lastProps) - (propKey$228 = lastProps[propKey$254]), - lastProps.hasOwnProperty(propKey$254) && - void 0 !== propKey$228 && - !nextProps.hasOwnProperty(propKey$254) && + for (var propKey$255 in lastProps) + (propKey$229 = lastProps[propKey$255]), + lastProps.hasOwnProperty(propKey$255) && + void 0 !== propKey$229 && + !nextProps.hasOwnProperty(propKey$255) && setPropOnCustomElement( domElement, tag, - propKey$254, + propKey$255, void 0, nextProps, - propKey$228 + propKey$229 ); for (defaultChecked in nextProps) - (propKey$228 = nextProps[defaultChecked]), + (propKey$229 = nextProps[defaultChecked]), (propKey = lastProps[defaultChecked]), !nextProps.hasOwnProperty(defaultChecked) || - propKey$228 === propKey || - (void 0 === propKey$228 && void 0 === propKey) || + propKey$229 === propKey || + (void 0 === propKey$229 && void 0 === propKey) || setPropOnCustomElement( domElement, tag, defaultChecked, - propKey$228, + propKey$229, nextProps, propKey ); return; } } - for (var propKey$259 in lastProps) - (propKey$228 = lastProps[propKey$259]), - lastProps.hasOwnProperty(propKey$259) && - null != propKey$228 && - !nextProps.hasOwnProperty(propKey$259) && - setProp(domElement, tag, propKey$259, null, nextProps, propKey$228); + for (var propKey$260 in lastProps) + (propKey$229 = lastProps[propKey$260]), + lastProps.hasOwnProperty(propKey$260) && + null != propKey$229 && + !nextProps.hasOwnProperty(propKey$260) && + setProp(domElement, tag, propKey$260, null, nextProps, propKey$229); for (lastProp in nextProps) - (propKey$228 = nextProps[lastProp]), + (propKey$229 = nextProps[lastProp]), (propKey = lastProps[lastProp]), !nextProps.hasOwnProperty(lastProp) || - propKey$228 === propKey || - (null == propKey$228 && null == propKey) || - setProp(domElement, tag, lastProp, propKey$228, nextProps, propKey); + propKey$229 === propKey || + (null == propKey$229 && null == propKey) || + setProp(domElement, tag, lastProp, propKey$229, nextProps, propKey); } var eventsEnabled = null, selectionInformation = null; @@ -15888,6 +15965,43 @@ function startViewTransition( return !1; } } +function ViewTransitionPseudoElement(pseudo, name) { + this._scope = document.documentElement; + this._selector = "::view-transition-" + pseudo + "(" + name + ")"; +} +ViewTransitionPseudoElement.prototype.animate = function (keyframes, options) { + options = + "number" === typeof options ? { duration: options } : assign({}, options); + options.pseudoElement = this._selector; + return this._scope.animate(keyframes, options); +}; +ViewTransitionPseudoElement.prototype.getAnimations = function () { + for ( + var scope = this._scope, + selector = this._selector, + animations = scope.getAnimations({ subtree: !0 }), + result = [], + i = 0; + i < animations.length; + i++ + ) { + var effect = animations[i].effect; + null !== effect && + effect.target === scope && + effect.pseudoElement === selector && + result.push(animations[i]); + } + return result; +}; +function createViewTransitionInstance(name) { + return { + name: name, + group: new ViewTransitionPseudoElement("group", name), + imagePair: new ViewTransitionPseudoElement("image-pair", name), + old: new ViewTransitionPseudoElement("old", name), + new: new ViewTransitionPseudoElement("new", name) + }; +} function clearContainerSparingly(container) { var nextNode = container.firstChild; nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling); @@ -16360,26 +16474,26 @@ function getResource(type, currentProps, pendingProps, currentResource) { "string" === typeof pendingProps.precedence ) { type = getStyleKey(pendingProps.href); - var styles$267 = getResourcesFromRoot( + var styles$268 = getResourcesFromRoot( JSCompiler_inline_result ).hoistableStyles, - resource$268 = styles$267.get(type); - resource$268 || + resource$269 = styles$268.get(type); + resource$269 || ((JSCompiler_inline_result = JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result), - (resource$268 = { + (resource$269 = { type: "stylesheet", instance: null, count: 0, state: { loading: 0, preload: null } }), - styles$267.set(type, resource$268), - (styles$267 = JSCompiler_inline_result.querySelector( + styles$268.set(type, resource$269), + (styles$268 = JSCompiler_inline_result.querySelector( getStylesheetSelectorFromKey(type) )) && - !styles$267._p && - ((resource$268.instance = styles$267), - (resource$268.state.loading = 5)), + !styles$268._p && + ((resource$269.instance = styles$268), + (resource$269.state.loading = 5)), preloadPropsMap.has(type) || ((pendingProps = { rel: "preload", @@ -16392,16 +16506,16 @@ function getResource(type, currentProps, pendingProps, currentResource) { referrerPolicy: pendingProps.referrerPolicy }), preloadPropsMap.set(type, pendingProps), - styles$267 || + styles$268 || preloadStylesheet( JSCompiler_inline_result, type, pendingProps, - resource$268.state + resource$269.state ))); if (currentProps && null === currentResource) throw Error(formatProdErrorMessage(528, "")); - return resource$268; + return resource$269; } if (currentProps && null !== currentResource) throw Error(formatProdErrorMessage(529, "")); @@ -16498,37 +16612,37 @@ function acquireResource(hoistableRoot, resource, props) { return (resource.instance = instance); case "stylesheet": styleProps = getStyleKey(props.href); - var instance$273 = hoistableRoot.querySelector( + var instance$274 = hoistableRoot.querySelector( getStylesheetSelectorFromKey(styleProps) ); - if (instance$273) + if (instance$274) return ( (resource.state.loading |= 4), - (resource.instance = instance$273), - markNodeAsHoistable(instance$273), - instance$273 + (resource.instance = instance$274), + markNodeAsHoistable(instance$274), + instance$274 ); instance = stylesheetPropsFromRawProps(props); (styleProps = preloadPropsMap.get(styleProps)) && adoptPreloadPropsForStylesheet(instance, styleProps); - instance$273 = ( + instance$274 = ( hoistableRoot.ownerDocument || hoistableRoot ).createElement("link"); - markNodeAsHoistable(instance$273); - var linkInstance = instance$273; + markNodeAsHoistable(instance$274); + var linkInstance = instance$274; linkInstance._p = new Promise(function (resolve, reject) { linkInstance.onload = resolve; linkInstance.onerror = reject; }); - setInitialProperties(instance$273, "link", instance); + setInitialProperties(instance$274, "link", instance); resource.state.loading |= 4; - insertStylesheet(instance$273, props.precedence, hoistableRoot); - return (resource.instance = instance$273); + insertStylesheet(instance$274, props.precedence, hoistableRoot); + return (resource.instance = instance$274); case "script": - instance$273 = getScriptKey(props.src); + instance$274 = getScriptKey(props.src); if ( (styleProps = hoistableRoot.querySelector( - getScriptSelectorFromKey(instance$273) + getScriptSelectorFromKey(instance$274) )) ) return ( @@ -16537,7 +16651,7 @@ function acquireResource(hoistableRoot, resource, props) { styleProps ); instance = props; - if ((styleProps = preloadPropsMap.get(instance$273))) + if ((styleProps = preloadPropsMap.get(instance$274))) (instance = assign({}, props)), adoptPreloadPropsForScript(instance, styleProps); hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot; @@ -17573,16 +17687,16 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { 0 === i && attemptExplicitHydrationTarget(target); } }; -var isomorphicReactPackageVersion$jscomp$inline_1922 = React.version; +var isomorphicReactPackageVersion$jscomp$inline_1942 = React.version; if ( - "19.1.0-experimental-056073de-20250109" !== - isomorphicReactPackageVersion$jscomp$inline_1922 + "19.1.0-experimental-540efebc-20250112" !== + isomorphicReactPackageVersion$jscomp$inline_1942 ) throw Error( formatProdErrorMessage( 527, - isomorphicReactPackageVersion$jscomp$inline_1922, - "19.1.0-experimental-056073de-20250109" + isomorphicReactPackageVersion$jscomp$inline_1942, + "19.1.0-experimental-540efebc-20250112" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -17602,24 +17716,24 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { null === componentOrElement ? null : componentOrElement.stateNode; return componentOrElement; }; -var internals$jscomp$inline_2436 = { +var internals$jscomp$inline_2464 = { bundleType: 0, - version: "19.1.0-experimental-056073de-20250109", + version: "19.1.0-experimental-540efebc-20250112", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-056073de-20250109" + reconcilerVersion: "19.1.0-experimental-540efebc-20250112" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_2437 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_2465 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_2437.isDisabled && - hook$jscomp$inline_2437.supportsFiber + !hook$jscomp$inline_2465.isDisabled && + hook$jscomp$inline_2465.supportsFiber ) try { - (rendererID = hook$jscomp$inline_2437.inject( - internals$jscomp$inline_2436 + (rendererID = hook$jscomp$inline_2465.inject( + internals$jscomp$inline_2464 )), - (injectedHook = hook$jscomp$inline_2437); + (injectedHook = hook$jscomp$inline_2465); } catch (err) {} } function noop() {} @@ -17874,7 +17988,7 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.1.0-experimental-056073de-20250109"; +exports.version = "19.1.0-experimental-540efebc-20250112"; "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 3c3d1ca8f9bd8..510214b1a7258 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 @@ -9291,5 +9291,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.1.0-experimental-056073de-20250109"; + exports.version = "19.1.0-experimental-540efebc-20250112"; })(); 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 f28522b417bdc..3e815d8116270 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 @@ -6056,4 +6056,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.1.0-experimental-056073de-20250109"; +exports.version = "19.1.0-experimental-540efebc-20250112"; 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 403b300cb698c..90de5da07ad92 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 @@ -9291,5 +9291,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.1.0-experimental-056073de-20250109"; + exports.version = "19.1.0-experimental-540efebc-20250112"; })(); 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 2748de4bc597a..0da80f89093b5 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 @@ -6147,4 +6147,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.1.0-experimental-056073de-20250109"; +exports.version = "19.1.0-experimental-540efebc-20250112"; 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 741dfe110e976..a8859317497c4 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 @@ -8201,11 +8201,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-540efebc-20250112" !== 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.1.0-experimental-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react-experimental"), @@ -9973,5 +9973,5 @@ startWork(request); }); }; - exports.version = "19.1.0-experimental-056073de-20250109"; + exports.version = "19.1.0-experimental-540efebc-20250112"; })(); 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 332d0757cc28f..ec577991325be 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 @@ -6584,12 +6584,12 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-540efebc-20250112" !== isomorphicReactPackageVersion) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion, - "19.1.0-experimental-056073de-20250109" + "19.1.0-experimental-540efebc-20250112" ) ); } @@ -6844,4 +6844,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.1.0-experimental-056073de-20250109"; +exports.version = "19.1.0-experimental-540efebc-20250112"; 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 da430b49e1b12..8842c522cdd06 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 @@ -6065,13 +6065,13 @@ function addToReplayParent(node, parentKeyPath, trackedPostpones) { } var isomorphicReactPackageVersion$jscomp$inline_777 = React.version; if ( - "19.1.0-experimental-056073de-20250109" !== + "19.1.0-experimental-540efebc-20250112" !== isomorphicReactPackageVersion$jscomp$inline_777 ) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion$jscomp$inline_777 + - "\n - react-dom: 19.1.0-experimental-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); exports.renderToReadableStream = function (children, options) { return new Promise(function (resolve, reject) { @@ -6162,4 +6162,4 @@ exports.renderToReadableStream = function (children, options) { startWork(request); }); }; -exports.version = "19.1.0-experimental-056073de-20250109"; +exports.version = "19.1.0-experimental-540efebc-20250112"; 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 5883f8e06e224..adbee19a21fb3 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 @@ -8224,11 +8224,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-540efebc-20250112" !== 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.1.0-experimental-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react-experimental"), @@ -10003,5 +10003,5 @@ const setTimeoutOrImmediate = ? globalThis['set' + 'Immediate'] : setTimeout; - exports.version = "19.1.0-experimental-056073de-20250109"; + exports.version = "19.1.0-experimental-540efebc-20250112"; })(); 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 0c5e636956c70..e9f9fc61ef29f 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 @@ -6690,11 +6690,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-540efebc-20250112" !== 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.1.0-experimental-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -6959,4 +6959,4 @@ const setTimeoutOrImmediate = ? globalThis['set' + 'Immediate'] : setTimeout; -exports.version = "19.1.0-experimental-056073de-20250109"; +exports.version = "19.1.0-experimental-540efebc-20250112"; 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 c903ec0886502..4979a39a7bd48 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 @@ -8088,11 +8088,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-540efebc-20250112" !== 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.1.0-experimental-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); } function createDrainHandler(destination, request) { @@ -9853,5 +9853,5 @@ } }; }; - exports.version = "19.1.0-experimental-056073de-20250109"; + exports.version = "19.1.0-experimental-540efebc-20250112"; })(); 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 9d2b809eaa5dc..0f495975cac2e 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 @@ -6569,11 +6569,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-540efebc-20250112" !== 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.1.0-experimental-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -6824,4 +6824,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.1.0-experimental-056073de-20250109"; +exports.version = "19.1.0-experimental-540efebc-20250112"; 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 614358557f407..2a25b699f883c 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 @@ -3733,242 +3733,23 @@ topLevelEventsToReactNames.set(domEventName, reactName); registerTwoPhaseEvent(reactName, [domEventName]); } - function setCurrentTrackFromLanes(lanes) { - reusableLaneDevToolDetails.track = - lanes & 63 - ? "Blocking" - : lanes & 4194240 - ? "Transition" - : lanes & 62914560 - ? "Suspense" - : lanes & 2080374784 - ? "Idle" - : "Other"; - } - function logComponentRender(fiber, startTime, endTime, wasHydrated) { - var name = getComponentNameFromFiber(fiber); - if (null !== name && supportsUserTiming) { - var selfTime = fiber.actualDuration; - if (null === fiber.alternate || fiber.alternate.child !== fiber.child) - for (fiber = fiber.child; null !== fiber; fiber = fiber.sibling) - selfTime -= fiber.actualDuration; - reusableComponentDevToolDetails.color = - 0.5 > selfTime - ? wasHydrated - ? "tertiary-light" - : "primary-light" - : 10 > selfTime - ? wasHydrated - ? "tertiary" - : "primary" - : 100 > selfTime - ? wasHydrated - ? "tertiary-dark" - : "primary-dark" - : "error"; - reusableComponentOptions.start = startTime; - reusableComponentOptions.end = endTime; - performance.measure(name, reusableComponentOptions); - } - } - function logComponentErrored(fiber, startTime, endTime, errors) { - if (supportsUserTiming) { - var name = getComponentNameFromFiber(fiber); - if (null !== name) { - for (var properties = [], i = 0; i < errors.length; i++) { - var error = errors[i].value; - properties.push([ - "Error", - "object" === typeof error && - null !== error && - "string" === typeof error.message - ? String(error.message) - : String(error) - ]); - } - performance.measure(name, { - start: startTime, - end: endTime, - detail: { - devtools: { - color: "error", - track: COMPONENTS_TRACK, - tooltipText: - 13 === fiber.tag - ? "Hydration failed" - : "Error boundary caught an error", - properties: properties - } - } - }); - } - } - } - function logComponentEffect(fiber, startTime, endTime, selfTime, errors) { - if (null !== errors) { - if ( - supportsUserTiming && - ((selfTime = getComponentNameFromFiber(fiber)), null !== selfTime) - ) { - fiber = []; - for (var i = 0; i < errors.length; i++) { - var error = errors[i].value; - fiber.push([ - "Error", - "object" === typeof error && - null !== error && - "string" === typeof error.message - ? String(error.message) - : String(error) - ]); - } - performance.measure(selfTime, { - start: startTime, - end: endTime, - detail: { - devtools: { - color: "error", - track: COMPONENTS_TRACK, - tooltipText: "A lifecycle or effect errored", - properties: fiber - } - } - }); - } - } else - (errors = getComponentNameFromFiber(fiber)), - null !== errors && - supportsUserTiming && - ((reusableComponentDevToolDetails.color = - 1 > selfTime - ? "secondary-light" - : 100 > selfTime - ? "secondary" - : 500 > selfTime - ? "secondary-dark" - : "error"), - (reusableComponentOptions.start = startTime), - (reusableComponentOptions.end = endTime), - performance.measure(errors, reusableComponentOptions)); - } - function logRenderPhase(startTime, endTime, lanes) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = - (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure( - (lanes & 536870912) === lanes - ? "Prepared" - : (lanes & 201326677) === lanes - ? "Hydrated" - : "Render", - reusableLaneOptions - )); - } - function logSuspendedRenderPhase(startTime, endTime, lanes) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = - (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure("Prewarm", reusableLaneOptions)); - } - function logSuspendedWithDelayPhase(startTime, endTime, lanes) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = - (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure("Suspended", reusableLaneOptions)); - } - function logRecoveredRenderPhase( - startTime, - endTime, - lanes, - recoverableErrors, - hydrationFailed - ) { - if (supportsUserTiming) { - lanes = []; - for (var i = 0; i < recoverableErrors.length; i++) { - var error = recoverableErrors[i].value; - lanes.push([ - "Recoverable Error", - "object" === typeof error && - null !== error && - "string" === typeof error.message - ? String(error.message) - : String(error) - ]); - } - performance.measure("Recovered", { - start: startTime, - end: endTime, - detail: { - devtools: { - color: "primary-dark", - track: reusableLaneDevToolDetails.track, - trackGroup: LANES_TRACK_GROUP, - tooltipText: hydrationFailed - ? "Hydration Failed" - : "Recovered after Error", - properties: lanes - } - } - }); - } - } - function logErroredRenderPhase(startTime, endTime) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = "error"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure("Errored", reusableLaneOptions)); - } - function logSuspenseThrottlePhase(startTime, endTime) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = "secondary-light"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure("Throttled", reusableLaneOptions)); - } - function logSuspendedCommitPhase(startTime, endTime) { - supportsUserTiming && - ((reusableLaneDevToolDetails.color = "secondary-light"), - (reusableLaneOptions.start = startTime), - (reusableLaneOptions.end = endTime), - performance.measure("Suspended", reusableLaneOptions)); - } - function logCommitErrored(startTime, endTime, errors, passive) { - if (supportsUserTiming) { - for (var properties = [], i = 0; i < errors.length; i++) { - var error = errors[i].value; - properties.push([ - "Error", - "object" === typeof error && - null !== error && - "string" === typeof error.message - ? String(error.message) - : String(error) - ]); - } - performance.measure("Errored", { - start: startTime, - end: endTime, - detail: { - devtools: { - color: "error", - track: reusableLaneDevToolDetails.track, - trackGroup: LANES_TRACK_GROUP, - tooltipText: passive - ? "Remaining Effects Errored" - : "Commit Errored", - properties: properties - } - } - }); + function createCapturedValueAtFiber(value, source) { + if ("object" === typeof value && null !== value) { + var existing = CapturedStacks.get(value); + if (void 0 !== existing) return existing; + source = { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; + CapturedStacks.set(value, source); + return source; } + return { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; } function finishQueueingConcurrentUpdates() { for ( @@ -4295,11 +4076,248 @@ for (var child = fiber.child; child; ) (fiber.actualDuration += child.actualDuration), (child = child.sibling); } - function resetContextDependencies() { - lastContextDependency = currentlyRenderingFiber$1 = null; - isDisallowedContextReadInDEV = !1; - } - function pushProvider(providerFiber, context, nextValue) { + function setCurrentTrackFromLanes(lanes) { + reusableLaneDevToolDetails.track = + lanes & 63 + ? "Blocking" + : lanes & 4194240 + ? "Transition" + : lanes & 62914560 + ? "Suspense" + : lanes & 2080374784 + ? "Idle" + : "Other"; + } + function logComponentRender(fiber, startTime, endTime, wasHydrated) { + var name = getComponentNameFromFiber(fiber); + if (null !== name && supportsUserTiming) { + var selfTime = fiber.actualDuration; + if (null === fiber.alternate || fiber.alternate.child !== fiber.child) + for (fiber = fiber.child; null !== fiber; fiber = fiber.sibling) + selfTime -= fiber.actualDuration; + reusableComponentDevToolDetails.color = + 0.5 > selfTime + ? wasHydrated + ? "tertiary-light" + : "primary-light" + : 10 > selfTime + ? wasHydrated + ? "tertiary" + : "primary" + : 100 > selfTime + ? wasHydrated + ? "tertiary-dark" + : "primary-dark" + : "error"; + reusableComponentOptions.start = startTime; + reusableComponentOptions.end = endTime; + performance.measure(name, reusableComponentOptions); + } + } + function logComponentErrored(fiber, startTime, endTime, errors) { + if (supportsUserTiming) { + var name = getComponentNameFromFiber(fiber); + if (null !== name) { + for (var properties = [], i = 0; i < errors.length; i++) { + var error = errors[i].value; + properties.push([ + "Error", + "object" === typeof error && + null !== error && + "string" === typeof error.message + ? String(error.message) + : String(error) + ]); + } + performance.measure(name, { + start: startTime, + end: endTime, + detail: { + devtools: { + color: "error", + track: COMPONENTS_TRACK, + tooltipText: + 13 === fiber.tag + ? "Hydration failed" + : "Error boundary caught an error", + properties: properties + } + } + }); + } + } + } + function logComponentEffect(fiber, startTime, endTime, selfTime, errors) { + if (null !== errors) { + if ( + supportsUserTiming && + ((selfTime = getComponentNameFromFiber(fiber)), null !== selfTime) + ) { + fiber = []; + for (var i = 0; i < errors.length; i++) { + var error = errors[i].value; + fiber.push([ + "Error", + "object" === typeof error && + null !== error && + "string" === typeof error.message + ? String(error.message) + : String(error) + ]); + } + performance.measure(selfTime, { + start: startTime, + end: endTime, + detail: { + devtools: { + color: "error", + track: COMPONENTS_TRACK, + tooltipText: "A lifecycle or effect errored", + properties: fiber + } + } + }); + } + } else + (errors = getComponentNameFromFiber(fiber)), + null !== errors && + supportsUserTiming && + ((reusableComponentDevToolDetails.color = + 1 > selfTime + ? "secondary-light" + : 100 > selfTime + ? "secondary" + : 500 > selfTime + ? "secondary-dark" + : "error"), + (reusableComponentOptions.start = startTime), + (reusableComponentOptions.end = endTime), + performance.measure(errors, reusableComponentOptions)); + } + function logRenderPhase(startTime, endTime, lanes) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = + (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure( + (lanes & 536870912) === lanes + ? "Prepared" + : (lanes & 201326677) === lanes + ? "Hydrated" + : "Render", + reusableLaneOptions + )); + } + function logSuspendedRenderPhase(startTime, endTime, lanes) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = + (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure("Prewarm", reusableLaneOptions)); + } + function logSuspendedWithDelayPhase(startTime, endTime, lanes) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = + (lanes & 738197589) === lanes ? "tertiary-dark" : "primary-dark"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure("Suspended", reusableLaneOptions)); + } + function logRecoveredRenderPhase( + startTime, + endTime, + lanes, + recoverableErrors, + hydrationFailed + ) { + if (supportsUserTiming) { + lanes = []; + for (var i = 0; i < recoverableErrors.length; i++) { + var error = recoverableErrors[i].value; + lanes.push([ + "Recoverable Error", + "object" === typeof error && + null !== error && + "string" === typeof error.message + ? String(error.message) + : String(error) + ]); + } + performance.measure("Recovered", { + start: startTime, + end: endTime, + detail: { + devtools: { + color: "primary-dark", + track: reusableLaneDevToolDetails.track, + trackGroup: LANES_TRACK_GROUP, + tooltipText: hydrationFailed + ? "Hydration Failed" + : "Recovered after Error", + properties: lanes + } + } + }); + } + } + function logErroredRenderPhase(startTime, endTime) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = "error"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure("Errored", reusableLaneOptions)); + } + function logSuspenseThrottlePhase(startTime, endTime) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = "secondary-light"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure("Throttled", reusableLaneOptions)); + } + function logSuspendedCommitPhase(startTime, endTime) { + supportsUserTiming && + ((reusableLaneDevToolDetails.color = "secondary-light"), + (reusableLaneOptions.start = startTime), + (reusableLaneOptions.end = endTime), + performance.measure("Suspended", reusableLaneOptions)); + } + function logCommitErrored(startTime, endTime, errors, passive) { + if (supportsUserTiming) { + for (var properties = [], i = 0; i < errors.length; i++) { + var error = errors[i].value; + properties.push([ + "Error", + "object" === typeof error && + null !== error && + "string" === typeof error.message + ? String(error.message) + : String(error) + ]); + } + performance.measure("Errored", { + start: startTime, + end: endTime, + detail: { + devtools: { + color: "error", + track: reusableLaneDevToolDetails.track, + trackGroup: LANES_TRACK_GROUP, + tooltipText: passive + ? "Remaining Effects Errored" + : "Commit Errored", + properties: properties + } + } + }); + } + } + function resetContextDependencies() { + lastContextDependency = currentlyRenderingFiber$1 = null; + isDisallowedContextReadInDEV = !1; + } + function pushProvider(providerFiber, context, nextValue) { push(valueCursor, context._currentValue, providerFiber); context._currentValue = nextValue; push(rendererCursorDEV, context._currentRenderer, providerFiber); @@ -4890,23 +4908,128 @@ cache.controller.abort(); }); } - function createCapturedValueAtFiber(value, source) { - if ("object" === typeof value && null !== value) { - var existing = CapturedStacks.get(value); - if (void 0 !== existing) return existing; - source = { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; - CapturedStacks.set(value, source); - return source; - } - return { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; + function warnOnInvalidCallback(callback) { + if (null !== callback && "function" !== typeof callback) { + var key = String(callback); + didWarnOnInvalidCallback.has(key) || + (didWarnOnInvalidCallback.add(key), + console.error( + "Expected the last optional `callback` argument to be a function. Instead received: %s.", + callback + )); + } + } + function applyDerivedStateFromProps( + workInProgress, + ctor, + getDerivedStateFromProps, + nextProps + ) { + var prevState = workInProgress.memoizedState, + partialState = getDerivedStateFromProps(nextProps, prevState); + if (workInProgress.mode & StrictLegacyMode) { + setIsStrictModeForDevtools(!0); + try { + partialState = getDerivedStateFromProps(nextProps, prevState); + } finally { + setIsStrictModeForDevtools(!1); + } + } + void 0 === partialState && + ((ctor = getComponentNameFromType(ctor) || "Component"), + didWarnAboutUndefinedDerivedState.has(ctor) || + (didWarnAboutUndefinedDerivedState.add(ctor), + console.error( + "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.", + ctor + ))); + prevState = + null === partialState || void 0 === partialState + ? prevState + : assign({}, prevState, partialState); + workInProgress.memoizedState = prevState; + 0 === workInProgress.lanes && + (workInProgress.updateQueue.baseState = prevState); + } + function checkShouldComponentUpdate( + workInProgress, + ctor, + oldProps, + newProps, + oldState, + newState, + nextContext + ) { + var instance = workInProgress.stateNode; + if ("function" === typeof instance.shouldComponentUpdate) { + oldProps = instance.shouldComponentUpdate( + newProps, + newState, + nextContext + ); + if (workInProgress.mode & StrictLegacyMode) { + setIsStrictModeForDevtools(!0); + try { + oldProps = instance.shouldComponentUpdate( + newProps, + newState, + nextContext + ); + } finally { + setIsStrictModeForDevtools(!1); + } + } + void 0 === oldProps && + console.error( + "%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.", + getComponentNameFromType(ctor) || "Component" + ); + return oldProps; + } + return ctor.prototype && ctor.prototype.isPureReactComponent + ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState) + : !0; + } + function callComponentWillReceiveProps( + workInProgress, + instance, + newProps, + nextContext + ) { + var oldState = instance.state; + "function" === typeof instance.componentWillReceiveProps && + instance.componentWillReceiveProps(newProps, nextContext); + "function" === typeof instance.UNSAFE_componentWillReceiveProps && + instance.UNSAFE_componentWillReceiveProps(newProps, nextContext); + instance.state !== oldState && + ((workInProgress = + getComponentNameFromFiber(workInProgress) || "Component"), + didWarnAboutStateAssignmentForComponent.has(workInProgress) || + (didWarnAboutStateAssignmentForComponent.add(workInProgress), + console.error( + "%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.", + workInProgress + )), + classComponentUpdater.enqueueReplaceState( + instance, + instance.state, + null + )); + } + function resolveClassComponentProps(Component, baseProps) { + var newProps = baseProps; + if ("ref" in baseProps) { + newProps = {}; + for (var propName in baseProps) + "ref" !== propName && (newProps[propName] = baseProps[propName]); + } + if ((Component = Component.defaultProps)) { + newProps === baseProps && (newProps = assign({}, newProps)); + for (var _propName in Component) + void 0 === newProps[_propName] && + (newProps[_propName] = Component[_propName]); + } + return newProps; } function getTreeId() { var overflow = treeContextOverflow, @@ -4979,518 +5102,144 @@ "Expected to be hydrating. This is a bug in React. Please file an issue." ); } - function buildHydrationDiffNode(fiber, distanceFromLeaf) { - if (null === fiber.return) { - if (null === hydrationDiffRootDEV) - hydrationDiffRootDEV = { - fiber: fiber, - children: [], - serverProps: void 0, - serverTail: [], - distanceFromLeaf: distanceFromLeaf - }; - else { - if (hydrationDiffRootDEV.fiber !== fiber) - throw Error( - "Saw multiple hydration diff roots in a pass. This is a bug in React." + function createThenableState() { + return { didWarnAboutUncachedPromise: !1, thenables: [] }; + } + function isThenableResolved(thenable) { + thenable = thenable.status; + return "fulfilled" === thenable || "rejected" === thenable; + } + function noop$3() {} + function trackUsedThenable(thenableState, thenable, index) { + null !== ReactSharedInternals.actQueue && + (ReactSharedInternals.didUsePromise = !0); + var trackedThenables = thenableState.thenables; + index = trackedThenables[index]; + void 0 === index + ? trackedThenables.push(thenable) + : index !== thenable && + (thenableState.didWarnAboutUncachedPromise || + ((thenableState.didWarnAboutUncachedPromise = !0), + console.error( + "A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework." + )), + thenable.then(noop$3, noop$3), + (thenable = index)); + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw ( + ((thenableState = thenable.reason), + checkIfUseWrappedInAsyncCatch(thenableState), + thenableState) + ); + default: + if ("string" === typeof thenable.status) + thenable.then(noop$3, noop$3); + else { + thenableState = workInProgressRoot; + if ( + null !== thenableState && + 100 < thenableState.shellSuspendCounter + ) + throw Error( + "async/await is not yet supported in Client Components, only Server Components. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." + ); + thenableState = thenable; + thenableState.status = "pending"; + thenableState.then( + function (fulfilledValue) { + if ("pending" === thenable.status) { + var fulfilledThenable = thenable; + fulfilledThenable.status = "fulfilled"; + fulfilledThenable.value = fulfilledValue; + } + }, + function (error) { + if ("pending" === thenable.status) { + var rejectedThenable = thenable; + rejectedThenable.status = "rejected"; + rejectedThenable.reason = error; + } + } ); - hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf && - (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf); - } - return hydrationDiffRootDEV; + } + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw ( + ((thenableState = thenable.reason), + checkIfUseWrappedInAsyncCatch(thenableState), + thenableState) + ); + } + suspendedThenable = thenable; + needsToResetSuspendedThenableDEV = !0; + throw SuspenseException; } - var siblings = buildHydrationDiffNode( - fiber.return, - distanceFromLeaf + 1 - ).children; - if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber) - return ( - (siblings = siblings[siblings.length - 1]), - siblings.distanceFromLeaf > distanceFromLeaf && - (siblings.distanceFromLeaf = distanceFromLeaf), - siblings - ); - distanceFromLeaf = { - fiber: fiber, - children: [], - serverProps: void 0, - serverTail: [], - distanceFromLeaf: distanceFromLeaf - }; - siblings.push(distanceFromLeaf); - return distanceFromLeaf; } - function warnNonHydratedInstance(fiber, rejectedCandidate) { - didSuspendOrErrorDEV || - ((fiber = buildHydrationDiffNode(fiber, 0)), - (fiber.serverProps = null), - null !== rejectedCandidate && - ((rejectedCandidate = - describeHydratableInstanceForDevWarnings(rejectedCandidate)), - fiber.serverTail.push(rejectedCandidate))); + function getSuspendedThenable() { + if (null === suspendedThenable) + throw Error( + "Expected a suspended thenable. This is a bug in React. Please file an issue." + ); + var thenable = suspendedThenable; + suspendedThenable = null; + needsToResetSuspendedThenableDEV = !1; + return thenable; } - function throwOnHydrationMismatch(fiber) { - var diff = "", - diffRoot = hydrationDiffRootDEV; - null !== diffRoot && - ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot))); - queueHydrationError( - createCapturedValueAtFiber( - Error( - "Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\nhttps://react.dev/link/hydration-mismatch" + - diff - ), - fiber - ) - ); - throw HydrationMismatchException; - } - function prepareToHydrateHostInstance(fiber) { - var didHydrate = fiber.stateNode; - var type = fiber.type, - props = fiber.memoizedProps; - didHydrate[internalInstanceKey] = fiber; - didHydrate[internalPropsKey] = props; - validatePropertiesInDevelopment(type, props); - switch (type) { - case "dialog": - listenToNonDelegatedEvent("cancel", didHydrate); - listenToNonDelegatedEvent("close", didHydrate); - break; - case "iframe": - case "object": - case "embed": - listenToNonDelegatedEvent("load", didHydrate); - break; - case "video": - case "audio": - for (type = 0; type < mediaEventTypes.length; type++) - listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate); - break; - case "source": - listenToNonDelegatedEvent("error", didHydrate); - break; - case "img": - case "image": - case "link": - listenToNonDelegatedEvent("error", didHydrate); - listenToNonDelegatedEvent("load", didHydrate); - break; - case "details": - listenToNonDelegatedEvent("toggle", didHydrate); - break; - case "input": - checkControlledValueProps("input", props); - listenToNonDelegatedEvent("invalid", didHydrate); - validateInputProps(didHydrate, props); - initInput( - didHydrate, - props.value, - props.defaultValue, - props.checked, - props.defaultChecked, - props.type, - props.name, - !0 - ); - track(didHydrate); - break; - case "option": - validateOptionProps(didHydrate, props); - break; - case "select": - checkControlledValueProps("select", props); - listenToNonDelegatedEvent("invalid", didHydrate); - validateSelectProps(didHydrate, props); - break; - case "textarea": - checkControlledValueProps("textarea", props), - listenToNonDelegatedEvent("invalid", didHydrate), - validateTextareaProps(didHydrate, props), - initTextarea( - didHydrate, - props.value, - props.defaultValue, - props.children - ), - track(didHydrate); - } - type = props.children; - ("string" !== typeof type && - "number" !== typeof type && - "bigint" !== typeof type) || - didHydrate.textContent === "" + type || - !0 === props.suppressHydrationWarning || - checkForUnmatchedText(didHydrate.textContent, type) - ? (null != props.popover && - (listenToNonDelegatedEvent("beforetoggle", didHydrate), - listenToNonDelegatedEvent("toggle", didHydrate)), - null != props.onScroll && - listenToNonDelegatedEvent("scroll", didHydrate), - null != props.onScrollEnd && - listenToNonDelegatedEvent("scrollend", didHydrate), - null != props.onClick && (didHydrate.onclick = noop$1), - (didHydrate = !0)) - : (didHydrate = !1); - didHydrate || throwOnHydrationMismatch(fiber); - } - function popToNextHostParent(fiber) { - for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) - switch (hydrationParentFiber.tag) { - case 3: - case 27: - rootOrSingletonContext = !0; - return; - case 5: - case 13: - rootOrSingletonContext = !1; - return; - default: - hydrationParentFiber = hydrationParentFiber.return; - } + function checkIfUseWrappedInAsyncCatch(rejectedReason) { + if ( + rejectedReason === SuspenseException || + rejectedReason === SuspenseActionException + ) + throw Error( + "Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." + ); } - function popHydrationState(fiber) { - if (fiber !== hydrationParentFiber) return !1; - if (!isHydrating) - return popToNextHostParent(fiber), (isHydrating = !0), !1; - var shouldClear = !1, - JSCompiler_temp; - if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { - if ((JSCompiler_temp = 5 === fiber.tag)) - (JSCompiler_temp = fiber.type), - (JSCompiler_temp = - !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || - shouldSetTextContent(fiber.type, fiber.memoizedProps)); - JSCompiler_temp = !JSCompiler_temp; - } - JSCompiler_temp && (shouldClear = !0); - if (shouldClear && nextHydratableInstance) { - for (shouldClear = nextHydratableInstance; shouldClear; ) { - JSCompiler_temp = buildHydrationDiffNode(fiber, 0); - var description = - describeHydratableInstanceForDevWarnings(shouldClear); - JSCompiler_temp.serverTail.push(description); - shouldClear = - "Suspense" === description.type - ? getNextHydratableInstanceAfterSuspenseInstance(shouldClear) - : getNextHydratable(shouldClear.nextSibling); - } - throwOnHydrationMismatch(fiber); - } - popToNextHostParent(fiber); - if (13 === fiber.tag) { - fiber = fiber.memoizedState; - fiber = null !== fiber ? fiber.dehydrated : null; - if (!fiber) - throw Error( - "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue." - ); - nextHydratableInstance = - getNextHydratableInstanceAfterSuspenseInstance(fiber); - } else - nextHydratableInstance = hydrationParentFiber - ? getNextHydratable(fiber.stateNode.nextSibling) - : null; - return !0; + function pushHiddenContext(fiber, context) { + var prevEntangledRenderLanes = entangledRenderLanes; + push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber); + push(currentTreeHiddenStackCursor, context, fiber); + entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes; } - function resetHydrationState() { - nextHydratableInstance = hydrationParentFiber = null; - didSuspendOrErrorDEV = isHydrating = !1; + function reuseHiddenContextOnStack(fiber) { + push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber); + push( + currentTreeHiddenStackCursor, + currentTreeHiddenStackCursor.current, + fiber + ); } - function upgradeHydrationErrorsToRecoverable() { - var queuedErrors = hydrationErrors; - null !== queuedErrors && - (null === workInProgressRootRecoverableErrors - ? (workInProgressRootRecoverableErrors = queuedErrors) - : workInProgressRootRecoverableErrors.push.apply( - workInProgressRootRecoverableErrors, - queuedErrors - ), - (hydrationErrors = null)); - return queuedErrors; + function popHiddenContext(fiber) { + entangledRenderLanes = prevEntangledRenderLanesCursor.current; + pop(currentTreeHiddenStackCursor, fiber); + pop(prevEntangledRenderLanesCursor, fiber); } - function queueHydrationError(error) { - null === hydrationErrors - ? (hydrationErrors = [error]) - : hydrationErrors.push(error); + function peekCacheFromPool() { + var cacheResumedFromPreviousRender = resumedCache.current; + return null !== cacheResumedFromPreviousRender + ? cacheResumedFromPreviousRender + : workInProgressRoot.pooledCache; } - function emitPendingHydrationWarnings() { - var diffRoot = hydrationDiffRootDEV; - null !== diffRoot && - ((hydrationDiffRootDEV = null), - (diffRoot = describeDiff(diffRoot)), - console.error( - "A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\n%s%s", - "https://react.dev/link/hydration-mismatch", - diffRoot - )); + function pushTransition(offscreenWorkInProgress, prevCachePool) { + null === prevCachePool + ? push(resumedCache, resumedCache.current, offscreenWorkInProgress) + : push(resumedCache, prevCachePool.pool, offscreenWorkInProgress); } - function getViewTransitionName(props, instance) { - return null != props.name && "auto" !== props.name - ? props.name - : instance.autoName; + function getSuspendedCache() { + var cacheFromPool = peekCacheFromPool(); + return null === cacheFromPool + ? null + : { parent: CacheContext._currentValue, pool: cacheFromPool }; } - function warnOnInvalidCallback(callback) { - if (null !== callback && "function" !== typeof callback) { - var key = String(callback); - didWarnOnInvalidCallback.has(key) || - (didWarnOnInvalidCallback.add(key), - console.error( - "Expected the last optional `callback` argument to be a function. Instead received: %s.", - callback - )); - } - } - function applyDerivedStateFromProps( - workInProgress, - ctor, - getDerivedStateFromProps, - nextProps - ) { - var prevState = workInProgress.memoizedState, - partialState = getDerivedStateFromProps(nextProps, prevState); - if (workInProgress.mode & StrictLegacyMode) { - setIsStrictModeForDevtools(!0); - try { - partialState = getDerivedStateFromProps(nextProps, prevState); - } finally { - setIsStrictModeForDevtools(!1); - } - } - void 0 === partialState && - ((ctor = getComponentNameFromType(ctor) || "Component"), - didWarnAboutUndefinedDerivedState.has(ctor) || - (didWarnAboutUndefinedDerivedState.add(ctor), - console.error( - "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.", - ctor - ))); - prevState = - null === partialState || void 0 === partialState - ? prevState - : assign({}, prevState, partialState); - workInProgress.memoizedState = prevState; - 0 === workInProgress.lanes && - (workInProgress.updateQueue.baseState = prevState); - } - function checkShouldComponentUpdate( - workInProgress, - ctor, - oldProps, - newProps, - oldState, - newState, - nextContext - ) { - var instance = workInProgress.stateNode; - if ("function" === typeof instance.shouldComponentUpdate) { - oldProps = instance.shouldComponentUpdate( - newProps, - newState, - nextContext - ); - if (workInProgress.mode & StrictLegacyMode) { - setIsStrictModeForDevtools(!0); - try { - oldProps = instance.shouldComponentUpdate( - newProps, - newState, - nextContext - ); - } finally { - setIsStrictModeForDevtools(!1); - } - } - void 0 === oldProps && - console.error( - "%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.", - getComponentNameFromType(ctor) || "Component" - ); - return oldProps; - } - return ctor.prototype && ctor.prototype.isPureReactComponent - ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState) - : !0; - } - function callComponentWillReceiveProps( - workInProgress, - instance, - newProps, - nextContext - ) { - var oldState = instance.state; - "function" === typeof instance.componentWillReceiveProps && - instance.componentWillReceiveProps(newProps, nextContext); - "function" === typeof instance.UNSAFE_componentWillReceiveProps && - instance.UNSAFE_componentWillReceiveProps(newProps, nextContext); - instance.state !== oldState && - ((workInProgress = - getComponentNameFromFiber(workInProgress) || "Component"), - didWarnAboutStateAssignmentForComponent.has(workInProgress) || - (didWarnAboutStateAssignmentForComponent.add(workInProgress), - console.error( - "%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.", - workInProgress - )), - classComponentUpdater.enqueueReplaceState( - instance, - instance.state, - null - )); - } - function resolveClassComponentProps(Component, baseProps) { - var newProps = baseProps; - if ("ref" in baseProps) { - newProps = {}; - for (var propName in baseProps) - "ref" !== propName && (newProps[propName] = baseProps[propName]); - } - if ((Component = Component.defaultProps)) { - newProps === baseProps && (newProps = assign({}, newProps)); - for (var _propName in Component) - void 0 === newProps[_propName] && - (newProps[_propName] = Component[_propName]); - } - return newProps; - } - function createThenableState() { - return { didWarnAboutUncachedPromise: !1, thenables: [] }; - } - function isThenableResolved(thenable) { - thenable = thenable.status; - return "fulfilled" === thenable || "rejected" === thenable; - } - function noop$3() {} - function trackUsedThenable(thenableState, thenable, index) { - null !== ReactSharedInternals.actQueue && - (ReactSharedInternals.didUsePromise = !0); - var trackedThenables = thenableState.thenables; - index = trackedThenables[index]; - void 0 === index - ? trackedThenables.push(thenable) - : index !== thenable && - (thenableState.didWarnAboutUncachedPromise || - ((thenableState.didWarnAboutUncachedPromise = !0), - console.error( - "A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework." - )), - thenable.then(noop$3, noop$3), - (thenable = index)); - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw ( - ((thenableState = thenable.reason), - checkIfUseWrappedInAsyncCatch(thenableState), - thenableState) - ); - default: - if ("string" === typeof thenable.status) - thenable.then(noop$3, noop$3); - else { - thenableState = workInProgressRoot; - if ( - null !== thenableState && - 100 < thenableState.shellSuspendCounter - ) - throw Error( - "async/await is not yet supported in Client Components, only Server Components. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." - ); - thenableState = thenable; - thenableState.status = "pending"; - thenableState.then( - function (fulfilledValue) { - if ("pending" === thenable.status) { - var fulfilledThenable = thenable; - fulfilledThenable.status = "fulfilled"; - fulfilledThenable.value = fulfilledValue; - } - }, - function (error) { - if ("pending" === thenable.status) { - var rejectedThenable = thenable; - rejectedThenable.status = "rejected"; - rejectedThenable.reason = error; - } - } - ); - } - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw ( - ((thenableState = thenable.reason), - checkIfUseWrappedInAsyncCatch(thenableState), - thenableState) - ); - } - suspendedThenable = thenable; - needsToResetSuspendedThenableDEV = !0; - throw SuspenseException; - } - } - function getSuspendedThenable() { - if (null === suspendedThenable) - throw Error( - "Expected a suspended thenable. This is a bug in React. Please file an issue." - ); - var thenable = suspendedThenable; - suspendedThenable = null; - needsToResetSuspendedThenableDEV = !1; - return thenable; - } - function checkIfUseWrappedInAsyncCatch(rejectedReason) { - if ( - rejectedReason === SuspenseException || - rejectedReason === SuspenseActionException - ) - throw Error( - "Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." - ); - } - function pushHiddenContext(fiber, context) { - var prevEntangledRenderLanes = entangledRenderLanes; - push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber); - push(currentTreeHiddenStackCursor, context, fiber); - entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes; - } - function reuseHiddenContextOnStack(fiber) { - push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber); - push( - currentTreeHiddenStackCursor, - currentTreeHiddenStackCursor.current, - fiber - ); - } - function popHiddenContext(fiber) { - entangledRenderLanes = prevEntangledRenderLanesCursor.current; - pop(currentTreeHiddenStackCursor, fiber); - pop(prevEntangledRenderLanesCursor, fiber); - } - function peekCacheFromPool() { - var cacheResumedFromPreviousRender = resumedCache.current; - return null !== cacheResumedFromPreviousRender - ? cacheResumedFromPreviousRender - : workInProgressRoot.pooledCache; - } - function pushTransition(offscreenWorkInProgress, prevCachePool) { - null === prevCachePool - ? push(resumedCache, resumedCache.current, offscreenWorkInProgress) - : push(resumedCache, prevCachePool.pool, offscreenWorkInProgress); - } - function getSuspendedCache() { - var cacheFromPool = peekCacheFromPool(); - return null === cacheFromPool - ? null - : { parent: CacheContext._currentValue, pool: cacheFromPool }; - } - function mountHookTypesDev() { - var hookName = currentHookNameInDev; - null === hookTypesDev - ? (hookTypesDev = [hookName]) - : hookTypesDev.push(hookName); + function mountHookTypesDev() { + var hookName = currentHookNameInDev; + null === hookTypesDev + ? (hookTypesDev = [hookName]) + : hookTypesDev.push(hookName); } function updateHookTypesDev() { var hookName = currentHookNameInDev; @@ -6967,7 +6716,7 @@ 0 < treeId && (identifierPrefix += "H" + treeId.toString(32)); identifierPrefix += ":"; } else - (treeId = globalClientIdCounter++), + (treeId = globalClientIdCounter$1++), (identifierPrefix = ":" + identifierPrefix + "r" + treeId.toString(32) + ":"); return (hook.memoizedState = identifierPrefix); @@ -9617,33 +9366,33 @@ return current; } function updateSuspenseComponent(current, workInProgress, renderLanes) { - var JSCompiler_object_inline_componentStack_2563; - var JSCompiler_object_inline_stack_2562 = workInProgress.pendingProps; + var JSCompiler_object_inline_componentStack_2579; + var JSCompiler_object_inline_stack_2578 = workInProgress.pendingProps; shouldSuspendImpl(workInProgress) && (workInProgress.flags |= 128); - var JSCompiler_object_inline_message_2560 = !1; + var JSCompiler_object_inline_message_2576 = !1; var didSuspend = 0 !== (workInProgress.flags & 128); - (JSCompiler_object_inline_componentStack_2563 = didSuspend) || - (JSCompiler_object_inline_componentStack_2563 = + (JSCompiler_object_inline_componentStack_2579 = didSuspend) || + (JSCompiler_object_inline_componentStack_2579 = null !== current && null === current.memoizedState ? !1 : 0 !== (suspenseStackCursor.current & ForceSuspenseFallback)); - JSCompiler_object_inline_componentStack_2563 && - ((JSCompiler_object_inline_message_2560 = !0), + JSCompiler_object_inline_componentStack_2579 && + ((JSCompiler_object_inline_message_2576 = !0), (workInProgress.flags &= -129)); - JSCompiler_object_inline_componentStack_2563 = + JSCompiler_object_inline_componentStack_2579 = 0 !== (workInProgress.flags & 32); workInProgress.flags &= -33; if (null === current) { if (isHydrating) { - JSCompiler_object_inline_message_2560 + JSCompiler_object_inline_message_2576 ? pushPrimaryTreeSuspenseHandler(workInProgress) : reuseSuspenseHandlerOnStack(workInProgress); if (isHydrating) { - var JSCompiler_object_inline_digest_2561 = nextHydratableInstance; + var JSCompiler_object_inline_digest_2577 = nextHydratableInstance; var JSCompiler_temp; - if (!(JSCompiler_temp = !JSCompiler_object_inline_digest_2561)) { + if (!(JSCompiler_temp = !JSCompiler_object_inline_digest_2577)) { c: { - var instance = JSCompiler_object_inline_digest_2561; + var instance = JSCompiler_object_inline_digest_2577; for ( JSCompiler_temp = rootOrSingletonContext; 8 !== instance.nodeType; @@ -9685,87 +9434,87 @@ JSCompiler_temp && (warnNonHydratedInstance( workInProgress, - JSCompiler_object_inline_digest_2561 + JSCompiler_object_inline_digest_2577 ), throwOnHydrationMismatch(workInProgress)); } - JSCompiler_object_inline_digest_2561 = workInProgress.memoizedState; + JSCompiler_object_inline_digest_2577 = workInProgress.memoizedState; if ( - null !== JSCompiler_object_inline_digest_2561 && - ((JSCompiler_object_inline_digest_2561 = - JSCompiler_object_inline_digest_2561.dehydrated), - null !== JSCompiler_object_inline_digest_2561) + null !== JSCompiler_object_inline_digest_2577 && + ((JSCompiler_object_inline_digest_2577 = + JSCompiler_object_inline_digest_2577.dehydrated), + null !== JSCompiler_object_inline_digest_2577) ) return ( - isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2561) + isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2577) ? (workInProgress.lanes = 32) : (workInProgress.lanes = 536870912), null ); popSuspenseHandler(workInProgress); } - JSCompiler_object_inline_digest_2561 = - JSCompiler_object_inline_stack_2562.children; - JSCompiler_temp = JSCompiler_object_inline_stack_2562.fallback; - if (JSCompiler_object_inline_message_2560) + JSCompiler_object_inline_digest_2577 = + JSCompiler_object_inline_stack_2578.children; + JSCompiler_temp = JSCompiler_object_inline_stack_2578.fallback; + if (JSCompiler_object_inline_message_2576) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_stack_2562 = + (JSCompiler_object_inline_stack_2578 = mountSuspenseFallbackChildren( workInProgress, - JSCompiler_object_inline_digest_2561, + JSCompiler_object_inline_digest_2577, JSCompiler_temp, renderLanes )), - (JSCompiler_object_inline_message_2560 = workInProgress.child), - (JSCompiler_object_inline_message_2560.memoizedState = + (JSCompiler_object_inline_message_2576 = workInProgress.child), + (JSCompiler_object_inline_message_2576.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_message_2560.childLanes = + (JSCompiler_object_inline_message_2576.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2563, + JSCompiler_object_inline_componentStack_2579, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - JSCompiler_object_inline_stack_2562 + JSCompiler_object_inline_stack_2578 ); if ( "number" === - typeof JSCompiler_object_inline_stack_2562.unstable_expectedLoadTime + typeof JSCompiler_object_inline_stack_2578.unstable_expectedLoadTime ) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_stack_2562 = + (JSCompiler_object_inline_stack_2578 = mountSuspenseFallbackChildren( workInProgress, - JSCompiler_object_inline_digest_2561, + JSCompiler_object_inline_digest_2577, JSCompiler_temp, renderLanes )), - (JSCompiler_object_inline_message_2560 = workInProgress.child), - (JSCompiler_object_inline_message_2560.memoizedState = + (JSCompiler_object_inline_message_2576 = workInProgress.child), + (JSCompiler_object_inline_message_2576.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_message_2560.childLanes = + (JSCompiler_object_inline_message_2576.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2563, + JSCompiler_object_inline_componentStack_2579, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), (workInProgress.lanes = 4194304), - JSCompiler_object_inline_stack_2562 + JSCompiler_object_inline_stack_2578 ); pushPrimaryTreeSuspenseHandler(workInProgress); return mountSuspensePrimaryChildren( workInProgress, - JSCompiler_object_inline_digest_2561 + JSCompiler_object_inline_digest_2577 ); } var prevState = current.memoizedState; if ( null !== prevState && - ((JSCompiler_object_inline_digest_2561 = prevState.dehydrated), - null !== JSCompiler_object_inline_digest_2561) + ((JSCompiler_object_inline_digest_2577 = prevState.dehydrated), + null !== JSCompiler_object_inline_digest_2577) ) { if (didSuspend) workInProgress.flags & 256 @@ -9782,94 +9531,94 @@ (workInProgress.flags |= 128), (workInProgress = null)) : (reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_message_2560 = - JSCompiler_object_inline_stack_2562.fallback), - (JSCompiler_object_inline_digest_2561 = workInProgress.mode), - (JSCompiler_object_inline_stack_2562 = + (JSCompiler_object_inline_message_2576 = + JSCompiler_object_inline_stack_2578.fallback), + (JSCompiler_object_inline_digest_2577 = workInProgress.mode), + (JSCompiler_object_inline_stack_2578 = mountWorkInProgressOffscreenFiber( { mode: "visible", - children: JSCompiler_object_inline_stack_2562.children + children: JSCompiler_object_inline_stack_2578.children }, - JSCompiler_object_inline_digest_2561 + JSCompiler_object_inline_digest_2577 )), - (JSCompiler_object_inline_message_2560 = + (JSCompiler_object_inline_message_2576 = createFiberFromFragment( - JSCompiler_object_inline_message_2560, - JSCompiler_object_inline_digest_2561, + JSCompiler_object_inline_message_2576, + JSCompiler_object_inline_digest_2577, renderLanes, null )), - (JSCompiler_object_inline_message_2560.flags |= 2), - (JSCompiler_object_inline_stack_2562.return = workInProgress), - (JSCompiler_object_inline_message_2560.return = workInProgress), - (JSCompiler_object_inline_stack_2562.sibling = - JSCompiler_object_inline_message_2560), - (workInProgress.child = JSCompiler_object_inline_stack_2562), + (JSCompiler_object_inline_message_2576.flags |= 2), + (JSCompiler_object_inline_stack_2578.return = workInProgress), + (JSCompiler_object_inline_message_2576.return = workInProgress), + (JSCompiler_object_inline_stack_2578.sibling = + JSCompiler_object_inline_message_2576), + (workInProgress.child = JSCompiler_object_inline_stack_2578), reconcileChildFibers( workInProgress, current.child, null, renderLanes ), - (JSCompiler_object_inline_stack_2562 = workInProgress.child), - (JSCompiler_object_inline_stack_2562.memoizedState = + (JSCompiler_object_inline_stack_2578 = workInProgress.child), + (JSCompiler_object_inline_stack_2578.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_stack_2562.childLanes = + (JSCompiler_object_inline_stack_2578.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2563, + JSCompiler_object_inline_componentStack_2579, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - (workInProgress = JSCompiler_object_inline_message_2560)); + (workInProgress = JSCompiler_object_inline_message_2576)); else if ( (pushPrimaryTreeSuspenseHandler(workInProgress), isHydrating && console.error( "We should not be hydrating here. This is a bug in React. Please file a bug." ), - isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2561)) + isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2577)) ) { - JSCompiler_object_inline_componentStack_2563 = - JSCompiler_object_inline_digest_2561.nextSibling && - JSCompiler_object_inline_digest_2561.nextSibling.dataset; - if (JSCompiler_object_inline_componentStack_2563) { - JSCompiler_temp = JSCompiler_object_inline_componentStack_2563.dgst; - var message = JSCompiler_object_inline_componentStack_2563.msg; - instance = JSCompiler_object_inline_componentStack_2563.stck; + JSCompiler_object_inline_componentStack_2579 = + JSCompiler_object_inline_digest_2577.nextSibling && + JSCompiler_object_inline_digest_2577.nextSibling.dataset; + if (JSCompiler_object_inline_componentStack_2579) { + JSCompiler_temp = JSCompiler_object_inline_componentStack_2579.dgst; + var message = JSCompiler_object_inline_componentStack_2579.msg; + instance = JSCompiler_object_inline_componentStack_2579.stck; var componentStack = - JSCompiler_object_inline_componentStack_2563.cstck; + JSCompiler_object_inline_componentStack_2579.cstck; } - JSCompiler_object_inline_message_2560 = message; - JSCompiler_object_inline_digest_2561 = JSCompiler_temp; - JSCompiler_object_inline_stack_2562 = instance; - JSCompiler_temp = JSCompiler_object_inline_componentStack_2563 = + JSCompiler_object_inline_message_2576 = message; + JSCompiler_object_inline_digest_2577 = JSCompiler_temp; + JSCompiler_object_inline_stack_2578 = instance; + JSCompiler_temp = JSCompiler_object_inline_componentStack_2579 = componentStack; - "POSTPONE" !== JSCompiler_object_inline_digest_2561 && - ((JSCompiler_object_inline_componentStack_2563 = - JSCompiler_object_inline_message_2560 - ? Error(JSCompiler_object_inline_message_2560) + "POSTPONE" !== JSCompiler_object_inline_digest_2577 && + ((JSCompiler_object_inline_componentStack_2579 = + JSCompiler_object_inline_message_2576 + ? Error(JSCompiler_object_inline_message_2576) : Error( "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." )), - (JSCompiler_object_inline_componentStack_2563.stack = - JSCompiler_object_inline_stack_2562 || ""), - (JSCompiler_object_inline_componentStack_2563.digest = - JSCompiler_object_inline_digest_2561), - (JSCompiler_object_inline_stack_2562 = + (JSCompiler_object_inline_componentStack_2579.stack = + JSCompiler_object_inline_stack_2578 || ""), + (JSCompiler_object_inline_componentStack_2579.digest = + JSCompiler_object_inline_digest_2577), + (JSCompiler_object_inline_stack_2578 = void 0 === JSCompiler_temp ? null : JSCompiler_temp), - (JSCompiler_object_inline_message_2560 = { - value: JSCompiler_object_inline_componentStack_2563, + (JSCompiler_object_inline_message_2576 = { + value: JSCompiler_object_inline_componentStack_2579, source: null, - stack: JSCompiler_object_inline_stack_2562 + stack: JSCompiler_object_inline_stack_2578 }), - "string" === typeof JSCompiler_object_inline_stack_2562 && + "string" === typeof JSCompiler_object_inline_stack_2578 && CapturedStacks.set( - JSCompiler_object_inline_componentStack_2563, - JSCompiler_object_inline_message_2560 + JSCompiler_object_inline_componentStack_2579, + JSCompiler_object_inline_message_2576 ), - queueHydrationError(JSCompiler_object_inline_message_2560)); + queueHydrationError(JSCompiler_object_inline_message_2576)); workInProgress = retrySuspenseComponentWithoutHydrating( current, workInProgress, @@ -9883,44 +9632,44 @@ renderLanes, !1 ), - (JSCompiler_object_inline_componentStack_2563 = + (JSCompiler_object_inline_componentStack_2579 = 0 !== (renderLanes & current.childLanes)), - didReceiveUpdate || JSCompiler_object_inline_componentStack_2563) + didReceiveUpdate || JSCompiler_object_inline_componentStack_2579) ) { - JSCompiler_object_inline_componentStack_2563 = workInProgressRoot; + JSCompiler_object_inline_componentStack_2579 = workInProgressRoot; if ( - null !== JSCompiler_object_inline_componentStack_2563 && - ((JSCompiler_object_inline_stack_2562 = renderLanes & -renderLanes), - (JSCompiler_object_inline_stack_2562 = - 0 !== (JSCompiler_object_inline_stack_2562 & 42) + null !== JSCompiler_object_inline_componentStack_2579 && + ((JSCompiler_object_inline_stack_2578 = renderLanes & -renderLanes), + (JSCompiler_object_inline_stack_2578 = + 0 !== (JSCompiler_object_inline_stack_2578 & 42) ? 1 : getBumpedLaneForHydrationByLane( - JSCompiler_object_inline_stack_2562 + JSCompiler_object_inline_stack_2578 )), - (JSCompiler_object_inline_stack_2562 = + (JSCompiler_object_inline_stack_2578 = 0 !== - (JSCompiler_object_inline_stack_2562 & - (JSCompiler_object_inline_componentStack_2563.suspendedLanes | + (JSCompiler_object_inline_stack_2578 & + (JSCompiler_object_inline_componentStack_2579.suspendedLanes | renderLanes)) ? 0 - : JSCompiler_object_inline_stack_2562), - 0 !== JSCompiler_object_inline_stack_2562 && - JSCompiler_object_inline_stack_2562 !== prevState.retryLane) + : JSCompiler_object_inline_stack_2578), + 0 !== JSCompiler_object_inline_stack_2578 && + JSCompiler_object_inline_stack_2578 !== prevState.retryLane) ) throw ( - ((prevState.retryLane = JSCompiler_object_inline_stack_2562), + ((prevState.retryLane = JSCompiler_object_inline_stack_2578), enqueueConcurrentRenderForLane( current, - JSCompiler_object_inline_stack_2562 + JSCompiler_object_inline_stack_2578 ), scheduleUpdateOnFiber( - JSCompiler_object_inline_componentStack_2563, + JSCompiler_object_inline_componentStack_2579, current, - JSCompiler_object_inline_stack_2562 + JSCompiler_object_inline_stack_2578 ), SelectiveHydrationException) ); - JSCompiler_object_inline_digest_2561.data === + JSCompiler_object_inline_digest_2577.data === SUSPENSE_PENDING_START_DATA || renderDidSuspendDelayIfPossible(); workInProgress = retrySuspenseComponentWithoutHydrating( current, @@ -9928,14 +9677,14 @@ renderLanes ); } else - JSCompiler_object_inline_digest_2561.data === + JSCompiler_object_inline_digest_2577.data === SUSPENSE_PENDING_START_DATA ? ((workInProgress.flags |= 192), (workInProgress.child = current.child), (workInProgress = null)) : ((current = prevState.treeContext), (nextHydratableInstance = getNextHydratable( - JSCompiler_object_inline_digest_2561.nextSibling + JSCompiler_object_inline_digest_2577.nextSibling )), (hydrationParentFiber = workInProgress), (isHydrating = !0), @@ -9953,54 +9702,54 @@ (treeContextProvider = workInProgress)), (workInProgress = mountSuspensePrimaryChildren( workInProgress, - JSCompiler_object_inline_stack_2562.children + JSCompiler_object_inline_stack_2578.children )), (workInProgress.flags |= 4096)); return workInProgress; } - if (JSCompiler_object_inline_message_2560) + if (JSCompiler_object_inline_message_2576) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_message_2560 = - JSCompiler_object_inline_stack_2562.fallback), - (JSCompiler_object_inline_digest_2561 = workInProgress.mode), + (JSCompiler_object_inline_message_2576 = + JSCompiler_object_inline_stack_2578.fallback), + (JSCompiler_object_inline_digest_2577 = workInProgress.mode), (JSCompiler_temp = current.child), (instance = JSCompiler_temp.sibling), - (JSCompiler_object_inline_stack_2562 = createWorkInProgress( + (JSCompiler_object_inline_stack_2578 = createWorkInProgress( JSCompiler_temp, { mode: "hidden", - children: JSCompiler_object_inline_stack_2562.children + children: JSCompiler_object_inline_stack_2578.children } )), - (JSCompiler_object_inline_stack_2562.subtreeFlags = + (JSCompiler_object_inline_stack_2578.subtreeFlags = JSCompiler_temp.subtreeFlags & 65011712), null !== instance - ? (JSCompiler_object_inline_message_2560 = createWorkInProgress( + ? (JSCompiler_object_inline_message_2576 = createWorkInProgress( instance, - JSCompiler_object_inline_message_2560 + JSCompiler_object_inline_message_2576 )) - : ((JSCompiler_object_inline_message_2560 = createFiberFromFragment( - JSCompiler_object_inline_message_2560, - JSCompiler_object_inline_digest_2561, + : ((JSCompiler_object_inline_message_2576 = createFiberFromFragment( + JSCompiler_object_inline_message_2576, + JSCompiler_object_inline_digest_2577, renderLanes, null )), - (JSCompiler_object_inline_message_2560.flags |= 2)), - (JSCompiler_object_inline_message_2560.return = workInProgress), - (JSCompiler_object_inline_stack_2562.return = workInProgress), - (JSCompiler_object_inline_stack_2562.sibling = - JSCompiler_object_inline_message_2560), - (workInProgress.child = JSCompiler_object_inline_stack_2562), - (JSCompiler_object_inline_stack_2562 = - JSCompiler_object_inline_message_2560), - (JSCompiler_object_inline_message_2560 = workInProgress.child), - (JSCompiler_object_inline_digest_2561 = current.child.memoizedState), - null === JSCompiler_object_inline_digest_2561 - ? (JSCompiler_object_inline_digest_2561 = + (JSCompiler_object_inline_message_2576.flags |= 2)), + (JSCompiler_object_inline_message_2576.return = workInProgress), + (JSCompiler_object_inline_stack_2578.return = workInProgress), + (JSCompiler_object_inline_stack_2578.sibling = + JSCompiler_object_inline_message_2576), + (workInProgress.child = JSCompiler_object_inline_stack_2578), + (JSCompiler_object_inline_stack_2578 = + JSCompiler_object_inline_message_2576), + (JSCompiler_object_inline_message_2576 = workInProgress.child), + (JSCompiler_object_inline_digest_2577 = current.child.memoizedState), + null === JSCompiler_object_inline_digest_2577 + ? (JSCompiler_object_inline_digest_2577 = mountSuspenseOffscreenState(renderLanes)) : ((JSCompiler_temp = - JSCompiler_object_inline_digest_2561.cachePool), + JSCompiler_object_inline_digest_2577.cachePool), null !== JSCompiler_temp ? ((instance = CacheContext._currentValue), (JSCompiler_temp = @@ -10008,38 +9757,38 @@ ? { parent: instance, pool: instance } : JSCompiler_temp)) : (JSCompiler_temp = getSuspendedCache()), - (JSCompiler_object_inline_digest_2561 = { + (JSCompiler_object_inline_digest_2577 = { baseLanes: - JSCompiler_object_inline_digest_2561.baseLanes | renderLanes, + JSCompiler_object_inline_digest_2577.baseLanes | renderLanes, cachePool: JSCompiler_temp })), - (JSCompiler_object_inline_message_2560.memoizedState = - JSCompiler_object_inline_digest_2561), - (JSCompiler_object_inline_message_2560.childLanes = + (JSCompiler_object_inline_message_2576.memoizedState = + JSCompiler_object_inline_digest_2577), + (JSCompiler_object_inline_message_2576.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2563, + JSCompiler_object_inline_componentStack_2579, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - JSCompiler_object_inline_stack_2562 + JSCompiler_object_inline_stack_2578 ); pushPrimaryTreeSuspenseHandler(workInProgress); renderLanes = current.child; current = renderLanes.sibling; renderLanes = createWorkInProgress(renderLanes, { mode: "visible", - children: JSCompiler_object_inline_stack_2562.children + children: JSCompiler_object_inline_stack_2578.children }); renderLanes.return = workInProgress; renderLanes.sibling = null; null !== current && - ((JSCompiler_object_inline_componentStack_2563 = + ((JSCompiler_object_inline_componentStack_2579 = workInProgress.deletions), - null === JSCompiler_object_inline_componentStack_2563 + null === JSCompiler_object_inline_componentStack_2579 ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16)) - : JSCompiler_object_inline_componentStack_2563.push(current)); + : JSCompiler_object_inline_componentStack_2579.push(current)); workInProgress.child = renderLanes; workInProgress.memoizedState = null; return renderLanes; @@ -11123,7 +10872,7 @@ ? ((nextState = getTreeId()), (nextProps = "\u00ab" + nextProps + "T" + nextState + "\u00bb")) - : ((nextState = globalClientIdCounter$1++), + : ((nextState = globalClientIdCounter++), (nextProps = "\u00ab" + nextProps + @@ -11131,6 +10880,9 @@ nextState.toString(32) + "\u00bb")), (prevSibling.autoName = nextProps)), + null !== current && current.memoizedProps.name !== returnFiber.name + ? (workInProgress.flags |= 4194816) + : markRef(current, workInProgress), reconcileChildren( current, workInProgress, @@ -11407,15 +11159,34 @@ function commitAttachRef(finishedWork) { var ref = finishedWork.ref; if (null !== ref) { - var instance = finishedWork.stateNode; + switch (finishedWork.tag) { + case 26: + case 27: + case 5: + var instanceToUse = finishedWork.stateNode; + break; + case 30: + instanceToUse = finishedWork.stateNode; + var name = getViewTransitionName( + finishedWork.memoizedProps, + instanceToUse + ); + if (null === instanceToUse.ref || instanceToUse.ref.name !== name) + instanceToUse.ref = createViewTransitionInstance(name); + instanceToUse = instanceToUse.ref; + break; + default: + instanceToUse = finishedWork.stateNode; + } if ("function" === typeof ref) if (shouldProfile(finishedWork)) try { - startEffectTimer(), (finishedWork.refCleanup = ref(instance)); + startEffectTimer(), + (finishedWork.refCleanup = ref(instanceToUse)); } finally { recordEffectDuration(); } - else finishedWork.refCleanup = ref(instance); + else finishedWork.refCleanup = ref(instanceToUse); else "string" === typeof ref ? console.error("String refs are no longer supported.") @@ -11424,7 +11195,7 @@ "Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().", getComponentNameFromFiber(finishedWork) ), - (ref.current = instance); + (ref.current = instanceToUse); } } function safelyAttachRef(current, nearestMountedAncestor) { @@ -11946,11 +11717,12 @@ function commitAppearingPairViewTransitions(placement) { if (0 !== (placement.subtreeFlags & 2097152)) for (placement = placement.child; null !== placement; ) { - if (22 !== placement.tag || null !== placement.memoizedState) { + if (22 !== placement.tag || null !== placement.memoizedState) if ( + (commitAppearingPairViewTransitions(placement), 30 === placement.tag && - 0 !== (placement.flags & 2097152) && - placement.stateNode.paired + 0 !== (placement.flags & 2097152) && + placement.stateNode.paired) ) { var props = placement.memoizedProps; if (null == props.name || "auto" === props.name) @@ -11966,8 +11738,6 @@ !1 ) || restoreViewTransitionOnHostInstances(placement.child, !1); } - commitAppearingPairViewTransitions(placement); - } placement = placement.sibling; } } @@ -11983,7 +11753,9 @@ null, !1 ) - ? commitAppearingPairViewTransitions(placement) + ? (commitAppearingPairViewTransitions(placement), + placement.stateNode.paired || + scheduleViewTransitionEvent(placement, props.onEnter)) : restoreViewTransitionOnHostInstances(placement.child, !1); } else if (0 !== (placement.subtreeFlags & 33554432)) for (placement = placement.child; null !== placement; ) @@ -12016,7 +11788,8 @@ null, !1 ) - ? (pair.paired = deletion.stateNode) + ? ((pair.paired = deletion.stateNode), + scheduleViewTransitionEvent(deletion, props.onShare)) : restoreViewTransitionOnHostInstances(deletion.child, !1), appearingViewTransitions.delete(name), 0 === appearingViewTransitions.size) @@ -12037,23 +11810,28 @@ var props = deletion.memoizedProps, name = getViewTransitionName(props, deletion.stateNode); viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - deletion.child, - name, - props.className, - null, - !1 + if ( + applyViewTransitionToHostInstances( + deletion.child, + name, + props.className, + null, + !1 + ) ) - ? null !== appearingViewTransitions && - ((props = appearingViewTransitions.get(name)), - void 0 !== props && - ((props.paired = deletion.stateNode), - appearingViewTransitions.delete(name)), + if (null !== appearingViewTransitions) { + var pair = appearingViewTransitions.get(name); + void 0 !== pair + ? ((pair.paired = deletion.stateNode), + appearingViewTransitions.delete(name), + scheduleViewTransitionEvent(deletion, props.onShare)) + : scheduleViewTransitionEvent(deletion, props.onExit); commitDeletedPairViewTransitions( deletion, appearingViewTransitions - )) - : restoreViewTransitionOnHostInstances(deletion.child, !1); + ); + } else scheduleViewTransitionEvent(deletion, props.onExit); + else restoreViewTransitionOnHostInstances(deletion.child, !1); } else if (0 !== (deletion.subtreeFlags & 33554432)) for (deletion = deletion.child; null !== deletion; ) commitExitViewTransitions(deletion, appearingViewTransitions), @@ -12221,6 +11999,10 @@ changedParent.child, changedParent.memoizedState, !1 + ), + scheduleViewTransitionEvent( + changedParent, + changedParent.memoizedProps.onLayout )); } else 0 !== (changedParent.subtreeFlags & 33554432) && @@ -12417,6 +12199,10 @@ ? safelyAttachRef(finishedWork, finishedWork.return) : safelyDetachRef(finishedWork, finishedWork.return)); break; + case 30: + recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); + flags & 512 && safelyAttachRef(finishedWork, finishedWork.return); + break; default: recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); } @@ -13217,6 +13003,10 @@ attachSuspenseRetryListeners(finishedWork, current))); break; case 30: + flags & 512 && + (offscreenSubtreeWasHidden || + null === current || + safelyDetachRef(current, current.return)); flags = viewTransitionMutationContext; viewTransitionMutationContext = !1; recursivelyTraverseMutationEffects(root, finishedWork, lanes); @@ -13291,12 +13081,12 @@ viewTransitionCancelableChildren = null; if (null !== finishedWork) for (var i = 0; i < finishedWork.length; i += 3) { - current = finishedWork[i]; - var oldName = finishedWork[i + 1]; - restoreViewTransitionName(current, finishedWork[i + 2]); - current = current.ownerDocument.documentElement; - null !== current && - current.animate( + var instance = finishedWork[i], + oldName = finishedWork[i + 1]; + restoreViewTransitionName(instance, finishedWork[i + 2]); + instance = instance.ownerDocument.documentElement; + null !== instance && + instance.animate( { opacity: [0, 0], pointerEvents: ["none", "none"] }, { duration: 0, @@ -13343,8 +13133,9 @@ break; case 30: 0 !== (finishedWork.subtreeFlags & 8246) && - ((i = viewTransitionContextChanged), - (oldName = viewTransitionCancelableChildren), + ((i = 0 !== (finishedWork.flags & 4)), + (oldName = viewTransitionContextChanged), + (instance = viewTransitionCancelableChildren), (viewTransitionContextChanged = !1), (viewTransitionCancelableChildren = null), recursivelyTraverseAfterMutationEffects(root, finishedWork), @@ -13361,15 +13152,22 @@ viewTransitionHostInstanceIdx !== (null === root ? 0 : root.length) && (finishedWork.flags |= 32), 0 !== (finishedWork.flags & 4) && current - ? (viewTransitionCancelableChildren = oldName) - : null !== oldName && - (oldName.push.apply( - oldName, + ? ((root = finishedWork.memoizedProps), + scheduleViewTransitionEvent( + finishedWork, + i || viewTransitionContextChanged + ? root.onUpdate + : root.onLayout + ), + (viewTransitionCancelableChildren = instance)) + : null !== instance && + (instance.push.apply( + instance, viewTransitionCancelableChildren ), - (viewTransitionCancelableChildren = oldName)), + (viewTransitionCancelableChildren = instance)), (viewTransitionContextChanged = - 0 !== (finishedWork.flags & 32) ? !0 : i)); + 0 !== (finishedWork.flags & 32) ? !0 : oldName)); break; default: recursivelyTraverseAfterMutationEffects(root, finishedWork); @@ -13418,6 +13216,8 @@ null === finishedWork.memoizedState && recursivelyTraverseDisappearLayoutEffects(finishedWork); break; + case 30: + safelyDetachRef(finishedWork, finishedWork.return); default: recursivelyTraverseDisappearLayoutEffects(finishedWork); } @@ -13556,6 +13356,14 @@ ); safelyAttachRef(finishedWork, finishedWork.return); break; + case 30: + recursivelyTraverseReappearLayoutEffects( + finishedRoot, + finishedWork, + includeWorkInProgressEffects + ); + safelyAttachRef(finishedWork, finishedWork.return); + break; default: recursivelyTraverseReappearLayoutEffects( finishedRoot, @@ -14568,7 +14376,7 @@ (key = createFiber(30, pendingProps, key, mode)), (key.elementType = REACT_VIEW_TRANSITION_TYPE), (key.lanes = lanes), - (key.stateNode = { autoName: null, paired: null }), + (key.stateNode = { autoName: null, paired: null, ref: null }), key ); default: @@ -14645,73 +14453,324 @@ mode._debugTask = element._debugTask; return mode; } - function createFiberFromFragment(elements, mode, lanes, key) { - elements = createFiber(7, elements, key, mode); - elements.lanes = lanes; - return elements; + function createFiberFromFragment(elements, mode, lanes, key) { + elements = createFiber(7, elements, key, mode); + elements.lanes = lanes; + return elements; + } + function createFiberFromOffscreen(pendingProps, mode, lanes, key) { + pendingProps = createFiber(22, pendingProps, key, mode); + pendingProps.elementType = REACT_OFFSCREEN_TYPE; + pendingProps.lanes = lanes; + var primaryChildInstance = { + _visibility: OffscreenVisible, + _pendingVisibility: OffscreenVisible, + _pendingMarkers: null, + _retryCache: null, + _transitions: null, + _current: null, + detach: function () { + var instance = primaryChildInstance, + fiber = instance._current; + if (null === fiber) + throw Error( + "Calling Offscreen.detach before instance handle has been set." + ); + if (0 === (instance._pendingVisibility & OffscreenDetached)) { + var root = enqueueConcurrentRenderForLane(fiber, 2); + null !== root && + ((instance._pendingVisibility |= OffscreenDetached), + scheduleUpdateOnFiber(root, fiber, 2)); + } + }, + attach: function () { + var instance = primaryChildInstance, + fiber = instance._current; + if (null === fiber) + throw Error( + "Calling Offscreen.detach before instance handle has been set." + ); + if (0 !== (instance._pendingVisibility & OffscreenDetached)) { + var root = enqueueConcurrentRenderForLane(fiber, 2); + null !== root && + ((instance._pendingVisibility &= ~OffscreenDetached), + scheduleUpdateOnFiber(root, fiber, 2)); + } + } + }; + pendingProps.stateNode = primaryChildInstance; + return pendingProps; + } + function createFiberFromText(content, mode, lanes) { + content = createFiber(6, content, null, mode); + content.lanes = lanes; + return content; + } + function createFiberFromPortal(portal, mode, lanes) { + mode = createFiber( + 4, + null !== portal.children ? portal.children : [], + portal.key, + mode + ); + mode.lanes = lanes; + mode.stateNode = { + containerInfo: portal.containerInfo, + pendingChildren: null, + implementation: portal.implementation + }; + return mode; + } + function buildHydrationDiffNode(fiber, distanceFromLeaf) { + if (null === fiber.return) { + if (null === hydrationDiffRootDEV) + hydrationDiffRootDEV = { + fiber: fiber, + children: [], + serverProps: void 0, + serverTail: [], + distanceFromLeaf: distanceFromLeaf + }; + else { + if (hydrationDiffRootDEV.fiber !== fiber) + throw Error( + "Saw multiple hydration diff roots in a pass. This is a bug in React." + ); + hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf && + (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf); + } + return hydrationDiffRootDEV; + } + var siblings = buildHydrationDiffNode( + fiber.return, + distanceFromLeaf + 1 + ).children; + if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber) + return ( + (siblings = siblings[siblings.length - 1]), + siblings.distanceFromLeaf > distanceFromLeaf && + (siblings.distanceFromLeaf = distanceFromLeaf), + siblings + ); + distanceFromLeaf = { + fiber: fiber, + children: [], + serverProps: void 0, + serverTail: [], + distanceFromLeaf: distanceFromLeaf + }; + siblings.push(distanceFromLeaf); + return distanceFromLeaf; + } + function warnNonHydratedInstance(fiber, rejectedCandidate) { + didSuspendOrErrorDEV || + ((fiber = buildHydrationDiffNode(fiber, 0)), + (fiber.serverProps = null), + null !== rejectedCandidate && + ((rejectedCandidate = + describeHydratableInstanceForDevWarnings(rejectedCandidate)), + fiber.serverTail.push(rejectedCandidate))); + } + function throwOnHydrationMismatch(fiber) { + var diff = "", + diffRoot = hydrationDiffRootDEV; + null !== diffRoot && + ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot))); + queueHydrationError( + createCapturedValueAtFiber( + Error( + "Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\nhttps://react.dev/link/hydration-mismatch" + + diff + ), + fiber + ) + ); + throw HydrationMismatchException; + } + function prepareToHydrateHostInstance(fiber) { + var didHydrate = fiber.stateNode; + var type = fiber.type, + props = fiber.memoizedProps; + didHydrate[internalInstanceKey] = fiber; + didHydrate[internalPropsKey] = props; + validatePropertiesInDevelopment(type, props); + switch (type) { + case "dialog": + listenToNonDelegatedEvent("cancel", didHydrate); + listenToNonDelegatedEvent("close", didHydrate); + break; + case "iframe": + case "object": + case "embed": + listenToNonDelegatedEvent("load", didHydrate); + break; + case "video": + case "audio": + for (type = 0; type < mediaEventTypes.length; type++) + listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate); + break; + case "source": + listenToNonDelegatedEvent("error", didHydrate); + break; + case "img": + case "image": + case "link": + listenToNonDelegatedEvent("error", didHydrate); + listenToNonDelegatedEvent("load", didHydrate); + break; + case "details": + listenToNonDelegatedEvent("toggle", didHydrate); + break; + case "input": + checkControlledValueProps("input", props); + listenToNonDelegatedEvent("invalid", didHydrate); + validateInputProps(didHydrate, props); + initInput( + didHydrate, + props.value, + props.defaultValue, + props.checked, + props.defaultChecked, + props.type, + props.name, + !0 + ); + track(didHydrate); + break; + case "option": + validateOptionProps(didHydrate, props); + break; + case "select": + checkControlledValueProps("select", props); + listenToNonDelegatedEvent("invalid", didHydrate); + validateSelectProps(didHydrate, props); + break; + case "textarea": + checkControlledValueProps("textarea", props), + listenToNonDelegatedEvent("invalid", didHydrate), + validateTextareaProps(didHydrate, props), + initTextarea( + didHydrate, + props.value, + props.defaultValue, + props.children + ), + track(didHydrate); + } + type = props.children; + ("string" !== typeof type && + "number" !== typeof type && + "bigint" !== typeof type) || + didHydrate.textContent === "" + type || + !0 === props.suppressHydrationWarning || + checkForUnmatchedText(didHydrate.textContent, type) + ? (null != props.popover && + (listenToNonDelegatedEvent("beforetoggle", didHydrate), + listenToNonDelegatedEvent("toggle", didHydrate)), + null != props.onScroll && + listenToNonDelegatedEvent("scroll", didHydrate), + null != props.onScrollEnd && + listenToNonDelegatedEvent("scrollend", didHydrate), + null != props.onClick && (didHydrate.onclick = noop$1), + (didHydrate = !0)) + : (didHydrate = !1); + didHydrate || throwOnHydrationMismatch(fiber); + } + function popToNextHostParent(fiber) { + for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) + switch (hydrationParentFiber.tag) { + case 3: + case 27: + rootOrSingletonContext = !0; + return; + case 5: + case 13: + rootOrSingletonContext = !1; + return; + default: + hydrationParentFiber = hydrationParentFiber.return; + } + } + function popHydrationState(fiber) { + if (fiber !== hydrationParentFiber) return !1; + if (!isHydrating) + return popToNextHostParent(fiber), (isHydrating = !0), !1; + var shouldClear = !1, + JSCompiler_temp; + if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { + if ((JSCompiler_temp = 5 === fiber.tag)) + (JSCompiler_temp = fiber.type), + (JSCompiler_temp = + !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || + shouldSetTextContent(fiber.type, fiber.memoizedProps)); + JSCompiler_temp = !JSCompiler_temp; + } + JSCompiler_temp && (shouldClear = !0); + if (shouldClear && nextHydratableInstance) { + for (shouldClear = nextHydratableInstance; shouldClear; ) { + JSCompiler_temp = buildHydrationDiffNode(fiber, 0); + var description = + describeHydratableInstanceForDevWarnings(shouldClear); + JSCompiler_temp.serverTail.push(description); + shouldClear = + "Suspense" === description.type + ? getNextHydratableInstanceAfterSuspenseInstance(shouldClear) + : getNextHydratable(shouldClear.nextSibling); + } + throwOnHydrationMismatch(fiber); + } + popToNextHostParent(fiber); + if (13 === fiber.tag) { + fiber = fiber.memoizedState; + fiber = null !== fiber ? fiber.dehydrated : null; + if (!fiber) + throw Error( + "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue." + ); + nextHydratableInstance = + getNextHydratableInstanceAfterSuspenseInstance(fiber); + } else + nextHydratableInstance = hydrationParentFiber + ? getNextHydratable(fiber.stateNode.nextSibling) + : null; + return !0; + } + function resetHydrationState() { + nextHydratableInstance = hydrationParentFiber = null; + didSuspendOrErrorDEV = isHydrating = !1; } - function createFiberFromOffscreen(pendingProps, mode, lanes, key) { - pendingProps = createFiber(22, pendingProps, key, mode); - pendingProps.elementType = REACT_OFFSCREEN_TYPE; - pendingProps.lanes = lanes; - var primaryChildInstance = { - _visibility: OffscreenVisible, - _pendingVisibility: OffscreenVisible, - _pendingMarkers: null, - _retryCache: null, - _transitions: null, - _current: null, - detach: function () { - var instance = primaryChildInstance, - fiber = instance._current; - if (null === fiber) - throw Error( - "Calling Offscreen.detach before instance handle has been set." - ); - if (0 === (instance._pendingVisibility & OffscreenDetached)) { - var root = enqueueConcurrentRenderForLane(fiber, 2); - null !== root && - ((instance._pendingVisibility |= OffscreenDetached), - scheduleUpdateOnFiber(root, fiber, 2)); - } - }, - attach: function () { - var instance = primaryChildInstance, - fiber = instance._current; - if (null === fiber) - throw Error( - "Calling Offscreen.detach before instance handle has been set." - ); - if (0 !== (instance._pendingVisibility & OffscreenDetached)) { - var root = enqueueConcurrentRenderForLane(fiber, 2); - null !== root && - ((instance._pendingVisibility &= ~OffscreenDetached), - scheduleUpdateOnFiber(root, fiber, 2)); - } - } - }; - pendingProps.stateNode = primaryChildInstance; - return pendingProps; + function upgradeHydrationErrorsToRecoverable() { + var queuedErrors = hydrationErrors; + null !== queuedErrors && + (null === workInProgressRootRecoverableErrors + ? (workInProgressRootRecoverableErrors = queuedErrors) + : workInProgressRootRecoverableErrors.push.apply( + workInProgressRootRecoverableErrors, + queuedErrors + ), + (hydrationErrors = null)); + return queuedErrors; } - function createFiberFromText(content, mode, lanes) { - content = createFiber(6, content, null, mode); - content.lanes = lanes; - return content; + function queueHydrationError(error) { + null === hydrationErrors + ? (hydrationErrors = [error]) + : hydrationErrors.push(error); } - function createFiberFromPortal(portal, mode, lanes) { - mode = createFiber( - 4, - null !== portal.children ? portal.children : [], - portal.key, - mode - ); - mode.lanes = lanes; - mode.stateNode = { - containerInfo: portal.containerInfo, - pendingChildren: null, - implementation: portal.implementation - }; - return mode; + function emitPendingHydrationWarnings() { + var diffRoot = hydrationDiffRootDEV; + null !== diffRoot && + ((hydrationDiffRootDEV = null), + (diffRoot = describeDiff(diffRoot)), + console.error( + "A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\n%s%s", + "https://react.dev/link/hydration-mismatch", + diffRoot + )); + } + function getViewTransitionName(props, instance) { + return null != props.name && "auto" !== props.name + ? props.name + : instance.autoName; } function markUpdate(workInProgress) { workInProgress.flags |= 4; @@ -15753,6 +15812,20 @@ null !== suspenseHandler && (suspenseHandler.flags |= 32); return workInProgressDeferredLane; } + function scheduleViewTransitionEvent(fiber, callback) { + if (null != callback) { + var state = fiber.stateNode, + instance = state.ref; + null === instance && + (instance = state.ref = + createViewTransitionInstance( + getViewTransitionName(fiber.memoizedProps, state) + )); + null === pendingViewTransitionEvents && + (pendingViewTransitionEvents = []); + pendingViewTransitionEvents.push(callback.bind(null, instance)); + } + } function scheduleUpdateOnFiber(root, fiber, lane) { isRunningInsertionEffect && console.error("useInsertionEffect must not schedule updates."); @@ -17031,6 +17104,7 @@ pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate; pendingPassiveTransitions = transitions; pendingRecoverableErrors = recoverableErrors; + pendingViewTransitionEvents = null; pendingEffectsRenderEndTime = completedRenderEndTime; pendingSuspendedCommitReason = suspendedCommitReason; recoverableErrors = (lanes & 335544192) === lanes ? 10262 : 10256; @@ -17375,6 +17449,14 @@ (ReactDOMSharedInternals.p = schedulerPriority); } } + recoverableErrors = pendingViewTransitionEvents; + if (null !== recoverableErrors) + for ( + pendingViewTransitionEvents = null, onRecoverableError = 0; + onRecoverableError < recoverableErrors.length; + onRecoverableError++ + ) + (0, recoverableErrors[onRecoverableError])(); 0 !== (pendingEffectsLanes & 3) && flushPendingEffects(); ensureRootIsScheduled(root); suspendedCommitReason = root.pendingLanes; @@ -21306,6 +21388,19 @@ return !1; } } + function ViewTransitionPseudoElement(pseudo, name) { + this._scope = document.documentElement; + this._selector = "::view-transition-" + pseudo + "(" + name + ")"; + } + function createViewTransitionInstance(name) { + return { + name: name, + group: new ViewTransitionPseudoElement("group", name), + imagePair: new ViewTransitionPseudoElement("image-pair", name), + old: new ViewTransitionPseudoElement("old", name), + new: new ViewTransitionPseudoElement("new", name) + }; + } function clearContainerSparingly(container) { var nextNode = container.firstChild; nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling); @@ -24429,6 +24524,52 @@ "abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll scrollEnd toggle touchMove waiting wheel".split( " " ), + CapturedStacks = new WeakMap(), + OffscreenVisible = 1, + OffscreenDetached = 2, + OffscreenPassiveEffectsConnected = 4, + concurrentQueues = [], + concurrentQueuesIndex = 0, + concurrentlyUpdatedLanes = 0, + emptyContextObject = {}; + Object.freeze(emptyContextObject); + var resolveFamily = null, + failedBoundaries = null, + NoMode = 0, + ConcurrentMode = 1, + ProfileMode = 2, + StrictLegacyMode = 8, + StrictEffectsMode = 16, + NoStrictPassiveEffectsMode = 64, + now = Scheduler.unstable_now, + renderStartTime = -0, + commitStartTime = -0, + commitEndTime = -0, + commitErrors = null, + profilerStartTime = -1.1, + profilerEffectDuration = -0, + componentEffectDuration = -0, + componentEffectStartTime = -1.1, + componentEffectEndTime = -1.1, + componentEffectErrors = null, + blockingClampTime = -0, + blockingUpdateTime = -1.1, + blockingEventTime = -1.1, + blockingEventType = null, + blockingEventIsRepeat = !1, + blockingSpawnedUpdate = !1, + blockingSuspendedTime = -1.1, + transitionClampTime = -0, + transitionStartTime = -1.1, + transitionUpdateTime = -1.1, + transitionEventTime = -1.1, + transitionEventType = null, + transitionEventIsRepeat = !1, + transitionSuspendedTime = -1.1, + yieldReason = 0, + yieldStartTime = -1.1, + currentUpdateIsNested = !1, + nestedUpdateScheduled = !1, supportsUserTiming = "undefined" !== typeof performance && "function" === typeof performance.measure, @@ -24493,51 +24634,6 @@ } } }, - OffscreenVisible = 1, - OffscreenDetached = 2, - OffscreenPassiveEffectsConnected = 4, - concurrentQueues = [], - concurrentQueuesIndex = 0, - concurrentlyUpdatedLanes = 0, - emptyContextObject = {}; - Object.freeze(emptyContextObject); - var resolveFamily = null, - failedBoundaries = null, - NoMode = 0, - ConcurrentMode = 1, - ProfileMode = 2, - StrictLegacyMode = 8, - StrictEffectsMode = 16, - NoStrictPassiveEffectsMode = 64, - now = Scheduler.unstable_now, - renderStartTime = -0, - commitStartTime = -0, - commitEndTime = -0, - commitErrors = null, - profilerStartTime = -1.1, - profilerEffectDuration = -0, - componentEffectDuration = -0, - componentEffectStartTime = -1.1, - componentEffectEndTime = -1.1, - componentEffectErrors = null, - blockingClampTime = -0, - blockingUpdateTime = -1.1, - blockingEventTime = -1.1, - blockingEventType = null, - blockingEventIsRepeat = !1, - blockingSpawnedUpdate = !1, - blockingSuspendedTime = -1.1, - transitionClampTime = -0, - transitionStartTime = -1.1, - transitionUpdateTime = -1.1, - transitionEventTime = -1.1, - transitionEventType = null, - transitionEventIsRepeat = !1, - transitionSuspendedTime = -1.1, - yieldReason = 0, - yieldStartTime = -1.1, - currentUpdateIsNested = !1, - nestedUpdateScheduled = !1, valueCursor = createCursor(null); var rendererCursorDEV = createCursor(null); var rendererSigil = {}; @@ -24591,27 +24687,6 @@ _currentRenderer: null, _currentRenderer2: null }, - CapturedStacks = new WeakMap(), - forkStack = [], - forkStackIndex = 0, - treeForkProvider = null, - treeForkCount = 0, - idStack = [], - idStackIndex = 0, - treeContextProvider = null, - treeContextId = 1, - treeContextOverflow = "", - hydrationParentFiber = null, - nextHydratableInstance = null, - isHydrating = !1, - didSuspendOrErrorDEV = !1, - hydrationDiffRootDEV = null, - hydrationErrors = null, - rootOrSingletonContext = !1, - HydrationMismatchException = Error( - "Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React." - ), - globalClientIdCounter$1 = 0, ReactStrictModeWarnings = { recordUnsafeLifecycleWarnings: function () {}, flushPendingUnsafeLifecycleWarnings: function () {}, @@ -24863,6 +24938,15 @@ entangleTransitions(callback, inst, lane)); } }, + forkStack = [], + forkStackIndex = 0, + treeForkProvider = null, + treeForkCount = 0, + idStack = [], + idStackIndex = 0, + treeContextProvider = null, + treeContextId = 1, + treeContextOverflow = "", SuspenseException = Error( "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`." ), @@ -24923,7 +25007,7 @@ localIdCounter = 0, thenableIndexCounter$1 = 0, thenableState$1 = null, - globalClientIdCounter = 0, + globalClientIdCounter$1 = 0, RE_RENDER_LIMIT = 25, currentHookNameInDev = null, hookTypesDev = null, @@ -26241,7 +26325,18 @@ } catch (e$7) { hasBadMapPolyfill = !0; } - var DefaultAsyncDispatcher = { + var hydrationParentFiber = null, + nextHydratableInstance = null, + isHydrating = !1, + didSuspendOrErrorDEV = !1, + hydrationDiffRootDEV = null, + hydrationErrors = null, + rootOrSingletonContext = !1, + HydrationMismatchException = Error( + "Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React." + ), + globalClientIdCounter = 0, + DefaultAsyncDispatcher = { getCacheForType: function (resourceType) { var cache = readContext(CacheContext), cacheForType = cache.data.get(resourceType); @@ -26332,6 +26427,7 @@ pendingEffectsRenderEndTime = -0, pendingPassiveTransitions = null, pendingRecoverableErrors = null, + pendingViewTransitionEvents = null, pendingSuspendedCommitReason = IMMEDIATE_COMMIT, NESTED_UPDATE_LIMIT = 50, nestedUpdateCount = 0, @@ -26463,8 +26559,37 @@ .catch(handleErrorInNextTick); } : scheduleTimeout, - SUSPENSEY_FONT_TIMEOUT = 500, - NotLoaded = 0, + SUSPENSEY_FONT_TIMEOUT = 500; + ViewTransitionPseudoElement.prototype.animate = function ( + keyframes, + options + ) { + options = + "number" === typeof options + ? { duration: options } + : assign({}, options); + options.pseudoElement = this._selector; + return this._scope.animate(keyframes, options); + }; + ViewTransitionPseudoElement.prototype.getAnimations = function () { + for ( + var scope = this._scope, + selector = this._selector, + animations = scope.getAnimations({ subtree: !0 }), + result = [], + i = 0; + i < animations.length; + i++ + ) { + var effect = animations[i].effect; + null !== effect && + effect.target === scope && + effect.pseudoElement === selector && + result.push(animations[i]); + } + return result; + }; + var NotLoaded = 0, Loaded = 1, Errored = 2, Settled = 3, @@ -26879,11 +27004,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-540efebc-20250112" !== 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.1.0-experimental-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -26920,10 +27045,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.1.0-experimental-056073de-20250109", + version: "19.1.0-experimental-540efebc-20250112", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-056073de-20250109" + reconcilerVersion: "19.1.0-experimental-540efebc-20250112" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -27233,5 +27358,5 @@ } }; }; - exports.version = "19.1.0-experimental-056073de-20250109"; + exports.version = "19.1.0-experimental-540efebc-20250112"; })(); 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 7f96ea7314141..e3aa5c03ae52f 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 @@ -2109,19 +2109,19 @@ function getTargetInstForChangeEvent(domEventName, targetInst) { } var isInputEventSupported = !1; if (canUseDOM) { - var JSCompiler_inline_result$jscomp$285; + var JSCompiler_inline_result$jscomp$286; if (canUseDOM) { - var isSupported$jscomp$inline_423 = "oninput" in document; - if (!isSupported$jscomp$inline_423) { - var element$jscomp$inline_424 = document.createElement("div"); - element$jscomp$inline_424.setAttribute("oninput", "return;"); - isSupported$jscomp$inline_423 = - "function" === typeof element$jscomp$inline_424.oninput; + var isSupported$jscomp$inline_428 = "oninput" in document; + if (!isSupported$jscomp$inline_428) { + var element$jscomp$inline_429 = document.createElement("div"); + element$jscomp$inline_429.setAttribute("oninput", "return;"); + isSupported$jscomp$inline_428 = + "function" === typeof element$jscomp$inline_429.oninput; } - JSCompiler_inline_result$jscomp$285 = isSupported$jscomp$inline_423; - } else JSCompiler_inline_result$jscomp$285 = !1; + JSCompiler_inline_result$jscomp$286 = isSupported$jscomp$inline_428; + } else JSCompiler_inline_result$jscomp$286 = !1; isInputEventSupported = - JSCompiler_inline_result$jscomp$285 && + JSCompiler_inline_result$jscomp$286 && (!document.documentMode || 9 < document.documentMode); } function stopWatchingForValueChange() { @@ -2368,6 +2368,25 @@ function registerSimpleEvent(domEventName, reactName) { topLevelEventsToReactNames.set(domEventName, reactName); registerTwoPhaseEvent(reactName, [domEventName]); } +var CapturedStacks = new WeakMap(); +function createCapturedValueAtFiber(value, source) { + if ("object" === typeof value && null !== value) { + var existing = CapturedStacks.get(value); + if (void 0 !== existing) return existing; + source = { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; + CapturedStacks.set(value, source); + return source; + } + return { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; +} var concurrentQueues = [], concurrentQueuesIndex = 0, concurrentlyUpdatedLanes = 0; @@ -2964,267 +2983,6 @@ function releaseCache(cache) { cache.controller.abort(); }); } -var CapturedStacks = new WeakMap(); -function createCapturedValueAtFiber(value, source) { - if ("object" === typeof value && null !== value) { - var existing = CapturedStacks.get(value); - if (void 0 !== existing) return existing; - source = { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; - CapturedStacks.set(value, source); - return source; - } - return { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; -} -var forkStack = [], - forkStackIndex = 0, - treeForkProvider = null, - treeForkCount = 0, - idStack = [], - idStackIndex = 0, - treeContextProvider = null, - treeContextId = 1, - treeContextOverflow = ""; -function getTreeId() { - var overflow = treeContextOverflow, - idWithLeadingBit = treeContextId; - return ( - (idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))).toString( - 32 - ) + overflow - ); -} -function pushTreeFork(workInProgress, totalChildren) { - forkStack[forkStackIndex++] = treeForkCount; - forkStack[forkStackIndex++] = treeForkProvider; - treeForkProvider = workInProgress; - treeForkCount = totalChildren; -} -function pushTreeId(workInProgress, totalChildren, index) { - idStack[idStackIndex++] = treeContextId; - idStack[idStackIndex++] = treeContextOverflow; - idStack[idStackIndex++] = treeContextProvider; - treeContextProvider = workInProgress; - var baseIdWithLeadingBit = treeContextId; - workInProgress = treeContextOverflow; - var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; - baseIdWithLeadingBit &= ~(1 << baseLength); - index += 1; - var length = 32 - clz32(totalChildren) + baseLength; - if (30 < length) { - var numberOfOverflowBits = baseLength - (baseLength % 5); - length = ( - baseIdWithLeadingBit & - ((1 << numberOfOverflowBits) - 1) - ).toString(32); - baseIdWithLeadingBit >>= numberOfOverflowBits; - baseLength -= numberOfOverflowBits; - treeContextId = - (1 << (32 - clz32(totalChildren) + baseLength)) | - (index << baseLength) | - baseIdWithLeadingBit; - treeContextOverflow = length + workInProgress; - } else - (treeContextId = - (1 << length) | (index << baseLength) | baseIdWithLeadingBit), - (treeContextOverflow = workInProgress); -} -function pushMaterializedTreeId(workInProgress) { - null !== workInProgress.return && - (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0)); -} -function popTreeContext(workInProgress) { - for (; workInProgress === treeForkProvider; ) - (treeForkProvider = forkStack[--forkStackIndex]), - (forkStack[forkStackIndex] = null), - (treeForkCount = forkStack[--forkStackIndex]), - (forkStack[forkStackIndex] = null); - for (; workInProgress === treeContextProvider; ) - (treeContextProvider = idStack[--idStackIndex]), - (idStack[idStackIndex] = null), - (treeContextOverflow = idStack[--idStackIndex]), - (idStack[idStackIndex] = null), - (treeContextId = idStack[--idStackIndex]), - (idStack[idStackIndex] = null); -} -var hydrationParentFiber = null, - nextHydratableInstance = null, - isHydrating = !1, - hydrationErrors = null, - rootOrSingletonContext = !1, - HydrationMismatchException = Error(formatProdErrorMessage(519)); -function throwOnHydrationMismatch(fiber) { - var error = Error(formatProdErrorMessage(418, "")); - queueHydrationError(createCapturedValueAtFiber(error, fiber)); - throw HydrationMismatchException; -} -function prepareToHydrateHostInstance(fiber) { - var instance = fiber.stateNode, - type = fiber.type, - props = fiber.memoizedProps; - instance[internalInstanceKey] = fiber; - instance[internalPropsKey] = props; - switch (type) { - case "dialog": - listenToNonDelegatedEvent("cancel", instance); - listenToNonDelegatedEvent("close", instance); - break; - case "iframe": - case "object": - case "embed": - listenToNonDelegatedEvent("load", instance); - break; - case "video": - case "audio": - for (type = 0; type < mediaEventTypes.length; type++) - listenToNonDelegatedEvent(mediaEventTypes[type], instance); - break; - case "source": - listenToNonDelegatedEvent("error", instance); - break; - case "img": - case "image": - case "link": - listenToNonDelegatedEvent("error", instance); - listenToNonDelegatedEvent("load", instance); - break; - case "details": - listenToNonDelegatedEvent("toggle", instance); - break; - case "input": - listenToNonDelegatedEvent("invalid", instance); - initInput( - instance, - props.value, - props.defaultValue, - props.checked, - props.defaultChecked, - props.type, - props.name, - !0 - ); - track(instance); - break; - case "select": - listenToNonDelegatedEvent("invalid", instance); - break; - case "textarea": - listenToNonDelegatedEvent("invalid", instance), - initTextarea(instance, props.value, props.defaultValue, props.children), - track(instance); - } - type = props.children; - ("string" !== typeof type && - "number" !== typeof type && - "bigint" !== typeof type) || - instance.textContent === "" + type || - !0 === props.suppressHydrationWarning || - checkForUnmatchedText(instance.textContent, type) - ? (null != props.popover && - (listenToNonDelegatedEvent("beforetoggle", instance), - listenToNonDelegatedEvent("toggle", instance)), - null != props.onScroll && listenToNonDelegatedEvent("scroll", instance), - null != props.onScrollEnd && - listenToNonDelegatedEvent("scrollend", instance), - null != props.onClick && (instance.onclick = noop$1), - (instance = !0)) - : (instance = !1); - instance || throwOnHydrationMismatch(fiber); -} -function popToNextHostParent(fiber) { - for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) - switch (hydrationParentFiber.tag) { - case 3: - case 27: - rootOrSingletonContext = !0; - return; - case 5: - case 13: - rootOrSingletonContext = !1; - return; - default: - hydrationParentFiber = hydrationParentFiber.return; - } -} -function popHydrationState(fiber) { - if (fiber !== hydrationParentFiber) return !1; - if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1; - var shouldClear = !1, - JSCompiler_temp; - if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { - if ((JSCompiler_temp = 5 === fiber.tag)) - (JSCompiler_temp = fiber.type), - (JSCompiler_temp = - !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || - shouldSetTextContent(fiber.type, fiber.memoizedProps)); - JSCompiler_temp = !JSCompiler_temp; - } - JSCompiler_temp && (shouldClear = !0); - shouldClear && nextHydratableInstance && throwOnHydrationMismatch(fiber); - popToNextHostParent(fiber); - if (13 === fiber.tag) { - fiber = fiber.memoizedState; - fiber = null !== fiber ? fiber.dehydrated : null; - if (!fiber) throw Error(formatProdErrorMessage(317)); - a: { - fiber = fiber.nextSibling; - for (shouldClear = 0; fiber; ) { - if (8 === fiber.nodeType) - if (((JSCompiler_temp = fiber.data), "/$" === JSCompiler_temp)) { - if (0 === shouldClear) { - nextHydratableInstance = getNextHydratable(fiber.nextSibling); - break a; - } - shouldClear--; - } else - ("$" !== JSCompiler_temp && - "$!" !== JSCompiler_temp && - "$?" !== JSCompiler_temp) || - shouldClear++; - fiber = fiber.nextSibling; - } - nextHydratableInstance = null; - } - } else - nextHydratableInstance = hydrationParentFiber - ? getNextHydratable(fiber.stateNode.nextSibling) - : null; - return !0; -} -function resetHydrationState() { - nextHydratableInstance = hydrationParentFiber = null; - isHydrating = !1; -} -function upgradeHydrationErrorsToRecoverable() { - var queuedErrors = hydrationErrors; - null !== queuedErrors && - (null === workInProgressRootRecoverableErrors - ? (workInProgressRootRecoverableErrors = queuedErrors) - : workInProgressRootRecoverableErrors.push.apply( - workInProgressRootRecoverableErrors, - queuedErrors - ), - (hydrationErrors = null)); - return queuedErrors; -} -function queueHydrationError(error) { - null === hydrationErrors - ? (hydrationErrors = [error]) - : hydrationErrors.push(error); -} -var globalClientIdCounter$1 = 0; -function getViewTransitionName(props, instance) { - return null != props.name && "auto" !== props.name - ? props.name - : instance.autoName; -} function applyDerivedStateFromProps( workInProgress, ctor, @@ -3316,12 +3074,83 @@ function resolveClassComponentProps(Component, baseProps) { } if ((Component = Component.defaultProps)) { newProps === baseProps && (newProps = assign({}, newProps)); - for (var propName$30 in Component) - void 0 === newProps[propName$30] && - (newProps[propName$30] = Component[propName$30]); + for (var propName$28 in Component) + void 0 === newProps[propName$28] && + (newProps[propName$28] = Component[propName$28]); } return newProps; } +var forkStack = [], + forkStackIndex = 0, + treeForkProvider = null, + treeForkCount = 0, + idStack = [], + idStackIndex = 0, + treeContextProvider = null, + treeContextId = 1, + treeContextOverflow = ""; +function getTreeId() { + var overflow = treeContextOverflow, + idWithLeadingBit = treeContextId; + return ( + (idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))).toString( + 32 + ) + overflow + ); +} +function pushTreeFork(workInProgress, totalChildren) { + forkStack[forkStackIndex++] = treeForkCount; + forkStack[forkStackIndex++] = treeForkProvider; + treeForkProvider = workInProgress; + treeForkCount = totalChildren; +} +function pushTreeId(workInProgress, totalChildren, index) { + idStack[idStackIndex++] = treeContextId; + idStack[idStackIndex++] = treeContextOverflow; + idStack[idStackIndex++] = treeContextProvider; + treeContextProvider = workInProgress; + var baseIdWithLeadingBit = treeContextId; + workInProgress = treeContextOverflow; + var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; + baseIdWithLeadingBit &= ~(1 << baseLength); + index += 1; + var length = 32 - clz32(totalChildren) + baseLength; + if (30 < length) { + var numberOfOverflowBits = baseLength - (baseLength % 5); + length = ( + baseIdWithLeadingBit & + ((1 << numberOfOverflowBits) - 1) + ).toString(32); + baseIdWithLeadingBit >>= numberOfOverflowBits; + baseLength -= numberOfOverflowBits; + treeContextId = + (1 << (32 - clz32(totalChildren) + baseLength)) | + (index << baseLength) | + baseIdWithLeadingBit; + treeContextOverflow = length + workInProgress; + } else + (treeContextId = + (1 << length) | (index << baseLength) | baseIdWithLeadingBit), + (treeContextOverflow = workInProgress); +} +function pushMaterializedTreeId(workInProgress) { + null !== workInProgress.return && + (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0)); +} +function popTreeContext(workInProgress) { + for (; workInProgress === treeForkProvider; ) + (treeForkProvider = forkStack[--forkStackIndex]), + (forkStack[forkStackIndex] = null), + (treeForkCount = forkStack[--forkStackIndex]), + (forkStack[forkStackIndex] = null); + for (; workInProgress === treeContextProvider; ) + (treeContextProvider = idStack[--idStackIndex]), + (idStack[idStackIndex] = null), + (treeContextOverflow = idStack[--idStackIndex]), + (idStack[idStackIndex] = null), + (treeContextId = idStack[--idStackIndex]), + (idStack[idStackIndex] = null); +} var SuspenseException = Error(formatProdErrorMessage(460)), SuspenseyCommitException = Error(formatProdErrorMessage(474)), SuspenseActionException = Error(formatProdErrorMessage(542)), @@ -3452,7 +3281,7 @@ var renderLanes = 0, localIdCounter = 0, thenableIndexCounter$1 = 0, thenableState$1 = null, - globalClientIdCounter = 0; + globalClientIdCounter$1 = 0; function throwInvalidHookError() { throw Error(formatProdErrorMessage(321)); } @@ -4744,7 +4573,7 @@ var HooksDispatcherOnMount = { 0 < treeId && (identifierPrefix += "H" + treeId.toString(32)); identifierPrefix += ":"; } else - (treeId = globalClientIdCounter++), + (treeId = globalClientIdCounter$1++), (identifierPrefix = ":" + identifierPrefix + "r" + treeId.toString(32) + ":"); return (hook.memoizedState = identifierPrefix); @@ -7428,14 +7257,17 @@ function beginWork(current, workInProgress, renderLanes) { workInProgress.child ); case 5: - if (null === current && isHydrating) { - if ((init = lazyComponent = nextHydratableInstance)) - (lazyComponent = canHydrateInstance( - lazyComponent, - workInProgress.type, - workInProgress.pendingProps, - rootOrSingletonContext - )), + return ( + null === current && + isHydrating && + ((lazyComponent = nextHydratableInstance), + (init = !lazyComponent) || + ((lazyComponent = canHydrateInstance( + lazyComponent, + workInProgress.type, + workInProgress.pendingProps, + rootOrSingletonContext + )), null !== lazyComponent ? ((workInProgress.stateNode = lazyComponent), (hydrationParentFiber = workInProgress), @@ -7443,50 +7275,55 @@ function beginWork(current, workInProgress, renderLanes) { lazyComponent.firstChild )), (rootOrSingletonContext = !1), - (init = !0)) - : (init = !1); - init || throwOnHydrationMismatch(workInProgress); - } - pushHostContext(workInProgress); - init = workInProgress.type; - nextProps = workInProgress.pendingProps; - nextState = null !== current ? current.memoizedProps : null; - lazyComponent = nextProps.children; - shouldSetTextContent(init, nextProps) - ? (lazyComponent = null) - : null !== nextState && - shouldSetTextContent(init, nextState) && - (workInProgress.flags |= 32); - null !== workInProgress.memoizedState && - ((init = renderWithHooks( - current, - workInProgress, - TransitionAwareHostComponent, - null, - null, - renderLanes - )), - (HostTransitionContext._currentValue = init)); - markRef(current, workInProgress); - reconcileChildren(current, workInProgress, lazyComponent, renderLanes); - return workInProgress.child; - case 6: - if (null === current && isHydrating) { - if ((current = renderLanes = nextHydratableInstance)) - (renderLanes = canHydrateTextInstance( - renderLanes, - workInProgress.pendingProps, - rootOrSingletonContext + (lazyComponent = !0)) + : (lazyComponent = !1), + (init = !lazyComponent)), + init && throwOnHydrationMismatch(workInProgress)), + pushHostContext(workInProgress), + (init = workInProgress.type), + (nextProps = workInProgress.pendingProps), + (nextState = null !== current ? current.memoizedProps : null), + (lazyComponent = nextProps.children), + shouldSetTextContent(init, nextProps) + ? (lazyComponent = null) + : null !== nextState && + shouldSetTextContent(init, nextState) && + (workInProgress.flags |= 32), + null !== workInProgress.memoizedState && + ((init = renderWithHooks( + current, + workInProgress, + TransitionAwareHostComponent, + null, + null, + renderLanes )), + (HostTransitionContext._currentValue = init)), + markRef(current, workInProgress), + reconcileChildren(current, workInProgress, lazyComponent, renderLanes), + workInProgress.child + ); + case 6: + return ( + null === current && + isHydrating && + ((renderLanes = nextHydratableInstance), + (current = !renderLanes) || + ((renderLanes = canHydrateTextInstance( + renderLanes, + workInProgress.pendingProps, + rootOrSingletonContext + )), null !== renderLanes ? ((workInProgress.stateNode = renderLanes), (hydrationParentFiber = workInProgress), (nextHydratableInstance = null), - (current = !0)) - : (current = !1); - current || throwOnHydrationMismatch(workInProgress); - } - return null; + (renderLanes = !0)) + : (renderLanes = !1), + (current = !renderLanes)), + current && throwOnHydrationMismatch(workInProgress)), + null + ); case 13: return updateSuspenseComponent(current, workInProgress, renderLanes); case 4: @@ -7655,7 +7492,7 @@ function beginWork(current, workInProgress, renderLanes) { isHydrating ? ((nextState = getTreeId()), (nextProps = "\u00ab" + nextProps + "T" + nextState + "\u00bb")) - : ((nextState = globalClientIdCounter$1++), + : ((nextState = globalClientIdCounter++), (nextProps = "\u00ab" + nextProps + @@ -7663,6 +7500,9 @@ function beginWork(current, workInProgress, renderLanes) { nextState.toString(32) + "\u00bb")), (init.autoName = nextProps)), + null !== current && current.memoizedProps.name !== lazyComponent.name + ? (workInProgress.flags |= 4194816) + : markRef(current, workInProgress), reconcileChildren( current, workInProgress, @@ -7766,15 +7606,21 @@ function safelyAttachRef(current, nearestMountedAncestor) { try { var ref = current.ref; if (null !== ref) { - var instance = current.stateNode; switch (current.tag) { case 26: case 27: case 5: - var instanceToUse = instance; + var instanceToUse = current.stateNode; + break; + case 30: + var instance = current.stateNode, + name = getViewTransitionName(current.memoizedProps, instance); + if (null === instance.ref || instance.ref.name !== name) + instance.ref = createViewTransitionInstance(name); + instanceToUse = instance.ref; break; default: - instanceToUse = instance; + instanceToUse = current.stateNode; } "function" === typeof ref ? (current.refCleanup = ref(instanceToUse)) @@ -8202,11 +8048,12 @@ function restoreViewTransitionOnHostInstances( function commitAppearingPairViewTransitions(placement) { if (0 !== (placement.subtreeFlags & 2097152)) for (placement = placement.child; null !== placement; ) { - if (22 !== placement.tag || null !== placement.memoizedState) { + if (22 !== placement.tag || null !== placement.memoizedState) if ( + (commitAppearingPairViewTransitions(placement), 30 === placement.tag && - 0 !== (placement.flags & 2097152) && - placement.stateNode.paired + 0 !== (placement.flags & 2097152) && + placement.stateNode.paired) ) { var props = placement.memoizedProps; if (null == props.name || "auto" === props.name) @@ -8220,8 +8067,6 @@ function commitAppearingPairViewTransitions(placement) { !1 ) || restoreViewTransitionOnHostInstances(placement.child, !1); } - commitAppearingPairViewTransitions(placement); - } placement = placement.sibling; } } @@ -8237,7 +8082,9 @@ function commitEnterViewTransitions(placement) { null, !1 ) - ? commitAppearingPairViewTransitions(placement) + ? (commitAppearingPairViewTransitions(placement), + placement.stateNode.paired || + scheduleViewTransitionEvent(placement, props.onEnter)) : restoreViewTransitionOnHostInstances(placement.child, !1); } else if (0 !== (placement.subtreeFlags & 33554432)) for (placement = placement.child; null !== placement; ) @@ -8266,7 +8113,8 @@ function commitDeletedPairViewTransitions(deletion, appearingViewTransitions) { null, !1 ) - ? (pair.paired = deletion.stateNode) + ? ((pair.paired = deletion.stateNode), + scheduleViewTransitionEvent(deletion, props.onShare)) : restoreViewTransitionOnHostInstances(deletion.child, !1), appearingViewTransitions.delete(name), 0 === appearingViewTransitions.size) @@ -8284,20 +8132,25 @@ function commitExitViewTransitions(deletion, appearingViewTransitions) { var props = deletion.memoizedProps, name = getViewTransitionName(props, deletion.stateNode); viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - deletion.child, - name, - props.className, - null, - !1 + if ( + applyViewTransitionToHostInstances( + deletion.child, + name, + props.className, + null, + !1 + ) ) - ? null !== appearingViewTransitions && - ((props = appearingViewTransitions.get(name)), - void 0 !== props && - ((props.paired = deletion.stateNode), - appearingViewTransitions.delete(name)), - commitDeletedPairViewTransitions(deletion, appearingViewTransitions)) - : restoreViewTransitionOnHostInstances(deletion.child, !1); + if (null !== appearingViewTransitions) { + var pair = appearingViewTransitions.get(name); + void 0 !== pair + ? ((pair.paired = deletion.stateNode), + appearingViewTransitions.delete(name), + scheduleViewTransitionEvent(deletion, props.onShare)) + : scheduleViewTransitionEvent(deletion, props.onExit); + commitDeletedPairViewTransitions(deletion, appearingViewTransitions); + } else scheduleViewTransitionEvent(deletion, props.onExit); + else restoreViewTransitionOnHostInstances(deletion.child, !1); } else if (0 !== (deletion.subtreeFlags & 33554432)) for (deletion = deletion.child; null !== deletion; ) commitExitViewTransitions(deletion, appearingViewTransitions), @@ -8462,6 +8315,10 @@ function measureNestedViewTransitions(changedParent) { changedParent.child, changedParent.memoizedState, !1 + ), + scheduleViewTransitionEvent( + changedParent, + changedParent.memoizedProps.onLayout )); } else 0 !== (changedParent.subtreeFlags & 33554432) && @@ -8582,6 +8439,10 @@ function commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) { ? safelyAttachRef(finishedWork, finishedWork.return) : safelyDetachRef(finishedWork, finishedWork.return)); break; + case 30: + recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); + flags & 512 && safelyAttachRef(finishedWork, finishedWork.return); + break; default: recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); } @@ -9280,6 +9141,10 @@ function commitMutationEffectsOnFiber(finishedWork, root, lanes) { attachSuspenseRetryListeners(finishedWork, flags))); break; case 30: + flags & 512 && + (offscreenSubtreeWasHidden || + null === current || + safelyDetachRef(current, current.return)); flags = viewTransitionMutationContext; viewTransitionMutationContext = !1; recursivelyTraverseMutationEffects(root, finishedWork, lanes); @@ -9379,12 +9244,12 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { viewTransitionCancelableChildren = null; if (null !== finishedWork) for (var i = 0; i < finishedWork.length; i += 3) { - current = finishedWork[i]; - var oldName = finishedWork[i + 1]; - restoreViewTransitionName(current, finishedWork[i + 2]); - current = current.ownerDocument.documentElement; - null !== current && - current.animate( + var instance = finishedWork[i], + oldName = finishedWork[i + 1]; + restoreViewTransitionName(instance, finishedWork[i + 2]); + instance = instance.ownerDocument.documentElement; + null !== instance && + instance.animate( { opacity: [0, 0], pointerEvents: ["none", "none"] }, { duration: 0, @@ -9430,8 +9295,9 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { break; case 30: 0 !== (finishedWork.subtreeFlags & 8246) && - ((i = viewTransitionContextChanged), - (oldName = viewTransitionCancelableChildren), + ((i = 0 !== (finishedWork.flags & 4)), + (oldName = viewTransitionContextChanged), + (instance = viewTransitionCancelableChildren), (viewTransitionContextChanged = !1), (viewTransitionCancelableChildren = null), recursivelyTraverseAfterMutationEffects(root, finishedWork), @@ -9448,12 +9314,19 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { viewTransitionHostInstanceIdx !== (null === root ? 0 : root.length) && (finishedWork.flags |= 32), 0 !== (finishedWork.flags & 4) && current - ? (viewTransitionCancelableChildren = oldName) - : null !== oldName && - (oldName.push.apply(oldName, viewTransitionCancelableChildren), - (viewTransitionCancelableChildren = oldName)), + ? ((root = finishedWork.memoizedProps), + scheduleViewTransitionEvent( + finishedWork, + i || viewTransitionContextChanged + ? root.onUpdate + : root.onLayout + ), + (viewTransitionCancelableChildren = instance)) + : null !== instance && + (instance.push.apply(instance, viewTransitionCancelableChildren), + (viewTransitionCancelableChildren = instance)), (viewTransitionContextChanged = - 0 !== (finishedWork.flags & 32) ? !0 : i)); + 0 !== (finishedWork.flags & 32) ? !0 : oldName)); break; default: recursivelyTraverseAfterMutationEffects(root, finishedWork); @@ -9498,6 +9371,8 @@ function recursivelyTraverseDisappearLayoutEffects(parentFiber) { null === finishedWork.memoizedState && recursivelyTraverseDisappearLayoutEffects(finishedWork); break; + case 30: + safelyDetachRef(finishedWork, finishedWork.return); default: recursivelyTraverseDisappearLayoutEffects(finishedWork); } @@ -9603,6 +9478,14 @@ function recursivelyTraverseReappearLayoutEffects( ); safelyAttachRef(finishedWork, finishedWork.return); break; + case 30: + recursivelyTraverseReappearLayoutEffects( + finishedRoot, + finishedWork, + includeWorkInProgressEffects + ); + safelyAttachRef(finishedWork, finishedWork.return); + break; default: recursivelyTraverseReappearLayoutEffects( finishedRoot, @@ -10284,7 +10167,7 @@ function createFiberFromTypeAndProps( (type = createFiberImplClass(30, pendingProps, key, mode)), (type.elementType = REACT_VIEW_TRANSITION_TYPE), (type.lanes = lanes), - (type.stateNode = { autoName: null, paired: null }), + (type.stateNode = { autoName: null, paired: null, ref: null }), type ); default: @@ -10380,6 +10263,177 @@ function createFiberFromPortal(portal, mode, lanes) { }; return mode; } +var hydrationParentFiber = null, + nextHydratableInstance = null, + isHydrating = !1, + hydrationErrors = null, + rootOrSingletonContext = !1, + HydrationMismatchException = Error(formatProdErrorMessage(519)); +function throwOnHydrationMismatch(fiber) { + var error = Error(formatProdErrorMessage(418, "")); + queueHydrationError(createCapturedValueAtFiber(error, fiber)); + throw HydrationMismatchException; +} +function prepareToHydrateHostInstance(fiber) { + var instance = fiber.stateNode, + type = fiber.type, + props = fiber.memoizedProps; + instance[internalInstanceKey] = fiber; + instance[internalPropsKey] = props; + switch (type) { + case "dialog": + listenToNonDelegatedEvent("cancel", instance); + listenToNonDelegatedEvent("close", instance); + break; + case "iframe": + case "object": + case "embed": + listenToNonDelegatedEvent("load", instance); + break; + case "video": + case "audio": + for (type = 0; type < mediaEventTypes.length; type++) + listenToNonDelegatedEvent(mediaEventTypes[type], instance); + break; + case "source": + listenToNonDelegatedEvent("error", instance); + break; + case "img": + case "image": + case "link": + listenToNonDelegatedEvent("error", instance); + listenToNonDelegatedEvent("load", instance); + break; + case "details": + listenToNonDelegatedEvent("toggle", instance); + break; + case "input": + listenToNonDelegatedEvent("invalid", instance); + initInput( + instance, + props.value, + props.defaultValue, + props.checked, + props.defaultChecked, + props.type, + props.name, + !0 + ); + track(instance); + break; + case "select": + listenToNonDelegatedEvent("invalid", instance); + break; + case "textarea": + listenToNonDelegatedEvent("invalid", instance), + initTextarea(instance, props.value, props.defaultValue, props.children), + track(instance); + } + type = props.children; + ("string" !== typeof type && + "number" !== typeof type && + "bigint" !== typeof type) || + instance.textContent === "" + type || + !0 === props.suppressHydrationWarning || + checkForUnmatchedText(instance.textContent, type) + ? (null != props.popover && + (listenToNonDelegatedEvent("beforetoggle", instance), + listenToNonDelegatedEvent("toggle", instance)), + null != props.onScroll && listenToNonDelegatedEvent("scroll", instance), + null != props.onScrollEnd && + listenToNonDelegatedEvent("scrollend", instance), + null != props.onClick && (instance.onclick = noop$1), + (instance = !0)) + : (instance = !1); + instance || throwOnHydrationMismatch(fiber); +} +function popToNextHostParent(fiber) { + for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) + switch (hydrationParentFiber.tag) { + case 3: + case 27: + rootOrSingletonContext = !0; + return; + case 5: + case 13: + rootOrSingletonContext = !1; + return; + default: + hydrationParentFiber = hydrationParentFiber.return; + } +} +function popHydrationState(fiber) { + if (fiber !== hydrationParentFiber) return !1; + if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1; + var shouldClear = !1, + JSCompiler_temp; + if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { + if ((JSCompiler_temp = 5 === fiber.tag)) + (JSCompiler_temp = fiber.type), + (JSCompiler_temp = + !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || + shouldSetTextContent(fiber.type, fiber.memoizedProps)); + JSCompiler_temp = !JSCompiler_temp; + } + JSCompiler_temp && (shouldClear = !0); + shouldClear && nextHydratableInstance && throwOnHydrationMismatch(fiber); + popToNextHostParent(fiber); + if (13 === fiber.tag) { + fiber = fiber.memoizedState; + fiber = null !== fiber ? fiber.dehydrated : null; + if (!fiber) throw Error(formatProdErrorMessage(317)); + a: { + fiber = fiber.nextSibling; + for (shouldClear = 0; fiber; ) { + if (8 === fiber.nodeType) + if (((JSCompiler_temp = fiber.data), "/$" === JSCompiler_temp)) { + if (0 === shouldClear) { + nextHydratableInstance = getNextHydratable(fiber.nextSibling); + break a; + } + shouldClear--; + } else + ("$" !== JSCompiler_temp && + "$!" !== JSCompiler_temp && + "$?" !== JSCompiler_temp) || + shouldClear++; + fiber = fiber.nextSibling; + } + nextHydratableInstance = null; + } + } else + nextHydratableInstance = hydrationParentFiber + ? getNextHydratable(fiber.stateNode.nextSibling) + : null; + return !0; +} +function resetHydrationState() { + nextHydratableInstance = hydrationParentFiber = null; + isHydrating = !1; +} +function upgradeHydrationErrorsToRecoverable() { + var queuedErrors = hydrationErrors; + null !== queuedErrors && + (null === workInProgressRootRecoverableErrors + ? (workInProgressRootRecoverableErrors = queuedErrors) + : workInProgressRootRecoverableErrors.push.apply( + workInProgressRootRecoverableErrors, + queuedErrors + ), + (hydrationErrors = null)); + return queuedErrors; +} +function queueHydrationError(error) { + null === hydrationErrors + ? (hydrationErrors = [error]) + : hydrationErrors.push(error); +} +var globalClientIdCounter = 0; +function getViewTransitionName(props, instance) { + return null != props.name && "auto" !== props.name + ? props.name + : instance.autoName; +} function markUpdate(workInProgress) { workInProgress.flags |= 4; } @@ -11243,6 +11297,7 @@ var PossiblyWeakMap = "function" === typeof WeakMap ? WeakMap : Map, pendingEffectsRemainingLanes = 0, pendingPassiveTransitions = null, pendingRecoverableErrors = null, + pendingViewTransitionEvents = null, nestedUpdateCount = 0, rootWithNestedUpdates = null; function requestUpdateLane() { @@ -11264,6 +11319,19 @@ function requestDeferredLane() { null !== suspenseHandler && (suspenseHandler.flags |= 32); return workInProgressDeferredLane; } +function scheduleViewTransitionEvent(fiber, callback) { + if (null != callback) { + var state = fiber.stateNode, + instance = state.ref; + null === instance && + (instance = state.ref = + createViewTransitionInstance( + getViewTransitionName(fiber.memoizedProps, state) + )); + null === pendingViewTransitionEvents && (pendingViewTransitionEvents = []); + pendingViewTransitionEvents.push(callback.bind(null, instance)); + } +} function scheduleUpdateOnFiber(root, fiber, lane) { if ( (root === workInProgressRoot && @@ -12097,6 +12165,7 @@ function commitRoot( pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate; pendingPassiveTransitions = transitions; pendingRecoverableErrors = recoverableErrors; + pendingViewTransitionEvents = null; recoverableErrors = (lanes & 335544192) === lanes ? 10262 : 10256; 0 !== (finishedWork.subtreeFlags & recoverableErrors) || 0 !== (finishedWork.flags & recoverableErrors) @@ -12343,6 +12412,14 @@ function flushSpawnedWork() { (ReactDOMSharedInternals.p = passiveSubtreeMask); } } + recoverableErrors = pendingViewTransitionEvents; + if (null !== recoverableErrors) + for ( + pendingViewTransitionEvents = null, onRecoverableError = 0; + onRecoverableError < recoverableErrors.length; + onRecoverableError++ + ) + (0, recoverableErrors[onRecoverableError])(); 0 !== (pendingEffectsLanes & 3) && flushPendingEffects(); ensureRootIsScheduled(root); passiveSubtreeMask = root.pendingLanes; @@ -12547,14 +12624,14 @@ function flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) { isFlushingWork = !0; do { var didPerformSomeWork = !1; - for (var root$176 = firstScheduledRoot; null !== root$176; ) { + for (var root$177 = firstScheduledRoot; null !== root$177; ) { if (!onlyLegacy) if (0 !== syncTransitionLanes) { - var pendingLanes = root$176.pendingLanes; + var pendingLanes = root$177.pendingLanes; if (0 === pendingLanes) var JSCompiler_inline_result = 0; else { - var suspendedLanes = root$176.suspendedLanes, - pingedLanes = root$176.pingedLanes; + var suspendedLanes = root$177.suspendedLanes, + pingedLanes = root$177.pingedLanes; JSCompiler_inline_result = (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1; JSCompiler_inline_result &= @@ -12568,20 +12645,20 @@ function flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) { } 0 !== JSCompiler_inline_result && ((didPerformSomeWork = !0), - performSyncWorkOnRoot(root$176, JSCompiler_inline_result)); + performSyncWorkOnRoot(root$177, JSCompiler_inline_result)); } else (JSCompiler_inline_result = workInProgressRootRenderLanes), (JSCompiler_inline_result = getNextLanes( - root$176, - root$176 === workInProgressRoot ? JSCompiler_inline_result : 0, - null !== root$176.cancelPendingCommit || - -1 !== root$176.timeoutHandle + root$177, + root$177 === workInProgressRoot ? JSCompiler_inline_result : 0, + null !== root$177.cancelPendingCommit || + -1 !== root$177.timeoutHandle )), 0 === (JSCompiler_inline_result & 3) || - checkIfRootIsPrerendering(root$176, JSCompiler_inline_result) || + checkIfRootIsPrerendering(root$177, JSCompiler_inline_result) || ((didPerformSomeWork = !0), - performSyncWorkOnRoot(root$176, JSCompiler_inline_result)); - root$176 = root$176.next; + performSyncWorkOnRoot(root$177, JSCompiler_inline_result)); + root$177 = root$177.next; } } while (didPerformSomeWork); isFlushingWork = !1; @@ -12821,20 +12898,20 @@ function extractEvents$1( } } for ( - var i$jscomp$inline_1556 = 0; - i$jscomp$inline_1556 < simpleEventPluginEvents.length; - i$jscomp$inline_1556++ + var i$jscomp$inline_1576 = 0; + i$jscomp$inline_1576 < simpleEventPluginEvents.length; + i$jscomp$inline_1576++ ) { - var eventName$jscomp$inline_1557 = - simpleEventPluginEvents[i$jscomp$inline_1556], - domEventName$jscomp$inline_1558 = - eventName$jscomp$inline_1557.toLowerCase(), - capitalizedEvent$jscomp$inline_1559 = - eventName$jscomp$inline_1557[0].toUpperCase() + - eventName$jscomp$inline_1557.slice(1); + var eventName$jscomp$inline_1577 = + simpleEventPluginEvents[i$jscomp$inline_1576], + domEventName$jscomp$inline_1578 = + eventName$jscomp$inline_1577.toLowerCase(), + capitalizedEvent$jscomp$inline_1579 = + eventName$jscomp$inline_1577[0].toUpperCase() + + eventName$jscomp$inline_1577.slice(1); registerSimpleEvent( - domEventName$jscomp$inline_1558, - "on" + capitalizedEvent$jscomp$inline_1559 + domEventName$jscomp$inline_1578, + "on" + capitalizedEvent$jscomp$inline_1579 ); } registerSimpleEvent(ANIMATION_END, "onAnimationEnd"); @@ -14022,34 +14099,34 @@ function setInitialProperties(domElement, tag, props) { defaultChecked = null; for (hasSrc in props) if (props.hasOwnProperty(hasSrc)) { - var propValue$190 = props[hasSrc]; - if (null != propValue$190) + var propValue$191 = props[hasSrc]; + if (null != propValue$191) switch (hasSrc) { case "name": - hasSrcSet = propValue$190; + hasSrcSet = propValue$191; break; case "type": - propValue = propValue$190; + propValue = propValue$191; break; case "checked": - checked = propValue$190; + checked = propValue$191; break; case "defaultChecked": - defaultChecked = propValue$190; + defaultChecked = propValue$191; break; case "value": - propKey = propValue$190; + propKey = propValue$191; break; case "defaultValue": - defaultValue = propValue$190; + defaultValue = propValue$191; break; case "children": case "dangerouslySetInnerHTML": - if (null != propValue$190) + if (null != propValue$191) throw Error(formatProdErrorMessage(137, tag)); break; default: - setProp(domElement, tag, hasSrc, propValue$190, props, null); + setProp(domElement, tag, hasSrc, propValue$191, props, null); } } initInput( @@ -14186,14 +14263,14 @@ function setInitialProperties(domElement, tag, props) { return; default: if (isCustomElement(tag)) { - for (propValue$190 in props) - props.hasOwnProperty(propValue$190) && - ((hasSrc = props[propValue$190]), + for (propValue$191 in props) + props.hasOwnProperty(propValue$191) && + ((hasSrc = props[propValue$191]), void 0 !== hasSrc && setPropOnCustomElement( domElement, tag, - propValue$190, + propValue$191, hasSrc, props, void 0 @@ -14241,14 +14318,14 @@ function updateProperties(domElement, tag, lastProps, nextProps) { setProp(domElement, tag, propKey, null, nextProps, lastProp); } } - for (var propKey$207 in nextProps) { - var propKey = nextProps[propKey$207]; - lastProp = lastProps[propKey$207]; + for (var propKey$208 in nextProps) { + var propKey = nextProps[propKey$208]; + lastProp = lastProps[propKey$208]; if ( - nextProps.hasOwnProperty(propKey$207) && + nextProps.hasOwnProperty(propKey$208) && (null != propKey || null != lastProp) ) - switch (propKey$207) { + switch (propKey$208) { case "type": propKey !== lastProp && (viewTransitionMutationContext = !0); type = propKey; @@ -14283,7 +14360,7 @@ function updateProperties(domElement, tag, lastProps, nextProps) { setProp( domElement, tag, - propKey$207, + propKey$208, propKey, nextProps, lastProp @@ -14302,7 +14379,7 @@ function updateProperties(domElement, tag, lastProps, nextProps) { ); return; case "select": - propKey = value = defaultValue = propKey$207 = null; + propKey = value = defaultValue = propKey$208 = null; for (type in lastProps) if ( ((lastDefaultValue = lastProps[type]), @@ -14334,7 +14411,7 @@ function updateProperties(domElement, tag, lastProps, nextProps) { switch (name) { case "value": type !== lastDefaultValue && (viewTransitionMutationContext = !0); - propKey$207 = type; + propKey$208 = type; break; case "defaultValue": type !== lastDefaultValue && (viewTransitionMutationContext = !0); @@ -14357,15 +14434,15 @@ function updateProperties(domElement, tag, lastProps, nextProps) { tag = defaultValue; lastProps = value; nextProps = propKey; - null != propKey$207 - ? updateOptions(domElement, !!lastProps, propKey$207, !1) + null != propKey$208 + ? updateOptions(domElement, !!lastProps, propKey$208, !1) : !!nextProps !== !!lastProps && (null != tag ? updateOptions(domElement, !!lastProps, tag, !0) : updateOptions(domElement, !!lastProps, lastProps ? [] : "", !1)); return; case "textarea": - propKey = propKey$207 = null; + propKey = propKey$208 = null; for (defaultValue in lastProps) if ( ((name = lastProps[defaultValue]), @@ -14390,7 +14467,7 @@ function updateProperties(domElement, tag, lastProps, nextProps) { switch (value) { case "value": name !== type && (viewTransitionMutationContext = !0); - propKey$207 = name; + propKey$208 = name; break; case "defaultValue": name !== type && (viewTransitionMutationContext = !0); @@ -14405,17 +14482,17 @@ function updateProperties(domElement, tag, lastProps, nextProps) { name !== type && setProp(domElement, tag, value, name, nextProps, type); } - updateTextarea(domElement, propKey$207, propKey); + updateTextarea(domElement, propKey$208, propKey); return; case "option": - for (var propKey$223 in lastProps) + for (var propKey$224 in lastProps) if ( - ((propKey$207 = lastProps[propKey$223]), - lastProps.hasOwnProperty(propKey$223) && - null != propKey$207 && - !nextProps.hasOwnProperty(propKey$223)) + ((propKey$208 = lastProps[propKey$224]), + lastProps.hasOwnProperty(propKey$224) && + null != propKey$208 && + !nextProps.hasOwnProperty(propKey$224)) ) - switch (propKey$223) { + switch (propKey$224) { case "selected": domElement.selected = !1; break; @@ -14423,34 +14500,34 @@ function updateProperties(domElement, tag, lastProps, nextProps) { setProp( domElement, tag, - propKey$223, + propKey$224, null, nextProps, - propKey$207 + propKey$208 ); } for (lastDefaultValue in nextProps) if ( - ((propKey$207 = nextProps[lastDefaultValue]), + ((propKey$208 = nextProps[lastDefaultValue]), (propKey = lastProps[lastDefaultValue]), nextProps.hasOwnProperty(lastDefaultValue) && - propKey$207 !== propKey && - (null != propKey$207 || null != propKey)) + propKey$208 !== propKey && + (null != propKey$208 || null != propKey)) ) switch (lastDefaultValue) { case "selected": - propKey$207 !== propKey && (viewTransitionMutationContext = !0); + propKey$208 !== propKey && (viewTransitionMutationContext = !0); domElement.selected = - propKey$207 && - "function" !== typeof propKey$207 && - "symbol" !== typeof propKey$207; + propKey$208 && + "function" !== typeof propKey$208 && + "symbol" !== typeof propKey$208; break; default: setProp( domElement, tag, lastDefaultValue, - propKey$207, + propKey$208, nextProps, propKey ); @@ -14471,24 +14548,24 @@ function updateProperties(domElement, tag, lastProps, nextProps) { case "track": case "wbr": case "menuitem": - for (var propKey$228 in lastProps) - (propKey$207 = lastProps[propKey$228]), - lastProps.hasOwnProperty(propKey$228) && - null != propKey$207 && - !nextProps.hasOwnProperty(propKey$228) && - setProp(domElement, tag, propKey$228, null, nextProps, propKey$207); + for (var propKey$229 in lastProps) + (propKey$208 = lastProps[propKey$229]), + lastProps.hasOwnProperty(propKey$229) && + null != propKey$208 && + !nextProps.hasOwnProperty(propKey$229) && + setProp(domElement, tag, propKey$229, null, nextProps, propKey$208); for (checked in nextProps) if ( - ((propKey$207 = nextProps[checked]), + ((propKey$208 = nextProps[checked]), (propKey = lastProps[checked]), nextProps.hasOwnProperty(checked) && - propKey$207 !== propKey && - (null != propKey$207 || null != propKey)) + propKey$208 !== propKey && + (null != propKey$208 || null != propKey)) ) switch (checked) { case "children": case "dangerouslySetInnerHTML": - if (null != propKey$207) + if (null != propKey$208) throw Error(formatProdErrorMessage(137, tag)); break; default: @@ -14496,7 +14573,7 @@ function updateProperties(domElement, tag, lastProps, nextProps) { domElement, tag, checked, - propKey$207, + propKey$208, nextProps, propKey ); @@ -14504,49 +14581,49 @@ function updateProperties(domElement, tag, lastProps, nextProps) { return; default: if (isCustomElement(tag)) { - for (var propKey$233 in lastProps) - (propKey$207 = lastProps[propKey$233]), - lastProps.hasOwnProperty(propKey$233) && - void 0 !== propKey$207 && - !nextProps.hasOwnProperty(propKey$233) && + for (var propKey$234 in lastProps) + (propKey$208 = lastProps[propKey$234]), + lastProps.hasOwnProperty(propKey$234) && + void 0 !== propKey$208 && + !nextProps.hasOwnProperty(propKey$234) && setPropOnCustomElement( domElement, tag, - propKey$233, + propKey$234, void 0, nextProps, - propKey$207 + propKey$208 ); for (defaultChecked in nextProps) - (propKey$207 = nextProps[defaultChecked]), + (propKey$208 = nextProps[defaultChecked]), (propKey = lastProps[defaultChecked]), !nextProps.hasOwnProperty(defaultChecked) || - propKey$207 === propKey || - (void 0 === propKey$207 && void 0 === propKey) || + propKey$208 === propKey || + (void 0 === propKey$208 && void 0 === propKey) || setPropOnCustomElement( domElement, tag, defaultChecked, - propKey$207, + propKey$208, nextProps, propKey ); return; } } - for (var propKey$238 in lastProps) - (propKey$207 = lastProps[propKey$238]), - lastProps.hasOwnProperty(propKey$238) && - null != propKey$207 && - !nextProps.hasOwnProperty(propKey$238) && - setProp(domElement, tag, propKey$238, null, nextProps, propKey$207); + for (var propKey$239 in lastProps) + (propKey$208 = lastProps[propKey$239]), + lastProps.hasOwnProperty(propKey$239) && + null != propKey$208 && + !nextProps.hasOwnProperty(propKey$239) && + setProp(domElement, tag, propKey$239, null, nextProps, propKey$208); for (lastProp in nextProps) - (propKey$207 = nextProps[lastProp]), + (propKey$208 = nextProps[lastProp]), (propKey = lastProps[lastProp]), !nextProps.hasOwnProperty(lastProp) || - propKey$207 === propKey || - (null == propKey$207 && null == propKey) || - setProp(domElement, tag, lastProp, propKey$207, nextProps, propKey); + propKey$208 === propKey || + (null == propKey$208 && null == propKey) || + setProp(domElement, tag, lastProp, propKey$208, nextProps, propKey); } var eventsEnabled = null, selectionInformation = null; @@ -14745,6 +14822,43 @@ function startViewTransition( return !1; } } +function ViewTransitionPseudoElement(pseudo, name) { + this._scope = document.documentElement; + this._selector = "::view-transition-" + pseudo + "(" + name + ")"; +} +ViewTransitionPseudoElement.prototype.animate = function (keyframes, options) { + options = + "number" === typeof options ? { duration: options } : assign({}, options); + options.pseudoElement = this._selector; + return this._scope.animate(keyframes, options); +}; +ViewTransitionPseudoElement.prototype.getAnimations = function () { + for ( + var scope = this._scope, + selector = this._selector, + animations = scope.getAnimations({ subtree: !0 }), + result = [], + i = 0; + i < animations.length; + i++ + ) { + var effect = animations[i].effect; + null !== effect && + effect.target === scope && + effect.pseudoElement === selector && + result.push(animations[i]); + } + return result; +}; +function createViewTransitionInstance(name) { + return { + name: name, + group: new ViewTransitionPseudoElement("group", name), + imagePair: new ViewTransitionPseudoElement("image-pair", name), + old: new ViewTransitionPseudoElement("old", name), + new: new ViewTransitionPseudoElement("new", name) + }; +} function clearContainerSparingly(container) { var nextNode = container.firstChild; nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling); @@ -15274,26 +15388,26 @@ function getResource(type, currentProps, pendingProps, currentResource) { "string" === typeof pendingProps.precedence ) { type = getStyleKey(pendingProps.href); - var styles$246 = getResourcesFromRoot( + var styles$247 = getResourcesFromRoot( JSCompiler_inline_result ).hoistableStyles, - resource$247 = styles$246.get(type); - resource$247 || + resource$248 = styles$247.get(type); + resource$248 || ((JSCompiler_inline_result = JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result), - (resource$247 = { + (resource$248 = { type: "stylesheet", instance: null, count: 0, state: { loading: 0, preload: null } }), - styles$246.set(type, resource$247), - (styles$246 = JSCompiler_inline_result.querySelector( + styles$247.set(type, resource$248), + (styles$247 = JSCompiler_inline_result.querySelector( getStylesheetSelectorFromKey(type) )) && - !styles$246._p && - ((resource$247.instance = styles$246), - (resource$247.state.loading = 5)), + !styles$247._p && + ((resource$248.instance = styles$247), + (resource$248.state.loading = 5)), preloadPropsMap.has(type) || ((pendingProps = { rel: "preload", @@ -15306,16 +15420,16 @@ function getResource(type, currentProps, pendingProps, currentResource) { referrerPolicy: pendingProps.referrerPolicy }), preloadPropsMap.set(type, pendingProps), - styles$246 || + styles$247 || preloadStylesheet( JSCompiler_inline_result, type, pendingProps, - resource$247.state + resource$248.state ))); if (currentProps && null === currentResource) throw Error(formatProdErrorMessage(528, "")); - return resource$247; + return resource$248; } if (currentProps && null !== currentResource) throw Error(formatProdErrorMessage(529, "")); @@ -15412,37 +15526,37 @@ function acquireResource(hoistableRoot, resource, props) { return (resource.instance = instance); case "stylesheet": styleProps = getStyleKey(props.href); - var instance$252 = hoistableRoot.querySelector( + var instance$253 = hoistableRoot.querySelector( getStylesheetSelectorFromKey(styleProps) ); - if (instance$252) + if (instance$253) return ( (resource.state.loading |= 4), - (resource.instance = instance$252), - markNodeAsHoistable(instance$252), - instance$252 + (resource.instance = instance$253), + markNodeAsHoistable(instance$253), + instance$253 ); instance = stylesheetPropsFromRawProps(props); (styleProps = preloadPropsMap.get(styleProps)) && adoptPreloadPropsForStylesheet(instance, styleProps); - instance$252 = ( + instance$253 = ( hoistableRoot.ownerDocument || hoistableRoot ).createElement("link"); - markNodeAsHoistable(instance$252); - var linkInstance = instance$252; + markNodeAsHoistable(instance$253); + var linkInstance = instance$253; linkInstance._p = new Promise(function (resolve, reject) { linkInstance.onload = resolve; linkInstance.onerror = reject; }); - setInitialProperties(instance$252, "link", instance); + setInitialProperties(instance$253, "link", instance); resource.state.loading |= 4; - insertStylesheet(instance$252, props.precedence, hoistableRoot); - return (resource.instance = instance$252); + insertStylesheet(instance$253, props.precedence, hoistableRoot); + return (resource.instance = instance$253); case "script": - instance$252 = getScriptKey(props.src); + instance$253 = getScriptKey(props.src); if ( (styleProps = hoistableRoot.querySelector( - getScriptSelectorFromKey(instance$252) + getScriptSelectorFromKey(instance$253) )) ) return ( @@ -15451,7 +15565,7 @@ function acquireResource(hoistableRoot, resource, props) { styleProps ); instance = props; - if ((styleProps = preloadPropsMap.get(instance$252))) + if ((styleProps = preloadPropsMap.get(instance$253))) (instance = assign({}, props)), adoptPreloadPropsForScript(instance, styleProps); hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot; @@ -16470,16 +16584,16 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { 0 === i && attemptExplicitHydrationTarget(target); } }; -var isomorphicReactPackageVersion$jscomp$inline_1803 = React.version; +var isomorphicReactPackageVersion$jscomp$inline_1823 = React.version; if ( - "19.1.0-experimental-056073de-20250109" !== - isomorphicReactPackageVersion$jscomp$inline_1803 + "19.1.0-experimental-540efebc-20250112" !== + isomorphicReactPackageVersion$jscomp$inline_1823 ) throw Error( formatProdErrorMessage( 527, - isomorphicReactPackageVersion$jscomp$inline_1803, - "19.1.0-experimental-056073de-20250109" + isomorphicReactPackageVersion$jscomp$inline_1823, + "19.1.0-experimental-540efebc-20250112" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -16499,24 +16613,24 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { null === componentOrElement ? null : componentOrElement.stateNode; return componentOrElement; }; -var internals$jscomp$inline_2329 = { +var internals$jscomp$inline_2357 = { bundleType: 0, - version: "19.1.0-experimental-056073de-20250109", + version: "19.1.0-experimental-540efebc-20250112", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-056073de-20250109" + reconcilerVersion: "19.1.0-experimental-540efebc-20250112" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_2330 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_2358 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_2330.isDisabled && - hook$jscomp$inline_2330.supportsFiber + !hook$jscomp$inline_2358.isDisabled && + hook$jscomp$inline_2358.supportsFiber ) try { - (rendererID = hook$jscomp$inline_2330.inject( - internals$jscomp$inline_2329 + (rendererID = hook$jscomp$inline_2358.inject( + internals$jscomp$inline_2357 )), - (injectedHook = hook$jscomp$inline_2330); + (injectedHook = hook$jscomp$inline_2358); } catch (err) {} } exports.createComponentSelector = function (component) { @@ -16761,4 +16875,4 @@ exports.observeVisibleRects = function ( } }; }; -exports.version = "19.1.0-experimental-056073de-20250109"; +exports.version = "19.1.0-experimental-540efebc-20250112"; 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 546f0c07fa06a..64b53392d6a25 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 @@ -416,7 +416,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.1.0-experimental-056073de-20250109"; + exports.version = "19.1.0-experimental-540efebc-20250112"; "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 8080492a35f06..b8616bbd1d513 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 @@ -207,4 +207,4 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.1.0-experimental-056073de-20250109"; +exports.version = "19.1.0-experimental-540efebc-20250112"; 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 00613daed9c89..c4fb4ae873aeb 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 @@ -336,5 +336,5 @@ })) : Internals.d.m(href)); }; - exports.version = "19.1.0-experimental-056073de-20250109"; + exports.version = "19.1.0-experimental-540efebc-20250112"; })(); 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 3410fab178489..8f00bb59e0f11 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 @@ -149,4 +149,4 @@ exports.preloadModule = function (href, options) { }); } else Internals.d.m(href); }; -exports.version = "19.1.0-experimental-056073de-20250109"; +exports.version = "19.1.0-experimental-540efebc-20250112"; diff --git a/packages/next/src/compiled/react-dom-experimental/package.json b/packages/next/src/compiled/react-dom-experimental/package.json index af15bd08037f1..ec8e9c557d664 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-056073de-20250109" + "scheduler": "0.0.0-experimental-540efebc-20250112" }, "peerDependencies": { - "react": "0.0.0-experimental-056073de-20250109" + "react": "0.0.0-experimental-540efebc-20250112" }, "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 0099a78247521..9af4c1c753df7 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 @@ -3635,6 +3635,24 @@ topLevelEventsToReactNames.set(domEventName, reactName); registerTwoPhaseEvent(reactName, [domEventName]); } + function createCapturedValueAtFiber(value, source) { + if ("object" === typeof value && null !== value) { + var existing = CapturedStacks.get(value); + if (void 0 !== existing) return existing; + source = { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; + CapturedStacks.set(value, source); + return source; + } + return { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; + } function finishQueueingConcurrentUpdates() { for ( var endIndex = concurrentQueuesIndex, @@ -4494,23 +4512,128 @@ cache.controller.abort(); }); } - function createCapturedValueAtFiber(value, source) { - if ("object" === typeof value && null !== value) { - var existing = CapturedStacks.get(value); - if (void 0 !== existing) return existing; - source = { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; - CapturedStacks.set(value, source); - return source; + function warnOnInvalidCallback(callback) { + if (null !== callback && "function" !== typeof callback) { + var key = String(callback); + didWarnOnInvalidCallback.has(key) || + (didWarnOnInvalidCallback.add(key), + console.error( + "Expected the last optional `callback` argument to be a function. Instead received: %s.", + callback + )); } - return { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; + } + function applyDerivedStateFromProps( + workInProgress, + ctor, + getDerivedStateFromProps, + nextProps + ) { + var prevState = workInProgress.memoizedState, + partialState = getDerivedStateFromProps(nextProps, prevState); + if (workInProgress.mode & StrictLegacyMode) { + setIsStrictModeForDevtools(!0); + try { + partialState = getDerivedStateFromProps(nextProps, prevState); + } finally { + setIsStrictModeForDevtools(!1); + } + } + void 0 === partialState && + ((ctor = getComponentNameFromType(ctor) || "Component"), + didWarnAboutUndefinedDerivedState.has(ctor) || + (didWarnAboutUndefinedDerivedState.add(ctor), + console.error( + "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.", + ctor + ))); + prevState = + null === partialState || void 0 === partialState + ? prevState + : assign({}, prevState, partialState); + workInProgress.memoizedState = prevState; + 0 === workInProgress.lanes && + (workInProgress.updateQueue.baseState = prevState); + } + function checkShouldComponentUpdate( + workInProgress, + ctor, + oldProps, + newProps, + oldState, + newState, + nextContext + ) { + var instance = workInProgress.stateNode; + if ("function" === typeof instance.shouldComponentUpdate) { + oldProps = instance.shouldComponentUpdate( + newProps, + newState, + nextContext + ); + if (workInProgress.mode & StrictLegacyMode) { + setIsStrictModeForDevtools(!0); + try { + oldProps = instance.shouldComponentUpdate( + newProps, + newState, + nextContext + ); + } finally { + setIsStrictModeForDevtools(!1); + } + } + void 0 === oldProps && + console.error( + "%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.", + getComponentNameFromType(ctor) || "Component" + ); + return oldProps; + } + return ctor.prototype && ctor.prototype.isPureReactComponent + ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState) + : !0; + } + function callComponentWillReceiveProps( + workInProgress, + instance, + newProps, + nextContext + ) { + var oldState = instance.state; + "function" === typeof instance.componentWillReceiveProps && + instance.componentWillReceiveProps(newProps, nextContext); + "function" === typeof instance.UNSAFE_componentWillReceiveProps && + instance.UNSAFE_componentWillReceiveProps(newProps, nextContext); + instance.state !== oldState && + ((workInProgress = + getComponentNameFromFiber(workInProgress) || "Component"), + didWarnAboutStateAssignmentForComponent.has(workInProgress) || + (didWarnAboutStateAssignmentForComponent.add(workInProgress), + console.error( + "%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.", + workInProgress + )), + classComponentUpdater.enqueueReplaceState( + instance, + instance.state, + null + )); + } + function resolveClassComponentProps(Component, baseProps) { + var newProps = baseProps; + if ("ref" in baseProps) { + newProps = {}; + for (var propName in baseProps) + "ref" !== propName && (newProps[propName] = baseProps[propName]); + } + if ((Component = Component.defaultProps)) { + newProps === baseProps && (newProps = assign({}, newProps)); + for (var _propName in Component) + void 0 === newProps[_propName] && + (newProps[_propName] = Component[_propName]); + } + return newProps; } function pushTreeFork(workInProgress, totalChildren) { warnIfNotHydrating(); @@ -4574,496 +4697,127 @@ "Expected to be hydrating. This is a bug in React. Please file an issue." ); } - function buildHydrationDiffNode(fiber, distanceFromLeaf) { - if (null === fiber.return) { - if (null === hydrationDiffRootDEV) - hydrationDiffRootDEV = { - fiber: fiber, - children: [], - serverProps: void 0, - serverTail: [], - distanceFromLeaf: distanceFromLeaf - }; - else { - if (hydrationDiffRootDEV.fiber !== fiber) - throw Error( - "Saw multiple hydration diff roots in a pass. This is a bug in React." - ); - hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf && - (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf); - } - return hydrationDiffRootDEV; - } - var siblings = buildHydrationDiffNode( - fiber.return, - distanceFromLeaf + 1 - ).children; - if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber) - return ( - (siblings = siblings[siblings.length - 1]), - siblings.distanceFromLeaf > distanceFromLeaf && - (siblings.distanceFromLeaf = distanceFromLeaf), - siblings - ); - distanceFromLeaf = { - fiber: fiber, - children: [], - serverProps: void 0, - serverTail: [], - distanceFromLeaf: distanceFromLeaf - }; - siblings.push(distanceFromLeaf); - return distanceFromLeaf; - } - function warnNonHydratedInstance(fiber, rejectedCandidate) { - didSuspendOrErrorDEV || - ((fiber = buildHydrationDiffNode(fiber, 0)), - (fiber.serverProps = null), - null !== rejectedCandidate && - ((rejectedCandidate = - describeHydratableInstanceForDevWarnings(rejectedCandidate)), - fiber.serverTail.push(rejectedCandidate))); + function createThenableState() { + return { didWarnAboutUncachedPromise: !1, thenables: [] }; } - function throwOnHydrationMismatch(fiber) { - var diff = "", - diffRoot = hydrationDiffRootDEV; - null !== diffRoot && - ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot))); - queueHydrationError( - createCapturedValueAtFiber( - Error( - "Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\nhttps://react.dev/link/hydration-mismatch" + - diff - ), - fiber - ) - ); - throw HydrationMismatchException; + function isThenableResolved(thenable) { + thenable = thenable.status; + return "fulfilled" === thenable || "rejected" === thenable; } - function prepareToHydrateHostInstance(fiber) { - var didHydrate = fiber.stateNode; - var type = fiber.type, - props = fiber.memoizedProps; - didHydrate[internalInstanceKey] = fiber; - didHydrate[internalPropsKey] = props; - validatePropertiesInDevelopment(type, props); - switch (type) { - case "dialog": - listenToNonDelegatedEvent("cancel", didHydrate); - listenToNonDelegatedEvent("close", didHydrate); - break; - case "iframe": - case "object": - case "embed": - listenToNonDelegatedEvent("load", didHydrate); - break; - case "video": - case "audio": - for (type = 0; type < mediaEventTypes.length; type++) - listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate); - break; - case "source": - listenToNonDelegatedEvent("error", didHydrate); - break; - case "img": - case "image": - case "link": - listenToNonDelegatedEvent("error", didHydrate); - listenToNonDelegatedEvent("load", didHydrate); - break; - case "details": - listenToNonDelegatedEvent("toggle", didHydrate); - break; - case "input": - checkControlledValueProps("input", props); - listenToNonDelegatedEvent("invalid", didHydrate); - validateInputProps(didHydrate, props); - initInput( - didHydrate, - props.value, - props.defaultValue, - props.checked, - props.defaultChecked, - props.type, - props.name, - !0 + function noop$3() {} + function trackUsedThenable(thenableState, thenable, index) { + null !== ReactSharedInternals.actQueue && + (ReactSharedInternals.didUsePromise = !0); + var trackedThenables = thenableState.thenables; + index = trackedThenables[index]; + void 0 === index + ? trackedThenables.push(thenable) + : index !== thenable && + (thenableState.didWarnAboutUncachedPromise || + ((thenableState.didWarnAboutUncachedPromise = !0), + console.error( + "A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework." + )), + thenable.then(noop$3, noop$3), + (thenable = index)); + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw ( + ((thenableState = thenable.reason), + checkIfUseWrappedInAsyncCatch(thenableState), + thenableState) ); - track(didHydrate); - break; - case "option": - validateOptionProps(didHydrate, props); - break; - case "select": - checkControlledValueProps("select", props); - listenToNonDelegatedEvent("invalid", didHydrate); - validateSelectProps(didHydrate, props); - break; - case "textarea": - checkControlledValueProps("textarea", props), - listenToNonDelegatedEvent("invalid", didHydrate), - validateTextareaProps(didHydrate, props), - initTextarea( - didHydrate, - props.value, - props.defaultValue, - props.children - ), - track(didHydrate); + default: + if ("string" === typeof thenable.status) + thenable.then(noop$3, noop$3); + else { + thenableState = workInProgressRoot; + if ( + null !== thenableState && + 100 < thenableState.shellSuspendCounter + ) + throw Error( + "async/await is not yet supported in Client Components, only Server Components. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." + ); + thenableState = thenable; + thenableState.status = "pending"; + thenableState.then( + function (fulfilledValue) { + if ("pending" === thenable.status) { + var fulfilledThenable = thenable; + fulfilledThenable.status = "fulfilled"; + fulfilledThenable.value = fulfilledValue; + } + }, + function (error) { + if ("pending" === thenable.status) { + var rejectedThenable = thenable; + rejectedThenable.status = "rejected"; + rejectedThenable.reason = error; + } + } + ); + } + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw ( + ((thenableState = thenable.reason), + checkIfUseWrappedInAsyncCatch(thenableState), + thenableState) + ); + } + suspendedThenable = thenable; + needsToResetSuspendedThenableDEV = !0; + throw SuspenseException; } - type = props.children; - ("string" !== typeof type && - "number" !== typeof type && - "bigint" !== typeof type) || - didHydrate.textContent === "" + type || - !0 === props.suppressHydrationWarning || - checkForUnmatchedText(didHydrate.textContent, type) - ? (null != props.popover && - (listenToNonDelegatedEvent("beforetoggle", didHydrate), - listenToNonDelegatedEvent("toggle", didHydrate)), - null != props.onScroll && - listenToNonDelegatedEvent("scroll", didHydrate), - null != props.onScrollEnd && - listenToNonDelegatedEvent("scrollend", didHydrate), - null != props.onClick && (didHydrate.onclick = noop$1), - (didHydrate = !0)) - : (didHydrate = !1); - didHydrate || throwOnHydrationMismatch(fiber); - } - function popToNextHostParent(fiber) { - for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) - switch (hydrationParentFiber.tag) { - case 3: - case 27: - rootOrSingletonContext = !0; - return; - case 5: - case 13: - rootOrSingletonContext = !1; - return; - default: - hydrationParentFiber = hydrationParentFiber.return; - } } - function popHydrationState(fiber) { - if (fiber !== hydrationParentFiber) return !1; - if (!isHydrating) - return popToNextHostParent(fiber), (isHydrating = !0), !1; - var shouldClear = !1, - JSCompiler_temp; - if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { - if ((JSCompiler_temp = 5 === fiber.tag)) - (JSCompiler_temp = fiber.type), - (JSCompiler_temp = - !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || - shouldSetTextContent(fiber.type, fiber.memoizedProps)); - JSCompiler_temp = !JSCompiler_temp; - } - JSCompiler_temp && (shouldClear = !0); - if (shouldClear && nextHydratableInstance) { - for (shouldClear = nextHydratableInstance; shouldClear; ) { - JSCompiler_temp = buildHydrationDiffNode(fiber, 0); - var description = - describeHydratableInstanceForDevWarnings(shouldClear); - JSCompiler_temp.serverTail.push(description); - shouldClear = - "Suspense" === description.type - ? getNextHydratableInstanceAfterSuspenseInstance(shouldClear) - : getNextHydratable(shouldClear.nextSibling); - } - throwOnHydrationMismatch(fiber); - } - popToNextHostParent(fiber); - if (13 === fiber.tag) { - fiber = fiber.memoizedState; - fiber = null !== fiber ? fiber.dehydrated : null; - if (!fiber) - throw Error( - "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue." - ); - nextHydratableInstance = - getNextHydratableInstanceAfterSuspenseInstance(fiber); - } else - nextHydratableInstance = hydrationParentFiber - ? getNextHydratable(fiber.stateNode.nextSibling) - : null; - return !0; + function getSuspendedThenable() { + if (null === suspendedThenable) + throw Error( + "Expected a suspended thenable. This is a bug in React. Please file an issue." + ); + var thenable = suspendedThenable; + suspendedThenable = null; + needsToResetSuspendedThenableDEV = !1; + return thenable; } - function resetHydrationState() { - nextHydratableInstance = hydrationParentFiber = null; - didSuspendOrErrorDEV = isHydrating = !1; + function checkIfUseWrappedInAsyncCatch(rejectedReason) { + if ( + rejectedReason === SuspenseException || + rejectedReason === SuspenseActionException + ) + throw Error( + "Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." + ); } - function upgradeHydrationErrorsToRecoverable() { - var queuedErrors = hydrationErrors; - null !== queuedErrors && - (null === workInProgressRootRecoverableErrors - ? (workInProgressRootRecoverableErrors = queuedErrors) - : workInProgressRootRecoverableErrors.push.apply( - workInProgressRootRecoverableErrors, - queuedErrors - ), - (hydrationErrors = null)); - return queuedErrors; + function pushHiddenContext(fiber, context) { + var prevEntangledRenderLanes = entangledRenderLanes; + push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber); + push(currentTreeHiddenStackCursor, context, fiber); + entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes; } - function queueHydrationError(error) { - null === hydrationErrors - ? (hydrationErrors = [error]) - : hydrationErrors.push(error); + function reuseHiddenContextOnStack(fiber) { + push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber); + push( + currentTreeHiddenStackCursor, + currentTreeHiddenStackCursor.current, + fiber + ); } - function emitPendingHydrationWarnings() { - var diffRoot = hydrationDiffRootDEV; - null !== diffRoot && - ((hydrationDiffRootDEV = null), - (diffRoot = describeDiff(diffRoot)), - console.error( - "A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\n%s%s", - "https://react.dev/link/hydration-mismatch", - diffRoot - )); + function popHiddenContext(fiber) { + entangledRenderLanes = prevEntangledRenderLanesCursor.current; + pop(currentTreeHiddenStackCursor, fiber); + pop(prevEntangledRenderLanesCursor, fiber); } - function warnOnInvalidCallback(callback) { - if (null !== callback && "function" !== typeof callback) { - var key = String(callback); - didWarnOnInvalidCallback.has(key) || - (didWarnOnInvalidCallback.add(key), - console.error( - "Expected the last optional `callback` argument to be a function. Instead received: %s.", - callback - )); - } - } - function applyDerivedStateFromProps( - workInProgress, - ctor, - getDerivedStateFromProps, - nextProps - ) { - var prevState = workInProgress.memoizedState, - partialState = getDerivedStateFromProps(nextProps, prevState); - if (workInProgress.mode & StrictLegacyMode) { - setIsStrictModeForDevtools(!0); - try { - partialState = getDerivedStateFromProps(nextProps, prevState); - } finally { - setIsStrictModeForDevtools(!1); - } - } - void 0 === partialState && - ((ctor = getComponentNameFromType(ctor) || "Component"), - didWarnAboutUndefinedDerivedState.has(ctor) || - (didWarnAboutUndefinedDerivedState.add(ctor), - console.error( - "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.", - ctor - ))); - prevState = - null === partialState || void 0 === partialState - ? prevState - : assign({}, prevState, partialState); - workInProgress.memoizedState = prevState; - 0 === workInProgress.lanes && - (workInProgress.updateQueue.baseState = prevState); - } - function checkShouldComponentUpdate( - workInProgress, - ctor, - oldProps, - newProps, - oldState, - newState, - nextContext - ) { - var instance = workInProgress.stateNode; - if ("function" === typeof instance.shouldComponentUpdate) { - oldProps = instance.shouldComponentUpdate( - newProps, - newState, - nextContext - ); - if (workInProgress.mode & StrictLegacyMode) { - setIsStrictModeForDevtools(!0); - try { - oldProps = instance.shouldComponentUpdate( - newProps, - newState, - nextContext - ); - } finally { - setIsStrictModeForDevtools(!1); - } - } - void 0 === oldProps && - console.error( - "%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.", - getComponentNameFromType(ctor) || "Component" - ); - return oldProps; - } - return ctor.prototype && ctor.prototype.isPureReactComponent - ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState) - : !0; - } - function callComponentWillReceiveProps( - workInProgress, - instance, - newProps, - nextContext - ) { - var oldState = instance.state; - "function" === typeof instance.componentWillReceiveProps && - instance.componentWillReceiveProps(newProps, nextContext); - "function" === typeof instance.UNSAFE_componentWillReceiveProps && - instance.UNSAFE_componentWillReceiveProps(newProps, nextContext); - instance.state !== oldState && - ((workInProgress = - getComponentNameFromFiber(workInProgress) || "Component"), - didWarnAboutStateAssignmentForComponent.has(workInProgress) || - (didWarnAboutStateAssignmentForComponent.add(workInProgress), - console.error( - "%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.", - workInProgress - )), - classComponentUpdater.enqueueReplaceState( - instance, - instance.state, - null - )); - } - function resolveClassComponentProps(Component, baseProps) { - var newProps = baseProps; - if ("ref" in baseProps) { - newProps = {}; - for (var propName in baseProps) - "ref" !== propName && (newProps[propName] = baseProps[propName]); - } - if ((Component = Component.defaultProps)) { - newProps === baseProps && (newProps = assign({}, newProps)); - for (var _propName in Component) - void 0 === newProps[_propName] && - (newProps[_propName] = Component[_propName]); - } - return newProps; - } - function createThenableState() { - return { didWarnAboutUncachedPromise: !1, thenables: [] }; - } - function isThenableResolved(thenable) { - thenable = thenable.status; - return "fulfilled" === thenable || "rejected" === thenable; - } - function noop$3() {} - function trackUsedThenable(thenableState, thenable, index) { - null !== ReactSharedInternals.actQueue && - (ReactSharedInternals.didUsePromise = !0); - var trackedThenables = thenableState.thenables; - index = trackedThenables[index]; - void 0 === index - ? trackedThenables.push(thenable) - : index !== thenable && - (thenableState.didWarnAboutUncachedPromise || - ((thenableState.didWarnAboutUncachedPromise = !0), - console.error( - "A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework." - )), - thenable.then(noop$3, noop$3), - (thenable = index)); - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw ( - ((thenableState = thenable.reason), - checkIfUseWrappedInAsyncCatch(thenableState), - thenableState) - ); - default: - if ("string" === typeof thenable.status) - thenable.then(noop$3, noop$3); - else { - thenableState = workInProgressRoot; - if ( - null !== thenableState && - 100 < thenableState.shellSuspendCounter - ) - throw Error( - "async/await is not yet supported in Client Components, only Server Components. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." - ); - thenableState = thenable; - thenableState.status = "pending"; - thenableState.then( - function (fulfilledValue) { - if ("pending" === thenable.status) { - var fulfilledThenable = thenable; - fulfilledThenable.status = "fulfilled"; - fulfilledThenable.value = fulfilledValue; - } - }, - function (error) { - if ("pending" === thenable.status) { - var rejectedThenable = thenable; - rejectedThenable.status = "rejected"; - rejectedThenable.reason = error; - } - } - ); - } - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw ( - ((thenableState = thenable.reason), - checkIfUseWrappedInAsyncCatch(thenableState), - thenableState) - ); - } - suspendedThenable = thenable; - needsToResetSuspendedThenableDEV = !0; - throw SuspenseException; - } - } - function getSuspendedThenable() { - if (null === suspendedThenable) - throw Error( - "Expected a suspended thenable. This is a bug in React. Please file an issue." - ); - var thenable = suspendedThenable; - suspendedThenable = null; - needsToResetSuspendedThenableDEV = !1; - return thenable; - } - function checkIfUseWrappedInAsyncCatch(rejectedReason) { - if ( - rejectedReason === SuspenseException || - rejectedReason === SuspenseActionException - ) - throw Error( - "Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." - ); - } - function pushHiddenContext(fiber, context) { - var prevEntangledRenderLanes = entangledRenderLanes; - push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber); - push(currentTreeHiddenStackCursor, context, fiber); - entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes; - } - function reuseHiddenContextOnStack(fiber) { - push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber); - push( - currentTreeHiddenStackCursor, - currentTreeHiddenStackCursor.current, - fiber - ); - } - function popHiddenContext(fiber) { - entangledRenderLanes = prevEntangledRenderLanesCursor.current; - pop(currentTreeHiddenStackCursor, fiber); - pop(prevEntangledRenderLanesCursor, fiber); - } - function peekCacheFromPool() { - var cacheResumedFromPreviousRender = resumedCache.current; - return null !== cacheResumedFromPreviousRender - ? cacheResumedFromPreviousRender - : workInProgressRoot.pooledCache; + function peekCacheFromPool() { + var cacheResumedFromPreviousRender = resumedCache.current; + return null !== cacheResumedFromPreviousRender + ? cacheResumedFromPreviousRender + : workInProgressRoot.pooledCache; } function pushTransition(offscreenWorkInProgress, prevCachePool) { null === prevCachePool @@ -9094,32 +8848,32 @@ return current; } function updateSuspenseComponent(current, workInProgress, renderLanes) { - var JSCompiler_object_inline_digest_2379; - var JSCompiler_object_inline_stack_2380 = workInProgress.pendingProps; + var JSCompiler_object_inline_digest_2395; + var JSCompiler_object_inline_stack_2396 = workInProgress.pendingProps; shouldSuspendImpl(workInProgress) && (workInProgress.flags |= 128); - var JSCompiler_object_inline_componentStack_2381 = !1; + var JSCompiler_object_inline_componentStack_2397 = !1; var didSuspend = 0 !== (workInProgress.flags & 128); - (JSCompiler_object_inline_digest_2379 = didSuspend) || - (JSCompiler_object_inline_digest_2379 = + (JSCompiler_object_inline_digest_2395 = didSuspend) || + (JSCompiler_object_inline_digest_2395 = null !== current && null === current.memoizedState ? !1 : 0 !== (suspenseStackCursor.current & ForceSuspenseFallback)); - JSCompiler_object_inline_digest_2379 && - ((JSCompiler_object_inline_componentStack_2381 = !0), + JSCompiler_object_inline_digest_2395 && + ((JSCompiler_object_inline_componentStack_2397 = !0), (workInProgress.flags &= -129)); - JSCompiler_object_inline_digest_2379 = 0 !== (workInProgress.flags & 32); + JSCompiler_object_inline_digest_2395 = 0 !== (workInProgress.flags & 32); workInProgress.flags &= -33; if (null === current) { if (isHydrating) { - JSCompiler_object_inline_componentStack_2381 + JSCompiler_object_inline_componentStack_2397 ? pushPrimaryTreeSuspenseHandler(workInProgress) : reuseSuspenseHandlerOnStack(workInProgress); if (isHydrating) { - var JSCompiler_object_inline_message_2378 = nextHydratableInstance; + var JSCompiler_object_inline_message_2394 = nextHydratableInstance; var JSCompiler_temp; - if (!(JSCompiler_temp = !JSCompiler_object_inline_message_2378)) { + if (!(JSCompiler_temp = !JSCompiler_object_inline_message_2394)) { c: { - var instance = JSCompiler_object_inline_message_2378; + var instance = JSCompiler_object_inline_message_2394; for ( JSCompiler_temp = rootOrSingletonContext; 8 !== instance.nodeType; @@ -9161,77 +8915,77 @@ JSCompiler_temp && (warnNonHydratedInstance( workInProgress, - JSCompiler_object_inline_message_2378 + JSCompiler_object_inline_message_2394 ), throwOnHydrationMismatch(workInProgress)); } - JSCompiler_object_inline_message_2378 = workInProgress.memoizedState; + JSCompiler_object_inline_message_2394 = workInProgress.memoizedState; if ( - null !== JSCompiler_object_inline_message_2378 && - ((JSCompiler_object_inline_message_2378 = - JSCompiler_object_inline_message_2378.dehydrated), - null !== JSCompiler_object_inline_message_2378) + null !== JSCompiler_object_inline_message_2394 && + ((JSCompiler_object_inline_message_2394 = + JSCompiler_object_inline_message_2394.dehydrated), + null !== JSCompiler_object_inline_message_2394) ) return ( - isSuspenseInstanceFallback(JSCompiler_object_inline_message_2378) + isSuspenseInstanceFallback(JSCompiler_object_inline_message_2394) ? (workInProgress.lanes = 32) : (workInProgress.lanes = 536870912), null ); popSuspenseHandler(workInProgress); } - JSCompiler_object_inline_message_2378 = - JSCompiler_object_inline_stack_2380.children; - JSCompiler_object_inline_stack_2380 = - JSCompiler_object_inline_stack_2380.fallback; - if (JSCompiler_object_inline_componentStack_2381) + JSCompiler_object_inline_message_2394 = + JSCompiler_object_inline_stack_2396.children; + JSCompiler_object_inline_stack_2396 = + JSCompiler_object_inline_stack_2396.fallback; + if (JSCompiler_object_inline_componentStack_2397) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_componentStack_2381 = + (JSCompiler_object_inline_componentStack_2397 = workInProgress.mode), - (JSCompiler_object_inline_message_2378 = + (JSCompiler_object_inline_message_2394 = mountWorkInProgressOffscreenFiber( { mode: "hidden", - children: JSCompiler_object_inline_message_2378 + children: JSCompiler_object_inline_message_2394 }, - JSCompiler_object_inline_componentStack_2381 + JSCompiler_object_inline_componentStack_2397 )), - (JSCompiler_object_inline_stack_2380 = createFiberFromFragment( - JSCompiler_object_inline_stack_2380, - JSCompiler_object_inline_componentStack_2381, + (JSCompiler_object_inline_stack_2396 = createFiberFromFragment( + JSCompiler_object_inline_stack_2396, + JSCompiler_object_inline_componentStack_2397, renderLanes, null )), - (JSCompiler_object_inline_message_2378.return = workInProgress), - (JSCompiler_object_inline_stack_2380.return = workInProgress), - (JSCompiler_object_inline_message_2378.sibling = - JSCompiler_object_inline_stack_2380), - (workInProgress.child = JSCompiler_object_inline_message_2378), - (JSCompiler_object_inline_componentStack_2381 = + (JSCompiler_object_inline_message_2394.return = workInProgress), + (JSCompiler_object_inline_stack_2396.return = workInProgress), + (JSCompiler_object_inline_message_2394.sibling = + JSCompiler_object_inline_stack_2396), + (workInProgress.child = JSCompiler_object_inline_message_2394), + (JSCompiler_object_inline_componentStack_2397 = workInProgress.child), - (JSCompiler_object_inline_componentStack_2381.memoizedState = + (JSCompiler_object_inline_componentStack_2397.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_componentStack_2381.childLanes = + (JSCompiler_object_inline_componentStack_2397.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_digest_2379, + JSCompiler_object_inline_digest_2395, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - JSCompiler_object_inline_stack_2380 + JSCompiler_object_inline_stack_2396 ); pushPrimaryTreeSuspenseHandler(workInProgress); return mountSuspensePrimaryChildren( workInProgress, - JSCompiler_object_inline_message_2378 + JSCompiler_object_inline_message_2394 ); } var prevState = current.memoizedState; if ( null !== prevState && - ((JSCompiler_object_inline_message_2378 = prevState.dehydrated), - null !== JSCompiler_object_inline_message_2378) + ((JSCompiler_object_inline_message_2394 = prevState.dehydrated), + null !== JSCompiler_object_inline_message_2394) ) { if (didSuspend) workInProgress.flags & 256 @@ -9248,94 +9002,94 @@ (workInProgress.flags |= 128), (workInProgress = null)) : (reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_componentStack_2381 = - JSCompiler_object_inline_stack_2380.fallback), - (JSCompiler_object_inline_message_2378 = workInProgress.mode), - (JSCompiler_object_inline_stack_2380 = + (JSCompiler_object_inline_componentStack_2397 = + JSCompiler_object_inline_stack_2396.fallback), + (JSCompiler_object_inline_message_2394 = workInProgress.mode), + (JSCompiler_object_inline_stack_2396 = mountWorkInProgressOffscreenFiber( { mode: "visible", - children: JSCompiler_object_inline_stack_2380.children + children: JSCompiler_object_inline_stack_2396.children }, - JSCompiler_object_inline_message_2378 + JSCompiler_object_inline_message_2394 )), - (JSCompiler_object_inline_componentStack_2381 = + (JSCompiler_object_inline_componentStack_2397 = createFiberFromFragment( - JSCompiler_object_inline_componentStack_2381, - JSCompiler_object_inline_message_2378, + JSCompiler_object_inline_componentStack_2397, + JSCompiler_object_inline_message_2394, renderLanes, null )), - (JSCompiler_object_inline_componentStack_2381.flags |= 2), - (JSCompiler_object_inline_stack_2380.return = workInProgress), - (JSCompiler_object_inline_componentStack_2381.return = + (JSCompiler_object_inline_componentStack_2397.flags |= 2), + (JSCompiler_object_inline_stack_2396.return = workInProgress), + (JSCompiler_object_inline_componentStack_2397.return = workInProgress), - (JSCompiler_object_inline_stack_2380.sibling = - JSCompiler_object_inline_componentStack_2381), - (workInProgress.child = JSCompiler_object_inline_stack_2380), + (JSCompiler_object_inline_stack_2396.sibling = + JSCompiler_object_inline_componentStack_2397), + (workInProgress.child = JSCompiler_object_inline_stack_2396), reconcileChildFibers( workInProgress, current.child, null, renderLanes ), - (JSCompiler_object_inline_stack_2380 = workInProgress.child), - (JSCompiler_object_inline_stack_2380.memoizedState = + (JSCompiler_object_inline_stack_2396 = workInProgress.child), + (JSCompiler_object_inline_stack_2396.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_stack_2380.childLanes = + (JSCompiler_object_inline_stack_2396.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_digest_2379, + JSCompiler_object_inline_digest_2395, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), (workInProgress = - JSCompiler_object_inline_componentStack_2381)); + JSCompiler_object_inline_componentStack_2397)); else if ( (pushPrimaryTreeSuspenseHandler(workInProgress), isHydrating && console.error( "We should not be hydrating here. This is a bug in React. Please file a bug." ), - isSuspenseInstanceFallback(JSCompiler_object_inline_message_2378)) + isSuspenseInstanceFallback(JSCompiler_object_inline_message_2394)) ) { - JSCompiler_object_inline_digest_2379 = - JSCompiler_object_inline_message_2378.nextSibling && - JSCompiler_object_inline_message_2378.nextSibling.dataset; - if (JSCompiler_object_inline_digest_2379) { - JSCompiler_temp = JSCompiler_object_inline_digest_2379.dgst; - var message = JSCompiler_object_inline_digest_2379.msg; - instance = JSCompiler_object_inline_digest_2379.stck; - var componentStack = JSCompiler_object_inline_digest_2379.cstck; + JSCompiler_object_inline_digest_2395 = + JSCompiler_object_inline_message_2394.nextSibling && + JSCompiler_object_inline_message_2394.nextSibling.dataset; + if (JSCompiler_object_inline_digest_2395) { + JSCompiler_temp = JSCompiler_object_inline_digest_2395.dgst; + var message = JSCompiler_object_inline_digest_2395.msg; + instance = JSCompiler_object_inline_digest_2395.stck; + var componentStack = JSCompiler_object_inline_digest_2395.cstck; } - JSCompiler_object_inline_message_2378 = message; - JSCompiler_object_inline_digest_2379 = JSCompiler_temp; - JSCompiler_object_inline_stack_2380 = instance; - JSCompiler_temp = JSCompiler_object_inline_componentStack_2381 = + JSCompiler_object_inline_message_2394 = message; + JSCompiler_object_inline_digest_2395 = JSCompiler_temp; + JSCompiler_object_inline_stack_2396 = instance; + JSCompiler_temp = JSCompiler_object_inline_componentStack_2397 = componentStack; - JSCompiler_object_inline_componentStack_2381 = - JSCompiler_object_inline_message_2378 - ? Error(JSCompiler_object_inline_message_2378) + JSCompiler_object_inline_componentStack_2397 = + JSCompiler_object_inline_message_2394 + ? Error(JSCompiler_object_inline_message_2394) : Error( "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." ); - JSCompiler_object_inline_componentStack_2381.stack = - JSCompiler_object_inline_stack_2380 || ""; - JSCompiler_object_inline_componentStack_2381.digest = - JSCompiler_object_inline_digest_2379; - JSCompiler_object_inline_digest_2379 = + JSCompiler_object_inline_componentStack_2397.stack = + JSCompiler_object_inline_stack_2396 || ""; + JSCompiler_object_inline_componentStack_2397.digest = + JSCompiler_object_inline_digest_2395; + JSCompiler_object_inline_digest_2395 = void 0 === JSCompiler_temp ? null : JSCompiler_temp; - JSCompiler_object_inline_stack_2380 = { - value: JSCompiler_object_inline_componentStack_2381, + JSCompiler_object_inline_stack_2396 = { + value: JSCompiler_object_inline_componentStack_2397, source: null, - stack: JSCompiler_object_inline_digest_2379 + stack: JSCompiler_object_inline_digest_2395 }; - "string" === typeof JSCompiler_object_inline_digest_2379 && + "string" === typeof JSCompiler_object_inline_digest_2395 && CapturedStacks.set( - JSCompiler_object_inline_componentStack_2381, - JSCompiler_object_inline_stack_2380 + JSCompiler_object_inline_componentStack_2397, + JSCompiler_object_inline_stack_2396 ); - queueHydrationError(JSCompiler_object_inline_stack_2380); + queueHydrationError(JSCompiler_object_inline_stack_2396); workInProgress = retrySuspenseComponentWithoutHydrating( current, workInProgress, @@ -9349,44 +9103,44 @@ renderLanes, !1 ), - (JSCompiler_object_inline_digest_2379 = + (JSCompiler_object_inline_digest_2395 = 0 !== (renderLanes & current.childLanes)), - didReceiveUpdate || JSCompiler_object_inline_digest_2379) + didReceiveUpdate || JSCompiler_object_inline_digest_2395) ) { - JSCompiler_object_inline_digest_2379 = workInProgressRoot; + JSCompiler_object_inline_digest_2395 = workInProgressRoot; if ( - null !== JSCompiler_object_inline_digest_2379 && - ((JSCompiler_object_inline_stack_2380 = renderLanes & -renderLanes), - (JSCompiler_object_inline_stack_2380 = - 0 !== (JSCompiler_object_inline_stack_2380 & 42) + null !== JSCompiler_object_inline_digest_2395 && + ((JSCompiler_object_inline_stack_2396 = renderLanes & -renderLanes), + (JSCompiler_object_inline_stack_2396 = + 0 !== (JSCompiler_object_inline_stack_2396 & 42) ? 1 : getBumpedLaneForHydrationByLane( - JSCompiler_object_inline_stack_2380 + JSCompiler_object_inline_stack_2396 )), - (JSCompiler_object_inline_stack_2380 = + (JSCompiler_object_inline_stack_2396 = 0 !== - (JSCompiler_object_inline_stack_2380 & - (JSCompiler_object_inline_digest_2379.suspendedLanes | + (JSCompiler_object_inline_stack_2396 & + (JSCompiler_object_inline_digest_2395.suspendedLanes | renderLanes)) ? 0 - : JSCompiler_object_inline_stack_2380), - 0 !== JSCompiler_object_inline_stack_2380 && - JSCompiler_object_inline_stack_2380 !== prevState.retryLane) + : JSCompiler_object_inline_stack_2396), + 0 !== JSCompiler_object_inline_stack_2396 && + JSCompiler_object_inline_stack_2396 !== prevState.retryLane) ) throw ( - ((prevState.retryLane = JSCompiler_object_inline_stack_2380), + ((prevState.retryLane = JSCompiler_object_inline_stack_2396), enqueueConcurrentRenderForLane( current, - JSCompiler_object_inline_stack_2380 + JSCompiler_object_inline_stack_2396 ), scheduleUpdateOnFiber( - JSCompiler_object_inline_digest_2379, + JSCompiler_object_inline_digest_2395, current, - JSCompiler_object_inline_stack_2380 + JSCompiler_object_inline_stack_2396 ), SelectiveHydrationException) ); - JSCompiler_object_inline_message_2378.data === + JSCompiler_object_inline_message_2394.data === SUSPENSE_PENDING_START_DATA || renderDidSuspendDelayIfPossible(); workInProgress = retrySuspenseComponentWithoutHydrating( current, @@ -9394,14 +9148,14 @@ renderLanes ); } else - JSCompiler_object_inline_message_2378.data === + JSCompiler_object_inline_message_2394.data === SUSPENSE_PENDING_START_DATA ? ((workInProgress.flags |= 192), (workInProgress.child = current.child), (workInProgress = null)) : ((current = prevState.treeContext), (nextHydratableInstance = getNextHydratable( - JSCompiler_object_inline_message_2378.nextSibling + JSCompiler_object_inline_message_2394.nextSibling )), (hydrationParentFiber = workInProgress), (isHydrating = !0), @@ -9419,57 +9173,57 @@ (treeContextProvider = workInProgress)), (workInProgress = mountSuspensePrimaryChildren( workInProgress, - JSCompiler_object_inline_stack_2380.children + JSCompiler_object_inline_stack_2396.children )), (workInProgress.flags |= 4096)); return workInProgress; } - if (JSCompiler_object_inline_componentStack_2381) + if (JSCompiler_object_inline_componentStack_2397) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_componentStack_2381 = - JSCompiler_object_inline_stack_2380.fallback), - (JSCompiler_object_inline_message_2378 = workInProgress.mode), + (JSCompiler_object_inline_componentStack_2397 = + JSCompiler_object_inline_stack_2396.fallback), + (JSCompiler_object_inline_message_2394 = workInProgress.mode), (JSCompiler_temp = current.child), (instance = JSCompiler_temp.sibling), - (JSCompiler_object_inline_stack_2380 = createWorkInProgress( + (JSCompiler_object_inline_stack_2396 = createWorkInProgress( JSCompiler_temp, { mode: "hidden", - children: JSCompiler_object_inline_stack_2380.children + children: JSCompiler_object_inline_stack_2396.children } )), - (JSCompiler_object_inline_stack_2380.subtreeFlags = + (JSCompiler_object_inline_stack_2396.subtreeFlags = JSCompiler_temp.subtreeFlags & 65011712), null !== instance - ? (JSCompiler_object_inline_componentStack_2381 = + ? (JSCompiler_object_inline_componentStack_2397 = createWorkInProgress( instance, - JSCompiler_object_inline_componentStack_2381 + JSCompiler_object_inline_componentStack_2397 )) - : ((JSCompiler_object_inline_componentStack_2381 = + : ((JSCompiler_object_inline_componentStack_2397 = createFiberFromFragment( - JSCompiler_object_inline_componentStack_2381, - JSCompiler_object_inline_message_2378, + JSCompiler_object_inline_componentStack_2397, + JSCompiler_object_inline_message_2394, renderLanes, null )), - (JSCompiler_object_inline_componentStack_2381.flags |= 2)), - (JSCompiler_object_inline_componentStack_2381.return = + (JSCompiler_object_inline_componentStack_2397.flags |= 2)), + (JSCompiler_object_inline_componentStack_2397.return = workInProgress), - (JSCompiler_object_inline_stack_2380.return = workInProgress), - (JSCompiler_object_inline_stack_2380.sibling = - JSCompiler_object_inline_componentStack_2381), - (workInProgress.child = JSCompiler_object_inline_stack_2380), - (JSCompiler_object_inline_stack_2380 = - JSCompiler_object_inline_componentStack_2381), - (JSCompiler_object_inline_componentStack_2381 = workInProgress.child), - (JSCompiler_object_inline_message_2378 = current.child.memoizedState), - null === JSCompiler_object_inline_message_2378 - ? (JSCompiler_object_inline_message_2378 = + (JSCompiler_object_inline_stack_2396.return = workInProgress), + (JSCompiler_object_inline_stack_2396.sibling = + JSCompiler_object_inline_componentStack_2397), + (workInProgress.child = JSCompiler_object_inline_stack_2396), + (JSCompiler_object_inline_stack_2396 = + JSCompiler_object_inline_componentStack_2397), + (JSCompiler_object_inline_componentStack_2397 = workInProgress.child), + (JSCompiler_object_inline_message_2394 = current.child.memoizedState), + null === JSCompiler_object_inline_message_2394 + ? (JSCompiler_object_inline_message_2394 = mountSuspenseOffscreenState(renderLanes)) : ((JSCompiler_temp = - JSCompiler_object_inline_message_2378.cachePool), + JSCompiler_object_inline_message_2394.cachePool), null !== JSCompiler_temp ? ((instance = CacheContext._currentValue), (JSCompiler_temp = @@ -9477,37 +9231,37 @@ ? { parent: instance, pool: instance } : JSCompiler_temp)) : (JSCompiler_temp = getSuspendedCache()), - (JSCompiler_object_inline_message_2378 = { + (JSCompiler_object_inline_message_2394 = { baseLanes: - JSCompiler_object_inline_message_2378.baseLanes | renderLanes, + JSCompiler_object_inline_message_2394.baseLanes | renderLanes, cachePool: JSCompiler_temp })), - (JSCompiler_object_inline_componentStack_2381.memoizedState = - JSCompiler_object_inline_message_2378), - (JSCompiler_object_inline_componentStack_2381.childLanes = + (JSCompiler_object_inline_componentStack_2397.memoizedState = + JSCompiler_object_inline_message_2394), + (JSCompiler_object_inline_componentStack_2397.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_digest_2379, + JSCompiler_object_inline_digest_2395, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - JSCompiler_object_inline_stack_2380 + JSCompiler_object_inline_stack_2396 ); pushPrimaryTreeSuspenseHandler(workInProgress); renderLanes = current.child; current = renderLanes.sibling; renderLanes = createWorkInProgress(renderLanes, { mode: "visible", - children: JSCompiler_object_inline_stack_2380.children + children: JSCompiler_object_inline_stack_2396.children }); renderLanes.return = workInProgress; renderLanes.sibling = null; null !== current && - ((JSCompiler_object_inline_digest_2379 = workInProgress.deletions), - null === JSCompiler_object_inline_digest_2379 + ((JSCompiler_object_inline_digest_2395 = workInProgress.deletions), + null === JSCompiler_object_inline_digest_2395 ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16)) - : JSCompiler_object_inline_digest_2379.push(current)); + : JSCompiler_object_inline_digest_2395.push(current)); workInProgress.child = renderLanes; workInProgress.memoizedState = null; return renderLanes; @@ -10870,15 +10624,24 @@ function commitAttachRef(finishedWork) { var ref = finishedWork.ref; if (null !== ref) { - var instance = finishedWork.stateNode; + switch (finishedWork.tag) { + case 26: + case 27: + case 5: + var instanceToUse = finishedWork.stateNode; + break; + default: + instanceToUse = finishedWork.stateNode; + } if ("function" === typeof ref) if (shouldProfile(finishedWork)) try { - startEffectTimer(), (finishedWork.refCleanup = ref(instance)); + startEffectTimer(), + (finishedWork.refCleanup = ref(instanceToUse)); } finally { recordEffectDuration(); } - else finishedWork.refCleanup = ref(instance); + else finishedWork.refCleanup = ref(instanceToUse); else "string" === typeof ref ? console.error("String refs are no longer supported.") @@ -10887,7 +10650,7 @@ "Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().", getComponentNameFromFiber(finishedWork) ), - (ref.current = instance); + (ref.current = instanceToUse); } } function safelyAttachRef(current, nearestMountedAncestor) { @@ -13177,144 +12940,390 @@ case REACT_OFFSCREEN_TYPE: return createFiberFromOffscreen(pendingProps, mode, lanes, key); default: - if ("object" === typeof type && null !== type) - switch (type.$$typeof) { - case REACT_PROVIDER_TYPE: - case REACT_CONTEXT_TYPE: - fiberTag = 10; - break a; - case REACT_CONSUMER_TYPE: - fiberTag = 9; - break a; - case REACT_FORWARD_REF_TYPE: - fiberTag = 11; - resolvedType = resolveForwardRefForHotReloading(resolvedType); - break a; - case REACT_MEMO_TYPE: - fiberTag = 14; - break a; - case REACT_LAZY_TYPE: - fiberTag = 16; - resolvedType = null; - break a; - } - resolvedType = ""; - if ( - void 0 === type || - ("object" === typeof type && - null !== type && - 0 === Object.keys(type).length) - ) - resolvedType += - " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports."; - null === type - ? (pendingProps = "null") - : isArrayImpl(type) - ? (pendingProps = "array") - : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE - ? ((pendingProps = - "<" + - (getComponentNameFromType(type.type) || "Unknown") + - " />"), - (resolvedType = - " Did you accidentally export a JSX literal instead of a component?")) - : (pendingProps = typeof type); - (fiberTag = owner ? getComponentNameFromOwner(owner) : null) && - (resolvedType += - "\n\nCheck the render method of `" + fiberTag + "`."); - fiberTag = 29; - pendingProps = Error( - "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " + - (pendingProps + "." + resolvedType) - ); - resolvedType = null; + if ("object" === typeof type && null !== type) + switch (type.$$typeof) { + case REACT_PROVIDER_TYPE: + case REACT_CONTEXT_TYPE: + fiberTag = 10; + break a; + case REACT_CONSUMER_TYPE: + fiberTag = 9; + break a; + case REACT_FORWARD_REF_TYPE: + fiberTag = 11; + resolvedType = resolveForwardRefForHotReloading(resolvedType); + break a; + case REACT_MEMO_TYPE: + fiberTag = 14; + break a; + case REACT_LAZY_TYPE: + fiberTag = 16; + resolvedType = null; + break a; + } + resolvedType = ""; + if ( + void 0 === type || + ("object" === typeof type && + null !== type && + 0 === Object.keys(type).length) + ) + resolvedType += + " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports."; + null === type + ? (pendingProps = "null") + : isArrayImpl(type) + ? (pendingProps = "array") + : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE + ? ((pendingProps = + "<" + + (getComponentNameFromType(type.type) || "Unknown") + + " />"), + (resolvedType = + " Did you accidentally export a JSX literal instead of a component?")) + : (pendingProps = typeof type); + (fiberTag = owner ? getComponentNameFromOwner(owner) : null) && + (resolvedType += + "\n\nCheck the render method of `" + fiberTag + "`."); + fiberTag = 29; + pendingProps = Error( + "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " + + (pendingProps + "." + resolvedType) + ); + resolvedType = null; + } + key = createFiber(fiberTag, pendingProps, key, mode); + key.elementType = type; + key.type = resolvedType; + key.lanes = lanes; + key._debugOwner = owner; + return key; + } + function createFiberFromElement(element, mode, lanes) { + mode = createFiberFromTypeAndProps( + element.type, + element.key, + element.props, + element._owner, + mode, + lanes + ); + mode._debugOwner = element._owner; + return mode; + } + function createFiberFromFragment(elements, mode, lanes, key) { + elements = createFiber(7, elements, key, mode); + elements.lanes = lanes; + return elements; + } + function createFiberFromOffscreen(pendingProps, mode, lanes, key) { + pendingProps = createFiber(22, pendingProps, key, mode); + pendingProps.elementType = REACT_OFFSCREEN_TYPE; + pendingProps.lanes = lanes; + var primaryChildInstance = { + _visibility: OffscreenVisible, + _pendingVisibility: OffscreenVisible, + _pendingMarkers: null, + _retryCache: null, + _transitions: null, + _current: null, + detach: function () { + var instance = primaryChildInstance, + fiber = instance._current; + if (null === fiber) + throw Error( + "Calling Offscreen.detach before instance handle has been set." + ); + if (0 === (instance._pendingVisibility & OffscreenDetached)) { + var root = enqueueConcurrentRenderForLane(fiber, 2); + null !== root && + ((instance._pendingVisibility |= OffscreenDetached), + scheduleUpdateOnFiber(root, fiber, 2)); + } + }, + attach: function () { + var instance = primaryChildInstance, + fiber = instance._current; + if (null === fiber) + throw Error( + "Calling Offscreen.detach before instance handle has been set." + ); + if (0 !== (instance._pendingVisibility & OffscreenDetached)) { + var root = enqueueConcurrentRenderForLane(fiber, 2); + null !== root && + ((instance._pendingVisibility &= ~OffscreenDetached), + scheduleUpdateOnFiber(root, fiber, 2)); + } + } + }; + pendingProps.stateNode = primaryChildInstance; + return pendingProps; + } + function createFiberFromText(content, mode, lanes) { + content = createFiber(6, content, null, mode); + content.lanes = lanes; + return content; + } + function createFiberFromPortal(portal, mode, lanes) { + mode = createFiber( + 4, + null !== portal.children ? portal.children : [], + portal.key, + mode + ); + mode.lanes = lanes; + mode.stateNode = { + containerInfo: portal.containerInfo, + pendingChildren: null, + implementation: portal.implementation + }; + return mode; + } + function buildHydrationDiffNode(fiber, distanceFromLeaf) { + if (null === fiber.return) { + if (null === hydrationDiffRootDEV) + hydrationDiffRootDEV = { + fiber: fiber, + children: [], + serverProps: void 0, + serverTail: [], + distanceFromLeaf: distanceFromLeaf + }; + else { + if (hydrationDiffRootDEV.fiber !== fiber) + throw Error( + "Saw multiple hydration diff roots in a pass. This is a bug in React." + ); + hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf && + (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf); + } + return hydrationDiffRootDEV; + } + var siblings = buildHydrationDiffNode( + fiber.return, + distanceFromLeaf + 1 + ).children; + if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber) + return ( + (siblings = siblings[siblings.length - 1]), + siblings.distanceFromLeaf > distanceFromLeaf && + (siblings.distanceFromLeaf = distanceFromLeaf), + siblings + ); + distanceFromLeaf = { + fiber: fiber, + children: [], + serverProps: void 0, + serverTail: [], + distanceFromLeaf: distanceFromLeaf + }; + siblings.push(distanceFromLeaf); + return distanceFromLeaf; + } + function warnNonHydratedInstance(fiber, rejectedCandidate) { + didSuspendOrErrorDEV || + ((fiber = buildHydrationDiffNode(fiber, 0)), + (fiber.serverProps = null), + null !== rejectedCandidate && + ((rejectedCandidate = + describeHydratableInstanceForDevWarnings(rejectedCandidate)), + fiber.serverTail.push(rejectedCandidate))); + } + function throwOnHydrationMismatch(fiber) { + var diff = "", + diffRoot = hydrationDiffRootDEV; + null !== diffRoot && + ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot))); + queueHydrationError( + createCapturedValueAtFiber( + Error( + "Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\nhttps://react.dev/link/hydration-mismatch" + + diff + ), + fiber + ) + ); + throw HydrationMismatchException; + } + function prepareToHydrateHostInstance(fiber) { + var didHydrate = fiber.stateNode; + var type = fiber.type, + props = fiber.memoizedProps; + didHydrate[internalInstanceKey] = fiber; + didHydrate[internalPropsKey] = props; + validatePropertiesInDevelopment(type, props); + switch (type) { + case "dialog": + listenToNonDelegatedEvent("cancel", didHydrate); + listenToNonDelegatedEvent("close", didHydrate); + break; + case "iframe": + case "object": + case "embed": + listenToNonDelegatedEvent("load", didHydrate); + break; + case "video": + case "audio": + for (type = 0; type < mediaEventTypes.length; type++) + listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate); + break; + case "source": + listenToNonDelegatedEvent("error", didHydrate); + break; + case "img": + case "image": + case "link": + listenToNonDelegatedEvent("error", didHydrate); + listenToNonDelegatedEvent("load", didHydrate); + break; + case "details": + listenToNonDelegatedEvent("toggle", didHydrate); + break; + case "input": + checkControlledValueProps("input", props); + listenToNonDelegatedEvent("invalid", didHydrate); + validateInputProps(didHydrate, props); + initInput( + didHydrate, + props.value, + props.defaultValue, + props.checked, + props.defaultChecked, + props.type, + props.name, + !0 + ); + track(didHydrate); + break; + case "option": + validateOptionProps(didHydrate, props); + break; + case "select": + checkControlledValueProps("select", props); + listenToNonDelegatedEvent("invalid", didHydrate); + validateSelectProps(didHydrate, props); + break; + case "textarea": + checkControlledValueProps("textarea", props), + listenToNonDelegatedEvent("invalid", didHydrate), + validateTextareaProps(didHydrate, props), + initTextarea( + didHydrate, + props.value, + props.defaultValue, + props.children + ), + track(didHydrate); + } + type = props.children; + ("string" !== typeof type && + "number" !== typeof type && + "bigint" !== typeof type) || + didHydrate.textContent === "" + type || + !0 === props.suppressHydrationWarning || + checkForUnmatchedText(didHydrate.textContent, type) + ? (null != props.popover && + (listenToNonDelegatedEvent("beforetoggle", didHydrate), + listenToNonDelegatedEvent("toggle", didHydrate)), + null != props.onScroll && + listenToNonDelegatedEvent("scroll", didHydrate), + null != props.onScrollEnd && + listenToNonDelegatedEvent("scrollend", didHydrate), + null != props.onClick && (didHydrate.onclick = noop$1), + (didHydrate = !0)) + : (didHydrate = !1); + didHydrate || throwOnHydrationMismatch(fiber); + } + function popToNextHostParent(fiber) { + for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) + switch (hydrationParentFiber.tag) { + case 3: + case 27: + rootOrSingletonContext = !0; + return; + case 5: + case 13: + rootOrSingletonContext = !1; + return; + default: + hydrationParentFiber = hydrationParentFiber.return; } - key = createFiber(fiberTag, pendingProps, key, mode); - key.elementType = type; - key.type = resolvedType; - key.lanes = lanes; - key._debugOwner = owner; - return key; } - function createFiberFromElement(element, mode, lanes) { - mode = createFiberFromTypeAndProps( - element.type, - element.key, - element.props, - element._owner, - mode, - lanes - ); - mode._debugOwner = element._owner; - return mode; + function popHydrationState(fiber) { + if (fiber !== hydrationParentFiber) return !1; + if (!isHydrating) + return popToNextHostParent(fiber), (isHydrating = !0), !1; + var shouldClear = !1, + JSCompiler_temp; + if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { + if ((JSCompiler_temp = 5 === fiber.tag)) + (JSCompiler_temp = fiber.type), + (JSCompiler_temp = + !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || + shouldSetTextContent(fiber.type, fiber.memoizedProps)); + JSCompiler_temp = !JSCompiler_temp; + } + JSCompiler_temp && (shouldClear = !0); + if (shouldClear && nextHydratableInstance) { + for (shouldClear = nextHydratableInstance; shouldClear; ) { + JSCompiler_temp = buildHydrationDiffNode(fiber, 0); + var description = + describeHydratableInstanceForDevWarnings(shouldClear); + JSCompiler_temp.serverTail.push(description); + shouldClear = + "Suspense" === description.type + ? getNextHydratableInstanceAfterSuspenseInstance(shouldClear) + : getNextHydratable(shouldClear.nextSibling); + } + throwOnHydrationMismatch(fiber); + } + popToNextHostParent(fiber); + if (13 === fiber.tag) { + fiber = fiber.memoizedState; + fiber = null !== fiber ? fiber.dehydrated : null; + if (!fiber) + throw Error( + "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue." + ); + nextHydratableInstance = + getNextHydratableInstanceAfterSuspenseInstance(fiber); + } else + nextHydratableInstance = hydrationParentFiber + ? getNextHydratable(fiber.stateNode.nextSibling) + : null; + return !0; } - function createFiberFromFragment(elements, mode, lanes, key) { - elements = createFiber(7, elements, key, mode); - elements.lanes = lanes; - return elements; + function resetHydrationState() { + nextHydratableInstance = hydrationParentFiber = null; + didSuspendOrErrorDEV = isHydrating = !1; } - function createFiberFromOffscreen(pendingProps, mode, lanes, key) { - pendingProps = createFiber(22, pendingProps, key, mode); - pendingProps.elementType = REACT_OFFSCREEN_TYPE; - pendingProps.lanes = lanes; - var primaryChildInstance = { - _visibility: OffscreenVisible, - _pendingVisibility: OffscreenVisible, - _pendingMarkers: null, - _retryCache: null, - _transitions: null, - _current: null, - detach: function () { - var instance = primaryChildInstance, - fiber = instance._current; - if (null === fiber) - throw Error( - "Calling Offscreen.detach before instance handle has been set." - ); - if (0 === (instance._pendingVisibility & OffscreenDetached)) { - var root = enqueueConcurrentRenderForLane(fiber, 2); - null !== root && - ((instance._pendingVisibility |= OffscreenDetached), - scheduleUpdateOnFiber(root, fiber, 2)); - } - }, - attach: function () { - var instance = primaryChildInstance, - fiber = instance._current; - if (null === fiber) - throw Error( - "Calling Offscreen.detach before instance handle has been set." - ); - if (0 !== (instance._pendingVisibility & OffscreenDetached)) { - var root = enqueueConcurrentRenderForLane(fiber, 2); - null !== root && - ((instance._pendingVisibility &= ~OffscreenDetached), - scheduleUpdateOnFiber(root, fiber, 2)); - } - } - }; - pendingProps.stateNode = primaryChildInstance; - return pendingProps; + function upgradeHydrationErrorsToRecoverable() { + var queuedErrors = hydrationErrors; + null !== queuedErrors && + (null === workInProgressRootRecoverableErrors + ? (workInProgressRootRecoverableErrors = queuedErrors) + : workInProgressRootRecoverableErrors.push.apply( + workInProgressRootRecoverableErrors, + queuedErrors + ), + (hydrationErrors = null)); + return queuedErrors; } - function createFiberFromText(content, mode, lanes) { - content = createFiber(6, content, null, mode); - content.lanes = lanes; - return content; + function queueHydrationError(error) { + null === hydrationErrors + ? (hydrationErrors = [error]) + : hydrationErrors.push(error); } - function createFiberFromPortal(portal, mode, lanes) { - mode = createFiber( - 4, - null !== portal.children ? portal.children : [], - portal.key, - mode - ); - mode.lanes = lanes; - mode.stateNode = { - containerInfo: portal.containerInfo, - pendingChildren: null, - implementation: portal.implementation - }; - return mode; + function emitPendingHydrationWarnings() { + var diffRoot = hydrationDiffRootDEV; + null !== diffRoot && + ((hydrationDiffRootDEV = null), + (diffRoot = describeDiff(diffRoot)), + console.error( + "A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\n%s%s", + "https://react.dev/link/hydration-mismatch", + diffRoot + )); } function markUpdate(workInProgress) { workInProgress.flags |= 4; @@ -22263,6 +22272,7 @@ "abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll scrollEnd toggle touchMove waiting wheel".split( " " ), + CapturedStacks = new WeakMap(), OffscreenVisible = 1, OffscreenDetached = 2, OffscreenPassiveEffectsConnected = 4, @@ -22339,26 +22349,6 @@ _currentRenderer: null, _currentRenderer2: null }, - CapturedStacks = new WeakMap(), - forkStack = [], - forkStackIndex = 0, - treeForkProvider = null, - treeForkCount = 0, - idStack = [], - idStackIndex = 0, - treeContextProvider = null, - treeContextId = 1, - treeContextOverflow = "", - hydrationParentFiber = null, - nextHydratableInstance = null, - isHydrating = !1, - didSuspendOrErrorDEV = !1, - hydrationDiffRootDEV = null, - hydrationErrors = null, - rootOrSingletonContext = !1, - HydrationMismatchException = Error( - "Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React." - ), ReactStrictModeWarnings = { recordUnsafeLifecycleWarnings: function () {}, flushPendingUnsafeLifecycleWarnings: function () {}, @@ -22613,6 +22603,15 @@ injectedProfilingHooks.markForceUpdateScheduled(inst, lane); } }, + forkStack = [], + forkStackIndex = 0, + treeForkProvider = null, + treeForkCount = 0, + idStack = [], + idStackIndex = 0, + treeContextProvider = null, + treeContextId = 1, + treeContextOverflow = "", SuspenseException = Error( "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`." ), @@ -23932,19 +23931,29 @@ } catch (e$7) { hasBadMapPolyfill = !0; } - var DefaultAsyncDispatcher = { - getCacheForType: function (resourceType) { - var cache = readContext(CacheContext), - cacheForType = cache.data.get(resourceType); - void 0 === cacheForType && - ((cacheForType = resourceType()), - cache.data.set(resourceType, cacheForType)); - return cacheForType; - }, - getOwner: function () { - return current; - } - }; + var hydrationParentFiber = null, + nextHydratableInstance = null, + isHydrating = !1, + didSuspendOrErrorDEV = !1, + hydrationDiffRootDEV = null, + hydrationErrors = null, + rootOrSingletonContext = !1, + HydrationMismatchException = Error( + "Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React." + ), + DefaultAsyncDispatcher = { + getCacheForType: function (resourceType) { + var cache = readContext(CacheContext), + cacheForType = cache.data.get(resourceType); + void 0 === cacheForType && + ((cacheForType = resourceType()), + cache.data.set(resourceType, cacheForType)); + return cacheForType; + }, + getOwner: function () { + return current; + } + }; if ("function" === typeof Symbol && Symbol.for) { var symbolFor = Symbol.for; symbolFor("selector.component"); @@ -24561,11 +24570,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-540efebc-20250112" !== 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.1.0-canary-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -24602,10 +24611,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.1.0-canary-056073de-20250109", + version: "19.1.0-canary-540efebc-20250112", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-056073de-20250109" + reconcilerVersion: "19.1.0-canary-540efebc-20250112" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -24751,7 +24760,7 @@ listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; - exports.version = "19.1.0-canary-056073de-20250109"; + exports.version = "19.1.0-canary-540efebc-20250112"; "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 f5f63dda2872a..fce76161a7cb2 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 @@ -2016,14 +2016,14 @@ var isInputEventSupported = !1; if (canUseDOM) { var JSCompiler_inline_result$jscomp$279; if (canUseDOM) { - var isSupported$jscomp$inline_410 = "oninput" in document; - if (!isSupported$jscomp$inline_410) { - var element$jscomp$inline_411 = document.createElement("div"); - element$jscomp$inline_411.setAttribute("oninput", "return;"); - isSupported$jscomp$inline_410 = - "function" === typeof element$jscomp$inline_411.oninput; + var isSupported$jscomp$inline_414 = "oninput" in document; + if (!isSupported$jscomp$inline_414) { + var element$jscomp$inline_415 = document.createElement("div"); + element$jscomp$inline_415.setAttribute("oninput", "return;"); + isSupported$jscomp$inline_414 = + "function" === typeof element$jscomp$inline_415.oninput; } - JSCompiler_inline_result$jscomp$279 = isSupported$jscomp$inline_410; + JSCompiler_inline_result$jscomp$279 = isSupported$jscomp$inline_414; } else JSCompiler_inline_result$jscomp$279 = !1; isInputEventSupported = JSCompiler_inline_result$jscomp$279 && @@ -2273,6 +2273,25 @@ function registerSimpleEvent(domEventName, reactName) { topLevelEventsToReactNames.set(domEventName, reactName); registerTwoPhaseEvent(reactName, [domEventName]); } +var CapturedStacks = new WeakMap(); +function createCapturedValueAtFiber(value, source) { + if ("object" === typeof value && null !== value) { + var existing = CapturedStacks.get(value); + if (void 0 !== existing) return existing; + source = { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; + CapturedStacks.set(value, source); + return source; + } + return { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; +} var concurrentQueues = [], concurrentQueuesIndex = 0, concurrentlyUpdatedLanes = 0; @@ -2869,252 +2888,6 @@ function releaseCache(cache) { cache.controller.abort(); }); } -var CapturedStacks = new WeakMap(); -function createCapturedValueAtFiber(value, source) { - if ("object" === typeof value && null !== value) { - var existing = CapturedStacks.get(value); - if (void 0 !== existing) return existing; - source = { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; - CapturedStacks.set(value, source); - return source; - } - return { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; -} -var forkStack = [], - forkStackIndex = 0, - treeForkProvider = null, - treeForkCount = 0, - idStack = [], - idStackIndex = 0, - treeContextProvider = null, - treeContextId = 1, - treeContextOverflow = ""; -function pushTreeFork(workInProgress, totalChildren) { - forkStack[forkStackIndex++] = treeForkCount; - forkStack[forkStackIndex++] = treeForkProvider; - treeForkProvider = workInProgress; - treeForkCount = totalChildren; -} -function pushTreeId(workInProgress, totalChildren, index) { - idStack[idStackIndex++] = treeContextId; - idStack[idStackIndex++] = treeContextOverflow; - idStack[idStackIndex++] = treeContextProvider; - treeContextProvider = workInProgress; - var baseIdWithLeadingBit = treeContextId; - workInProgress = treeContextOverflow; - var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; - baseIdWithLeadingBit &= ~(1 << baseLength); - index += 1; - var length = 32 - clz32(totalChildren) + baseLength; - if (30 < length) { - var numberOfOverflowBits = baseLength - (baseLength % 5); - length = ( - baseIdWithLeadingBit & - ((1 << numberOfOverflowBits) - 1) - ).toString(32); - baseIdWithLeadingBit >>= numberOfOverflowBits; - baseLength -= numberOfOverflowBits; - treeContextId = - (1 << (32 - clz32(totalChildren) + baseLength)) | - (index << baseLength) | - baseIdWithLeadingBit; - treeContextOverflow = length + workInProgress; - } else - (treeContextId = - (1 << length) | (index << baseLength) | baseIdWithLeadingBit), - (treeContextOverflow = workInProgress); -} -function pushMaterializedTreeId(workInProgress) { - null !== workInProgress.return && - (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0)); -} -function popTreeContext(workInProgress) { - for (; workInProgress === treeForkProvider; ) - (treeForkProvider = forkStack[--forkStackIndex]), - (forkStack[forkStackIndex] = null), - (treeForkCount = forkStack[--forkStackIndex]), - (forkStack[forkStackIndex] = null); - for (; workInProgress === treeContextProvider; ) - (treeContextProvider = idStack[--idStackIndex]), - (idStack[idStackIndex] = null), - (treeContextOverflow = idStack[--idStackIndex]), - (idStack[idStackIndex] = null), - (treeContextId = idStack[--idStackIndex]), - (idStack[idStackIndex] = null); -} -var hydrationParentFiber = null, - nextHydratableInstance = null, - isHydrating = !1, - hydrationErrors = null, - rootOrSingletonContext = !1, - HydrationMismatchException = Error(formatProdErrorMessage(519)); -function throwOnHydrationMismatch(fiber) { - var error = Error(formatProdErrorMessage(418, "")); - queueHydrationError(createCapturedValueAtFiber(error, fiber)); - throw HydrationMismatchException; -} -function prepareToHydrateHostInstance(fiber) { - var instance = fiber.stateNode, - type = fiber.type, - props = fiber.memoizedProps; - instance[internalInstanceKey] = fiber; - instance[internalPropsKey] = props; - switch (type) { - case "dialog": - listenToNonDelegatedEvent("cancel", instance); - listenToNonDelegatedEvent("close", instance); - break; - case "iframe": - case "object": - case "embed": - listenToNonDelegatedEvent("load", instance); - break; - case "video": - case "audio": - for (type = 0; type < mediaEventTypes.length; type++) - listenToNonDelegatedEvent(mediaEventTypes[type], instance); - break; - case "source": - listenToNonDelegatedEvent("error", instance); - break; - case "img": - case "image": - case "link": - listenToNonDelegatedEvent("error", instance); - listenToNonDelegatedEvent("load", instance); - break; - case "details": - listenToNonDelegatedEvent("toggle", instance); - break; - case "input": - listenToNonDelegatedEvent("invalid", instance); - initInput( - instance, - props.value, - props.defaultValue, - props.checked, - props.defaultChecked, - props.type, - props.name, - !0 - ); - track(instance); - break; - case "select": - listenToNonDelegatedEvent("invalid", instance); - break; - case "textarea": - listenToNonDelegatedEvent("invalid", instance), - initTextarea(instance, props.value, props.defaultValue, props.children), - track(instance); - } - type = props.children; - ("string" !== typeof type && - "number" !== typeof type && - "bigint" !== typeof type) || - instance.textContent === "" + type || - !0 === props.suppressHydrationWarning || - checkForUnmatchedText(instance.textContent, type) - ? (null != props.popover && - (listenToNonDelegatedEvent("beforetoggle", instance), - listenToNonDelegatedEvent("toggle", instance)), - null != props.onScroll && listenToNonDelegatedEvent("scroll", instance), - null != props.onScrollEnd && - listenToNonDelegatedEvent("scrollend", instance), - null != props.onClick && (instance.onclick = noop$1), - (instance = !0)) - : (instance = !1); - instance || throwOnHydrationMismatch(fiber); -} -function popToNextHostParent(fiber) { - for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) - switch (hydrationParentFiber.tag) { - case 3: - case 27: - rootOrSingletonContext = !0; - return; - case 5: - case 13: - rootOrSingletonContext = !1; - return; - default: - hydrationParentFiber = hydrationParentFiber.return; - } -} -function popHydrationState(fiber) { - if (fiber !== hydrationParentFiber) return !1; - if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1; - var shouldClear = !1, - JSCompiler_temp; - if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { - if ((JSCompiler_temp = 5 === fiber.tag)) - (JSCompiler_temp = fiber.type), - (JSCompiler_temp = - !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || - shouldSetTextContent(fiber.type, fiber.memoizedProps)); - JSCompiler_temp = !JSCompiler_temp; - } - JSCompiler_temp && (shouldClear = !0); - shouldClear && nextHydratableInstance && throwOnHydrationMismatch(fiber); - popToNextHostParent(fiber); - if (13 === fiber.tag) { - fiber = fiber.memoizedState; - fiber = null !== fiber ? fiber.dehydrated : null; - if (!fiber) throw Error(formatProdErrorMessage(317)); - a: { - fiber = fiber.nextSibling; - for (shouldClear = 0; fiber; ) { - if (8 === fiber.nodeType) - if (((JSCompiler_temp = fiber.data), "/$" === JSCompiler_temp)) { - if (0 === shouldClear) { - nextHydratableInstance = getNextHydratable(fiber.nextSibling); - break a; - } - shouldClear--; - } else - ("$" !== JSCompiler_temp && - "$!" !== JSCompiler_temp && - "$?" !== JSCompiler_temp) || - shouldClear++; - fiber = fiber.nextSibling; - } - nextHydratableInstance = null; - } - } else - nextHydratableInstance = hydrationParentFiber - ? getNextHydratable(fiber.stateNode.nextSibling) - : null; - return !0; -} -function resetHydrationState() { - nextHydratableInstance = hydrationParentFiber = null; - isHydrating = !1; -} -function upgradeHydrationErrorsToRecoverable() { - var queuedErrors = hydrationErrors; - null !== queuedErrors && - (null === workInProgressRootRecoverableErrors - ? (workInProgressRootRecoverableErrors = queuedErrors) - : workInProgressRootRecoverableErrors.push.apply( - workInProgressRootRecoverableErrors, - queuedErrors - ), - (hydrationErrors = null)); - return queuedErrors; -} -function queueHydrationError(error) { - null === hydrationErrors - ? (hydrationErrors = [error]) - : hydrationErrors.push(error); -} function applyDerivedStateFromProps( workInProgress, ctor, @@ -3183,34 +2956,96 @@ function checkShouldComponentUpdate( ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState) : !0; } -function callComponentWillReceiveProps( - workInProgress, - instance, - newProps, - nextContext -) { - workInProgress = instance.state; - "function" === typeof instance.componentWillReceiveProps && - instance.componentWillReceiveProps(newProps, nextContext); - "function" === typeof instance.UNSAFE_componentWillReceiveProps && - instance.UNSAFE_componentWillReceiveProps(newProps, nextContext); - instance.state !== workInProgress && - classComponentUpdater.enqueueReplaceState(instance, instance.state, null); +function callComponentWillReceiveProps( + workInProgress, + instance, + newProps, + nextContext +) { + workInProgress = instance.state; + "function" === typeof instance.componentWillReceiveProps && + instance.componentWillReceiveProps(newProps, nextContext); + "function" === typeof instance.UNSAFE_componentWillReceiveProps && + instance.UNSAFE_componentWillReceiveProps(newProps, nextContext); + instance.state !== workInProgress && + classComponentUpdater.enqueueReplaceState(instance, instance.state, null); +} +function resolveClassComponentProps(Component, baseProps) { + var newProps = baseProps; + if ("ref" in baseProps) { + newProps = {}; + for (var propName in baseProps) + "ref" !== propName && (newProps[propName] = baseProps[propName]); + } + if ((Component = Component.defaultProps)) { + newProps === baseProps && (newProps = assign({}, newProps)); + for (var propName$28 in Component) + void 0 === newProps[propName$28] && + (newProps[propName$28] = Component[propName$28]); + } + return newProps; +} +var forkStack = [], + forkStackIndex = 0, + treeForkProvider = null, + treeForkCount = 0, + idStack = [], + idStackIndex = 0, + treeContextProvider = null, + treeContextId = 1, + treeContextOverflow = ""; +function pushTreeFork(workInProgress, totalChildren) { + forkStack[forkStackIndex++] = treeForkCount; + forkStack[forkStackIndex++] = treeForkProvider; + treeForkProvider = workInProgress; + treeForkCount = totalChildren; +} +function pushTreeId(workInProgress, totalChildren, index) { + idStack[idStackIndex++] = treeContextId; + idStack[idStackIndex++] = treeContextOverflow; + idStack[idStackIndex++] = treeContextProvider; + treeContextProvider = workInProgress; + var baseIdWithLeadingBit = treeContextId; + workInProgress = treeContextOverflow; + var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; + baseIdWithLeadingBit &= ~(1 << baseLength); + index += 1; + var length = 32 - clz32(totalChildren) + baseLength; + if (30 < length) { + var numberOfOverflowBits = baseLength - (baseLength % 5); + length = ( + baseIdWithLeadingBit & + ((1 << numberOfOverflowBits) - 1) + ).toString(32); + baseIdWithLeadingBit >>= numberOfOverflowBits; + baseLength -= numberOfOverflowBits; + treeContextId = + (1 << (32 - clz32(totalChildren) + baseLength)) | + (index << baseLength) | + baseIdWithLeadingBit; + treeContextOverflow = length + workInProgress; + } else + (treeContextId = + (1 << length) | (index << baseLength) | baseIdWithLeadingBit), + (treeContextOverflow = workInProgress); +} +function pushMaterializedTreeId(workInProgress) { + null !== workInProgress.return && + (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0)); } -function resolveClassComponentProps(Component, baseProps) { - var newProps = baseProps; - if ("ref" in baseProps) { - newProps = {}; - for (var propName in baseProps) - "ref" !== propName && (newProps[propName] = baseProps[propName]); - } - if ((Component = Component.defaultProps)) { - newProps === baseProps && (newProps = assign({}, newProps)); - for (var propName$30 in Component) - void 0 === newProps[propName$30] && - (newProps[propName$30] = Component[propName$30]); - } - return newProps; +function popTreeContext(workInProgress) { + for (; workInProgress === treeForkProvider; ) + (treeForkProvider = forkStack[--forkStackIndex]), + (forkStack[forkStackIndex] = null), + (treeForkCount = forkStack[--forkStackIndex]), + (forkStack[forkStackIndex] = null); + for (; workInProgress === treeContextProvider; ) + (treeContextProvider = idStack[--idStackIndex]), + (idStack[idStackIndex] = null), + (treeContextOverflow = idStack[--idStackIndex]), + (idStack[idStackIndex] = null), + (treeContextId = idStack[--idStackIndex]), + (idStack[idStackIndex] = null); } var SuspenseException = Error(formatProdErrorMessage(460)), SuspenseyCommitException = Error(formatProdErrorMessage(474)), @@ -7186,14 +7021,17 @@ function beginWork(current, workInProgress, renderLanes) { workInProgress.child ); case 5: - if (null === current && isHydrating) { - if ((init = lazyComponent = nextHydratableInstance)) - (lazyComponent = canHydrateInstance( - lazyComponent, - workInProgress.type, - workInProgress.pendingProps, - rootOrSingletonContext - )), + return ( + null === current && + isHydrating && + ((lazyComponent = nextHydratableInstance), + (init = !lazyComponent) || + ((lazyComponent = canHydrateInstance( + lazyComponent, + workInProgress.type, + workInProgress.pendingProps, + rootOrSingletonContext + )), null !== lazyComponent ? ((workInProgress.stateNode = lazyComponent), (hydrationParentFiber = workInProgress), @@ -7201,50 +7039,55 @@ function beginWork(current, workInProgress, renderLanes) { lazyComponent.firstChild )), (rootOrSingletonContext = !1), - (init = !0)) - : (init = !1); - init || throwOnHydrationMismatch(workInProgress); - } - pushHostContext(workInProgress); - init = workInProgress.type; - nextProps = workInProgress.pendingProps; - nextState = null !== current ? current.memoizedProps : null; - lazyComponent = nextProps.children; - shouldSetTextContent(init, nextProps) - ? (lazyComponent = null) - : null !== nextState && - shouldSetTextContent(init, nextState) && - (workInProgress.flags |= 32); - null !== workInProgress.memoizedState && - ((init = renderWithHooks( - current, - workInProgress, - TransitionAwareHostComponent, - null, - null, - renderLanes - )), - (HostTransitionContext._currentValue = init)); - markRef(current, workInProgress); - reconcileChildren(current, workInProgress, lazyComponent, renderLanes); - return workInProgress.child; - case 6: - if (null === current && isHydrating) { - if ((current = renderLanes = nextHydratableInstance)) - (renderLanes = canHydrateTextInstance( - renderLanes, - workInProgress.pendingProps, - rootOrSingletonContext + (lazyComponent = !0)) + : (lazyComponent = !1), + (init = !lazyComponent)), + init && throwOnHydrationMismatch(workInProgress)), + pushHostContext(workInProgress), + (init = workInProgress.type), + (nextProps = workInProgress.pendingProps), + (nextState = null !== current ? current.memoizedProps : null), + (lazyComponent = nextProps.children), + shouldSetTextContent(init, nextProps) + ? (lazyComponent = null) + : null !== nextState && + shouldSetTextContent(init, nextState) && + (workInProgress.flags |= 32), + null !== workInProgress.memoizedState && + ((init = renderWithHooks( + current, + workInProgress, + TransitionAwareHostComponent, + null, + null, + renderLanes )), + (HostTransitionContext._currentValue = init)), + markRef(current, workInProgress), + reconcileChildren(current, workInProgress, lazyComponent, renderLanes), + workInProgress.child + ); + case 6: + return ( + null === current && + isHydrating && + ((renderLanes = nextHydratableInstance), + (current = !renderLanes) || + ((renderLanes = canHydrateTextInstance( + renderLanes, + workInProgress.pendingProps, + rootOrSingletonContext + )), null !== renderLanes ? ((workInProgress.stateNode = renderLanes), (hydrationParentFiber = workInProgress), (nextHydratableInstance = null), - (current = !0)) - : (current = !1); - current || throwOnHydrationMismatch(workInProgress); - } - return null; + (renderLanes = !0)) + : (renderLanes = !1), + (current = !renderLanes)), + current && throwOnHydrationMismatch(workInProgress)), + null + ); case 13: return updateSuspenseComponent(current, workInProgress, renderLanes); case 4: @@ -7495,15 +7338,14 @@ function safelyAttachRef(current, nearestMountedAncestor) { try { var ref = current.ref; if (null !== ref) { - var instance = current.stateNode; switch (current.tag) { case 26: case 27: case 5: - var instanceToUse = instance; + var instanceToUse = current.stateNode; break; default: - instanceToUse = instance; + instanceToUse = current.stateNode; } "function" === typeof ref ? (current.refCleanup = ref(instanceToUse)) @@ -9540,6 +9382,171 @@ function createFiberFromPortal(portal, mode, lanes) { }; return mode; } +var hydrationParentFiber = null, + nextHydratableInstance = null, + isHydrating = !1, + hydrationErrors = null, + rootOrSingletonContext = !1, + HydrationMismatchException = Error(formatProdErrorMessage(519)); +function throwOnHydrationMismatch(fiber) { + var error = Error(formatProdErrorMessage(418, "")); + queueHydrationError(createCapturedValueAtFiber(error, fiber)); + throw HydrationMismatchException; +} +function prepareToHydrateHostInstance(fiber) { + var instance = fiber.stateNode, + type = fiber.type, + props = fiber.memoizedProps; + instance[internalInstanceKey] = fiber; + instance[internalPropsKey] = props; + switch (type) { + case "dialog": + listenToNonDelegatedEvent("cancel", instance); + listenToNonDelegatedEvent("close", instance); + break; + case "iframe": + case "object": + case "embed": + listenToNonDelegatedEvent("load", instance); + break; + case "video": + case "audio": + for (type = 0; type < mediaEventTypes.length; type++) + listenToNonDelegatedEvent(mediaEventTypes[type], instance); + break; + case "source": + listenToNonDelegatedEvent("error", instance); + break; + case "img": + case "image": + case "link": + listenToNonDelegatedEvent("error", instance); + listenToNonDelegatedEvent("load", instance); + break; + case "details": + listenToNonDelegatedEvent("toggle", instance); + break; + case "input": + listenToNonDelegatedEvent("invalid", instance); + initInput( + instance, + props.value, + props.defaultValue, + props.checked, + props.defaultChecked, + props.type, + props.name, + !0 + ); + track(instance); + break; + case "select": + listenToNonDelegatedEvent("invalid", instance); + break; + case "textarea": + listenToNonDelegatedEvent("invalid", instance), + initTextarea(instance, props.value, props.defaultValue, props.children), + track(instance); + } + type = props.children; + ("string" !== typeof type && + "number" !== typeof type && + "bigint" !== typeof type) || + instance.textContent === "" + type || + !0 === props.suppressHydrationWarning || + checkForUnmatchedText(instance.textContent, type) + ? (null != props.popover && + (listenToNonDelegatedEvent("beforetoggle", instance), + listenToNonDelegatedEvent("toggle", instance)), + null != props.onScroll && listenToNonDelegatedEvent("scroll", instance), + null != props.onScrollEnd && + listenToNonDelegatedEvent("scrollend", instance), + null != props.onClick && (instance.onclick = noop$1), + (instance = !0)) + : (instance = !1); + instance || throwOnHydrationMismatch(fiber); +} +function popToNextHostParent(fiber) { + for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) + switch (hydrationParentFiber.tag) { + case 3: + case 27: + rootOrSingletonContext = !0; + return; + case 5: + case 13: + rootOrSingletonContext = !1; + return; + default: + hydrationParentFiber = hydrationParentFiber.return; + } +} +function popHydrationState(fiber) { + if (fiber !== hydrationParentFiber) return !1; + if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1; + var shouldClear = !1, + JSCompiler_temp; + if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { + if ((JSCompiler_temp = 5 === fiber.tag)) + (JSCompiler_temp = fiber.type), + (JSCompiler_temp = + !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || + shouldSetTextContent(fiber.type, fiber.memoizedProps)); + JSCompiler_temp = !JSCompiler_temp; + } + JSCompiler_temp && (shouldClear = !0); + shouldClear && nextHydratableInstance && throwOnHydrationMismatch(fiber); + popToNextHostParent(fiber); + if (13 === fiber.tag) { + fiber = fiber.memoizedState; + fiber = null !== fiber ? fiber.dehydrated : null; + if (!fiber) throw Error(formatProdErrorMessage(317)); + a: { + fiber = fiber.nextSibling; + for (shouldClear = 0; fiber; ) { + if (8 === fiber.nodeType) + if (((JSCompiler_temp = fiber.data), "/$" === JSCompiler_temp)) { + if (0 === shouldClear) { + nextHydratableInstance = getNextHydratable(fiber.nextSibling); + break a; + } + shouldClear--; + } else + ("$" !== JSCompiler_temp && + "$!" !== JSCompiler_temp && + "$?" !== JSCompiler_temp) || + shouldClear++; + fiber = fiber.nextSibling; + } + nextHydratableInstance = null; + } + } else + nextHydratableInstance = hydrationParentFiber + ? getNextHydratable(fiber.stateNode.nextSibling) + : null; + return !0; +} +function resetHydrationState() { + nextHydratableInstance = hydrationParentFiber = null; + isHydrating = !1; +} +function upgradeHydrationErrorsToRecoverable() { + var queuedErrors = hydrationErrors; + null !== queuedErrors && + (null === workInProgressRootRecoverableErrors + ? (workInProgressRootRecoverableErrors = queuedErrors) + : workInProgressRootRecoverableErrors.push.apply( + workInProgressRootRecoverableErrors, + queuedErrors + ), + (hydrationErrors = null)); + return queuedErrors; +} +function queueHydrationError(error) { + null === hydrationErrors + ? (hydrationErrors = [error]) + : hydrationErrors.push(error); +} function markUpdate(workInProgress) { workInProgress.flags |= 4; } @@ -11723,20 +11730,20 @@ function extractEvents$1( } } for ( - var i$jscomp$inline_1474 = 0; - i$jscomp$inline_1474 < simpleEventPluginEvents.length; - i$jscomp$inline_1474++ + var i$jscomp$inline_1490 = 0; + i$jscomp$inline_1490 < simpleEventPluginEvents.length; + i$jscomp$inline_1490++ ) { - var eventName$jscomp$inline_1475 = - simpleEventPluginEvents[i$jscomp$inline_1474], - domEventName$jscomp$inline_1476 = - eventName$jscomp$inline_1475.toLowerCase(), - capitalizedEvent$jscomp$inline_1477 = - eventName$jscomp$inline_1475[0].toUpperCase() + - eventName$jscomp$inline_1475.slice(1); + var eventName$jscomp$inline_1491 = + simpleEventPluginEvents[i$jscomp$inline_1490], + domEventName$jscomp$inline_1492 = + eventName$jscomp$inline_1491.toLowerCase(), + capitalizedEvent$jscomp$inline_1493 = + eventName$jscomp$inline_1491[0].toUpperCase() + + eventName$jscomp$inline_1491.slice(1); registerSimpleEvent( - domEventName$jscomp$inline_1476, - "on" + capitalizedEvent$jscomp$inline_1477 + domEventName$jscomp$inline_1492, + "on" + capitalizedEvent$jscomp$inline_1493 ); } registerSimpleEvent(ANIMATION_END, "onAnimationEnd"); @@ -15193,16 +15200,16 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { 0 === i && attemptExplicitHydrationTarget(target); } }; -var isomorphicReactPackageVersion$jscomp$inline_1721 = React.version; +var isomorphicReactPackageVersion$jscomp$inline_1737 = React.version; if ( - "19.1.0-canary-056073de-20250109" !== - isomorphicReactPackageVersion$jscomp$inline_1721 + "19.1.0-canary-540efebc-20250112" !== + isomorphicReactPackageVersion$jscomp$inline_1737 ) throw Error( formatProdErrorMessage( 527, - isomorphicReactPackageVersion$jscomp$inline_1721, - "19.1.0-canary-056073de-20250109" + isomorphicReactPackageVersion$jscomp$inline_1737, + "19.1.0-canary-540efebc-20250112" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -15222,24 +15229,24 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { null === componentOrElement ? null : componentOrElement.stateNode; return componentOrElement; }; -var internals$jscomp$inline_2190 = { +var internals$jscomp$inline_2214 = { bundleType: 0, - version: "19.1.0-canary-056073de-20250109", + version: "19.1.0-canary-540efebc-20250112", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-056073de-20250109" + reconcilerVersion: "19.1.0-canary-540efebc-20250112" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_2191 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_2215 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_2191.isDisabled && - hook$jscomp$inline_2191.supportsFiber + !hook$jscomp$inline_2215.isDisabled && + hook$jscomp$inline_2215.supportsFiber ) try { - (rendererID = hook$jscomp$inline_2191.inject( - internals$jscomp$inline_2190 + (rendererID = hook$jscomp$inline_2215.inject( + internals$jscomp$inline_2214 )), - (injectedHook = hook$jscomp$inline_2191); + (injectedHook = hook$jscomp$inline_2215); } catch (err) {} } exports.createRoot = function (container, options) { @@ -15333,4 +15340,4 @@ exports.hydrateRoot = function (container, initialChildren, options) { listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; -exports.version = "19.1.0-canary-056073de-20250109"; +exports.version = "19.1.0-canary-540efebc-20250112"; 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 80fd588b22809..d726c784f6d8e 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 @@ -3643,6 +3643,24 @@ topLevelEventsToReactNames.set(domEventName, reactName); registerTwoPhaseEvent(reactName, [domEventName]); } + function createCapturedValueAtFiber(value, source) { + if ("object" === typeof value && null !== value) { + var existing = CapturedStacks.get(value); + if (void 0 !== existing) return existing; + source = { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; + CapturedStacks.set(value, source); + return source; + } + return { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; + } function finishQueueingConcurrentUpdates() { for ( var endIndex = concurrentQueuesIndex, @@ -4502,23 +4520,128 @@ cache.controller.abort(); }); } - function createCapturedValueAtFiber(value, source) { - if ("object" === typeof value && null !== value) { - var existing = CapturedStacks.get(value); - if (void 0 !== existing) return existing; - source = { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; - CapturedStacks.set(value, source); - return source; + function warnOnInvalidCallback(callback) { + if (null !== callback && "function" !== typeof callback) { + var key = String(callback); + didWarnOnInvalidCallback.has(key) || + (didWarnOnInvalidCallback.add(key), + console.error( + "Expected the last optional `callback` argument to be a function. Instead received: %s.", + callback + )); } - return { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; + } + function applyDerivedStateFromProps( + workInProgress, + ctor, + getDerivedStateFromProps, + nextProps + ) { + var prevState = workInProgress.memoizedState, + partialState = getDerivedStateFromProps(nextProps, prevState); + if (workInProgress.mode & StrictLegacyMode) { + setIsStrictModeForDevtools(!0); + try { + partialState = getDerivedStateFromProps(nextProps, prevState); + } finally { + setIsStrictModeForDevtools(!1); + } + } + void 0 === partialState && + ((ctor = getComponentNameFromType(ctor) || "Component"), + didWarnAboutUndefinedDerivedState.has(ctor) || + (didWarnAboutUndefinedDerivedState.add(ctor), + console.error( + "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.", + ctor + ))); + prevState = + null === partialState || void 0 === partialState + ? prevState + : assign({}, prevState, partialState); + workInProgress.memoizedState = prevState; + 0 === workInProgress.lanes && + (workInProgress.updateQueue.baseState = prevState); + } + function checkShouldComponentUpdate( + workInProgress, + ctor, + oldProps, + newProps, + oldState, + newState, + nextContext + ) { + var instance = workInProgress.stateNode; + if ("function" === typeof instance.shouldComponentUpdate) { + oldProps = instance.shouldComponentUpdate( + newProps, + newState, + nextContext + ); + if (workInProgress.mode & StrictLegacyMode) { + setIsStrictModeForDevtools(!0); + try { + oldProps = instance.shouldComponentUpdate( + newProps, + newState, + nextContext + ); + } finally { + setIsStrictModeForDevtools(!1); + } + } + void 0 === oldProps && + console.error( + "%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.", + getComponentNameFromType(ctor) || "Component" + ); + return oldProps; + } + return ctor.prototype && ctor.prototype.isPureReactComponent + ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState) + : !0; + } + function callComponentWillReceiveProps( + workInProgress, + instance, + newProps, + nextContext + ) { + var oldState = instance.state; + "function" === typeof instance.componentWillReceiveProps && + instance.componentWillReceiveProps(newProps, nextContext); + "function" === typeof instance.UNSAFE_componentWillReceiveProps && + instance.UNSAFE_componentWillReceiveProps(newProps, nextContext); + instance.state !== oldState && + ((workInProgress = + getComponentNameFromFiber(workInProgress) || "Component"), + didWarnAboutStateAssignmentForComponent.has(workInProgress) || + (didWarnAboutStateAssignmentForComponent.add(workInProgress), + console.error( + "%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.", + workInProgress + )), + classComponentUpdater.enqueueReplaceState( + instance, + instance.state, + null + )); + } + function resolveClassComponentProps(Component, baseProps) { + var newProps = baseProps; + if ("ref" in baseProps) { + newProps = {}; + for (var propName in baseProps) + "ref" !== propName && (newProps[propName] = baseProps[propName]); + } + if ((Component = Component.defaultProps)) { + newProps === baseProps && (newProps = assign({}, newProps)); + for (var _propName in Component) + void 0 === newProps[_propName] && + (newProps[_propName] = Component[_propName]); + } + return newProps; } function pushTreeFork(workInProgress, totalChildren) { warnIfNotHydrating(); @@ -4582,496 +4705,127 @@ "Expected to be hydrating. This is a bug in React. Please file an issue." ); } - function buildHydrationDiffNode(fiber, distanceFromLeaf) { - if (null === fiber.return) { - if (null === hydrationDiffRootDEV) - hydrationDiffRootDEV = { - fiber: fiber, - children: [], - serverProps: void 0, - serverTail: [], - distanceFromLeaf: distanceFromLeaf - }; - else { - if (hydrationDiffRootDEV.fiber !== fiber) - throw Error( - "Saw multiple hydration diff roots in a pass. This is a bug in React." - ); - hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf && - (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf); - } - return hydrationDiffRootDEV; - } - var siblings = buildHydrationDiffNode( - fiber.return, - distanceFromLeaf + 1 - ).children; - if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber) - return ( - (siblings = siblings[siblings.length - 1]), - siblings.distanceFromLeaf > distanceFromLeaf && - (siblings.distanceFromLeaf = distanceFromLeaf), - siblings - ); - distanceFromLeaf = { - fiber: fiber, - children: [], - serverProps: void 0, - serverTail: [], - distanceFromLeaf: distanceFromLeaf - }; - siblings.push(distanceFromLeaf); - return distanceFromLeaf; - } - function warnNonHydratedInstance(fiber, rejectedCandidate) { - didSuspendOrErrorDEV || - ((fiber = buildHydrationDiffNode(fiber, 0)), - (fiber.serverProps = null), - null !== rejectedCandidate && - ((rejectedCandidate = - describeHydratableInstanceForDevWarnings(rejectedCandidate)), - fiber.serverTail.push(rejectedCandidate))); + function createThenableState() { + return { didWarnAboutUncachedPromise: !1, thenables: [] }; } - function throwOnHydrationMismatch(fiber) { - var diff = "", - diffRoot = hydrationDiffRootDEV; - null !== diffRoot && - ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot))); - queueHydrationError( - createCapturedValueAtFiber( - Error( - "Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\nhttps://react.dev/link/hydration-mismatch" + - diff - ), - fiber - ) - ); - throw HydrationMismatchException; + function isThenableResolved(thenable) { + thenable = thenable.status; + return "fulfilled" === thenable || "rejected" === thenable; } - function prepareToHydrateHostInstance(fiber) { - var didHydrate = fiber.stateNode; - var type = fiber.type, - props = fiber.memoizedProps; - didHydrate[internalInstanceKey] = fiber; - didHydrate[internalPropsKey] = props; - validatePropertiesInDevelopment(type, props); - switch (type) { - case "dialog": - listenToNonDelegatedEvent("cancel", didHydrate); - listenToNonDelegatedEvent("close", didHydrate); - break; - case "iframe": - case "object": - case "embed": - listenToNonDelegatedEvent("load", didHydrate); - break; - case "video": - case "audio": - for (type = 0; type < mediaEventTypes.length; type++) - listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate); - break; - case "source": - listenToNonDelegatedEvent("error", didHydrate); - break; - case "img": - case "image": - case "link": - listenToNonDelegatedEvent("error", didHydrate); - listenToNonDelegatedEvent("load", didHydrate); - break; - case "details": - listenToNonDelegatedEvent("toggle", didHydrate); - break; - case "input": - checkControlledValueProps("input", props); - listenToNonDelegatedEvent("invalid", didHydrate); - validateInputProps(didHydrate, props); - initInput( - didHydrate, - props.value, - props.defaultValue, - props.checked, - props.defaultChecked, - props.type, - props.name, - !0 + function noop$4() {} + function trackUsedThenable(thenableState, thenable, index) { + null !== ReactSharedInternals.actQueue && + (ReactSharedInternals.didUsePromise = !0); + var trackedThenables = thenableState.thenables; + index = trackedThenables[index]; + void 0 === index + ? trackedThenables.push(thenable) + : index !== thenable && + (thenableState.didWarnAboutUncachedPromise || + ((thenableState.didWarnAboutUncachedPromise = !0), + console.error( + "A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework." + )), + thenable.then(noop$4, noop$4), + (thenable = index)); + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw ( + ((thenableState = thenable.reason), + checkIfUseWrappedInAsyncCatch(thenableState), + thenableState) ); - track(didHydrate); - break; - case "option": - validateOptionProps(didHydrate, props); - break; - case "select": - checkControlledValueProps("select", props); - listenToNonDelegatedEvent("invalid", didHydrate); - validateSelectProps(didHydrate, props); - break; - case "textarea": - checkControlledValueProps("textarea", props), - listenToNonDelegatedEvent("invalid", didHydrate), - validateTextareaProps(didHydrate, props), - initTextarea( - didHydrate, - props.value, - props.defaultValue, - props.children - ), - track(didHydrate); + default: + if ("string" === typeof thenable.status) + thenable.then(noop$4, noop$4); + else { + thenableState = workInProgressRoot; + if ( + null !== thenableState && + 100 < thenableState.shellSuspendCounter + ) + throw Error( + "async/await is not yet supported in Client Components, only Server Components. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." + ); + thenableState = thenable; + thenableState.status = "pending"; + thenableState.then( + function (fulfilledValue) { + if ("pending" === thenable.status) { + var fulfilledThenable = thenable; + fulfilledThenable.status = "fulfilled"; + fulfilledThenable.value = fulfilledValue; + } + }, + function (error) { + if ("pending" === thenable.status) { + var rejectedThenable = thenable; + rejectedThenable.status = "rejected"; + rejectedThenable.reason = error; + } + } + ); + } + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw ( + ((thenableState = thenable.reason), + checkIfUseWrappedInAsyncCatch(thenableState), + thenableState) + ); + } + suspendedThenable = thenable; + needsToResetSuspendedThenableDEV = !0; + throw SuspenseException; } - type = props.children; - ("string" !== typeof type && - "number" !== typeof type && - "bigint" !== typeof type) || - didHydrate.textContent === "" + type || - !0 === props.suppressHydrationWarning || - checkForUnmatchedText(didHydrate.textContent, type) - ? (null != props.popover && - (listenToNonDelegatedEvent("beforetoggle", didHydrate), - listenToNonDelegatedEvent("toggle", didHydrate)), - null != props.onScroll && - listenToNonDelegatedEvent("scroll", didHydrate), - null != props.onScrollEnd && - listenToNonDelegatedEvent("scrollend", didHydrate), - null != props.onClick && (didHydrate.onclick = noop$2), - (didHydrate = !0)) - : (didHydrate = !1); - didHydrate || throwOnHydrationMismatch(fiber); - } - function popToNextHostParent(fiber) { - for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) - switch (hydrationParentFiber.tag) { - case 3: - case 27: - rootOrSingletonContext = !0; - return; - case 5: - case 13: - rootOrSingletonContext = !1; - return; - default: - hydrationParentFiber = hydrationParentFiber.return; - } } - function popHydrationState(fiber) { - if (fiber !== hydrationParentFiber) return !1; - if (!isHydrating) - return popToNextHostParent(fiber), (isHydrating = !0), !1; - var shouldClear = !1, - JSCompiler_temp; - if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { - if ((JSCompiler_temp = 5 === fiber.tag)) - (JSCompiler_temp = fiber.type), - (JSCompiler_temp = - !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || - shouldSetTextContent(fiber.type, fiber.memoizedProps)); - JSCompiler_temp = !JSCompiler_temp; - } - JSCompiler_temp && (shouldClear = !0); - if (shouldClear && nextHydratableInstance) { - for (shouldClear = nextHydratableInstance; shouldClear; ) { - JSCompiler_temp = buildHydrationDiffNode(fiber, 0); - var description = - describeHydratableInstanceForDevWarnings(shouldClear); - JSCompiler_temp.serverTail.push(description); - shouldClear = - "Suspense" === description.type - ? getNextHydratableInstanceAfterSuspenseInstance(shouldClear) - : getNextHydratable(shouldClear.nextSibling); - } - throwOnHydrationMismatch(fiber); - } - popToNextHostParent(fiber); - if (13 === fiber.tag) { - fiber = fiber.memoizedState; - fiber = null !== fiber ? fiber.dehydrated : null; - if (!fiber) - throw Error( - "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue." - ); - nextHydratableInstance = - getNextHydratableInstanceAfterSuspenseInstance(fiber); - } else - nextHydratableInstance = hydrationParentFiber - ? getNextHydratable(fiber.stateNode.nextSibling) - : null; - return !0; + function getSuspendedThenable() { + if (null === suspendedThenable) + throw Error( + "Expected a suspended thenable. This is a bug in React. Please file an issue." + ); + var thenable = suspendedThenable; + suspendedThenable = null; + needsToResetSuspendedThenableDEV = !1; + return thenable; } - function resetHydrationState() { - nextHydratableInstance = hydrationParentFiber = null; - didSuspendOrErrorDEV = isHydrating = !1; + function checkIfUseWrappedInAsyncCatch(rejectedReason) { + if ( + rejectedReason === SuspenseException || + rejectedReason === SuspenseActionException + ) + throw Error( + "Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." + ); } - function upgradeHydrationErrorsToRecoverable() { - var queuedErrors = hydrationErrors; - null !== queuedErrors && - (null === workInProgressRootRecoverableErrors - ? (workInProgressRootRecoverableErrors = queuedErrors) - : workInProgressRootRecoverableErrors.push.apply( - workInProgressRootRecoverableErrors, - queuedErrors - ), - (hydrationErrors = null)); - return queuedErrors; + function pushHiddenContext(fiber, context) { + var prevEntangledRenderLanes = entangledRenderLanes; + push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber); + push(currentTreeHiddenStackCursor, context, fiber); + entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes; } - function queueHydrationError(error) { - null === hydrationErrors - ? (hydrationErrors = [error]) - : hydrationErrors.push(error); + function reuseHiddenContextOnStack(fiber) { + push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber); + push( + currentTreeHiddenStackCursor, + currentTreeHiddenStackCursor.current, + fiber + ); } - function emitPendingHydrationWarnings() { - var diffRoot = hydrationDiffRootDEV; - null !== diffRoot && - ((hydrationDiffRootDEV = null), - (diffRoot = describeDiff(diffRoot)), - console.error( - "A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\n%s%s", - "https://react.dev/link/hydration-mismatch", - diffRoot - )); + function popHiddenContext(fiber) { + entangledRenderLanes = prevEntangledRenderLanesCursor.current; + pop(currentTreeHiddenStackCursor, fiber); + pop(prevEntangledRenderLanesCursor, fiber); } - function warnOnInvalidCallback(callback) { - if (null !== callback && "function" !== typeof callback) { - var key = String(callback); - didWarnOnInvalidCallback.has(key) || - (didWarnOnInvalidCallback.add(key), - console.error( - "Expected the last optional `callback` argument to be a function. Instead received: %s.", - callback - )); - } - } - function applyDerivedStateFromProps( - workInProgress, - ctor, - getDerivedStateFromProps, - nextProps - ) { - var prevState = workInProgress.memoizedState, - partialState = getDerivedStateFromProps(nextProps, prevState); - if (workInProgress.mode & StrictLegacyMode) { - setIsStrictModeForDevtools(!0); - try { - partialState = getDerivedStateFromProps(nextProps, prevState); - } finally { - setIsStrictModeForDevtools(!1); - } - } - void 0 === partialState && - ((ctor = getComponentNameFromType(ctor) || "Component"), - didWarnAboutUndefinedDerivedState.has(ctor) || - (didWarnAboutUndefinedDerivedState.add(ctor), - console.error( - "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.", - ctor - ))); - prevState = - null === partialState || void 0 === partialState - ? prevState - : assign({}, prevState, partialState); - workInProgress.memoizedState = prevState; - 0 === workInProgress.lanes && - (workInProgress.updateQueue.baseState = prevState); - } - function checkShouldComponentUpdate( - workInProgress, - ctor, - oldProps, - newProps, - oldState, - newState, - nextContext - ) { - var instance = workInProgress.stateNode; - if ("function" === typeof instance.shouldComponentUpdate) { - oldProps = instance.shouldComponentUpdate( - newProps, - newState, - nextContext - ); - if (workInProgress.mode & StrictLegacyMode) { - setIsStrictModeForDevtools(!0); - try { - oldProps = instance.shouldComponentUpdate( - newProps, - newState, - nextContext - ); - } finally { - setIsStrictModeForDevtools(!1); - } - } - void 0 === oldProps && - console.error( - "%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.", - getComponentNameFromType(ctor) || "Component" - ); - return oldProps; - } - return ctor.prototype && ctor.prototype.isPureReactComponent - ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState) - : !0; - } - function callComponentWillReceiveProps( - workInProgress, - instance, - newProps, - nextContext - ) { - var oldState = instance.state; - "function" === typeof instance.componentWillReceiveProps && - instance.componentWillReceiveProps(newProps, nextContext); - "function" === typeof instance.UNSAFE_componentWillReceiveProps && - instance.UNSAFE_componentWillReceiveProps(newProps, nextContext); - instance.state !== oldState && - ((workInProgress = - getComponentNameFromFiber(workInProgress) || "Component"), - didWarnAboutStateAssignmentForComponent.has(workInProgress) || - (didWarnAboutStateAssignmentForComponent.add(workInProgress), - console.error( - "%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.", - workInProgress - )), - classComponentUpdater.enqueueReplaceState( - instance, - instance.state, - null - )); - } - function resolveClassComponentProps(Component, baseProps) { - var newProps = baseProps; - if ("ref" in baseProps) { - newProps = {}; - for (var propName in baseProps) - "ref" !== propName && (newProps[propName] = baseProps[propName]); - } - if ((Component = Component.defaultProps)) { - newProps === baseProps && (newProps = assign({}, newProps)); - for (var _propName in Component) - void 0 === newProps[_propName] && - (newProps[_propName] = Component[_propName]); - } - return newProps; - } - function createThenableState() { - return { didWarnAboutUncachedPromise: !1, thenables: [] }; - } - function isThenableResolved(thenable) { - thenable = thenable.status; - return "fulfilled" === thenable || "rejected" === thenable; - } - function noop$4() {} - function trackUsedThenable(thenableState, thenable, index) { - null !== ReactSharedInternals.actQueue && - (ReactSharedInternals.didUsePromise = !0); - var trackedThenables = thenableState.thenables; - index = trackedThenables[index]; - void 0 === index - ? trackedThenables.push(thenable) - : index !== thenable && - (thenableState.didWarnAboutUncachedPromise || - ((thenableState.didWarnAboutUncachedPromise = !0), - console.error( - "A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework." - )), - thenable.then(noop$4, noop$4), - (thenable = index)); - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw ( - ((thenableState = thenable.reason), - checkIfUseWrappedInAsyncCatch(thenableState), - thenableState) - ); - default: - if ("string" === typeof thenable.status) - thenable.then(noop$4, noop$4); - else { - thenableState = workInProgressRoot; - if ( - null !== thenableState && - 100 < thenableState.shellSuspendCounter - ) - throw Error( - "async/await is not yet supported in Client Components, only Server Components. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." - ); - thenableState = thenable; - thenableState.status = "pending"; - thenableState.then( - function (fulfilledValue) { - if ("pending" === thenable.status) { - var fulfilledThenable = thenable; - fulfilledThenable.status = "fulfilled"; - fulfilledThenable.value = fulfilledValue; - } - }, - function (error) { - if ("pending" === thenable.status) { - var rejectedThenable = thenable; - rejectedThenable.status = "rejected"; - rejectedThenable.reason = error; - } - } - ); - } - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw ( - ((thenableState = thenable.reason), - checkIfUseWrappedInAsyncCatch(thenableState), - thenableState) - ); - } - suspendedThenable = thenable; - needsToResetSuspendedThenableDEV = !0; - throw SuspenseException; - } - } - function getSuspendedThenable() { - if (null === suspendedThenable) - throw Error( - "Expected a suspended thenable. This is a bug in React. Please file an issue." - ); - var thenable = suspendedThenable; - suspendedThenable = null; - needsToResetSuspendedThenableDEV = !1; - return thenable; - } - function checkIfUseWrappedInAsyncCatch(rejectedReason) { - if ( - rejectedReason === SuspenseException || - rejectedReason === SuspenseActionException - ) - throw Error( - "Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." - ); - } - function pushHiddenContext(fiber, context) { - var prevEntangledRenderLanes = entangledRenderLanes; - push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber); - push(currentTreeHiddenStackCursor, context, fiber); - entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes; - } - function reuseHiddenContextOnStack(fiber) { - push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber); - push( - currentTreeHiddenStackCursor, - currentTreeHiddenStackCursor.current, - fiber - ); - } - function popHiddenContext(fiber) { - entangledRenderLanes = prevEntangledRenderLanesCursor.current; - pop(currentTreeHiddenStackCursor, fiber); - pop(prevEntangledRenderLanesCursor, fiber); - } - function peekCacheFromPool() { - var cacheResumedFromPreviousRender = resumedCache.current; - return null !== cacheResumedFromPreviousRender - ? cacheResumedFromPreviousRender - : workInProgressRoot.pooledCache; + function peekCacheFromPool() { + var cacheResumedFromPreviousRender = resumedCache.current; + return null !== cacheResumedFromPreviousRender + ? cacheResumedFromPreviousRender + : workInProgressRoot.pooledCache; } function pushTransition(offscreenWorkInProgress, prevCachePool) { null === prevCachePool @@ -9102,32 +8856,32 @@ return current; } function updateSuspenseComponent(current, workInProgress, renderLanes) { - var JSCompiler_object_inline_digest_2384; - var JSCompiler_object_inline_stack_2385 = workInProgress.pendingProps; + var JSCompiler_object_inline_digest_2400; + var JSCompiler_object_inline_stack_2401 = workInProgress.pendingProps; shouldSuspendImpl(workInProgress) && (workInProgress.flags |= 128); - var JSCompiler_object_inline_componentStack_2386 = !1; + var JSCompiler_object_inline_componentStack_2402 = !1; var didSuspend = 0 !== (workInProgress.flags & 128); - (JSCompiler_object_inline_digest_2384 = didSuspend) || - (JSCompiler_object_inline_digest_2384 = + (JSCompiler_object_inline_digest_2400 = didSuspend) || + (JSCompiler_object_inline_digest_2400 = null !== current && null === current.memoizedState ? !1 : 0 !== (suspenseStackCursor.current & ForceSuspenseFallback)); - JSCompiler_object_inline_digest_2384 && - ((JSCompiler_object_inline_componentStack_2386 = !0), + JSCompiler_object_inline_digest_2400 && + ((JSCompiler_object_inline_componentStack_2402 = !0), (workInProgress.flags &= -129)); - JSCompiler_object_inline_digest_2384 = 0 !== (workInProgress.flags & 32); + JSCompiler_object_inline_digest_2400 = 0 !== (workInProgress.flags & 32); workInProgress.flags &= -33; if (null === current) { if (isHydrating) { - JSCompiler_object_inline_componentStack_2386 + JSCompiler_object_inline_componentStack_2402 ? pushPrimaryTreeSuspenseHandler(workInProgress) : reuseSuspenseHandlerOnStack(workInProgress); if (isHydrating) { - var JSCompiler_object_inline_message_2383 = nextHydratableInstance; + var JSCompiler_object_inline_message_2399 = nextHydratableInstance; var JSCompiler_temp; - if (!(JSCompiler_temp = !JSCompiler_object_inline_message_2383)) { + if (!(JSCompiler_temp = !JSCompiler_object_inline_message_2399)) { c: { - var instance = JSCompiler_object_inline_message_2383; + var instance = JSCompiler_object_inline_message_2399; for ( JSCompiler_temp = rootOrSingletonContext; 8 !== instance.nodeType; @@ -9169,77 +8923,77 @@ JSCompiler_temp && (warnNonHydratedInstance( workInProgress, - JSCompiler_object_inline_message_2383 + JSCompiler_object_inline_message_2399 ), throwOnHydrationMismatch(workInProgress)); } - JSCompiler_object_inline_message_2383 = workInProgress.memoizedState; + JSCompiler_object_inline_message_2399 = workInProgress.memoizedState; if ( - null !== JSCompiler_object_inline_message_2383 && - ((JSCompiler_object_inline_message_2383 = - JSCompiler_object_inline_message_2383.dehydrated), - null !== JSCompiler_object_inline_message_2383) + null !== JSCompiler_object_inline_message_2399 && + ((JSCompiler_object_inline_message_2399 = + JSCompiler_object_inline_message_2399.dehydrated), + null !== JSCompiler_object_inline_message_2399) ) return ( - isSuspenseInstanceFallback(JSCompiler_object_inline_message_2383) + isSuspenseInstanceFallback(JSCompiler_object_inline_message_2399) ? (workInProgress.lanes = 32) : (workInProgress.lanes = 536870912), null ); popSuspenseHandler(workInProgress); } - JSCompiler_object_inline_message_2383 = - JSCompiler_object_inline_stack_2385.children; - JSCompiler_object_inline_stack_2385 = - JSCompiler_object_inline_stack_2385.fallback; - if (JSCompiler_object_inline_componentStack_2386) + JSCompiler_object_inline_message_2399 = + JSCompiler_object_inline_stack_2401.children; + JSCompiler_object_inline_stack_2401 = + JSCompiler_object_inline_stack_2401.fallback; + if (JSCompiler_object_inline_componentStack_2402) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_componentStack_2386 = + (JSCompiler_object_inline_componentStack_2402 = workInProgress.mode), - (JSCompiler_object_inline_message_2383 = + (JSCompiler_object_inline_message_2399 = mountWorkInProgressOffscreenFiber( { mode: "hidden", - children: JSCompiler_object_inline_message_2383 + children: JSCompiler_object_inline_message_2399 }, - JSCompiler_object_inline_componentStack_2386 + JSCompiler_object_inline_componentStack_2402 )), - (JSCompiler_object_inline_stack_2385 = createFiberFromFragment( - JSCompiler_object_inline_stack_2385, - JSCompiler_object_inline_componentStack_2386, + (JSCompiler_object_inline_stack_2401 = createFiberFromFragment( + JSCompiler_object_inline_stack_2401, + JSCompiler_object_inline_componentStack_2402, renderLanes, null )), - (JSCompiler_object_inline_message_2383.return = workInProgress), - (JSCompiler_object_inline_stack_2385.return = workInProgress), - (JSCompiler_object_inline_message_2383.sibling = - JSCompiler_object_inline_stack_2385), - (workInProgress.child = JSCompiler_object_inline_message_2383), - (JSCompiler_object_inline_componentStack_2386 = + (JSCompiler_object_inline_message_2399.return = workInProgress), + (JSCompiler_object_inline_stack_2401.return = workInProgress), + (JSCompiler_object_inline_message_2399.sibling = + JSCompiler_object_inline_stack_2401), + (workInProgress.child = JSCompiler_object_inline_message_2399), + (JSCompiler_object_inline_componentStack_2402 = workInProgress.child), - (JSCompiler_object_inline_componentStack_2386.memoizedState = + (JSCompiler_object_inline_componentStack_2402.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_componentStack_2386.childLanes = + (JSCompiler_object_inline_componentStack_2402.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_digest_2384, + JSCompiler_object_inline_digest_2400, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - JSCompiler_object_inline_stack_2385 + JSCompiler_object_inline_stack_2401 ); pushPrimaryTreeSuspenseHandler(workInProgress); return mountSuspensePrimaryChildren( workInProgress, - JSCompiler_object_inline_message_2383 + JSCompiler_object_inline_message_2399 ); } var prevState = current.memoizedState; if ( null !== prevState && - ((JSCompiler_object_inline_message_2383 = prevState.dehydrated), - null !== JSCompiler_object_inline_message_2383) + ((JSCompiler_object_inline_message_2399 = prevState.dehydrated), + null !== JSCompiler_object_inline_message_2399) ) { if (didSuspend) workInProgress.flags & 256 @@ -9256,94 +9010,94 @@ (workInProgress.flags |= 128), (workInProgress = null)) : (reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_componentStack_2386 = - JSCompiler_object_inline_stack_2385.fallback), - (JSCompiler_object_inline_message_2383 = workInProgress.mode), - (JSCompiler_object_inline_stack_2385 = + (JSCompiler_object_inline_componentStack_2402 = + JSCompiler_object_inline_stack_2401.fallback), + (JSCompiler_object_inline_message_2399 = workInProgress.mode), + (JSCompiler_object_inline_stack_2401 = mountWorkInProgressOffscreenFiber( { mode: "visible", - children: JSCompiler_object_inline_stack_2385.children + children: JSCompiler_object_inline_stack_2401.children }, - JSCompiler_object_inline_message_2383 + JSCompiler_object_inline_message_2399 )), - (JSCompiler_object_inline_componentStack_2386 = + (JSCompiler_object_inline_componentStack_2402 = createFiberFromFragment( - JSCompiler_object_inline_componentStack_2386, - JSCompiler_object_inline_message_2383, + JSCompiler_object_inline_componentStack_2402, + JSCompiler_object_inline_message_2399, renderLanes, null )), - (JSCompiler_object_inline_componentStack_2386.flags |= 2), - (JSCompiler_object_inline_stack_2385.return = workInProgress), - (JSCompiler_object_inline_componentStack_2386.return = + (JSCompiler_object_inline_componentStack_2402.flags |= 2), + (JSCompiler_object_inline_stack_2401.return = workInProgress), + (JSCompiler_object_inline_componentStack_2402.return = workInProgress), - (JSCompiler_object_inline_stack_2385.sibling = - JSCompiler_object_inline_componentStack_2386), - (workInProgress.child = JSCompiler_object_inline_stack_2385), + (JSCompiler_object_inline_stack_2401.sibling = + JSCompiler_object_inline_componentStack_2402), + (workInProgress.child = JSCompiler_object_inline_stack_2401), reconcileChildFibers( workInProgress, current.child, null, renderLanes ), - (JSCompiler_object_inline_stack_2385 = workInProgress.child), - (JSCompiler_object_inline_stack_2385.memoizedState = + (JSCompiler_object_inline_stack_2401 = workInProgress.child), + (JSCompiler_object_inline_stack_2401.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_stack_2385.childLanes = + (JSCompiler_object_inline_stack_2401.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_digest_2384, + JSCompiler_object_inline_digest_2400, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), (workInProgress = - JSCompiler_object_inline_componentStack_2386)); + JSCompiler_object_inline_componentStack_2402)); else if ( (pushPrimaryTreeSuspenseHandler(workInProgress), isHydrating && console.error( "We should not be hydrating here. This is a bug in React. Please file a bug." ), - isSuspenseInstanceFallback(JSCompiler_object_inline_message_2383)) + isSuspenseInstanceFallback(JSCompiler_object_inline_message_2399)) ) { - JSCompiler_object_inline_digest_2384 = - JSCompiler_object_inline_message_2383.nextSibling && - JSCompiler_object_inline_message_2383.nextSibling.dataset; - if (JSCompiler_object_inline_digest_2384) { - JSCompiler_temp = JSCompiler_object_inline_digest_2384.dgst; - var message = JSCompiler_object_inline_digest_2384.msg; - instance = JSCompiler_object_inline_digest_2384.stck; - var componentStack = JSCompiler_object_inline_digest_2384.cstck; + JSCompiler_object_inline_digest_2400 = + JSCompiler_object_inline_message_2399.nextSibling && + JSCompiler_object_inline_message_2399.nextSibling.dataset; + if (JSCompiler_object_inline_digest_2400) { + JSCompiler_temp = JSCompiler_object_inline_digest_2400.dgst; + var message = JSCompiler_object_inline_digest_2400.msg; + instance = JSCompiler_object_inline_digest_2400.stck; + var componentStack = JSCompiler_object_inline_digest_2400.cstck; } - JSCompiler_object_inline_message_2383 = message; - JSCompiler_object_inline_digest_2384 = JSCompiler_temp; - JSCompiler_object_inline_stack_2385 = instance; - JSCompiler_temp = JSCompiler_object_inline_componentStack_2386 = + JSCompiler_object_inline_message_2399 = message; + JSCompiler_object_inline_digest_2400 = JSCompiler_temp; + JSCompiler_object_inline_stack_2401 = instance; + JSCompiler_temp = JSCompiler_object_inline_componentStack_2402 = componentStack; - JSCompiler_object_inline_componentStack_2386 = - JSCompiler_object_inline_message_2383 - ? Error(JSCompiler_object_inline_message_2383) + JSCompiler_object_inline_componentStack_2402 = + JSCompiler_object_inline_message_2399 + ? Error(JSCompiler_object_inline_message_2399) : Error( "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." ); - JSCompiler_object_inline_componentStack_2386.stack = - JSCompiler_object_inline_stack_2385 || ""; - JSCompiler_object_inline_componentStack_2386.digest = - JSCompiler_object_inline_digest_2384; - JSCompiler_object_inline_digest_2384 = + JSCompiler_object_inline_componentStack_2402.stack = + JSCompiler_object_inline_stack_2401 || ""; + JSCompiler_object_inline_componentStack_2402.digest = + JSCompiler_object_inline_digest_2400; + JSCompiler_object_inline_digest_2400 = void 0 === JSCompiler_temp ? null : JSCompiler_temp; - JSCompiler_object_inline_stack_2385 = { - value: JSCompiler_object_inline_componentStack_2386, + JSCompiler_object_inline_stack_2401 = { + value: JSCompiler_object_inline_componentStack_2402, source: null, - stack: JSCompiler_object_inline_digest_2384 + stack: JSCompiler_object_inline_digest_2400 }; - "string" === typeof JSCompiler_object_inline_digest_2384 && + "string" === typeof JSCompiler_object_inline_digest_2400 && CapturedStacks.set( - JSCompiler_object_inline_componentStack_2386, - JSCompiler_object_inline_stack_2385 + JSCompiler_object_inline_componentStack_2402, + JSCompiler_object_inline_stack_2401 ); - queueHydrationError(JSCompiler_object_inline_stack_2385); + queueHydrationError(JSCompiler_object_inline_stack_2401); workInProgress = retrySuspenseComponentWithoutHydrating( current, workInProgress, @@ -9357,44 +9111,44 @@ renderLanes, !1 ), - (JSCompiler_object_inline_digest_2384 = + (JSCompiler_object_inline_digest_2400 = 0 !== (renderLanes & current.childLanes)), - didReceiveUpdate || JSCompiler_object_inline_digest_2384) + didReceiveUpdate || JSCompiler_object_inline_digest_2400) ) { - JSCompiler_object_inline_digest_2384 = workInProgressRoot; + JSCompiler_object_inline_digest_2400 = workInProgressRoot; if ( - null !== JSCompiler_object_inline_digest_2384 && - ((JSCompiler_object_inline_stack_2385 = renderLanes & -renderLanes), - (JSCompiler_object_inline_stack_2385 = - 0 !== (JSCompiler_object_inline_stack_2385 & 42) + null !== JSCompiler_object_inline_digest_2400 && + ((JSCompiler_object_inline_stack_2401 = renderLanes & -renderLanes), + (JSCompiler_object_inline_stack_2401 = + 0 !== (JSCompiler_object_inline_stack_2401 & 42) ? 1 : getBumpedLaneForHydrationByLane( - JSCompiler_object_inline_stack_2385 + JSCompiler_object_inline_stack_2401 )), - (JSCompiler_object_inline_stack_2385 = + (JSCompiler_object_inline_stack_2401 = 0 !== - (JSCompiler_object_inline_stack_2385 & - (JSCompiler_object_inline_digest_2384.suspendedLanes | + (JSCompiler_object_inline_stack_2401 & + (JSCompiler_object_inline_digest_2400.suspendedLanes | renderLanes)) ? 0 - : JSCompiler_object_inline_stack_2385), - 0 !== JSCompiler_object_inline_stack_2385 && - JSCompiler_object_inline_stack_2385 !== prevState.retryLane) + : JSCompiler_object_inline_stack_2401), + 0 !== JSCompiler_object_inline_stack_2401 && + JSCompiler_object_inline_stack_2401 !== prevState.retryLane) ) throw ( - ((prevState.retryLane = JSCompiler_object_inline_stack_2385), + ((prevState.retryLane = JSCompiler_object_inline_stack_2401), enqueueConcurrentRenderForLane( current, - JSCompiler_object_inline_stack_2385 + JSCompiler_object_inline_stack_2401 ), scheduleUpdateOnFiber( - JSCompiler_object_inline_digest_2384, + JSCompiler_object_inline_digest_2400, current, - JSCompiler_object_inline_stack_2385 + JSCompiler_object_inline_stack_2401 ), SelectiveHydrationException) ); - JSCompiler_object_inline_message_2383.data === + JSCompiler_object_inline_message_2399.data === SUSPENSE_PENDING_START_DATA || renderDidSuspendDelayIfPossible(); workInProgress = retrySuspenseComponentWithoutHydrating( current, @@ -9402,14 +9156,14 @@ renderLanes ); } else - JSCompiler_object_inline_message_2383.data === + JSCompiler_object_inline_message_2399.data === SUSPENSE_PENDING_START_DATA ? ((workInProgress.flags |= 192), (workInProgress.child = current.child), (workInProgress = null)) : ((current = prevState.treeContext), (nextHydratableInstance = getNextHydratable( - JSCompiler_object_inline_message_2383.nextSibling + JSCompiler_object_inline_message_2399.nextSibling )), (hydrationParentFiber = workInProgress), (isHydrating = !0), @@ -9427,57 +9181,57 @@ (treeContextProvider = workInProgress)), (workInProgress = mountSuspensePrimaryChildren( workInProgress, - JSCompiler_object_inline_stack_2385.children + JSCompiler_object_inline_stack_2401.children )), (workInProgress.flags |= 4096)); return workInProgress; } - if (JSCompiler_object_inline_componentStack_2386) + if (JSCompiler_object_inline_componentStack_2402) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_componentStack_2386 = - JSCompiler_object_inline_stack_2385.fallback), - (JSCompiler_object_inline_message_2383 = workInProgress.mode), + (JSCompiler_object_inline_componentStack_2402 = + JSCompiler_object_inline_stack_2401.fallback), + (JSCompiler_object_inline_message_2399 = workInProgress.mode), (JSCompiler_temp = current.child), (instance = JSCompiler_temp.sibling), - (JSCompiler_object_inline_stack_2385 = createWorkInProgress( + (JSCompiler_object_inline_stack_2401 = createWorkInProgress( JSCompiler_temp, { mode: "hidden", - children: JSCompiler_object_inline_stack_2385.children + children: JSCompiler_object_inline_stack_2401.children } )), - (JSCompiler_object_inline_stack_2385.subtreeFlags = + (JSCompiler_object_inline_stack_2401.subtreeFlags = JSCompiler_temp.subtreeFlags & 65011712), null !== instance - ? (JSCompiler_object_inline_componentStack_2386 = + ? (JSCompiler_object_inline_componentStack_2402 = createWorkInProgress( instance, - JSCompiler_object_inline_componentStack_2386 + JSCompiler_object_inline_componentStack_2402 )) - : ((JSCompiler_object_inline_componentStack_2386 = + : ((JSCompiler_object_inline_componentStack_2402 = createFiberFromFragment( - JSCompiler_object_inline_componentStack_2386, - JSCompiler_object_inline_message_2383, + JSCompiler_object_inline_componentStack_2402, + JSCompiler_object_inline_message_2399, renderLanes, null )), - (JSCompiler_object_inline_componentStack_2386.flags |= 2)), - (JSCompiler_object_inline_componentStack_2386.return = + (JSCompiler_object_inline_componentStack_2402.flags |= 2)), + (JSCompiler_object_inline_componentStack_2402.return = workInProgress), - (JSCompiler_object_inline_stack_2385.return = workInProgress), - (JSCompiler_object_inline_stack_2385.sibling = - JSCompiler_object_inline_componentStack_2386), - (workInProgress.child = JSCompiler_object_inline_stack_2385), - (JSCompiler_object_inline_stack_2385 = - JSCompiler_object_inline_componentStack_2386), - (JSCompiler_object_inline_componentStack_2386 = workInProgress.child), - (JSCompiler_object_inline_message_2383 = current.child.memoizedState), - null === JSCompiler_object_inline_message_2383 - ? (JSCompiler_object_inline_message_2383 = + (JSCompiler_object_inline_stack_2401.return = workInProgress), + (JSCompiler_object_inline_stack_2401.sibling = + JSCompiler_object_inline_componentStack_2402), + (workInProgress.child = JSCompiler_object_inline_stack_2401), + (JSCompiler_object_inline_stack_2401 = + JSCompiler_object_inline_componentStack_2402), + (JSCompiler_object_inline_componentStack_2402 = workInProgress.child), + (JSCompiler_object_inline_message_2399 = current.child.memoizedState), + null === JSCompiler_object_inline_message_2399 + ? (JSCompiler_object_inline_message_2399 = mountSuspenseOffscreenState(renderLanes)) : ((JSCompiler_temp = - JSCompiler_object_inline_message_2383.cachePool), + JSCompiler_object_inline_message_2399.cachePool), null !== JSCompiler_temp ? ((instance = CacheContext._currentValue), (JSCompiler_temp = @@ -9485,37 +9239,37 @@ ? { parent: instance, pool: instance } : JSCompiler_temp)) : (JSCompiler_temp = getSuspendedCache()), - (JSCompiler_object_inline_message_2383 = { + (JSCompiler_object_inline_message_2399 = { baseLanes: - JSCompiler_object_inline_message_2383.baseLanes | renderLanes, + JSCompiler_object_inline_message_2399.baseLanes | renderLanes, cachePool: JSCompiler_temp })), - (JSCompiler_object_inline_componentStack_2386.memoizedState = - JSCompiler_object_inline_message_2383), - (JSCompiler_object_inline_componentStack_2386.childLanes = + (JSCompiler_object_inline_componentStack_2402.memoizedState = + JSCompiler_object_inline_message_2399), + (JSCompiler_object_inline_componentStack_2402.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_digest_2384, + JSCompiler_object_inline_digest_2400, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - JSCompiler_object_inline_stack_2385 + JSCompiler_object_inline_stack_2401 ); pushPrimaryTreeSuspenseHandler(workInProgress); renderLanes = current.child; current = renderLanes.sibling; renderLanes = createWorkInProgress(renderLanes, { mode: "visible", - children: JSCompiler_object_inline_stack_2385.children + children: JSCompiler_object_inline_stack_2401.children }); renderLanes.return = workInProgress; renderLanes.sibling = null; null !== current && - ((JSCompiler_object_inline_digest_2384 = workInProgress.deletions), - null === JSCompiler_object_inline_digest_2384 + ((JSCompiler_object_inline_digest_2400 = workInProgress.deletions), + null === JSCompiler_object_inline_digest_2400 ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16)) - : JSCompiler_object_inline_digest_2384.push(current)); + : JSCompiler_object_inline_digest_2400.push(current)); workInProgress.child = renderLanes; workInProgress.memoizedState = null; return renderLanes; @@ -10878,15 +10632,24 @@ function commitAttachRef(finishedWork) { var ref = finishedWork.ref; if (null !== ref) { - var instance = finishedWork.stateNode; + switch (finishedWork.tag) { + case 26: + case 27: + case 5: + var instanceToUse = finishedWork.stateNode; + break; + default: + instanceToUse = finishedWork.stateNode; + } if ("function" === typeof ref) if (shouldProfile(finishedWork)) try { - startEffectTimer(), (finishedWork.refCleanup = ref(instance)); + startEffectTimer(), + (finishedWork.refCleanup = ref(instanceToUse)); } finally { recordEffectDuration(); } - else finishedWork.refCleanup = ref(instance); + else finishedWork.refCleanup = ref(instanceToUse); else "string" === typeof ref ? console.error("String refs are no longer supported.") @@ -10895,7 +10658,7 @@ "Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().", getComponentNameFromFiber(finishedWork) ), - (ref.current = instance); + (ref.current = instanceToUse); } } function safelyAttachRef(current, nearestMountedAncestor) { @@ -13185,144 +12948,390 @@ case REACT_OFFSCREEN_TYPE: return createFiberFromOffscreen(pendingProps, mode, lanes, key); default: - if ("object" === typeof type && null !== type) - switch (type.$$typeof) { - case REACT_PROVIDER_TYPE: - case REACT_CONTEXT_TYPE: - fiberTag = 10; - break a; - case REACT_CONSUMER_TYPE: - fiberTag = 9; - break a; - case REACT_FORWARD_REF_TYPE: - fiberTag = 11; - resolvedType = resolveForwardRefForHotReloading(resolvedType); - break a; - case REACT_MEMO_TYPE: - fiberTag = 14; - break a; - case REACT_LAZY_TYPE: - fiberTag = 16; - resolvedType = null; - break a; - } - resolvedType = ""; - if ( - void 0 === type || - ("object" === typeof type && - null !== type && - 0 === Object.keys(type).length) - ) - resolvedType += - " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports."; - null === type - ? (pendingProps = "null") - : isArrayImpl(type) - ? (pendingProps = "array") - : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE - ? ((pendingProps = - "<" + - (getComponentNameFromType(type.type) || "Unknown") + - " />"), - (resolvedType = - " Did you accidentally export a JSX literal instead of a component?")) - : (pendingProps = typeof type); - (fiberTag = owner ? getComponentNameFromOwner(owner) : null) && - (resolvedType += - "\n\nCheck the render method of `" + fiberTag + "`."); - fiberTag = 29; - pendingProps = Error( - "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " + - (pendingProps + "." + resolvedType) - ); - resolvedType = null; + if ("object" === typeof type && null !== type) + switch (type.$$typeof) { + case REACT_PROVIDER_TYPE: + case REACT_CONTEXT_TYPE: + fiberTag = 10; + break a; + case REACT_CONSUMER_TYPE: + fiberTag = 9; + break a; + case REACT_FORWARD_REF_TYPE: + fiberTag = 11; + resolvedType = resolveForwardRefForHotReloading(resolvedType); + break a; + case REACT_MEMO_TYPE: + fiberTag = 14; + break a; + case REACT_LAZY_TYPE: + fiberTag = 16; + resolvedType = null; + break a; + } + resolvedType = ""; + if ( + void 0 === type || + ("object" === typeof type && + null !== type && + 0 === Object.keys(type).length) + ) + resolvedType += + " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports."; + null === type + ? (pendingProps = "null") + : isArrayImpl(type) + ? (pendingProps = "array") + : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE + ? ((pendingProps = + "<" + + (getComponentNameFromType(type.type) || "Unknown") + + " />"), + (resolvedType = + " Did you accidentally export a JSX literal instead of a component?")) + : (pendingProps = typeof type); + (fiberTag = owner ? getComponentNameFromOwner(owner) : null) && + (resolvedType += + "\n\nCheck the render method of `" + fiberTag + "`."); + fiberTag = 29; + pendingProps = Error( + "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " + + (pendingProps + "." + resolvedType) + ); + resolvedType = null; + } + key = createFiber(fiberTag, pendingProps, key, mode); + key.elementType = type; + key.type = resolvedType; + key.lanes = lanes; + key._debugOwner = owner; + return key; + } + function createFiberFromElement(element, mode, lanes) { + mode = createFiberFromTypeAndProps( + element.type, + element.key, + element.props, + element._owner, + mode, + lanes + ); + mode._debugOwner = element._owner; + return mode; + } + function createFiberFromFragment(elements, mode, lanes, key) { + elements = createFiber(7, elements, key, mode); + elements.lanes = lanes; + return elements; + } + function createFiberFromOffscreen(pendingProps, mode, lanes, key) { + pendingProps = createFiber(22, pendingProps, key, mode); + pendingProps.elementType = REACT_OFFSCREEN_TYPE; + pendingProps.lanes = lanes; + var primaryChildInstance = { + _visibility: OffscreenVisible, + _pendingVisibility: OffscreenVisible, + _pendingMarkers: null, + _retryCache: null, + _transitions: null, + _current: null, + detach: function () { + var instance = primaryChildInstance, + fiber = instance._current; + if (null === fiber) + throw Error( + "Calling Offscreen.detach before instance handle has been set." + ); + if (0 === (instance._pendingVisibility & OffscreenDetached)) { + var root = enqueueConcurrentRenderForLane(fiber, 2); + null !== root && + ((instance._pendingVisibility |= OffscreenDetached), + scheduleUpdateOnFiber(root, fiber, 2)); + } + }, + attach: function () { + var instance = primaryChildInstance, + fiber = instance._current; + if (null === fiber) + throw Error( + "Calling Offscreen.detach before instance handle has been set." + ); + if (0 !== (instance._pendingVisibility & OffscreenDetached)) { + var root = enqueueConcurrentRenderForLane(fiber, 2); + null !== root && + ((instance._pendingVisibility &= ~OffscreenDetached), + scheduleUpdateOnFiber(root, fiber, 2)); + } + } + }; + pendingProps.stateNode = primaryChildInstance; + return pendingProps; + } + function createFiberFromText(content, mode, lanes) { + content = createFiber(6, content, null, mode); + content.lanes = lanes; + return content; + } + function createFiberFromPortal(portal, mode, lanes) { + mode = createFiber( + 4, + null !== portal.children ? portal.children : [], + portal.key, + mode + ); + mode.lanes = lanes; + mode.stateNode = { + containerInfo: portal.containerInfo, + pendingChildren: null, + implementation: portal.implementation + }; + return mode; + } + function buildHydrationDiffNode(fiber, distanceFromLeaf) { + if (null === fiber.return) { + if (null === hydrationDiffRootDEV) + hydrationDiffRootDEV = { + fiber: fiber, + children: [], + serverProps: void 0, + serverTail: [], + distanceFromLeaf: distanceFromLeaf + }; + else { + if (hydrationDiffRootDEV.fiber !== fiber) + throw Error( + "Saw multiple hydration diff roots in a pass. This is a bug in React." + ); + hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf && + (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf); + } + return hydrationDiffRootDEV; + } + var siblings = buildHydrationDiffNode( + fiber.return, + distanceFromLeaf + 1 + ).children; + if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber) + return ( + (siblings = siblings[siblings.length - 1]), + siblings.distanceFromLeaf > distanceFromLeaf && + (siblings.distanceFromLeaf = distanceFromLeaf), + siblings + ); + distanceFromLeaf = { + fiber: fiber, + children: [], + serverProps: void 0, + serverTail: [], + distanceFromLeaf: distanceFromLeaf + }; + siblings.push(distanceFromLeaf); + return distanceFromLeaf; + } + function warnNonHydratedInstance(fiber, rejectedCandidate) { + didSuspendOrErrorDEV || + ((fiber = buildHydrationDiffNode(fiber, 0)), + (fiber.serverProps = null), + null !== rejectedCandidate && + ((rejectedCandidate = + describeHydratableInstanceForDevWarnings(rejectedCandidate)), + fiber.serverTail.push(rejectedCandidate))); + } + function throwOnHydrationMismatch(fiber) { + var diff = "", + diffRoot = hydrationDiffRootDEV; + null !== diffRoot && + ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot))); + queueHydrationError( + createCapturedValueAtFiber( + Error( + "Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\nhttps://react.dev/link/hydration-mismatch" + + diff + ), + fiber + ) + ); + throw HydrationMismatchException; + } + function prepareToHydrateHostInstance(fiber) { + var didHydrate = fiber.stateNode; + var type = fiber.type, + props = fiber.memoizedProps; + didHydrate[internalInstanceKey] = fiber; + didHydrate[internalPropsKey] = props; + validatePropertiesInDevelopment(type, props); + switch (type) { + case "dialog": + listenToNonDelegatedEvent("cancel", didHydrate); + listenToNonDelegatedEvent("close", didHydrate); + break; + case "iframe": + case "object": + case "embed": + listenToNonDelegatedEvent("load", didHydrate); + break; + case "video": + case "audio": + for (type = 0; type < mediaEventTypes.length; type++) + listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate); + break; + case "source": + listenToNonDelegatedEvent("error", didHydrate); + break; + case "img": + case "image": + case "link": + listenToNonDelegatedEvent("error", didHydrate); + listenToNonDelegatedEvent("load", didHydrate); + break; + case "details": + listenToNonDelegatedEvent("toggle", didHydrate); + break; + case "input": + checkControlledValueProps("input", props); + listenToNonDelegatedEvent("invalid", didHydrate); + validateInputProps(didHydrate, props); + initInput( + didHydrate, + props.value, + props.defaultValue, + props.checked, + props.defaultChecked, + props.type, + props.name, + !0 + ); + track(didHydrate); + break; + case "option": + validateOptionProps(didHydrate, props); + break; + case "select": + checkControlledValueProps("select", props); + listenToNonDelegatedEvent("invalid", didHydrate); + validateSelectProps(didHydrate, props); + break; + case "textarea": + checkControlledValueProps("textarea", props), + listenToNonDelegatedEvent("invalid", didHydrate), + validateTextareaProps(didHydrate, props), + initTextarea( + didHydrate, + props.value, + props.defaultValue, + props.children + ), + track(didHydrate); + } + type = props.children; + ("string" !== typeof type && + "number" !== typeof type && + "bigint" !== typeof type) || + didHydrate.textContent === "" + type || + !0 === props.suppressHydrationWarning || + checkForUnmatchedText(didHydrate.textContent, type) + ? (null != props.popover && + (listenToNonDelegatedEvent("beforetoggle", didHydrate), + listenToNonDelegatedEvent("toggle", didHydrate)), + null != props.onScroll && + listenToNonDelegatedEvent("scroll", didHydrate), + null != props.onScrollEnd && + listenToNonDelegatedEvent("scrollend", didHydrate), + null != props.onClick && (didHydrate.onclick = noop$2), + (didHydrate = !0)) + : (didHydrate = !1); + didHydrate || throwOnHydrationMismatch(fiber); + } + function popToNextHostParent(fiber) { + for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) + switch (hydrationParentFiber.tag) { + case 3: + case 27: + rootOrSingletonContext = !0; + return; + case 5: + case 13: + rootOrSingletonContext = !1; + return; + default: + hydrationParentFiber = hydrationParentFiber.return; } - key = createFiber(fiberTag, pendingProps, key, mode); - key.elementType = type; - key.type = resolvedType; - key.lanes = lanes; - key._debugOwner = owner; - return key; } - function createFiberFromElement(element, mode, lanes) { - mode = createFiberFromTypeAndProps( - element.type, - element.key, - element.props, - element._owner, - mode, - lanes - ); - mode._debugOwner = element._owner; - return mode; + function popHydrationState(fiber) { + if (fiber !== hydrationParentFiber) return !1; + if (!isHydrating) + return popToNextHostParent(fiber), (isHydrating = !0), !1; + var shouldClear = !1, + JSCompiler_temp; + if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { + if ((JSCompiler_temp = 5 === fiber.tag)) + (JSCompiler_temp = fiber.type), + (JSCompiler_temp = + !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || + shouldSetTextContent(fiber.type, fiber.memoizedProps)); + JSCompiler_temp = !JSCompiler_temp; + } + JSCompiler_temp && (shouldClear = !0); + if (shouldClear && nextHydratableInstance) { + for (shouldClear = nextHydratableInstance; shouldClear; ) { + JSCompiler_temp = buildHydrationDiffNode(fiber, 0); + var description = + describeHydratableInstanceForDevWarnings(shouldClear); + JSCompiler_temp.serverTail.push(description); + shouldClear = + "Suspense" === description.type + ? getNextHydratableInstanceAfterSuspenseInstance(shouldClear) + : getNextHydratable(shouldClear.nextSibling); + } + throwOnHydrationMismatch(fiber); + } + popToNextHostParent(fiber); + if (13 === fiber.tag) { + fiber = fiber.memoizedState; + fiber = null !== fiber ? fiber.dehydrated : null; + if (!fiber) + throw Error( + "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue." + ); + nextHydratableInstance = + getNextHydratableInstanceAfterSuspenseInstance(fiber); + } else + nextHydratableInstance = hydrationParentFiber + ? getNextHydratable(fiber.stateNode.nextSibling) + : null; + return !0; } - function createFiberFromFragment(elements, mode, lanes, key) { - elements = createFiber(7, elements, key, mode); - elements.lanes = lanes; - return elements; + function resetHydrationState() { + nextHydratableInstance = hydrationParentFiber = null; + didSuspendOrErrorDEV = isHydrating = !1; } - function createFiberFromOffscreen(pendingProps, mode, lanes, key) { - pendingProps = createFiber(22, pendingProps, key, mode); - pendingProps.elementType = REACT_OFFSCREEN_TYPE; - pendingProps.lanes = lanes; - var primaryChildInstance = { - _visibility: OffscreenVisible, - _pendingVisibility: OffscreenVisible, - _pendingMarkers: null, - _retryCache: null, - _transitions: null, - _current: null, - detach: function () { - var instance = primaryChildInstance, - fiber = instance._current; - if (null === fiber) - throw Error( - "Calling Offscreen.detach before instance handle has been set." - ); - if (0 === (instance._pendingVisibility & OffscreenDetached)) { - var root = enqueueConcurrentRenderForLane(fiber, 2); - null !== root && - ((instance._pendingVisibility |= OffscreenDetached), - scheduleUpdateOnFiber(root, fiber, 2)); - } - }, - attach: function () { - var instance = primaryChildInstance, - fiber = instance._current; - if (null === fiber) - throw Error( - "Calling Offscreen.detach before instance handle has been set." - ); - if (0 !== (instance._pendingVisibility & OffscreenDetached)) { - var root = enqueueConcurrentRenderForLane(fiber, 2); - null !== root && - ((instance._pendingVisibility &= ~OffscreenDetached), - scheduleUpdateOnFiber(root, fiber, 2)); - } - } - }; - pendingProps.stateNode = primaryChildInstance; - return pendingProps; + function upgradeHydrationErrorsToRecoverable() { + var queuedErrors = hydrationErrors; + null !== queuedErrors && + (null === workInProgressRootRecoverableErrors + ? (workInProgressRootRecoverableErrors = queuedErrors) + : workInProgressRootRecoverableErrors.push.apply( + workInProgressRootRecoverableErrors, + queuedErrors + ), + (hydrationErrors = null)); + return queuedErrors; } - function createFiberFromText(content, mode, lanes) { - content = createFiber(6, content, null, mode); - content.lanes = lanes; - return content; + function queueHydrationError(error) { + null === hydrationErrors + ? (hydrationErrors = [error]) + : hydrationErrors.push(error); } - function createFiberFromPortal(portal, mode, lanes) { - mode = createFiber( - 4, - null !== portal.children ? portal.children : [], - portal.key, - mode - ); - mode.lanes = lanes; - mode.stateNode = { - containerInfo: portal.containerInfo, - pendingChildren: null, - implementation: portal.implementation - }; - return mode; + function emitPendingHydrationWarnings() { + var diffRoot = hydrationDiffRootDEV; + null !== diffRoot && + ((hydrationDiffRootDEV = null), + (diffRoot = describeDiff(diffRoot)), + console.error( + "A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\n%s%s", + "https://react.dev/link/hydration-mismatch", + diffRoot + )); } function markUpdate(workInProgress) { workInProgress.flags |= 4; @@ -22320,6 +22329,7 @@ "abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll scrollEnd toggle touchMove waiting wheel".split( " " ), + CapturedStacks = new WeakMap(), OffscreenVisible = 1, OffscreenDetached = 2, OffscreenPassiveEffectsConnected = 4, @@ -22396,26 +22406,6 @@ _currentRenderer: null, _currentRenderer2: null }, - CapturedStacks = new WeakMap(), - forkStack = [], - forkStackIndex = 0, - treeForkProvider = null, - treeForkCount = 0, - idStack = [], - idStackIndex = 0, - treeContextProvider = null, - treeContextId = 1, - treeContextOverflow = "", - hydrationParentFiber = null, - nextHydratableInstance = null, - isHydrating = !1, - didSuspendOrErrorDEV = !1, - hydrationDiffRootDEV = null, - hydrationErrors = null, - rootOrSingletonContext = !1, - HydrationMismatchException = Error( - "Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React." - ), ReactStrictModeWarnings = { recordUnsafeLifecycleWarnings: function () {}, flushPendingUnsafeLifecycleWarnings: function () {}, @@ -22670,6 +22660,15 @@ injectedProfilingHooks.markForceUpdateScheduled(inst, lane); } }, + forkStack = [], + forkStackIndex = 0, + treeForkProvider = null, + treeForkCount = 0, + idStack = [], + idStackIndex = 0, + treeContextProvider = null, + treeContextId = 1, + treeContextOverflow = "", SuspenseException = Error( "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`." ), @@ -23989,19 +23988,29 @@ } catch (e$7) { hasBadMapPolyfill = !0; } - var DefaultAsyncDispatcher = { - getCacheForType: function (resourceType) { - var cache = readContext(CacheContext), - cacheForType = cache.data.get(resourceType); - void 0 === cacheForType && - ((cacheForType = resourceType()), - cache.data.set(resourceType, cacheForType)); - return cacheForType; - }, - getOwner: function () { - return current; - } - }; + var hydrationParentFiber = null, + nextHydratableInstance = null, + isHydrating = !1, + didSuspendOrErrorDEV = !1, + hydrationDiffRootDEV = null, + hydrationErrors = null, + rootOrSingletonContext = !1, + HydrationMismatchException = Error( + "Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React." + ), + DefaultAsyncDispatcher = { + getCacheForType: function (resourceType) { + var cache = readContext(CacheContext), + cacheForType = cache.data.get(resourceType); + void 0 === cacheForType && + ((cacheForType = resourceType()), + cache.data.set(resourceType, cacheForType)); + return cacheForType; + }, + getOwner: function () { + return current; + } + }; if ("function" === typeof Symbol && Symbol.for) { var symbolFor = Symbol.for; symbolFor("selector.component"); @@ -24618,11 +24627,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-540efebc-20250112" !== 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.1.0-canary-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -24659,10 +24668,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.1.0-canary-056073de-20250109", + version: "19.1.0-canary-540efebc-20250112", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-056073de-20250109" + reconcilerVersion: "19.1.0-canary-540efebc-20250112" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -25138,7 +25147,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.1.0-canary-056073de-20250109"; + exports.version = "19.1.0-canary-540efebc-20250112"; "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 fa774b38f57fa..0aa3c7bd59821 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 @@ -2098,14 +2098,14 @@ var isInputEventSupported = !1; if (canUseDOM) { var JSCompiler_inline_result$jscomp$295; if (canUseDOM) { - var isSupported$jscomp$inline_427 = "oninput" in document; - if (!isSupported$jscomp$inline_427) { - var element$jscomp$inline_428 = document.createElement("div"); - element$jscomp$inline_428.setAttribute("oninput", "return;"); - isSupported$jscomp$inline_427 = - "function" === typeof element$jscomp$inline_428.oninput; + var isSupported$jscomp$inline_431 = "oninput" in document; + if (!isSupported$jscomp$inline_431) { + var element$jscomp$inline_432 = document.createElement("div"); + element$jscomp$inline_432.setAttribute("oninput", "return;"); + isSupported$jscomp$inline_431 = + "function" === typeof element$jscomp$inline_432.oninput; } - JSCompiler_inline_result$jscomp$295 = isSupported$jscomp$inline_427; + JSCompiler_inline_result$jscomp$295 = isSupported$jscomp$inline_431; } else JSCompiler_inline_result$jscomp$295 = !1; isInputEventSupported = JSCompiler_inline_result$jscomp$295 && @@ -2355,6 +2355,25 @@ function registerSimpleEvent(domEventName, reactName) { topLevelEventsToReactNames.set(domEventName, reactName); registerTwoPhaseEvent(reactName, [domEventName]); } +var CapturedStacks = new WeakMap(); +function createCapturedValueAtFiber(value, source) { + if ("object" === typeof value && null !== value) { + var existing = CapturedStacks.get(value); + if (void 0 !== existing) return existing; + source = { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; + CapturedStacks.set(value, source); + return source; + } + return { + value: value, + source: source, + stack: getStackByFiberInDevAndProd(source) + }; +} var concurrentQueues = [], concurrentQueuesIndex = 0, concurrentlyUpdatedLanes = 0; @@ -3005,252 +3024,6 @@ function releaseCache(cache) { cache.controller.abort(); }); } -var CapturedStacks = new WeakMap(); -function createCapturedValueAtFiber(value, source) { - if ("object" === typeof value && null !== value) { - var existing = CapturedStacks.get(value); - if (void 0 !== existing) return existing; - source = { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; - CapturedStacks.set(value, source); - return source; - } - return { - value: value, - source: source, - stack: getStackByFiberInDevAndProd(source) - }; -} -var forkStack = [], - forkStackIndex = 0, - treeForkProvider = null, - treeForkCount = 0, - idStack = [], - idStackIndex = 0, - treeContextProvider = null, - treeContextId = 1, - treeContextOverflow = ""; -function pushTreeFork(workInProgress, totalChildren) { - forkStack[forkStackIndex++] = treeForkCount; - forkStack[forkStackIndex++] = treeForkProvider; - treeForkProvider = workInProgress; - treeForkCount = totalChildren; -} -function pushTreeId(workInProgress, totalChildren, index) { - idStack[idStackIndex++] = treeContextId; - idStack[idStackIndex++] = treeContextOverflow; - idStack[idStackIndex++] = treeContextProvider; - treeContextProvider = workInProgress; - var baseIdWithLeadingBit = treeContextId; - workInProgress = treeContextOverflow; - var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; - baseIdWithLeadingBit &= ~(1 << baseLength); - index += 1; - var length = 32 - clz32(totalChildren) + baseLength; - if (30 < length) { - var numberOfOverflowBits = baseLength - (baseLength % 5); - length = ( - baseIdWithLeadingBit & - ((1 << numberOfOverflowBits) - 1) - ).toString(32); - baseIdWithLeadingBit >>= numberOfOverflowBits; - baseLength -= numberOfOverflowBits; - treeContextId = - (1 << (32 - clz32(totalChildren) + baseLength)) | - (index << baseLength) | - baseIdWithLeadingBit; - treeContextOverflow = length + workInProgress; - } else - (treeContextId = - (1 << length) | (index << baseLength) | baseIdWithLeadingBit), - (treeContextOverflow = workInProgress); -} -function pushMaterializedTreeId(workInProgress) { - null !== workInProgress.return && - (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0)); -} -function popTreeContext(workInProgress) { - for (; workInProgress === treeForkProvider; ) - (treeForkProvider = forkStack[--forkStackIndex]), - (forkStack[forkStackIndex] = null), - (treeForkCount = forkStack[--forkStackIndex]), - (forkStack[forkStackIndex] = null); - for (; workInProgress === treeContextProvider; ) - (treeContextProvider = idStack[--idStackIndex]), - (idStack[idStackIndex] = null), - (treeContextOverflow = idStack[--idStackIndex]), - (idStack[idStackIndex] = null), - (treeContextId = idStack[--idStackIndex]), - (idStack[idStackIndex] = null); -} -var hydrationParentFiber = null, - nextHydratableInstance = null, - isHydrating = !1, - hydrationErrors = null, - rootOrSingletonContext = !1, - HydrationMismatchException = Error(formatProdErrorMessage(519)); -function throwOnHydrationMismatch(fiber) { - var error = Error(formatProdErrorMessage(418, "")); - queueHydrationError(createCapturedValueAtFiber(error, fiber)); - throw HydrationMismatchException; -} -function prepareToHydrateHostInstance(fiber) { - var instance = fiber.stateNode, - type = fiber.type, - props = fiber.memoizedProps; - instance[internalInstanceKey] = fiber; - instance[internalPropsKey] = props; - switch (type) { - case "dialog": - listenToNonDelegatedEvent("cancel", instance); - listenToNonDelegatedEvent("close", instance); - break; - case "iframe": - case "object": - case "embed": - listenToNonDelegatedEvent("load", instance); - break; - case "video": - case "audio": - for (type = 0; type < mediaEventTypes.length; type++) - listenToNonDelegatedEvent(mediaEventTypes[type], instance); - break; - case "source": - listenToNonDelegatedEvent("error", instance); - break; - case "img": - case "image": - case "link": - listenToNonDelegatedEvent("error", instance); - listenToNonDelegatedEvent("load", instance); - break; - case "details": - listenToNonDelegatedEvent("toggle", instance); - break; - case "input": - listenToNonDelegatedEvent("invalid", instance); - initInput( - instance, - props.value, - props.defaultValue, - props.checked, - props.defaultChecked, - props.type, - props.name, - !0 - ); - track(instance); - break; - case "select": - listenToNonDelegatedEvent("invalid", instance); - break; - case "textarea": - listenToNonDelegatedEvent("invalid", instance), - initTextarea(instance, props.value, props.defaultValue, props.children), - track(instance); - } - type = props.children; - ("string" !== typeof type && - "number" !== typeof type && - "bigint" !== typeof type) || - instance.textContent === "" + type || - !0 === props.suppressHydrationWarning || - checkForUnmatchedText(instance.textContent, type) - ? (null != props.popover && - (listenToNonDelegatedEvent("beforetoggle", instance), - listenToNonDelegatedEvent("toggle", instance)), - null != props.onScroll && listenToNonDelegatedEvent("scroll", instance), - null != props.onScrollEnd && - listenToNonDelegatedEvent("scrollend", instance), - null != props.onClick && (instance.onclick = noop$2), - (instance = !0)) - : (instance = !1); - instance || throwOnHydrationMismatch(fiber); -} -function popToNextHostParent(fiber) { - for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) - switch (hydrationParentFiber.tag) { - case 3: - case 27: - rootOrSingletonContext = !0; - return; - case 5: - case 13: - rootOrSingletonContext = !1; - return; - default: - hydrationParentFiber = hydrationParentFiber.return; - } -} -function popHydrationState(fiber) { - if (fiber !== hydrationParentFiber) return !1; - if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1; - var shouldClear = !1, - JSCompiler_temp; - if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { - if ((JSCompiler_temp = 5 === fiber.tag)) - (JSCompiler_temp = fiber.type), - (JSCompiler_temp = - !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || - shouldSetTextContent(fiber.type, fiber.memoizedProps)); - JSCompiler_temp = !JSCompiler_temp; - } - JSCompiler_temp && (shouldClear = !0); - shouldClear && nextHydratableInstance && throwOnHydrationMismatch(fiber); - popToNextHostParent(fiber); - if (13 === fiber.tag) { - fiber = fiber.memoizedState; - fiber = null !== fiber ? fiber.dehydrated : null; - if (!fiber) throw Error(formatProdErrorMessage(317)); - a: { - fiber = fiber.nextSibling; - for (shouldClear = 0; fiber; ) { - if (8 === fiber.nodeType) - if (((JSCompiler_temp = fiber.data), "/$" === JSCompiler_temp)) { - if (0 === shouldClear) { - nextHydratableInstance = getNextHydratable(fiber.nextSibling); - break a; - } - shouldClear--; - } else - ("$" !== JSCompiler_temp && - "$!" !== JSCompiler_temp && - "$?" !== JSCompiler_temp) || - shouldClear++; - fiber = fiber.nextSibling; - } - nextHydratableInstance = null; - } - } else - nextHydratableInstance = hydrationParentFiber - ? getNextHydratable(fiber.stateNode.nextSibling) - : null; - return !0; -} -function resetHydrationState() { - nextHydratableInstance = hydrationParentFiber = null; - isHydrating = !1; -} -function upgradeHydrationErrorsToRecoverable() { - var queuedErrors = hydrationErrors; - null !== queuedErrors && - (null === workInProgressRootRecoverableErrors - ? (workInProgressRootRecoverableErrors = queuedErrors) - : workInProgressRootRecoverableErrors.push.apply( - workInProgressRootRecoverableErrors, - queuedErrors - ), - (hydrationErrors = null)); - return queuedErrors; -} -function queueHydrationError(error) { - null === hydrationErrors - ? (hydrationErrors = [error]) - : hydrationErrors.push(error); -} function applyDerivedStateFromProps( workInProgress, ctor, @@ -3324,34 +3097,96 @@ function checkShouldComponentUpdate( ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState) : !0; } -function callComponentWillReceiveProps( - workInProgress, - instance, - newProps, - nextContext -) { - workInProgress = instance.state; - "function" === typeof instance.componentWillReceiveProps && - instance.componentWillReceiveProps(newProps, nextContext); - "function" === typeof instance.UNSAFE_componentWillReceiveProps && - instance.UNSAFE_componentWillReceiveProps(newProps, nextContext); - instance.state !== workInProgress && - classComponentUpdater.enqueueReplaceState(instance, instance.state, null); +function callComponentWillReceiveProps( + workInProgress, + instance, + newProps, + nextContext +) { + workInProgress = instance.state; + "function" === typeof instance.componentWillReceiveProps && + instance.componentWillReceiveProps(newProps, nextContext); + "function" === typeof instance.UNSAFE_componentWillReceiveProps && + instance.UNSAFE_componentWillReceiveProps(newProps, nextContext); + instance.state !== workInProgress && + classComponentUpdater.enqueueReplaceState(instance, instance.state, null); +} +function resolveClassComponentProps(Component, baseProps) { + var newProps = baseProps; + if ("ref" in baseProps) { + newProps = {}; + for (var propName in baseProps) + "ref" !== propName && (newProps[propName] = baseProps[propName]); + } + if ((Component = Component.defaultProps)) { + newProps === baseProps && (newProps = assign({}, newProps)); + for (var propName$30 in Component) + void 0 === newProps[propName$30] && + (newProps[propName$30] = Component[propName$30]); + } + return newProps; +} +var forkStack = [], + forkStackIndex = 0, + treeForkProvider = null, + treeForkCount = 0, + idStack = [], + idStackIndex = 0, + treeContextProvider = null, + treeContextId = 1, + treeContextOverflow = ""; +function pushTreeFork(workInProgress, totalChildren) { + forkStack[forkStackIndex++] = treeForkCount; + forkStack[forkStackIndex++] = treeForkProvider; + treeForkProvider = workInProgress; + treeForkCount = totalChildren; +} +function pushTreeId(workInProgress, totalChildren, index) { + idStack[idStackIndex++] = treeContextId; + idStack[idStackIndex++] = treeContextOverflow; + idStack[idStackIndex++] = treeContextProvider; + treeContextProvider = workInProgress; + var baseIdWithLeadingBit = treeContextId; + workInProgress = treeContextOverflow; + var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; + baseIdWithLeadingBit &= ~(1 << baseLength); + index += 1; + var length = 32 - clz32(totalChildren) + baseLength; + if (30 < length) { + var numberOfOverflowBits = baseLength - (baseLength % 5); + length = ( + baseIdWithLeadingBit & + ((1 << numberOfOverflowBits) - 1) + ).toString(32); + baseIdWithLeadingBit >>= numberOfOverflowBits; + baseLength -= numberOfOverflowBits; + treeContextId = + (1 << (32 - clz32(totalChildren) + baseLength)) | + (index << baseLength) | + baseIdWithLeadingBit; + treeContextOverflow = length + workInProgress; + } else + (treeContextId = + (1 << length) | (index << baseLength) | baseIdWithLeadingBit), + (treeContextOverflow = workInProgress); +} +function pushMaterializedTreeId(workInProgress) { + null !== workInProgress.return && + (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0)); } -function resolveClassComponentProps(Component, baseProps) { - var newProps = baseProps; - if ("ref" in baseProps) { - newProps = {}; - for (var propName in baseProps) - "ref" !== propName && (newProps[propName] = baseProps[propName]); - } - if ((Component = Component.defaultProps)) { - newProps === baseProps && (newProps = assign({}, newProps)); - for (var propName$32 in Component) - void 0 === newProps[propName$32] && - (newProps[propName$32] = Component[propName$32]); - } - return newProps; +function popTreeContext(workInProgress) { + for (; workInProgress === treeForkProvider; ) + (treeForkProvider = forkStack[--forkStackIndex]), + (forkStack[forkStackIndex] = null), + (treeForkCount = forkStack[--forkStackIndex]), + (forkStack[forkStackIndex] = null); + for (; workInProgress === treeContextProvider; ) + (treeContextProvider = idStack[--idStackIndex]), + (idStack[idStackIndex] = null), + (treeContextOverflow = idStack[--idStackIndex]), + (idStack[idStackIndex] = null), + (treeContextId = idStack[--idStackIndex]), + (idStack[idStackIndex] = null); } var SuspenseException = Error(formatProdErrorMessage(460)), SuspenseyCommitException = Error(formatProdErrorMessage(474)), @@ -7347,14 +7182,17 @@ function beginWork(current, workInProgress, renderLanes) { workInProgress.child ); case 5: - if (null === current && isHydrating) { - if ((init = lazyComponent = nextHydratableInstance)) - (lazyComponent = canHydrateInstance( - lazyComponent, - workInProgress.type, - workInProgress.pendingProps, - rootOrSingletonContext - )), + return ( + null === current && + isHydrating && + ((lazyComponent = nextHydratableInstance), + (init = !lazyComponent) || + ((lazyComponent = canHydrateInstance( + lazyComponent, + workInProgress.type, + workInProgress.pendingProps, + rootOrSingletonContext + )), null !== lazyComponent ? ((workInProgress.stateNode = lazyComponent), (hydrationParentFiber = workInProgress), @@ -7362,50 +7200,55 @@ function beginWork(current, workInProgress, renderLanes) { lazyComponent.firstChild )), (rootOrSingletonContext = !1), - (init = !0)) - : (init = !1); - init || throwOnHydrationMismatch(workInProgress); - } - pushHostContext(workInProgress); - init = workInProgress.type; - nextProps = workInProgress.pendingProps; - nextState = null !== current ? current.memoizedProps : null; - lazyComponent = nextProps.children; - shouldSetTextContent(init, nextProps) - ? (lazyComponent = null) - : null !== nextState && - shouldSetTextContent(init, nextState) && - (workInProgress.flags |= 32); - null !== workInProgress.memoizedState && - ((init = renderWithHooks( - current, - workInProgress, - TransitionAwareHostComponent, - null, - null, - renderLanes - )), - (HostTransitionContext._currentValue = init)); - markRef(current, workInProgress); - reconcileChildren(current, workInProgress, lazyComponent, renderLanes); - return workInProgress.child; - case 6: - if (null === current && isHydrating) { - if ((current = renderLanes = nextHydratableInstance)) - (renderLanes = canHydrateTextInstance( - renderLanes, - workInProgress.pendingProps, - rootOrSingletonContext + (lazyComponent = !0)) + : (lazyComponent = !1), + (init = !lazyComponent)), + init && throwOnHydrationMismatch(workInProgress)), + pushHostContext(workInProgress), + (init = workInProgress.type), + (nextProps = workInProgress.pendingProps), + (nextState = null !== current ? current.memoizedProps : null), + (lazyComponent = nextProps.children), + shouldSetTextContent(init, nextProps) + ? (lazyComponent = null) + : null !== nextState && + shouldSetTextContent(init, nextState) && + (workInProgress.flags |= 32), + null !== workInProgress.memoizedState && + ((init = renderWithHooks( + current, + workInProgress, + TransitionAwareHostComponent, + null, + null, + renderLanes )), + (HostTransitionContext._currentValue = init)), + markRef(current, workInProgress), + reconcileChildren(current, workInProgress, lazyComponent, renderLanes), + workInProgress.child + ); + case 6: + return ( + null === current && + isHydrating && + ((renderLanes = nextHydratableInstance), + (current = !renderLanes) || + ((renderLanes = canHydrateTextInstance( + renderLanes, + workInProgress.pendingProps, + rootOrSingletonContext + )), null !== renderLanes ? ((workInProgress.stateNode = renderLanes), (hydrationParentFiber = workInProgress), (nextHydratableInstance = null), - (current = !0)) - : (current = !1); - current || throwOnHydrationMismatch(workInProgress); - } - return null; + (renderLanes = !0)) + : (renderLanes = !1), + (current = !renderLanes)), + current && throwOnHydrationMismatch(workInProgress)), + null + ); case 13: return updateSuspenseComponent(current, workInProgress, renderLanes); case 4: @@ -7775,15 +7618,14 @@ function safelyAttachRef(current, nearestMountedAncestor) { try { var ref = current.ref; if (null !== ref) { - var instance = current.stateNode; switch (current.tag) { case 26: case 27: case 5: - var instanceToUse = instance; + var instanceToUse = current.stateNode; break; default: - instanceToUse = instance; + instanceToUse = current.stateNode; } if ("function" === typeof ref) if (shouldProfile(current)) @@ -9966,6 +9808,171 @@ function createFiberFromPortal(portal, mode, lanes) { }; return mode; } +var hydrationParentFiber = null, + nextHydratableInstance = null, + isHydrating = !1, + hydrationErrors = null, + rootOrSingletonContext = !1, + HydrationMismatchException = Error(formatProdErrorMessage(519)); +function throwOnHydrationMismatch(fiber) { + var error = Error(formatProdErrorMessage(418, "")); + queueHydrationError(createCapturedValueAtFiber(error, fiber)); + throw HydrationMismatchException; +} +function prepareToHydrateHostInstance(fiber) { + var instance = fiber.stateNode, + type = fiber.type, + props = fiber.memoizedProps; + instance[internalInstanceKey] = fiber; + instance[internalPropsKey] = props; + switch (type) { + case "dialog": + listenToNonDelegatedEvent("cancel", instance); + listenToNonDelegatedEvent("close", instance); + break; + case "iframe": + case "object": + case "embed": + listenToNonDelegatedEvent("load", instance); + break; + case "video": + case "audio": + for (type = 0; type < mediaEventTypes.length; type++) + listenToNonDelegatedEvent(mediaEventTypes[type], instance); + break; + case "source": + listenToNonDelegatedEvent("error", instance); + break; + case "img": + case "image": + case "link": + listenToNonDelegatedEvent("error", instance); + listenToNonDelegatedEvent("load", instance); + break; + case "details": + listenToNonDelegatedEvent("toggle", instance); + break; + case "input": + listenToNonDelegatedEvent("invalid", instance); + initInput( + instance, + props.value, + props.defaultValue, + props.checked, + props.defaultChecked, + props.type, + props.name, + !0 + ); + track(instance); + break; + case "select": + listenToNonDelegatedEvent("invalid", instance); + break; + case "textarea": + listenToNonDelegatedEvent("invalid", instance), + initTextarea(instance, props.value, props.defaultValue, props.children), + track(instance); + } + type = props.children; + ("string" !== typeof type && + "number" !== typeof type && + "bigint" !== typeof type) || + instance.textContent === "" + type || + !0 === props.suppressHydrationWarning || + checkForUnmatchedText(instance.textContent, type) + ? (null != props.popover && + (listenToNonDelegatedEvent("beforetoggle", instance), + listenToNonDelegatedEvent("toggle", instance)), + null != props.onScroll && listenToNonDelegatedEvent("scroll", instance), + null != props.onScrollEnd && + listenToNonDelegatedEvent("scrollend", instance), + null != props.onClick && (instance.onclick = noop$2), + (instance = !0)) + : (instance = !1); + instance || throwOnHydrationMismatch(fiber); +} +function popToNextHostParent(fiber) { + for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) + switch (hydrationParentFiber.tag) { + case 3: + case 27: + rootOrSingletonContext = !0; + return; + case 5: + case 13: + rootOrSingletonContext = !1; + return; + default: + hydrationParentFiber = hydrationParentFiber.return; + } +} +function popHydrationState(fiber) { + if (fiber !== hydrationParentFiber) return !1; + if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1; + var shouldClear = !1, + JSCompiler_temp; + if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) { + if ((JSCompiler_temp = 5 === fiber.tag)) + (JSCompiler_temp = fiber.type), + (JSCompiler_temp = + !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || + shouldSetTextContent(fiber.type, fiber.memoizedProps)); + JSCompiler_temp = !JSCompiler_temp; + } + JSCompiler_temp && (shouldClear = !0); + shouldClear && nextHydratableInstance && throwOnHydrationMismatch(fiber); + popToNextHostParent(fiber); + if (13 === fiber.tag) { + fiber = fiber.memoizedState; + fiber = null !== fiber ? fiber.dehydrated : null; + if (!fiber) throw Error(formatProdErrorMessage(317)); + a: { + fiber = fiber.nextSibling; + for (shouldClear = 0; fiber; ) { + if (8 === fiber.nodeType) + if (((JSCompiler_temp = fiber.data), "/$" === JSCompiler_temp)) { + if (0 === shouldClear) { + nextHydratableInstance = getNextHydratable(fiber.nextSibling); + break a; + } + shouldClear--; + } else + ("$" !== JSCompiler_temp && + "$!" !== JSCompiler_temp && + "$?" !== JSCompiler_temp) || + shouldClear++; + fiber = fiber.nextSibling; + } + nextHydratableInstance = null; + } + } else + nextHydratableInstance = hydrationParentFiber + ? getNextHydratable(fiber.stateNode.nextSibling) + : null; + return !0; +} +function resetHydrationState() { + nextHydratableInstance = hydrationParentFiber = null; + isHydrating = !1; +} +function upgradeHydrationErrorsToRecoverable() { + var queuedErrors = hydrationErrors; + null !== queuedErrors && + (null === workInProgressRootRecoverableErrors + ? (workInProgressRootRecoverableErrors = queuedErrors) + : workInProgressRootRecoverableErrors.push.apply( + workInProgressRootRecoverableErrors, + queuedErrors + ), + (hydrationErrors = null)); + return queuedErrors; +} +function queueHydrationError(error) { + null === hydrationErrors + ? (hydrationErrors = [error]) + : hydrationErrors.push(error); +} function markUpdate(workInProgress) { workInProgress.flags |= 4; } @@ -12350,20 +12357,20 @@ function extractEvents$1( } } for ( - var i$jscomp$inline_1568 = 0; - i$jscomp$inline_1568 < simpleEventPluginEvents.length; - i$jscomp$inline_1568++ + var i$jscomp$inline_1584 = 0; + i$jscomp$inline_1584 < simpleEventPluginEvents.length; + i$jscomp$inline_1584++ ) { - var eventName$jscomp$inline_1569 = - simpleEventPluginEvents[i$jscomp$inline_1568], - domEventName$jscomp$inline_1570 = - eventName$jscomp$inline_1569.toLowerCase(), - capitalizedEvent$jscomp$inline_1571 = - eventName$jscomp$inline_1569[0].toUpperCase() + - eventName$jscomp$inline_1569.slice(1); + var eventName$jscomp$inline_1585 = + simpleEventPluginEvents[i$jscomp$inline_1584], + domEventName$jscomp$inline_1586 = + eventName$jscomp$inline_1585.toLowerCase(), + capitalizedEvent$jscomp$inline_1587 = + eventName$jscomp$inline_1585[0].toUpperCase() + + eventName$jscomp$inline_1585.slice(1); registerSimpleEvent( - domEventName$jscomp$inline_1570, - "on" + capitalizedEvent$jscomp$inline_1571 + domEventName$jscomp$inline_1586, + "on" + capitalizedEvent$jscomp$inline_1587 ); } registerSimpleEvent(ANIMATION_END, "onAnimationEnd"); @@ -15839,16 +15846,16 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { 0 === i && attemptExplicitHydrationTarget(target); } }; -var isomorphicReactPackageVersion$jscomp$inline_1817 = React.version; +var isomorphicReactPackageVersion$jscomp$inline_1833 = React.version; if ( - "19.1.0-canary-056073de-20250109" !== - isomorphicReactPackageVersion$jscomp$inline_1817 + "19.1.0-canary-540efebc-20250112" !== + isomorphicReactPackageVersion$jscomp$inline_1833 ) throw Error( formatProdErrorMessage( 527, - isomorphicReactPackageVersion$jscomp$inline_1817, - "19.1.0-canary-056073de-20250109" + isomorphicReactPackageVersion$jscomp$inline_1833, + "19.1.0-canary-540efebc-20250112" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -15868,12 +15875,12 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { null === componentOrElement ? null : componentOrElement.stateNode; return componentOrElement; }; -var internals$jscomp$inline_1824 = { +var internals$jscomp$inline_1840 = { bundleType: 0, - version: "19.1.0-canary-056073de-20250109", + version: "19.1.0-canary-540efebc-20250112", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-056073de-20250109", + reconcilerVersion: "19.1.0-canary-540efebc-20250112", getLaneLabelMap: function () { for ( var map = new Map(), lane = 1, index$279 = 0; @@ -15891,16 +15898,16 @@ var internals$jscomp$inline_1824 = { } }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_2254 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_2278 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_2254.isDisabled && - hook$jscomp$inline_2254.supportsFiber + !hook$jscomp$inline_2278.isDisabled && + hook$jscomp$inline_2278.supportsFiber ) try { - (rendererID = hook$jscomp$inline_2254.inject( - internals$jscomp$inline_1824 + (rendererID = hook$jscomp$inline_2278.inject( + internals$jscomp$inline_1840 )), - (injectedHook = hook$jscomp$inline_2254); + (injectedHook = hook$jscomp$inline_2278); } catch (err) {} } function noop() {} @@ -16155,7 +16162,7 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.1.0-canary-056073de-20250109"; +exports.version = "19.1.0-canary-540efebc-20250112"; "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 7bb725b24987d..02a9d406749f9 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 @@ -8555,5 +8555,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.1.0-canary-056073de-20250109"; + exports.version = "19.1.0-canary-540efebc-20250112"; })(); 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 3a10f61ff3014..edb41770b8aa7 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 @@ -5610,4 +5610,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.1.0-canary-056073de-20250109"; +exports.version = "19.1.0-canary-540efebc-20250112"; 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 adacc41747a4c..cce4eb3f579b8 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 @@ -8555,5 +8555,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.1.0-canary-056073de-20250109"; + exports.version = "19.1.0-canary-540efebc-20250112"; })(); 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 4967bc2e13fca..93e884978598e 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 @@ -5687,4 +5687,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.1.0-canary-056073de-20250109"; +exports.version = "19.1.0-canary-540efebc-20250112"; 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 d498c1a4000c1..e72d71ce499fb 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 @@ -7293,11 +7293,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-540efebc-20250112" !== 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.1.0-canary-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react"), @@ -8937,5 +8937,5 @@ startWork(request); }); }; - exports.version = "19.1.0-canary-056073de-20250109"; + exports.version = "19.1.0-canary-540efebc-20250112"; })(); 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 160af033d395e..9327f3ce7d8f1 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 @@ -5942,12 +5942,12 @@ function abort(request, reason) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-540efebc-20250112" !== isomorphicReactPackageVersion) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion, - "19.1.0-canary-056073de-20250109" + "19.1.0-canary-540efebc-20250112" ) ); } @@ -6094,4 +6094,4 @@ exports.renderToReadableStream = function (children, options) { startWork(request); }); }; -exports.version = "19.1.0-canary-056073de-20250109"; +exports.version = "19.1.0-canary-540efebc-20250112"; 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 d7fb743145030..1f007b2634bc0 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 @@ -5579,13 +5579,13 @@ function abort(request, reason) { } var isomorphicReactPackageVersion$jscomp$inline_728 = React.version; if ( - "19.1.0-canary-056073de-20250109" !== + "19.1.0-canary-540efebc-20250112" !== isomorphicReactPackageVersion$jscomp$inline_728 ) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion$jscomp$inline_728 + - "\n - react-dom: 19.1.0-canary-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); exports.renderToReadableStream = function (children, options) { return new Promise(function (resolve, reject) { @@ -5676,4 +5676,4 @@ exports.renderToReadableStream = function (children, options) { startWork(request); }); }; -exports.version = "19.1.0-canary-056073de-20250109"; +exports.version = "19.1.0-canary-540efebc-20250112"; 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 bb9be91c5a08d..27d0e0a56bcf1 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 @@ -7316,11 +7316,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-540efebc-20250112" !== 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.1.0-canary-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react"), @@ -8967,5 +8967,5 @@ const setTimeoutOrImmediate = ? globalThis['set' + 'Immediate'] : setTimeout; - exports.version = "19.1.0-canary-056073de-20250109"; + exports.version = "19.1.0-canary-540efebc-20250112"; })(); 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 22c0f861e07a3..623f07c20a111 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 @@ -6034,11 +6034,11 @@ function abort(request, reason) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-540efebc-20250112" !== 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.1.0-canary-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -6195,4 +6195,4 @@ const setTimeoutOrImmediate = ? globalThis['set' + 'Immediate'] : setTimeout; -exports.version = "19.1.0-canary-056073de-20250109"; +exports.version = "19.1.0-canary-540efebc-20250112"; 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 6c607272b8a01..64c24e27d6548 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 @@ -7191,11 +7191,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-540efebc-20250112" !== 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.1.0-canary-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); } function createDrainHandler(destination, request) { @@ -8830,5 +8830,5 @@ } }; }; - exports.version = "19.1.0-canary-056073de-20250109"; + exports.version = "19.1.0-canary-540efebc-20250112"; })(); 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 494c891b21353..bed5f6b88a378 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 @@ -5926,11 +5926,11 @@ function abort(request, reason) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-056073de-20250109" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-540efebc-20250112" !== 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.1.0-canary-056073de-20250109\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -6079,4 +6079,4 @@ exports.renderToPipeableStream = function (children, options) { } }; }; -exports.version = "19.1.0-canary-056073de-20250109"; +exports.version = "19.1.0-canary-540efebc-20250112"; 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 e0f044b1d589c..2ef488a1e0880 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 @@ -416,7 +416,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.1.0-canary-056073de-20250109"; + exports.version = "19.1.0-canary-540efebc-20250112"; "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 17d0943dfff9a..79f7bb5c33633 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 @@ -207,4 +207,4 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.1.0-canary-056073de-20250109"; +exports.version = "19.1.0-canary-540efebc-20250112"; 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 14e3caa053244..e5a0e1249f7ba 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 @@ -336,5 +336,5 @@ })) : Internals.d.m(href)); }; - exports.version = "19.1.0-canary-056073de-20250109"; + exports.version = "19.1.0-canary-540efebc-20250112"; })(); 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 8d4ce822940c3..a9cec15bacbae 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 @@ -149,4 +149,4 @@ exports.preloadModule = function (href, options) { }); } else Internals.d.m(href); }; -exports.version = "19.1.0-canary-056073de-20250109"; +exports.version = "19.1.0-canary-540efebc-20250112"; diff --git a/packages/next/src/compiled/react-dom/package.json b/packages/next/src/compiled/react-dom/package.json index fd49c0d8899b5..a132025f4299b 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.26.0-canary-056073de-20250109" + "scheduler": "0.26.0-canary-540efebc-20250112" }, "peerDependencies": { - "react": "19.1.0-canary-056073de-20250109" + "react": "19.1.0-canary-540efebc-20250112" }, "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 9251e8b16ce06..5d3893ce8dc1e 100644 --- a/packages/next/src/compiled/react-experimental/cjs/react.development.js +++ b/packages/next/src/compiled/react-experimental/cjs/react.development.js @@ -1247,7 +1247,7 @@ exports.useTransition = function () { return resolveDispatcher().useTransition(); }; - exports.version = "19.1.0-experimental-056073de-20250109"; + exports.version = "19.1.0-experimental-540efebc-20250112"; "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 275c3dfde0123..38f32af886532 100644 --- a/packages/next/src/compiled/react-experimental/cjs/react.production.js +++ b/packages/next/src/compiled/react-experimental/cjs/react.production.js @@ -567,4 +567,4 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactSharedInternals.H.useTransition(); }; -exports.version = "19.1.0-experimental-056073de-20250109"; +exports.version = "19.1.0-experimental-540efebc-20250112"; 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 e9db09c6444e2..c8b01073af362 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 @@ -987,5 +987,5 @@ exports.useMemo = function (create, deps) { return resolveDispatcher().useMemo(create, deps); }; - exports.version = "19.1.0-experimental-056073de-20250109"; + exports.version = "19.1.0-experimental-540efebc-20250112"; })(); 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 941153d0be59d..5ac8162aa46c8 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 @@ -567,4 +567,4 @@ exports.useId = function () { exports.useMemo = function (create, deps) { return ReactSharedInternals.H.useMemo(create, deps); }; -exports.version = "19.1.0-experimental-056073de-20250109"; +exports.version = "19.1.0-experimental-540efebc-20250112"; diff --git a/packages/next/src/compiled/react-is/package.json b/packages/next/src/compiled/react-is/package.json index 65c9197857537..f2d481c745a55 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.1.0-canary-056073de-20250109", + "version": "19.1.0-canary-540efebc-20250112", "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 7069349d6ffaa..7a0df58ce832a 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 @@ -2894,10 +2894,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.1.0-experimental-056073de-20250109", + version: "19.1.0-experimental-540efebc-20250112", rendererPackageName: "react-server-dom-turbopack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-056073de-20250109", + reconcilerVersion: "19.1.0-experimental-540efebc-20250112", 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 fd0dff3df56a0..c1be6ba04b422 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-056073de-20250109", - "react-dom": "0.0.0-experimental-056073de-20250109" + "react": "0.0.0-experimental-540efebc-20250112", + "react-dom": "0.0.0-experimental-540efebc-20250112" } } \ 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 6dce9ee07eb36..2e0599c2a9c1d 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 @@ -2460,10 +2460,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.1.0-canary-056073de-20250109", + version: "19.1.0-canary-540efebc-20250112", rendererPackageName: "react-server-dom-turbopack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-056073de-20250109", + reconcilerVersion: "19.1.0-canary-540efebc-20250112", 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 4bf9025ab5142..ea450e4f8ec5c 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.1.0-canary-056073de-20250109", - "react-dom": "19.1.0-canary-056073de-20250109" + "react": "19.1.0-canary-540efebc-20250112", + "react-dom": "19.1.0-canary-540efebc-20250112" } } \ 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 e34799d2431b2..4b3b7e03b7dd9 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 @@ -2909,10 +2909,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.1.0-experimental-056073de-20250109", + version: "19.1.0-experimental-540efebc-20250112", rendererPackageName: "react-server-dom-webpack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-056073de-20250109", + reconcilerVersion: "19.1.0-experimental-540efebc-20250112", 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 36efc5cb50c64..9f2709181ef35 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 @@ -64,8 +64,8 @@ "webpack-sources": "^3.2.0" }, "peerDependencies": { - "react": "0.0.0-experimental-056073de-20250109", - "react-dom": "0.0.0-experimental-056073de-20250109", + "react": "0.0.0-experimental-540efebc-20250112", + "react-dom": "0.0.0-experimental-540efebc-20250112", "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 274e78ccc09d9..fe17b368c674b 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 @@ -2475,10 +2475,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.1.0-canary-056073de-20250109", + version: "19.1.0-canary-540efebc-20250112", rendererPackageName: "react-server-dom-webpack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-056073de-20250109", + reconcilerVersion: "19.1.0-canary-540efebc-20250112", 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 7ab1f41e4519f..be26be48ba74b 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/package.json +++ b/packages/next/src/compiled/react-server-dom-webpack/package.json @@ -64,8 +64,8 @@ "webpack-sources": "^3.2.0" }, "peerDependencies": { - "react": "19.1.0-canary-056073de-20250109", - "react-dom": "19.1.0-canary-056073de-20250109", + "react": "19.1.0-canary-540efebc-20250112", + "react-dom": "19.1.0-canary-540efebc-20250112", "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 5a7df7b036ff9..526ab079d05ad 100644 --- a/packages/next/src/compiled/react/cjs/react.development.js +++ b/packages/next/src/compiled/react/cjs/react.development.js @@ -1518,7 +1518,7 @@ exports.useTransition = function () { return resolveDispatcher().useTransition(); }; - exports.version = "19.1.0-canary-056073de-20250109"; + exports.version = "19.1.0-canary-540efebc-20250112"; "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 1427cb7f26f80..4437e8666600d 100644 --- a/packages/next/src/compiled/react/cjs/react.production.js +++ b/packages/next/src/compiled/react/cjs/react.production.js @@ -540,4 +540,4 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactSharedInternals.H.useTransition(); }; -exports.version = "19.1.0-canary-056073de-20250109"; +exports.version = "19.1.0-canary-540efebc-20250112"; 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 a697bb8719bb4..d7bcaf0607934 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 @@ -1110,5 +1110,5 @@ exports.useMemo = function (create, deps) { return resolveDispatcher().useMemo(create, deps); }; - exports.version = "19.1.0-canary-056073de-20250109"; + exports.version = "19.1.0-canary-540efebc-20250112"; })(); 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 046aa7006321d..abaa838857624 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 @@ -423,4 +423,4 @@ exports.useId = function () { exports.useMemo = function (create, deps) { return ReactSharedInternals.H.useMemo(create, deps); }; -exports.version = "19.1.0-canary-056073de-20250109"; +exports.version = "19.1.0-canary-540efebc-20250112"; diff --git a/packages/next/src/compiled/unistore/unistore.js b/packages/next/src/compiled/unistore/unistore.js index 28e447b559dbb..8b073a4151f7c 100644 --- a/packages/next/src/compiled/unistore/unistore.js +++ b/packages/next/src/compiled/unistore/unistore.js @@ -1 +1 @@ -(()=>{var t={3: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={791: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=14.0.0'} peerDependencies: - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112 '@storybook/instrumenter@8.4.7': resolution: {integrity: sha512-k6NSD3jaRCCHAFtqXZ7tw8jAzD/yTEWXGya+REgZqq5RCkmJ+9S4Ytp/6OhQMPtPFX23gAuJJzTQVLcCr+gjRg==} @@ -5088,8 +5088,8 @@ packages: resolution: {integrity: sha512-geTSBKyrBagVihil5MF7LkVFynbfHhCinvnbCZZqXW7M1vgcxvatunUENB+iV8eWg/0EJ+8O7scZL+BAxQ/2qg==} engines: {node: '>=18.0.0'} peerDependencies: - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112 storybook: ^8.4.7 typescript: '*' peerDependenciesMeta: @@ -5110,16 +5110,16 @@ packages: '@storybook/react-dom-shim@8.4.7': resolution: {integrity: sha512-6bkG2jvKTmWrmVzCgwpTxwIugd7Lu+2btsLAqhQSzDyIj2/uhMNp8xIMr/NBDtLgq3nomt9gefNa9xxLwk/OMg==} peerDependencies: - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112 storybook: ^8.4.7 '@storybook/react-webpack5@8.4.7': resolution: {integrity: sha512-T9GLqlsP4It4El7cC8rSkBPRWvORAsTDULeWlO36RST2TrYnmBOUytsi22mk7cAAAVhhD6rTrs1YdqWRMpfa1w==} engines: {node: '>=18.0.0'} peerDependencies: - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112 storybook: ^8.4.7 typescript: '>= 4.2.x' peerDependenciesMeta: @@ -5131,8 +5131,8 @@ packages: engines: {node: '>=18.0.0'} peerDependencies: '@storybook/test': 8.4.7 - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112 storybook: ^8.4.7 typescript: '>= 4.2.x' peerDependenciesMeta: @@ -5355,8 +5355,8 @@ packages: engines: {node: '>=18'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112 peerDependenciesMeta: '@types/react': optional: true @@ -11097,7 +11097,7 @@ packages: lucide-react@0.383.0: resolution: {integrity: sha512-13xlG0CQCJtzjSQYwwJ3WRqMHtRj3EXmLlorrARt7y+IHnxUCp3XyFNL1DfaGySWxHObDvnu1u1dV+0VMKHUSg==} peerDependencies: - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} @@ -13509,7 +13509,7 @@ packages: resolution: {integrity: sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw==} engines: {node: '>=10.18'} peerDependencies: - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 react-docgen-typescript@2.2.2: resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} @@ -13520,23 +13520,23 @@ packages: resolution: {integrity: sha512-APPU8HB2uZnpl6Vt/+0AFoVYgSRtfiP6FLrZgPPTDmqSb2R4qZRbgd0A3VzIFxDt5e+Fozjx79WjLWnF69DK8g==} engines: {node: '>=16.14.0'} - react-dom@0.0.0-experimental-056073de-20250109: - resolution: {integrity: sha512-hUf7Hp+VxVj/u3QxVBDTbNY2mwyHec1fyqnjHYqws6TPmjNjKf3+oVpiKIBDIfHKbu+XY4VdW78X1g2svXgHaQ==} + react-dom@0.0.0-experimental-540efebc-20250112: + resolution: {integrity: sha512-gKirKClhfX5aQelHuhIl1VtRx8Zc3+dpM1Am92N00DHtdncd3sNdYT6ewuNoz8Q3h+nBbS/AYDX8wwliZDEhgA==} peerDependencies: - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 - react-dom@19.1.0-canary-056073de-20250109: - resolution: {integrity: sha512-hTTe3mXOoOCvSwMq8bPxZrft+R7PF2giiUtLITPZUHO/Pmx8KXAUJmg+aO5zihYNcmsPJAdYM4WSWjrz5hdc4A==} + react-dom@19.1.0-canary-540efebc-20250112: + resolution: {integrity: sha512-4l4tHHcUVN8qw2Pbt8VkmG2NCKrmu15Ax+WrYjhaJtN77PzybJxqoDC2IsfCk5hfrg6AF8me3oh/yxKUQ4cFXw==} peerDependencies: - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 react-dom@19.1.0-canary-7b402084-20250107: resolution: {integrity: sha512-ETzHi3lWsrfAeQz60P9YyhvvlOYPEOcP2Du0cRvaqzAuF/iP4kBsHKmSuFQU1Usn1g/u3ecbar6d08jsup2V0Q==} peerDependencies: - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 - react-is@19.1.0-canary-056073de-20250109: - resolution: {integrity: sha512-2u0EwVfKVHgqCx/4Bwp8x/m3/hMtEu5/NUd4fhM87n7ZwLsFoU0o17Jo+eealID2ctHt652w8VypFSbzgembRw==} + react-is@19.1.0-canary-540efebc-20250112: + resolution: {integrity: sha512-RUzp8kDQNPxFwW7N+oN0CO7xZ9YYiyMVAjuUQx3pQ+FKUvPsNHsdtmZIpFyPBtQX3u/NzYlChuU0pHCX/JQpag==} react-is@19.1.0-canary-7b402084-20250107: resolution: {integrity: sha512-RFQLt4TJ3QcacHkWKICm1NPgd6BR/M5NF07aGT0ueGQcYkBRbauRilulQVl/nAR5c+y3sxkNJ4mWk3U7tKtEGQ==} @@ -13547,8 +13547,8 @@ packages: react-number-format@5.4.0: resolution: {integrity: sha512-NWdICrqLhI7rAS8yUeLVd6Wr4cN7UjJ9IBTS0f/a9i7UB4x4Ti70kGnksBtZ7o4Z7YRbvCMMR/jQmkoOBa/4fg==} peerDependencies: - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112 react-refresh@0.12.0: resolution: {integrity: sha512-suLIhrU2IHKL5JEKR/fAwJv7bbeq4kJ+pJopf77jHwuR+HmJS/HbrPIGsTBUVfw7tXPOmYv7UJ7PCaN49e8x4A==} @@ -13559,7 +13559,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 peerDependenciesMeta: '@types/react': optional: true @@ -13569,58 +13569,58 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 peerDependenciesMeta: '@types/react': optional: true - react-server-dom-turbopack@0.0.0-experimental-056073de-20250109: - resolution: {integrity: sha512-9FEw+Wv2C3b1Hoz+ZjxoSDjKApmG6kkedL6GcsH27sqRsCLyqzXkuZpcuHgbkmF7ICzT4gseBe4NCVgXIHbvAQ==} + react-server-dom-turbopack@0.0.0-experimental-540efebc-20250112: + resolution: {integrity: sha512-nyEkkH/mLKDm0W7Vc1Bq15Rf+XfChXtKLjCVXLo/sbdmqgZj3cI/EY8uqcA4XYej8b2oz6iuP55wdAgTFIR/Ww==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112 - react-server-dom-turbopack@19.1.0-canary-056073de-20250109: - resolution: {integrity: sha512-kS41feyvNxjb3qpqqATsugl/0QIIwLzqJUweEIt+opVb5kPCQurgK1JlrTlct0jVY5PbknxmOgpUZNZOaCQMpg==} + react-server-dom-turbopack@19.1.0-canary-540efebc-20250112: + resolution: {integrity: sha512-2oQVazCoXIy2nY0Gci0PTO1rNKy0FJfugbI1uUE09/5y7QJPg+6RvwIQt4UgdLBtmAjA+AqANJuJGGpdtZb4PQ==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112 - react-server-dom-webpack@0.0.0-experimental-056073de-20250109: - resolution: {integrity: sha512-TU4XHL0fVTH1vzEB80YylNhmYl0ncZMykT7ttuTNa9lQcXWLBzlmBaQ8mMN5jTkwNkjdXOehIaA1z7x20UCGgQ==} + react-server-dom-webpack@0.0.0-experimental-540efebc-20250112: + resolution: {integrity: sha512-40ClUE0AiCyPOwSIS1UMovOHGF6QyRerpULBkc41t9Kw5uaDPZ8Xsol89zZ8Dymys9KnNf6b/d/WUw7GCrjQWg==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112 webpack: 5.96.1 - react-server-dom-webpack@19.1.0-canary-056073de-20250109: - resolution: {integrity: sha512-ARvN8kO4xLlQKcmqREM9mlduxVsazEWtscY0uhCtz8kc7PqkFu2X/ireGn7WGA5c3YZ8TNMO2isT1dbfDe0HAA==} + react-server-dom-webpack@19.1.0-canary-540efebc-20250112: + resolution: {integrity: sha512-cEkLrsmuo3pNgrGGG2o9FTkyJlUGbU+RGNpElwiB51KoUrMAUXDZJfJQzhxCZRjdQeklRlyhPLf2n56Tvj9UTw==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112 webpack: 5.96.1 react-shallow-renderer@16.15.0: resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} peerDependencies: - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 react-ssr-prepass@1.0.8: resolution: {integrity: sha512-O0gfRA1SaK+9ITKxqfnXsej2jF+OHGP/+GxD4unROQaM/0/UczGF9fuF+wTboxaQoKdIf4FvS3h/OigWh704VA==} peerDependencies: - react: 19.1.0-canary-056073de-20250109 - react-is: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + react-is: 19.1.0-canary-540efebc-20250112 react-style-singleton@2.2.1: resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 peerDependenciesMeta: '@types/react': optional: true @@ -13628,26 +13628,26 @@ packages: react-test-renderer@18.2.0: resolution: {integrity: sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==} peerDependencies: - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 react-textarea-autosize@8.5.3: resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} engines: {node: '>=10'} peerDependencies: - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 react-virtualized@9.22.3: resolution: {integrity: sha512-MKovKMxWTcwPSxE1kK1HcheQTWfuCxAuBoSTf2gwyMM21NdX/PXUhnoP8Uc5dRKd+nKm8v41R36OellhdCpkrw==} peerDependencies: - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112 - react@0.0.0-experimental-056073de-20250109: - resolution: {integrity: sha512-xWattDvkPUHX8hk1pMAFI4XgNR0RQkPZAaIJxJHbbuMA+7EiqyFO2sifqzWJec+QLUL4gNUCDp57yeYqC5frxw==} + react@0.0.0-experimental-540efebc-20250112: + resolution: {integrity: sha512-2LQAgj6F+0myYmH578IjfNI+yoQD04CedcAWo3XOgGvmYx20odtUYuhLixinRM+rcsodviEILo5YzCn47Aw60Q==} engines: {node: '>=0.10.0'} - react@19.1.0-canary-056073de-20250109: - resolution: {integrity: sha512-/oh0HJ0iDcPeoDYTJPjgMJpX2pFopmcbGANxRjED7tS4yrxX32ABdALPPStYTXaPwNUm/cnJFZwZWJiesWANVw==} + react@19.1.0-canary-540efebc-20250112: + resolution: {integrity: sha512-ZVdBu9kNV2DQ4CH8EKMyGLGvseKvDZ1TjTzGf+t8A4AbWgKdE0NHF95VxnImCCEOs6NToQnAb0ikop9+s9VcMQ==} engines: {node: '>=0.10.0'} react@19.1.0-canary-7b402084-20250107: @@ -14187,11 +14187,11 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.0.0-experimental-056073de-20250109: - resolution: {integrity: sha512-hqK3MZvFe39xusUvoC7oy2yvpOZG6Osih62KLjHOzlxspl2w48GEWDyeYjxKkvd92FNMaY67G1O6WftRmXyPuA==} + scheduler@0.0.0-experimental-540efebc-20250112: + resolution: {integrity: sha512-9twdrlBgpWB+1+pWboRnLG3x6XR7EE0M/MaAgmIBYuCsJf4bBx160budgLoU+tgBEu+LeK1Wv4vYDwwH73EY/Q==} - scheduler@0.26.0-canary-056073de-20250109: - resolution: {integrity: sha512-RQBG6HHlrC/FeEv0zo2KeEZ4y2/iE2XO2gqK9ISJKUFDFXLRtUBt9dbpfd7wcVPhXkLQG8h9Wl/NwNsMd29AGQ==} + scheduler@0.26.0-canary-540efebc-20250112: + resolution: {integrity: sha512-Dt1UmNTqxI1ux3vJLP36HiAvb/PX48yuHe+Y7yJX6vBp63WXXaH9t4PcRC8XTnSmpgMJBm4n+moxQHvheYz2Fw==} schema-utils@2.7.1: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} @@ -14763,8 +14763,8 @@ packages: engines: {node: '>= 16'} peerDependencies: babel-plugin-styled-components: '>= 2' - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112 peerDependenciesMeta: babel-plugin-styled-components: optional: true @@ -14778,7 +14778,7 @@ packages: peerDependencies: '@babel/core': '*' babel-plugin-macros: '*' - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 peerDependenciesMeta: '@babel/core': optional: true @@ -14862,7 +14862,7 @@ packages: swr@2.2.4: resolution: {integrity: sha512-njiZ/4RiIhoOlAaLYDqwz5qH/KZXVilRLvomrx83HjzCWTfa+InyfAjv05PSFxnmLzZkNO9ZfvgoqzAaEI4sGQ==} peerDependencies: - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 symbol-observable@1.0.1: resolution: {integrity: sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==} @@ -15628,7 +15628,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 peerDependenciesMeta: '@types/react': optional: true @@ -15636,13 +15636,13 @@ packages: use-composed-ref@1.3.0: resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} peerDependencies: - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 use-isomorphic-layout-effect@1.1.2: resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 peerDependenciesMeta: '@types/react': optional: true @@ -15651,7 +15651,7 @@ packages: resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} peerDependencies: '@types/react': '*' - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 peerDependenciesMeta: '@types/react': optional: true @@ -15661,7 +15661,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 peerDependenciesMeta: '@types/react': optional: true @@ -15669,7 +15669,7 @@ packages: use-sync-external-store@1.2.0: resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -18222,12 +18222,12 @@ snapshots: '@capsizecss/metrics@3.4.0': {} - '@chromatic-com/storybook@3.2.2(react@19.1.0-canary-056073de-20250109)(storybook@8.4.7(prettier@3.3.3))': + '@chromatic-com/storybook@3.2.2(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))': dependencies: chromatic: 11.20.2 filesize: 10.1.6 jsonfile: 6.1.0 - react-confetti: 6.1.0(react@19.1.0-canary-056073de-20250109) + react-confetti: 6.1.0(react@19.1.0-canary-540efebc-20250112) storybook: 8.4.7(prettier@3.3.3) strip-ansi: 7.1.0 transitivePeerDependencies: @@ -18375,17 +18375,17 @@ snapshots: '@emotion/memoize@0.8.1': {} - '@emotion/react@11.11.1(@types/react@19.0.0)(react@19.1.0-canary-056073de-20250109)': + '@emotion/react@11.11.1(@types/react@19.0.0)(react@19.1.0-canary-540efebc-20250112)': dependencies: '@babel/runtime': 7.22.5 '@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.1.0-canary-056073de-20250109) + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@19.1.0-canary-540efebc-20250112) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 hoist-non-react-statics: 3.3.2 - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 optionalDependencies: '@types/react': 19.0.0 transitivePeerDependencies: @@ -18403,9 +18403,9 @@ snapshots: '@emotion/unitless@0.8.1': {} - '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@19.1.0-canary-056073de-20250109)': + '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@19.1.0-canary-540efebc-20250112)': dependencies: - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 '@emotion/utils@1.2.1': {} @@ -19847,11 +19847,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@2.2.1(react@19.1.0-canary-056073de-20250109)': + '@mdx-js/react@2.2.1(react@19.1.0-canary-540efebc-20250112)': dependencies: '@types/mdx': 2.0.3 '@types/react': 19.0.0 - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 '@mdx-js/react@2.2.1(react@19.1.0-canary-7b402084-20250107)': dependencies: @@ -19859,11 +19859,11 @@ snapshots: '@types/react': 19.0.0 react: 19.1.0-canary-7b402084-20250107 - '@mdx-js/react@3.1.0(@types/react@19.0.0)(react@19.1.0-canary-056073de-20250109)': + '@mdx-js/react@3.1.0(@types/react@19.0.0)(react@19.1.0-canary-540efebc-20250112)': dependencies: '@types/mdx': 2.0.3 '@types/react': 19.0.0 - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 '@mswjs/cookies@1.1.0': {} @@ -20433,12 +20433,12 @@ snapshots: '@storybook/addon-docs@8.4.7(@types/react@19.0.0)(storybook@8.4.7(prettier@3.3.3))': dependencies: - '@mdx-js/react': 3.1.0(@types/react@19.0.0)(react@19.1.0-canary-056073de-20250109) - '@storybook/blocks': 8.4.7(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109)(storybook@8.4.7(prettier@3.3.3)) + '@mdx-js/react': 3.1.0(@types/react@19.0.0)(react@19.1.0-canary-540efebc-20250112) + '@storybook/blocks': 8.4.7(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3)) '@storybook/csf-plugin': 8.4.7(storybook@8.4.7(prettier@3.3.3)) - '@storybook/react-dom-shim': 8.4.7(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109)(storybook@8.4.7(prettier@3.3.3)) - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109) + '@storybook/react-dom-shim': 8.4.7(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3)) + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) storybook: 8.4.7(prettier@3.3.3) ts-dedent: 2.2.0 transitivePeerDependencies: @@ -20480,9 +20480,9 @@ snapshots: storybook: 8.4.7(prettier@3.3.3) tiny-invariant: 1.3.3 - '@storybook/addon-onboarding@8.4.7(react@19.1.0-canary-056073de-20250109)(storybook@8.4.7(prettier@3.3.3))': + '@storybook/addon-onboarding@8.4.7(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))': dependencies: - react-confetti: 6.1.0(react@19.1.0-canary-056073de-20250109) + react-confetti: 6.1.0(react@19.1.0-canary-540efebc-20250112) storybook: 8.4.7(prettier@3.3.3) transitivePeerDependencies: - react @@ -20510,15 +20510,15 @@ snapshots: - '@swc/helpers' - webpack - '@storybook/blocks@8.4.7(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109)(storybook@8.4.7(prettier@3.3.3))': + '@storybook/blocks@8.4.7(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))': dependencies: '@storybook/csf': 0.1.12 - '@storybook/icons': 1.3.0(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109) + '@storybook/icons': 1.3.0(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112) storybook: 8.4.7(prettier@3.3.3) ts-dedent: 2.2.0 optionalDependencies: - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109) + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) '@storybook/builder-webpack5@8.4.7(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': dependencies: @@ -20598,10 +20598,10 @@ snapshots: '@storybook/global@5.0.0': {} - '@storybook/icons@1.3.0(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109)': + '@storybook/icons@1.3.0(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)': dependencies: - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109) + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) '@storybook/instrumenter@8.4.7(storybook@8.4.7(prettier@3.3.3))': dependencies: @@ -20613,18 +20613,18 @@ snapshots: dependencies: storybook: 8.4.7(prettier@3.3.3) - '@storybook/preset-react-webpack@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': + '@storybook/preset-react-webpack@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': dependencies: '@storybook/core-webpack': 8.4.7(storybook@8.4.7(prettier@3.3.3)) - '@storybook/react': 8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) + '@storybook/react': 8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.7.2)(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)) '@types/node': 20.17.6 '@types/semver': 7.5.6 find-up: 5.0.0 magic-string: 0.30.17 - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 react-docgen: 7.1.0 - react-dom: 19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109) + react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) resolve: 1.22.8 semver: 7.6.3 storybook: 8.4.7(prettier@3.3.3) @@ -20658,20 +20658,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/react-dom-shim@8.4.7(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109)(storybook@8.4.7(prettier@3.3.3))': + '@storybook/react-dom-shim@8.4.7(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))': dependencies: - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109) + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) storybook: 8.4.7(prettier@3.3.3) - '@storybook/react-webpack5@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': + '@storybook/react-webpack5@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': dependencies: '@storybook/builder-webpack5': 8.4.7(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) - '@storybook/preset-react-webpack': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) - '@storybook/react': 8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) + '@storybook/preset-react-webpack': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) + '@storybook/react': 8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) '@types/node': 20.17.6 - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109) + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) storybook: 8.4.7(prettier@3.3.3) optionalDependencies: typescript: 5.7.2 @@ -20684,16 +20684,16 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react@8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': + '@storybook/react@8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': dependencies: '@storybook/components': 8.4.7(storybook@8.4.7(prettier@3.3.3)) '@storybook/global': 5.0.0 '@storybook/manager-api': 8.4.7(storybook@8.4.7(prettier@3.3.3)) '@storybook/preview-api': 8.4.7(storybook@8.4.7(prettier@3.3.3)) - '@storybook/react-dom-shim': 8.4.7(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109)(storybook@8.4.7(prettier@3.3.3)) + '@storybook/react-dom-shim': 8.4.7(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3)) '@storybook/theming': 8.4.7(storybook@8.4.7(prettier@3.3.3)) - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109) + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) storybook: 8.4.7(prettier@3.3.3) optionalDependencies: '@storybook/test': 8.4.7(storybook@8.4.7(prettier@3.3.3)) @@ -20929,13 +20929,13 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react@15.0.7(@types/react@19.0.0)(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109)': + '@testing-library/react@15.0.7(@types/react@19.0.0)(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)': dependencies: '@babel/runtime': 7.22.5 '@testing-library/dom': 10.1.0 '@types/react-dom': 19.0.0 - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109) + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) optionalDependencies: '@types/react': 19.0.0 @@ -26291,7 +26291,7 @@ snapshots: hoist-non-react-statics@3.3.2: dependencies: - react-is: 19.1.0-canary-056073de-20250109 + react-is: 19.1.0-canary-540efebc-20250112 homedir-polyfill@1.0.3: dependencies: @@ -30947,31 +30947,31 @@ snapshots: '@jest/types': 24.9.0 ansi-regex: 4.1.0 ansi-styles: 3.2.1 - react-is: 19.1.0-canary-056073de-20250109 + react-is: 19.1.0-canary-540efebc-20250112 pretty-format@27.5.1: dependencies: ansi-regex: 5.0.1 ansi-styles: 5.2.0 - react-is: 19.1.0-canary-056073de-20250109 + react-is: 19.1.0-canary-540efebc-20250112 pretty-format@29.5.0: dependencies: '@jest/schemas': 29.4.3 ansi-styles: 5.2.0 - react-is: 19.1.0-canary-056073de-20250109 + react-is: 19.1.0-canary-540efebc-20250112 pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 19.1.0-canary-056073de-20250109 + react-is: 19.1.0-canary-540efebc-20250112 pretty-format@30.0.0-alpha.6: dependencies: '@jest/schemas': 30.0.0-alpha.6 ansi-styles: 5.2.0 - react-is: 19.1.0-canary-056073de-20250109 + react-is: 19.1.0-canary-540efebc-20250112 pretty-ms@7.0.0: dependencies: @@ -31030,7 +31030,7 @@ snapshots: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 - react-is: 19.1.0-canary-056073de-20250109 + react-is: 19.1.0-canary-540efebc-20250112 property-information@5.6.0: dependencies: @@ -31200,9 +31200,9 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-confetti@6.1.0(react@19.1.0-canary-056073de-20250109): + react-confetti@6.1.0(react@19.1.0-canary-540efebc-20250112): dependencies: - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 tween-functions: 1.2.0 react-docgen-typescript@2.2.2(typescript@5.7.2): @@ -31224,22 +31224,22 @@ snapshots: transitivePeerDependencies: - supports-color - react-dom@0.0.0-experimental-056073de-20250109(react@19.1.0-canary-056073de-20250109): + react-dom@0.0.0-experimental-540efebc-20250112(react@19.1.0-canary-540efebc-20250112): dependencies: - react: 19.1.0-canary-056073de-20250109 - scheduler: 0.26.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + scheduler: 0.26.0-canary-540efebc-20250112 - react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109): + react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112): dependencies: - react: 19.1.0-canary-056073de-20250109 - scheduler: 0.26.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + scheduler: 0.26.0-canary-540efebc-20250112 react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107): dependencies: react: 19.1.0-canary-7b402084-20250107 - scheduler: 0.26.0-canary-056073de-20250109 + scheduler: 0.26.0-canary-540efebc-20250112 - react-is@19.1.0-canary-056073de-20250109: {} + react-is@19.1.0-canary-540efebc-20250112: {} react-is@19.1.0-canary-7b402084-20250107: {} @@ -31272,48 +31272,48 @@ snapshots: optionalDependencies: '@types/react': 19.0.0 - react-server-dom-turbopack@0.0.0-experimental-056073de-20250109(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109): + react-server-dom-turbopack@0.0.0-experimental-540efebc-20250112(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109) + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) - react-server-dom-turbopack@19.1.0-canary-056073de-20250109(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109): + react-server-dom-turbopack@19.1.0-canary-540efebc-20250112(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109) + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) - react-server-dom-webpack@0.0.0-experimental-056073de-20250109(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109)(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))): + react-server-dom-webpack@0.0.0-experimental-540efebc-20250112(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109) + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) webpack: 5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15)) webpack-sources: 3.2.3(patch_hash=jbynf5dc46ambamq3wuyho6hkq) - react-server-dom-webpack@19.1.0-canary-056073de-20250109(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109)(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))): + react-server-dom-webpack@19.1.0-canary-540efebc-20250112(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109) + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) webpack: 5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15)) webpack-sources: 3.2.3(patch_hash=jbynf5dc46ambamq3wuyho6hkq) - react-shallow-renderer@16.15.0(react@19.1.0-canary-056073de-20250109): + react-shallow-renderer@16.15.0(react@19.1.0-canary-540efebc-20250112): dependencies: object-assign: 4.1.1 - react: 19.1.0-canary-056073de-20250109 - react-is: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + react-is: 19.1.0-canary-540efebc-20250112 - react-ssr-prepass@1.0.8(react-is@19.1.0-canary-7b402084-20250107)(react@19.1.0-canary-056073de-20250109): + react-ssr-prepass@1.0.8(react-is@19.1.0-canary-7b402084-20250107)(react@19.1.0-canary-540efebc-20250112): dependencies: object-is: 1.0.2 - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 react-is: 19.1.0-canary-7b402084-20250107 react-style-singleton@2.2.1(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): @@ -31325,12 +31325,12 @@ snapshots: optionalDependencies: '@types/react': 19.0.0 - react-test-renderer@18.2.0(react@19.1.0-canary-056073de-20250109): + react-test-renderer@18.2.0(react@19.1.0-canary-540efebc-20250112): dependencies: - react: 19.1.0-canary-056073de-20250109 - react-is: 19.1.0-canary-056073de-20250109 - react-shallow-renderer: 16.15.0(react@19.1.0-canary-056073de-20250109) - scheduler: 0.26.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 + react-is: 19.1.0-canary-540efebc-20250112 + react-shallow-renderer: 16.15.0(react@19.1.0-canary-540efebc-20250112) + scheduler: 0.26.0-canary-540efebc-20250112 react-textarea-autosize@8.5.3(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): dependencies: @@ -31341,20 +31341,20 @@ snapshots: transitivePeerDependencies: - '@types/react' - react-virtualized@9.22.3(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109): + react-virtualized@9.22.3(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112): dependencies: '@babel/runtime': 7.22.5 clsx: 1.1.1 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109) + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) react-lifecycles-compat: 3.0.4 - react@0.0.0-experimental-056073de-20250109: {} + react@0.0.0-experimental-540efebc-20250112: {} - react@19.1.0-canary-056073de-20250109: {} + react@19.1.0-canary-540efebc-20250112: {} react@19.1.0-canary-7b402084-20250107: {} @@ -32094,9 +32094,9 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.0.0-experimental-056073de-20250109: {} + scheduler@0.0.0-experimental-540efebc-20250112: {} - scheduler@0.26.0-canary-056073de-20250109: {} + scheduler@0.26.0-canary-540efebc-20250112: {} schema-utils@2.7.1: dependencies: @@ -32734,7 +32734,7 @@ snapshots: dependencies: inline-style-parser: 0.1.1 - styled-components@6.0.0-rc.3(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109): + styled-components@6.0.0-rc.3(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112): dependencies: '@babel/cli': 7.21.5(@babel/core@7.22.5) '@babel/core': 7.22.5 @@ -32749,8 +32749,8 @@ snapshots: '@emotion/unitless': 0.8.1 css-to-react-native: 3.2.0 postcss: 8.4.31 - react: 19.1.0-canary-056073de-20250109 - react-dom: 19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109) + react: 19.1.0-canary-540efebc-20250112 + react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) shallowequal: 1.1.0 stylis: 4.2.0 tslib: 2.5.3 @@ -32762,10 +32762,10 @@ snapshots: postcss: 7.0.32 postcss-load-plugins: 2.3.0 - styled-jsx@5.1.6(@babel/core@7.22.5)(babel-plugin-macros@3.1.0)(react@19.1.0-canary-056073de-20250109): + styled-jsx@5.1.6(@babel/core@7.22.5)(babel-plugin-macros@3.1.0)(react@19.1.0-canary-540efebc-20250112): dependencies: client-only: 0.0.1 - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 optionalDependencies: '@babel/core': 7.22.5 babel-plugin-macros: 3.1.0 @@ -32861,11 +32861,11 @@ snapshots: '@swc/counter': 0.1.3 webpack: 5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1) - swr@2.2.4(react@19.1.0-canary-056073de-20250109): + swr@2.2.4(react@19.1.0-canary-540efebc-20250112): dependencies: client-only: 0.0.1 - react: 19.1.0-canary-056073de-20250109 - use-sync-external-store: 1.2.0(react@19.1.0-canary-056073de-20250109) + react: 19.1.0-canary-540efebc-20250112 + use-sync-external-store: 1.2.0(react@19.1.0-canary-540efebc-20250112) symbol-observable@1.0.1: {} @@ -33637,9 +33637,9 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - unistore@3.4.1(react@19.1.0-canary-056073de-20250109): + unistore@3.4.1(react@19.1.0-canary-540efebc-20250112): optionalDependencies: - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 universal-github-app-jwt@1.1.1: dependencies: @@ -33765,9 +33765,9 @@ snapshots: optionalDependencies: '@types/react': 19.0.0 - use-sync-external-store@1.2.0(react@19.1.0-canary-056073de-20250109): + use-sync-external-store@1.2.0(react@19.1.0-canary-540efebc-20250112): dependencies: - react: 19.1.0-canary-056073de-20250109 + react: 19.1.0-canary-540efebc-20250112 util-deprecate@1.0.2: {} From 98da00e98508441693521acdaf0bc5da35888aa5 Mon Sep 17 00:00:00 2001 From: vercel-release-bot Date: Sun, 12 Jan 2025 23:23:38 +0000 Subject: [PATCH 02/65] v15.2.0-canary.6 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/eslint-config-next/package.json | 4 ++-- packages/eslint-plugin-next/package.json | 2 +- packages/font/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-codemod/package.json | 2 +- packages/next-env/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-storybook/package.json | 2 +- packages/next-polyfill-module/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next-swc/package.json | 2 +- packages/next/package.json | 14 +++++++------- packages/react-refresh-utils/package.json | 2 +- packages/third-parties/package.json | 4 ++-- pnpm-lock.yaml | 16 ++++++++-------- 17 files changed, 32 insertions(+), 32 deletions(-) diff --git a/lerna.json b/lerna.json index 32e1e37ec1d50..838b4ae5e0f9d 100644 --- a/lerna.json +++ b/lerna.json @@ -16,5 +16,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "15.2.0-canary.5" + "version": "15.2.0-canary.6" } diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index 3abbc56f2791d..eb352cb183f9f 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "15.2.0-canary.5", + "version": "15.2.0-canary.6", "keywords": [ "react", "next", diff --git a/packages/eslint-config-next/package.json b/packages/eslint-config-next/package.json index 3d635c7ff5e96..c94fdbafc8d82 100644 --- a/packages/eslint-config-next/package.json +++ b/packages/eslint-config-next/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-next", - "version": "15.2.0-canary.5", + "version": "15.2.0-canary.6", "description": "ESLint configuration used by Next.js.", "main": "index.js", "license": "MIT", @@ -10,7 +10,7 @@ }, "homepage": "https://nextjs.org/docs/app/api-reference/config/eslint", "dependencies": { - "@next/eslint-plugin-next": "15.2.0-canary.5", + "@next/eslint-plugin-next": "15.2.0-canary.6", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", diff --git a/packages/eslint-plugin-next/package.json b/packages/eslint-plugin-next/package.json index aecbbb89d01c4..dba8b7f8dbdbb 100644 --- a/packages/eslint-plugin-next/package.json +++ b/packages/eslint-plugin-next/package.json @@ -1,6 +1,6 @@ { "name": "@next/eslint-plugin-next", - "version": "15.2.0-canary.5", + "version": "15.2.0-canary.6", "description": "ESLint plugin for Next.js.", "main": "dist/index.js", "license": "MIT", diff --git a/packages/font/package.json b/packages/font/package.json index 10a353f73f83f..b96d2419582ec 100644 --- a/packages/font/package.json +++ b/packages/font/package.json @@ -1,7 +1,7 @@ { "name": "@next/font", "private": true, - "version": "15.2.0-canary.5", + "version": "15.2.0-canary.6", "repository": { "url": "vercel/next.js", "directory": "packages/font" diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index 51faf7f274ce8..dd1f3d0ceedf0 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "15.2.0-canary.5", + "version": "15.2.0-canary.6", "main": "index.js", "types": "index.d.ts", "license": "MIT", diff --git a/packages/next-codemod/package.json b/packages/next-codemod/package.json index 6d6b655312a81..0c016c61b179c 100644 --- a/packages/next-codemod/package.json +++ b/packages/next-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@next/codemod", - "version": "15.2.0-canary.5", + "version": "15.2.0-canary.6", "license": "MIT", "repository": { "type": "git", diff --git a/packages/next-env/package.json b/packages/next-env/package.json index 7327d456687d3..351d42b2ddcaf 100644 --- a/packages/next-env/package.json +++ b/packages/next-env/package.json @@ -1,6 +1,6 @@ { "name": "@next/env", - "version": "15.2.0-canary.5", + "version": "15.2.0-canary.6", "keywords": [ "react", "next", diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index bda341804f85c..5ac9f81604185 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "15.2.0-canary.5", + "version": "15.2.0-canary.6", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-storybook/package.json b/packages/next-plugin-storybook/package.json index bac2814cf8300..fe5c2568274c7 100644 --- a/packages/next-plugin-storybook/package.json +++ b/packages/next-plugin-storybook/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-storybook", - "version": "15.2.0-canary.5", + "version": "15.2.0-canary.6", "repository": { "url": "vercel/next.js", "directory": "packages/next-plugin-storybook" diff --git a/packages/next-polyfill-module/package.json b/packages/next-polyfill-module/package.json index 2532928191988..9014c3f00e644 100644 --- a/packages/next-polyfill-module/package.json +++ b/packages/next-polyfill-module/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-module", - "version": "15.2.0-canary.5", + "version": "15.2.0-canary.6", "description": "A standard library polyfill for ES Modules supporting browsers (Edge 16+, Firefox 60+, Chrome 61+, Safari 10.1+)", "main": "dist/polyfill-module.js", "license": "MIT", diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index 62697b1a9a96d..2f4c562946618 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "15.2.0-canary.5", + "version": "15.2.0-canary.6", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next-swc/package.json b/packages/next-swc/package.json index e155164687005..99b5639903212 100644 --- a/packages/next-swc/package.json +++ b/packages/next-swc/package.json @@ -1,6 +1,6 @@ { "name": "@next/swc", - "version": "15.2.0-canary.5", + "version": "15.2.0-canary.6", "private": true, "scripts": { "clean": "node ../../scripts/rm.mjs native", diff --git a/packages/next/package.json b/packages/next/package.json index 9c226c4cca5ed..eb0bffe0d5939 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "15.2.0-canary.5", + "version": "15.2.0-canary.6", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -99,7 +99,7 @@ ] }, "dependencies": { - "@next/env": "15.2.0-canary.5", + "@next/env": "15.2.0-canary.6", "@swc/counter": "0.1.3", "@swc/helpers": "0.5.15", "busboy": "1.6.0", @@ -164,11 +164,11 @@ "@jest/types": "29.5.0", "@mswjs/interceptors": "0.23.0", "@napi-rs/triples": "1.2.0", - "@next/font": "15.2.0-canary.5", - "@next/polyfill-module": "15.2.0-canary.5", - "@next/polyfill-nomodule": "15.2.0-canary.5", - "@next/react-refresh-utils": "15.2.0-canary.5", - "@next/swc": "15.2.0-canary.5", + "@next/font": "15.2.0-canary.6", + "@next/polyfill-module": "15.2.0-canary.6", + "@next/polyfill-nomodule": "15.2.0-canary.6", + "@next/react-refresh-utils": "15.2.0-canary.6", + "@next/swc": "15.2.0-canary.6", "@opentelemetry/api": "1.6.0", "@playwright/test": "1.41.2", "@storybook/addon-essentials": "^8.4.7", diff --git a/packages/react-refresh-utils/package.json b/packages/react-refresh-utils/package.json index bbc8807753add..e07f210b59a4a 100644 --- a/packages/react-refresh-utils/package.json +++ b/packages/react-refresh-utils/package.json @@ -1,6 +1,6 @@ { "name": "@next/react-refresh-utils", - "version": "15.2.0-canary.5", + "version": "15.2.0-canary.6", "description": "An experimental package providing utilities for React Refresh.", "repository": { "url": "vercel/next.js", diff --git a/packages/third-parties/package.json b/packages/third-parties/package.json index 5f5c932e6567f..a5fc60170c1bb 100644 --- a/packages/third-parties/package.json +++ b/packages/third-parties/package.json @@ -1,6 +1,6 @@ { "name": "@next/third-parties", - "version": "15.2.0-canary.5", + "version": "15.2.0-canary.6", "repository": { "url": "vercel/next.js", "directory": "packages/third-parties" @@ -26,7 +26,7 @@ "third-party-capital": "1.0.20" }, "devDependencies": { - "next": "15.2.0-canary.5", + "next": "15.2.0-canary.6", "outdent": "0.8.0", "prettier": "2.5.1", "typescript": "5.7.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 92bf207d1c4dc..1a9e3d1afe8da 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -793,7 +793,7 @@ importers: packages/eslint-config-next: dependencies: '@next/eslint-plugin-next': - specifier: 15.2.0-canary.5 + specifier: 15.2.0-canary.6 version: link:../eslint-plugin-next '@rushstack/eslint-patch': specifier: ^1.10.3 @@ -857,7 +857,7 @@ importers: packages/next: dependencies: '@next/env': - specifier: 15.2.0-canary.5 + specifier: 15.2.0-canary.6 version: link:../next-env '@swc/counter': specifier: 0.1.3 @@ -985,19 +985,19 @@ importers: specifier: 1.2.0 version: 1.2.0 '@next/font': - specifier: 15.2.0-canary.5 + specifier: 15.2.0-canary.6 version: link:../font '@next/polyfill-module': - specifier: 15.2.0-canary.5 + specifier: 15.2.0-canary.6 version: link:../next-polyfill-module '@next/polyfill-nomodule': - specifier: 15.2.0-canary.5 + specifier: 15.2.0-canary.6 version: link:../next-polyfill-nomodule '@next/react-refresh-utils': - specifier: 15.2.0-canary.5 + specifier: 15.2.0-canary.6 version: link:../react-refresh-utils '@next/swc': - specifier: 15.2.0-canary.5 + specifier: 15.2.0-canary.6 version: link:../next-swc '@opentelemetry/api': specifier: 1.6.0 @@ -1661,7 +1661,7 @@ importers: version: 1.0.20 devDependencies: next: - specifier: 15.2.0-canary.5 + specifier: 15.2.0-canary.6 version: link:../next outdent: specifier: 0.8.0 From 61b4a7404474ae4135bebe42b0abc78fe37fbeda Mon Sep 17 00:00:00 2001 From: Loco <89942527+locothedev@users.noreply.github.com> Date: Mon, 13 Jan 2025 06:31:20 +0700 Subject: [PATCH 03/65] fix: unauthorized.mdx (#74799) Co-authored-by: Jiachi Liu --- .../04-api-reference/03-file-conventions/unauthorized.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/01-app/04-api-reference/03-file-conventions/unauthorized.mdx b/docs/01-app/04-api-reference/03-file-conventions/unauthorized.mdx index 52b46cb97463d..30b4c52150a46 100644 --- a/docs/01-app/04-api-reference/03-file-conventions/unauthorized.mdx +++ b/docs/01-app/04-api-reference/03-file-conventions/unauthorized.mdx @@ -66,7 +66,7 @@ export default async function DashboardPage() { ```jsx filename="app/dashboard/page.js" switcher import { verifySession } from '@/app/lib/dal' -import { unauthorized } from 'next/server' +import { unauthorized } from 'next/navigation' export default async function DashboardPage() { const session = await verifySession() From 9fd30a538e46d91d915296c6aecba27bd3afa31c Mon Sep 17 00:00:00 2001 From: Jiwon Choi Date: Mon, 13 Jan 2025 08:38:59 +0800 Subject: [PATCH 04/65] [DevOverlay] Fix Style Regression (#74768) ### Why? There were regressions in both the `floating-header` story and the dialog border. ### Before ![CleanShot 2025-01-11 at 05 51 51](https://github.com/user-attachments/assets/1362b8ed-1ecc-4232-b5a8-a089865e2eae) ### After ![CleanShot 2025-01-11 at 05 51 44](https://github.com/user-attachments/assets/c3d60aae-24f8-45bc-8e30-e3695fa132f8) ### Floating Header Story This was invisible due to `translateY`. ![CleanShot 2025-01-11 at 05 49 59](https://github.com/user-attachments/assets/ce2e5abd-8c80-4035-b62a-474ece2dab00) Closes NDX-654 --- .../internal/components/Dialog/styles.ts | 3 +-- .../components/Errors/dialog/dialog.tsx | 1 - .../error-overlay-bottom-stacks.tsx | 16 +++++-------- .../error-overlay-floating-header.stories.tsx | 13 +++++++++++ .../error-overlay-floating-header.tsx | 4 ++-- .../error-overlay-layout.tsx | 23 ++++++++++--------- .../_experimental/internal/styles/Base.tsx | 10 ++++++++ 7 files changed, 44 insertions(+), 26 deletions(-) diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Dialog/styles.ts b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Dialog/styles.ts index 0443abd3fa2c5..a6c15e6a67d7b 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Dialog/styles.ts +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Dialog/styles.ts @@ -9,9 +9,8 @@ const styles = css` max-height: calc(100% - 56px); margin-right: auto; margin-left: auto; - - z-index: 50; outline: none; + overflow-y: hidden; } @media (max-height: 812px) { diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dialog/dialog.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dialog/dialog.tsx index 004ea166257f2..08fce3fce5d77 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dialog/dialog.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dialog/dialog.tsx @@ -31,7 +31,6 @@ export const DIALOG_STYLES = css` border: 1px solid var(--color-gray-400); border-radius: var(--rounded-xl); box-shadow: var(--shadow-md); - position: relative; } .nextjs-error-overlay-dialog-turbopack-background { diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-bottom-stacks/error-overlay-bottom-stacks.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-bottom-stacks/error-overlay-bottom-stacks.tsx index a8c422a07ccc0..4231541e286cb 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-bottom-stacks/error-overlay-bottom-stacks.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-bottom-stacks/error-overlay-bottom-stacks.tsx @@ -38,10 +38,8 @@ export const styles = css` flex-direction: column; width: 100%; outline: none; - position: absolute; - bottom: -10px; z-index: -1; - + position: fixed; @media (min-width: 576px) { max-width: 540px; } @@ -57,26 +55,24 @@ export const styles = css` .error-overlay-bottom-stack-1, .error-overlay-bottom-stack-2 { - padding: 12px; + padding: var(--size-3); align-self: center; border: 1px solid var(--color-gray-400); border-radius: var(--rounded-xl); box-shadow: var(--shadow-md); background: var(--color-background-200); animation: stack-slide-down 0.3s ease-out forwards; - transform-origin: top center; - position: relative; } .error-overlay-bottom-stack-1 { - width: calc(100% - 24px); + width: calc(100% - var(--size-6)); + margin-top: calc(-1 * var(--size-3)); } .error-overlay-bottom-stack-2 { + width: calc(100% - var(--size-12)); + margin-top: calc(-1 * var(--size-3_5)); z-index: -2; - position: absolute; - top: 10px; - width: calc(100% - 48px); } @keyframes stack-slide-down { diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-floating-header/error-overlay-floating-header.stories.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-floating-header/error-overlay-floating-header.stories.tsx index c911f8123f635..721bfd05b935c 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-floating-header/error-overlay-floating-header.stories.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-floating-header/error-overlay-floating-header.stories.tsx @@ -41,4 +41,17 @@ export const Default: Story = { staleness: 'stale-major', }, }, + parameters: { + docs: { + story: { inline: true }, + }, + }, + decorators: [ + (Story) => ( + // Offset the translateY applied to the floating header. +
+ +
+ ), + ], } diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-floating-header/error-overlay-floating-header.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-floating-header/error-overlay-floating-header.tsx index 456f6fdaaaf0e..1344277b95e51 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-floating-header/error-overlay-floating-header.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-floating-header/error-overlay-floating-header.tsx @@ -43,8 +43,8 @@ export const styles = css` align-items: center; width: 100%; - position: absolute; - transform: translateY(-42px); + position: fixed; + transform: translateY(calc(-1 * var(--size-10_5))); outline: none; diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-layout/error-overlay-layout.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-layout/error-overlay-layout.tsx index a36df4b6b12b5..998fc6a51c6b8 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-layout/error-overlay-layout.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-layout/error-overlay-layout.tsx @@ -71,14 +71,15 @@ export function ErrorOverlayLayout({ return ( - + +
+ - ) diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/styles/Base.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/styles/Base.tsx index 5e55f053a9763..477e99d96937c 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/styles/Base.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/styles/Base.tsx @@ -79,12 +79,22 @@ export function Base() { --size-3: 0.75rem; /* 12px */ --size-3_5: 0.875rem; /* 14px */ --size-4: 1rem; /* 16px */ + --size-4_5: 1.125rem; /* 18px */ --size-5: 1.25rem; /* 20px */ + --size-5_5: 1.375rem; /* 22px */ --size-6: 1.5rem; /* 24px */ + --size-6_5: 1.625rem; /* 26px */ --size-7: 1.75rem; /* 28px */ + --size-7_5: 1.875rem; /* 30px */ --size-8: 2rem; /* 32px */ + --size-8_5: 2.125rem; /* 34px */ --size-9: 2.25rem; /* 36px */ + --size-9_5: 2.375rem; /* 38px */ --size-10: 2.5rem; /* 40px */ + --size-10_5: 2.625rem; /* 42px */ + --size-11: 2.75rem; /* 44px */ + --size-11_5: 2.875rem; /* 46px */ + --size-12: 3rem; /* 48px */ } @media (prefers-color-scheme: dark) { From 5db5f136ae514a2ceabf965f1e2980970c5fa2d6 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Mon, 13 Jan 2025 09:58:23 +0100 Subject: [PATCH 05/65] [Turbopack] make the single module graph a root task (#74778) --- crates/next-api/src/module_graph.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/crates/next-api/src/module_graph.rs b/crates/next-api/src/module_graph.rs index d96f227e286ff..22dad0deaf8a7 100644 --- a/crates/next-api/src/module_graph.rs +++ b/crates/next-api/src/module_graph.rs @@ -575,6 +575,13 @@ impl ReducedGraphs { } } +// This is a performance optimization. This function is a root aggregation function that aggregates +// over the whole subgraph. +#[turbo_tasks::function] +async fn get_global_module_graph(project: ResolvedVc) -> Vc { + SingleModuleGraph::new_with_entries(project.get_all_entries()) +} + #[turbo_tasks::function(operation)] async fn get_reduced_graphs_for_endpoint_inner_operation( project: ResolvedVc, @@ -592,7 +599,9 @@ async fn get_reduced_graphs_for_endpoint_inner_operation( false, vec![ async move { - SingleModuleGraph::new_with_entries(project.get_all_entries()) + get_global_module_graph(*project) + .resolve_strongly_consistent() + .await? .to_resolved() .await } From 09e47152bf71839bc69e7d86b0073aa118eca1e8 Mon Sep 17 00:00:00 2001 From: Hendrik Liebau Date: Mon, 13 Jan 2025 11:52:51 +0100 Subject: [PATCH 06/65] Fix output files warning by Turborepo (#74811) The new version of Turborepo (rightfully) complains that two of our packages don't have output files specified when running `pnpm build`: ``` WARNING no output files found for task @next/codemod#build. Please check your `outputs` key in `turbo.json` WARNING no output files found for task @vercel/turbopack-next#build. Please check your `outputs` key in `turbo.json` ``` The package `@next/codemod` emits its `.js`, `.js.map`, and `.d.ts` files into the same folder as the respective source files instead of `dist` (as specified in the root `turbo.json`). And `@vercel/turbopack-next` does not emit any output files. Both facts are now reflected in the two added package-specific `turbo.json` files. --- crates/next-core/js/turbo.json | 9 +++++++++ packages/next-codemod/turbo.json | 26 ++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 crates/next-core/js/turbo.json create mode 100644 packages/next-codemod/turbo.json diff --git a/crates/next-core/js/turbo.json b/crates/next-core/js/turbo.json new file mode 100644 index 0000000000000..b743d5d2c101e --- /dev/null +++ b/crates/next-core/js/turbo.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://turbo.build/schema.json", + "extends": ["//"], + "tasks": { + "build": { + "outputs": [] + } + } +} diff --git a/packages/next-codemod/turbo.json b/packages/next-codemod/turbo.json new file mode 100644 index 0000000000000..0ce2636384939 --- /dev/null +++ b/packages/next-codemod/turbo.json @@ -0,0 +1,26 @@ +{ + "$schema": "https://turbo.build/schema.json", + "extends": ["//"], + "tasks": { + "build": { + "outputs": [ + "**/*.js", + "**/*.d.ts", + "**/*.js.map", + "!bin/__testfixtures__/**", + "!transforms/__testfixtures__/**", + "!transforms/__tests__/**" + ] + }, + "dev": { + "outputs": [ + "**/*.js", + "**/*.d.ts", + "**/*.js.map", + "!bin/__testfixtures__/**", + "!transforms/__testfixtures__/**", + "!transforms/__tests__/**" + ] + } + } +} From 9010e45448cdea433100a2f2dd521c6b1152849c Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Mon, 13 Jan 2025 13:58:31 +0100 Subject: [PATCH 07/65] docs: mark app router dynamic example as client component (#74806) --- .../06-optimizing/07-lazy-loading.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/01-app/03-building-your-application/06-optimizing/07-lazy-loading.mdx b/docs/01-app/03-building-your-application/06-optimizing/07-lazy-loading.mdx index 6e09c6d690335..66c266fb5fdfe 100644 --- a/docs/01-app/03-building-your-application/06-optimizing/07-lazy-loading.mdx +++ b/docs/01-app/03-building-your-application/06-optimizing/07-lazy-loading.mdx @@ -127,6 +127,8 @@ export default function Page() { ### Adding a custom loading component ```jsx filename="app/page.js" +'use client' + import dynamic from 'next/dynamic' const WithCustomLoading = dynamic( From 5c4294feb1d9851c86353402dd5d892bb52fd111 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Mon, 13 Jan 2025 14:56:48 +0100 Subject: [PATCH 08/65] docs: disclaimer for only canary version available for ppr (#74813) --- .../03-rendering/04-partial-prerendering.mdx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/01-app/03-building-your-application/03-rendering/04-partial-prerendering.mdx b/docs/01-app/03-building-your-application/03-rendering/04-partial-prerendering.mdx index fd6f8f7529d55..a7f8d6bf02663 100644 --- a/docs/01-app/03-building-your-application/03-rendering/04-partial-prerendering.mdx +++ b/docs/01-app/03-building-your-application/03-rendering/04-partial-prerendering.mdx @@ -29,9 +29,15 @@ To prevent creating many HTTP requests for each dynamic component, PPR is able t ## Using Partial Prerendering -### Incremental Adoption (Version 15) +### Incremental Adoption (Version 15 Canary Versions) -In Next.js 15, you can incrementally adopt Partial Prerendering in [layouts](/docs/app/building-your-application/routing/layouts-and-templates) and [pages](/docs/app/api-reference/file-conventions/page) by setting the [`ppr`](/docs/app/api-reference/config/next-config-js/ppr) option in `next.config.js` to `incremental`, and exporting the `experimental_ppr` [route config option](/docs/app/api-reference/file-conventions/route-segment-config) at the top of the file: +In Next.js 15 canary versions, PPR is available as an experimental feature. It's not available in the stable versions yet. To install: + +```bash +npm install next@canary +``` + +You can incrementally adopt Partial Prerendering in [layouts](/docs/app/building-your-application/routing/layouts-and-templates) and [pages](/docs/app/api-reference/file-conventions/page) by setting the [`ppr`](/docs/app/api-reference/config/next-config-js/ppr) option in `next.config.js` to `incremental`, and exporting the `experimental_ppr` [route config option](/docs/app/api-reference/file-conventions/route-segment-config) at the top of the file: ```ts filename="next.config.ts" switcher import type { NextConfig } from 'next' From b7d4e14a88c74d505af3575b6693b4ea25d1c702 Mon Sep 17 00:00:00 2001 From: Benjamin Woodruff Date: Mon, 13 Jan 2025 08:13:54 -0800 Subject: [PATCH 09/65] refactor(turbopack-dev-server): Use ResolvedVc/NonLocalValue in RewriteType, remove all "local" opt-outs from structs (#74708) --- .../turbopack-dev-server/src/source/mod.rs | 26 +++++++++---------- .../src/source/resolve.rs | 4 +-- .../src/source/wrapping_source.rs | 2 +- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/turbopack/crates/turbopack-dev-server/src/source/mod.rs b/turbopack/crates/turbopack-dev-server/src/source/mod.rs index 3f8c31f03dd3c..ad6023d426000 100644 --- a/turbopack/crates/turbopack-dev-server/src/source/mod.rs +++ b/turbopack/crates/turbopack-dev-server/src/source/mod.rs @@ -475,33 +475,31 @@ impl ContentSource for NoContentSource { } } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, TraceRawVcs)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, TraceRawVcs, NonLocalValue)] pub enum RewriteType { Location { - /// The new path and query used to lookup content. This _does not_ need - /// to be the original path or query. + /// The new path and query used to lookup content. This _does not_ need to be the original + /// path or query. path_and_query: RcStr, }, ContentSource { - /// [Vc>]s from which to restart the lookup - /// process. This _does not_ need to be the original content - /// source. - source: Vc>, + /// [`ContentSource`]s from which to restart the lookup process. This _does not_ need to be + /// the original content source. + source: ResolvedVc>, /// The new path and query used to lookup content. This _does not_ need /// to be the original path or query. path_and_query: RcStr, }, Sources { - /// [GetContentSourceContent]s from which to restart the lookup - /// process. This _does not_ need to be the original content - /// source. - sources: Vc, + /// [`GetContentSourceContent`]s from which to restart the lookup process. This _does not_ + /// need to be the original content source. + sources: ResolvedVc, }, } /// A rewrite returned from a [ContentSource]. This tells the dev server to /// update its parsed url, path, and queries with this new information. -#[turbo_tasks::value(shared, local)] +#[turbo_tasks::value(shared)] #[derive(Debug)] pub struct Rewrite { pub ty: RewriteType, @@ -531,7 +529,7 @@ impl RewriteBuilder { } pub fn new_source_with_path_and_query( - source: Vc>, + source: ResolvedVc>, path_and_query: RcStr, ) -> Self { Self { @@ -546,7 +544,7 @@ impl RewriteBuilder { } } - pub fn new_sources(sources: Vc) -> Self { + pub fn new_sources(sources: ResolvedVc) -> Self { Self { rewrite: Rewrite { ty: RewriteType::Sources { sources }, diff --git a/turbopack/crates/turbopack-dev-server/src/source/resolve.rs b/turbopack/crates/turbopack-dev-server/src/source/resolve.rs index 69e43b91c24a6..9024812922b09 100644 --- a/turbopack/crates/turbopack-dev-server/src/source/resolve.rs +++ b/turbopack/crates/turbopack-dev-server/src/source/resolve.rs @@ -22,7 +22,7 @@ use super::{ /// The result of [`resolve_source_request`]. Similar to a /// `ContentSourceContent`, but without the `Rewrite` variant as this is taken /// care in the function. -#[turbo_tasks::value(serialization = "none", local)] +#[turbo_tasks::value(serialization = "none")] pub enum ResolveSourceRequestResult { NotFound, Static(ResolvedVc, ResolvedVc), @@ -102,7 +102,7 @@ pub async fn resolve_source_request( RewriteType::Sources { sources: new_sources, } => { - sources = *new_sources; + sources = **new_sources; continue 'sources; } } diff --git a/turbopack/crates/turbopack-dev-server/src/source/wrapping_source.rs b/turbopack/crates/turbopack-dev-server/src/source/wrapping_source.rs index 19e128a86ce40..da397cc7dc663 100644 --- a/turbopack/crates/turbopack-dev-server/src/source/wrapping_source.rs +++ b/turbopack/crates/turbopack-dev-server/src/source/wrapping_source.rs @@ -63,7 +63,7 @@ impl GetContentSourceContent for WrappedGetContentSourceContent { "Rewrites for WrappedGetContentSourceContent are not implemented yet" ), RewriteType::Sources { sources } => RewriteType::Sources { - sources: Vc::cell( + sources: ResolvedVc::cell( sources .await? .iter() From 07e10789e12939bad34c46ae6dfb1cc5598511cd Mon Sep 17 00:00:00 2001 From: Benjamin Woodruff Date: Mon, 13 Jan 2025 10:03:07 -0800 Subject: [PATCH 10/65] refactor(turbopack-ecmascript): Use ResolvedVc in CodeGen type (#74709) --- .../turbopack-ecmascript/src/code_gen.rs | 27 ++++++++++++-- .../src/references/mod.rs | 37 ++++++++++--------- 2 files changed, 42 insertions(+), 22 deletions(-) diff --git a/turbopack/crates/turbopack-ecmascript/src/code_gen.rs b/turbopack/crates/turbopack-ecmascript/src/code_gen.rs index d23fa4304a9fe..c14aa873fa804 100644 --- a/turbopack/crates/turbopack-ecmascript/src/code_gen.rs +++ b/turbopack/crates/turbopack-ecmascript/src/code_gen.rs @@ -1,10 +1,11 @@ +use anyhow::Result; use serde::{Deserialize, Serialize}; use swc_core::ecma::{ ast::Stmt, visit::{AstParentKind, VisitMut}, }; use turbo_rcstr::RcStr; -use turbo_tasks::{debug::ValueDebugFormat, trace::TraceRawVcs, ResolvedVc, Vc}; +use turbo_tasks::{debug::ValueDebugFormat, trace::TraceRawVcs, NonLocalValue, ResolvedVc, Vc}; use turbopack_core::chunk::{AsyncModuleInfo, ChunkingContext}; /// impl of code generation inferred from a ModuleReference. @@ -106,13 +107,31 @@ pub trait CodeGenerateableWithAsyncModuleInfo { ) -> Vc; } -#[derive(Clone, Copy, PartialEq, Eq, Serialize, Deserialize, TraceRawVcs, ValueDebugFormat)] -pub enum CodeGen { +pub enum UnresolvedCodeGen { CodeGenerateable(Vc>), + CodeGenerateableWithAsyncModuleInfo(Vc>), +} + +impl UnresolvedCodeGen { + pub async fn to_resolved(&self) -> Result { + Ok(match self { + Self::CodeGenerateable(vc) => CodeGen::CodeGenerateable(vc.to_resolved().await?), + Self::CodeGenerateableWithAsyncModuleInfo(vc) => { + CodeGen::CodeGenerateableWithAsyncModuleInfo(vc.to_resolved().await?) + } + }) + } +} + +#[derive( + Clone, Copy, PartialEq, Eq, Serialize, Deserialize, TraceRawVcs, ValueDebugFormat, NonLocalValue, +)] +pub enum CodeGen { + CodeGenerateable(ResolvedVc>), CodeGenerateableWithAsyncModuleInfo(ResolvedVc>), } -#[turbo_tasks::value(transparent, local)] +#[turbo_tasks::value(transparent)] pub struct CodeGenerateables(Vec); pub fn path_to( diff --git a/turbopack/crates/turbopack-ecmascript/src/references/mod.rs b/turbopack/crates/turbopack-ecmascript/src/references/mod.rs index 68b6b07acbea7..f466501096664 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/mod.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/mod.rs @@ -126,7 +126,9 @@ use crate::{ ConstantNumber, ConstantString, JsValueUrlKind, RequireContextValue, }, chunk::EcmascriptExports, - code_gen::{CodeGen, CodeGenerateable, CodeGenerateableWithAsyncModuleInfo, CodeGenerateables}, + code_gen::{ + CodeGenerateable, CodeGenerateableWithAsyncModuleInfo, CodeGenerateables, UnresolvedCodeGen, + }, magic_identifier, parse::parse, references::{ @@ -167,7 +169,9 @@ pub struct AnalyzeEcmascriptModuleResultBuilder { local_references: FxIndexSet>>, reexport_references: FxIndexSet>>, evaluation_references: FxIndexSet>>, - code_gens: Vec, + // Many of these `code_gens` are accumulated inside of a synchronous SWC visitor, so we don't + // resolve them until `build()`. + code_gens: Vec, exports: EcmascriptExports, async_module: ResolvedVc, successful: bool, @@ -235,18 +239,18 @@ impl AnalyzeEcmascriptModuleResultBuilder { C: Upcast>, { self.code_gens - .push(CodeGen::CodeGenerateable(Vc::upcast(code_gen))); + .push(UnresolvedCodeGen::CodeGenerateable(Vc::upcast(code_gen))); } /// Adds a codegen to the analysis result. #[allow(dead_code)] - pub fn add_code_gen_with_availability_info(&mut self, code_gen: ResolvedVc) + pub fn add_code_gen_with_availability_info(&mut self, code_gen: Vc) where C: Upcast>, { self.code_gens - .push(CodeGen::CodeGenerateableWithAsyncModuleInfo( - ResolvedVc::upcast(code_gen), + .push(UnresolvedCodeGen::CodeGenerateableWithAsyncModuleInfo( + Vc::upcast(code_gen), )); } @@ -274,8 +278,7 @@ impl AnalyzeEcmascriptModuleResultBuilder { self.successful = successful; } - /// Builds the final analysis result. Resolves internal Vcs for performance - /// in using them. + /// Builds the final analysis result. Resolves internal Vcs. pub async fn build( mut self, track_reexport_references: bool, @@ -301,14 +304,6 @@ impl AnalyzeEcmascriptModuleResultBuilder { .into_iter() .flatten() .collect(); - for c in self.code_gens.iter_mut() { - match c { - CodeGen::CodeGenerateable(c) => { - *c = c.resolve().await?; - } - CodeGen::CodeGenerateableWithAsyncModuleInfo(..) => {} - } - } let source_map = if let Some(source_map) = self.source_map { source_map @@ -321,7 +316,13 @@ impl AnalyzeEcmascriptModuleResultBuilder { local_references: ResolvedVc::cell(local_references), reexport_references: ResolvedVc::cell(reexport_references), evaluation_references: ResolvedVc::cell(evaluation_references), - code_generation: ResolvedVc::cell(self.code_gens), + code_generation: ResolvedVc::cell( + self.code_gens + .iter() + .map(UnresolvedCodeGen::to_resolved) + .try_join() + .await?, + ), exports: self.exports.resolved_cell(), async_module: self.async_module, successful: self.successful, @@ -2976,7 +2977,6 @@ impl VisitAstPath for ModuleReferencesVisitor<'_> { export: &'ast NamedExport, ast_path: &mut AstNodePath>, ) { - let path = Vc::cell(as_parent_path(ast_path)); // We create mutable exports for fake ESMs generated by module splitting let is_fake_esm = export .with @@ -3032,6 +3032,7 @@ impl VisitAstPath for ModuleReferencesVisitor<'_> { } } + let path = Vc::cell(as_parent_path(ast_path)); self.analysis.add_code_gen(EsmModuleItem::new(path)); export.visit_children_with_ast_path(self, ast_path); } From 63a5f9e87646949343b9c52c1eb1dac18f1ae3e3 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Mon, 13 Jan 2025 19:52:30 +0100 Subject: [PATCH 11/65] perf(lint): cache the returned regex result (#74827) --- .../src/rules/no-html-link-for-pages.ts | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/eslint-plugin-next/src/rules/no-html-link-for-pages.ts b/packages/eslint-plugin-next/src/rules/no-html-link-for-pages.ts index 4cbaa77b16839..a75cf49b807e7 100644 --- a/packages/eslint-plugin-next/src/rules/no-html-link-for-pages.ts +++ b/packages/eslint-plugin-next/src/rules/no-html-link-for-pages.ts @@ -21,6 +21,20 @@ const pagesDirWarning = execOnce((pagesDirs) => { // Prevent multiple blocking IO requests that have already been calculated. const fsExistsSyncCache = {} +const memoize = (fn: (...args: any[]) => T) => { + const cache = {} + return (...args: any[]): T => { + const key = JSON.stringify(args) + if (cache[key] === undefined) { + cache[key] = fn(...args) + } + return cache[key] + } +} + +const cachedGetUrlFromPagesDirectories = memoize(getUrlFromPagesDirectories) +const cachedGetUrlFromAppDirectory = memoize(getUrlFromAppDirectory) + const url = 'https://nextjs.org/docs/messages/no-html-link-for-pages' export = defineRule({ @@ -93,9 +107,9 @@ export = defineRule({ return {} } - const pageUrls = getUrlFromPagesDirectories('/', foundPagesDirs) - const appDirUrls = getUrlFromAppDirectory('/', foundAppDirs) - const allUrls = [...pageUrls, ...appDirUrls] + const pageUrls = cachedGetUrlFromPagesDirectories('/', foundPagesDirs) + const appDirUrls = cachedGetUrlFromAppDirectory('/', foundAppDirs) + const allUrlRegex = [...pageUrls, ...appDirUrls] return { JSXOpeningElement(node) { @@ -138,7 +152,7 @@ export = defineRule({ return } - allUrls.forEach((foundUrl) => { + allUrlRegex.forEach((foundUrl) => { if (foundUrl.test(normalizeURL(hrefPath))) { context.report({ node, From 0098b4f829529d13a7dbd216d77eb2bac87100db Mon Sep 17 00:00:00 2001 From: Vercel Release Bot <88769842+vercel-release-bot@users.noreply.github.com> Date: Mon, 13 Jan 2025 19:54:10 +0100 Subject: [PATCH 12/65] Upgrade React from `540efebc-20250112` to `cabd8a0e-20250113` (#74828) --- package.json | 30 +- .../cjs/react-dom-client.development.js | 742 ++++++++++-------- .../cjs/react-dom-client.production.js | 432 ++++++---- .../cjs/react-dom-profiling.development.js | 742 ++++++++++-------- .../cjs/react-dom-profiling.profiling.js | 432 ++++++---- ...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 | 742 ++++++++++-------- .../react-dom-unstable_testing.production.js | 432 ++++++---- .../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 | 10 +- .../cjs/react-dom-client.production.js | 10 +- .../cjs/react-dom-profiling.development.js | 10 +- .../cjs/react-dom-profiling.profiling.js | 10 +- ...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 | 605 +++++++------- 62 files changed, 2533 insertions(+), 1840 deletions(-) diff --git a/package.json b/package.json index e092ef46bb197..845c15941ef0e 100644 --- a/package.json +++ b/package.json @@ -213,16 +213,16 @@ "pretty-ms": "7.0.0", "random-seed": "0.3.0", "react": "19.0.0", - "react-builtin": "npm:react@19.1.0-canary-540efebc-20250112", + "react-builtin": "npm:react@19.1.0-canary-cabd8a0e-20250113", "react-dom": "19.0.0", - "react-dom-builtin": "npm:react-dom@19.1.0-canary-540efebc-20250112", - "react-dom-experimental-builtin": "npm:react-dom@0.0.0-experimental-540efebc-20250112", - "react-experimental-builtin": "npm:react@0.0.0-experimental-540efebc-20250112", - "react-is-builtin": "npm:react-is@19.1.0-canary-540efebc-20250112", - "react-server-dom-turbopack": "19.1.0-canary-540efebc-20250112", - "react-server-dom-turbopack-experimental": "npm:react-server-dom-turbopack@0.0.0-experimental-540efebc-20250112", - "react-server-dom-webpack": "19.1.0-canary-540efebc-20250112", - "react-server-dom-webpack-experimental": "npm:react-server-dom-webpack@0.0.0-experimental-540efebc-20250112", + "react-dom-builtin": "npm:react-dom@19.1.0-canary-cabd8a0e-20250113", + "react-dom-experimental-builtin": "npm:react-dom@0.0.0-experimental-cabd8a0e-20250113", + "react-experimental-builtin": "npm:react@0.0.0-experimental-cabd8a0e-20250113", + "react-is-builtin": "npm:react-is@19.1.0-canary-cabd8a0e-20250113", + "react-server-dom-turbopack": "19.1.0-canary-cabd8a0e-20250113", + "react-server-dom-turbopack-experimental": "npm:react-server-dom-turbopack@0.0.0-experimental-cabd8a0e-20250113", + "react-server-dom-webpack": "19.1.0-canary-cabd8a0e-20250113", + "react-server-dom-webpack-experimental": "npm:react-server-dom-webpack@0.0.0-experimental-cabd8a0e-20250113", "react-ssr-prepass": "1.0.8", "react-virtualized": "9.22.3", "relay-compiler": "13.0.2", @@ -232,8 +232,8 @@ "resolve-from": "5.0.0", "sass": "1.54.0", "satori": "0.10.9", - "scheduler-builtin": "npm:scheduler@0.26.0-canary-540efebc-20250112", - "scheduler-experimental-builtin": "npm:scheduler@0.0.0-experimental-540efebc-20250112", + "scheduler-builtin": "npm:scheduler@0.26.0-canary-cabd8a0e-20250113", + "scheduler-experimental-builtin": "npm:scheduler@0.0.0-experimental-cabd8a0e-20250113", "seedrandom": "3.0.5", "semver": "7.3.7", "shell-quote": "1.7.3", @@ -274,10 +274,10 @@ "@types/react": "19.0.0", "@types/react-dom": "19.0.0", "jest-snapshot": "30.0.0-alpha.6", - "react": "19.1.0-canary-540efebc-20250112", - "react-dom": "19.1.0-canary-540efebc-20250112", - "react-is": "19.1.0-canary-540efebc-20250112", - "scheduler": "0.26.0-canary-540efebc-20250112" + "react": "19.1.0-canary-cabd8a0e-20250113", + "react-dom": "19.1.0-canary-cabd8a0e-20250113", + "react-is": "19.1.0-canary-cabd8a0e-20250113", + "scheduler": "0.26.0-canary-cabd8a0e-20250113" }, "patchedDependencies": { "webpack-sources@3.2.3": "patches/webpack-sources@3.2.3.patch", 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 1d4057e147ccb..c99b7b1485c9b 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 @@ -9325,33 +9325,33 @@ return current; } function updateSuspenseComponent(current, workInProgress, renderLanes) { - var JSCompiler_object_inline_componentStack_2545; - var JSCompiler_object_inline_stack_2544 = workInProgress.pendingProps; + var JSCompiler_object_inline_componentStack_2552; + var JSCompiler_object_inline_stack_2551 = workInProgress.pendingProps; shouldSuspendImpl(workInProgress) && (workInProgress.flags |= 128); - var JSCompiler_object_inline_message_2542 = !1; + var JSCompiler_object_inline_message_2549 = !1; var didSuspend = 0 !== (workInProgress.flags & 128); - (JSCompiler_object_inline_componentStack_2545 = didSuspend) || - (JSCompiler_object_inline_componentStack_2545 = + (JSCompiler_object_inline_componentStack_2552 = didSuspend) || + (JSCompiler_object_inline_componentStack_2552 = null !== current && null === current.memoizedState ? !1 : 0 !== (suspenseStackCursor.current & ForceSuspenseFallback)); - JSCompiler_object_inline_componentStack_2545 && - ((JSCompiler_object_inline_message_2542 = !0), + JSCompiler_object_inline_componentStack_2552 && + ((JSCompiler_object_inline_message_2549 = !0), (workInProgress.flags &= -129)); - JSCompiler_object_inline_componentStack_2545 = + JSCompiler_object_inline_componentStack_2552 = 0 !== (workInProgress.flags & 32); workInProgress.flags &= -33; if (null === current) { if (isHydrating) { - JSCompiler_object_inline_message_2542 + JSCompiler_object_inline_message_2549 ? pushPrimaryTreeSuspenseHandler(workInProgress) : reuseSuspenseHandlerOnStack(workInProgress); if (isHydrating) { - var JSCompiler_object_inline_digest_2543 = nextHydratableInstance; + var JSCompiler_object_inline_digest_2550 = nextHydratableInstance; var JSCompiler_temp; - if (!(JSCompiler_temp = !JSCompiler_object_inline_digest_2543)) { + if (!(JSCompiler_temp = !JSCompiler_object_inline_digest_2550)) { c: { - var instance = JSCompiler_object_inline_digest_2543; + var instance = JSCompiler_object_inline_digest_2550; for ( JSCompiler_temp = rootOrSingletonContext; 8 !== instance.nodeType; @@ -9393,87 +9393,87 @@ JSCompiler_temp && (warnNonHydratedInstance( workInProgress, - JSCompiler_object_inline_digest_2543 + JSCompiler_object_inline_digest_2550 ), throwOnHydrationMismatch(workInProgress)); } - JSCompiler_object_inline_digest_2543 = workInProgress.memoizedState; + JSCompiler_object_inline_digest_2550 = workInProgress.memoizedState; if ( - null !== JSCompiler_object_inline_digest_2543 && - ((JSCompiler_object_inline_digest_2543 = - JSCompiler_object_inline_digest_2543.dehydrated), - null !== JSCompiler_object_inline_digest_2543) + null !== JSCompiler_object_inline_digest_2550 && + ((JSCompiler_object_inline_digest_2550 = + JSCompiler_object_inline_digest_2550.dehydrated), + null !== JSCompiler_object_inline_digest_2550) ) return ( - isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2543) + isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2550) ? (workInProgress.lanes = 32) : (workInProgress.lanes = 536870912), null ); popSuspenseHandler(workInProgress); } - JSCompiler_object_inline_digest_2543 = - JSCompiler_object_inline_stack_2544.children; - JSCompiler_temp = JSCompiler_object_inline_stack_2544.fallback; - if (JSCompiler_object_inline_message_2542) + JSCompiler_object_inline_digest_2550 = + JSCompiler_object_inline_stack_2551.children; + JSCompiler_temp = JSCompiler_object_inline_stack_2551.fallback; + if (JSCompiler_object_inline_message_2549) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_stack_2544 = + (JSCompiler_object_inline_stack_2551 = mountSuspenseFallbackChildren( workInProgress, - JSCompiler_object_inline_digest_2543, + JSCompiler_object_inline_digest_2550, JSCompiler_temp, renderLanes )), - (JSCompiler_object_inline_message_2542 = workInProgress.child), - (JSCompiler_object_inline_message_2542.memoizedState = + (JSCompiler_object_inline_message_2549 = workInProgress.child), + (JSCompiler_object_inline_message_2549.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_message_2542.childLanes = + (JSCompiler_object_inline_message_2549.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2545, + JSCompiler_object_inline_componentStack_2552, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - JSCompiler_object_inline_stack_2544 + JSCompiler_object_inline_stack_2551 ); if ( "number" === - typeof JSCompiler_object_inline_stack_2544.unstable_expectedLoadTime + typeof JSCompiler_object_inline_stack_2551.unstable_expectedLoadTime ) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_stack_2544 = + (JSCompiler_object_inline_stack_2551 = mountSuspenseFallbackChildren( workInProgress, - JSCompiler_object_inline_digest_2543, + JSCompiler_object_inline_digest_2550, JSCompiler_temp, renderLanes )), - (JSCompiler_object_inline_message_2542 = workInProgress.child), - (JSCompiler_object_inline_message_2542.memoizedState = + (JSCompiler_object_inline_message_2549 = workInProgress.child), + (JSCompiler_object_inline_message_2549.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_message_2542.childLanes = + (JSCompiler_object_inline_message_2549.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2545, + JSCompiler_object_inline_componentStack_2552, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), (workInProgress.lanes = 4194304), - JSCompiler_object_inline_stack_2544 + JSCompiler_object_inline_stack_2551 ); pushPrimaryTreeSuspenseHandler(workInProgress); return mountSuspensePrimaryChildren( workInProgress, - JSCompiler_object_inline_digest_2543 + JSCompiler_object_inline_digest_2550 ); } var prevState = current.memoizedState; if ( null !== prevState && - ((JSCompiler_object_inline_digest_2543 = prevState.dehydrated), - null !== JSCompiler_object_inline_digest_2543) + ((JSCompiler_object_inline_digest_2550 = prevState.dehydrated), + null !== JSCompiler_object_inline_digest_2550) ) { if (didSuspend) workInProgress.flags & 256 @@ -9490,94 +9490,94 @@ (workInProgress.flags |= 128), (workInProgress = null)) : (reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_message_2542 = - JSCompiler_object_inline_stack_2544.fallback), - (JSCompiler_object_inline_digest_2543 = workInProgress.mode), - (JSCompiler_object_inline_stack_2544 = + (JSCompiler_object_inline_message_2549 = + JSCompiler_object_inline_stack_2551.fallback), + (JSCompiler_object_inline_digest_2550 = workInProgress.mode), + (JSCompiler_object_inline_stack_2551 = mountWorkInProgressOffscreenFiber( { mode: "visible", - children: JSCompiler_object_inline_stack_2544.children + children: JSCompiler_object_inline_stack_2551.children }, - JSCompiler_object_inline_digest_2543 + JSCompiler_object_inline_digest_2550 )), - (JSCompiler_object_inline_message_2542 = + (JSCompiler_object_inline_message_2549 = createFiberFromFragment( - JSCompiler_object_inline_message_2542, - JSCompiler_object_inline_digest_2543, + JSCompiler_object_inline_message_2549, + JSCompiler_object_inline_digest_2550, renderLanes, null )), - (JSCompiler_object_inline_message_2542.flags |= 2), - (JSCompiler_object_inline_stack_2544.return = workInProgress), - (JSCompiler_object_inline_message_2542.return = workInProgress), - (JSCompiler_object_inline_stack_2544.sibling = - JSCompiler_object_inline_message_2542), - (workInProgress.child = JSCompiler_object_inline_stack_2544), + (JSCompiler_object_inline_message_2549.flags |= 2), + (JSCompiler_object_inline_stack_2551.return = workInProgress), + (JSCompiler_object_inline_message_2549.return = workInProgress), + (JSCompiler_object_inline_stack_2551.sibling = + JSCompiler_object_inline_message_2549), + (workInProgress.child = JSCompiler_object_inline_stack_2551), reconcileChildFibers( workInProgress, current.child, null, renderLanes ), - (JSCompiler_object_inline_stack_2544 = workInProgress.child), - (JSCompiler_object_inline_stack_2544.memoizedState = + (JSCompiler_object_inline_stack_2551 = workInProgress.child), + (JSCompiler_object_inline_stack_2551.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_stack_2544.childLanes = + (JSCompiler_object_inline_stack_2551.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2545, + JSCompiler_object_inline_componentStack_2552, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - (workInProgress = JSCompiler_object_inline_message_2542)); + (workInProgress = JSCompiler_object_inline_message_2549)); else if ( (pushPrimaryTreeSuspenseHandler(workInProgress), isHydrating && console.error( "We should not be hydrating here. This is a bug in React. Please file a bug." ), - isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2543)) + isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2550)) ) { - JSCompiler_object_inline_componentStack_2545 = - JSCompiler_object_inline_digest_2543.nextSibling && - JSCompiler_object_inline_digest_2543.nextSibling.dataset; - if (JSCompiler_object_inline_componentStack_2545) { - JSCompiler_temp = JSCompiler_object_inline_componentStack_2545.dgst; - var message = JSCompiler_object_inline_componentStack_2545.msg; - instance = JSCompiler_object_inline_componentStack_2545.stck; + JSCompiler_object_inline_componentStack_2552 = + JSCompiler_object_inline_digest_2550.nextSibling && + JSCompiler_object_inline_digest_2550.nextSibling.dataset; + if (JSCompiler_object_inline_componentStack_2552) { + JSCompiler_temp = JSCompiler_object_inline_componentStack_2552.dgst; + var message = JSCompiler_object_inline_componentStack_2552.msg; + instance = JSCompiler_object_inline_componentStack_2552.stck; var componentStack = - JSCompiler_object_inline_componentStack_2545.cstck; + JSCompiler_object_inline_componentStack_2552.cstck; } - JSCompiler_object_inline_message_2542 = message; - JSCompiler_object_inline_digest_2543 = JSCompiler_temp; - JSCompiler_object_inline_stack_2544 = instance; - JSCompiler_temp = JSCompiler_object_inline_componentStack_2545 = + JSCompiler_object_inline_message_2549 = message; + JSCompiler_object_inline_digest_2550 = JSCompiler_temp; + JSCompiler_object_inline_stack_2551 = instance; + JSCompiler_temp = JSCompiler_object_inline_componentStack_2552 = componentStack; - "POSTPONE" !== JSCompiler_object_inline_digest_2543 && - ((JSCompiler_object_inline_componentStack_2545 = - JSCompiler_object_inline_message_2542 - ? Error(JSCompiler_object_inline_message_2542) + "POSTPONE" !== JSCompiler_object_inline_digest_2550 && + ((JSCompiler_object_inline_componentStack_2552 = + JSCompiler_object_inline_message_2549 + ? Error(JSCompiler_object_inline_message_2549) : Error( "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." )), - (JSCompiler_object_inline_componentStack_2545.stack = - JSCompiler_object_inline_stack_2544 || ""), - (JSCompiler_object_inline_componentStack_2545.digest = - JSCompiler_object_inline_digest_2543), - (JSCompiler_object_inline_stack_2544 = + (JSCompiler_object_inline_componentStack_2552.stack = + JSCompiler_object_inline_stack_2551 || ""), + (JSCompiler_object_inline_componentStack_2552.digest = + JSCompiler_object_inline_digest_2550), + (JSCompiler_object_inline_stack_2551 = void 0 === JSCompiler_temp ? null : JSCompiler_temp), - (JSCompiler_object_inline_message_2542 = { - value: JSCompiler_object_inline_componentStack_2545, + (JSCompiler_object_inline_message_2549 = { + value: JSCompiler_object_inline_componentStack_2552, source: null, - stack: JSCompiler_object_inline_stack_2544 + stack: JSCompiler_object_inline_stack_2551 }), - "string" === typeof JSCompiler_object_inline_stack_2544 && + "string" === typeof JSCompiler_object_inline_stack_2551 && CapturedStacks.set( - JSCompiler_object_inline_componentStack_2545, - JSCompiler_object_inline_message_2542 + JSCompiler_object_inline_componentStack_2552, + JSCompiler_object_inline_message_2549 ), - queueHydrationError(JSCompiler_object_inline_message_2542)); + queueHydrationError(JSCompiler_object_inline_message_2549)); workInProgress = retrySuspenseComponentWithoutHydrating( current, workInProgress, @@ -9591,44 +9591,44 @@ renderLanes, !1 ), - (JSCompiler_object_inline_componentStack_2545 = + (JSCompiler_object_inline_componentStack_2552 = 0 !== (renderLanes & current.childLanes)), - didReceiveUpdate || JSCompiler_object_inline_componentStack_2545) + didReceiveUpdate || JSCompiler_object_inline_componentStack_2552) ) { - JSCompiler_object_inline_componentStack_2545 = workInProgressRoot; + JSCompiler_object_inline_componentStack_2552 = workInProgressRoot; if ( - null !== JSCompiler_object_inline_componentStack_2545 && - ((JSCompiler_object_inline_stack_2544 = renderLanes & -renderLanes), - (JSCompiler_object_inline_stack_2544 = - 0 !== (JSCompiler_object_inline_stack_2544 & 42) + null !== JSCompiler_object_inline_componentStack_2552 && + ((JSCompiler_object_inline_stack_2551 = renderLanes & -renderLanes), + (JSCompiler_object_inline_stack_2551 = + 0 !== (JSCompiler_object_inline_stack_2551 & 42) ? 1 : getBumpedLaneForHydrationByLane( - JSCompiler_object_inline_stack_2544 + JSCompiler_object_inline_stack_2551 )), - (JSCompiler_object_inline_stack_2544 = + (JSCompiler_object_inline_stack_2551 = 0 !== - (JSCompiler_object_inline_stack_2544 & - (JSCompiler_object_inline_componentStack_2545.suspendedLanes | + (JSCompiler_object_inline_stack_2551 & + (JSCompiler_object_inline_componentStack_2552.suspendedLanes | renderLanes)) ? 0 - : JSCompiler_object_inline_stack_2544), - 0 !== JSCompiler_object_inline_stack_2544 && - JSCompiler_object_inline_stack_2544 !== prevState.retryLane) + : JSCompiler_object_inline_stack_2551), + 0 !== JSCompiler_object_inline_stack_2551 && + JSCompiler_object_inline_stack_2551 !== prevState.retryLane) ) throw ( - ((prevState.retryLane = JSCompiler_object_inline_stack_2544), + ((prevState.retryLane = JSCompiler_object_inline_stack_2551), enqueueConcurrentRenderForLane( current, - JSCompiler_object_inline_stack_2544 + JSCompiler_object_inline_stack_2551 ), scheduleUpdateOnFiber( - JSCompiler_object_inline_componentStack_2545, + JSCompiler_object_inline_componentStack_2552, current, - JSCompiler_object_inline_stack_2544 + JSCompiler_object_inline_stack_2551 ), SelectiveHydrationException) ); - JSCompiler_object_inline_digest_2543.data === + JSCompiler_object_inline_digest_2550.data === SUSPENSE_PENDING_START_DATA || renderDidSuspendDelayIfPossible(); workInProgress = retrySuspenseComponentWithoutHydrating( current, @@ -9636,14 +9636,14 @@ renderLanes ); } else - JSCompiler_object_inline_digest_2543.data === + JSCompiler_object_inline_digest_2550.data === SUSPENSE_PENDING_START_DATA ? ((workInProgress.flags |= 192), (workInProgress.child = current.child), (workInProgress = null)) : ((current = prevState.treeContext), (nextHydratableInstance = getNextHydratable( - JSCompiler_object_inline_digest_2543.nextSibling + JSCompiler_object_inline_digest_2550.nextSibling )), (hydrationParentFiber = workInProgress), (isHydrating = !0), @@ -9661,54 +9661,54 @@ (treeContextProvider = workInProgress)), (workInProgress = mountSuspensePrimaryChildren( workInProgress, - JSCompiler_object_inline_stack_2544.children + JSCompiler_object_inline_stack_2551.children )), (workInProgress.flags |= 4096)); return workInProgress; } - if (JSCompiler_object_inline_message_2542) + if (JSCompiler_object_inline_message_2549) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_message_2542 = - JSCompiler_object_inline_stack_2544.fallback), - (JSCompiler_object_inline_digest_2543 = workInProgress.mode), + (JSCompiler_object_inline_message_2549 = + JSCompiler_object_inline_stack_2551.fallback), + (JSCompiler_object_inline_digest_2550 = workInProgress.mode), (JSCompiler_temp = current.child), (instance = JSCompiler_temp.sibling), - (JSCompiler_object_inline_stack_2544 = createWorkInProgress( + (JSCompiler_object_inline_stack_2551 = createWorkInProgress( JSCompiler_temp, { mode: "hidden", - children: JSCompiler_object_inline_stack_2544.children + children: JSCompiler_object_inline_stack_2551.children } )), - (JSCompiler_object_inline_stack_2544.subtreeFlags = + (JSCompiler_object_inline_stack_2551.subtreeFlags = JSCompiler_temp.subtreeFlags & 65011712), null !== instance - ? (JSCompiler_object_inline_message_2542 = createWorkInProgress( + ? (JSCompiler_object_inline_message_2549 = createWorkInProgress( instance, - JSCompiler_object_inline_message_2542 + JSCompiler_object_inline_message_2549 )) - : ((JSCompiler_object_inline_message_2542 = createFiberFromFragment( - JSCompiler_object_inline_message_2542, - JSCompiler_object_inline_digest_2543, + : ((JSCompiler_object_inline_message_2549 = createFiberFromFragment( + JSCompiler_object_inline_message_2549, + JSCompiler_object_inline_digest_2550, renderLanes, null )), - (JSCompiler_object_inline_message_2542.flags |= 2)), - (JSCompiler_object_inline_message_2542.return = workInProgress), - (JSCompiler_object_inline_stack_2544.return = workInProgress), - (JSCompiler_object_inline_stack_2544.sibling = - JSCompiler_object_inline_message_2542), - (workInProgress.child = JSCompiler_object_inline_stack_2544), - (JSCompiler_object_inline_stack_2544 = - JSCompiler_object_inline_message_2542), - (JSCompiler_object_inline_message_2542 = workInProgress.child), - (JSCompiler_object_inline_digest_2543 = current.child.memoizedState), - null === JSCompiler_object_inline_digest_2543 - ? (JSCompiler_object_inline_digest_2543 = + (JSCompiler_object_inline_message_2549.flags |= 2)), + (JSCompiler_object_inline_message_2549.return = workInProgress), + (JSCompiler_object_inline_stack_2551.return = workInProgress), + (JSCompiler_object_inline_stack_2551.sibling = + JSCompiler_object_inline_message_2549), + (workInProgress.child = JSCompiler_object_inline_stack_2551), + (JSCompiler_object_inline_stack_2551 = + JSCompiler_object_inline_message_2549), + (JSCompiler_object_inline_message_2549 = workInProgress.child), + (JSCompiler_object_inline_digest_2550 = current.child.memoizedState), + null === JSCompiler_object_inline_digest_2550 + ? (JSCompiler_object_inline_digest_2550 = mountSuspenseOffscreenState(renderLanes)) : ((JSCompiler_temp = - JSCompiler_object_inline_digest_2543.cachePool), + JSCompiler_object_inline_digest_2550.cachePool), null !== JSCompiler_temp ? ((instance = CacheContext._currentValue), (JSCompiler_temp = @@ -9716,38 +9716,38 @@ ? { parent: instance, pool: instance } : JSCompiler_temp)) : (JSCompiler_temp = getSuspendedCache()), - (JSCompiler_object_inline_digest_2543 = { + (JSCompiler_object_inline_digest_2550 = { baseLanes: - JSCompiler_object_inline_digest_2543.baseLanes | renderLanes, + JSCompiler_object_inline_digest_2550.baseLanes | renderLanes, cachePool: JSCompiler_temp })), - (JSCompiler_object_inline_message_2542.memoizedState = - JSCompiler_object_inline_digest_2543), - (JSCompiler_object_inline_message_2542.childLanes = + (JSCompiler_object_inline_message_2549.memoizedState = + JSCompiler_object_inline_digest_2550), + (JSCompiler_object_inline_message_2549.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2545, + JSCompiler_object_inline_componentStack_2552, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - JSCompiler_object_inline_stack_2544 + JSCompiler_object_inline_stack_2551 ); pushPrimaryTreeSuspenseHandler(workInProgress); renderLanes = current.child; current = renderLanes.sibling; renderLanes = createWorkInProgress(renderLanes, { mode: "visible", - children: JSCompiler_object_inline_stack_2544.children + children: JSCompiler_object_inline_stack_2551.children }); renderLanes.return = workInProgress; renderLanes.sibling = null; null !== current && - ((JSCompiler_object_inline_componentStack_2545 = + ((JSCompiler_object_inline_componentStack_2552 = workInProgress.deletions), - null === JSCompiler_object_inline_componentStack_2545 + null === JSCompiler_object_inline_componentStack_2552 ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16)) - : JSCompiler_object_inline_componentStack_2545.push(current)); + : JSCompiler_object_inline_componentStack_2552.push(current)); workInProgress.child = renderLanes; workInProgress.memoizedState = null; return renderLanes; @@ -11537,17 +11537,19 @@ case 0: if ( 0 !== (flags & 4) && - ((finishedWork = finishedWork.updateQueue), - (finishedWork = - null !== finishedWork ? finishedWork.events : null), - null !== finishedWork) + ((isViewTransitionEligible = finishedWork.updateQueue), + (isViewTransitionEligible = + null !== isViewTransitionEligible + ? isViewTransitionEligible.events + : null), + null !== isViewTransitionEligible) ) for ( - isViewTransitionEligible = 0; - isViewTransitionEligible < finishedWork.length; - isViewTransitionEligible++ + finishedWork = 0; + finishedWork < isViewTransitionEligible.length; + finishedWork++ ) - (current = finishedWork[isViewTransitionEligible]), + (current = isViewTransitionEligible[finishedWork]), (current.ref.impl = current.nextImpl); break; case 11: @@ -11561,20 +11563,21 @@ case 3: if (0 !== (flags & 1024)) if ( - ((finishedWork = finishedWork.stateNode.containerInfo), - (isViewTransitionEligible = finishedWork.nodeType), - 9 === isViewTransitionEligible) + ((isViewTransitionEligible = + finishedWork.stateNode.containerInfo), + (finishedWork = isViewTransitionEligible.nodeType), + 9 === finishedWork) ) - clearContainerSparingly(finishedWork); - else if (1 === isViewTransitionEligible) - switch (finishedWork.nodeName) { + clearContainerSparingly(isViewTransitionEligible); + else if (1 === finishedWork) + switch (isViewTransitionEligible.nodeName) { case "HEAD": case "HTML": case "BODY": - clearContainerSparingly(finishedWork); + clearContainerSparingly(isViewTransitionEligible); break; default: - finishedWork.textContent = ""; + isViewTransitionEligible.textContent = ""; } break; case 5: @@ -11585,23 +11588,41 @@ case 17: break; case 30: - isViewTransitionEligible && + if ( + isViewTransitionEligible && null !== current && - 0 !== (finishedWork.subtreeFlags & 8246) && - ((finishedWork = current), - (isViewTransitionEligible = finishedWork.memoizedProps), - (current = getViewTransitionName( - isViewTransitionEligible, - finishedWork.stateNode - )), - (viewTransitionHostInstanceIdx = 0), - applyViewTransitionToHostInstances( - finishedWork.child, - current, - isViewTransitionEligible.className, - (finishedWork.memoizedState = []), - !0 - )); + 0 !== (finishedWork.subtreeFlags & 8246) + ) + a: { + isViewTransitionEligible = current; + current = finishedWork; + finishedWork = getViewTransitionName( + isViewTransitionEligible.memoizedProps, + isViewTransitionEligible.stateNode + ); + current = current.memoizedProps; + flags = getViewTransitionClassName( + current.className, + current.update + ); + if ( + "none" === flags && + ((flags = getViewTransitionClassName( + current.className, + current.layout + )), + "none" === flags) + ) + break a; + viewTransitionHostInstanceIdx = 0; + applyViewTransitionToHostInstances( + isViewTransitionEligible.child, + finishedWork, + flags, + (isViewTransitionEligible.memoizedState = []), + !0 + ); + } break; default: if (0 !== (flags & 1024)) @@ -11609,10 +11630,10 @@ "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." ); } - finishedWork = fiber.sibling; - if (null !== finishedWork) { - finishedWork.return = fiber.return; - nextEffect = finishedWork; + isViewTransitionEligible = fiber.sibling; + if (null !== isViewTransitionEligible) { + isViewTransitionEligible.return = fiber.return; + nextEffect = isViewTransitionEligible; break; } nextEffect = fiber.return; @@ -11688,34 +11709,44 @@ throw Error( "Found a pair with an auto name. This is a bug in React." ); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - placement.child, - props.name, - props.className, - null, - !1 - ) || restoreViewTransitionOnHostInstances(placement.child, !1); + var name = props.name; + props = getViewTransitionClassName(props.className, props.share); + "none" !== props && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + placement.child, + name, + props, + null, + !1 + ) || restoreViewTransitionOnHostInstances(placement.child, !1)); } placement = placement.sibling; } } function commitEnterViewTransitions(placement) { if (30 === placement.tag) { - var props = placement.memoizedProps, - name = getViewTransitionName(props, placement.stateNode); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - placement.child, - name, - props.className, - null, - !1 - ) - ? (commitAppearingPairViewTransitions(placement), - placement.stateNode.paired || - scheduleViewTransitionEvent(placement, props.onEnter)) - : restoreViewTransitionOnHostInstances(placement.child, !1); + var state = placement.stateNode, + props = placement.memoizedProps, + name = getViewTransitionName(props, state), + className = getViewTransitionClassName( + props.className, + state.paired ? props.share : props.enter + ); + "none" !== className + ? ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + placement.child, + name, + className, + null, + !1 + ) + ? (commitAppearingPairViewTransitions(placement), + state.paired || + scheduleViewTransitionEvent(placement, props.onEnter)) + : restoreViewTransitionOnHostInstances(placement.child, !1)) + : commitAppearingPairViewTransitions(placement); } else if (0 !== (placement.subtreeFlags & 33554432)) for (placement = placement.child; null !== placement; ) commitEnterViewTransitions(placement), @@ -11737,23 +11768,29 @@ name = props.name; if (null != name && "auto" !== name) { var pair = appearingViewTransitions.get(name); - if ( - void 0 !== pair && - ((viewTransitionHostInstanceIdx = 0), - applyViewTransitionToHostInstances( - deletion.child, - name, + if (void 0 !== pair) { + var className = getViewTransitionClassName( props.className, - null, - !1 - ) - ? ((pair.paired = deletion.stateNode), - scheduleViewTransitionEvent(deletion, props.onShare)) - : restoreViewTransitionOnHostInstances(deletion.child, !1), - appearingViewTransitions.delete(name), - 0 === appearingViewTransitions.size) - ) - break; + props.share + ); + "none" !== className && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + deletion.child, + name, + className, + null, + !1 + ) + ? ((pair.paired = deletion.stateNode), + scheduleViewTransitionEvent(deletion, props.onShare)) + : restoreViewTransitionOnHostInstances( + deletion.child, + !1 + )); + appearingViewTransitions.delete(name); + if (0 === appearingViewTransitions.size) break; + } } } commitDeletedPairViewTransitions( @@ -11767,30 +11804,32 @@ function commitExitViewTransitions(deletion, appearingViewTransitions) { if (30 === deletion.tag) { var props = deletion.memoizedProps, - name = getViewTransitionName(props, deletion.stateNode); - viewTransitionHostInstanceIdx = 0; - if ( + name = getViewTransitionName(props, deletion.stateNode), + pair = + null !== appearingViewTransitions + ? appearingViewTransitions.get(name) + : void 0, + className = getViewTransitionClassName( + props.className, + void 0 !== pair ? props.share : props.exit + ); + "none" !== className && + ((viewTransitionHostInstanceIdx = 0), applyViewTransitionToHostInstances( deletion.child, name, - props.className, + className, null, !1 ) - ) - if (null !== appearingViewTransitions) { - var pair = appearingViewTransitions.get(name); - void 0 !== pair + ? void 0 !== pair ? ((pair.paired = deletion.stateNode), appearingViewTransitions.delete(name), scheduleViewTransitionEvent(deletion, props.onShare)) - : scheduleViewTransitionEvent(deletion, props.onExit); - commitDeletedPairViewTransitions( - deletion, - appearingViewTransitions - ); - } else scheduleViewTransitionEvent(deletion, props.onExit); - else restoreViewTransitionOnHostInstances(deletion.child, !1); + : scheduleViewTransitionEvent(deletion, props.onExit) + : restoreViewTransitionOnHostInstances(deletion.child, !1)); + null !== appearingViewTransitions && + commitDeletedPairViewTransitions(deletion, appearingViewTransitions); } else if (0 !== (deletion.subtreeFlags & 33554432)) for (deletion = deletion.child; null !== deletion; ) commitExitViewTransitions(deletion, appearingViewTransitions), @@ -11804,14 +11843,16 @@ if (30 === changedParent.tag) { var props = changedParent.memoizedProps, name = getViewTransitionName(props, changedParent.stateNode); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - changedParent.child, - name, - props.className, - (changedParent.memoizedState = []), - !1 - ); + props = getViewTransitionClassName(props.className, props.layout); + "none" !== props && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + changedParent.child, + name, + props, + (changedParent.memoizedState = []), + !1 + )); } else 0 !== (changedParent.subtreeFlags & 33554432) && commitNestedViewTransitions(changedParent); @@ -11863,10 +11904,42 @@ restoreNestedViewTransitions(changedParent), (changedParent = changedParent.sibling); } + function cancelViewTransitionHostInstances( + currentViewTransition, + child, + stopAtNestedViewTransitions + ) { + for (; null !== child; ) { + if (5 === child.tag) { + var instance = child.stateNode, + oldName = getViewTransitionName( + currentViewTransition.memoizedProps, + currentViewTransition.stateNode + ); + null === viewTransitionCancelableChildren && + (viewTransitionCancelableChildren = []); + viewTransitionCancelableChildren.push( + instance, + oldName, + child.memoizedProps + ); + viewTransitionHostInstanceIdx++; + } else if (22 !== child.tag || null === child.memoizedState) + (30 === child.tag && stopAtNestedViewTransitions) || + cancelViewTransitionHostInstances( + currentViewTransition, + child.child, + stopAtNestedViewTransitions + ); + child = child.sibling; + } + } function measureViewTransitionHostInstances( currentViewTransition, parentViewTransition, child, + name, + className, previousMeasurements, stopAtNestedViewTransitions ) { @@ -11905,20 +11978,15 @@ nextMeasurement && (parentViewTransition.flags |= 32); } else parentViewTransition.flags |= 32; 0 !== (parentViewTransition.flags & 4) && - ((JSCompiler_temp = parentViewTransition.memoizedProps), - (nextMeasurement = getViewTransitionName( - JSCompiler_temp, - parentViewTransition.stateNode - )), - (previousMeasurement = instance), - (JSCompiler_temp = JSCompiler_temp.className), - (previousMeasurement.style.viewTransitionName = + ((nextMeasurement = instance), + (previousMeasurement = className), + (nextMeasurement.style.viewTransitionName = 0 === viewTransitionHostInstanceIdx - ? nextMeasurement - : nextMeasurement + "_" + viewTransitionHostInstanceIdx), - null != JSCompiler_temp && - (previousMeasurement.style.viewTransitionClass = - JSCompiler_temp)); + ? name + : name + "_" + viewTransitionHostInstanceIdx), + null != previousMeasurement && + (nextMeasurement.style.viewTransitionClass = + previousMeasurement)); (inViewport && 0 !== (parentViewTransition.flags & 4)) || ((nextMeasurement = getViewTransitionName( currentViewTransition.memoizedProps, @@ -11939,6 +12007,8 @@ currentViewTransition, parentViewTransition, child.child, + name, + className, previousMeasurements, stopAtNestedViewTransitions ) && (inViewport = !0); @@ -11950,19 +12020,27 @@ for (changedParent = changedParent.child; null !== changedParent; ) { if (30 === changedParent.tag) { var current = changedParent.alternate; - null !== current && - ((viewTransitionHostInstanceIdx = 0), - measureViewTransitionHostInstances( + if (null !== current) { + var props = changedParent.memoizedProps, + name = getViewTransitionName(props, changedParent.stateNode), + className = getViewTransitionClassName( + props.className, + props.layout + ); + viewTransitionHostInstanceIdx = 0; + current = measureViewTransitionHostInstances( current, changedParent, changedParent.child, + name, + className, changedParent.memoizedState, !1 - ), - scheduleViewTransitionEvent( - changedParent, - changedParent.memoizedProps.onLayout - )); + ); + 0 !== (changedParent.flags & 4) && + current && + scheduleViewTransitionEvent(changedParent, props.onLayout); + } } else 0 !== (changedParent.subtreeFlags & 33554432) && measureNestedViewTransitions(changedParent); @@ -13022,9 +13100,7 @@ for (parentFiber = parentFiber.child; null !== parentFiber; ) commitAfterMutationEffectsOnFiber(parentFiber, root), (parentFiber = parentFiber.sibling); - else - measureNestedViewTransitions(parentFiber), - 0 !== (parentFiber.flags & 32) && (viewTransitionContextChanged = !0); + else measureNestedViewTransitions(parentFiber); } function commitAfterMutationEffectsOnFiber(finishedWork, root) { var current = finishedWork.alternate; @@ -13055,15 +13131,15 @@ } ); } - root = root.containerInfo; - root = - 9 === root.nodeType - ? root.documentElement - : root.ownerDocument.documentElement; - null !== root && - "" === root.style.viewTransitionName && - ((root.style.viewTransitionName = "none"), - root.animate( + finishedWork = root.containerInfo; + finishedWork = + 9 === finishedWork.nodeType + ? finishedWork.documentElement + : finishedWork.ownerDocument.documentElement; + null !== finishedWork && + "" === finishedWork.style.viewTransitionName && + ((finishedWork.style.viewTransitionName = "none"), + finishedWork.animate( { opacity: [0, 0], pointerEvents: ["none", "none"] }, { duration: 0, @@ -13071,7 +13147,7 @@ pseudoElement: "::view-transition-group(root)" } ), - root.animate( + finishedWork.animate( { width: [0, 0], height: [0, 0] }, { duration: 0, @@ -13091,32 +13167,70 @@ : recursivelyTraverseAfterMutationEffects(root, finishedWork)); break; case 30: - 0 !== (finishedWork.subtreeFlags & 8246) && - ((i = 0 !== (finishedWork.flags & 4)), - (oldName = viewTransitionContextChanged), - (instance = viewTransitionCancelableChildren), - (viewTransitionContextChanged = !1), - (viewTransitionCancelableChildren = null), - recursivelyTraverseAfterMutationEffects(root, finishedWork), - viewTransitionContextChanged && (finishedWork.flags |= 4), - (viewTransitionHostInstanceIdx = 0), - (root = current.memoizedState), - (current = measureViewTransitionHostInstances( - current, - finishedWork, - finishedWork.child, - root, - !0 - )), - viewTransitionHostInstanceIdx !== - (null === root ? 0 : root.length) && (finishedWork.flags |= 32), + if (0 !== (finishedWork.subtreeFlags & 8246)) { + i = 0 !== (finishedWork.flags & 4); + oldName = viewTransitionContextChanged; + instance = viewTransitionCancelableChildren; + viewTransitionContextChanged = !1; + viewTransitionCancelableChildren = null; + recursivelyTraverseAfterMutationEffects(root, finishedWork); + viewTransitionContextChanged && (finishedWork.flags |= 4); + a: { + root = finishedWork.memoizedProps; + var updateClassName = getViewTransitionClassName( + root.className, + root.update + ), + layoutClassName = getViewTransitionClassName( + root.className, + root.update + ); + if ("none" === updateClassName) { + if ("none" === layoutClassName) { + current = !1; + break a; + } + finishedWork.flags &= -5; + updateClassName = layoutClassName; + } else if (0 === (finishedWork.flags & 4)) { + if ("none" === layoutClassName) { + viewTransitionHostInstanceIdx = 0; + cancelViewTransitionHostInstances( + current, + finishedWork.child, + !0 + ); + current = !1; + break a; + } + updateClassName = layoutClassName; + } + layoutClassName = getViewTransitionName( + root, + finishedWork.stateNode + ); + viewTransitionHostInstanceIdx = 0; + root = current.memoizedState; + current = measureViewTransitionHostInstances( + current, + finishedWork, + finishedWork.child, + layoutClassName, + updateClassName, + root, + !0 + ); + viewTransitionHostInstanceIdx !== + (null === root ? 0 : root.length) && + (finishedWork.flags |= 32); + } 0 !== (finishedWork.flags & 4) && current - ? ((root = finishedWork.memoizedProps), + ? ((current = finishedWork.memoizedProps), scheduleViewTransitionEvent( finishedWork, i || viewTransitionContextChanged - ? root.onUpdate - : root.onLayout + ? current.onUpdate + : current.onLayout ), (viewTransitionCancelableChildren = instance)) : null !== instance && @@ -13124,9 +13238,10 @@ instance, viewTransitionCancelableChildren ), - (viewTransitionCancelableChildren = instance)), - (viewTransitionContextChanged = - 0 !== (finishedWork.flags & 32) ? !0 : oldName)); + (viewTransitionCancelableChildren = instance)); + viewTransitionContextChanged = + 0 !== (finishedWork.flags & 32) ? !0 : oldName; + } break; default: recursivelyTraverseAfterMutationEffects(root, finishedWork); @@ -14731,6 +14846,15 @@ ? props.name : instance.autoName; } + function getViewTransitionClassName(className, eventClassName) { + return null == eventClassName + ? className + : "none" === eventClassName + ? eventClassName + : null != className + ? className + " " + eventClassName + : eventClassName; + } function markUpdate(workInProgress) { workInProgress.flags |= 4; } @@ -26670,11 +26794,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-cabd8a0e-20250113" !== 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.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -26711,10 +26835,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.1.0-experimental-540efebc-20250112", + version: "19.1.0-experimental-cabd8a0e-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-540efebc-20250112" + reconcilerVersion: "19.1.0-experimental-cabd8a0e-20250113" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -26858,7 +26982,7 @@ listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; - exports.version = "19.1.0-experimental-540efebc-20250112"; + exports.version = "19.1.0-experimental-cabd8a0e-20250113"; "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 9befb8925e3e4..6cd98e391d3fb 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 @@ -7875,22 +7875,39 @@ function commitBeforeMutationEffects_complete( case 17: break; case 30: - isViewTransitionEligible && + if ( + isViewTransitionEligible && null !== current && - 0 !== (fiber.subtreeFlags & 8246) && - ((isViewTransitionEligible = current.memoizedProps), - (flags = getViewTransitionName( - isViewTransitionEligible, - current.stateNode - )), - (viewTransitionHostInstanceIdx = 0), - applyViewTransitionToHostInstances( - current.child, - flags, - isViewTransitionEligible.className, - (current.memoizedState = []), - !0 - )); + 0 !== (fiber.subtreeFlags & 8246) + ) + a: { + isViewTransitionEligible = getViewTransitionName( + current.memoizedProps, + current.stateNode + ); + flags = fiber.memoizedProps; + instance = getViewTransitionClassName( + flags.className, + flags.update + ); + if ( + "none" === instance && + ((instance = getViewTransitionClassName( + flags.className, + flags.layout + )), + "none" === instance) + ) + break a; + viewTransitionHostInstanceIdx = 0; + applyViewTransitionToHostInstances( + current.child, + isViewTransitionEligible, + instance, + (current.memoizedState = []), + !0 + ); + } break; default: if (0 !== (flags & 1024)) throw Error(formatProdErrorMessage(163)); @@ -7972,34 +7989,44 @@ function commitAppearingPairViewTransitions(placement) { var props = placement.memoizedProps; if (null == props.name || "auto" === props.name) throw Error(formatProdErrorMessage(544)); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - placement.child, - props.name, - props.className, - null, - !1 - ) || restoreViewTransitionOnHostInstances(placement.child, !1); + var name = props.name; + props = getViewTransitionClassName(props.className, props.share); + "none" !== props && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + placement.child, + name, + props, + null, + !1 + ) || restoreViewTransitionOnHostInstances(placement.child, !1)); } placement = placement.sibling; } } function commitEnterViewTransitions(placement) { if (30 === placement.tag) { - var props = placement.memoizedProps, - name = getViewTransitionName(props, placement.stateNode); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - placement.child, - name, - props.className, - null, - !1 - ) - ? (commitAppearingPairViewTransitions(placement), - placement.stateNode.paired || - scheduleViewTransitionEvent(placement, props.onEnter)) - : restoreViewTransitionOnHostInstances(placement.child, !1); + var state = placement.stateNode, + props = placement.memoizedProps, + name = getViewTransitionName(props, state), + className = getViewTransitionClassName( + props.className, + state.paired ? props.share : props.enter + ); + "none" !== className + ? ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + placement.child, + name, + className, + null, + !1 + ) + ? (commitAppearingPairViewTransitions(placement), + state.paired || + scheduleViewTransitionEvent(placement, props.onEnter)) + : restoreViewTransitionOnHostInstances(placement.child, !1)) + : commitAppearingPairViewTransitions(placement); } else if (0 !== (placement.subtreeFlags & 33554432)) for (placement = placement.child; null !== placement; ) commitEnterViewTransitions(placement), (placement = placement.sibling); @@ -8017,23 +8044,26 @@ function commitDeletedPairViewTransitions(deletion, appearingViewTransitions) { name = props.name; if (null != name && "auto" !== name) { var pair = appearingViewTransitions.get(name); - if ( - void 0 !== pair && - ((viewTransitionHostInstanceIdx = 0), - applyViewTransitionToHostInstances( - deletion.child, - name, + if (void 0 !== pair) { + var className = getViewTransitionClassName( props.className, - null, - !1 - ) - ? ((pair.paired = deletion.stateNode), - scheduleViewTransitionEvent(deletion, props.onShare)) - : restoreViewTransitionOnHostInstances(deletion.child, !1), - appearingViewTransitions.delete(name), - 0 === appearingViewTransitions.size) - ) - break; + props.share + ); + "none" !== className && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + deletion.child, + name, + className, + null, + !1 + ) + ? ((pair.paired = deletion.stateNode), + scheduleViewTransitionEvent(deletion, props.onShare)) + : restoreViewTransitionOnHostInstances(deletion.child, !1)); + appearingViewTransitions.delete(name); + if (0 === appearingViewTransitions.size) break; + } } } commitDeletedPairViewTransitions(deletion, appearingViewTransitions); @@ -8044,27 +8074,32 @@ function commitDeletedPairViewTransitions(deletion, appearingViewTransitions) { function commitExitViewTransitions(deletion, appearingViewTransitions) { if (30 === deletion.tag) { var props = deletion.memoizedProps, - name = getViewTransitionName(props, deletion.stateNode); - viewTransitionHostInstanceIdx = 0; - if ( + name = getViewTransitionName(props, deletion.stateNode), + pair = + null !== appearingViewTransitions + ? appearingViewTransitions.get(name) + : void 0, + className = getViewTransitionClassName( + props.className, + void 0 !== pair ? props.share : props.exit + ); + "none" !== className && + ((viewTransitionHostInstanceIdx = 0), applyViewTransitionToHostInstances( deletion.child, name, - props.className, + className, null, !1 ) - ) - if (null !== appearingViewTransitions) { - var pair = appearingViewTransitions.get(name); - void 0 !== pair + ? void 0 !== pair ? ((pair.paired = deletion.stateNode), appearingViewTransitions.delete(name), scheduleViewTransitionEvent(deletion, props.onShare)) - : scheduleViewTransitionEvent(deletion, props.onExit); - commitDeletedPairViewTransitions(deletion, appearingViewTransitions); - } else scheduleViewTransitionEvent(deletion, props.onExit); - else restoreViewTransitionOnHostInstances(deletion.child, !1); + : scheduleViewTransitionEvent(deletion, props.onExit) + : restoreViewTransitionOnHostInstances(deletion.child, !1)); + null !== appearingViewTransitions && + commitDeletedPairViewTransitions(deletion, appearingViewTransitions); } else if (0 !== (deletion.subtreeFlags & 33554432)) for (deletion = deletion.child; null !== deletion; ) commitExitViewTransitions(deletion, appearingViewTransitions), @@ -8078,14 +8113,16 @@ function commitNestedViewTransitions(changedParent) { if (30 === changedParent.tag) { var props = changedParent.memoizedProps, name = getViewTransitionName(props, changedParent.stateNode); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - changedParent.child, - name, - props.className, - (changedParent.memoizedState = []), - !1 - ); + props = getViewTransitionClassName(props.className, props.layout); + "none" !== props && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + changedParent.child, + name, + props, + (changedParent.memoizedState = []), + !1 + )); } else 0 !== (changedParent.subtreeFlags & 33554432) && commitNestedViewTransitions(changedParent); @@ -8136,10 +8173,42 @@ function restoreNestedViewTransitions(changedParent) { restoreNestedViewTransitions(changedParent), (changedParent = changedParent.sibling); } +function cancelViewTransitionHostInstances( + currentViewTransition, + child, + stopAtNestedViewTransitions +) { + for (; null !== child; ) { + if (5 === child.tag) { + var instance = child.stateNode, + oldName = getViewTransitionName( + currentViewTransition.memoizedProps, + currentViewTransition.stateNode + ); + null === viewTransitionCancelableChildren && + (viewTransitionCancelableChildren = []); + viewTransitionCancelableChildren.push( + instance, + oldName, + child.memoizedProps + ); + viewTransitionHostInstanceIdx++; + } else if (22 !== child.tag || null === child.memoizedState) + (30 === child.tag && stopAtNestedViewTransitions) || + cancelViewTransitionHostInstances( + currentViewTransition, + child.child, + stopAtNestedViewTransitions + ); + child = child.sibling; + } +} function measureViewTransitionHostInstances( currentViewTransition, parentViewTransition, child, + name, + className, previousMeasurements, stopAtNestedViewTransitions ) { @@ -8177,19 +8246,14 @@ function measureViewTransitionHostInstances( nextMeasurement && (parentViewTransition.flags |= 32); } else parentViewTransition.flags |= 32; 0 !== (parentViewTransition.flags & 4) && - ((JSCompiler_temp = parentViewTransition.memoizedProps), - (nextMeasurement = getViewTransitionName( - JSCompiler_temp, - parentViewTransition.stateNode - )), - (previousMeasurement = instance), - (JSCompiler_temp = JSCompiler_temp.className), - (previousMeasurement.style.viewTransitionName = + ((nextMeasurement = instance), + (previousMeasurement = className), + (nextMeasurement.style.viewTransitionName = 0 === viewTransitionHostInstanceIdx - ? nextMeasurement - : nextMeasurement + "_" + viewTransitionHostInstanceIdx), - null != JSCompiler_temp && - (previousMeasurement.style.viewTransitionClass = JSCompiler_temp)); + ? name + : name + "_" + viewTransitionHostInstanceIdx), + null != previousMeasurement && + (nextMeasurement.style.viewTransitionClass = previousMeasurement)); (inViewport && 0 !== (parentViewTransition.flags & 4)) || ((nextMeasurement = getViewTransitionName( currentViewTransition.memoizedProps, @@ -8210,6 +8274,8 @@ function measureViewTransitionHostInstances( currentViewTransition, parentViewTransition, child.child, + name, + className, previousMeasurements, stopAtNestedViewTransitions ) && (inViewport = !0); @@ -8221,19 +8287,24 @@ function measureNestedViewTransitions(changedParent) { for (changedParent = changedParent.child; null !== changedParent; ) { if (30 === changedParent.tag) { var current = changedParent.alternate; - null !== current && - ((viewTransitionHostInstanceIdx = 0), - measureViewTransitionHostInstances( + if (null !== current) { + var props = changedParent.memoizedProps, + name = getViewTransitionName(props, changedParent.stateNode), + className = getViewTransitionClassName(props.className, props.layout); + viewTransitionHostInstanceIdx = 0; + current = measureViewTransitionHostInstances( current, changedParent, changedParent.child, + name, + className, changedParent.memoizedState, !1 - ), - scheduleViewTransitionEvent( - changedParent, - changedParent.memoizedProps.onLayout - )); + ); + 0 !== (changedParent.flags & 4) && + current && + scheduleViewTransitionEvent(changedParent, props.onLayout); + } } else 0 !== (changedParent.subtreeFlags & 33554432) && measureNestedViewTransitions(changedParent); @@ -9140,9 +9211,7 @@ function recursivelyTraverseAfterMutationEffects(root, parentFiber) { for (parentFiber = parentFiber.child; null !== parentFiber; ) commitAfterMutationEffectsOnFiber(parentFiber, root), (parentFiber = parentFiber.sibling); - else - measureNestedViewTransitions(parentFiber), - 0 !== (parentFiber.flags & 32) && (viewTransitionContextChanged = !0); + else measureNestedViewTransitions(parentFiber); } function commitAfterMutationEffectsOnFiber(finishedWork, root) { var current = finishedWork.alternate; @@ -9172,15 +9241,15 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { } ); } - root = root.containerInfo; - root = - 9 === root.nodeType - ? root.documentElement - : root.ownerDocument.documentElement; - null !== root && - "" === root.style.viewTransitionName && - ((root.style.viewTransitionName = "none"), - root.animate( + finishedWork = root.containerInfo; + finishedWork = + 9 === finishedWork.nodeType + ? finishedWork.documentElement + : finishedWork.ownerDocument.documentElement; + null !== finishedWork && + "" === finishedWork.style.viewTransitionName && + ((finishedWork.style.viewTransitionName = "none"), + finishedWork.animate( { opacity: [0, 0], pointerEvents: ["none", "none"] }, { duration: 0, @@ -9188,7 +9257,7 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { pseudoElement: "::view-transition-group(root)" } ), - root.animate( + finishedWork.animate( { width: [0, 0], height: [0, 0] }, { duration: 0, @@ -9208,39 +9277,77 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { : recursivelyTraverseAfterMutationEffects(root, finishedWork)); break; case 30: - 0 !== (finishedWork.subtreeFlags & 8246) && - ((i = 0 !== (finishedWork.flags & 4)), - (oldName = viewTransitionContextChanged), - (instance = viewTransitionCancelableChildren), - (viewTransitionContextChanged = !1), - (viewTransitionCancelableChildren = null), - recursivelyTraverseAfterMutationEffects(root, finishedWork), - viewTransitionContextChanged && (finishedWork.flags |= 4), - (viewTransitionHostInstanceIdx = 0), - (root = current.memoizedState), - (current = measureViewTransitionHostInstances( - current, - finishedWork, - finishedWork.child, - root, - !0 - )), - viewTransitionHostInstanceIdx !== (null === root ? 0 : root.length) && - (finishedWork.flags |= 32), + if (0 !== (finishedWork.subtreeFlags & 8246)) { + i = 0 !== (finishedWork.flags & 4); + oldName = viewTransitionContextChanged; + instance = viewTransitionCancelableChildren; + viewTransitionContextChanged = !1; + viewTransitionCancelableChildren = null; + recursivelyTraverseAfterMutationEffects(root, finishedWork); + viewTransitionContextChanged && (finishedWork.flags |= 4); + a: { + root = finishedWork.memoizedProps; + var updateClassName = getViewTransitionClassName( + root.className, + root.update + ), + layoutClassName = getViewTransitionClassName( + root.className, + root.update + ); + if ("none" === updateClassName) { + if ("none" === layoutClassName) { + current = !1; + break a; + } + finishedWork.flags &= -5; + updateClassName = layoutClassName; + } else if (0 === (finishedWork.flags & 4)) { + if ("none" === layoutClassName) { + viewTransitionHostInstanceIdx = 0; + cancelViewTransitionHostInstances( + current, + finishedWork.child, + !0 + ); + current = !1; + break a; + } + updateClassName = layoutClassName; + } + layoutClassName = getViewTransitionName( + root, + finishedWork.stateNode + ); + viewTransitionHostInstanceIdx = 0; + root = current.memoizedState; + current = measureViewTransitionHostInstances( + current, + finishedWork, + finishedWork.child, + layoutClassName, + updateClassName, + root, + !0 + ); + viewTransitionHostInstanceIdx !== + (null === root ? 0 : root.length) && (finishedWork.flags |= 32); + } 0 !== (finishedWork.flags & 4) && current - ? ((root = finishedWork.memoizedProps), + ? ((current = finishedWork.memoizedProps), scheduleViewTransitionEvent( finishedWork, i || viewTransitionContextChanged - ? root.onUpdate - : root.onLayout + ? current.onUpdate + : current.onLayout ), (viewTransitionCancelableChildren = instance)) : null !== instance && (instance.push.apply(instance, viewTransitionCancelableChildren), - (viewTransitionCancelableChildren = instance)), - (viewTransitionContextChanged = - 0 !== (finishedWork.flags & 32) ? !0 : oldName)); + (viewTransitionCancelableChildren = instance)); + viewTransitionContextChanged = + 0 !== (finishedWork.flags & 32) ? !0 : oldName; + } break; default: recursivelyTraverseAfterMutationEffects(root, finishedWork); @@ -10348,6 +10455,15 @@ function getViewTransitionName(props, instance) { ? props.name : instance.autoName; } +function getViewTransitionClassName(className, eventClassName) { + return null == eventClassName + ? className + : "none" === eventClassName + ? eventClassName + : null != className + ? className + " " + eventClassName + : eventClassName; +} function markUpdate(workInProgress) { workInProgress.flags |= 4; } @@ -12626,20 +12742,20 @@ function extractEvents$1( } } for ( - var i$jscomp$inline_1547 = 0; - i$jscomp$inline_1547 < simpleEventPluginEvents.length; - i$jscomp$inline_1547++ + var i$jscomp$inline_1552 = 0; + i$jscomp$inline_1552 < simpleEventPluginEvents.length; + i$jscomp$inline_1552++ ) { - var eventName$jscomp$inline_1548 = - simpleEventPluginEvents[i$jscomp$inline_1547], - domEventName$jscomp$inline_1549 = - eventName$jscomp$inline_1548.toLowerCase(), - capitalizedEvent$jscomp$inline_1550 = - eventName$jscomp$inline_1548[0].toUpperCase() + - eventName$jscomp$inline_1548.slice(1); + var eventName$jscomp$inline_1553 = + simpleEventPluginEvents[i$jscomp$inline_1552], + domEventName$jscomp$inline_1554 = + eventName$jscomp$inline_1553.toLowerCase(), + capitalizedEvent$jscomp$inline_1555 = + eventName$jscomp$inline_1553[0].toUpperCase() + + eventName$jscomp$inline_1553.slice(1); registerSimpleEvent( - domEventName$jscomp$inline_1549, - "on" + capitalizedEvent$jscomp$inline_1550 + domEventName$jscomp$inline_1554, + "on" + capitalizedEvent$jscomp$inline_1555 ); } registerSimpleEvent(ANIMATION_END, "onAnimationEnd"); @@ -16255,16 +16371,16 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { 0 === i && attemptExplicitHydrationTarget(target); } }; -var isomorphicReactPackageVersion$jscomp$inline_1794 = React.version; +var isomorphicReactPackageVersion$jscomp$inline_1799 = React.version; if ( - "19.1.0-experimental-540efebc-20250112" !== - isomorphicReactPackageVersion$jscomp$inline_1794 + "19.1.0-experimental-cabd8a0e-20250113" !== + isomorphicReactPackageVersion$jscomp$inline_1799 ) throw Error( formatProdErrorMessage( 527, - isomorphicReactPackageVersion$jscomp$inline_1794, - "19.1.0-experimental-540efebc-20250112" + isomorphicReactPackageVersion$jscomp$inline_1799, + "19.1.0-experimental-cabd8a0e-20250113" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -16284,24 +16400,24 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { null === componentOrElement ? null : componentOrElement.stateNode; return componentOrElement; }; -var internals$jscomp$inline_2323 = { +var internals$jscomp$inline_2330 = { bundleType: 0, - version: "19.1.0-experimental-540efebc-20250112", + version: "19.1.0-experimental-cabd8a0e-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-540efebc-20250112" + reconcilerVersion: "19.1.0-experimental-cabd8a0e-20250113" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_2324 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_2331 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_2324.isDisabled && - hook$jscomp$inline_2324.supportsFiber + !hook$jscomp$inline_2331.isDisabled && + hook$jscomp$inline_2331.supportsFiber ) try { - (rendererID = hook$jscomp$inline_2324.inject( - internals$jscomp$inline_2323 + (rendererID = hook$jscomp$inline_2331.inject( + internals$jscomp$inline_2330 )), - (injectedHook = hook$jscomp$inline_2324); + (injectedHook = hook$jscomp$inline_2331); } catch (err) {} } exports.createRoot = function (container, options) { @@ -16395,4 +16511,4 @@ exports.hydrateRoot = function (container, initialChildren, options) { listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; -exports.version = "19.1.0-experimental-540efebc-20250112"; +exports.version = "19.1.0-experimental-cabd8a0e-20250113"; 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 8031d6511d3d5..b038f57abe1f7 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 @@ -9333,33 +9333,33 @@ return current; } function updateSuspenseComponent(current, workInProgress, renderLanes) { - var JSCompiler_object_inline_componentStack_2550; - var JSCompiler_object_inline_stack_2549 = workInProgress.pendingProps; + var JSCompiler_object_inline_componentStack_2557; + var JSCompiler_object_inline_stack_2556 = workInProgress.pendingProps; shouldSuspendImpl(workInProgress) && (workInProgress.flags |= 128); - var JSCompiler_object_inline_message_2547 = !1; + var JSCompiler_object_inline_message_2554 = !1; var didSuspend = 0 !== (workInProgress.flags & 128); - (JSCompiler_object_inline_componentStack_2550 = didSuspend) || - (JSCompiler_object_inline_componentStack_2550 = + (JSCompiler_object_inline_componentStack_2557 = didSuspend) || + (JSCompiler_object_inline_componentStack_2557 = null !== current && null === current.memoizedState ? !1 : 0 !== (suspenseStackCursor.current & ForceSuspenseFallback)); - JSCompiler_object_inline_componentStack_2550 && - ((JSCompiler_object_inline_message_2547 = !0), + JSCompiler_object_inline_componentStack_2557 && + ((JSCompiler_object_inline_message_2554 = !0), (workInProgress.flags &= -129)); - JSCompiler_object_inline_componentStack_2550 = + JSCompiler_object_inline_componentStack_2557 = 0 !== (workInProgress.flags & 32); workInProgress.flags &= -33; if (null === current) { if (isHydrating) { - JSCompiler_object_inline_message_2547 + JSCompiler_object_inline_message_2554 ? pushPrimaryTreeSuspenseHandler(workInProgress) : reuseSuspenseHandlerOnStack(workInProgress); if (isHydrating) { - var JSCompiler_object_inline_digest_2548 = nextHydratableInstance; + var JSCompiler_object_inline_digest_2555 = nextHydratableInstance; var JSCompiler_temp; - if (!(JSCompiler_temp = !JSCompiler_object_inline_digest_2548)) { + if (!(JSCompiler_temp = !JSCompiler_object_inline_digest_2555)) { c: { - var instance = JSCompiler_object_inline_digest_2548; + var instance = JSCompiler_object_inline_digest_2555; for ( JSCompiler_temp = rootOrSingletonContext; 8 !== instance.nodeType; @@ -9401,87 +9401,87 @@ JSCompiler_temp && (warnNonHydratedInstance( workInProgress, - JSCompiler_object_inline_digest_2548 + JSCompiler_object_inline_digest_2555 ), throwOnHydrationMismatch(workInProgress)); } - JSCompiler_object_inline_digest_2548 = workInProgress.memoizedState; + JSCompiler_object_inline_digest_2555 = workInProgress.memoizedState; if ( - null !== JSCompiler_object_inline_digest_2548 && - ((JSCompiler_object_inline_digest_2548 = - JSCompiler_object_inline_digest_2548.dehydrated), - null !== JSCompiler_object_inline_digest_2548) + null !== JSCompiler_object_inline_digest_2555 && + ((JSCompiler_object_inline_digest_2555 = + JSCompiler_object_inline_digest_2555.dehydrated), + null !== JSCompiler_object_inline_digest_2555) ) return ( - isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2548) + isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2555) ? (workInProgress.lanes = 32) : (workInProgress.lanes = 536870912), null ); popSuspenseHandler(workInProgress); } - JSCompiler_object_inline_digest_2548 = - JSCompiler_object_inline_stack_2549.children; - JSCompiler_temp = JSCompiler_object_inline_stack_2549.fallback; - if (JSCompiler_object_inline_message_2547) + JSCompiler_object_inline_digest_2555 = + JSCompiler_object_inline_stack_2556.children; + JSCompiler_temp = JSCompiler_object_inline_stack_2556.fallback; + if (JSCompiler_object_inline_message_2554) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_stack_2549 = + (JSCompiler_object_inline_stack_2556 = mountSuspenseFallbackChildren( workInProgress, - JSCompiler_object_inline_digest_2548, + JSCompiler_object_inline_digest_2555, JSCompiler_temp, renderLanes )), - (JSCompiler_object_inline_message_2547 = workInProgress.child), - (JSCompiler_object_inline_message_2547.memoizedState = + (JSCompiler_object_inline_message_2554 = workInProgress.child), + (JSCompiler_object_inline_message_2554.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_message_2547.childLanes = + (JSCompiler_object_inline_message_2554.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2550, + JSCompiler_object_inline_componentStack_2557, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - JSCompiler_object_inline_stack_2549 + JSCompiler_object_inline_stack_2556 ); if ( "number" === - typeof JSCompiler_object_inline_stack_2549.unstable_expectedLoadTime + typeof JSCompiler_object_inline_stack_2556.unstable_expectedLoadTime ) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_stack_2549 = + (JSCompiler_object_inline_stack_2556 = mountSuspenseFallbackChildren( workInProgress, - JSCompiler_object_inline_digest_2548, + JSCompiler_object_inline_digest_2555, JSCompiler_temp, renderLanes )), - (JSCompiler_object_inline_message_2547 = workInProgress.child), - (JSCompiler_object_inline_message_2547.memoizedState = + (JSCompiler_object_inline_message_2554 = workInProgress.child), + (JSCompiler_object_inline_message_2554.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_message_2547.childLanes = + (JSCompiler_object_inline_message_2554.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2550, + JSCompiler_object_inline_componentStack_2557, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), (workInProgress.lanes = 4194304), - JSCompiler_object_inline_stack_2549 + JSCompiler_object_inline_stack_2556 ); pushPrimaryTreeSuspenseHandler(workInProgress); return mountSuspensePrimaryChildren( workInProgress, - JSCompiler_object_inline_digest_2548 + JSCompiler_object_inline_digest_2555 ); } var prevState = current.memoizedState; if ( null !== prevState && - ((JSCompiler_object_inline_digest_2548 = prevState.dehydrated), - null !== JSCompiler_object_inline_digest_2548) + ((JSCompiler_object_inline_digest_2555 = prevState.dehydrated), + null !== JSCompiler_object_inline_digest_2555) ) { if (didSuspend) workInProgress.flags & 256 @@ -9498,94 +9498,94 @@ (workInProgress.flags |= 128), (workInProgress = null)) : (reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_message_2547 = - JSCompiler_object_inline_stack_2549.fallback), - (JSCompiler_object_inline_digest_2548 = workInProgress.mode), - (JSCompiler_object_inline_stack_2549 = + (JSCompiler_object_inline_message_2554 = + JSCompiler_object_inline_stack_2556.fallback), + (JSCompiler_object_inline_digest_2555 = workInProgress.mode), + (JSCompiler_object_inline_stack_2556 = mountWorkInProgressOffscreenFiber( { mode: "visible", - children: JSCompiler_object_inline_stack_2549.children + children: JSCompiler_object_inline_stack_2556.children }, - JSCompiler_object_inline_digest_2548 + JSCompiler_object_inline_digest_2555 )), - (JSCompiler_object_inline_message_2547 = + (JSCompiler_object_inline_message_2554 = createFiberFromFragment( - JSCompiler_object_inline_message_2547, - JSCompiler_object_inline_digest_2548, + JSCompiler_object_inline_message_2554, + JSCompiler_object_inline_digest_2555, renderLanes, null )), - (JSCompiler_object_inline_message_2547.flags |= 2), - (JSCompiler_object_inline_stack_2549.return = workInProgress), - (JSCompiler_object_inline_message_2547.return = workInProgress), - (JSCompiler_object_inline_stack_2549.sibling = - JSCompiler_object_inline_message_2547), - (workInProgress.child = JSCompiler_object_inline_stack_2549), + (JSCompiler_object_inline_message_2554.flags |= 2), + (JSCompiler_object_inline_stack_2556.return = workInProgress), + (JSCompiler_object_inline_message_2554.return = workInProgress), + (JSCompiler_object_inline_stack_2556.sibling = + JSCompiler_object_inline_message_2554), + (workInProgress.child = JSCompiler_object_inline_stack_2556), reconcileChildFibers( workInProgress, current.child, null, renderLanes ), - (JSCompiler_object_inline_stack_2549 = workInProgress.child), - (JSCompiler_object_inline_stack_2549.memoizedState = + (JSCompiler_object_inline_stack_2556 = workInProgress.child), + (JSCompiler_object_inline_stack_2556.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_stack_2549.childLanes = + (JSCompiler_object_inline_stack_2556.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2550, + JSCompiler_object_inline_componentStack_2557, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - (workInProgress = JSCompiler_object_inline_message_2547)); + (workInProgress = JSCompiler_object_inline_message_2554)); else if ( (pushPrimaryTreeSuspenseHandler(workInProgress), isHydrating && console.error( "We should not be hydrating here. This is a bug in React. Please file a bug." ), - isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2548)) + isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2555)) ) { - JSCompiler_object_inline_componentStack_2550 = - JSCompiler_object_inline_digest_2548.nextSibling && - JSCompiler_object_inline_digest_2548.nextSibling.dataset; - if (JSCompiler_object_inline_componentStack_2550) { - JSCompiler_temp = JSCompiler_object_inline_componentStack_2550.dgst; - var message = JSCompiler_object_inline_componentStack_2550.msg; - instance = JSCompiler_object_inline_componentStack_2550.stck; + JSCompiler_object_inline_componentStack_2557 = + JSCompiler_object_inline_digest_2555.nextSibling && + JSCompiler_object_inline_digest_2555.nextSibling.dataset; + if (JSCompiler_object_inline_componentStack_2557) { + JSCompiler_temp = JSCompiler_object_inline_componentStack_2557.dgst; + var message = JSCompiler_object_inline_componentStack_2557.msg; + instance = JSCompiler_object_inline_componentStack_2557.stck; var componentStack = - JSCompiler_object_inline_componentStack_2550.cstck; + JSCompiler_object_inline_componentStack_2557.cstck; } - JSCompiler_object_inline_message_2547 = message; - JSCompiler_object_inline_digest_2548 = JSCompiler_temp; - JSCompiler_object_inline_stack_2549 = instance; - JSCompiler_temp = JSCompiler_object_inline_componentStack_2550 = + JSCompiler_object_inline_message_2554 = message; + JSCompiler_object_inline_digest_2555 = JSCompiler_temp; + JSCompiler_object_inline_stack_2556 = instance; + JSCompiler_temp = JSCompiler_object_inline_componentStack_2557 = componentStack; - "POSTPONE" !== JSCompiler_object_inline_digest_2548 && - ((JSCompiler_object_inline_componentStack_2550 = - JSCompiler_object_inline_message_2547 - ? Error(JSCompiler_object_inline_message_2547) + "POSTPONE" !== JSCompiler_object_inline_digest_2555 && + ((JSCompiler_object_inline_componentStack_2557 = + JSCompiler_object_inline_message_2554 + ? Error(JSCompiler_object_inline_message_2554) : Error( "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." )), - (JSCompiler_object_inline_componentStack_2550.stack = - JSCompiler_object_inline_stack_2549 || ""), - (JSCompiler_object_inline_componentStack_2550.digest = - JSCompiler_object_inline_digest_2548), - (JSCompiler_object_inline_stack_2549 = + (JSCompiler_object_inline_componentStack_2557.stack = + JSCompiler_object_inline_stack_2556 || ""), + (JSCompiler_object_inline_componentStack_2557.digest = + JSCompiler_object_inline_digest_2555), + (JSCompiler_object_inline_stack_2556 = void 0 === JSCompiler_temp ? null : JSCompiler_temp), - (JSCompiler_object_inline_message_2547 = { - value: JSCompiler_object_inline_componentStack_2550, + (JSCompiler_object_inline_message_2554 = { + value: JSCompiler_object_inline_componentStack_2557, source: null, - stack: JSCompiler_object_inline_stack_2549 + stack: JSCompiler_object_inline_stack_2556 }), - "string" === typeof JSCompiler_object_inline_stack_2549 && + "string" === typeof JSCompiler_object_inline_stack_2556 && CapturedStacks.set( - JSCompiler_object_inline_componentStack_2550, - JSCompiler_object_inline_message_2547 + JSCompiler_object_inline_componentStack_2557, + JSCompiler_object_inline_message_2554 ), - queueHydrationError(JSCompiler_object_inline_message_2547)); + queueHydrationError(JSCompiler_object_inline_message_2554)); workInProgress = retrySuspenseComponentWithoutHydrating( current, workInProgress, @@ -9599,44 +9599,44 @@ renderLanes, !1 ), - (JSCompiler_object_inline_componentStack_2550 = + (JSCompiler_object_inline_componentStack_2557 = 0 !== (renderLanes & current.childLanes)), - didReceiveUpdate || JSCompiler_object_inline_componentStack_2550) + didReceiveUpdate || JSCompiler_object_inline_componentStack_2557) ) { - JSCompiler_object_inline_componentStack_2550 = workInProgressRoot; + JSCompiler_object_inline_componentStack_2557 = workInProgressRoot; if ( - null !== JSCompiler_object_inline_componentStack_2550 && - ((JSCompiler_object_inline_stack_2549 = renderLanes & -renderLanes), - (JSCompiler_object_inline_stack_2549 = - 0 !== (JSCompiler_object_inline_stack_2549 & 42) + null !== JSCompiler_object_inline_componentStack_2557 && + ((JSCompiler_object_inline_stack_2556 = renderLanes & -renderLanes), + (JSCompiler_object_inline_stack_2556 = + 0 !== (JSCompiler_object_inline_stack_2556 & 42) ? 1 : getBumpedLaneForHydrationByLane( - JSCompiler_object_inline_stack_2549 + JSCompiler_object_inline_stack_2556 )), - (JSCompiler_object_inline_stack_2549 = + (JSCompiler_object_inline_stack_2556 = 0 !== - (JSCompiler_object_inline_stack_2549 & - (JSCompiler_object_inline_componentStack_2550.suspendedLanes | + (JSCompiler_object_inline_stack_2556 & + (JSCompiler_object_inline_componentStack_2557.suspendedLanes | renderLanes)) ? 0 - : JSCompiler_object_inline_stack_2549), - 0 !== JSCompiler_object_inline_stack_2549 && - JSCompiler_object_inline_stack_2549 !== prevState.retryLane) + : JSCompiler_object_inline_stack_2556), + 0 !== JSCompiler_object_inline_stack_2556 && + JSCompiler_object_inline_stack_2556 !== prevState.retryLane) ) throw ( - ((prevState.retryLane = JSCompiler_object_inline_stack_2549), + ((prevState.retryLane = JSCompiler_object_inline_stack_2556), enqueueConcurrentRenderForLane( current, - JSCompiler_object_inline_stack_2549 + JSCompiler_object_inline_stack_2556 ), scheduleUpdateOnFiber( - JSCompiler_object_inline_componentStack_2550, + JSCompiler_object_inline_componentStack_2557, current, - JSCompiler_object_inline_stack_2549 + JSCompiler_object_inline_stack_2556 ), SelectiveHydrationException) ); - JSCompiler_object_inline_digest_2548.data === + JSCompiler_object_inline_digest_2555.data === SUSPENSE_PENDING_START_DATA || renderDidSuspendDelayIfPossible(); workInProgress = retrySuspenseComponentWithoutHydrating( current, @@ -9644,14 +9644,14 @@ renderLanes ); } else - JSCompiler_object_inline_digest_2548.data === + JSCompiler_object_inline_digest_2555.data === SUSPENSE_PENDING_START_DATA ? ((workInProgress.flags |= 192), (workInProgress.child = current.child), (workInProgress = null)) : ((current = prevState.treeContext), (nextHydratableInstance = getNextHydratable( - JSCompiler_object_inline_digest_2548.nextSibling + JSCompiler_object_inline_digest_2555.nextSibling )), (hydrationParentFiber = workInProgress), (isHydrating = !0), @@ -9669,54 +9669,54 @@ (treeContextProvider = workInProgress)), (workInProgress = mountSuspensePrimaryChildren( workInProgress, - JSCompiler_object_inline_stack_2549.children + JSCompiler_object_inline_stack_2556.children )), (workInProgress.flags |= 4096)); return workInProgress; } - if (JSCompiler_object_inline_message_2547) + if (JSCompiler_object_inline_message_2554) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_message_2547 = - JSCompiler_object_inline_stack_2549.fallback), - (JSCompiler_object_inline_digest_2548 = workInProgress.mode), + (JSCompiler_object_inline_message_2554 = + JSCompiler_object_inline_stack_2556.fallback), + (JSCompiler_object_inline_digest_2555 = workInProgress.mode), (JSCompiler_temp = current.child), (instance = JSCompiler_temp.sibling), - (JSCompiler_object_inline_stack_2549 = createWorkInProgress( + (JSCompiler_object_inline_stack_2556 = createWorkInProgress( JSCompiler_temp, { mode: "hidden", - children: JSCompiler_object_inline_stack_2549.children + children: JSCompiler_object_inline_stack_2556.children } )), - (JSCompiler_object_inline_stack_2549.subtreeFlags = + (JSCompiler_object_inline_stack_2556.subtreeFlags = JSCompiler_temp.subtreeFlags & 65011712), null !== instance - ? (JSCompiler_object_inline_message_2547 = createWorkInProgress( + ? (JSCompiler_object_inline_message_2554 = createWorkInProgress( instance, - JSCompiler_object_inline_message_2547 + JSCompiler_object_inline_message_2554 )) - : ((JSCompiler_object_inline_message_2547 = createFiberFromFragment( - JSCompiler_object_inline_message_2547, - JSCompiler_object_inline_digest_2548, + : ((JSCompiler_object_inline_message_2554 = createFiberFromFragment( + JSCompiler_object_inline_message_2554, + JSCompiler_object_inline_digest_2555, renderLanes, null )), - (JSCompiler_object_inline_message_2547.flags |= 2)), - (JSCompiler_object_inline_message_2547.return = workInProgress), - (JSCompiler_object_inline_stack_2549.return = workInProgress), - (JSCompiler_object_inline_stack_2549.sibling = - JSCompiler_object_inline_message_2547), - (workInProgress.child = JSCompiler_object_inline_stack_2549), - (JSCompiler_object_inline_stack_2549 = - JSCompiler_object_inline_message_2547), - (JSCompiler_object_inline_message_2547 = workInProgress.child), - (JSCompiler_object_inline_digest_2548 = current.child.memoizedState), - null === JSCompiler_object_inline_digest_2548 - ? (JSCompiler_object_inline_digest_2548 = + (JSCompiler_object_inline_message_2554.flags |= 2)), + (JSCompiler_object_inline_message_2554.return = workInProgress), + (JSCompiler_object_inline_stack_2556.return = workInProgress), + (JSCompiler_object_inline_stack_2556.sibling = + JSCompiler_object_inline_message_2554), + (workInProgress.child = JSCompiler_object_inline_stack_2556), + (JSCompiler_object_inline_stack_2556 = + JSCompiler_object_inline_message_2554), + (JSCompiler_object_inline_message_2554 = workInProgress.child), + (JSCompiler_object_inline_digest_2555 = current.child.memoizedState), + null === JSCompiler_object_inline_digest_2555 + ? (JSCompiler_object_inline_digest_2555 = mountSuspenseOffscreenState(renderLanes)) : ((JSCompiler_temp = - JSCompiler_object_inline_digest_2548.cachePool), + JSCompiler_object_inline_digest_2555.cachePool), null !== JSCompiler_temp ? ((instance = CacheContext._currentValue), (JSCompiler_temp = @@ -9724,38 +9724,38 @@ ? { parent: instance, pool: instance } : JSCompiler_temp)) : (JSCompiler_temp = getSuspendedCache()), - (JSCompiler_object_inline_digest_2548 = { + (JSCompiler_object_inline_digest_2555 = { baseLanes: - JSCompiler_object_inline_digest_2548.baseLanes | renderLanes, + JSCompiler_object_inline_digest_2555.baseLanes | renderLanes, cachePool: JSCompiler_temp })), - (JSCompiler_object_inline_message_2547.memoizedState = - JSCompiler_object_inline_digest_2548), - (JSCompiler_object_inline_message_2547.childLanes = + (JSCompiler_object_inline_message_2554.memoizedState = + JSCompiler_object_inline_digest_2555), + (JSCompiler_object_inline_message_2554.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2550, + JSCompiler_object_inline_componentStack_2557, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - JSCompiler_object_inline_stack_2549 + JSCompiler_object_inline_stack_2556 ); pushPrimaryTreeSuspenseHandler(workInProgress); renderLanes = current.child; current = renderLanes.sibling; renderLanes = createWorkInProgress(renderLanes, { mode: "visible", - children: JSCompiler_object_inline_stack_2549.children + children: JSCompiler_object_inline_stack_2556.children }); renderLanes.return = workInProgress; renderLanes.sibling = null; null !== current && - ((JSCompiler_object_inline_componentStack_2550 = + ((JSCompiler_object_inline_componentStack_2557 = workInProgress.deletions), - null === JSCompiler_object_inline_componentStack_2550 + null === JSCompiler_object_inline_componentStack_2557 ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16)) - : JSCompiler_object_inline_componentStack_2550.push(current)); + : JSCompiler_object_inline_componentStack_2557.push(current)); workInProgress.child = renderLanes; workInProgress.memoizedState = null; return renderLanes; @@ -11545,17 +11545,19 @@ case 0: if ( 0 !== (flags & 4) && - ((finishedWork = finishedWork.updateQueue), - (finishedWork = - null !== finishedWork ? finishedWork.events : null), - null !== finishedWork) + ((isViewTransitionEligible = finishedWork.updateQueue), + (isViewTransitionEligible = + null !== isViewTransitionEligible + ? isViewTransitionEligible.events + : null), + null !== isViewTransitionEligible) ) for ( - isViewTransitionEligible = 0; - isViewTransitionEligible < finishedWork.length; - isViewTransitionEligible++ + finishedWork = 0; + finishedWork < isViewTransitionEligible.length; + finishedWork++ ) - (current = finishedWork[isViewTransitionEligible]), + (current = isViewTransitionEligible[finishedWork]), (current.ref.impl = current.nextImpl); break; case 11: @@ -11569,20 +11571,21 @@ case 3: if (0 !== (flags & 1024)) if ( - ((finishedWork = finishedWork.stateNode.containerInfo), - (isViewTransitionEligible = finishedWork.nodeType), - 9 === isViewTransitionEligible) + ((isViewTransitionEligible = + finishedWork.stateNode.containerInfo), + (finishedWork = isViewTransitionEligible.nodeType), + 9 === finishedWork) ) - clearContainerSparingly(finishedWork); - else if (1 === isViewTransitionEligible) - switch (finishedWork.nodeName) { + clearContainerSparingly(isViewTransitionEligible); + else if (1 === finishedWork) + switch (isViewTransitionEligible.nodeName) { case "HEAD": case "HTML": case "BODY": - clearContainerSparingly(finishedWork); + clearContainerSparingly(isViewTransitionEligible); break; default: - finishedWork.textContent = ""; + isViewTransitionEligible.textContent = ""; } break; case 5: @@ -11593,23 +11596,41 @@ case 17: break; case 30: - isViewTransitionEligible && + if ( + isViewTransitionEligible && null !== current && - 0 !== (finishedWork.subtreeFlags & 8246) && - ((finishedWork = current), - (isViewTransitionEligible = finishedWork.memoizedProps), - (current = getViewTransitionName( - isViewTransitionEligible, - finishedWork.stateNode - )), - (viewTransitionHostInstanceIdx = 0), - applyViewTransitionToHostInstances( - finishedWork.child, - current, - isViewTransitionEligible.className, - (finishedWork.memoizedState = []), - !0 - )); + 0 !== (finishedWork.subtreeFlags & 8246) + ) + a: { + isViewTransitionEligible = current; + current = finishedWork; + finishedWork = getViewTransitionName( + isViewTransitionEligible.memoizedProps, + isViewTransitionEligible.stateNode + ); + current = current.memoizedProps; + flags = getViewTransitionClassName( + current.className, + current.update + ); + if ( + "none" === flags && + ((flags = getViewTransitionClassName( + current.className, + current.layout + )), + "none" === flags) + ) + break a; + viewTransitionHostInstanceIdx = 0; + applyViewTransitionToHostInstances( + isViewTransitionEligible.child, + finishedWork, + flags, + (isViewTransitionEligible.memoizedState = []), + !0 + ); + } break; default: if (0 !== (flags & 1024)) @@ -11617,10 +11638,10 @@ "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." ); } - finishedWork = fiber.sibling; - if (null !== finishedWork) { - finishedWork.return = fiber.return; - nextEffect = finishedWork; + isViewTransitionEligible = fiber.sibling; + if (null !== isViewTransitionEligible) { + isViewTransitionEligible.return = fiber.return; + nextEffect = isViewTransitionEligible; break; } nextEffect = fiber.return; @@ -11696,34 +11717,44 @@ throw Error( "Found a pair with an auto name. This is a bug in React." ); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - placement.child, - props.name, - props.className, - null, - !1 - ) || restoreViewTransitionOnHostInstances(placement.child, !1); + var name = props.name; + props = getViewTransitionClassName(props.className, props.share); + "none" !== props && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + placement.child, + name, + props, + null, + !1 + ) || restoreViewTransitionOnHostInstances(placement.child, !1)); } placement = placement.sibling; } } function commitEnterViewTransitions(placement) { if (30 === placement.tag) { - var props = placement.memoizedProps, - name = getViewTransitionName(props, placement.stateNode); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - placement.child, - name, - props.className, - null, - !1 - ) - ? (commitAppearingPairViewTransitions(placement), - placement.stateNode.paired || - scheduleViewTransitionEvent(placement, props.onEnter)) - : restoreViewTransitionOnHostInstances(placement.child, !1); + var state = placement.stateNode, + props = placement.memoizedProps, + name = getViewTransitionName(props, state), + className = getViewTransitionClassName( + props.className, + state.paired ? props.share : props.enter + ); + "none" !== className + ? ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + placement.child, + name, + className, + null, + !1 + ) + ? (commitAppearingPairViewTransitions(placement), + state.paired || + scheduleViewTransitionEvent(placement, props.onEnter)) + : restoreViewTransitionOnHostInstances(placement.child, !1)) + : commitAppearingPairViewTransitions(placement); } else if (0 !== (placement.subtreeFlags & 33554432)) for (placement = placement.child; null !== placement; ) commitEnterViewTransitions(placement), @@ -11745,23 +11776,29 @@ name = props.name; if (null != name && "auto" !== name) { var pair = appearingViewTransitions.get(name); - if ( - void 0 !== pair && - ((viewTransitionHostInstanceIdx = 0), - applyViewTransitionToHostInstances( - deletion.child, - name, + if (void 0 !== pair) { + var className = getViewTransitionClassName( props.className, - null, - !1 - ) - ? ((pair.paired = deletion.stateNode), - scheduleViewTransitionEvent(deletion, props.onShare)) - : restoreViewTransitionOnHostInstances(deletion.child, !1), - appearingViewTransitions.delete(name), - 0 === appearingViewTransitions.size) - ) - break; + props.share + ); + "none" !== className && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + deletion.child, + name, + className, + null, + !1 + ) + ? ((pair.paired = deletion.stateNode), + scheduleViewTransitionEvent(deletion, props.onShare)) + : restoreViewTransitionOnHostInstances( + deletion.child, + !1 + )); + appearingViewTransitions.delete(name); + if (0 === appearingViewTransitions.size) break; + } } } commitDeletedPairViewTransitions( @@ -11775,30 +11812,32 @@ function commitExitViewTransitions(deletion, appearingViewTransitions) { if (30 === deletion.tag) { var props = deletion.memoizedProps, - name = getViewTransitionName(props, deletion.stateNode); - viewTransitionHostInstanceIdx = 0; - if ( + name = getViewTransitionName(props, deletion.stateNode), + pair = + null !== appearingViewTransitions + ? appearingViewTransitions.get(name) + : void 0, + className = getViewTransitionClassName( + props.className, + void 0 !== pair ? props.share : props.exit + ); + "none" !== className && + ((viewTransitionHostInstanceIdx = 0), applyViewTransitionToHostInstances( deletion.child, name, - props.className, + className, null, !1 ) - ) - if (null !== appearingViewTransitions) { - var pair = appearingViewTransitions.get(name); - void 0 !== pair + ? void 0 !== pair ? ((pair.paired = deletion.stateNode), appearingViewTransitions.delete(name), scheduleViewTransitionEvent(deletion, props.onShare)) - : scheduleViewTransitionEvent(deletion, props.onExit); - commitDeletedPairViewTransitions( - deletion, - appearingViewTransitions - ); - } else scheduleViewTransitionEvent(deletion, props.onExit); - else restoreViewTransitionOnHostInstances(deletion.child, !1); + : scheduleViewTransitionEvent(deletion, props.onExit) + : restoreViewTransitionOnHostInstances(deletion.child, !1)); + null !== appearingViewTransitions && + commitDeletedPairViewTransitions(deletion, appearingViewTransitions); } else if (0 !== (deletion.subtreeFlags & 33554432)) for (deletion = deletion.child; null !== deletion; ) commitExitViewTransitions(deletion, appearingViewTransitions), @@ -11812,14 +11851,16 @@ if (30 === changedParent.tag) { var props = changedParent.memoizedProps, name = getViewTransitionName(props, changedParent.stateNode); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - changedParent.child, - name, - props.className, - (changedParent.memoizedState = []), - !1 - ); + props = getViewTransitionClassName(props.className, props.layout); + "none" !== props && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + changedParent.child, + name, + props, + (changedParent.memoizedState = []), + !1 + )); } else 0 !== (changedParent.subtreeFlags & 33554432) && commitNestedViewTransitions(changedParent); @@ -11871,10 +11912,42 @@ restoreNestedViewTransitions(changedParent), (changedParent = changedParent.sibling); } + function cancelViewTransitionHostInstances( + currentViewTransition, + child, + stopAtNestedViewTransitions + ) { + for (; null !== child; ) { + if (5 === child.tag) { + var instance = child.stateNode, + oldName = getViewTransitionName( + currentViewTransition.memoizedProps, + currentViewTransition.stateNode + ); + null === viewTransitionCancelableChildren && + (viewTransitionCancelableChildren = []); + viewTransitionCancelableChildren.push( + instance, + oldName, + child.memoizedProps + ); + viewTransitionHostInstanceIdx++; + } else if (22 !== child.tag || null === child.memoizedState) + (30 === child.tag && stopAtNestedViewTransitions) || + cancelViewTransitionHostInstances( + currentViewTransition, + child.child, + stopAtNestedViewTransitions + ); + child = child.sibling; + } + } function measureViewTransitionHostInstances( currentViewTransition, parentViewTransition, child, + name, + className, previousMeasurements, stopAtNestedViewTransitions ) { @@ -11913,20 +11986,15 @@ nextMeasurement && (parentViewTransition.flags |= 32); } else parentViewTransition.flags |= 32; 0 !== (parentViewTransition.flags & 4) && - ((JSCompiler_temp = parentViewTransition.memoizedProps), - (nextMeasurement = getViewTransitionName( - JSCompiler_temp, - parentViewTransition.stateNode - )), - (previousMeasurement = instance), - (JSCompiler_temp = JSCompiler_temp.className), - (previousMeasurement.style.viewTransitionName = + ((nextMeasurement = instance), + (previousMeasurement = className), + (nextMeasurement.style.viewTransitionName = 0 === viewTransitionHostInstanceIdx - ? nextMeasurement - : nextMeasurement + "_" + viewTransitionHostInstanceIdx), - null != JSCompiler_temp && - (previousMeasurement.style.viewTransitionClass = - JSCompiler_temp)); + ? name + : name + "_" + viewTransitionHostInstanceIdx), + null != previousMeasurement && + (nextMeasurement.style.viewTransitionClass = + previousMeasurement)); (inViewport && 0 !== (parentViewTransition.flags & 4)) || ((nextMeasurement = getViewTransitionName( currentViewTransition.memoizedProps, @@ -11947,6 +12015,8 @@ currentViewTransition, parentViewTransition, child.child, + name, + className, previousMeasurements, stopAtNestedViewTransitions ) && (inViewport = !0); @@ -11958,19 +12028,27 @@ for (changedParent = changedParent.child; null !== changedParent; ) { if (30 === changedParent.tag) { var current = changedParent.alternate; - null !== current && - ((viewTransitionHostInstanceIdx = 0), - measureViewTransitionHostInstances( + if (null !== current) { + var props = changedParent.memoizedProps, + name = getViewTransitionName(props, changedParent.stateNode), + className = getViewTransitionClassName( + props.className, + props.layout + ); + viewTransitionHostInstanceIdx = 0; + current = measureViewTransitionHostInstances( current, changedParent, changedParent.child, + name, + className, changedParent.memoizedState, !1 - ), - scheduleViewTransitionEvent( - changedParent, - changedParent.memoizedProps.onLayout - )); + ); + 0 !== (changedParent.flags & 4) && + current && + scheduleViewTransitionEvent(changedParent, props.onLayout); + } } else 0 !== (changedParent.subtreeFlags & 33554432) && measureNestedViewTransitions(changedParent); @@ -13030,9 +13108,7 @@ for (parentFiber = parentFiber.child; null !== parentFiber; ) commitAfterMutationEffectsOnFiber(parentFiber, root), (parentFiber = parentFiber.sibling); - else - measureNestedViewTransitions(parentFiber), - 0 !== (parentFiber.flags & 32) && (viewTransitionContextChanged = !0); + else measureNestedViewTransitions(parentFiber); } function commitAfterMutationEffectsOnFiber(finishedWork, root) { var current = finishedWork.alternate; @@ -13063,15 +13139,15 @@ } ); } - root = root.containerInfo; - root = - 9 === root.nodeType - ? root.documentElement - : root.ownerDocument.documentElement; - null !== root && - "" === root.style.viewTransitionName && - ((root.style.viewTransitionName = "none"), - root.animate( + finishedWork = root.containerInfo; + finishedWork = + 9 === finishedWork.nodeType + ? finishedWork.documentElement + : finishedWork.ownerDocument.documentElement; + null !== finishedWork && + "" === finishedWork.style.viewTransitionName && + ((finishedWork.style.viewTransitionName = "none"), + finishedWork.animate( { opacity: [0, 0], pointerEvents: ["none", "none"] }, { duration: 0, @@ -13079,7 +13155,7 @@ pseudoElement: "::view-transition-group(root)" } ), - root.animate( + finishedWork.animate( { width: [0, 0], height: [0, 0] }, { duration: 0, @@ -13099,32 +13175,70 @@ : recursivelyTraverseAfterMutationEffects(root, finishedWork)); break; case 30: - 0 !== (finishedWork.subtreeFlags & 8246) && - ((i = 0 !== (finishedWork.flags & 4)), - (oldName = viewTransitionContextChanged), - (instance = viewTransitionCancelableChildren), - (viewTransitionContextChanged = !1), - (viewTransitionCancelableChildren = null), - recursivelyTraverseAfterMutationEffects(root, finishedWork), - viewTransitionContextChanged && (finishedWork.flags |= 4), - (viewTransitionHostInstanceIdx = 0), - (root = current.memoizedState), - (current = measureViewTransitionHostInstances( - current, - finishedWork, - finishedWork.child, - root, - !0 - )), - viewTransitionHostInstanceIdx !== - (null === root ? 0 : root.length) && (finishedWork.flags |= 32), + if (0 !== (finishedWork.subtreeFlags & 8246)) { + i = 0 !== (finishedWork.flags & 4); + oldName = viewTransitionContextChanged; + instance = viewTransitionCancelableChildren; + viewTransitionContextChanged = !1; + viewTransitionCancelableChildren = null; + recursivelyTraverseAfterMutationEffects(root, finishedWork); + viewTransitionContextChanged && (finishedWork.flags |= 4); + a: { + root = finishedWork.memoizedProps; + var updateClassName = getViewTransitionClassName( + root.className, + root.update + ), + layoutClassName = getViewTransitionClassName( + root.className, + root.update + ); + if ("none" === updateClassName) { + if ("none" === layoutClassName) { + current = !1; + break a; + } + finishedWork.flags &= -5; + updateClassName = layoutClassName; + } else if (0 === (finishedWork.flags & 4)) { + if ("none" === layoutClassName) { + viewTransitionHostInstanceIdx = 0; + cancelViewTransitionHostInstances( + current, + finishedWork.child, + !0 + ); + current = !1; + break a; + } + updateClassName = layoutClassName; + } + layoutClassName = getViewTransitionName( + root, + finishedWork.stateNode + ); + viewTransitionHostInstanceIdx = 0; + root = current.memoizedState; + current = measureViewTransitionHostInstances( + current, + finishedWork, + finishedWork.child, + layoutClassName, + updateClassName, + root, + !0 + ); + viewTransitionHostInstanceIdx !== + (null === root ? 0 : root.length) && + (finishedWork.flags |= 32); + } 0 !== (finishedWork.flags & 4) && current - ? ((root = finishedWork.memoizedProps), + ? ((current = finishedWork.memoizedProps), scheduleViewTransitionEvent( finishedWork, i || viewTransitionContextChanged - ? root.onUpdate - : root.onLayout + ? current.onUpdate + : current.onLayout ), (viewTransitionCancelableChildren = instance)) : null !== instance && @@ -13132,9 +13246,10 @@ instance, viewTransitionCancelableChildren ), - (viewTransitionCancelableChildren = instance)), - (viewTransitionContextChanged = - 0 !== (finishedWork.flags & 32) ? !0 : oldName)); + (viewTransitionCancelableChildren = instance)); + viewTransitionContextChanged = + 0 !== (finishedWork.flags & 32) ? !0 : oldName; + } break; default: recursivelyTraverseAfterMutationEffects(root, finishedWork); @@ -14739,6 +14854,15 @@ ? props.name : instance.autoName; } + function getViewTransitionClassName(className, eventClassName) { + return null == eventClassName + ? className + : "none" === eventClassName + ? eventClassName + : null != className + ? className + " " + eventClassName + : eventClassName; + } function markUpdate(workInProgress) { workInProgress.flags |= 4; } @@ -26723,11 +26847,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-cabd8a0e-20250113" !== 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.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -26764,10 +26888,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.1.0-experimental-540efebc-20250112", + version: "19.1.0-experimental-cabd8a0e-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-540efebc-20250112" + reconcilerVersion: "19.1.0-experimental-cabd8a0e-20250113" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -27241,7 +27365,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.1.0-experimental-540efebc-20250112"; + exports.version = "19.1.0-experimental-cabd8a0e-20250113"; "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 9297340ba2648..c2a00a3c056cb 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 @@ -8475,22 +8475,39 @@ function commitBeforeMutationEffects_complete( case 17: break; case 30: - isViewTransitionEligible && + if ( + isViewTransitionEligible && null !== current && - 0 !== (fiber.subtreeFlags & 8246) && - ((isViewTransitionEligible = current.memoizedProps), - (flags = getViewTransitionName( - isViewTransitionEligible, - current.stateNode - )), - (viewTransitionHostInstanceIdx = 0), - applyViewTransitionToHostInstances( - current.child, - flags, - isViewTransitionEligible.className, - (current.memoizedState = []), - !0 - )); + 0 !== (fiber.subtreeFlags & 8246) + ) + a: { + isViewTransitionEligible = getViewTransitionName( + current.memoizedProps, + current.stateNode + ); + flags = fiber.memoizedProps; + instance = getViewTransitionClassName( + flags.className, + flags.update + ); + if ( + "none" === instance && + ((instance = getViewTransitionClassName( + flags.className, + flags.layout + )), + "none" === instance) + ) + break a; + viewTransitionHostInstanceIdx = 0; + applyViewTransitionToHostInstances( + current.child, + isViewTransitionEligible, + instance, + (current.memoizedState = []), + !0 + ); + } break; default: if (0 !== (flags & 1024)) throw Error(formatProdErrorMessage(163)); @@ -8572,34 +8589,44 @@ function commitAppearingPairViewTransitions(placement) { var props = placement.memoizedProps; if (null == props.name || "auto" === props.name) throw Error(formatProdErrorMessage(544)); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - placement.child, - props.name, - props.className, - null, - !1 - ) || restoreViewTransitionOnHostInstances(placement.child, !1); + var name = props.name; + props = getViewTransitionClassName(props.className, props.share); + "none" !== props && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + placement.child, + name, + props, + null, + !1 + ) || restoreViewTransitionOnHostInstances(placement.child, !1)); } placement = placement.sibling; } } function commitEnterViewTransitions(placement) { if (30 === placement.tag) { - var props = placement.memoizedProps, - name = getViewTransitionName(props, placement.stateNode); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - placement.child, - name, - props.className, - null, - !1 - ) - ? (commitAppearingPairViewTransitions(placement), - placement.stateNode.paired || - scheduleViewTransitionEvent(placement, props.onEnter)) - : restoreViewTransitionOnHostInstances(placement.child, !1); + var state = placement.stateNode, + props = placement.memoizedProps, + name = getViewTransitionName(props, state), + className = getViewTransitionClassName( + props.className, + state.paired ? props.share : props.enter + ); + "none" !== className + ? ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + placement.child, + name, + className, + null, + !1 + ) + ? (commitAppearingPairViewTransitions(placement), + state.paired || + scheduleViewTransitionEvent(placement, props.onEnter)) + : restoreViewTransitionOnHostInstances(placement.child, !1)) + : commitAppearingPairViewTransitions(placement); } else if (0 !== (placement.subtreeFlags & 33554432)) for (placement = placement.child; null !== placement; ) commitEnterViewTransitions(placement), (placement = placement.sibling); @@ -8617,23 +8644,26 @@ function commitDeletedPairViewTransitions(deletion, appearingViewTransitions) { name = props.name; if (null != name && "auto" !== name) { var pair = appearingViewTransitions.get(name); - if ( - void 0 !== pair && - ((viewTransitionHostInstanceIdx = 0), - applyViewTransitionToHostInstances( - deletion.child, - name, + if (void 0 !== pair) { + var className = getViewTransitionClassName( props.className, - null, - !1 - ) - ? ((pair.paired = deletion.stateNode), - scheduleViewTransitionEvent(deletion, props.onShare)) - : restoreViewTransitionOnHostInstances(deletion.child, !1), - appearingViewTransitions.delete(name), - 0 === appearingViewTransitions.size) - ) - break; + props.share + ); + "none" !== className && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + deletion.child, + name, + className, + null, + !1 + ) + ? ((pair.paired = deletion.stateNode), + scheduleViewTransitionEvent(deletion, props.onShare)) + : restoreViewTransitionOnHostInstances(deletion.child, !1)); + appearingViewTransitions.delete(name); + if (0 === appearingViewTransitions.size) break; + } } } commitDeletedPairViewTransitions(deletion, appearingViewTransitions); @@ -8644,27 +8674,32 @@ function commitDeletedPairViewTransitions(deletion, appearingViewTransitions) { function commitExitViewTransitions(deletion, appearingViewTransitions) { if (30 === deletion.tag) { var props = deletion.memoizedProps, - name = getViewTransitionName(props, deletion.stateNode); - viewTransitionHostInstanceIdx = 0; - if ( + name = getViewTransitionName(props, deletion.stateNode), + pair = + null !== appearingViewTransitions + ? appearingViewTransitions.get(name) + : void 0, + className = getViewTransitionClassName( + props.className, + void 0 !== pair ? props.share : props.exit + ); + "none" !== className && + ((viewTransitionHostInstanceIdx = 0), applyViewTransitionToHostInstances( deletion.child, name, - props.className, + className, null, !1 ) - ) - if (null !== appearingViewTransitions) { - var pair = appearingViewTransitions.get(name); - void 0 !== pair + ? void 0 !== pair ? ((pair.paired = deletion.stateNode), appearingViewTransitions.delete(name), scheduleViewTransitionEvent(deletion, props.onShare)) - : scheduleViewTransitionEvent(deletion, props.onExit); - commitDeletedPairViewTransitions(deletion, appearingViewTransitions); - } else scheduleViewTransitionEvent(deletion, props.onExit); - else restoreViewTransitionOnHostInstances(deletion.child, !1); + : scheduleViewTransitionEvent(deletion, props.onExit) + : restoreViewTransitionOnHostInstances(deletion.child, !1)); + null !== appearingViewTransitions && + commitDeletedPairViewTransitions(deletion, appearingViewTransitions); } else if (0 !== (deletion.subtreeFlags & 33554432)) for (deletion = deletion.child; null !== deletion; ) commitExitViewTransitions(deletion, appearingViewTransitions), @@ -8678,14 +8713,16 @@ function commitNestedViewTransitions(changedParent) { if (30 === changedParent.tag) { var props = changedParent.memoizedProps, name = getViewTransitionName(props, changedParent.stateNode); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - changedParent.child, - name, - props.className, - (changedParent.memoizedState = []), - !1 - ); + props = getViewTransitionClassName(props.className, props.layout); + "none" !== props && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + changedParent.child, + name, + props, + (changedParent.memoizedState = []), + !1 + )); } else 0 !== (changedParent.subtreeFlags & 33554432) && commitNestedViewTransitions(changedParent); @@ -8736,10 +8773,42 @@ function restoreNestedViewTransitions(changedParent) { restoreNestedViewTransitions(changedParent), (changedParent = changedParent.sibling); } +function cancelViewTransitionHostInstances( + currentViewTransition, + child, + stopAtNestedViewTransitions +) { + for (; null !== child; ) { + if (5 === child.tag) { + var instance = child.stateNode, + oldName = getViewTransitionName( + currentViewTransition.memoizedProps, + currentViewTransition.stateNode + ); + null === viewTransitionCancelableChildren && + (viewTransitionCancelableChildren = []); + viewTransitionCancelableChildren.push( + instance, + oldName, + child.memoizedProps + ); + viewTransitionHostInstanceIdx++; + } else if (22 !== child.tag || null === child.memoizedState) + (30 === child.tag && stopAtNestedViewTransitions) || + cancelViewTransitionHostInstances( + currentViewTransition, + child.child, + stopAtNestedViewTransitions + ); + child = child.sibling; + } +} function measureViewTransitionHostInstances( currentViewTransition, parentViewTransition, child, + name, + className, previousMeasurements, stopAtNestedViewTransitions ) { @@ -8777,19 +8846,14 @@ function measureViewTransitionHostInstances( nextMeasurement && (parentViewTransition.flags |= 32); } else parentViewTransition.flags |= 32; 0 !== (parentViewTransition.flags & 4) && - ((JSCompiler_temp = parentViewTransition.memoizedProps), - (nextMeasurement = getViewTransitionName( - JSCompiler_temp, - parentViewTransition.stateNode - )), - (previousMeasurement = instance), - (JSCompiler_temp = JSCompiler_temp.className), - (previousMeasurement.style.viewTransitionName = + ((nextMeasurement = instance), + (previousMeasurement = className), + (nextMeasurement.style.viewTransitionName = 0 === viewTransitionHostInstanceIdx - ? nextMeasurement - : nextMeasurement + "_" + viewTransitionHostInstanceIdx), - null != JSCompiler_temp && - (previousMeasurement.style.viewTransitionClass = JSCompiler_temp)); + ? name + : name + "_" + viewTransitionHostInstanceIdx), + null != previousMeasurement && + (nextMeasurement.style.viewTransitionClass = previousMeasurement)); (inViewport && 0 !== (parentViewTransition.flags & 4)) || ((nextMeasurement = getViewTransitionName( currentViewTransition.memoizedProps, @@ -8810,6 +8874,8 @@ function measureViewTransitionHostInstances( currentViewTransition, parentViewTransition, child.child, + name, + className, previousMeasurements, stopAtNestedViewTransitions ) && (inViewport = !0); @@ -8821,19 +8887,24 @@ function measureNestedViewTransitions(changedParent) { for (changedParent = changedParent.child; null !== changedParent; ) { if (30 === changedParent.tag) { var current = changedParent.alternate; - null !== current && - ((viewTransitionHostInstanceIdx = 0), - measureViewTransitionHostInstances( + if (null !== current) { + var props = changedParent.memoizedProps, + name = getViewTransitionName(props, changedParent.stateNode), + className = getViewTransitionClassName(props.className, props.layout); + viewTransitionHostInstanceIdx = 0; + current = measureViewTransitionHostInstances( current, changedParent, changedParent.child, + name, + className, changedParent.memoizedState, !1 - ), - scheduleViewTransitionEvent( - changedParent, - changedParent.memoizedProps.onLayout - )); + ); + 0 !== (changedParent.flags & 4) && + current && + scheduleViewTransitionEvent(changedParent, props.onLayout); + } } else 0 !== (changedParent.subtreeFlags & 33554432) && measureNestedViewTransitions(changedParent); @@ -9821,9 +9892,7 @@ function recursivelyTraverseAfterMutationEffects(root, parentFiber) { for (parentFiber = parentFiber.child; null !== parentFiber; ) commitAfterMutationEffectsOnFiber(parentFiber, root), (parentFiber = parentFiber.sibling); - else - measureNestedViewTransitions(parentFiber), - 0 !== (parentFiber.flags & 32) && (viewTransitionContextChanged = !0); + else measureNestedViewTransitions(parentFiber); } function commitAfterMutationEffectsOnFiber(finishedWork, root) { var current = finishedWork.alternate; @@ -9853,15 +9922,15 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { } ); } - root = root.containerInfo; - root = - 9 === root.nodeType - ? root.documentElement - : root.ownerDocument.documentElement; - null !== root && - "" === root.style.viewTransitionName && - ((root.style.viewTransitionName = "none"), - root.animate( + finishedWork = root.containerInfo; + finishedWork = + 9 === finishedWork.nodeType + ? finishedWork.documentElement + : finishedWork.ownerDocument.documentElement; + null !== finishedWork && + "" === finishedWork.style.viewTransitionName && + ((finishedWork.style.viewTransitionName = "none"), + finishedWork.animate( { opacity: [0, 0], pointerEvents: ["none", "none"] }, { duration: 0, @@ -9869,7 +9938,7 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { pseudoElement: "::view-transition-group(root)" } ), - root.animate( + finishedWork.animate( { width: [0, 0], height: [0, 0] }, { duration: 0, @@ -9889,39 +9958,77 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { : recursivelyTraverseAfterMutationEffects(root, finishedWork)); break; case 30: - 0 !== (finishedWork.subtreeFlags & 8246) && - ((i = 0 !== (finishedWork.flags & 4)), - (oldName = viewTransitionContextChanged), - (instance = viewTransitionCancelableChildren), - (viewTransitionContextChanged = !1), - (viewTransitionCancelableChildren = null), - recursivelyTraverseAfterMutationEffects(root, finishedWork), - viewTransitionContextChanged && (finishedWork.flags |= 4), - (viewTransitionHostInstanceIdx = 0), - (root = current.memoizedState), - (current = measureViewTransitionHostInstances( - current, - finishedWork, - finishedWork.child, - root, - !0 - )), - viewTransitionHostInstanceIdx !== (null === root ? 0 : root.length) && - (finishedWork.flags |= 32), + if (0 !== (finishedWork.subtreeFlags & 8246)) { + i = 0 !== (finishedWork.flags & 4); + oldName = viewTransitionContextChanged; + instance = viewTransitionCancelableChildren; + viewTransitionContextChanged = !1; + viewTransitionCancelableChildren = null; + recursivelyTraverseAfterMutationEffects(root, finishedWork); + viewTransitionContextChanged && (finishedWork.flags |= 4); + a: { + root = finishedWork.memoizedProps; + var updateClassName = getViewTransitionClassName( + root.className, + root.update + ), + layoutClassName = getViewTransitionClassName( + root.className, + root.update + ); + if ("none" === updateClassName) { + if ("none" === layoutClassName) { + current = !1; + break a; + } + finishedWork.flags &= -5; + updateClassName = layoutClassName; + } else if (0 === (finishedWork.flags & 4)) { + if ("none" === layoutClassName) { + viewTransitionHostInstanceIdx = 0; + cancelViewTransitionHostInstances( + current, + finishedWork.child, + !0 + ); + current = !1; + break a; + } + updateClassName = layoutClassName; + } + layoutClassName = getViewTransitionName( + root, + finishedWork.stateNode + ); + viewTransitionHostInstanceIdx = 0; + root = current.memoizedState; + current = measureViewTransitionHostInstances( + current, + finishedWork, + finishedWork.child, + layoutClassName, + updateClassName, + root, + !0 + ); + viewTransitionHostInstanceIdx !== + (null === root ? 0 : root.length) && (finishedWork.flags |= 32); + } 0 !== (finishedWork.flags & 4) && current - ? ((root = finishedWork.memoizedProps), + ? ((current = finishedWork.memoizedProps), scheduleViewTransitionEvent( finishedWork, i || viewTransitionContextChanged - ? root.onUpdate - : root.onLayout + ? current.onUpdate + : current.onLayout ), (viewTransitionCancelableChildren = instance)) : null !== instance && (instance.push.apply(instance, viewTransitionCancelableChildren), - (viewTransitionCancelableChildren = instance)), - (viewTransitionContextChanged = - 0 !== (finishedWork.flags & 32) ? !0 : oldName)); + (viewTransitionCancelableChildren = instance)); + viewTransitionContextChanged = + 0 !== (finishedWork.flags & 32) ? !0 : oldName; + } break; default: recursivelyTraverseAfterMutationEffects(root, finishedWork); @@ -11297,6 +11404,15 @@ function getViewTransitionName(props, instance) { ? props.name : instance.autoName; } +function getViewTransitionClassName(className, eventClassName) { + return null == eventClassName + ? className + : "none" === eventClassName + ? eventClassName + : null != className + ? className + " " + eventClassName + : eventClassName; +} function markUpdate(workInProgress) { workInProgress.flags |= 4; } @@ -14032,20 +14148,20 @@ function extractEvents$1( } } for ( - var i$jscomp$inline_1695 = 0; - i$jscomp$inline_1695 < simpleEventPluginEvents.length; - i$jscomp$inline_1695++ + var i$jscomp$inline_1700 = 0; + i$jscomp$inline_1700 < simpleEventPluginEvents.length; + i$jscomp$inline_1700++ ) { - var eventName$jscomp$inline_1696 = - simpleEventPluginEvents[i$jscomp$inline_1695], - domEventName$jscomp$inline_1697 = - eventName$jscomp$inline_1696.toLowerCase(), - capitalizedEvent$jscomp$inline_1698 = - eventName$jscomp$inline_1696[0].toUpperCase() + - eventName$jscomp$inline_1696.slice(1); + var eventName$jscomp$inline_1701 = + simpleEventPluginEvents[i$jscomp$inline_1700], + domEventName$jscomp$inline_1702 = + eventName$jscomp$inline_1701.toLowerCase(), + capitalizedEvent$jscomp$inline_1703 = + eventName$jscomp$inline_1701[0].toUpperCase() + + eventName$jscomp$inline_1701.slice(1); registerSimpleEvent( - domEventName$jscomp$inline_1697, - "on" + capitalizedEvent$jscomp$inline_1698 + domEventName$jscomp$inline_1702, + "on" + capitalizedEvent$jscomp$inline_1703 ); } registerSimpleEvent(ANIMATION_END, "onAnimationEnd"); @@ -17687,16 +17803,16 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { 0 === i && attemptExplicitHydrationTarget(target); } }; -var isomorphicReactPackageVersion$jscomp$inline_1942 = React.version; +var isomorphicReactPackageVersion$jscomp$inline_1947 = React.version; if ( - "19.1.0-experimental-540efebc-20250112" !== - isomorphicReactPackageVersion$jscomp$inline_1942 + "19.1.0-experimental-cabd8a0e-20250113" !== + isomorphicReactPackageVersion$jscomp$inline_1947 ) throw Error( formatProdErrorMessage( 527, - isomorphicReactPackageVersion$jscomp$inline_1942, - "19.1.0-experimental-540efebc-20250112" + isomorphicReactPackageVersion$jscomp$inline_1947, + "19.1.0-experimental-cabd8a0e-20250113" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -17716,24 +17832,24 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { null === componentOrElement ? null : componentOrElement.stateNode; return componentOrElement; }; -var internals$jscomp$inline_2464 = { +var internals$jscomp$inline_2471 = { bundleType: 0, - version: "19.1.0-experimental-540efebc-20250112", + version: "19.1.0-experimental-cabd8a0e-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-540efebc-20250112" + reconcilerVersion: "19.1.0-experimental-cabd8a0e-20250113" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_2465 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_2472 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_2465.isDisabled && - hook$jscomp$inline_2465.supportsFiber + !hook$jscomp$inline_2472.isDisabled && + hook$jscomp$inline_2472.supportsFiber ) try { - (rendererID = hook$jscomp$inline_2465.inject( - internals$jscomp$inline_2464 + (rendererID = hook$jscomp$inline_2472.inject( + internals$jscomp$inline_2471 )), - (injectedHook = hook$jscomp$inline_2465); + (injectedHook = hook$jscomp$inline_2472); } catch (err) {} } function noop() {} @@ -17988,7 +18104,7 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.1.0-experimental-540efebc-20250112"; +exports.version = "19.1.0-experimental-cabd8a0e-20250113"; "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 510214b1a7258..4369b340ad7ac 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 @@ -9291,5 +9291,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.1.0-experimental-540efebc-20250112"; + exports.version = "19.1.0-experimental-cabd8a0e-20250113"; })(); 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 3e815d8116270..890a357face8a 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 @@ -6056,4 +6056,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.1.0-experimental-540efebc-20250112"; +exports.version = "19.1.0-experimental-cabd8a0e-20250113"; 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 90de5da07ad92..106e35445b0de 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 @@ -9291,5 +9291,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.1.0-experimental-540efebc-20250112"; + exports.version = "19.1.0-experimental-cabd8a0e-20250113"; })(); 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 0da80f89093b5..b5eb08331fd9e 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 @@ -6147,4 +6147,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.1.0-experimental-540efebc-20250112"; +exports.version = "19.1.0-experimental-cabd8a0e-20250113"; 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 a8859317497c4..6896b72082d08 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 @@ -8201,11 +8201,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-cabd8a0e-20250113" !== 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.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react-experimental"), @@ -9973,5 +9973,5 @@ startWork(request); }); }; - exports.version = "19.1.0-experimental-540efebc-20250112"; + exports.version = "19.1.0-experimental-cabd8a0e-20250113"; })(); 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 ec577991325be..afa680304ac8a 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 @@ -6584,12 +6584,12 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-cabd8a0e-20250113" !== isomorphicReactPackageVersion) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion, - "19.1.0-experimental-540efebc-20250112" + "19.1.0-experimental-cabd8a0e-20250113" ) ); } @@ -6844,4 +6844,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.1.0-experimental-540efebc-20250112"; +exports.version = "19.1.0-experimental-cabd8a0e-20250113"; 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 8842c522cdd06..19a67e3fd173b 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 @@ -6065,13 +6065,13 @@ function addToReplayParent(node, parentKeyPath, trackedPostpones) { } var isomorphicReactPackageVersion$jscomp$inline_777 = React.version; if ( - "19.1.0-experimental-540efebc-20250112" !== + "19.1.0-experimental-cabd8a0e-20250113" !== isomorphicReactPackageVersion$jscomp$inline_777 ) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion$jscomp$inline_777 + - "\n - react-dom: 19.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); exports.renderToReadableStream = function (children, options) { return new Promise(function (resolve, reject) { @@ -6162,4 +6162,4 @@ exports.renderToReadableStream = function (children, options) { startWork(request); }); }; -exports.version = "19.1.0-experimental-540efebc-20250112"; +exports.version = "19.1.0-experimental-cabd8a0e-20250113"; 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 adbee19a21fb3..c31442849830b 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 @@ -8224,11 +8224,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-cabd8a0e-20250113" !== 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.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react-experimental"), @@ -10003,5 +10003,5 @@ const setTimeoutOrImmediate = ? globalThis['set' + 'Immediate'] : setTimeout; - exports.version = "19.1.0-experimental-540efebc-20250112"; + exports.version = "19.1.0-experimental-cabd8a0e-20250113"; })(); 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 e9f9fc61ef29f..0fe1765182f4f 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 @@ -6690,11 +6690,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-cabd8a0e-20250113" !== 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.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -6959,4 +6959,4 @@ const setTimeoutOrImmediate = ? globalThis['set' + 'Immediate'] : setTimeout; -exports.version = "19.1.0-experimental-540efebc-20250112"; +exports.version = "19.1.0-experimental-cabd8a0e-20250113"; 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 4979a39a7bd48..4e292a3074ed0 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 @@ -8088,11 +8088,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-cabd8a0e-20250113" !== 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.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } function createDrainHandler(destination, request) { @@ -9853,5 +9853,5 @@ } }; }; - exports.version = "19.1.0-experimental-540efebc-20250112"; + exports.version = "19.1.0-experimental-cabd8a0e-20250113"; })(); 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 0f495975cac2e..b3aa6354934a9 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 @@ -6569,11 +6569,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-cabd8a0e-20250113" !== 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.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -6824,4 +6824,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.1.0-experimental-540efebc-20250112"; +exports.version = "19.1.0-experimental-cabd8a0e-20250113"; 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 2a25b699f883c..416485e23beb2 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 @@ -9366,33 +9366,33 @@ return current; } function updateSuspenseComponent(current, workInProgress, renderLanes) { - var JSCompiler_object_inline_componentStack_2579; - var JSCompiler_object_inline_stack_2578 = workInProgress.pendingProps; + var JSCompiler_object_inline_componentStack_2586; + var JSCompiler_object_inline_stack_2585 = workInProgress.pendingProps; shouldSuspendImpl(workInProgress) && (workInProgress.flags |= 128); - var JSCompiler_object_inline_message_2576 = !1; + var JSCompiler_object_inline_message_2583 = !1; var didSuspend = 0 !== (workInProgress.flags & 128); - (JSCompiler_object_inline_componentStack_2579 = didSuspend) || - (JSCompiler_object_inline_componentStack_2579 = + (JSCompiler_object_inline_componentStack_2586 = didSuspend) || + (JSCompiler_object_inline_componentStack_2586 = null !== current && null === current.memoizedState ? !1 : 0 !== (suspenseStackCursor.current & ForceSuspenseFallback)); - JSCompiler_object_inline_componentStack_2579 && - ((JSCompiler_object_inline_message_2576 = !0), + JSCompiler_object_inline_componentStack_2586 && + ((JSCompiler_object_inline_message_2583 = !0), (workInProgress.flags &= -129)); - JSCompiler_object_inline_componentStack_2579 = + JSCompiler_object_inline_componentStack_2586 = 0 !== (workInProgress.flags & 32); workInProgress.flags &= -33; if (null === current) { if (isHydrating) { - JSCompiler_object_inline_message_2576 + JSCompiler_object_inline_message_2583 ? pushPrimaryTreeSuspenseHandler(workInProgress) : reuseSuspenseHandlerOnStack(workInProgress); if (isHydrating) { - var JSCompiler_object_inline_digest_2577 = nextHydratableInstance; + var JSCompiler_object_inline_digest_2584 = nextHydratableInstance; var JSCompiler_temp; - if (!(JSCompiler_temp = !JSCompiler_object_inline_digest_2577)) { + if (!(JSCompiler_temp = !JSCompiler_object_inline_digest_2584)) { c: { - var instance = JSCompiler_object_inline_digest_2577; + var instance = JSCompiler_object_inline_digest_2584; for ( JSCompiler_temp = rootOrSingletonContext; 8 !== instance.nodeType; @@ -9434,87 +9434,87 @@ JSCompiler_temp && (warnNonHydratedInstance( workInProgress, - JSCompiler_object_inline_digest_2577 + JSCompiler_object_inline_digest_2584 ), throwOnHydrationMismatch(workInProgress)); } - JSCompiler_object_inline_digest_2577 = workInProgress.memoizedState; + JSCompiler_object_inline_digest_2584 = workInProgress.memoizedState; if ( - null !== JSCompiler_object_inline_digest_2577 && - ((JSCompiler_object_inline_digest_2577 = - JSCompiler_object_inline_digest_2577.dehydrated), - null !== JSCompiler_object_inline_digest_2577) + null !== JSCompiler_object_inline_digest_2584 && + ((JSCompiler_object_inline_digest_2584 = + JSCompiler_object_inline_digest_2584.dehydrated), + null !== JSCompiler_object_inline_digest_2584) ) return ( - isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2577) + isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2584) ? (workInProgress.lanes = 32) : (workInProgress.lanes = 536870912), null ); popSuspenseHandler(workInProgress); } - JSCompiler_object_inline_digest_2577 = - JSCompiler_object_inline_stack_2578.children; - JSCompiler_temp = JSCompiler_object_inline_stack_2578.fallback; - if (JSCompiler_object_inline_message_2576) + JSCompiler_object_inline_digest_2584 = + JSCompiler_object_inline_stack_2585.children; + JSCompiler_temp = JSCompiler_object_inline_stack_2585.fallback; + if (JSCompiler_object_inline_message_2583) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_stack_2578 = + (JSCompiler_object_inline_stack_2585 = mountSuspenseFallbackChildren( workInProgress, - JSCompiler_object_inline_digest_2577, + JSCompiler_object_inline_digest_2584, JSCompiler_temp, renderLanes )), - (JSCompiler_object_inline_message_2576 = workInProgress.child), - (JSCompiler_object_inline_message_2576.memoizedState = + (JSCompiler_object_inline_message_2583 = workInProgress.child), + (JSCompiler_object_inline_message_2583.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_message_2576.childLanes = + (JSCompiler_object_inline_message_2583.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2579, + JSCompiler_object_inline_componentStack_2586, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - JSCompiler_object_inline_stack_2578 + JSCompiler_object_inline_stack_2585 ); if ( "number" === - typeof JSCompiler_object_inline_stack_2578.unstable_expectedLoadTime + typeof JSCompiler_object_inline_stack_2585.unstable_expectedLoadTime ) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_stack_2578 = + (JSCompiler_object_inline_stack_2585 = mountSuspenseFallbackChildren( workInProgress, - JSCompiler_object_inline_digest_2577, + JSCompiler_object_inline_digest_2584, JSCompiler_temp, renderLanes )), - (JSCompiler_object_inline_message_2576 = workInProgress.child), - (JSCompiler_object_inline_message_2576.memoizedState = + (JSCompiler_object_inline_message_2583 = workInProgress.child), + (JSCompiler_object_inline_message_2583.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_message_2576.childLanes = + (JSCompiler_object_inline_message_2583.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2579, + JSCompiler_object_inline_componentStack_2586, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), (workInProgress.lanes = 4194304), - JSCompiler_object_inline_stack_2578 + JSCompiler_object_inline_stack_2585 ); pushPrimaryTreeSuspenseHandler(workInProgress); return mountSuspensePrimaryChildren( workInProgress, - JSCompiler_object_inline_digest_2577 + JSCompiler_object_inline_digest_2584 ); } var prevState = current.memoizedState; if ( null !== prevState && - ((JSCompiler_object_inline_digest_2577 = prevState.dehydrated), - null !== JSCompiler_object_inline_digest_2577) + ((JSCompiler_object_inline_digest_2584 = prevState.dehydrated), + null !== JSCompiler_object_inline_digest_2584) ) { if (didSuspend) workInProgress.flags & 256 @@ -9531,94 +9531,94 @@ (workInProgress.flags |= 128), (workInProgress = null)) : (reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_message_2576 = - JSCompiler_object_inline_stack_2578.fallback), - (JSCompiler_object_inline_digest_2577 = workInProgress.mode), - (JSCompiler_object_inline_stack_2578 = + (JSCompiler_object_inline_message_2583 = + JSCompiler_object_inline_stack_2585.fallback), + (JSCompiler_object_inline_digest_2584 = workInProgress.mode), + (JSCompiler_object_inline_stack_2585 = mountWorkInProgressOffscreenFiber( { mode: "visible", - children: JSCompiler_object_inline_stack_2578.children + children: JSCompiler_object_inline_stack_2585.children }, - JSCompiler_object_inline_digest_2577 + JSCompiler_object_inline_digest_2584 )), - (JSCompiler_object_inline_message_2576 = + (JSCompiler_object_inline_message_2583 = createFiberFromFragment( - JSCompiler_object_inline_message_2576, - JSCompiler_object_inline_digest_2577, + JSCompiler_object_inline_message_2583, + JSCompiler_object_inline_digest_2584, renderLanes, null )), - (JSCompiler_object_inline_message_2576.flags |= 2), - (JSCompiler_object_inline_stack_2578.return = workInProgress), - (JSCompiler_object_inline_message_2576.return = workInProgress), - (JSCompiler_object_inline_stack_2578.sibling = - JSCompiler_object_inline_message_2576), - (workInProgress.child = JSCompiler_object_inline_stack_2578), + (JSCompiler_object_inline_message_2583.flags |= 2), + (JSCompiler_object_inline_stack_2585.return = workInProgress), + (JSCompiler_object_inline_message_2583.return = workInProgress), + (JSCompiler_object_inline_stack_2585.sibling = + JSCompiler_object_inline_message_2583), + (workInProgress.child = JSCompiler_object_inline_stack_2585), reconcileChildFibers( workInProgress, current.child, null, renderLanes ), - (JSCompiler_object_inline_stack_2578 = workInProgress.child), - (JSCompiler_object_inline_stack_2578.memoizedState = + (JSCompiler_object_inline_stack_2585 = workInProgress.child), + (JSCompiler_object_inline_stack_2585.memoizedState = mountSuspenseOffscreenState(renderLanes)), - (JSCompiler_object_inline_stack_2578.childLanes = + (JSCompiler_object_inline_stack_2585.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2579, + JSCompiler_object_inline_componentStack_2586, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - (workInProgress = JSCompiler_object_inline_message_2576)); + (workInProgress = JSCompiler_object_inline_message_2583)); else if ( (pushPrimaryTreeSuspenseHandler(workInProgress), isHydrating && console.error( "We should not be hydrating here. This is a bug in React. Please file a bug." ), - isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2577)) + isSuspenseInstanceFallback(JSCompiler_object_inline_digest_2584)) ) { - JSCompiler_object_inline_componentStack_2579 = - JSCompiler_object_inline_digest_2577.nextSibling && - JSCompiler_object_inline_digest_2577.nextSibling.dataset; - if (JSCompiler_object_inline_componentStack_2579) { - JSCompiler_temp = JSCompiler_object_inline_componentStack_2579.dgst; - var message = JSCompiler_object_inline_componentStack_2579.msg; - instance = JSCompiler_object_inline_componentStack_2579.stck; + JSCompiler_object_inline_componentStack_2586 = + JSCompiler_object_inline_digest_2584.nextSibling && + JSCompiler_object_inline_digest_2584.nextSibling.dataset; + if (JSCompiler_object_inline_componentStack_2586) { + JSCompiler_temp = JSCompiler_object_inline_componentStack_2586.dgst; + var message = JSCompiler_object_inline_componentStack_2586.msg; + instance = JSCompiler_object_inline_componentStack_2586.stck; var componentStack = - JSCompiler_object_inline_componentStack_2579.cstck; + JSCompiler_object_inline_componentStack_2586.cstck; } - JSCompiler_object_inline_message_2576 = message; - JSCompiler_object_inline_digest_2577 = JSCompiler_temp; - JSCompiler_object_inline_stack_2578 = instance; - JSCompiler_temp = JSCompiler_object_inline_componentStack_2579 = + JSCompiler_object_inline_message_2583 = message; + JSCompiler_object_inline_digest_2584 = JSCompiler_temp; + JSCompiler_object_inline_stack_2585 = instance; + JSCompiler_temp = JSCompiler_object_inline_componentStack_2586 = componentStack; - "POSTPONE" !== JSCompiler_object_inline_digest_2577 && - ((JSCompiler_object_inline_componentStack_2579 = - JSCompiler_object_inline_message_2576 - ? Error(JSCompiler_object_inline_message_2576) + "POSTPONE" !== JSCompiler_object_inline_digest_2584 && + ((JSCompiler_object_inline_componentStack_2586 = + JSCompiler_object_inline_message_2583 + ? Error(JSCompiler_object_inline_message_2583) : Error( "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." )), - (JSCompiler_object_inline_componentStack_2579.stack = - JSCompiler_object_inline_stack_2578 || ""), - (JSCompiler_object_inline_componentStack_2579.digest = - JSCompiler_object_inline_digest_2577), - (JSCompiler_object_inline_stack_2578 = + (JSCompiler_object_inline_componentStack_2586.stack = + JSCompiler_object_inline_stack_2585 || ""), + (JSCompiler_object_inline_componentStack_2586.digest = + JSCompiler_object_inline_digest_2584), + (JSCompiler_object_inline_stack_2585 = void 0 === JSCompiler_temp ? null : JSCompiler_temp), - (JSCompiler_object_inline_message_2576 = { - value: JSCompiler_object_inline_componentStack_2579, + (JSCompiler_object_inline_message_2583 = { + value: JSCompiler_object_inline_componentStack_2586, source: null, - stack: JSCompiler_object_inline_stack_2578 + stack: JSCompiler_object_inline_stack_2585 }), - "string" === typeof JSCompiler_object_inline_stack_2578 && + "string" === typeof JSCompiler_object_inline_stack_2585 && CapturedStacks.set( - JSCompiler_object_inline_componentStack_2579, - JSCompiler_object_inline_message_2576 + JSCompiler_object_inline_componentStack_2586, + JSCompiler_object_inline_message_2583 ), - queueHydrationError(JSCompiler_object_inline_message_2576)); + queueHydrationError(JSCompiler_object_inline_message_2583)); workInProgress = retrySuspenseComponentWithoutHydrating( current, workInProgress, @@ -9632,44 +9632,44 @@ renderLanes, !1 ), - (JSCompiler_object_inline_componentStack_2579 = + (JSCompiler_object_inline_componentStack_2586 = 0 !== (renderLanes & current.childLanes)), - didReceiveUpdate || JSCompiler_object_inline_componentStack_2579) + didReceiveUpdate || JSCompiler_object_inline_componentStack_2586) ) { - JSCompiler_object_inline_componentStack_2579 = workInProgressRoot; + JSCompiler_object_inline_componentStack_2586 = workInProgressRoot; if ( - null !== JSCompiler_object_inline_componentStack_2579 && - ((JSCompiler_object_inline_stack_2578 = renderLanes & -renderLanes), - (JSCompiler_object_inline_stack_2578 = - 0 !== (JSCompiler_object_inline_stack_2578 & 42) + null !== JSCompiler_object_inline_componentStack_2586 && + ((JSCompiler_object_inline_stack_2585 = renderLanes & -renderLanes), + (JSCompiler_object_inline_stack_2585 = + 0 !== (JSCompiler_object_inline_stack_2585 & 42) ? 1 : getBumpedLaneForHydrationByLane( - JSCompiler_object_inline_stack_2578 + JSCompiler_object_inline_stack_2585 )), - (JSCompiler_object_inline_stack_2578 = + (JSCompiler_object_inline_stack_2585 = 0 !== - (JSCompiler_object_inline_stack_2578 & - (JSCompiler_object_inline_componentStack_2579.suspendedLanes | + (JSCompiler_object_inline_stack_2585 & + (JSCompiler_object_inline_componentStack_2586.suspendedLanes | renderLanes)) ? 0 - : JSCompiler_object_inline_stack_2578), - 0 !== JSCompiler_object_inline_stack_2578 && - JSCompiler_object_inline_stack_2578 !== prevState.retryLane) + : JSCompiler_object_inline_stack_2585), + 0 !== JSCompiler_object_inline_stack_2585 && + JSCompiler_object_inline_stack_2585 !== prevState.retryLane) ) throw ( - ((prevState.retryLane = JSCompiler_object_inline_stack_2578), + ((prevState.retryLane = JSCompiler_object_inline_stack_2585), enqueueConcurrentRenderForLane( current, - JSCompiler_object_inline_stack_2578 + JSCompiler_object_inline_stack_2585 ), scheduleUpdateOnFiber( - JSCompiler_object_inline_componentStack_2579, + JSCompiler_object_inline_componentStack_2586, current, - JSCompiler_object_inline_stack_2578 + JSCompiler_object_inline_stack_2585 ), SelectiveHydrationException) ); - JSCompiler_object_inline_digest_2577.data === + JSCompiler_object_inline_digest_2584.data === SUSPENSE_PENDING_START_DATA || renderDidSuspendDelayIfPossible(); workInProgress = retrySuspenseComponentWithoutHydrating( current, @@ -9677,14 +9677,14 @@ renderLanes ); } else - JSCompiler_object_inline_digest_2577.data === + JSCompiler_object_inline_digest_2584.data === SUSPENSE_PENDING_START_DATA ? ((workInProgress.flags |= 192), (workInProgress.child = current.child), (workInProgress = null)) : ((current = prevState.treeContext), (nextHydratableInstance = getNextHydratable( - JSCompiler_object_inline_digest_2577.nextSibling + JSCompiler_object_inline_digest_2584.nextSibling )), (hydrationParentFiber = workInProgress), (isHydrating = !0), @@ -9702,54 +9702,54 @@ (treeContextProvider = workInProgress)), (workInProgress = mountSuspensePrimaryChildren( workInProgress, - JSCompiler_object_inline_stack_2578.children + JSCompiler_object_inline_stack_2585.children )), (workInProgress.flags |= 4096)); return workInProgress; } - if (JSCompiler_object_inline_message_2576) + if (JSCompiler_object_inline_message_2583) return ( reuseSuspenseHandlerOnStack(workInProgress), - (JSCompiler_object_inline_message_2576 = - JSCompiler_object_inline_stack_2578.fallback), - (JSCompiler_object_inline_digest_2577 = workInProgress.mode), + (JSCompiler_object_inline_message_2583 = + JSCompiler_object_inline_stack_2585.fallback), + (JSCompiler_object_inline_digest_2584 = workInProgress.mode), (JSCompiler_temp = current.child), (instance = JSCompiler_temp.sibling), - (JSCompiler_object_inline_stack_2578 = createWorkInProgress( + (JSCompiler_object_inline_stack_2585 = createWorkInProgress( JSCompiler_temp, { mode: "hidden", - children: JSCompiler_object_inline_stack_2578.children + children: JSCompiler_object_inline_stack_2585.children } )), - (JSCompiler_object_inline_stack_2578.subtreeFlags = + (JSCompiler_object_inline_stack_2585.subtreeFlags = JSCompiler_temp.subtreeFlags & 65011712), null !== instance - ? (JSCompiler_object_inline_message_2576 = createWorkInProgress( + ? (JSCompiler_object_inline_message_2583 = createWorkInProgress( instance, - JSCompiler_object_inline_message_2576 + JSCompiler_object_inline_message_2583 )) - : ((JSCompiler_object_inline_message_2576 = createFiberFromFragment( - JSCompiler_object_inline_message_2576, - JSCompiler_object_inline_digest_2577, + : ((JSCompiler_object_inline_message_2583 = createFiberFromFragment( + JSCompiler_object_inline_message_2583, + JSCompiler_object_inline_digest_2584, renderLanes, null )), - (JSCompiler_object_inline_message_2576.flags |= 2)), - (JSCompiler_object_inline_message_2576.return = workInProgress), - (JSCompiler_object_inline_stack_2578.return = workInProgress), - (JSCompiler_object_inline_stack_2578.sibling = - JSCompiler_object_inline_message_2576), - (workInProgress.child = JSCompiler_object_inline_stack_2578), - (JSCompiler_object_inline_stack_2578 = - JSCompiler_object_inline_message_2576), - (JSCompiler_object_inline_message_2576 = workInProgress.child), - (JSCompiler_object_inline_digest_2577 = current.child.memoizedState), - null === JSCompiler_object_inline_digest_2577 - ? (JSCompiler_object_inline_digest_2577 = + (JSCompiler_object_inline_message_2583.flags |= 2)), + (JSCompiler_object_inline_message_2583.return = workInProgress), + (JSCompiler_object_inline_stack_2585.return = workInProgress), + (JSCompiler_object_inline_stack_2585.sibling = + JSCompiler_object_inline_message_2583), + (workInProgress.child = JSCompiler_object_inline_stack_2585), + (JSCompiler_object_inline_stack_2585 = + JSCompiler_object_inline_message_2583), + (JSCompiler_object_inline_message_2583 = workInProgress.child), + (JSCompiler_object_inline_digest_2584 = current.child.memoizedState), + null === JSCompiler_object_inline_digest_2584 + ? (JSCompiler_object_inline_digest_2584 = mountSuspenseOffscreenState(renderLanes)) : ((JSCompiler_temp = - JSCompiler_object_inline_digest_2577.cachePool), + JSCompiler_object_inline_digest_2584.cachePool), null !== JSCompiler_temp ? ((instance = CacheContext._currentValue), (JSCompiler_temp = @@ -9757,38 +9757,38 @@ ? { parent: instance, pool: instance } : JSCompiler_temp)) : (JSCompiler_temp = getSuspendedCache()), - (JSCompiler_object_inline_digest_2577 = { + (JSCompiler_object_inline_digest_2584 = { baseLanes: - JSCompiler_object_inline_digest_2577.baseLanes | renderLanes, + JSCompiler_object_inline_digest_2584.baseLanes | renderLanes, cachePool: JSCompiler_temp })), - (JSCompiler_object_inline_message_2576.memoizedState = - JSCompiler_object_inline_digest_2577), - (JSCompiler_object_inline_message_2576.childLanes = + (JSCompiler_object_inline_message_2583.memoizedState = + JSCompiler_object_inline_digest_2584), + (JSCompiler_object_inline_message_2583.childLanes = getRemainingWorkInPrimaryTree( current, - JSCompiler_object_inline_componentStack_2579, + JSCompiler_object_inline_componentStack_2586, renderLanes )), (workInProgress.memoizedState = SUSPENDED_MARKER), - JSCompiler_object_inline_stack_2578 + JSCompiler_object_inline_stack_2585 ); pushPrimaryTreeSuspenseHandler(workInProgress); renderLanes = current.child; current = renderLanes.sibling; renderLanes = createWorkInProgress(renderLanes, { mode: "visible", - children: JSCompiler_object_inline_stack_2578.children + children: JSCompiler_object_inline_stack_2585.children }); renderLanes.return = workInProgress; renderLanes.sibling = null; null !== current && - ((JSCompiler_object_inline_componentStack_2579 = + ((JSCompiler_object_inline_componentStack_2586 = workInProgress.deletions), - null === JSCompiler_object_inline_componentStack_2579 + null === JSCompiler_object_inline_componentStack_2586 ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16)) - : JSCompiler_object_inline_componentStack_2579.push(current)); + : JSCompiler_object_inline_componentStack_2586.push(current)); workInProgress.child = renderLanes; workInProgress.memoizedState = null; return renderLanes; @@ -11578,17 +11578,19 @@ case 0: if ( 0 !== (flags & 4) && - ((finishedWork = finishedWork.updateQueue), - (finishedWork = - null !== finishedWork ? finishedWork.events : null), - null !== finishedWork) + ((isViewTransitionEligible = finishedWork.updateQueue), + (isViewTransitionEligible = + null !== isViewTransitionEligible + ? isViewTransitionEligible.events + : null), + null !== isViewTransitionEligible) ) for ( - isViewTransitionEligible = 0; - isViewTransitionEligible < finishedWork.length; - isViewTransitionEligible++ + finishedWork = 0; + finishedWork < isViewTransitionEligible.length; + finishedWork++ ) - (current = finishedWork[isViewTransitionEligible]), + (current = isViewTransitionEligible[finishedWork]), (current.ref.impl = current.nextImpl); break; case 11: @@ -11602,20 +11604,21 @@ case 3: if (0 !== (flags & 1024)) if ( - ((finishedWork = finishedWork.stateNode.containerInfo), - (isViewTransitionEligible = finishedWork.nodeType), - 9 === isViewTransitionEligible) + ((isViewTransitionEligible = + finishedWork.stateNode.containerInfo), + (finishedWork = isViewTransitionEligible.nodeType), + 9 === finishedWork) ) - clearContainerSparingly(finishedWork); - else if (1 === isViewTransitionEligible) - switch (finishedWork.nodeName) { + clearContainerSparingly(isViewTransitionEligible); + else if (1 === finishedWork) + switch (isViewTransitionEligible.nodeName) { case "HEAD": case "HTML": case "BODY": - clearContainerSparingly(finishedWork); + clearContainerSparingly(isViewTransitionEligible); break; default: - finishedWork.textContent = ""; + isViewTransitionEligible.textContent = ""; } break; case 5: @@ -11626,23 +11629,41 @@ case 17: break; case 30: - isViewTransitionEligible && + if ( + isViewTransitionEligible && null !== current && - 0 !== (finishedWork.subtreeFlags & 8246) && - ((finishedWork = current), - (isViewTransitionEligible = finishedWork.memoizedProps), - (current = getViewTransitionName( - isViewTransitionEligible, - finishedWork.stateNode - )), - (viewTransitionHostInstanceIdx = 0), - applyViewTransitionToHostInstances( - finishedWork.child, - current, - isViewTransitionEligible.className, - (finishedWork.memoizedState = []), - !0 - )); + 0 !== (finishedWork.subtreeFlags & 8246) + ) + a: { + isViewTransitionEligible = current; + current = finishedWork; + finishedWork = getViewTransitionName( + isViewTransitionEligible.memoizedProps, + isViewTransitionEligible.stateNode + ); + current = current.memoizedProps; + flags = getViewTransitionClassName( + current.className, + current.update + ); + if ( + "none" === flags && + ((flags = getViewTransitionClassName( + current.className, + current.layout + )), + "none" === flags) + ) + break a; + viewTransitionHostInstanceIdx = 0; + applyViewTransitionToHostInstances( + isViewTransitionEligible.child, + finishedWork, + flags, + (isViewTransitionEligible.memoizedState = []), + !0 + ); + } break; default: if (0 !== (flags & 1024)) @@ -11650,10 +11671,10 @@ "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." ); } - finishedWork = fiber.sibling; - if (null !== finishedWork) { - finishedWork.return = fiber.return; - nextEffect = finishedWork; + isViewTransitionEligible = fiber.sibling; + if (null !== isViewTransitionEligible) { + isViewTransitionEligible.return = fiber.return; + nextEffect = isViewTransitionEligible; break; } nextEffect = fiber.return; @@ -11729,34 +11750,44 @@ throw Error( "Found a pair with an auto name. This is a bug in React." ); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - placement.child, - props.name, - props.className, - null, - !1 - ) || restoreViewTransitionOnHostInstances(placement.child, !1); + var name = props.name; + props = getViewTransitionClassName(props.className, props.share); + "none" !== props && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + placement.child, + name, + props, + null, + !1 + ) || restoreViewTransitionOnHostInstances(placement.child, !1)); } placement = placement.sibling; } } function commitEnterViewTransitions(placement) { if (30 === placement.tag) { - var props = placement.memoizedProps, - name = getViewTransitionName(props, placement.stateNode); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - placement.child, - name, - props.className, - null, - !1 - ) - ? (commitAppearingPairViewTransitions(placement), - placement.stateNode.paired || - scheduleViewTransitionEvent(placement, props.onEnter)) - : restoreViewTransitionOnHostInstances(placement.child, !1); + var state = placement.stateNode, + props = placement.memoizedProps, + name = getViewTransitionName(props, state), + className = getViewTransitionClassName( + props.className, + state.paired ? props.share : props.enter + ); + "none" !== className + ? ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + placement.child, + name, + className, + null, + !1 + ) + ? (commitAppearingPairViewTransitions(placement), + state.paired || + scheduleViewTransitionEvent(placement, props.onEnter)) + : restoreViewTransitionOnHostInstances(placement.child, !1)) + : commitAppearingPairViewTransitions(placement); } else if (0 !== (placement.subtreeFlags & 33554432)) for (placement = placement.child; null !== placement; ) commitEnterViewTransitions(placement), @@ -11778,23 +11809,29 @@ name = props.name; if (null != name && "auto" !== name) { var pair = appearingViewTransitions.get(name); - if ( - void 0 !== pair && - ((viewTransitionHostInstanceIdx = 0), - applyViewTransitionToHostInstances( - deletion.child, - name, + if (void 0 !== pair) { + var className = getViewTransitionClassName( props.className, - null, - !1 - ) - ? ((pair.paired = deletion.stateNode), - scheduleViewTransitionEvent(deletion, props.onShare)) - : restoreViewTransitionOnHostInstances(deletion.child, !1), - appearingViewTransitions.delete(name), - 0 === appearingViewTransitions.size) - ) - break; + props.share + ); + "none" !== className && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + deletion.child, + name, + className, + null, + !1 + ) + ? ((pair.paired = deletion.stateNode), + scheduleViewTransitionEvent(deletion, props.onShare)) + : restoreViewTransitionOnHostInstances( + deletion.child, + !1 + )); + appearingViewTransitions.delete(name); + if (0 === appearingViewTransitions.size) break; + } } } commitDeletedPairViewTransitions( @@ -11808,30 +11845,32 @@ function commitExitViewTransitions(deletion, appearingViewTransitions) { if (30 === deletion.tag) { var props = deletion.memoizedProps, - name = getViewTransitionName(props, deletion.stateNode); - viewTransitionHostInstanceIdx = 0; - if ( + name = getViewTransitionName(props, deletion.stateNode), + pair = + null !== appearingViewTransitions + ? appearingViewTransitions.get(name) + : void 0, + className = getViewTransitionClassName( + props.className, + void 0 !== pair ? props.share : props.exit + ); + "none" !== className && + ((viewTransitionHostInstanceIdx = 0), applyViewTransitionToHostInstances( deletion.child, name, - props.className, + className, null, !1 ) - ) - if (null !== appearingViewTransitions) { - var pair = appearingViewTransitions.get(name); - void 0 !== pair + ? void 0 !== pair ? ((pair.paired = deletion.stateNode), appearingViewTransitions.delete(name), scheduleViewTransitionEvent(deletion, props.onShare)) - : scheduleViewTransitionEvent(deletion, props.onExit); - commitDeletedPairViewTransitions( - deletion, - appearingViewTransitions - ); - } else scheduleViewTransitionEvent(deletion, props.onExit); - else restoreViewTransitionOnHostInstances(deletion.child, !1); + : scheduleViewTransitionEvent(deletion, props.onExit) + : restoreViewTransitionOnHostInstances(deletion.child, !1)); + null !== appearingViewTransitions && + commitDeletedPairViewTransitions(deletion, appearingViewTransitions); } else if (0 !== (deletion.subtreeFlags & 33554432)) for (deletion = deletion.child; null !== deletion; ) commitExitViewTransitions(deletion, appearingViewTransitions), @@ -11845,14 +11884,16 @@ if (30 === changedParent.tag) { var props = changedParent.memoizedProps, name = getViewTransitionName(props, changedParent.stateNode); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - changedParent.child, - name, - props.className, - (changedParent.memoizedState = []), - !1 - ); + props = getViewTransitionClassName(props.className, props.layout); + "none" !== props && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + changedParent.child, + name, + props, + (changedParent.memoizedState = []), + !1 + )); } else 0 !== (changedParent.subtreeFlags & 33554432) && commitNestedViewTransitions(changedParent); @@ -11904,10 +11945,42 @@ restoreNestedViewTransitions(changedParent), (changedParent = changedParent.sibling); } + function cancelViewTransitionHostInstances( + currentViewTransition, + child, + stopAtNestedViewTransitions + ) { + for (; null !== child; ) { + if (5 === child.tag) { + var instance = child.stateNode, + oldName = getViewTransitionName( + currentViewTransition.memoizedProps, + currentViewTransition.stateNode + ); + null === viewTransitionCancelableChildren && + (viewTransitionCancelableChildren = []); + viewTransitionCancelableChildren.push( + instance, + oldName, + child.memoizedProps + ); + viewTransitionHostInstanceIdx++; + } else if (22 !== child.tag || null === child.memoizedState) + (30 === child.tag && stopAtNestedViewTransitions) || + cancelViewTransitionHostInstances( + currentViewTransition, + child.child, + stopAtNestedViewTransitions + ); + child = child.sibling; + } + } function measureViewTransitionHostInstances( currentViewTransition, parentViewTransition, child, + name, + className, previousMeasurements, stopAtNestedViewTransitions ) { @@ -11946,20 +12019,15 @@ nextMeasurement && (parentViewTransition.flags |= 32); } else parentViewTransition.flags |= 32; 0 !== (parentViewTransition.flags & 4) && - ((JSCompiler_temp = parentViewTransition.memoizedProps), - (nextMeasurement = getViewTransitionName( - JSCompiler_temp, - parentViewTransition.stateNode - )), - (previousMeasurement = instance), - (JSCompiler_temp = JSCompiler_temp.className), - (previousMeasurement.style.viewTransitionName = + ((nextMeasurement = instance), + (previousMeasurement = className), + (nextMeasurement.style.viewTransitionName = 0 === viewTransitionHostInstanceIdx - ? nextMeasurement - : nextMeasurement + "_" + viewTransitionHostInstanceIdx), - null != JSCompiler_temp && - (previousMeasurement.style.viewTransitionClass = - JSCompiler_temp)); + ? name + : name + "_" + viewTransitionHostInstanceIdx), + null != previousMeasurement && + (nextMeasurement.style.viewTransitionClass = + previousMeasurement)); (inViewport && 0 !== (parentViewTransition.flags & 4)) || ((nextMeasurement = getViewTransitionName( currentViewTransition.memoizedProps, @@ -11980,6 +12048,8 @@ currentViewTransition, parentViewTransition, child.child, + name, + className, previousMeasurements, stopAtNestedViewTransitions ) && (inViewport = !0); @@ -11991,19 +12061,27 @@ for (changedParent = changedParent.child; null !== changedParent; ) { if (30 === changedParent.tag) { var current = changedParent.alternate; - null !== current && - ((viewTransitionHostInstanceIdx = 0), - measureViewTransitionHostInstances( + if (null !== current) { + var props = changedParent.memoizedProps, + name = getViewTransitionName(props, changedParent.stateNode), + className = getViewTransitionClassName( + props.className, + props.layout + ); + viewTransitionHostInstanceIdx = 0; + current = measureViewTransitionHostInstances( current, changedParent, changedParent.child, + name, + className, changedParent.memoizedState, !1 - ), - scheduleViewTransitionEvent( - changedParent, - changedParent.memoizedProps.onLayout - )); + ); + 0 !== (changedParent.flags & 4) && + current && + scheduleViewTransitionEvent(changedParent, props.onLayout); + } } else 0 !== (changedParent.subtreeFlags & 33554432) && measureNestedViewTransitions(changedParent); @@ -13063,9 +13141,7 @@ for (parentFiber = parentFiber.child; null !== parentFiber; ) commitAfterMutationEffectsOnFiber(parentFiber, root), (parentFiber = parentFiber.sibling); - else - measureNestedViewTransitions(parentFiber), - 0 !== (parentFiber.flags & 32) && (viewTransitionContextChanged = !0); + else measureNestedViewTransitions(parentFiber); } function commitAfterMutationEffectsOnFiber(finishedWork, root) { var current = finishedWork.alternate; @@ -13096,15 +13172,15 @@ } ); } - root = root.containerInfo; - root = - 9 === root.nodeType - ? root.documentElement - : root.ownerDocument.documentElement; - null !== root && - "" === root.style.viewTransitionName && - ((root.style.viewTransitionName = "none"), - root.animate( + finishedWork = root.containerInfo; + finishedWork = + 9 === finishedWork.nodeType + ? finishedWork.documentElement + : finishedWork.ownerDocument.documentElement; + null !== finishedWork && + "" === finishedWork.style.viewTransitionName && + ((finishedWork.style.viewTransitionName = "none"), + finishedWork.animate( { opacity: [0, 0], pointerEvents: ["none", "none"] }, { duration: 0, @@ -13112,7 +13188,7 @@ pseudoElement: "::view-transition-group(root)" } ), - root.animate( + finishedWork.animate( { width: [0, 0], height: [0, 0] }, { duration: 0, @@ -13132,32 +13208,70 @@ : recursivelyTraverseAfterMutationEffects(root, finishedWork)); break; case 30: - 0 !== (finishedWork.subtreeFlags & 8246) && - ((i = 0 !== (finishedWork.flags & 4)), - (oldName = viewTransitionContextChanged), - (instance = viewTransitionCancelableChildren), - (viewTransitionContextChanged = !1), - (viewTransitionCancelableChildren = null), - recursivelyTraverseAfterMutationEffects(root, finishedWork), - viewTransitionContextChanged && (finishedWork.flags |= 4), - (viewTransitionHostInstanceIdx = 0), - (root = current.memoizedState), - (current = measureViewTransitionHostInstances( - current, - finishedWork, - finishedWork.child, - root, - !0 - )), - viewTransitionHostInstanceIdx !== - (null === root ? 0 : root.length) && (finishedWork.flags |= 32), + if (0 !== (finishedWork.subtreeFlags & 8246)) { + i = 0 !== (finishedWork.flags & 4); + oldName = viewTransitionContextChanged; + instance = viewTransitionCancelableChildren; + viewTransitionContextChanged = !1; + viewTransitionCancelableChildren = null; + recursivelyTraverseAfterMutationEffects(root, finishedWork); + viewTransitionContextChanged && (finishedWork.flags |= 4); + a: { + root = finishedWork.memoizedProps; + var updateClassName = getViewTransitionClassName( + root.className, + root.update + ), + layoutClassName = getViewTransitionClassName( + root.className, + root.update + ); + if ("none" === updateClassName) { + if ("none" === layoutClassName) { + current = !1; + break a; + } + finishedWork.flags &= -5; + updateClassName = layoutClassName; + } else if (0 === (finishedWork.flags & 4)) { + if ("none" === layoutClassName) { + viewTransitionHostInstanceIdx = 0; + cancelViewTransitionHostInstances( + current, + finishedWork.child, + !0 + ); + current = !1; + break a; + } + updateClassName = layoutClassName; + } + layoutClassName = getViewTransitionName( + root, + finishedWork.stateNode + ); + viewTransitionHostInstanceIdx = 0; + root = current.memoizedState; + current = measureViewTransitionHostInstances( + current, + finishedWork, + finishedWork.child, + layoutClassName, + updateClassName, + root, + !0 + ); + viewTransitionHostInstanceIdx !== + (null === root ? 0 : root.length) && + (finishedWork.flags |= 32); + } 0 !== (finishedWork.flags & 4) && current - ? ((root = finishedWork.memoizedProps), + ? ((current = finishedWork.memoizedProps), scheduleViewTransitionEvent( finishedWork, i || viewTransitionContextChanged - ? root.onUpdate - : root.onLayout + ? current.onUpdate + : current.onLayout ), (viewTransitionCancelableChildren = instance)) : null !== instance && @@ -13165,9 +13279,10 @@ instance, viewTransitionCancelableChildren ), - (viewTransitionCancelableChildren = instance)), - (viewTransitionContextChanged = - 0 !== (finishedWork.flags & 32) ? !0 : oldName)); + (viewTransitionCancelableChildren = instance)); + viewTransitionContextChanged = + 0 !== (finishedWork.flags & 32) ? !0 : oldName; + } break; default: recursivelyTraverseAfterMutationEffects(root, finishedWork); @@ -14772,6 +14887,15 @@ ? props.name : instance.autoName; } + function getViewTransitionClassName(className, eventClassName) { + return null == eventClassName + ? className + : "none" === eventClassName + ? eventClassName + : null != className + ? className + " " + eventClassName + : eventClassName; + } function markUpdate(workInProgress) { workInProgress.flags |= 4; } @@ -27004,11 +27128,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-cabd8a0e-20250113" !== 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.1.0-experimental-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -27045,10 +27169,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.1.0-experimental-540efebc-20250112", + version: "19.1.0-experimental-cabd8a0e-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-540efebc-20250112" + reconcilerVersion: "19.1.0-experimental-cabd8a0e-20250113" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -27358,5 +27482,5 @@ } }; }; - exports.version = "19.1.0-experimental-540efebc-20250112"; + exports.version = "19.1.0-experimental-cabd8a0e-20250113"; })(); 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 e3aa5c03ae52f..a9eb19d3de5d9 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 @@ -7961,22 +7961,39 @@ function commitBeforeMutationEffects_complete( case 17: break; case 30: - isViewTransitionEligible && + if ( + isViewTransitionEligible && null !== current && - 0 !== (fiber.subtreeFlags & 8246) && - ((isViewTransitionEligible = current.memoizedProps), - (flags = getViewTransitionName( - isViewTransitionEligible, - current.stateNode - )), - (viewTransitionHostInstanceIdx = 0), - applyViewTransitionToHostInstances( - current.child, - flags, - isViewTransitionEligible.className, - (current.memoizedState = []), - !0 - )); + 0 !== (fiber.subtreeFlags & 8246) + ) + a: { + isViewTransitionEligible = getViewTransitionName( + current.memoizedProps, + current.stateNode + ); + flags = fiber.memoizedProps; + instance = getViewTransitionClassName( + flags.className, + flags.update + ); + if ( + "none" === instance && + ((instance = getViewTransitionClassName( + flags.className, + flags.layout + )), + "none" === instance) + ) + break a; + viewTransitionHostInstanceIdx = 0; + applyViewTransitionToHostInstances( + current.child, + isViewTransitionEligible, + instance, + (current.memoizedState = []), + !0 + ); + } break; default: if (0 !== (flags & 1024)) throw Error(formatProdErrorMessage(163)); @@ -8058,34 +8075,44 @@ function commitAppearingPairViewTransitions(placement) { var props = placement.memoizedProps; if (null == props.name || "auto" === props.name) throw Error(formatProdErrorMessage(544)); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - placement.child, - props.name, - props.className, - null, - !1 - ) || restoreViewTransitionOnHostInstances(placement.child, !1); + var name = props.name; + props = getViewTransitionClassName(props.className, props.share); + "none" !== props && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + placement.child, + name, + props, + null, + !1 + ) || restoreViewTransitionOnHostInstances(placement.child, !1)); } placement = placement.sibling; } } function commitEnterViewTransitions(placement) { if (30 === placement.tag) { - var props = placement.memoizedProps, - name = getViewTransitionName(props, placement.stateNode); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - placement.child, - name, - props.className, - null, - !1 - ) - ? (commitAppearingPairViewTransitions(placement), - placement.stateNode.paired || - scheduleViewTransitionEvent(placement, props.onEnter)) - : restoreViewTransitionOnHostInstances(placement.child, !1); + var state = placement.stateNode, + props = placement.memoizedProps, + name = getViewTransitionName(props, state), + className = getViewTransitionClassName( + props.className, + state.paired ? props.share : props.enter + ); + "none" !== className + ? ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + placement.child, + name, + className, + null, + !1 + ) + ? (commitAppearingPairViewTransitions(placement), + state.paired || + scheduleViewTransitionEvent(placement, props.onEnter)) + : restoreViewTransitionOnHostInstances(placement.child, !1)) + : commitAppearingPairViewTransitions(placement); } else if (0 !== (placement.subtreeFlags & 33554432)) for (placement = placement.child; null !== placement; ) commitEnterViewTransitions(placement), (placement = placement.sibling); @@ -8103,23 +8130,26 @@ function commitDeletedPairViewTransitions(deletion, appearingViewTransitions) { name = props.name; if (null != name && "auto" !== name) { var pair = appearingViewTransitions.get(name); - if ( - void 0 !== pair && - ((viewTransitionHostInstanceIdx = 0), - applyViewTransitionToHostInstances( - deletion.child, - name, + if (void 0 !== pair) { + var className = getViewTransitionClassName( props.className, - null, - !1 - ) - ? ((pair.paired = deletion.stateNode), - scheduleViewTransitionEvent(deletion, props.onShare)) - : restoreViewTransitionOnHostInstances(deletion.child, !1), - appearingViewTransitions.delete(name), - 0 === appearingViewTransitions.size) - ) - break; + props.share + ); + "none" !== className && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + deletion.child, + name, + className, + null, + !1 + ) + ? ((pair.paired = deletion.stateNode), + scheduleViewTransitionEvent(deletion, props.onShare)) + : restoreViewTransitionOnHostInstances(deletion.child, !1)); + appearingViewTransitions.delete(name); + if (0 === appearingViewTransitions.size) break; + } } } commitDeletedPairViewTransitions(deletion, appearingViewTransitions); @@ -8130,27 +8160,32 @@ function commitDeletedPairViewTransitions(deletion, appearingViewTransitions) { function commitExitViewTransitions(deletion, appearingViewTransitions) { if (30 === deletion.tag) { var props = deletion.memoizedProps, - name = getViewTransitionName(props, deletion.stateNode); - viewTransitionHostInstanceIdx = 0; - if ( + name = getViewTransitionName(props, deletion.stateNode), + pair = + null !== appearingViewTransitions + ? appearingViewTransitions.get(name) + : void 0, + className = getViewTransitionClassName( + props.className, + void 0 !== pair ? props.share : props.exit + ); + "none" !== className && + ((viewTransitionHostInstanceIdx = 0), applyViewTransitionToHostInstances( deletion.child, name, - props.className, + className, null, !1 ) - ) - if (null !== appearingViewTransitions) { - var pair = appearingViewTransitions.get(name); - void 0 !== pair + ? void 0 !== pair ? ((pair.paired = deletion.stateNode), appearingViewTransitions.delete(name), scheduleViewTransitionEvent(deletion, props.onShare)) - : scheduleViewTransitionEvent(deletion, props.onExit); - commitDeletedPairViewTransitions(deletion, appearingViewTransitions); - } else scheduleViewTransitionEvent(deletion, props.onExit); - else restoreViewTransitionOnHostInstances(deletion.child, !1); + : scheduleViewTransitionEvent(deletion, props.onExit) + : restoreViewTransitionOnHostInstances(deletion.child, !1)); + null !== appearingViewTransitions && + commitDeletedPairViewTransitions(deletion, appearingViewTransitions); } else if (0 !== (deletion.subtreeFlags & 33554432)) for (deletion = deletion.child; null !== deletion; ) commitExitViewTransitions(deletion, appearingViewTransitions), @@ -8164,14 +8199,16 @@ function commitNestedViewTransitions(changedParent) { if (30 === changedParent.tag) { var props = changedParent.memoizedProps, name = getViewTransitionName(props, changedParent.stateNode); - viewTransitionHostInstanceIdx = 0; - applyViewTransitionToHostInstances( - changedParent.child, - name, - props.className, - (changedParent.memoizedState = []), - !1 - ); + props = getViewTransitionClassName(props.className, props.layout); + "none" !== props && + ((viewTransitionHostInstanceIdx = 0), + applyViewTransitionToHostInstances( + changedParent.child, + name, + props, + (changedParent.memoizedState = []), + !1 + )); } else 0 !== (changedParent.subtreeFlags & 33554432) && commitNestedViewTransitions(changedParent); @@ -8222,10 +8259,42 @@ function restoreNestedViewTransitions(changedParent) { restoreNestedViewTransitions(changedParent), (changedParent = changedParent.sibling); } +function cancelViewTransitionHostInstances( + currentViewTransition, + child, + stopAtNestedViewTransitions +) { + for (; null !== child; ) { + if (5 === child.tag) { + var instance = child.stateNode, + oldName = getViewTransitionName( + currentViewTransition.memoizedProps, + currentViewTransition.stateNode + ); + null === viewTransitionCancelableChildren && + (viewTransitionCancelableChildren = []); + viewTransitionCancelableChildren.push( + instance, + oldName, + child.memoizedProps + ); + viewTransitionHostInstanceIdx++; + } else if (22 !== child.tag || null === child.memoizedState) + (30 === child.tag && stopAtNestedViewTransitions) || + cancelViewTransitionHostInstances( + currentViewTransition, + child.child, + stopAtNestedViewTransitions + ); + child = child.sibling; + } +} function measureViewTransitionHostInstances( currentViewTransition, parentViewTransition, child, + name, + className, previousMeasurements, stopAtNestedViewTransitions ) { @@ -8263,19 +8332,14 @@ function measureViewTransitionHostInstances( nextMeasurement && (parentViewTransition.flags |= 32); } else parentViewTransition.flags |= 32; 0 !== (parentViewTransition.flags & 4) && - ((JSCompiler_temp = parentViewTransition.memoizedProps), - (nextMeasurement = getViewTransitionName( - JSCompiler_temp, - parentViewTransition.stateNode - )), - (previousMeasurement = instance), - (JSCompiler_temp = JSCompiler_temp.className), - (previousMeasurement.style.viewTransitionName = + ((nextMeasurement = instance), + (previousMeasurement = className), + (nextMeasurement.style.viewTransitionName = 0 === viewTransitionHostInstanceIdx - ? nextMeasurement - : nextMeasurement + "_" + viewTransitionHostInstanceIdx), - null != JSCompiler_temp && - (previousMeasurement.style.viewTransitionClass = JSCompiler_temp)); + ? name + : name + "_" + viewTransitionHostInstanceIdx), + null != previousMeasurement && + (nextMeasurement.style.viewTransitionClass = previousMeasurement)); (inViewport && 0 !== (parentViewTransition.flags & 4)) || ((nextMeasurement = getViewTransitionName( currentViewTransition.memoizedProps, @@ -8296,6 +8360,8 @@ function measureViewTransitionHostInstances( currentViewTransition, parentViewTransition, child.child, + name, + className, previousMeasurements, stopAtNestedViewTransitions ) && (inViewport = !0); @@ -8307,19 +8373,24 @@ function measureNestedViewTransitions(changedParent) { for (changedParent = changedParent.child; null !== changedParent; ) { if (30 === changedParent.tag) { var current = changedParent.alternate; - null !== current && - ((viewTransitionHostInstanceIdx = 0), - measureViewTransitionHostInstances( + if (null !== current) { + var props = changedParent.memoizedProps, + name = getViewTransitionName(props, changedParent.stateNode), + className = getViewTransitionClassName(props.className, props.layout); + viewTransitionHostInstanceIdx = 0; + current = measureViewTransitionHostInstances( current, changedParent, changedParent.child, + name, + className, changedParent.memoizedState, !1 - ), - scheduleViewTransitionEvent( - changedParent, - changedParent.memoizedProps.onLayout - )); + ); + 0 !== (changedParent.flags & 4) && + current && + scheduleViewTransitionEvent(changedParent, props.onLayout); + } } else 0 !== (changedParent.subtreeFlags & 33554432) && measureNestedViewTransitions(changedParent); @@ -9226,9 +9297,7 @@ function recursivelyTraverseAfterMutationEffects(root, parentFiber) { for (parentFiber = parentFiber.child; null !== parentFiber; ) commitAfterMutationEffectsOnFiber(parentFiber, root), (parentFiber = parentFiber.sibling); - else - measureNestedViewTransitions(parentFiber), - 0 !== (parentFiber.flags & 32) && (viewTransitionContextChanged = !0); + else measureNestedViewTransitions(parentFiber); } function commitAfterMutationEffectsOnFiber(finishedWork, root) { var current = finishedWork.alternate; @@ -9258,15 +9327,15 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { } ); } - root = root.containerInfo; - root = - 9 === root.nodeType - ? root.documentElement - : root.ownerDocument.documentElement; - null !== root && - "" === root.style.viewTransitionName && - ((root.style.viewTransitionName = "none"), - root.animate( + finishedWork = root.containerInfo; + finishedWork = + 9 === finishedWork.nodeType + ? finishedWork.documentElement + : finishedWork.ownerDocument.documentElement; + null !== finishedWork && + "" === finishedWork.style.viewTransitionName && + ((finishedWork.style.viewTransitionName = "none"), + finishedWork.animate( { opacity: [0, 0], pointerEvents: ["none", "none"] }, { duration: 0, @@ -9274,7 +9343,7 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { pseudoElement: "::view-transition-group(root)" } ), - root.animate( + finishedWork.animate( { width: [0, 0], height: [0, 0] }, { duration: 0, @@ -9294,39 +9363,77 @@ function commitAfterMutationEffectsOnFiber(finishedWork, root) { : recursivelyTraverseAfterMutationEffects(root, finishedWork)); break; case 30: - 0 !== (finishedWork.subtreeFlags & 8246) && - ((i = 0 !== (finishedWork.flags & 4)), - (oldName = viewTransitionContextChanged), - (instance = viewTransitionCancelableChildren), - (viewTransitionContextChanged = !1), - (viewTransitionCancelableChildren = null), - recursivelyTraverseAfterMutationEffects(root, finishedWork), - viewTransitionContextChanged && (finishedWork.flags |= 4), - (viewTransitionHostInstanceIdx = 0), - (root = current.memoizedState), - (current = measureViewTransitionHostInstances( - current, - finishedWork, - finishedWork.child, - root, - !0 - )), - viewTransitionHostInstanceIdx !== (null === root ? 0 : root.length) && - (finishedWork.flags |= 32), + if (0 !== (finishedWork.subtreeFlags & 8246)) { + i = 0 !== (finishedWork.flags & 4); + oldName = viewTransitionContextChanged; + instance = viewTransitionCancelableChildren; + viewTransitionContextChanged = !1; + viewTransitionCancelableChildren = null; + recursivelyTraverseAfterMutationEffects(root, finishedWork); + viewTransitionContextChanged && (finishedWork.flags |= 4); + a: { + root = finishedWork.memoizedProps; + var updateClassName = getViewTransitionClassName( + root.className, + root.update + ), + layoutClassName = getViewTransitionClassName( + root.className, + root.update + ); + if ("none" === updateClassName) { + if ("none" === layoutClassName) { + current = !1; + break a; + } + finishedWork.flags &= -5; + updateClassName = layoutClassName; + } else if (0 === (finishedWork.flags & 4)) { + if ("none" === layoutClassName) { + viewTransitionHostInstanceIdx = 0; + cancelViewTransitionHostInstances( + current, + finishedWork.child, + !0 + ); + current = !1; + break a; + } + updateClassName = layoutClassName; + } + layoutClassName = getViewTransitionName( + root, + finishedWork.stateNode + ); + viewTransitionHostInstanceIdx = 0; + root = current.memoizedState; + current = measureViewTransitionHostInstances( + current, + finishedWork, + finishedWork.child, + layoutClassName, + updateClassName, + root, + !0 + ); + viewTransitionHostInstanceIdx !== + (null === root ? 0 : root.length) && (finishedWork.flags |= 32); + } 0 !== (finishedWork.flags & 4) && current - ? ((root = finishedWork.memoizedProps), + ? ((current = finishedWork.memoizedProps), scheduleViewTransitionEvent( finishedWork, i || viewTransitionContextChanged - ? root.onUpdate - : root.onLayout + ? current.onUpdate + : current.onLayout ), (viewTransitionCancelableChildren = instance)) : null !== instance && (instance.push.apply(instance, viewTransitionCancelableChildren), - (viewTransitionCancelableChildren = instance)), - (viewTransitionContextChanged = - 0 !== (finishedWork.flags & 32) ? !0 : oldName)); + (viewTransitionCancelableChildren = instance)); + viewTransitionContextChanged = + 0 !== (finishedWork.flags & 32) ? !0 : oldName; + } break; default: recursivelyTraverseAfterMutationEffects(root, finishedWork); @@ -10434,6 +10541,15 @@ function getViewTransitionName(props, instance) { ? props.name : instance.autoName; } +function getViewTransitionClassName(className, eventClassName) { + return null == eventClassName + ? className + : "none" === eventClassName + ? eventClassName + : null != className + ? className + " " + eventClassName + : eventClassName; +} function markUpdate(workInProgress) { workInProgress.flags |= 4; } @@ -12898,20 +13014,20 @@ function extractEvents$1( } } for ( - var i$jscomp$inline_1576 = 0; - i$jscomp$inline_1576 < simpleEventPluginEvents.length; - i$jscomp$inline_1576++ + var i$jscomp$inline_1581 = 0; + i$jscomp$inline_1581 < simpleEventPluginEvents.length; + i$jscomp$inline_1581++ ) { - var eventName$jscomp$inline_1577 = - simpleEventPluginEvents[i$jscomp$inline_1576], - domEventName$jscomp$inline_1578 = - eventName$jscomp$inline_1577.toLowerCase(), - capitalizedEvent$jscomp$inline_1579 = - eventName$jscomp$inline_1577[0].toUpperCase() + - eventName$jscomp$inline_1577.slice(1); + var eventName$jscomp$inline_1582 = + simpleEventPluginEvents[i$jscomp$inline_1581], + domEventName$jscomp$inline_1583 = + eventName$jscomp$inline_1582.toLowerCase(), + capitalizedEvent$jscomp$inline_1584 = + eventName$jscomp$inline_1582[0].toUpperCase() + + eventName$jscomp$inline_1582.slice(1); registerSimpleEvent( - domEventName$jscomp$inline_1578, - "on" + capitalizedEvent$jscomp$inline_1579 + domEventName$jscomp$inline_1583, + "on" + capitalizedEvent$jscomp$inline_1584 ); } registerSimpleEvent(ANIMATION_END, "onAnimationEnd"); @@ -16584,16 +16700,16 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { 0 === i && attemptExplicitHydrationTarget(target); } }; -var isomorphicReactPackageVersion$jscomp$inline_1823 = React.version; +var isomorphicReactPackageVersion$jscomp$inline_1828 = React.version; if ( - "19.1.0-experimental-540efebc-20250112" !== - isomorphicReactPackageVersion$jscomp$inline_1823 + "19.1.0-experimental-cabd8a0e-20250113" !== + isomorphicReactPackageVersion$jscomp$inline_1828 ) throw Error( formatProdErrorMessage( 527, - isomorphicReactPackageVersion$jscomp$inline_1823, - "19.1.0-experimental-540efebc-20250112" + isomorphicReactPackageVersion$jscomp$inline_1828, + "19.1.0-experimental-cabd8a0e-20250113" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -16613,24 +16729,24 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { null === componentOrElement ? null : componentOrElement.stateNode; return componentOrElement; }; -var internals$jscomp$inline_2357 = { +var internals$jscomp$inline_2364 = { bundleType: 0, - version: "19.1.0-experimental-540efebc-20250112", + version: "19.1.0-experimental-cabd8a0e-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-540efebc-20250112" + reconcilerVersion: "19.1.0-experimental-cabd8a0e-20250113" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_2358 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_2365 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_2358.isDisabled && - hook$jscomp$inline_2358.supportsFiber + !hook$jscomp$inline_2365.isDisabled && + hook$jscomp$inline_2365.supportsFiber ) try { - (rendererID = hook$jscomp$inline_2358.inject( - internals$jscomp$inline_2357 + (rendererID = hook$jscomp$inline_2365.inject( + internals$jscomp$inline_2364 )), - (injectedHook = hook$jscomp$inline_2358); + (injectedHook = hook$jscomp$inline_2365); } catch (err) {} } exports.createComponentSelector = function (component) { @@ -16875,4 +16991,4 @@ exports.observeVisibleRects = function ( } }; }; -exports.version = "19.1.0-experimental-540efebc-20250112"; +exports.version = "19.1.0-experimental-cabd8a0e-20250113"; 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 64b53392d6a25..b582210b3dcf4 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 @@ -416,7 +416,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.1.0-experimental-540efebc-20250112"; + exports.version = "19.1.0-experimental-cabd8a0e-20250113"; "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 b8616bbd1d513..c7bc9031f67bb 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 @@ -207,4 +207,4 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.1.0-experimental-540efebc-20250112"; +exports.version = "19.1.0-experimental-cabd8a0e-20250113"; 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 c4fb4ae873aeb..f3697dc2f8e18 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 @@ -336,5 +336,5 @@ })) : Internals.d.m(href)); }; - exports.version = "19.1.0-experimental-540efebc-20250112"; + exports.version = "19.1.0-experimental-cabd8a0e-20250113"; })(); 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 8f00bb59e0f11..f35028737cbf0 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 @@ -149,4 +149,4 @@ exports.preloadModule = function (href, options) { }); } else Internals.d.m(href); }; -exports.version = "19.1.0-experimental-540efebc-20250112"; +exports.version = "19.1.0-experimental-cabd8a0e-20250113"; diff --git a/packages/next/src/compiled/react-dom-experimental/package.json b/packages/next/src/compiled/react-dom-experimental/package.json index ec8e9c557d664..c302e5f218947 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-540efebc-20250112" + "scheduler": "0.0.0-experimental-cabd8a0e-20250113" }, "peerDependencies": { - "react": "0.0.0-experimental-540efebc-20250112" + "react": "0.0.0-experimental-cabd8a0e-20250113" }, "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 9af4c1c753df7..94930c37c491b 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 @@ -24570,11 +24570,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-cabd8a0e-20250113" !== 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.1.0-canary-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -24611,10 +24611,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.1.0-canary-540efebc-20250112", + version: "19.1.0-canary-cabd8a0e-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-540efebc-20250112" + reconcilerVersion: "19.1.0-canary-cabd8a0e-20250113" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -24760,7 +24760,7 @@ listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; - exports.version = "19.1.0-canary-540efebc-20250112"; + exports.version = "19.1.0-canary-cabd8a0e-20250113"; "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 fce76161a7cb2..302f0518ee0d6 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 @@ -15202,14 +15202,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_1737 = React.version; if ( - "19.1.0-canary-540efebc-20250112" !== + "19.1.0-canary-cabd8a0e-20250113" !== isomorphicReactPackageVersion$jscomp$inline_1737 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_1737, - "19.1.0-canary-540efebc-20250112" + "19.1.0-canary-cabd8a0e-20250113" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -15231,10 +15231,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2214 = { bundleType: 0, - version: "19.1.0-canary-540efebc-20250112", + version: "19.1.0-canary-cabd8a0e-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-540efebc-20250112" + reconcilerVersion: "19.1.0-canary-cabd8a0e-20250113" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2215 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -15340,4 +15340,4 @@ exports.hydrateRoot = function (container, initialChildren, options) { listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; -exports.version = "19.1.0-canary-540efebc-20250112"; +exports.version = "19.1.0-canary-cabd8a0e-20250113"; 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 d726c784f6d8e..7e7e933975521 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 @@ -24627,11 +24627,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-cabd8a0e-20250113" !== 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.1.0-canary-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -24668,10 +24668,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.1.0-canary-540efebc-20250112", + version: "19.1.0-canary-cabd8a0e-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-540efebc-20250112" + reconcilerVersion: "19.1.0-canary-cabd8a0e-20250113" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -25147,7 +25147,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.1.0-canary-540efebc-20250112"; + exports.version = "19.1.0-canary-cabd8a0e-20250113"; "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 0aa3c7bd59821..5e90d951834bb 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 @@ -15848,14 +15848,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_1833 = React.version; if ( - "19.1.0-canary-540efebc-20250112" !== + "19.1.0-canary-cabd8a0e-20250113" !== isomorphicReactPackageVersion$jscomp$inline_1833 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_1833, - "19.1.0-canary-540efebc-20250112" + "19.1.0-canary-cabd8a0e-20250113" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -15877,10 +15877,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_1840 = { bundleType: 0, - version: "19.1.0-canary-540efebc-20250112", + version: "19.1.0-canary-cabd8a0e-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-540efebc-20250112", + reconcilerVersion: "19.1.0-canary-cabd8a0e-20250113", getLaneLabelMap: function () { for ( var map = new Map(), lane = 1, index$279 = 0; @@ -16162,7 +16162,7 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.1.0-canary-540efebc-20250112"; +exports.version = "19.1.0-canary-cabd8a0e-20250113"; "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 02a9d406749f9..c13e81e73897b 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 @@ -8555,5 +8555,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.1.0-canary-540efebc-20250112"; + exports.version = "19.1.0-canary-cabd8a0e-20250113"; })(); 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 edb41770b8aa7..5312516503d13 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 @@ -5610,4 +5610,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.1.0-canary-540efebc-20250112"; +exports.version = "19.1.0-canary-cabd8a0e-20250113"; 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 cce4eb3f579b8..71ebc6b7a075d 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 @@ -8555,5 +8555,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.1.0-canary-540efebc-20250112"; + exports.version = "19.1.0-canary-cabd8a0e-20250113"; })(); 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 93e884978598e..de19b42a32876 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 @@ -5687,4 +5687,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.1.0-canary-540efebc-20250112"; +exports.version = "19.1.0-canary-cabd8a0e-20250113"; 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 e72d71ce499fb..e3ef7f168e49c 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 @@ -7293,11 +7293,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-cabd8a0e-20250113" !== 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.1.0-canary-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react"), @@ -8937,5 +8937,5 @@ startWork(request); }); }; - exports.version = "19.1.0-canary-540efebc-20250112"; + exports.version = "19.1.0-canary-cabd8a0e-20250113"; })(); 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 9327f3ce7d8f1..47f36bef8f479 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 @@ -5942,12 +5942,12 @@ function abort(request, reason) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-cabd8a0e-20250113" !== isomorphicReactPackageVersion) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion, - "19.1.0-canary-540efebc-20250112" + "19.1.0-canary-cabd8a0e-20250113" ) ); } @@ -6094,4 +6094,4 @@ exports.renderToReadableStream = function (children, options) { startWork(request); }); }; -exports.version = "19.1.0-canary-540efebc-20250112"; +exports.version = "19.1.0-canary-cabd8a0e-20250113"; 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 1f007b2634bc0..09121ba39e65b 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 @@ -5579,13 +5579,13 @@ function abort(request, reason) { } var isomorphicReactPackageVersion$jscomp$inline_728 = React.version; if ( - "19.1.0-canary-540efebc-20250112" !== + "19.1.0-canary-cabd8a0e-20250113" !== isomorphicReactPackageVersion$jscomp$inline_728 ) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion$jscomp$inline_728 + - "\n - react-dom: 19.1.0-canary-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); exports.renderToReadableStream = function (children, options) { return new Promise(function (resolve, reject) { @@ -5676,4 +5676,4 @@ exports.renderToReadableStream = function (children, options) { startWork(request); }); }; -exports.version = "19.1.0-canary-540efebc-20250112"; +exports.version = "19.1.0-canary-cabd8a0e-20250113"; 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 27d0e0a56bcf1..28295f332746d 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 @@ -7316,11 +7316,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-cabd8a0e-20250113" !== 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.1.0-canary-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react"), @@ -8967,5 +8967,5 @@ const setTimeoutOrImmediate = ? globalThis['set' + 'Immediate'] : setTimeout; - exports.version = "19.1.0-canary-540efebc-20250112"; + exports.version = "19.1.0-canary-cabd8a0e-20250113"; })(); 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 623f07c20a111..120a307146d65 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 @@ -6034,11 +6034,11 @@ function abort(request, reason) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-cabd8a0e-20250113" !== 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.1.0-canary-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -6195,4 +6195,4 @@ const setTimeoutOrImmediate = ? globalThis['set' + 'Immediate'] : setTimeout; -exports.version = "19.1.0-canary-540efebc-20250112"; +exports.version = "19.1.0-canary-cabd8a0e-20250113"; 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 64c24e27d6548..ad15a542f8768 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 @@ -7191,11 +7191,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-cabd8a0e-20250113" !== 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.1.0-canary-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } function createDrainHandler(destination, request) { @@ -8830,5 +8830,5 @@ } }; }; - exports.version = "19.1.0-canary-540efebc-20250112"; + exports.version = "19.1.0-canary-cabd8a0e-20250113"; })(); 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 bed5f6b88a378..26dbe053259ec 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 @@ -5926,11 +5926,11 @@ function abort(request, reason) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-540efebc-20250112" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-cabd8a0e-20250113" !== 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.1.0-canary-540efebc-20250112\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -6079,4 +6079,4 @@ exports.renderToPipeableStream = function (children, options) { } }; }; -exports.version = "19.1.0-canary-540efebc-20250112"; +exports.version = "19.1.0-canary-cabd8a0e-20250113"; 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 2ef488a1e0880..f6b90af1cacf0 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 @@ -416,7 +416,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.1.0-canary-540efebc-20250112"; + exports.version = "19.1.0-canary-cabd8a0e-20250113"; "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 79f7bb5c33633..0b7c0c439daab 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 @@ -207,4 +207,4 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.1.0-canary-540efebc-20250112"; +exports.version = "19.1.0-canary-cabd8a0e-20250113"; 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 e5a0e1249f7ba..b16ffe5f46000 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 @@ -336,5 +336,5 @@ })) : Internals.d.m(href)); }; - exports.version = "19.1.0-canary-540efebc-20250112"; + exports.version = "19.1.0-canary-cabd8a0e-20250113"; })(); 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 a9cec15bacbae..b852589481669 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 @@ -149,4 +149,4 @@ exports.preloadModule = function (href, options) { }); } else Internals.d.m(href); }; -exports.version = "19.1.0-canary-540efebc-20250112"; +exports.version = "19.1.0-canary-cabd8a0e-20250113"; diff --git a/packages/next/src/compiled/react-dom/package.json b/packages/next/src/compiled/react-dom/package.json index a132025f4299b..b408d136e20de 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.26.0-canary-540efebc-20250112" + "scheduler": "0.26.0-canary-cabd8a0e-20250113" }, "peerDependencies": { - "react": "19.1.0-canary-540efebc-20250112" + "react": "19.1.0-canary-cabd8a0e-20250113" }, "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 5d3893ce8dc1e..bd55177d4e69d 100644 --- a/packages/next/src/compiled/react-experimental/cjs/react.development.js +++ b/packages/next/src/compiled/react-experimental/cjs/react.development.js @@ -1247,7 +1247,7 @@ exports.useTransition = function () { return resolveDispatcher().useTransition(); }; - exports.version = "19.1.0-experimental-540efebc-20250112"; + exports.version = "19.1.0-experimental-cabd8a0e-20250113"; "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 38f32af886532..c2e71a7efce3a 100644 --- a/packages/next/src/compiled/react-experimental/cjs/react.production.js +++ b/packages/next/src/compiled/react-experimental/cjs/react.production.js @@ -567,4 +567,4 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactSharedInternals.H.useTransition(); }; -exports.version = "19.1.0-experimental-540efebc-20250112"; +exports.version = "19.1.0-experimental-cabd8a0e-20250113"; 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 c8b01073af362..00b814bdd04ca 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 @@ -987,5 +987,5 @@ exports.useMemo = function (create, deps) { return resolveDispatcher().useMemo(create, deps); }; - exports.version = "19.1.0-experimental-540efebc-20250112"; + exports.version = "19.1.0-experimental-cabd8a0e-20250113"; })(); 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 5ac8162aa46c8..de507f640b2b6 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 @@ -567,4 +567,4 @@ exports.useId = function () { exports.useMemo = function (create, deps) { return ReactSharedInternals.H.useMemo(create, deps); }; -exports.version = "19.1.0-experimental-540efebc-20250112"; +exports.version = "19.1.0-experimental-cabd8a0e-20250113"; diff --git a/packages/next/src/compiled/react-is/package.json b/packages/next/src/compiled/react-is/package.json index f2d481c745a55..7d650c0ef17b9 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.1.0-canary-540efebc-20250112", + "version": "19.1.0-canary-cabd8a0e-20250113", "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 7a0df58ce832a..73003af3afb98 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 @@ -2894,10 +2894,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.1.0-experimental-540efebc-20250112", + version: "19.1.0-experimental-cabd8a0e-20250113", rendererPackageName: "react-server-dom-turbopack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-540efebc-20250112", + reconcilerVersion: "19.1.0-experimental-cabd8a0e-20250113", 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 c1be6ba04b422..412db36a16cb6 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-540efebc-20250112", - "react-dom": "0.0.0-experimental-540efebc-20250112" + "react": "0.0.0-experimental-cabd8a0e-20250113", + "react-dom": "0.0.0-experimental-cabd8a0e-20250113" } } \ 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 2e0599c2a9c1d..c9edfb418214d 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 @@ -2460,10 +2460,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.1.0-canary-540efebc-20250112", + version: "19.1.0-canary-cabd8a0e-20250113", rendererPackageName: "react-server-dom-turbopack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-540efebc-20250112", + reconcilerVersion: "19.1.0-canary-cabd8a0e-20250113", 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 ea450e4f8ec5c..7eb08c0ced32f 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.1.0-canary-540efebc-20250112", - "react-dom": "19.1.0-canary-540efebc-20250112" + "react": "19.1.0-canary-cabd8a0e-20250113", + "react-dom": "19.1.0-canary-cabd8a0e-20250113" } } \ 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 4b3b7e03b7dd9..ee2a9defc1151 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 @@ -2909,10 +2909,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.1.0-experimental-540efebc-20250112", + version: "19.1.0-experimental-cabd8a0e-20250113", rendererPackageName: "react-server-dom-webpack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-540efebc-20250112", + reconcilerVersion: "19.1.0-experimental-cabd8a0e-20250113", 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 9f2709181ef35..244aac31b6932 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 @@ -64,8 +64,8 @@ "webpack-sources": "^3.2.0" }, "peerDependencies": { - "react": "0.0.0-experimental-540efebc-20250112", - "react-dom": "0.0.0-experimental-540efebc-20250112", + "react": "0.0.0-experimental-cabd8a0e-20250113", + "react-dom": "0.0.0-experimental-cabd8a0e-20250113", "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 fe17b368c674b..be4c397239d56 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 @@ -2475,10 +2475,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.1.0-canary-540efebc-20250112", + version: "19.1.0-canary-cabd8a0e-20250113", rendererPackageName: "react-server-dom-webpack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-540efebc-20250112", + reconcilerVersion: "19.1.0-canary-cabd8a0e-20250113", 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 be26be48ba74b..aa0346dc9a675 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/package.json +++ b/packages/next/src/compiled/react-server-dom-webpack/package.json @@ -64,8 +64,8 @@ "webpack-sources": "^3.2.0" }, "peerDependencies": { - "react": "19.1.0-canary-540efebc-20250112", - "react-dom": "19.1.0-canary-540efebc-20250112", + "react": "19.1.0-canary-cabd8a0e-20250113", + "react-dom": "19.1.0-canary-cabd8a0e-20250113", "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 526ab079d05ad..ead6cabc45372 100644 --- a/packages/next/src/compiled/react/cjs/react.development.js +++ b/packages/next/src/compiled/react/cjs/react.development.js @@ -1518,7 +1518,7 @@ exports.useTransition = function () { return resolveDispatcher().useTransition(); }; - exports.version = "19.1.0-canary-540efebc-20250112"; + exports.version = "19.1.0-canary-cabd8a0e-20250113"; "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 4437e8666600d..6a127ad0701c7 100644 --- a/packages/next/src/compiled/react/cjs/react.production.js +++ b/packages/next/src/compiled/react/cjs/react.production.js @@ -540,4 +540,4 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactSharedInternals.H.useTransition(); }; -exports.version = "19.1.0-canary-540efebc-20250112"; +exports.version = "19.1.0-canary-cabd8a0e-20250113"; 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 d7bcaf0607934..0880948d870b8 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 @@ -1110,5 +1110,5 @@ exports.useMemo = function (create, deps) { return resolveDispatcher().useMemo(create, deps); }; - exports.version = "19.1.0-canary-540efebc-20250112"; + exports.version = "19.1.0-canary-cabd8a0e-20250113"; })(); 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 abaa838857624..e7a6fbbe473cf 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 @@ -423,4 +423,4 @@ exports.useId = function () { exports.useMemo = function (create, deps) { return ReactSharedInternals.H.useMemo(create, deps); }; -exports.version = "19.1.0-canary-540efebc-20250112"; +exports.version = "19.1.0-canary-cabd8a0e-20250113"; diff --git a/packages/next/src/compiled/unistore/unistore.js b/packages/next/src/compiled/unistore/unistore.js index 8b073a4151f7c..3a4ad90d3ac59 100644 --- a/packages/next/src/compiled/unistore/unistore.js +++ b/packages/next/src/compiled/unistore/unistore.js @@ -1 +1 @@ -(()=>{var t={791: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={803: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.1.0-canary-7b402084-20250107) + version: 2.2.1(react@19.1.0-canary-cabd8a0e-20250113) source-map: specifier: ^0.7.0 version: 0.7.3 @@ -1654,8 +1654,8 @@ importers: packages/third-parties: dependencies: react: - specifier: 19.1.0-canary-540efebc-20250112 - version: 19.1.0-canary-540efebc-20250112 + specifier: 19.1.0-canary-cabd8a0e-20250113 + version: 19.1.0-canary-cabd8a0e-20250113 third-party-capital: specifier: 1.0.20 version: 1.0.20 @@ -1718,14 +1718,14 @@ importers: specifier: 29.5.0 version: 29.5.0 react: - specifier: 19.1.0-canary-540efebc-20250112 - version: 19.1.0-canary-540efebc-20250112 + specifier: 19.1.0-canary-cabd8a0e-20250113 + version: 19.1.0-canary-cabd8a0e-20250113 react-test-renderer: specifier: 18.2.0 - version: 18.2.0(react@19.1.0-canary-540efebc-20250112) + version: 18.2.0(react@19.1.0-canary-cabd8a0e-20250113) styled-jsx: specifier: ^5.1.2 - version: 5.1.6(@babel/core@7.22.5)(babel-plugin-macros@3.1.0)(react@19.1.0-canary-540efebc-20250112) + version: 5.1.6(@babel/core@7.22.5)(babel-plugin-macros@3.1.0)(react@19.1.0-canary-cabd8a0e-20250113) turbopack/packages/devlow-bench: dependencies: @@ -3473,7 +3473,7 @@ packages: resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==} peerDependencies: '@types/react': '*' - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 peerDependenciesMeta: '@types/react': optional: true @@ -3490,7 +3490,7 @@ packages: '@emotion/use-insertion-effect-with-fallbacks@1.0.1': resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 '@emotion/utils@1.2.1': resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} @@ -3839,14 +3839,14 @@ packages: '@floating-ui/react-dom@2.1.0': resolution: {integrity: sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 '@floating-ui/react@0.26.16': resolution: {integrity: sha512-HEf43zxZNAI/E781QIVpYSF3K2VH4TTYZpqecjdsFkjsaU1EbaWcM++kw0HXFffj7gDUcBFevX8s0rQGQpxkow==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 '@floating-ui/utils@0.2.2': resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==} @@ -4504,13 +4504,13 @@ packages: resolution: {integrity: sha512-l9ypojKN3PjwO1CSLIsqxi7mA25+7w+xc71Q+JuCCREI0tuGwkZsKbIOpuTATIJOjPh8ycLiW7QxX1LYsRTq6w==} peerDependencies: '@mantine/hooks': 7.10.1 - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 '@mantine/hooks@7.11.2': resolution: {integrity: sha512-jhyVe/sbDEG2U8rr2lMecUPgQxcfr5hh9HazqGfkS7ZRIMDO7uJ947yAcTMGGkp5Lxtt5TBFt1Cb6tiB2/1agg==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 '@mapbox/node-pre-gyp@1.0.5': resolution: {integrity: sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA==} @@ -4527,13 +4527,13 @@ packages: '@mdx-js/react@2.2.1': resolution: {integrity: sha512-YdXcMcEnqZhzql98RNrqYo9cEhTTesBiCclEtoiQUbJwx87q9453GTapYU6kJ8ZZ2ek1Vp25SiAXEFy5O/eAPw==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 '@mdx-js/react@3.1.0': resolution: {integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 '@mswjs/cookies@1.1.0': resolution: {integrity: sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==} @@ -5020,8 +5020,8 @@ packages: '@storybook/blocks@8.4.7': resolution: {integrity: sha512-+QH7+JwXXXIyP3fRCxz/7E2VZepAanXJM7G8nbR3wWsqWgrRp4Wra6MvybxAYCxU7aNfJX5c+RW84SNikFpcIA==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 storybook: ^8.4.7 peerDependenciesMeta: react: @@ -5071,8 +5071,8 @@ packages: resolution: {integrity: sha512-Nz/UzeYQdUZUhacrPyfkiiysSjydyjgg/p0P9HxB4p/WaJUUjMAcaoaLgy3EXx61zZJ3iD36WPuDkZs5QYrA0A==} engines: {node: '>=14.0.0'} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 '@storybook/instrumenter@8.4.7': resolution: {integrity: sha512-k6NSD3jaRCCHAFtqXZ7tw8jAzD/yTEWXGya+REgZqq5RCkmJ+9S4Ytp/6OhQMPtPFX23gAuJJzTQVLcCr+gjRg==} @@ -5088,8 +5088,8 @@ packages: resolution: {integrity: sha512-geTSBKyrBagVihil5MF7LkVFynbfHhCinvnbCZZqXW7M1vgcxvatunUENB+iV8eWg/0EJ+8O7scZL+BAxQ/2qg==} engines: {node: '>=18.0.0'} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 storybook: ^8.4.7 typescript: '*' peerDependenciesMeta: @@ -5110,16 +5110,16 @@ packages: '@storybook/react-dom-shim@8.4.7': resolution: {integrity: sha512-6bkG2jvKTmWrmVzCgwpTxwIugd7Lu+2btsLAqhQSzDyIj2/uhMNp8xIMr/NBDtLgq3nomt9gefNa9xxLwk/OMg==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 storybook: ^8.4.7 '@storybook/react-webpack5@8.4.7': resolution: {integrity: sha512-T9GLqlsP4It4El7cC8rSkBPRWvORAsTDULeWlO36RST2TrYnmBOUytsi22mk7cAAAVhhD6rTrs1YdqWRMpfa1w==} engines: {node: '>=18.0.0'} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 storybook: ^8.4.7 typescript: '>= 4.2.x' peerDependenciesMeta: @@ -5131,8 +5131,8 @@ packages: engines: {node: '>=18.0.0'} peerDependencies: '@storybook/test': 8.4.7 - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 storybook: ^8.4.7 typescript: '>= 4.2.x' peerDependenciesMeta: @@ -5355,8 +5355,8 @@ packages: engines: {node: '>=18'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 peerDependenciesMeta: '@types/react': optional: true @@ -11097,7 +11097,7 @@ packages: lucide-react@0.383.0: resolution: {integrity: sha512-13xlG0CQCJtzjSQYwwJ3WRqMHtRj3EXmLlorrARt7y+IHnxUCp3XyFNL1DfaGySWxHObDvnu1u1dV+0VMKHUSg==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} @@ -13509,7 +13509,7 @@ packages: resolution: {integrity: sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw==} engines: {node: '>=10.18'} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 react-docgen-typescript@2.2.2: resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} @@ -13520,26 +13520,18 @@ packages: resolution: {integrity: sha512-APPU8HB2uZnpl6Vt/+0AFoVYgSRtfiP6FLrZgPPTDmqSb2R4qZRbgd0A3VzIFxDt5e+Fozjx79WjLWnF69DK8g==} engines: {node: '>=16.14.0'} - react-dom@0.0.0-experimental-540efebc-20250112: - resolution: {integrity: sha512-gKirKClhfX5aQelHuhIl1VtRx8Zc3+dpM1Am92N00DHtdncd3sNdYT6ewuNoz8Q3h+nBbS/AYDX8wwliZDEhgA==} + react-dom@0.0.0-experimental-cabd8a0e-20250113: + resolution: {integrity: sha512-kVIvO/ulHGuwD9UIe4CfosieurqRP49NYbNqSjLT17Ii5jYK+PDHGwsERHHJr2D18+KB/LGueZKrlHd5OieWng==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 - react-dom@19.1.0-canary-540efebc-20250112: - resolution: {integrity: sha512-4l4tHHcUVN8qw2Pbt8VkmG2NCKrmu15Ax+WrYjhaJtN77PzybJxqoDC2IsfCk5hfrg6AF8me3oh/yxKUQ4cFXw==} + react-dom@19.1.0-canary-cabd8a0e-20250113: + resolution: {integrity: sha512-/f4D7cChtjlV1JRNTsfRYZuHEejoI44Q0uFbaaB4NPRdn9CnFOGy5VC/1noahJsZMUpQXiQsRT9nGjwGvl8chg==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 - react-dom@19.1.0-canary-7b402084-20250107: - resolution: {integrity: sha512-ETzHi3lWsrfAeQz60P9YyhvvlOYPEOcP2Du0cRvaqzAuF/iP4kBsHKmSuFQU1Usn1g/u3ecbar6d08jsup2V0Q==} - peerDependencies: - react: 19.1.0-canary-540efebc-20250112 - - react-is@19.1.0-canary-540efebc-20250112: - resolution: {integrity: sha512-RUzp8kDQNPxFwW7N+oN0CO7xZ9YYiyMVAjuUQx3pQ+FKUvPsNHsdtmZIpFyPBtQX3u/NzYlChuU0pHCX/JQpag==} - - react-is@19.1.0-canary-7b402084-20250107: - resolution: {integrity: sha512-RFQLt4TJ3QcacHkWKICm1NPgd6BR/M5NF07aGT0ueGQcYkBRbauRilulQVl/nAR5c+y3sxkNJ4mWk3U7tKtEGQ==} + react-is@19.1.0-canary-cabd8a0e-20250113: + resolution: {integrity: sha512-JW0m9wMfbt3QBl6QTss8hJEkOCvGtbA8spSpx5f5lyF+hM9a/JgZvgmuodl0uF8I6XLcU3rDaPI5itsI7MRrRA==} react-lifecycles-compat@3.0.4: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} @@ -13547,8 +13539,8 @@ packages: react-number-format@5.4.0: resolution: {integrity: sha512-NWdICrqLhI7rAS8yUeLVd6Wr4cN7UjJ9IBTS0f/a9i7UB4x4Ti70kGnksBtZ7o4Z7YRbvCMMR/jQmkoOBa/4fg==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 react-refresh@0.12.0: resolution: {integrity: sha512-suLIhrU2IHKL5JEKR/fAwJv7bbeq4kJ+pJopf77jHwuR+HmJS/HbrPIGsTBUVfw7tXPOmYv7UJ7PCaN49e8x4A==} @@ -13559,7 +13551,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 peerDependenciesMeta: '@types/react': optional: true @@ -13569,58 +13561,58 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 peerDependenciesMeta: '@types/react': optional: true - react-server-dom-turbopack@0.0.0-experimental-540efebc-20250112: - resolution: {integrity: sha512-nyEkkH/mLKDm0W7Vc1Bq15Rf+XfChXtKLjCVXLo/sbdmqgZj3cI/EY8uqcA4XYej8b2oz6iuP55wdAgTFIR/Ww==} + react-server-dom-turbopack@0.0.0-experimental-cabd8a0e-20250113: + resolution: {integrity: sha512-CKdMWD40BAs9xQD1Ib8XYStyHiNHW+M/e6edL0FsfEW8P0J6UrixMzCfHoedHj7dW0gGn4fuptdNHLprtMcCuw==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 - react-server-dom-turbopack@19.1.0-canary-540efebc-20250112: - resolution: {integrity: sha512-2oQVazCoXIy2nY0Gci0PTO1rNKy0FJfugbI1uUE09/5y7QJPg+6RvwIQt4UgdLBtmAjA+AqANJuJGGpdtZb4PQ==} + react-server-dom-turbopack@19.1.0-canary-cabd8a0e-20250113: + resolution: {integrity: sha512-13wQ54Qto3XPmP1KkJciwvppINJYWW/Aw3BimhECrORtzTKlJdxM8pWZlzqJT3+B+q02pvM0NlffHQ32STdGXg==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 - react-server-dom-webpack@0.0.0-experimental-540efebc-20250112: - resolution: {integrity: sha512-40ClUE0AiCyPOwSIS1UMovOHGF6QyRerpULBkc41t9Kw5uaDPZ8Xsol89zZ8Dymys9KnNf6b/d/WUw7GCrjQWg==} + react-server-dom-webpack@0.0.0-experimental-cabd8a0e-20250113: + resolution: {integrity: sha512-8awhtZtmg53T9I20Ru/LwVWlULcBibkg3Nk+sEIE57jagavqJ/lAjxItN+KGZ5ecEQ2M5GsHmwMv6e0KgJsw6A==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 webpack: 5.96.1 - react-server-dom-webpack@19.1.0-canary-540efebc-20250112: - resolution: {integrity: sha512-cEkLrsmuo3pNgrGGG2o9FTkyJlUGbU+RGNpElwiB51KoUrMAUXDZJfJQzhxCZRjdQeklRlyhPLf2n56Tvj9UTw==} + react-server-dom-webpack@19.1.0-canary-cabd8a0e-20250113: + resolution: {integrity: sha512-ZU0visw8kKSBG3um+5Kxiusc2j5aHpGiTSGSZ+tEnS+Ddi7gFS0uahEFi6CBziaMwHUj6CBkvX3/m+B0mdIlrg==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 webpack: 5.96.1 react-shallow-renderer@16.15.0: resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 react-ssr-prepass@1.0.8: resolution: {integrity: sha512-O0gfRA1SaK+9ITKxqfnXsej2jF+OHGP/+GxD4unROQaM/0/UczGF9fuF+wTboxaQoKdIf4FvS3h/OigWh704VA==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 - react-is: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-is: 19.1.0-canary-cabd8a0e-20250113 react-style-singleton@2.2.1: resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 peerDependenciesMeta: '@types/react': optional: true @@ -13628,30 +13620,26 @@ packages: react-test-renderer@18.2.0: resolution: {integrity: sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 react-textarea-autosize@8.5.3: resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} engines: {node: '>=10'} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 react-virtualized@9.22.3: resolution: {integrity: sha512-MKovKMxWTcwPSxE1kK1HcheQTWfuCxAuBoSTf2gwyMM21NdX/PXUhnoP8Uc5dRKd+nKm8v41R36OellhdCpkrw==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 - react@0.0.0-experimental-540efebc-20250112: - resolution: {integrity: sha512-2LQAgj6F+0myYmH578IjfNI+yoQD04CedcAWo3XOgGvmYx20odtUYuhLixinRM+rcsodviEILo5YzCn47Aw60Q==} + react@0.0.0-experimental-cabd8a0e-20250113: + resolution: {integrity: sha512-HMHxGi5X0Fa/7r477S39uBhPUWT368FzPLHRolgi4goL7OtE4j7ZebfvB5+4nEKvwYADaWhz1rSWcKwaZ3lFSA==} engines: {node: '>=0.10.0'} - react@19.1.0-canary-540efebc-20250112: - resolution: {integrity: sha512-ZVdBu9kNV2DQ4CH8EKMyGLGvseKvDZ1TjTzGf+t8A4AbWgKdE0NHF95VxnImCCEOs6NToQnAb0ikop9+s9VcMQ==} - engines: {node: '>=0.10.0'} - - react@19.1.0-canary-7b402084-20250107: - resolution: {integrity: sha512-eNedwsJPq2YuB8dfdne6GW9LEEI/xlZdW7ABjTgGYLwTlmt0avtgMOUlLpABhWyTW5l//JIZTWWbhQ2plw7Pxw==} + react@19.1.0-canary-cabd8a0e-20250113: + resolution: {integrity: sha512-apBbrsH8Yh7lBDV2e4fb4XGOO3udWZ3KUx3NVj/ZFl9j5/Dy07sUAACsBv4asREarkXpHcaSbYrJ22gI94Kjjg==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -14187,11 +14175,11 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.0.0-experimental-540efebc-20250112: - resolution: {integrity: sha512-9twdrlBgpWB+1+pWboRnLG3x6XR7EE0M/MaAgmIBYuCsJf4bBx160budgLoU+tgBEu+LeK1Wv4vYDwwH73EY/Q==} + scheduler@0.0.0-experimental-cabd8a0e-20250113: + resolution: {integrity: sha512-XznrqyeXlBKj1KzJ5AyzV1ntc6d1EkTx9KvDMmNu1XzZCnvlT7e31q+8pGP/vZc88khO3Wps3JRFEeeIBRmmVg==} - scheduler@0.26.0-canary-540efebc-20250112: - resolution: {integrity: sha512-Dt1UmNTqxI1ux3vJLP36HiAvb/PX48yuHe+Y7yJX6vBp63WXXaH9t4PcRC8XTnSmpgMJBm4n+moxQHvheYz2Fw==} + scheduler@0.26.0-canary-cabd8a0e-20250113: + resolution: {integrity: sha512-PQHH4ULgODMRbF3JtyD9WVqk7OhQrm3J2sVO71CSt8mf8j6s/NEm2xloOBZe1vmtjBQFBX+3ZFC/+7Fs2/5qNQ==} schema-utils@2.7.1: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} @@ -14763,8 +14751,8 @@ packages: engines: {node: '>= 16'} peerDependencies: babel-plugin-styled-components: '>= 2' - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113 peerDependenciesMeta: babel-plugin-styled-components: optional: true @@ -14778,7 +14766,7 @@ packages: peerDependencies: '@babel/core': '*' babel-plugin-macros: '*' - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 peerDependenciesMeta: '@babel/core': optional: true @@ -14862,7 +14850,7 @@ packages: swr@2.2.4: resolution: {integrity: sha512-njiZ/4RiIhoOlAaLYDqwz5qH/KZXVilRLvomrx83HjzCWTfa+InyfAjv05PSFxnmLzZkNO9ZfvgoqzAaEI4sGQ==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 symbol-observable@1.0.1: resolution: {integrity: sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==} @@ -15628,7 +15616,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 peerDependenciesMeta: '@types/react': optional: true @@ -15636,13 +15624,13 @@ packages: use-composed-ref@1.3.0: resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 use-isomorphic-layout-effect@1.1.2: resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 peerDependenciesMeta: '@types/react': optional: true @@ -15651,7 +15639,7 @@ packages: resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} peerDependencies: '@types/react': '*' - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 peerDependenciesMeta: '@types/react': optional: true @@ -15661,7 +15649,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 peerDependenciesMeta: '@types/react': optional: true @@ -15669,7 +15657,7 @@ packages: use-sync-external-store@1.2.0: resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -18222,12 +18210,12 @@ snapshots: '@capsizecss/metrics@3.4.0': {} - '@chromatic-com/storybook@3.2.2(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))': + '@chromatic-com/storybook@3.2.2(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))': dependencies: chromatic: 11.20.2 filesize: 10.1.6 jsonfile: 6.1.0 - react-confetti: 6.1.0(react@19.1.0-canary-540efebc-20250112) + react-confetti: 6.1.0(react@19.1.0-canary-cabd8a0e-20250113) storybook: 8.4.7(prettier@3.3.3) strip-ansi: 7.1.0 transitivePeerDependencies: @@ -18375,17 +18363,17 @@ snapshots: '@emotion/memoize@0.8.1': {} - '@emotion/react@11.11.1(@types/react@19.0.0)(react@19.1.0-canary-540efebc-20250112)': + '@emotion/react@11.11.1(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113)': dependencies: '@babel/runtime': 7.22.5 '@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.1.0-canary-540efebc-20250112) + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@19.1.0-canary-cabd8a0e-20250113) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 hoist-non-react-statics: 3.3.2 - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 optionalDependencies: '@types/react': 19.0.0 transitivePeerDependencies: @@ -18403,9 +18391,9 @@ snapshots: '@emotion/unitless@0.8.1': {} - '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@19.1.0-canary-540efebc-20250112)': + '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@19.1.0-canary-cabd8a0e-20250113)': dependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 '@emotion/utils@1.2.1': {} @@ -18754,18 +18742,18 @@ snapshots: '@floating-ui/core': 1.6.2 '@floating-ui/utils': 0.2.2 - '@floating-ui/react-dom@2.1.0(react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107))(react@19.1.0-canary-7b402084-20250107)': + '@floating-ui/react-dom@2.1.0(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)': dependencies: '@floating-ui/dom': 1.6.5 - react: 19.1.0-canary-7b402084-20250107 - react-dom: 19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) - '@floating-ui/react@0.26.16(react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107))(react@19.1.0-canary-7b402084-20250107)': + '@floating-ui/react@0.26.16(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)': dependencies: - '@floating-ui/react-dom': 2.1.0(react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107))(react@19.1.0-canary-7b402084-20250107) + '@floating-ui/react-dom': 2.1.0(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113) '@floating-ui/utils': 0.2.2 - react: 19.1.0-canary-7b402084-20250107 - react-dom: 19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) tabbable: 6.2.0 '@floating-ui/utils@0.2.2': {} @@ -19784,23 +19772,23 @@ snapshots: dependencies: call-bind: 1.0.7 - '@mantine/core@7.10.1(@mantine/hooks@7.11.2(react@19.1.0-canary-7b402084-20250107))(@types/react@19.0.0)(react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107))(react@19.1.0-canary-7b402084-20250107)': + '@mantine/core@7.10.1(@mantine/hooks@7.11.2(react@19.1.0-canary-cabd8a0e-20250113))(@types/react@19.0.0)(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)': dependencies: - '@floating-ui/react': 0.26.16(react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107))(react@19.1.0-canary-7b402084-20250107) - '@mantine/hooks': 7.11.2(react@19.1.0-canary-7b402084-20250107) + '@floating-ui/react': 0.26.16(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113) + '@mantine/hooks': 7.11.2(react@19.1.0-canary-cabd8a0e-20250113) clsx: 2.1.1 - react: 19.1.0-canary-7b402084-20250107 - react-dom: 19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107) - react-number-format: 5.4.0(react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107))(react@19.1.0-canary-7b402084-20250107) - react-remove-scroll: 2.5.10(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) - react-textarea-autosize: 8.5.3(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) + react-number-format: 5.4.0(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113) + react-remove-scroll: 2.5.10(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113) + react-textarea-autosize: 8.5.3(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113) type-fest: 4.18.3 transitivePeerDependencies: - '@types/react' - '@mantine/hooks@7.11.2(react@19.1.0-canary-7b402084-20250107)': + '@mantine/hooks@7.11.2(react@19.1.0-canary-cabd8a0e-20250113)': dependencies: - react: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-cabd8a0e-20250113 '@mapbox/node-pre-gyp@1.0.5(encoding@0.1.13)': dependencies: @@ -19847,23 +19835,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@2.2.1(react@19.1.0-canary-540efebc-20250112)': + '@mdx-js/react@2.2.1(react@19.1.0-canary-cabd8a0e-20250113)': dependencies: '@types/mdx': 2.0.3 '@types/react': 19.0.0 - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 - '@mdx-js/react@2.2.1(react@19.1.0-canary-7b402084-20250107)': + '@mdx-js/react@3.1.0(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113)': dependencies: '@types/mdx': 2.0.3 '@types/react': 19.0.0 - react: 19.1.0-canary-7b402084-20250107 - - '@mdx-js/react@3.1.0(@types/react@19.0.0)(react@19.1.0-canary-540efebc-20250112)': - dependencies: - '@types/mdx': 2.0.3 - '@types/react': 19.0.0 - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 '@mswjs/cookies@1.1.0': {} @@ -20433,12 +20415,12 @@ snapshots: '@storybook/addon-docs@8.4.7(@types/react@19.0.0)(storybook@8.4.7(prettier@3.3.3))': dependencies: - '@mdx-js/react': 3.1.0(@types/react@19.0.0)(react@19.1.0-canary-540efebc-20250112) - '@storybook/blocks': 8.4.7(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3)) + '@mdx-js/react': 3.1.0(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113) + '@storybook/blocks': 8.4.7(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3)) '@storybook/csf-plugin': 8.4.7(storybook@8.4.7(prettier@3.3.3)) - '@storybook/react-dom-shim': 8.4.7(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3)) - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) + '@storybook/react-dom-shim': 8.4.7(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3)) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) storybook: 8.4.7(prettier@3.3.3) ts-dedent: 2.2.0 transitivePeerDependencies: @@ -20480,9 +20462,9 @@ snapshots: storybook: 8.4.7(prettier@3.3.3) tiny-invariant: 1.3.3 - '@storybook/addon-onboarding@8.4.7(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))': + '@storybook/addon-onboarding@8.4.7(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))': dependencies: - react-confetti: 6.1.0(react@19.1.0-canary-540efebc-20250112) + react-confetti: 6.1.0(react@19.1.0-canary-cabd8a0e-20250113) storybook: 8.4.7(prettier@3.3.3) transitivePeerDependencies: - react @@ -20510,15 +20492,15 @@ snapshots: - '@swc/helpers' - webpack - '@storybook/blocks@8.4.7(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))': + '@storybook/blocks@8.4.7(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))': dependencies: '@storybook/csf': 0.1.12 - '@storybook/icons': 1.3.0(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112) + '@storybook/icons': 1.3.0(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113) storybook: 8.4.7(prettier@3.3.3) ts-dedent: 2.2.0 optionalDependencies: - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) '@storybook/builder-webpack5@8.4.7(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': dependencies: @@ -20598,10 +20580,10 @@ snapshots: '@storybook/global@5.0.0': {} - '@storybook/icons@1.3.0(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)': + '@storybook/icons@1.3.0(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)': dependencies: - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) '@storybook/instrumenter@8.4.7(storybook@8.4.7(prettier@3.3.3))': dependencies: @@ -20613,18 +20595,18 @@ snapshots: dependencies: storybook: 8.4.7(prettier@3.3.3) - '@storybook/preset-react-webpack@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': + '@storybook/preset-react-webpack@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': dependencies: '@storybook/core-webpack': 8.4.7(storybook@8.4.7(prettier@3.3.3)) - '@storybook/react': 8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) + '@storybook/react': 8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.7.2)(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)) '@types/node': 20.17.6 '@types/semver': 7.5.6 find-up: 5.0.0 magic-string: 0.30.17 - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 react-docgen: 7.1.0 - react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) resolve: 1.22.8 semver: 7.6.3 storybook: 8.4.7(prettier@3.3.3) @@ -20658,20 +20640,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/react-dom-shim@8.4.7(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))': + '@storybook/react-dom-shim@8.4.7(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))': dependencies: - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) storybook: 8.4.7(prettier@3.3.3) - '@storybook/react-webpack5@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': + '@storybook/react-webpack5@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': dependencies: '@storybook/builder-webpack5': 8.4.7(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) - '@storybook/preset-react-webpack': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) - '@storybook/react': 8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) + '@storybook/preset-react-webpack': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) + '@storybook/react': 8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) '@types/node': 20.17.6 - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) storybook: 8.4.7(prettier@3.3.3) optionalDependencies: typescript: 5.7.2 @@ -20684,16 +20666,16 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react@8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': + '@storybook/react@8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': dependencies: '@storybook/components': 8.4.7(storybook@8.4.7(prettier@3.3.3)) '@storybook/global': 5.0.0 '@storybook/manager-api': 8.4.7(storybook@8.4.7(prettier@3.3.3)) '@storybook/preview-api': 8.4.7(storybook@8.4.7(prettier@3.3.3)) - '@storybook/react-dom-shim': 8.4.7(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(storybook@8.4.7(prettier@3.3.3)) + '@storybook/react-dom-shim': 8.4.7(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3)) '@storybook/theming': 8.4.7(storybook@8.4.7(prettier@3.3.3)) - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) storybook: 8.4.7(prettier@3.3.3) optionalDependencies: '@storybook/test': 8.4.7(storybook@8.4.7(prettier@3.3.3)) @@ -20929,13 +20911,13 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react@15.0.7(@types/react@19.0.0)(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)': + '@testing-library/react@15.0.7(@types/react@19.0.0)(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)': dependencies: '@babel/runtime': 7.22.5 '@testing-library/dom': 10.1.0 '@types/react-dom': 19.0.0 - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) optionalDependencies: '@types/react': 19.0.0 @@ -26291,7 +26273,7 @@ snapshots: hoist-non-react-statics@3.3.2: dependencies: - react-is: 19.1.0-canary-540efebc-20250112 + react-is: 19.1.0-canary-cabd8a0e-20250113 homedir-polyfill@1.0.3: dependencies: @@ -28149,9 +28131,9 @@ snapshots: lru-cache@7.18.3: {} - lucide-react@0.383.0(react@19.1.0-canary-7b402084-20250107): + lucide-react@0.383.0(react@19.1.0-canary-cabd8a0e-20250113): dependencies: - react: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-cabd8a0e-20250113 lz-string@1.5.0: {} @@ -30947,31 +30929,31 @@ snapshots: '@jest/types': 24.9.0 ansi-regex: 4.1.0 ansi-styles: 3.2.1 - react-is: 19.1.0-canary-540efebc-20250112 + react-is: 19.1.0-canary-cabd8a0e-20250113 pretty-format@27.5.1: dependencies: ansi-regex: 5.0.1 ansi-styles: 5.2.0 - react-is: 19.1.0-canary-540efebc-20250112 + react-is: 19.1.0-canary-cabd8a0e-20250113 pretty-format@29.5.0: dependencies: '@jest/schemas': 29.4.3 ansi-styles: 5.2.0 - react-is: 19.1.0-canary-540efebc-20250112 + react-is: 19.1.0-canary-cabd8a0e-20250113 pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 19.1.0-canary-540efebc-20250112 + react-is: 19.1.0-canary-cabd8a0e-20250113 pretty-format@30.0.0-alpha.6: dependencies: '@jest/schemas': 30.0.0-alpha.6 ansi-styles: 5.2.0 - react-is: 19.1.0-canary-540efebc-20250112 + react-is: 19.1.0-canary-cabd8a0e-20250113 pretty-ms@7.0.0: dependencies: @@ -31030,7 +31012,7 @@ snapshots: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 - react-is: 19.1.0-canary-540efebc-20250112 + react-is: 19.1.0-canary-cabd8a0e-20250113 property-information@5.6.0: dependencies: @@ -31200,9 +31182,9 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-confetti@6.1.0(react@19.1.0-canary-540efebc-20250112): + react-confetti@6.1.0(react@19.1.0-canary-cabd8a0e-20250113): dependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 tween-functions: 1.2.0 react-docgen-typescript@2.2.2(typescript@5.7.2): @@ -31224,139 +31206,130 @@ snapshots: transitivePeerDependencies: - supports-color - react-dom@0.0.0-experimental-540efebc-20250112(react@19.1.0-canary-540efebc-20250112): - dependencies: - react: 19.1.0-canary-540efebc-20250112 - scheduler: 0.26.0-canary-540efebc-20250112 - - react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112): + react-dom@0.0.0-experimental-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113): dependencies: - react: 19.1.0-canary-540efebc-20250112 - scheduler: 0.26.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + scheduler: 0.26.0-canary-cabd8a0e-20250113 - react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107): + react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113): dependencies: - react: 19.1.0-canary-7b402084-20250107 - scheduler: 0.26.0-canary-540efebc-20250112 - - react-is@19.1.0-canary-540efebc-20250112: {} + react: 19.1.0-canary-cabd8a0e-20250113 + scheduler: 0.26.0-canary-cabd8a0e-20250113 - react-is@19.1.0-canary-7b402084-20250107: {} + react-is@19.1.0-canary-cabd8a0e-20250113: {} react-lifecycles-compat@3.0.4: {} - react-number-format@5.4.0(react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107))(react@19.1.0-canary-7b402084-20250107): + react-number-format@5.4.0(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113): dependencies: prop-types: 15.8.1 - react: 19.1.0-canary-7b402084-20250107 - react-dom: 19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) react-refresh@0.12.0: {} - react-remove-scroll-bar@2.3.6(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): + react-remove-scroll-bar@2.3.6(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113): dependencies: - react: 19.1.0-canary-7b402084-20250107 - react-style-singleton: 2.2.1(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) + react: 19.1.0-canary-cabd8a0e-20250113 + react-style-singleton: 2.2.1(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113) tslib: 2.8.1 optionalDependencies: '@types/react': 19.0.0 - react-remove-scroll@2.5.10(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): + react-remove-scroll@2.5.10(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113): dependencies: - react: 19.1.0-canary-7b402084-20250107 - react-remove-scroll-bar: 2.3.6(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) - react-style-singleton: 2.2.1(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) + react: 19.1.0-canary-cabd8a0e-20250113 + react-remove-scroll-bar: 2.3.6(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113) + react-style-singleton: 2.2.1(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113) tslib: 2.8.1 - use-callback-ref: 1.3.2(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) - use-sidecar: 1.1.2(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) + use-callback-ref: 1.3.2(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113) + use-sidecar: 1.1.2(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113) optionalDependencies: '@types/react': 19.0.0 - react-server-dom-turbopack@0.0.0-experimental-540efebc-20250112(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112): + react-server-dom-turbopack@0.0.0-experimental-cabd8a0e-20250113(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) - react-server-dom-turbopack@19.1.0-canary-540efebc-20250112(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112): + react-server-dom-turbopack@19.1.0-canary-cabd8a0e-20250113(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) - react-server-dom-webpack@0.0.0-experimental-540efebc-20250112(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))): + react-server-dom-webpack@0.0.0-experimental-cabd8a0e-20250113(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) webpack: 5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15)) webpack-sources: 3.2.3(patch_hash=jbynf5dc46ambamq3wuyho6hkq) - react-server-dom-webpack@19.1.0-canary-540efebc-20250112(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112)(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))): + react-server-dom-webpack@19.1.0-canary-cabd8a0e-20250113(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) webpack: 5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15)) webpack-sources: 3.2.3(patch_hash=jbynf5dc46ambamq3wuyho6hkq) - react-shallow-renderer@16.15.0(react@19.1.0-canary-540efebc-20250112): + react-shallow-renderer@16.15.0(react@19.1.0-canary-cabd8a0e-20250113): dependencies: object-assign: 4.1.1 - react: 19.1.0-canary-540efebc-20250112 - react-is: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-is: 19.1.0-canary-cabd8a0e-20250113 - react-ssr-prepass@1.0.8(react-is@19.1.0-canary-7b402084-20250107)(react@19.1.0-canary-540efebc-20250112): + react-ssr-prepass@1.0.8(react-is@19.1.0-canary-cabd8a0e-20250113)(react@19.1.0-canary-cabd8a0e-20250113): dependencies: object-is: 1.0.2 - react: 19.1.0-canary-540efebc-20250112 - react-is: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-cabd8a0e-20250113 + react-is: 19.1.0-canary-cabd8a0e-20250113 - react-style-singleton@2.2.1(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): + react-style-singleton@2.2.1(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113): dependencies: get-nonce: 1.0.1 invariant: 2.2.4 - react: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-cabd8a0e-20250113 tslib: 2.8.1 optionalDependencies: '@types/react': 19.0.0 - react-test-renderer@18.2.0(react@19.1.0-canary-540efebc-20250112): + react-test-renderer@18.2.0(react@19.1.0-canary-cabd8a0e-20250113): dependencies: - react: 19.1.0-canary-540efebc-20250112 - react-is: 19.1.0-canary-540efebc-20250112 - react-shallow-renderer: 16.15.0(react@19.1.0-canary-540efebc-20250112) - scheduler: 0.26.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 + react-is: 19.1.0-canary-cabd8a0e-20250113 + react-shallow-renderer: 16.15.0(react@19.1.0-canary-cabd8a0e-20250113) + scheduler: 0.26.0-canary-cabd8a0e-20250113 - react-textarea-autosize@8.5.3(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): + react-textarea-autosize@8.5.3(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113): dependencies: '@babel/runtime': 7.22.5 - react: 19.1.0-canary-7b402084-20250107 - use-composed-ref: 1.3.0(react@19.1.0-canary-7b402084-20250107) - use-latest: 1.2.1(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) + react: 19.1.0-canary-cabd8a0e-20250113 + use-composed-ref: 1.3.0(react@19.1.0-canary-cabd8a0e-20250113) + use-latest: 1.2.1(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113) transitivePeerDependencies: - '@types/react' - react-virtualized@9.22.3(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112): + react-virtualized@9.22.3(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113): dependencies: '@babel/runtime': 7.22.5 clsx: 1.1.1 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) react-lifecycles-compat: 3.0.4 - react@0.0.0-experimental-540efebc-20250112: {} - - react@19.1.0-canary-540efebc-20250112: {} + react@0.0.0-experimental-cabd8a0e-20250113: {} - react@19.1.0-canary-7b402084-20250107: {} + react@19.1.0-canary-cabd8a0e-20250113: {} read-cache@1.0.0: dependencies: @@ -32094,9 +32067,9 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.0.0-experimental-540efebc-20250112: {} + scheduler@0.0.0-experimental-cabd8a0e-20250113: {} - scheduler@0.26.0-canary-540efebc-20250112: {} + scheduler@0.26.0-canary-cabd8a0e-20250113: {} schema-utils@2.7.1: dependencies: @@ -32734,7 +32707,7 @@ snapshots: dependencies: inline-style-parser: 0.1.1 - styled-components@6.0.0-rc.3(react-dom@19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112))(react@19.1.0-canary-540efebc-20250112): + styled-components@6.0.0-rc.3(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113): dependencies: '@babel/cli': 7.21.5(@babel/core@7.22.5) '@babel/core': 7.22.5 @@ -32749,8 +32722,8 @@ snapshots: '@emotion/unitless': 0.8.1 css-to-react-native: 3.2.0 postcss: 8.4.31 - react: 19.1.0-canary-540efebc-20250112 - react-dom: 19.1.0-canary-540efebc-20250112(react@19.1.0-canary-540efebc-20250112) + react: 19.1.0-canary-cabd8a0e-20250113 + react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) shallowequal: 1.1.0 stylis: 4.2.0 tslib: 2.5.3 @@ -32762,10 +32735,10 @@ snapshots: postcss: 7.0.32 postcss-load-plugins: 2.3.0 - styled-jsx@5.1.6(@babel/core@7.22.5)(babel-plugin-macros@3.1.0)(react@19.1.0-canary-540efebc-20250112): + styled-jsx@5.1.6(@babel/core@7.22.5)(babel-plugin-macros@3.1.0)(react@19.1.0-canary-cabd8a0e-20250113): dependencies: client-only: 0.0.1 - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 optionalDependencies: '@babel/core': 7.22.5 babel-plugin-macros: 3.1.0 @@ -32861,11 +32834,11 @@ snapshots: '@swc/counter': 0.1.3 webpack: 5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1) - swr@2.2.4(react@19.1.0-canary-540efebc-20250112): + swr@2.2.4(react@19.1.0-canary-cabd8a0e-20250113): dependencies: client-only: 0.0.1 - react: 19.1.0-canary-540efebc-20250112 - use-sync-external-store: 1.2.0(react@19.1.0-canary-540efebc-20250112) + react: 19.1.0-canary-cabd8a0e-20250113 + use-sync-external-store: 1.2.0(react@19.1.0-canary-cabd8a0e-20250113) symbol-observable@1.0.1: {} @@ -33637,9 +33610,9 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - unistore@3.4.1(react@19.1.0-canary-540efebc-20250112): + unistore@3.4.1(react@19.1.0-canary-cabd8a0e-20250113): optionalDependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 universal-github-app-jwt@1.1.1: dependencies: @@ -33733,41 +33706,41 @@ snapshots: punycode: 1.4.1 qs: 6.13.1 - use-callback-ref@1.3.2(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): + use-callback-ref@1.3.2(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113): dependencies: - react: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-cabd8a0e-20250113 tslib: 2.8.1 optionalDependencies: '@types/react': 19.0.0 - use-composed-ref@1.3.0(react@19.1.0-canary-7b402084-20250107): + use-composed-ref@1.3.0(react@19.1.0-canary-cabd8a0e-20250113): dependencies: - react: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-cabd8a0e-20250113 - use-isomorphic-layout-effect@1.1.2(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): + use-isomorphic-layout-effect@1.1.2(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113): dependencies: - react: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-cabd8a0e-20250113 optionalDependencies: '@types/react': 19.0.0 - use-latest@1.2.1(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): + use-latest@1.2.1(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113): dependencies: - react: 19.1.0-canary-7b402084-20250107 - use-isomorphic-layout-effect: 1.1.2(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) + react: 19.1.0-canary-cabd8a0e-20250113 + use-isomorphic-layout-effect: 1.1.2(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113) optionalDependencies: '@types/react': 19.0.0 - use-sidecar@1.1.2(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): + use-sidecar@1.1.2(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113): dependencies: detect-node-es: 1.1.0 - react: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-cabd8a0e-20250113 tslib: 2.8.1 optionalDependencies: '@types/react': 19.0.0 - use-sync-external-store@1.2.0(react@19.1.0-canary-540efebc-20250112): + use-sync-external-store@1.2.0(react@19.1.0-canary-cabd8a0e-20250113): dependencies: - react: 19.1.0-canary-540efebc-20250112 + react: 19.1.0-canary-cabd8a0e-20250113 util-deprecate@1.0.2: {} From 1df81bcea62800198884438a2bb27ba14c9d506a Mon Sep 17 00:00:00 2001 From: Benjamin Woodruff Date: Mon, 13 Jan 2025 11:09:39 -0800 Subject: [PATCH 13/65] refactor(turbopack/next-core): Use ResolvedVc in VisitClientReferenceNodeState (#74710) --- .../visit_client_reference.rs | 53 +++++++++++-------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/crates/next-core/src/next_client_reference/visit_client_reference.rs b/crates/next-core/src/next_client_reference/visit_client_reference.rs index 3954f7a6a4d37..a6991b0187a18 100644 --- a/crates/next-core/src/next_client_reference/visit_client_reference.rs +++ b/crates/next-core/src/next_client_reference/visit_client_reference.rs @@ -95,7 +95,7 @@ impl Default for ClientReferenceGraphResult { } } -#[turbo_tasks::value(shared, local)] +#[turbo_tasks::value(shared)] pub struct VisitedClientReferenceGraphNodes(HashSet); #[turbo_tasks::value_impl] @@ -169,11 +169,11 @@ pub async fn client_reference_graph( .await? { VisitClientReferenceNodeState::InServerComponent { - server_component: *server_component, + server_component, } } else { VisitClientReferenceNodeState::Entry { - entry_path: module.ident().path().resolve().await?, + entry_path: module.ident().path().to_resolved().await?, } }, ty: VisitClientReferenceNodeType::Internal( @@ -244,7 +244,7 @@ pub struct ServerEntries { #[turbo_tasks::function] pub async fn find_server_entries(entry: ResolvedVc>) -> Result> { - let entry_path = entry.ident().path().resolve().await?; + let entry_path = entry.ident().path().to_resolved().await?; let graph = AdjacencyMap::new() .skip_duplicates() .visit( @@ -288,7 +288,16 @@ struct VisitClientReference { } #[derive( - Clone, Eq, PartialEq, Hash, Serialize, Deserialize, Debug, ValueDebugFormat, TraceRawVcs, + Clone, + Eq, + PartialEq, + Hash, + Serialize, + Deserialize, + Debug, + ValueDebugFormat, + TraceRawVcs, + NonLocalValue, )] struct VisitClientReferenceNode { state: VisitClientReferenceNodeState, @@ -296,19 +305,29 @@ struct VisitClientReferenceNode { } #[derive( - Clone, Copy, Eq, PartialEq, Hash, Serialize, Deserialize, Debug, ValueDebugFormat, TraceRawVcs, + Clone, + Copy, + Eq, + PartialEq, + Hash, + Serialize, + Deserialize, + Debug, + ValueDebugFormat, + TraceRawVcs, + NonLocalValue, )] enum VisitClientReferenceNodeState { Entry { - entry_path: Vc, + entry_path: ResolvedVc, }, InServerComponent { - server_component: Vc, + server_component: ResolvedVc, }, InServerUtil, } impl VisitClientReferenceNodeState { - fn server_component(&self) -> Option> { + fn server_component(&self) -> Option> { match self { VisitClientReferenceNodeState::Entry { .. } => None, VisitClientReferenceNodeState::InServerComponent { server_component } => { @@ -389,12 +408,7 @@ impl Visit for VisitClientReference { state: node.state, ty: VisitClientReferenceNodeType::ClientReference( ClientReference { - server_component: match node.state.server_component() { - Some(server_component) => { - Some(server_component.to_resolved().await?) - } - None => None, - }, + server_component: node.state.server_component(), ty: ClientReferenceType::EcmascriptClientReference { parent_module, module: client_reference_module, @@ -412,12 +426,7 @@ impl Visit for VisitClientReference { state: node.state, ty: VisitClientReferenceNodeType::ClientReference( ClientReference { - server_component: match node.state.server_component() { - Some(server_component) => { - Some(server_component.to_resolved().await?) - } - None => None, - }, + server_component: node.state.server_component(), ty: ClientReferenceType::CssClientReference( css_client_reference_asset, ), @@ -432,7 +441,7 @@ impl Visit for VisitClientReference { { return Ok(VisitClientReferenceNode { state: VisitClientReferenceNodeState::InServerComponent { - server_component: *server_component_asset, + server_component: server_component_asset, }, ty: VisitClientReferenceNodeType::ServerComponentEntry( server_component_asset, From 5a935b03b445429ffce3a561d36b4f1d1556353a Mon Sep 17 00:00:00 2001 From: vercel-release-bot Date: Mon, 13 Jan 2025 20:01:53 +0000 Subject: [PATCH 14/65] v15.2.0-canary.7 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/eslint-config-next/package.json | 4 ++-- packages/eslint-plugin-next/package.json | 2 +- packages/font/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-codemod/package.json | 2 +- packages/next-env/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-storybook/package.json | 2 +- packages/next-polyfill-module/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next-swc/package.json | 2 +- packages/next/package.json | 14 +++++++------- packages/react-refresh-utils/package.json | 2 +- packages/third-parties/package.json | 4 ++-- pnpm-lock.yaml | 16 ++++++++-------- 17 files changed, 32 insertions(+), 32 deletions(-) diff --git a/lerna.json b/lerna.json index 838b4ae5e0f9d..23ab8962e2bd6 100644 --- a/lerna.json +++ b/lerna.json @@ -16,5 +16,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "15.2.0-canary.6" + "version": "15.2.0-canary.7" } diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index eb352cb183f9f..f61a6b57a25a9 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "15.2.0-canary.6", + "version": "15.2.0-canary.7", "keywords": [ "react", "next", diff --git a/packages/eslint-config-next/package.json b/packages/eslint-config-next/package.json index c94fdbafc8d82..7e5b245a7000f 100644 --- a/packages/eslint-config-next/package.json +++ b/packages/eslint-config-next/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-next", - "version": "15.2.0-canary.6", + "version": "15.2.0-canary.7", "description": "ESLint configuration used by Next.js.", "main": "index.js", "license": "MIT", @@ -10,7 +10,7 @@ }, "homepage": "https://nextjs.org/docs/app/api-reference/config/eslint", "dependencies": { - "@next/eslint-plugin-next": "15.2.0-canary.6", + "@next/eslint-plugin-next": "15.2.0-canary.7", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", diff --git a/packages/eslint-plugin-next/package.json b/packages/eslint-plugin-next/package.json index dba8b7f8dbdbb..c50f2cf6ce03a 100644 --- a/packages/eslint-plugin-next/package.json +++ b/packages/eslint-plugin-next/package.json @@ -1,6 +1,6 @@ { "name": "@next/eslint-plugin-next", - "version": "15.2.0-canary.6", + "version": "15.2.0-canary.7", "description": "ESLint plugin for Next.js.", "main": "dist/index.js", "license": "MIT", diff --git a/packages/font/package.json b/packages/font/package.json index b96d2419582ec..cc9857794f960 100644 --- a/packages/font/package.json +++ b/packages/font/package.json @@ -1,7 +1,7 @@ { "name": "@next/font", "private": true, - "version": "15.2.0-canary.6", + "version": "15.2.0-canary.7", "repository": { "url": "vercel/next.js", "directory": "packages/font" diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index dd1f3d0ceedf0..45d2a6a353a34 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "15.2.0-canary.6", + "version": "15.2.0-canary.7", "main": "index.js", "types": "index.d.ts", "license": "MIT", diff --git a/packages/next-codemod/package.json b/packages/next-codemod/package.json index 0c016c61b179c..391918624fcd0 100644 --- a/packages/next-codemod/package.json +++ b/packages/next-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@next/codemod", - "version": "15.2.0-canary.6", + "version": "15.2.0-canary.7", "license": "MIT", "repository": { "type": "git", diff --git a/packages/next-env/package.json b/packages/next-env/package.json index 351d42b2ddcaf..3fecfcf177748 100644 --- a/packages/next-env/package.json +++ b/packages/next-env/package.json @@ -1,6 +1,6 @@ { "name": "@next/env", - "version": "15.2.0-canary.6", + "version": "15.2.0-canary.7", "keywords": [ "react", "next", diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index 5ac9f81604185..c11c74f406ca9 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "15.2.0-canary.6", + "version": "15.2.0-canary.7", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-storybook/package.json b/packages/next-plugin-storybook/package.json index fe5c2568274c7..cbda3bd37bfe1 100644 --- a/packages/next-plugin-storybook/package.json +++ b/packages/next-plugin-storybook/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-storybook", - "version": "15.2.0-canary.6", + "version": "15.2.0-canary.7", "repository": { "url": "vercel/next.js", "directory": "packages/next-plugin-storybook" diff --git a/packages/next-polyfill-module/package.json b/packages/next-polyfill-module/package.json index 9014c3f00e644..1d5463a27c8e2 100644 --- a/packages/next-polyfill-module/package.json +++ b/packages/next-polyfill-module/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-module", - "version": "15.2.0-canary.6", + "version": "15.2.0-canary.7", "description": "A standard library polyfill for ES Modules supporting browsers (Edge 16+, Firefox 60+, Chrome 61+, Safari 10.1+)", "main": "dist/polyfill-module.js", "license": "MIT", diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index 2f4c562946618..910b2c8bfaf0f 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "15.2.0-canary.6", + "version": "15.2.0-canary.7", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next-swc/package.json b/packages/next-swc/package.json index 99b5639903212..3d9f27426cc1e 100644 --- a/packages/next-swc/package.json +++ b/packages/next-swc/package.json @@ -1,6 +1,6 @@ { "name": "@next/swc", - "version": "15.2.0-canary.6", + "version": "15.2.0-canary.7", "private": true, "scripts": { "clean": "node ../../scripts/rm.mjs native", diff --git a/packages/next/package.json b/packages/next/package.json index eb0bffe0d5939..13b1cb36d40e0 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "15.2.0-canary.6", + "version": "15.2.0-canary.7", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -99,7 +99,7 @@ ] }, "dependencies": { - "@next/env": "15.2.0-canary.6", + "@next/env": "15.2.0-canary.7", "@swc/counter": "0.1.3", "@swc/helpers": "0.5.15", "busboy": "1.6.0", @@ -164,11 +164,11 @@ "@jest/types": "29.5.0", "@mswjs/interceptors": "0.23.0", "@napi-rs/triples": "1.2.0", - "@next/font": "15.2.0-canary.6", - "@next/polyfill-module": "15.2.0-canary.6", - "@next/polyfill-nomodule": "15.2.0-canary.6", - "@next/react-refresh-utils": "15.2.0-canary.6", - "@next/swc": "15.2.0-canary.6", + "@next/font": "15.2.0-canary.7", + "@next/polyfill-module": "15.2.0-canary.7", + "@next/polyfill-nomodule": "15.2.0-canary.7", + "@next/react-refresh-utils": "15.2.0-canary.7", + "@next/swc": "15.2.0-canary.7", "@opentelemetry/api": "1.6.0", "@playwright/test": "1.41.2", "@storybook/addon-essentials": "^8.4.7", diff --git a/packages/react-refresh-utils/package.json b/packages/react-refresh-utils/package.json index e07f210b59a4a..dcdfc9ac19eae 100644 --- a/packages/react-refresh-utils/package.json +++ b/packages/react-refresh-utils/package.json @@ -1,6 +1,6 @@ { "name": "@next/react-refresh-utils", - "version": "15.2.0-canary.6", + "version": "15.2.0-canary.7", "description": "An experimental package providing utilities for React Refresh.", "repository": { "url": "vercel/next.js", diff --git a/packages/third-parties/package.json b/packages/third-parties/package.json index a5fc60170c1bb..640c168612224 100644 --- a/packages/third-parties/package.json +++ b/packages/third-parties/package.json @@ -1,6 +1,6 @@ { "name": "@next/third-parties", - "version": "15.2.0-canary.6", + "version": "15.2.0-canary.7", "repository": { "url": "vercel/next.js", "directory": "packages/third-parties" @@ -26,7 +26,7 @@ "third-party-capital": "1.0.20" }, "devDependencies": { - "next": "15.2.0-canary.6", + "next": "15.2.0-canary.7", "outdent": "0.8.0", "prettier": "2.5.1", "typescript": "5.7.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e15681dfc40e7..98c0f7287c4d6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -793,7 +793,7 @@ importers: packages/eslint-config-next: dependencies: '@next/eslint-plugin-next': - specifier: 15.2.0-canary.6 + specifier: 15.2.0-canary.7 version: link:../eslint-plugin-next '@rushstack/eslint-patch': specifier: ^1.10.3 @@ -857,7 +857,7 @@ importers: packages/next: dependencies: '@next/env': - specifier: 15.2.0-canary.6 + specifier: 15.2.0-canary.7 version: link:../next-env '@swc/counter': specifier: 0.1.3 @@ -985,19 +985,19 @@ importers: specifier: 1.2.0 version: 1.2.0 '@next/font': - specifier: 15.2.0-canary.6 + specifier: 15.2.0-canary.7 version: link:../font '@next/polyfill-module': - specifier: 15.2.0-canary.6 + specifier: 15.2.0-canary.7 version: link:../next-polyfill-module '@next/polyfill-nomodule': - specifier: 15.2.0-canary.6 + specifier: 15.2.0-canary.7 version: link:../next-polyfill-nomodule '@next/react-refresh-utils': - specifier: 15.2.0-canary.6 + specifier: 15.2.0-canary.7 version: link:../react-refresh-utils '@next/swc': - specifier: 15.2.0-canary.6 + specifier: 15.2.0-canary.7 version: link:../next-swc '@opentelemetry/api': specifier: 1.6.0 @@ -1661,7 +1661,7 @@ importers: version: 1.0.20 devDependencies: next: - specifier: 15.2.0-canary.6 + specifier: 15.2.0-canary.7 version: link:../next outdent: specifier: 0.8.0 From 521cdaef70ac5d85cf5e1803baa2aecbdeaa68d8 Mon Sep 17 00:00:00 2001 From: Benjamin Woodruff Date: Mon, 13 Jan 2025 12:28:22 -0800 Subject: [PATCH 15/65] refactor(turbopack-core): Use ResolvedVc in ContextCondition (#74711) --- crates/next-core/src/next_client/context.rs | 16 ++------- crates/next-core/src/next_server/context.rs | 33 +++++-------------- crates/next-core/src/util.rs | 33 +++++++++++++++++-- .../crates/turbopack-core/src/condition.rs | 6 ++-- .../src/resolve_options_context.rs | 2 +- 5 files changed, 46 insertions(+), 44 deletions(-) diff --git a/crates/next-core/src/next_client/context.rs b/crates/next-core/src/next_client/context.rs index 77e35284c3d36..af930ae07c064 100644 --- a/crates/next-core/src/next_client/context.rs +++ b/crates/next-core/src/next_client/context.rs @@ -4,7 +4,7 @@ use anyhow::Result; use turbo_rcstr::RcStr; use turbo_tasks::{FxIndexMap, ResolvedVc, Value, Vc}; use turbo_tasks_env::EnvMap; -use turbo_tasks_fs::{FileSystem, FileSystemPath}; +use turbo_tasks_fs::FileSystemPath; use turbopack::{ module_options::{ module_options_context::ModuleOptionsContext, CssOptionsContext, EcmascriptOptionsContext, @@ -19,7 +19,6 @@ use turbopack_core::{ CompileTimeDefineValue, CompileTimeDefines, CompileTimeInfo, DefineableNameSegment, FreeVarReference, FreeVarReferences, }, - condition::ContextCondition, environment::{BrowserEnvironment, Environment, ExecutionEnvironment}, free_var_references, resolve::{parse::Request, pattern::Pattern}, @@ -31,7 +30,6 @@ use turbopack_node::{ use super::transforms::get_next_client_transforms_rules; use crate::{ - embed_js::next_js_fs, mode::NextMode, next_build::get_postcss_package_mapping, next_client::runtime_entry::{RuntimeEntries, RuntimeEntry}, @@ -60,7 +58,7 @@ use crate::{ get_decorators_transform_options, get_jsx_transform_options, get_typescript_transform_options, }, - util::foreign_code_context_condition, + util::{foreign_code_context_condition, internal_assets_conditions}, }; fn defines(define_env: &FxIndexMap) -> CompileTimeDefines { @@ -212,14 +210,6 @@ pub async fn get_client_resolve_options_context( .cell()) } -fn internal_assets_conditions() -> ContextCondition { - ContextCondition::any(vec![ - ContextCondition::InPath(next_js_fs().root()), - ContextCondition::InPath(turbopack_ecmascript_runtime::embed_fs().root()), - ContextCondition::InPath(turbopack_node::embed_js::embed_fs().root()), - ]) -} - #[turbo_tasks::function] pub async fn get_client_module_options_context( project_path: ResolvedVc, @@ -387,7 +377,7 @@ pub async fn get_client_module_options_context( foreign_codes_options_context.resolved_cell(), ), ( - internal_assets_conditions(), + internal_assets_conditions().await?, internal_context.resolved_cell(), ), ], diff --git a/crates/next-core/src/next_server/context.rs b/crates/next-core/src/next_server/context.rs index 0273af182d3c6..9e23f49f07ae7 100644 --- a/crates/next-core/src/next_server/context.rs +++ b/crates/next-core/src/next_server/context.rs @@ -4,7 +4,7 @@ use anyhow::{bail, Result}; use turbo_rcstr::RcStr; use turbo_tasks::{FxIndexMap, ResolvedVc, Value, Vc}; use turbo_tasks_env::{EnvMap, ProcessEnv}; -use turbo_tasks_fs::{FileSystem, FileSystemPath}; +use turbo_tasks_fs::FileSystemPath; use turbopack::{ module_options::{ CssOptionsContext, EcmascriptOptionsContext, JsxTransformOptions, ModuleOptionsContext, @@ -19,7 +19,6 @@ use turbopack_core::{ CompileTimeDefineValue, CompileTimeDefines, CompileTimeInfo, DefineableNameSegment, FreeVarReferences, }, - condition::ContextCondition, environment::{ Environment, ExecutionEnvironment, NodeJsEnvironment, NodeJsVersion, RuntimeVersions, }, @@ -41,7 +40,6 @@ use super::{ transforms::{get_next_server_internal_transforms_rules, get_next_server_transforms_rules}, }; use crate::{ - embed_js::next_js_fs, mode::NextMode, next_build::get_postcss_package_mapping, next_client::RuntimeEntries, @@ -71,8 +69,8 @@ use crate::{ get_typescript_transform_options, }, util::{ - foreign_code_context_condition, get_transpiled_packages, load_next_js_templateon, - NextRuntime, + foreign_code_context_condition, get_transpiled_packages, internal_assets_conditions, + load_next_js_templateon, NextRuntime, }, }; @@ -396,21 +394,6 @@ pub async fn get_server_compile_time_info( .await } -/// Determins if the module is an internal asset (i.e overlay, fallback) coming -/// from the embedded FS, don't apply user defined transforms. -/// -/// [TODO] turbopack specific embed fs should be handled by internals of -/// turbopack itself and user config should not try to leak this. However, -/// currently we apply few transform options subject to next.js's configuration -/// even if it's embedded assets. -fn internal_assets_conditions() -> ContextCondition { - ContextCondition::any(vec![ - ContextCondition::InPath(next_js_fs().root()), - ContextCondition::InPath(turbopack_ecmascript_runtime::embed_fs().root()), - ContextCondition::InPath(turbopack_node::embed_js::embed_fs().root()), - ]) -} - #[turbo_tasks::function] pub async fn get_server_module_options_context( project_path: ResolvedVc, @@ -648,7 +631,7 @@ pub async fn get_server_module_options_context( foreign_code_module_options_context.resolved_cell(), ), ( - internal_assets_conditions(), + internal_assets_conditions().await?, internal_module_options_context.resolved_cell(), ), ], @@ -713,7 +696,7 @@ pub async fn get_server_module_options_context( foreign_code_module_options_context.resolved_cell(), ), ( - internal_assets_conditions(), + internal_assets_conditions().await?, internal_module_options_context.resolved_cell(), ), ], @@ -789,7 +772,7 @@ pub async fn get_server_module_options_context( foreign_code_module_options_context.resolved_cell(), ), ( - internal_assets_conditions(), + internal_assets_conditions().await?, internal_module_options_context.resolved_cell(), ), ], @@ -864,7 +847,7 @@ pub async fn get_server_module_options_context( foreign_code_module_options_context.resolved_cell(), ), ( - internal_assets_conditions(), + internal_assets_conditions().await?, internal_module_options_context.resolved_cell(), ), ], @@ -961,7 +944,7 @@ pub async fn get_server_module_options_context( foreign_code_module_options_context.resolved_cell(), ), ( - internal_assets_conditions(), + internal_assets_conditions().await?, internal_module_options_context.resolved_cell(), ), ], diff --git a/crates/next-core/src/util.rs b/crates/next-core/src/util.rs index b1191f04625cb..3d944b8e4028e 100644 --- a/crates/next-core/src/util.rs +++ b/crates/next-core/src/util.rs @@ -13,7 +13,7 @@ use turbo_tasks::{ }; use turbo_tasks_fs::{ self, json::parse_json_rope_with_source_context, rope::Rope, util::join_path, File, - FileContent, FileSystemPath, + FileContent, FileSystem, FileSystemPath, }; use turbopack_core::{ asset::AssetContent, @@ -32,6 +32,7 @@ use turbopack_ecmascript::{ }; use crate::{ + embed_js::next_js_fs, next_config::{NextConfig, RouteHas}, next_import_map::get_next_package, next_manifests::MiddlewareMatcher, @@ -121,7 +122,10 @@ pub async fn foreign_code_context_condition( // of the `node_modules` specific resolve options (the template files are // technically node module files). let not_next_template_dir = ContextCondition::not(ContextCondition::InPath( - get_next_package(*project_path).join(NEXT_TEMPLATE_PATH.into()), + get_next_package(*project_path) + .join(NEXT_TEMPLATE_PATH.into()) + .to_resolved() + .await?, )); let result = ContextCondition::all(vec![ @@ -137,6 +141,31 @@ pub async fn foreign_code_context_condition( Ok(result) } +/// Determines if the module is an internal asset (i.e overlay, fallback) coming +/// from the embedded FS, don't apply user defined transforms. +/// +/// [TODO] turbopack specific embed fs should be handled by internals of +/// turbopack itself and user config should not try to leak this. However, +/// currently we apply few transform options subject to next.js's configuration +/// even if it's embedded assets. +pub async fn internal_assets_conditions() -> Result { + Ok(ContextCondition::any(vec![ + ContextCondition::InPath(next_js_fs().root().to_resolved().await?), + ContextCondition::InPath( + turbopack_ecmascript_runtime::embed_fs() + .root() + .to_resolved() + .await?, + ), + ContextCondition::InPath( + turbopack_node::embed_js::embed_fs() + .root() + .to_resolved() + .await?, + ), + ])) +} + #[derive( Default, PartialEq, diff --git a/turbopack/crates/turbopack-core/src/condition.rs b/turbopack/crates/turbopack-core/src/condition.rs index bd0060de9e6e7..9085d4c9ede08 100644 --- a/turbopack/crates/turbopack-core/src/condition.rs +++ b/turbopack/crates/turbopack-core/src/condition.rs @@ -1,16 +1,16 @@ use anyhow::Result; use futures::{stream, StreamExt}; use serde::{Deserialize, Serialize}; -use turbo_tasks::{trace::TraceRawVcs, Vc}; +use turbo_tasks::{trace::TraceRawVcs, NonLocalValue, ResolvedVc}; use turbo_tasks_fs::FileSystemPath; -#[derive(Debug, Clone, Serialize, Deserialize, TraceRawVcs, PartialEq, Eq)] +#[derive(Debug, Clone, Serialize, Deserialize, TraceRawVcs, PartialEq, Eq, NonLocalValue)] pub enum ContextCondition { All(Vec), Any(Vec), Not(Box), InDirectory(String), - InPath(Vc), + InPath(ResolvedVc), } impl ContextCondition { diff --git a/turbopack/crates/turbopack-resolve/src/resolve_options_context.rs b/turbopack/crates/turbopack-resolve/src/resolve_options_context.rs index 4607b1ff479a8..b7e009fab215f 100644 --- a/turbopack/crates/turbopack-resolve/src/resolve_options_context.rs +++ b/turbopack/crates/turbopack-resolve/src/resolve_options_context.rs @@ -11,7 +11,7 @@ use turbopack_core::{ }, }; -#[turbo_tasks::value(shared, local)] +#[turbo_tasks::value(shared)] #[derive(Default, Clone)] pub struct ResolveOptionsContext { #[serde(default)] From d710482cf137a8e55cdc1d127007e7700139a1a9 Mon Sep 17 00:00:00 2001 From: Benjamin Woodruff Date: Mon, 13 Jan 2025 14:06:56 -0800 Subject: [PATCH 16/65] refactor(turbopack/next-core): Use ResolvedVc in PackagesGlobs (#74712) --- crates/next-core/src/next_server/resolve.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/crates/next-core/src/next_server/resolve.rs b/crates/next-core/src/next_server/resolve.rs index 014606c9075ff..c493ef2f631db 100644 --- a/crates/next-core/src/next_server/resolve.rs +++ b/crates/next-core/src/next_server/resolve.rs @@ -1,7 +1,7 @@ use anyhow::Result; use serde::{Deserialize, Serialize}; use turbo_rcstr::RcStr; -use turbo_tasks::{trace::TraceRawVcs, ResolvedVc, Value, Vc}; +use turbo_tasks::{trace::TraceRawVcs, NonLocalValue, ResolvedVc, Value, Vc}; use turbo_tasks_fs::{self, glob::Glob, FileJsonContent, FileSystemPath}; use turbopack_core::{ issue::{Issue, IssueExt, IssueSeverity, IssueStage, OptionStyledString, StyledString}, @@ -428,14 +428,13 @@ impl AfterResolvePlugin for ExternalCjsModulesResolvePlugin { } } -#[derive(Serialize, Deserialize, TraceRawVcs, PartialEq, Eq, Debug)] +#[derive(Serialize, Deserialize, TraceRawVcs, PartialEq, Eq, Debug, NonLocalValue)] pub struct PackagesGlobs { - path_glob: Vc, - request_glob: Vc, + path_glob: ResolvedVc, + request_glob: ResolvedVc, } -// TODO move that to turbo -#[turbo_tasks::value(transparent, local)] +#[turbo_tasks::value(transparent)] pub struct OptionPackagesGlobs(Option); #[turbo_tasks::function] @@ -448,8 +447,8 @@ async fn packages_glob(packages: Vc>) -> Result Date: Mon, 13 Jan 2025 23:08:52 +0100 Subject: [PATCH 17/65] docs: mention special case for trailing slash (#74839) ### What Clarify trailing slash special cases [slack-ref](https://vercel.slack.com/archives/C04DUD7EB1B/p1718055917076779) --- .../05-config/01-next-config-js/trailingSlash.mdx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/01-app/04-api-reference/05-config/01-next-config-js/trailingSlash.mdx b/docs/01-app/04-api-reference/05-config/01-next-config-js/trailingSlash.mdx index 892b0b21585e1..70fc2fc58a330 100644 --- a/docs/01-app/04-api-reference/05-config/01-next-config-js/trailingSlash.mdx +++ b/docs/01-app/04-api-reference/05-config/01-next-config-js/trailingSlash.mdx @@ -17,6 +17,13 @@ module.exports = { With this option set, URLs like `/about` will redirect to `/about/`. +When using `trailingSlash: true`, certain URLs are exceptions and will not have a trailing slash appended: + +- Static file URLs, such as files with extensions. +- Any paths under `.well-known/`. + +For example, the following URLs will remain unchanged: `/file.txt`, `images/photos/picture.png`, and `.well-known/subfolder/config.json`. + When used with [`output: "export"`](/docs/app/building-your-application/deploying/static-exports) configuration, the `/about` page will output `/about/index.html` (instead of the default `/about.html`). ## Version History From 99c4dc3dc3921db91dd578997e82347a8c695b7d Mon Sep 17 00:00:00 2001 From: Benjamin Woodruff Date: Mon, 13 Jan 2025 14:48:55 -0800 Subject: [PATCH 18/65] refactor(turbopack): Remove last known (non-test) usages of unresolved vcs in turbo_tasks::value (!!!) (#74713) --- crates/next-api/src/app.rs | 4 ++-- turbopack/crates/turbopack/src/lib.rs | 10 +++++----- .../module_options/module_options_context.rs | 2 +- .../src/module_options/module_rule.rs | 4 ++-- .../src/module_options/rule_condition.rs | 6 +++--- .../src/module_options/transition_rule.rs | 19 +++++++++++-------- .../crates/turbopack/src/transition/mod.rs | 6 +++--- 7 files changed, 27 insertions(+), 24 deletions(-) diff --git a/crates/next-api/src/app.rs b/crates/next-api/src/app.rs index 92ca5b69cd80d..6227e55a1a545 100644 --- a/crates/next-api/src/app.rs +++ b/crates/next-api/src/app.rs @@ -358,7 +358,7 @@ impl AppProject { named_transitions: transitions, transition_rules: vec![TransitionRule::new( styles_rule_condition(), - Vc::upcast(self.client_transition()), + ResolvedVc::upcast(self.client_transition().to_resolved().await?), )], ..Default::default() } @@ -411,7 +411,7 @@ impl AppProject { named_transitions: transitions, transition_rules: vec![TransitionRule::new( styles_rule_condition(), - Vc::upcast(self.client_transition()), + ResolvedVc::upcast(self.client_transition().to_resolved().await?), )], ..Default::default() } diff --git a/turbopack/crates/turbopack/src/lib.rs b/turbopack/crates/turbopack/src/lib.rs index 31272a0f3ec18..786c76d2affc2 100644 --- a/turbopack/crates/turbopack/src/lib.rs +++ b/turbopack/crates/turbopack/src/lib.rs @@ -432,7 +432,7 @@ impl ModuleAssetContext { #[turbo_tasks::function] async fn process_with_transition_rules( self: Vc, - source: Vc>, + source: ResolvedVc>, reference_type: Value, ) -> Result> { let this = self.await?; @@ -443,9 +443,9 @@ impl ModuleAssetContext { .get_by_rules(source, &reference_type) .await? { - transition.process(source, self, reference_type) + transition.process(*source, self, reference_type) } else { - self.process_default(source, reference_type) + self.process_default(*source, reference_type) }, ) } @@ -530,7 +530,7 @@ async fn process_default_internal( if processed_rules.contains(&i) { continue; } - if rule.matches(*source, &path_ref, &reference_type).await? { + if rule.matches(source, &path_ref, &reference_type).await? { for effect in rule.effects() { match effect { ModuleRuleEffect::SourceTransforms(transforms) => { @@ -542,7 +542,7 @@ async fn process_default_internal( .await? .transitions .await? - .get_by_rules(*current_source, &reference_type) + .get_by_rules(current_source, &reference_type) .await? { return Ok(transition.process( 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 d865ee4069380..d0e7e6a72df54 100644 --- a/turbopack/crates/turbopack/src/module_options/module_options_context.rs +++ b/turbopack/crates/turbopack/src/module_options/module_options_context.rs @@ -107,7 +107,7 @@ pub struct JsxTransformOptions { pub runtime: Option, } -#[turbo_tasks::value(shared, local)] +#[turbo_tasks::value(shared)] #[derive(Clone, Default)] #[serde(default)] pub struct ModuleOptionsContext { diff --git a/turbopack/crates/turbopack/src/module_options/module_rule.rs b/turbopack/crates/turbopack/src/module_options/module_rule.rs index 237fa9a01efbe..031c2e4f6bfdb 100644 --- a/turbopack/crates/turbopack/src/module_options/module_rule.rs +++ b/turbopack/crates/turbopack/src/module_options/module_rule.rs @@ -1,6 +1,6 @@ use anyhow::Result; use serde::{Deserialize, Serialize}; -use turbo_tasks::{trace::TraceRawVcs, NonLocalValue, ResolvedVc, Vc}; +use turbo_tasks::{trace::TraceRawVcs, NonLocalValue, ResolvedVc}; use turbo_tasks_fs::FileSystemPath; use turbopack_core::{ reference_type::ReferenceType, source::Source, source_transform::SourceTransforms, @@ -52,7 +52,7 @@ impl ModuleRule { pub async fn matches( &self, - source: Vc>, + source: ResolvedVc>, path: &FileSystemPath, reference_type: &ReferenceType, ) -> Result { diff --git a/turbopack/crates/turbopack/src/module_options/rule_condition.rs b/turbopack/crates/turbopack/src/module_options/rule_condition.rs index 0bc997281b2c4..55eaf9440f21a 100644 --- a/turbopack/crates/turbopack/src/module_options/rule_condition.rs +++ b/turbopack/crates/turbopack/src/module_options/rule_condition.rs @@ -1,6 +1,6 @@ use anyhow::Result; use serde::{Deserialize, Serialize}; -use turbo_tasks::{primitives::Regex, trace::TraceRawVcs, NonLocalValue, ReadRef, Vc}; +use turbo_tasks::{primitives::Regex, trace::TraceRawVcs, NonLocalValue, ReadRef, ResolvedVc}; use turbo_tasks_fs::{glob::Glob, FileSystemPath}; use turbopack_core::{ reference_type::ReferenceType, source::Source, virtual_source::VirtualSource, @@ -51,7 +51,7 @@ impl RuleCondition { impl RuleCondition { pub async fn matches( &self, - source: Vc>, + source: ResolvedVc>, path: &FileSystemPath, reference_type: &ReferenceType, ) -> Result { @@ -96,7 +96,7 @@ impl RuleCondition { } RuleCondition::ReferenceType(condition_ty) => condition_ty.includes(reference_type), RuleCondition::ResourceIsVirtualSource => { - Vc::try_resolve_downcast_type::(source) + ResolvedVc::try_downcast_type::(source) .await? .is_some() } diff --git a/turbopack/crates/turbopack/src/module_options/transition_rule.rs b/turbopack/crates/turbopack/src/module_options/transition_rule.rs index 8d4d92b8ceffa..28d5b8371bba4 100644 --- a/turbopack/crates/turbopack/src/module_options/transition_rule.rs +++ b/turbopack/crates/turbopack/src/module_options/transition_rule.rs @@ -1,22 +1,22 @@ use anyhow::Result; use serde::{Deserialize, Serialize}; -use turbo_tasks::{trace::TraceRawVcs, Vc}; +use turbo_tasks::{trace::TraceRawVcs, NonLocalValue, ResolvedVc}; use turbo_tasks_fs::FileSystemPath; use turbopack_core::{reference_type::ReferenceType, source::Source}; use super::{match_mode::MatchMode, RuleCondition}; use crate::transition::Transition; -#[derive(Debug, Clone, Serialize, Deserialize, TraceRawVcs, PartialEq, Eq)] +#[derive(Debug, Clone, Serialize, Deserialize, TraceRawVcs, PartialEq, Eq, NonLocalValue)] pub struct TransitionRule { condition: RuleCondition, - transition: Vc>, + transition: ResolvedVc>, match_mode: MatchMode, } impl TransitionRule { /// Creates a new transition rule. Will not match internal references. - pub fn new(condition: RuleCondition, transition: Vc>) -> Self { + pub fn new(condition: RuleCondition, transition: ResolvedVc>) -> Self { TransitionRule { condition, transition, @@ -25,7 +25,10 @@ impl TransitionRule { } /// Creates a new transition rule. Will only match internal references. - pub fn new_internal(condition: RuleCondition, transition: Vc>) -> Self { + pub fn new_internal( + condition: RuleCondition, + transition: ResolvedVc>, + ) -> Self { TransitionRule { condition, transition, @@ -34,7 +37,7 @@ impl TransitionRule { } /// Creates a new transition rule. Will match all references. - pub fn new_all(condition: RuleCondition, transition: Vc>) -> Self { + pub fn new_all(condition: RuleCondition, transition: ResolvedVc>) -> Self { TransitionRule { condition, transition, @@ -42,13 +45,13 @@ impl TransitionRule { } } - pub fn transition(&self) -> Vc> { + pub fn transition(&self) -> ResolvedVc> { self.transition } pub async fn matches( &self, - source: Vc>, + source: ResolvedVc>, path: &FileSystemPath, reference_type: &ReferenceType, ) -> Result { diff --git a/turbopack/crates/turbopack/src/transition/mod.rs b/turbopack/crates/turbopack/src/transition/mod.rs index 56d2bfc8e5a00..2f61f6e6a4db7 100644 --- a/turbopack/crates/turbopack/src/transition/mod.rs +++ b/turbopack/crates/turbopack/src/transition/mod.rs @@ -109,7 +109,7 @@ pub trait Transition { } } -#[turbo_tasks::value(shared, local)] +#[turbo_tasks::value(shared)] #[derive(Default)] pub struct TransitionOptions { pub named_transitions: HashMap>>, @@ -132,9 +132,9 @@ impl TransitionOptions { pub async fn get_by_rules( &self, - source: Vc>, + source: ResolvedVc>, reference_type: &ReferenceType, - ) -> Result>>> { + ) -> Result>>> { if self.transition_rules.is_empty() { return Ok(None); } From 1c56ef613aef3d427387c1d75049ee16dfa4c343 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Mon, 13 Jan 2025 16:15:43 -0700 Subject: [PATCH 19/65] feat: added rewrite headers after user-supplied rewrites (#74776) Next.js's client router needs to know the pathname and query that the request was rewritten to in order to facilitate reuse of static RSC payloads generated from fallbacks. This takes the form of additional headers being sent back on the response that includes the correct rewritten pathname that later the client can take into account when generating the client route key. --- packages/next/src/build/index.ts | 10 + .../client/components/app-router-headers.ts | 2 + packages/next/src/server/base-server.ts | 4 +- .../server/lib/router-utils/resolve-routes.ts | 72 ++- .../rewrite-headers/app/hello/[name]/page.jsx | 8 + .../app-dir/rewrite-headers/app/layout.jsx | 11 + .../rewrite-headers/app/other/page.jsx | 3 + test/e2e/app-dir/rewrite-headers/app/page.jsx | 3 + .../e2e/app-dir/rewrite-headers/middleware.js | 36 ++ .../app-dir/rewrite-headers/next.config.js | 23 + .../rewrite-headers/rewrite-headers.test.ts | 410 ++++++++++++++++++ .../custom-routes/test/index.test.js | 4 + .../dynamic-routing/test/index.test.js | 4 + 13 files changed, 576 insertions(+), 14 deletions(-) create mode 100644 test/e2e/app-dir/rewrite-headers/app/hello/[name]/page.jsx create mode 100644 test/e2e/app-dir/rewrite-headers/app/layout.jsx create mode 100644 test/e2e/app-dir/rewrite-headers/app/other/page.jsx create mode 100644 test/e2e/app-dir/rewrite-headers/app/page.jsx create mode 100644 test/e2e/app-dir/rewrite-headers/middleware.js create mode 100644 test/e2e/app-dir/rewrite-headers/next.config.js create mode 100644 test/e2e/app-dir/rewrite-headers/rewrite-headers.test.ts diff --git a/packages/next/src/build/index.ts b/packages/next/src/build/index.ts index 6f353ccc624e9..3d1a08965f088 100644 --- a/packages/next/src/build/index.ts +++ b/packages/next/src/build/index.ts @@ -163,6 +163,8 @@ import { NEXT_ROUTER_STATE_TREE_HEADER, NEXT_DID_POSTPONE_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, + NEXT_REWRITTEN_PATH_HEADER, + NEXT_REWRITTEN_QUERY_HEADER, } from '../client/components/app-router-headers' import { webpackBuild } from './webpack-build' import { NextBuildContext, type MappedPages } from './build-context' @@ -404,6 +406,10 @@ export type RoutesManifest = { suffix: typeof RSC_SUFFIX prefetchSuffix: typeof RSC_PREFETCH_SUFFIX } + rewriteHeaders: { + pathHeader: typeof NEXT_REWRITTEN_PATH_HEADER + queryHeader: typeof NEXT_REWRITTEN_QUERY_HEADER + } skipMiddlewareUrlNormalize?: boolean caseSensitive?: boolean /** @@ -1261,6 +1267,10 @@ export default async function build( suffix: RSC_SUFFIX, prefetchSuffix: RSC_PREFETCH_SUFFIX, }, + rewriteHeaders: { + pathHeader: NEXT_REWRITTEN_PATH_HEADER, + queryHeader: NEXT_REWRITTEN_QUERY_HEADER, + }, skipMiddlewareUrlNormalize: config.skipMiddlewareUrlNormalize, ppr: isAppPPREnabled ? { diff --git a/packages/next/src/client/components/app-router-headers.ts b/packages/next/src/client/components/app-router-headers.ts index 613d022ad6c1f..1f99f5efe1ce3 100644 --- a/packages/next/src/client/components/app-router-headers.ts +++ b/packages/next/src/client/components/app-router-headers.ts @@ -27,4 +27,6 @@ export const NEXT_RSC_UNION_QUERY = '_rsc' as const export const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time' as const export const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed' as const +export const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path' as const +export const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query' as const export const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender' as const diff --git a/packages/next/src/server/base-server.ts b/packages/next/src/server/base-server.ts index f9a0264344274..8cd322b19c8e2 100644 --- a/packages/next/src/server/base-server.ts +++ b/packages/next/src/server/base-server.ts @@ -1430,9 +1430,7 @@ export default abstract class Server< parsedUrl.pathname = normalizeResult.pathname for (const key of Object.keys(parsedUrl.query)) { - if (!key.startsWith('__next') && !key.startsWith('_next')) { - delete parsedUrl.query[key] - } + delete parsedUrl.query[key] } const invokeQuery = getRequestMeta(req, 'invokeQuery') diff --git a/packages/next/src/server/lib/router-utils/resolve-routes.ts b/packages/next/src/server/lib/router-utils/resolve-routes.ts index a6c1f40a387f9..7392c36ac7b1c 100644 --- a/packages/next/src/server/lib/router-utils/resolve-routes.ts +++ b/packages/next/src/server/lib/router-utils/resolve-routes.ts @@ -36,10 +36,16 @@ import { prepareDestination, } from '../../../shared/lib/router/utils/prepare-destination' import type { TLSSocket } from 'tls' -import { NEXT_ROUTER_STATE_TREE_HEADER } from '../../../client/components/app-router-headers' +import { + NEXT_REWRITTEN_PATH_HEADER, + NEXT_REWRITTEN_QUERY_HEADER, + NEXT_ROUTER_STATE_TREE_HEADER, + RSC_HEADER, +} from '../../../client/components/app-router-headers' import { getSelectedParams } from '../../../client/components/router-reducer/compute-changed-path' import { isInterceptionRouteRewrite } from '../../../lib/generate-interception-routes-rewrites' import { parseAndValidateFlightRouterState } from '../../app-render/parse-and-validate-flight-router-state' +import { parseUrl } from '../../../shared/lib/router/utils/parse-url' const debug = setupDebug('next:router-server:resolve-routes') @@ -599,27 +605,49 @@ export function getResolveRoutes( if (middlewareHeaders['x-middleware-rewrite']) { const value = middlewareHeaders['x-middleware-rewrite'] as string - const rel = relativizeURL(value, initUrl) - resHeaders['x-middleware-rewrite'] = rel + const destination = relativizeURL(value, initUrl) + resHeaders['x-middleware-rewrite'] = destination - const query = parsedUrl.query - parsedUrl = url.parse(rel, true) + const parsedDestination = url.parse(destination, true) + + if (parsedDestination.protocol) { + // Assign the parsed destination to parsedUrl so that the next + // set of steps can use it. + parsedUrl = parsedDestination - if (parsedUrl.protocol) { return { - parsedUrl, + parsedUrl: parsedDestination, resHeaders, finished: true, } } - // keep internal query state - for (const key of Object.keys(query)) { - if (key.startsWith('_next') || key.startsWith('__next')) { - parsedUrl.query[key] = query[key] + // Set the rewrite headers only if this is a RSC request. + if (req.headers[RSC_HEADER.toLowerCase()] === '1') { + // We set the rewritten path and query headers on the response now + // that we know that the it's not an external rewrite. + if ( + parsedDestination.pathname && + parsedUrl.pathname !== parsedDestination.pathname + ) { + res.setHeader( + NEXT_REWRITTEN_PATH_HEADER, + parsedDestination.pathname + ) + } + if (parsedDestination.search) { + res.setHeader( + NEXT_REWRITTEN_QUERY_HEADER, + // remove the leading ? from the search + parsedDestination.search.slice(1) + ) } } + // Assign the parsed destination to parsedUrl so that the next + // set of steps can use it. + parsedUrl = parsedDestination + if (config.i18n) { const curLocaleResult = normalizeLocalePath( parsedUrl.pathname || '', @@ -735,6 +763,12 @@ export function getResolveRoutes( // so we'll just use the params from the route matcher } + // We extract the search params of the destination so we can set it on + // the response headers. We don't want to use the following + // `parsedDestination` as the query object is mutated. + const { search: destinationSearch, pathname: destinationPathname } = + parseUrl(route.destination) + const { parsedDestination } = prepareDestination({ appendParamsToQuery: true, destination: route.destination, @@ -750,6 +784,22 @@ export function getResolveRoutes( } } + // Set the rewrite headers only if this is a RSC request. + if (req.headers[RSC_HEADER.toLowerCase()] === '1') { + // We set the rewritten path and query headers on the response now + // that we know that the it's not an external rewrite. + if (parsedUrl.pathname !== destinationPathname) { + res.setHeader(NEXT_REWRITTEN_PATH_HEADER, destinationPathname) + } + if (destinationSearch) { + res.setHeader( + NEXT_REWRITTEN_QUERY_HEADER, + // remove the leading ? from the search + destinationSearch.slice(1) + ) + } + } + if (config.i18n) { const curLocaleResult = normalizeLocalePath( removePathPrefix(parsedDestination.pathname, config.basePath), diff --git a/test/e2e/app-dir/rewrite-headers/app/hello/[name]/page.jsx b/test/e2e/app-dir/rewrite-headers/app/hello/[name]/page.jsx new file mode 100644 index 0000000000000..3154fd57b9fdc --- /dev/null +++ b/test/e2e/app-dir/rewrite-headers/app/hello/[name]/page.jsx @@ -0,0 +1,8 @@ +export default async function Page(props) { + const { name } = await props.params + return
Hello {name}
+} + +export async function generateStaticParams() { + return [{ name: 'world' }, { name: 'wyatt' }, { name: 'admin' }] +} diff --git a/test/e2e/app-dir/rewrite-headers/app/layout.jsx b/test/e2e/app-dir/rewrite-headers/app/layout.jsx new file mode 100644 index 0000000000000..af1104a9ea78c --- /dev/null +++ b/test/e2e/app-dir/rewrite-headers/app/layout.jsx @@ -0,0 +1,11 @@ +import { Suspense } from 'react' + +export default function RootLayout({ children }) { + return ( + + + {children} + + + ) +} diff --git a/test/e2e/app-dir/rewrite-headers/app/other/page.jsx b/test/e2e/app-dir/rewrite-headers/app/other/page.jsx new file mode 100644 index 0000000000000..187b865111066 --- /dev/null +++ b/test/e2e/app-dir/rewrite-headers/app/other/page.jsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Other Page
+} diff --git a/test/e2e/app-dir/rewrite-headers/app/page.jsx b/test/e2e/app-dir/rewrite-headers/app/page.jsx new file mode 100644 index 0000000000000..8f5129010b9b0 --- /dev/null +++ b/test/e2e/app-dir/rewrite-headers/app/page.jsx @@ -0,0 +1,3 @@ +export default function Home() { + return
Hello World
+} diff --git a/test/e2e/app-dir/rewrite-headers/middleware.js b/test/e2e/app-dir/rewrite-headers/middleware.js new file mode 100644 index 0000000000000..c40b48bcc67bd --- /dev/null +++ b/test/e2e/app-dir/rewrite-headers/middleware.js @@ -0,0 +1,36 @@ +import { NextResponse } from 'next/server' + +export const config = { + matcher: [ + /* + * Match all request paths except for the ones starting with: + * - api (API routes) + * - _next/static (static files) + * - _next/image (image optimization files) + * - favicon.ico, sitemap.xml, robots.txt (metadata files) + */ + '/((?!api|_next/static|_next/image|favicon.ico|sitemap.xml|robots.txt).*)', + ], +} + +export default function middleware(req) { + const url = new URL(req.url) + + if (url.pathname === '/hello/wyatt') { + return NextResponse.rewrite(new URL('/hello/admin?key=value', url)) + } + + if (url.pathname === '/hello/bob') { + return NextResponse.rewrite(new URL('/hello/bobby', url)) + } + + if (url.pathname === '/hello/john') { + return NextResponse.rewrite(new URL('/hello/john?key=value', url)) + } + + if (url.pathname === '/hello/vercel') { + return NextResponse.rewrite('https://www.vercel.com') + } + + return NextResponse.next() +} diff --git a/test/e2e/app-dir/rewrite-headers/next.config.js b/test/e2e/app-dir/rewrite-headers/next.config.js new file mode 100644 index 0000000000000..f994c79c6f8a1 --- /dev/null +++ b/test/e2e/app-dir/rewrite-headers/next.config.js @@ -0,0 +1,23 @@ +/** @type {import('next').NextConfig} */ +module.exports = { + rewrites: async () => { + return [ + { + source: '/hello/sam', + destination: '/hello/samantha', + }, + { + source: '/hello/other', + destination: '/other', + }, + { + source: '/hello/fred', + destination: '/other?key=value', + }, + { + source: '/hello/(.*)/google', + destination: 'https://www.google.$1/', + }, + ] + }, +} diff --git a/test/e2e/app-dir/rewrite-headers/rewrite-headers.test.ts b/test/e2e/app-dir/rewrite-headers/rewrite-headers.test.ts new file mode 100644 index 0000000000000..1d0966750fda6 --- /dev/null +++ b/test/e2e/app-dir/rewrite-headers/rewrite-headers.test.ts @@ -0,0 +1,410 @@ +import { nextTestSetup } from 'e2e-utils' + +const targets = ['x-nextjs-rewritten-path', 'x-nextjs-rewritten-query'] as const + +type Target = (typeof targets)[number] + +const cases: { + name: string + pathname: string + only?: boolean + debug?: true + headers?: Record + expected: Record +}[] = [ + { + name: 'static HTML', + pathname: '/', + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'static RSC', + pathname: '/', + headers: { + RSC: '1', + }, + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'static Prefetch RSC', + pathname: '/', + headers: { + RSC: '1', + 'Next-Router-Prefetch': '1', + }, + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'prerender HTML', + pathname: '/hello/world', + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'prerendered RSC', + pathname: '/hello/world', + headers: { + RSC: '1', + }, + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'prerendered Prefetch RSC', + pathname: '/hello/world', + headers: { + RSC: '1', + 'Next-Router-Prefetch': '1', + }, + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'middleware rewrite HTML', + pathname: '/hello/wyatt', + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'middleware rewrite RSC', + pathname: '/hello/wyatt', + headers: { + RSC: '1', + }, + expected: { + 'x-nextjs-rewritten-path': '/hello/admin', + 'x-nextjs-rewritten-query': 'key=value', + }, + }, + { + name: 'middleware rewrite Prefetch RSC', + pathname: '/hello/wyatt', + headers: { + RSC: '1', + 'Next-Router-Prefetch': '1', + }, + // only: true, + expected: { + 'x-nextjs-rewritten-path': '/hello/admin', + 'x-nextjs-rewritten-query': 'key=value', + }, + }, + { + name: 'middleware rewrite dynamic HTML', + pathname: '/hello/bob', + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'middleware rewrite dynamic RSC', + pathname: '/hello/bob', + headers: { + RSC: '1', + }, + expected: { + 'x-nextjs-rewritten-path': '/hello/bobby', + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'middleware rewrite dynamic Prefetch RSC', + pathname: '/hello/bob', + headers: { + RSC: '1', + 'Next-Router-Prefetch': '1', + }, + expected: { + 'x-nextjs-rewritten-path': '/hello/bobby', + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'dynamic HTML', + pathname: '/hello/mary', + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'dynamic RSC', + pathname: '/hello/mary', + headers: { + RSC: '1', + }, + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'dynamic Prefetch RSC', + pathname: '/hello/mary', + headers: { + RSC: '1', + 'Next-Router-Prefetch': '1', + }, + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'dynamic HTML with query', + pathname: '/hello/mary?key=value', + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'dynamic RSC with query', + pathname: '/hello/mary?key=value', + headers: { + RSC: '1', + }, + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'dynamic Prefetch RSC with query', + pathname: '/hello/mary?key=value', + headers: { + RSC: '1', + 'Next-Router-Prefetch': '1', + }, + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'next.config.js rewrites HTML', + pathname: '/hello/sam', + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'next.config.js rewrites RSC', + pathname: '/hello/sam', + headers: { + RSC: '1', + }, + expected: { + 'x-nextjs-rewritten-path': '/hello/samantha', + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'next.config.js rewrites Prefetch RSC', + pathname: '/hello/sam', + headers: { + RSC: '1', + 'Next-Router-Prefetch': '1', + }, + expected: { + 'x-nextjs-rewritten-path': '/hello/samantha', + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'next.config.js rewrites static HTML', + pathname: '/hello/other', + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'next.config.js rewrites static RSC', + pathname: '/hello/other', + headers: { + RSC: '1', + }, + expected: { + 'x-nextjs-rewritten-path': '/other', + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'next.config.js rewrites static Prefetch RSC', + pathname: '/hello/other', + headers: { + RSC: '1', + 'Next-Router-Prefetch': '1', + }, + expected: { + 'x-nextjs-rewritten-path': '/other', + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'next.config.js rewrites external URL', + pathname: '/hello/google', + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'middleware rewrite query HTML', + pathname: '/hello/john', + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'middleware rewrite query RSC', + pathname: '/hello/john', + headers: { + RSC: '1', + }, + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': 'key=value', + }, + }, + { + name: 'middleware rewrite query Prefetch RSC', + pathname: '/hello/john', + headers: { + RSC: '1', + 'Next-Router-Prefetch': '1', + }, + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': 'key=value', + }, + }, + { + name: 'middleware rewrite external HTML', + pathname: '/hello/vercel', + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'middleware rewrite external RSC', + pathname: '/hello/vercel', + headers: { + RSC: '1', + }, + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'middleware rewrite external Prefetch RSC', + pathname: '/hello/vercel', + headers: { + RSC: '1', + 'Next-Router-Prefetch': '1', + }, + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'next.config.js rewrites with query HTML', + pathname: '/hello/fred', + expected: { + 'x-nextjs-rewritten-path': null, + 'x-nextjs-rewritten-query': null, + }, + }, + { + name: 'next.config.js rewrites with query RSC', + pathname: '/hello/fred', + headers: { + RSC: '1', + }, + expected: { + 'x-nextjs-rewritten-path': '/other', + 'x-nextjs-rewritten-query': 'key=value', + }, + }, + { + name: 'next.config.js rewrites with query Prefetch RSC', + pathname: '/hello/fred', + headers: { + RSC: '1', + 'Next-Router-Prefetch': '1', + }, + expected: { + 'x-nextjs-rewritten-path': '/other', + 'x-nextjs-rewritten-query': 'key=value', + }, + }, +] + +describe('rewrite-headers', () => { + const { next } = nextTestSetup({ + files: __dirname, + // TODO: re-enable once changes in infrastructure are merged + skipDeployment: true, + }) + + describe.each(cases)( + '$name ($pathname)', + ({ pathname, headers = {}, expected }) => { + let response + beforeAll(async () => { + response = await next.fetch(pathname, { headers }) + if (response.status !== 200) { + throw new Error( + `Expected status 200, got ${response.status} for ${pathname}` + ) + } + }) + + it('should have the expected headers', () => { + const headers = Object.fromEntries(response.headers.entries()) + + // This is so that the following check works. If we expect that the + // header is null, but it's not present, we need to set it to null. + Object.entries(expected).forEach(([key, value]) => { + if (value === null && !headers[key]) { + headers[key] = null + } + }) + + // Remove any headers that we're not testing for to simplify the test + // output. + Object.keys(headers).forEach((key) => { + if (!targets.includes(key as Target)) { + delete headers[key] + } + }) + + expect(headers).toEqual(expected) + }) + } + ) +}) diff --git a/test/integration/custom-routes/test/index.test.js b/test/integration/custom-routes/test/index.test.js index d1f80e0071285..63c058d1a5237 100644 --- a/test/integration/custom-routes/test/index.test.js +++ b/test/integration/custom-routes/test/index.test.js @@ -2097,6 +2097,10 @@ const runTests = (isDev = false) => { source: '/has-header-4', }, ], + rewriteHeaders: { + pathHeader: 'x-nextjs-rewritten-path', + queryHeader: 'x-nextjs-rewritten-query', + }, rewrites: { beforeFiles: [ { diff --git a/test/integration/dynamic-routing/test/index.test.js b/test/integration/dynamic-routing/test/index.test.js index 69c61598122b7..b6d4fa84ea73e 100644 --- a/test/integration/dynamic-routing/test/index.test.js +++ b/test/integration/dynamic-routing/test/index.test.js @@ -1509,6 +1509,10 @@ function runTests({ dev }) { }, }, ], + rewriteHeaders: { + pathHeader: 'x-nextjs-rewritten-path', + queryHeader: 'x-nextjs-rewritten-query', + }, rsc: { header: 'RSC', contentTypeHeader: 'text/x-component', From 40e021e361ea49f908bc47a2088e5d40f4184463 Mon Sep 17 00:00:00 2001 From: vercel-release-bot Date: Mon, 13 Jan 2025 23:23:46 +0000 Subject: [PATCH 20/65] v15.2.0-canary.8 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/eslint-config-next/package.json | 4 ++-- packages/eslint-plugin-next/package.json | 2 +- packages/font/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-codemod/package.json | 2 +- packages/next-env/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-storybook/package.json | 2 +- packages/next-polyfill-module/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next-swc/package.json | 2 +- packages/next/package.json | 14 +++++++------- packages/react-refresh-utils/package.json | 2 +- packages/third-parties/package.json | 4 ++-- pnpm-lock.yaml | 16 ++++++++-------- 17 files changed, 32 insertions(+), 32 deletions(-) diff --git a/lerna.json b/lerna.json index 23ab8962e2bd6..9f571f3b957f0 100644 --- a/lerna.json +++ b/lerna.json @@ -16,5 +16,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "15.2.0-canary.7" + "version": "15.2.0-canary.8" } diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index f61a6b57a25a9..fe74d05b0c193 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "15.2.0-canary.7", + "version": "15.2.0-canary.8", "keywords": [ "react", "next", diff --git a/packages/eslint-config-next/package.json b/packages/eslint-config-next/package.json index 7e5b245a7000f..402af39566bc6 100644 --- a/packages/eslint-config-next/package.json +++ b/packages/eslint-config-next/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-next", - "version": "15.2.0-canary.7", + "version": "15.2.0-canary.8", "description": "ESLint configuration used by Next.js.", "main": "index.js", "license": "MIT", @@ -10,7 +10,7 @@ }, "homepage": "https://nextjs.org/docs/app/api-reference/config/eslint", "dependencies": { - "@next/eslint-plugin-next": "15.2.0-canary.7", + "@next/eslint-plugin-next": "15.2.0-canary.8", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", diff --git a/packages/eslint-plugin-next/package.json b/packages/eslint-plugin-next/package.json index c50f2cf6ce03a..589f8d7797153 100644 --- a/packages/eslint-plugin-next/package.json +++ b/packages/eslint-plugin-next/package.json @@ -1,6 +1,6 @@ { "name": "@next/eslint-plugin-next", - "version": "15.2.0-canary.7", + "version": "15.2.0-canary.8", "description": "ESLint plugin for Next.js.", "main": "dist/index.js", "license": "MIT", diff --git a/packages/font/package.json b/packages/font/package.json index cc9857794f960..4d2015a8a5fc2 100644 --- a/packages/font/package.json +++ b/packages/font/package.json @@ -1,7 +1,7 @@ { "name": "@next/font", "private": true, - "version": "15.2.0-canary.7", + "version": "15.2.0-canary.8", "repository": { "url": "vercel/next.js", "directory": "packages/font" diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index 45d2a6a353a34..ee16e8e6afb62 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "15.2.0-canary.7", + "version": "15.2.0-canary.8", "main": "index.js", "types": "index.d.ts", "license": "MIT", diff --git a/packages/next-codemod/package.json b/packages/next-codemod/package.json index 391918624fcd0..e315b103040c8 100644 --- a/packages/next-codemod/package.json +++ b/packages/next-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@next/codemod", - "version": "15.2.0-canary.7", + "version": "15.2.0-canary.8", "license": "MIT", "repository": { "type": "git", diff --git a/packages/next-env/package.json b/packages/next-env/package.json index 3fecfcf177748..b96921328ce36 100644 --- a/packages/next-env/package.json +++ b/packages/next-env/package.json @@ -1,6 +1,6 @@ { "name": "@next/env", - "version": "15.2.0-canary.7", + "version": "15.2.0-canary.8", "keywords": [ "react", "next", diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index c11c74f406ca9..a75b4aad3196e 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "15.2.0-canary.7", + "version": "15.2.0-canary.8", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-storybook/package.json b/packages/next-plugin-storybook/package.json index cbda3bd37bfe1..12cf7461ba77c 100644 --- a/packages/next-plugin-storybook/package.json +++ b/packages/next-plugin-storybook/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-storybook", - "version": "15.2.0-canary.7", + "version": "15.2.0-canary.8", "repository": { "url": "vercel/next.js", "directory": "packages/next-plugin-storybook" diff --git a/packages/next-polyfill-module/package.json b/packages/next-polyfill-module/package.json index 1d5463a27c8e2..7a8de5c57562f 100644 --- a/packages/next-polyfill-module/package.json +++ b/packages/next-polyfill-module/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-module", - "version": "15.2.0-canary.7", + "version": "15.2.0-canary.8", "description": "A standard library polyfill for ES Modules supporting browsers (Edge 16+, Firefox 60+, Chrome 61+, Safari 10.1+)", "main": "dist/polyfill-module.js", "license": "MIT", diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index 910b2c8bfaf0f..a1e293bb006c3 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "15.2.0-canary.7", + "version": "15.2.0-canary.8", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next-swc/package.json b/packages/next-swc/package.json index 3d9f27426cc1e..8bc61b76e6ed6 100644 --- a/packages/next-swc/package.json +++ b/packages/next-swc/package.json @@ -1,6 +1,6 @@ { "name": "@next/swc", - "version": "15.2.0-canary.7", + "version": "15.2.0-canary.8", "private": true, "scripts": { "clean": "node ../../scripts/rm.mjs native", diff --git a/packages/next/package.json b/packages/next/package.json index 13b1cb36d40e0..7e123a99a6f14 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "15.2.0-canary.7", + "version": "15.2.0-canary.8", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -99,7 +99,7 @@ ] }, "dependencies": { - "@next/env": "15.2.0-canary.7", + "@next/env": "15.2.0-canary.8", "@swc/counter": "0.1.3", "@swc/helpers": "0.5.15", "busboy": "1.6.0", @@ -164,11 +164,11 @@ "@jest/types": "29.5.0", "@mswjs/interceptors": "0.23.0", "@napi-rs/triples": "1.2.0", - "@next/font": "15.2.0-canary.7", - "@next/polyfill-module": "15.2.0-canary.7", - "@next/polyfill-nomodule": "15.2.0-canary.7", - "@next/react-refresh-utils": "15.2.0-canary.7", - "@next/swc": "15.2.0-canary.7", + "@next/font": "15.2.0-canary.8", + "@next/polyfill-module": "15.2.0-canary.8", + "@next/polyfill-nomodule": "15.2.0-canary.8", + "@next/react-refresh-utils": "15.2.0-canary.8", + "@next/swc": "15.2.0-canary.8", "@opentelemetry/api": "1.6.0", "@playwright/test": "1.41.2", "@storybook/addon-essentials": "^8.4.7", diff --git a/packages/react-refresh-utils/package.json b/packages/react-refresh-utils/package.json index dcdfc9ac19eae..9f95721c20aa0 100644 --- a/packages/react-refresh-utils/package.json +++ b/packages/react-refresh-utils/package.json @@ -1,6 +1,6 @@ { "name": "@next/react-refresh-utils", - "version": "15.2.0-canary.7", + "version": "15.2.0-canary.8", "description": "An experimental package providing utilities for React Refresh.", "repository": { "url": "vercel/next.js", diff --git a/packages/third-parties/package.json b/packages/third-parties/package.json index 640c168612224..ac2cf19b6c9d1 100644 --- a/packages/third-parties/package.json +++ b/packages/third-parties/package.json @@ -1,6 +1,6 @@ { "name": "@next/third-parties", - "version": "15.2.0-canary.7", + "version": "15.2.0-canary.8", "repository": { "url": "vercel/next.js", "directory": "packages/third-parties" @@ -26,7 +26,7 @@ "third-party-capital": "1.0.20" }, "devDependencies": { - "next": "15.2.0-canary.7", + "next": "15.2.0-canary.8", "outdent": "0.8.0", "prettier": "2.5.1", "typescript": "5.7.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 98c0f7287c4d6..29547a23fb486 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -793,7 +793,7 @@ importers: packages/eslint-config-next: dependencies: '@next/eslint-plugin-next': - specifier: 15.2.0-canary.7 + specifier: 15.2.0-canary.8 version: link:../eslint-plugin-next '@rushstack/eslint-patch': specifier: ^1.10.3 @@ -857,7 +857,7 @@ importers: packages/next: dependencies: '@next/env': - specifier: 15.2.0-canary.7 + specifier: 15.2.0-canary.8 version: link:../next-env '@swc/counter': specifier: 0.1.3 @@ -985,19 +985,19 @@ importers: specifier: 1.2.0 version: 1.2.0 '@next/font': - specifier: 15.2.0-canary.7 + specifier: 15.2.0-canary.8 version: link:../font '@next/polyfill-module': - specifier: 15.2.0-canary.7 + specifier: 15.2.0-canary.8 version: link:../next-polyfill-module '@next/polyfill-nomodule': - specifier: 15.2.0-canary.7 + specifier: 15.2.0-canary.8 version: link:../next-polyfill-nomodule '@next/react-refresh-utils': - specifier: 15.2.0-canary.7 + specifier: 15.2.0-canary.8 version: link:../react-refresh-utils '@next/swc': - specifier: 15.2.0-canary.7 + specifier: 15.2.0-canary.8 version: link:../next-swc '@opentelemetry/api': specifier: 1.6.0 @@ -1661,7 +1661,7 @@ importers: version: 1.0.20 devDependencies: next: - specifier: 15.2.0-canary.7 + specifier: 15.2.0-canary.8 version: link:../next outdent: specifier: 0.8.0 From 885e70eb1a753e2a51b73d7a9188de4f904e4770 Mon Sep 17 00:00:00 2001 From: Sam Ko Date: Mon, 13 Jan 2025 17:35:55 -0800 Subject: [PATCH 21/65] chore(github): fix days-before-issue-close/stale (#74838) ## Why? We mixed up `days-before-issue-close` and `days-before-issue-stale`. --- .github/workflows/issue_stale.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/issue_stale.yml b/.github/workflows/issue_stale.yml index 5dadf57796354..c375a7b3b23ba 100644 --- a/.github/workflows/issue_stale.yml +++ b/.github/workflows/issue_stale.yml @@ -16,8 +16,8 @@ jobs: with: repo-token: ${{ secrets.STALE_TOKEN }} ascending: true - days-before-issue-stale: 730 # issues with no activity in over two years days-before-issue-close: 7 + days-before-issue-stale: 730 # issues with no activity in over two years days-before-pr-close: -1 days-before-pr-stale: -1 remove-issue-stale-when-updated: true @@ -30,10 +30,10 @@ jobs: name: 'Close stale issues with no reproduction' with: repo-token: ${{ secrets.STALE_TOKEN }} - any-of-labels: 'please add a complete reproduction' + any-of-issue-labels: 'please add a complete reproduction' close-issue-message: 'This issue has been automatically closed due to 2 days of inactivity and the absence of a complete reproduction. If you believe this was done in error, please leave a comment. If you are experiencing a similar issue, consider opening a new issue with a complete reproduction. Thank you.' - days-before-issue-close: 1 - days-before-issue-stale: 2 + days-before-issue-close: 2 + days-before-issue-stale: 1 days-before-pr-close: -1 days-before-pr-stale: -1 operations-per-run: 300 # 1 operation per 100 issues, the rest is to label/comment/close @@ -42,10 +42,10 @@ jobs: name: 'Close issues with no simple repro' with: repo-token: ${{ secrets.STALE_TOKEN }} - any-of-labels: 'please simplify reproduction' + any-of-issue-labels: 'please simplify reproduction' close-issue-message: 'This issue has been automatically closed due to 14 days of inactivity and the absence of a simple reproduction for investigation. If you believe this was done in error, please leave a comment. If you are experiencing a similar issue, consider opening a new issue with a simple reproduction. Thank you.' - days-before-issue-close: 1 - days-before-issue-stale: 14 + days-before-issue-close: 14 + days-before-issue-stale: 1 days-before-pr-close: -1 days-before-pr-stale: -1 operations-per-run: 300 # 1 operation per 100 issues, the rest is to label/comment/close @@ -54,10 +54,10 @@ jobs: name: 'Close issues not verified on canary' with: repo-token: ${{ secrets.STALE_TOKEN }} - any-of-labels: 'please verify canary' + any-of-issue-labels: 'please verify canary' close-issue-message: 'This issue has been automatically closed due to 14 days of inactivity and the absence of testing against next@canary. If you believe this was done in error, please leave a comment. If you are experiencing a similar issue, consider opening a new issue with a reproduction. Thank you.' - days-before-issue-close: 1 - days-before-issue-stale: 14 + days-before-issue-close: 14 + days-before-issue-stale: 1 days-before-pr-close: -1 days-before-pr-stale: -1 operations-per-run: 300 # 1 operation per 100 issues, the rest is to label/comment/close From d989f985dceaba96b351812c9cb61b2b3772a773 Mon Sep 17 00:00:00 2001 From: Benjamin Woodruff Date: Mon, 13 Jan 2025 18:06:21 -0800 Subject: [PATCH 22/65] refactor(turbopack): Rewrite CollectiblesSource callsites to use OperationVc (part 2/3) (#74168) `OperationVc`s should be used with `CollectiblesSource` instead of `Vc`s because collectibles represent a side-effect or implicit extra return value of a function's execution. --- crates/napi/src/next_api/endpoint.rs | 25 ++++++++------ crates/napi/src/next_api/project.rs | 49 ++++++++++++++++++++++------ crates/napi/src/next_api/utils.rs | 8 +++-- crates/next-api/src/route.rs | 14 ++++++++ 4 files changed, 73 insertions(+), 23 deletions(-) diff --git a/crates/napi/src/next_api/endpoint.rs b/crates/napi/src/next_api/endpoint.rs index 2b78c1f94b3b7..60752af3b5932 100644 --- a/crates/napi/src/next_api/endpoint.rs +++ b/crates/napi/src/next_api/endpoint.rs @@ -4,10 +4,15 @@ use anyhow::Result; use napi::{bindgen_prelude::External, JsFunction}; use next_api::{ paths::ServerPath, - route::{Endpoint, WrittenEndpoint}, + route::{ + endpoint_server_changed_operation, endpoint_write_to_disk_operation, Endpoint, + WrittenEndpoint, + }, }; use tracing::Instrument; -use turbo_tasks::{get_effects, Completion, Effects, ReadRef, Vc, VcValueType}; +use turbo_tasks::{ + get_effects, Completion, Effects, OperationVc, ReadRef, ResolvedVc, Vc, VcValueType, +}; use turbopack_core::{ diagnostics::PlainDiagnostic, error::PrettyPrintError, @@ -99,14 +104,14 @@ impl Deref for ExternalEndpoint { // Await the source and return fatal issues if there are any, otherwise // propagate any actual error results. async fn strongly_consistent_catch_collectables( - source: Vc, + source: OperationVc, ) -> Result<( Option>, Arc>>, Arc>>, Arc, )> { - let result = source.strongly_consistent().await; + let result = source.connect().strongly_consistent().await; let issues = get_issues(source).await?; let diagnostics = get_diagnostics(source).await?; let effects = Arc::new(get_effects(source).await?); @@ -130,9 +135,9 @@ struct WrittenEndpointWithIssues { #[turbo_tasks::function] async fn get_written_endpoint_with_issues( - endpoint: Vc>, + endpoint: ResolvedVc>, ) -> Result> { - let write_to_disk = endpoint.write_to_disk(); + let write_to_disk = endpoint_write_to_disk_operation(endpoint); let (written, issues, diagnostics, effects) = strongly_consistent_catch_collectables(write_to_disk).await?; Ok(WrittenEndpointWithIssues { @@ -236,10 +241,10 @@ impl Eq for EndpointIssuesAndDiags {} #[turbo_tasks::function] async fn subscribe_issues_and_diags( - endpoint: Vc>, + endpoint: ResolvedVc>, should_include_issues: bool, ) -> Result> { - let changed = endpoint.server_changed(); + let changed = endpoint_server_changed_operation(endpoint); if should_include_issues { let (changed_value, issues, diagnostics, effects) = @@ -252,7 +257,7 @@ async fn subscribe_issues_and_diags( } .cell()) } else { - let changed_value = changed.strongly_consistent().await?; + let changed_value = changed.connect().strongly_consistent().await?; Ok(EndpointIssuesAndDiags { changed: Some(changed_value), issues: Arc::new(vec![]), @@ -276,7 +281,7 @@ pub fn endpoint_client_changed_subscribe( move || { async move { let changed = endpoint.client_changed(); - // We don't capture issues and diagonistics here since we don't want to be + // We don't capture issues and diagnostics here since we don't want to be // notified when they change changed.strongly_consistent().await?; Ok(()) diff --git a/crates/napi/src/next_api/project.rs b/crates/napi/src/next_api/project.rs index 709632ea6c0e0..4790b4adf987c 100644 --- a/crates/napi/src/next_api/project.rs +++ b/crates/napi/src/next_api/project.rs @@ -632,10 +632,13 @@ struct EntrypointsWithIssues { #[turbo_tasks::function] async fn get_entrypoints_with_issues( - container: Vc, + container: ResolvedVc, ) -> Result> { - let entrypoints_operation = container.entrypoints(); - let entrypoints = entrypoints_operation.strongly_consistent().await?; + let entrypoints_operation = project_container_entrypoints_operation(container); + let entrypoints = entrypoints_operation + .connect() + .strongly_consistent() + .await?; let issues = get_issues(entrypoints_operation).await?; let diagnostics = get_diagnostics(entrypoints_operation).await?; let effects = Arc::new(get_effects(entrypoints_operation).await?); @@ -648,6 +651,13 @@ async fn get_entrypoints_with_issues( .cell()) } +#[turbo_tasks::function(operation)] +fn project_container_entrypoints_operation( + container: ResolvedVc, +) -> Vc { + container.entrypoints() +} + #[napi(ts_return_type = "{ __napiType: \"RootTask\" }")] pub fn project_entrypoints_subscribe( #[napi(ts_arg_type = "{ __napiType: \"Project\" }")] project: External, @@ -731,12 +741,12 @@ struct HmrUpdateWithIssues { #[turbo_tasks::function] async fn hmr_update( - project: Vc, + project: ResolvedVc, identifier: RcStr, - state: Vc, + state: ResolvedVc, ) -> Result> { - let update_operation = project.hmr_update(identifier, state); - let update = update_operation.strongly_consistent().await?; + let update_operation = project_hmr_update_operation(project, identifier, state); + let update = update_operation.connect().strongly_consistent().await?; let issues = get_issues(update_operation).await?; let diagnostics = get_diagnostics(update_operation).await?; let effects = Arc::new(get_effects(update_operation).await?); @@ -749,6 +759,15 @@ async fn hmr_update( .cell()) } +#[turbo_tasks::function(operation)] +async fn project_hmr_update_operation( + project: ResolvedVc, + identifier: RcStr, + state: ResolvedVc, +) -> Vc { + project.hmr_update(identifier, *state) +} + #[napi(ts_return_type = "{ __napiType: \"RootTask\" }")] pub fn project_hmr_events( #[napi(ts_arg_type = "{ __napiType: \"Project\" }")] project: External, @@ -849,10 +868,13 @@ struct HmrIdentifiersWithIssues { #[turbo_tasks::function] async fn get_hmr_identifiers_with_issues( - container: Vc, + container: ResolvedVc, ) -> Result> { - let hmr_identifiers_operation = container.hmr_identifiers(); - let hmr_identifiers = hmr_identifiers_operation.strongly_consistent().await?; + let hmr_identifiers_operation = project_container_hmr_identifiers_operation(container); + let hmr_identifiers = hmr_identifiers_operation + .connect() + .strongly_consistent() + .await?; let issues = get_issues(hmr_identifiers_operation).await?; let diagnostics = get_diagnostics(hmr_identifiers_operation).await?; let effects = Arc::new(get_effects(hmr_identifiers_operation).await?); @@ -865,6 +887,13 @@ async fn get_hmr_identifiers_with_issues( .cell()) } +#[turbo_tasks::function(operation)] +fn project_container_hmr_identifiers_operation( + container: ResolvedVc, +) -> Vc> { + container.hmr_identifiers() +} + #[napi(ts_return_type = "{ __napiType: \"RootTask\" }")] pub fn project_hmr_identifiers_subscribe( #[napi(ts_arg_type = "{ __napiType: \"Project\" }")] project: External, diff --git a/crates/napi/src/next_api/utils.rs b/crates/napi/src/next_api/utils.rs index 678d512908859..65da31c7ddc91 100644 --- a/crates/napi/src/next_api/utils.rs +++ b/crates/napi/src/next_api/utils.rs @@ -10,7 +10,7 @@ use napi::{ }; use serde::Serialize; use turbo_tasks::{ - trace::TraceRawVcs, ReadRef, TaskId, TryJoinIterExt, TurboTasks, UpdateInfo, Vc, + trace::TraceRawVcs, OperationVc, ReadRef, TaskId, TryJoinIterExt, TurboTasks, UpdateInfo, Vc, }; use turbo_tasks_backend::{default_backing_storage, DefaultBackingStorage}; use turbo_tasks_fs::FileContent; @@ -229,7 +229,7 @@ pub fn root_task_dispose( Ok(()) } -pub async fn get_issues(source: Vc) -> Result>>> { +pub async fn get_issues(source: OperationVc) -> Result>>> { let issues = source.peek_issues_with_path().await?; Ok(Arc::new(issues.get_plain_issues().await?)) } @@ -238,7 +238,9 @@ pub async fn get_issues(source: Vc) -> Result(source: Vc) -> Result>>> { +pub async fn get_diagnostics( + source: OperationVc, +) -> Result>>> { let captured_diags = source.peek_diagnostics().await?; let mut diags = captured_diags .diagnostics diff --git a/crates/next-api/src/route.rs b/crates/next-api/src/route.rs index 35dbe27055e37..7c0e5b3fe457f 100644 --- a/crates/next-api/src/route.rs +++ b/crates/next-api/src/route.rs @@ -66,6 +66,20 @@ pub trait Endpoint { fn root_modules(self: Vc) -> Vc; } +#[turbo_tasks::function(operation)] +pub fn endpoint_write_to_disk_operation( + endpoint: ResolvedVc>, +) -> Vc { + endpoint.write_to_disk() +} + +#[turbo_tasks::function(operation)] +pub fn endpoint_server_changed_operation( + endpoint: ResolvedVc>, +) -> Vc { + endpoint.server_changed() +} + #[turbo_tasks::value(shared)] #[derive(Debug, Clone)] pub enum WrittenEndpoint { From 299d54167a1d88d46ad2d281db17e90fdab26ada Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Mon, 13 Jan 2025 19:55:09 -0700 Subject: [PATCH 23/65] feat: added middleware rewrite headers (#74846) --- .../server/lib/router-utils/resolve-routes.ts | 42 ++------- packages/next/src/server/web/adapter.ts | 91 ++++++++++++------- .../shared/lib/router/utils/relativize-url.ts | 43 +++++++-- 3 files changed, 101 insertions(+), 75 deletions(-) diff --git a/packages/next/src/server/lib/router-utils/resolve-routes.ts b/packages/next/src/server/lib/router-utils/resolve-routes.ts index 7392c36ac7b1c..381918115c88c 100644 --- a/packages/next/src/server/lib/router-utils/resolve-routes.ts +++ b/packages/next/src/server/lib/router-utils/resolve-routes.ts @@ -20,7 +20,7 @@ import { isAbortError } from '../../pipe-readable' import { getHostname } from '../../../shared/lib/get-hostname' import { getRedirectStatus } from '../../../lib/redirect-status' import { normalizeRepeatedSlashes } from '../../../shared/lib/utils' -import { relativizeURL } from '../../../shared/lib/router/utils/relativize-url' +import { getRelativeURL } from '../../../shared/lib/router/utils/relativize-url' import { addPathPrefix } from '../../../shared/lib/router/utils/add-path-prefix' import { pathHasPrefix } from '../../../shared/lib/router/utils/path-has-prefix' import { detectDomainLocale } from '../../../shared/lib/i18n/detect-domain-locale' @@ -605,49 +605,19 @@ export function getResolveRoutes( if (middlewareHeaders['x-middleware-rewrite']) { const value = middlewareHeaders['x-middleware-rewrite'] as string - const destination = relativizeURL(value, initUrl) + const destination = getRelativeURL(value, initUrl) resHeaders['x-middleware-rewrite'] = destination - const parsedDestination = url.parse(destination, true) - - if (parsedDestination.protocol) { - // Assign the parsed destination to parsedUrl so that the next - // set of steps can use it. - parsedUrl = parsedDestination + parsedUrl = url.parse(destination, true) + if (parsedUrl.protocol) { return { - parsedUrl: parsedDestination, + parsedUrl, resHeaders, finished: true, } } - // Set the rewrite headers only if this is a RSC request. - if (req.headers[RSC_HEADER.toLowerCase()] === '1') { - // We set the rewritten path and query headers on the response now - // that we know that the it's not an external rewrite. - if ( - parsedDestination.pathname && - parsedUrl.pathname !== parsedDestination.pathname - ) { - res.setHeader( - NEXT_REWRITTEN_PATH_HEADER, - parsedDestination.pathname - ) - } - if (parsedDestination.search) { - res.setHeader( - NEXT_REWRITTEN_QUERY_HEADER, - // remove the leading ? from the search - parsedDestination.search.slice(1) - ) - } - } - - // Assign the parsed destination to parsedUrl so that the next - // set of steps can use it. - parsedUrl = parsedDestination - if (config.i18n) { const curLocaleResult = normalizeLocalePath( parsedUrl.pathname || '', @@ -662,7 +632,7 @@ export function getResolveRoutes( if (middlewareHeaders['location']) { const value = middlewareHeaders['location'] as string - const rel = relativizeURL(value, initUrl) + const rel = getRelativeURL(value, initUrl) resHeaders['location'] = rel parsedUrl = url.parse(rel, true) diff --git a/packages/next/src/server/web/adapter.ts b/packages/next/src/server/web/adapter.ts index c77e7d52d352a..9f5831fc8448d 100644 --- a/packages/next/src/server/web/adapter.ts +++ b/packages/next/src/server/web/adapter.ts @@ -8,11 +8,19 @@ import { } from './spec-extension/fetch-event' import { NextRequest } from './spec-extension/request' import { NextResponse } from './spec-extension/response' -import { relativizeURL } from '../../shared/lib/router/utils/relativize-url' +import { + parseRelativeURL, + getRelativeURL, +} from '../../shared/lib/router/utils/relativize-url' import { NextURL } from './next-url' import { stripInternalSearchParams } from '../internal-utils' import { normalizeRscURL } from '../../shared/lib/router/utils/app-paths' -import { FLIGHT_HEADERS } from '../../client/components/app-router-headers' +import { + FLIGHT_HEADERS, + NEXT_REWRITTEN_PATH_HEADER, + NEXT_REWRITTEN_QUERY_HEADER, + RSC_HEADER, +} from '../../client/components/app-router-headers' import { ensureInstrumentationRegistered } from './globals' import { createRequestStoreForAPI } from '../async-storage/request-store' import { workUnitAsyncStorage } from '../app-render/work-unit-async-storage.external' @@ -99,59 +107,61 @@ export async function adapter( params.request.url = normalizeRscURL(params.request.url) - const requestUrl = new NextURL(params.request.url, { + const requestURL = new NextURL(params.request.url, { headers: params.request.headers, nextConfig: params.request.nextConfig, }) // Iterator uses an index to keep track of the current iteration. Because of deleting and appending below we can't just use the iterator. // Instead we use the keys before iteration. - const keys = [...requestUrl.searchParams.keys()] + const keys = [...requestURL.searchParams.keys()] for (const key of keys) { - const value = requestUrl.searchParams.getAll(key) + const value = requestURL.searchParams.getAll(key) const normalizedKey = normalizeNextQueryParam(key) if (normalizedKey) { - requestUrl.searchParams.delete(normalizedKey) + requestURL.searchParams.delete(normalizedKey) for (const val of value) { - requestUrl.searchParams.append(normalizedKey, val) + requestURL.searchParams.append(normalizedKey, val) } - requestUrl.searchParams.delete(key) + requestURL.searchParams.delete(key) } } // Ensure users only see page requests, never data requests. - const buildId = requestUrl.buildId - requestUrl.buildId = '' + const buildId = requestURL.buildId + requestURL.buildId = '' - const isNextDataRequest = params.request.headers['x-nextjs-data'] + const requestHeaders = fromNodeOutgoingHttpHeaders(params.request.headers) + const isNextDataRequest = requestHeaders.has('x-nextjs-data') + const isRSCRequest = requestHeaders.get(RSC_HEADER) === '1' - if (isNextDataRequest && requestUrl.pathname === '/index') { - requestUrl.pathname = '/' + if (isNextDataRequest && requestURL.pathname === '/index') { + requestURL.pathname = '/' } - const requestHeaders = fromNodeOutgoingHttpHeaders(params.request.headers) const flightHeaders = new Map() + // Headers should only be stripped for middleware if (!isEdgeRendering) { for (const header of FLIGHT_HEADERS) { const key = header.toLowerCase() const value = requestHeaders.get(key) - if (value) { + if (value !== null) { flightHeaders.set(key, value) requestHeaders.delete(key) } } } - const normalizeUrl = process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE + const normalizeURL = process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE ? new URL(params.request.url) - : requestUrl + : requestURL const request = new NextRequestHint({ page: params.page, // Strip internal query parameters off the request. - input: stripInternalSearchParams(normalizeUrl).toString(), + input: stripInternalSearchParams(normalizeURL).toString(), init: { body: params.request.body, headers: requestHeaders, @@ -312,17 +322,17 @@ export async function adapter( * a data URL if the request was a data request. */ const rewrite = response?.headers.get('x-middleware-rewrite') - if (response && rewrite && !isEdgeRendering) { - const rewriteUrl = new NextURL(rewrite, { + if (response && rewrite && (isRSCRequest || !isEdgeRendering)) { + const destination = new NextURL(rewrite, { forceLocale: true, headers: params.request.headers, nextConfig: params.request.nextConfig, }) - if (!process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE) { - if (rewriteUrl.host === request.nextUrl.host) { - rewriteUrl.buildId = buildId || rewriteUrl.buildId - response.headers.set('x-middleware-rewrite', String(rewriteUrl)) + if (!process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE && !isEdgeRendering) { + if (destination.host === request.nextUrl.host) { + destination.buildId = buildId || destination.buildId + response.headers.set('x-middleware-rewrite', String(destination)) } } @@ -331,22 +341,39 @@ export async function adapter( * with an internal header so the client knows which component to load * from the data request. */ - const relativizedRewrite = relativizeURL( - String(rewriteUrl), - String(requestUrl) + const { url: relativeDestination, isRelative } = parseRelativeURL( + destination.toString(), + requestURL.toString() ) if ( + !isEdgeRendering && isNextDataRequest && // if the rewrite is external and external rewrite // resolving config is enabled don't add this header // so the upstream app can set it instead !( process.env.__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE && - relativizedRewrite.match(/http(s)?:\/\//) + relativeDestination.match(/http(s)?:\/\//) ) ) { - response.headers.set('x-nextjs-rewrite', relativizedRewrite) + response.headers.set('x-nextjs-rewrite', relativeDestination) + } + + // If this is an RSC request, and the pathname or search has changed, and + // this isn't an external rewrite, we need to set the rewritten pathname and + // query headers. + if (isRSCRequest && isRelative) { + if (requestURL.pathname !== destination.pathname) { + response.headers.set(NEXT_REWRITTEN_PATH_HEADER, destination.pathname) + } + if (requestURL.search !== destination.search) { + response.headers.set( + NEXT_REWRITTEN_QUERY_HEADER, + // remove the leading ? from the search string + destination.search.slice(1) + ) + } } } @@ -370,9 +397,9 @@ export async function adapter( response = new Response(response.body, response) if (!process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE) { - if (redirectURL.host === request.nextUrl.host) { + if (redirectURL.host === requestURL.host) { redirectURL.buildId = buildId || redirectURL.buildId - response.headers.set('Location', String(redirectURL)) + response.headers.set('Location', redirectURL.toString()) } } @@ -385,7 +412,7 @@ export async function adapter( response.headers.delete('Location') response.headers.set( 'x-nextjs-redirect', - relativizeURL(String(redirectURL), String(requestUrl)) + getRelativeURL(redirectURL.toString(), requestURL.toString()) ) } } diff --git a/packages/next/src/shared/lib/router/utils/relativize-url.ts b/packages/next/src/shared/lib/router/utils/relativize-url.ts index 2bc97102f08e6..3932ae45bc3e3 100644 --- a/packages/next/src/shared/lib/router/utils/relativize-url.ts +++ b/packages/next/src/shared/lib/router/utils/relativize-url.ts @@ -1,13 +1,42 @@ +/** + * The result of parsing a URL relative to a base URL. + */ +export type RelativeURL = { + /** + * The relative URL. Either a URL including the origin or a relative URL. + */ + url: string + + /** + * Whether the URL is relative to the base URL. + */ + isRelative: boolean +} + +export function parseRelativeURL( + url: string | URL, + base: string | URL +): RelativeURL { + const baseURL = typeof base === 'string' ? new URL(base) : base + const relative = new URL(url, base) + + // The URL is relative if the origin is the same as the base URL. + const isRelative = relative.origin === baseURL.origin + + return { + url: isRelative + ? relative.toString().slice(baseURL.origin.length) + : relative.toString(), + isRelative, + } +} + /** * Given a URL as a string and a base URL it will make the URL relative * if the parsed protocol and host is the same as the one in the base * URL. Otherwise it returns the same URL string. */ -export function relativizeURL(url: string | string, base: string | URL) { - const baseURL = typeof base === 'string' ? new URL(base) : base - const relative = new URL(url, base) - const origin = `${baseURL.protocol}//${baseURL.host}` - return `${relative.protocol}//${relative.host}` === origin - ? relative.toString().replace(origin, '') - : relative.toString() +export function getRelativeURL(url: string | URL, base: string | URL): string { + const relative = parseRelativeURL(url, base) + return relative.url } From 7627f1dc481f0242a0adf312c2870a1fb4422c82 Mon Sep 17 00:00:00 2001 From: Benjamin Woodruff Date: Mon, 13 Jan 2025 19:01:07 -0800 Subject: [PATCH 24/65] refactor(turbopack): Rewrite CollectiblesSource callsites to use OperationVc (part 3/3) (#74173) `OperationVc`s should be used with `CollectiblesSource` instead of `Vc`s because collectibles represent a side-effect or implicit extra return value of a function's execution. --- .../turbo-tasks-testing/tests/collectibles.rs | 129 ++++++++++-------- .../tests/dirty_in_progress.rs | 8 +- .../tests/recompute_collectibles.rs | 12 +- turbopack/crates/turbo-tasks/src/vc/mod.rs | 21 +-- .../crates/turbopack-tests/tests/execution.rs | 29 ++-- .../crates/turbopack-tests/tests/snapshot.rs | 23 ++-- .../turbopack/benches/node_file_trace.rs | 17 ++- turbopack/crates/turbopack/src/lib.rs | 8 ++ .../crates/turbopack/tests/node-file-trace.rs | 13 +- 9 files changed, 132 insertions(+), 128 deletions(-) diff --git a/turbopack/crates/turbo-tasks-testing/tests/collectibles.rs b/turbopack/crates/turbo-tasks-testing/tests/collectibles.rs index b8d04bdaf61ef..dd95eb49cc463 100644 --- a/turbopack/crates/turbo-tasks-testing/tests/collectibles.rs +++ b/turbopack/crates/turbo-tasks-testing/tests/collectibles.rs @@ -16,15 +16,15 @@ static REGISTRATION: Registration = register!(); #[tokio::test] async fn transitive_emitting() { run(®ISTRATION, || async { - let result = my_transitive_emitting_function("".into(), "".into()); - result.strongly_consistent().await?; - let list = result.peek_collectibles::>(); + let result_op = my_transitive_emitting_function("".into(), "".into()); + let result_val = result_op.connect().strongly_consistent().await?; + let list = result_op.peek_collectibles::>(); assert_eq!(list.len(), 2); let mut expected = ["123", "42"].into_iter().collect::>(); for collectible in list { assert!(expected.remove(collectible.to_string().await?.as_str())) } - assert_eq!(result.await?.0, 0); + assert_eq!(result_val.0, 0); anyhow::Ok(()) }) .await @@ -34,15 +34,15 @@ async fn transitive_emitting() { #[tokio::test] async fn transitive_emitting_indirect() { run(®ISTRATION, || async { - let result = my_transitive_emitting_function("".into(), "".into()); - let collectibles = my_transitive_emitting_function_collectibles("".into(), "".into()); - let list = collectibles.strongly_consistent().await?; + let result_op = my_transitive_emitting_function("".into(), "".into()); + let collectibles_op = my_transitive_emitting_function_collectibles("".into(), "".into()); + let list = collectibles_op.connect().strongly_consistent().await?; assert_eq!(list.len(), 2); let mut expected = ["123", "42"].into_iter().collect::>(); for collectible in list.iter() { assert!(expected.remove(collectible.to_string().await?.as_str())) } - assert_eq!(result.await?.0, 0); + assert_eq!(result_op.connect().await?.0, 0); anyhow::Ok(()) }) .await @@ -52,15 +52,15 @@ async fn transitive_emitting_indirect() { #[tokio::test] async fn multi_emitting() { run(®ISTRATION, || async { - let result = my_multi_emitting_function(); - result.strongly_consistent().await?; - let list = result.peek_collectibles::>(); + let result_op = my_multi_emitting_function(); + let result_val = result_op.connect().strongly_consistent().await?; + let list = result_op.peek_collectibles::>(); assert_eq!(list.len(), 2); let mut expected = ["123", "42"].into_iter().collect::>(); for collectible in list { assert!(expected.remove(collectible.to_string().await?.as_str())) } - assert_eq!(result.await?.0, 0); + assert_eq!(result_val.0, 0); anyhow::Ok(()) }) .await @@ -70,12 +70,13 @@ async fn multi_emitting() { #[tokio::test] async fn taking_collectibles() { run(®ISTRATION, || async { - let result = my_collecting_function(); - let list = result.take_collectibles::>(); + let result_op = my_collecting_function(); + let result_val = result_op.connect().strongly_consistent().await?; + let list = result_op.take_collectibles::>(); // my_collecting_function already processed the collectibles so the list should // be empty assert!(list.is_empty()); - assert_eq!(result.await?.0, 0); + assert_eq!(result_val.0, 0); anyhow::Ok(()) }) .await @@ -85,13 +86,13 @@ async fn taking_collectibles() { #[tokio::test] async fn taking_collectibles_extra_layer() { run(®ISTRATION, || async { - let result = my_collecting_function_indirect(); - result.strongly_consistent().await?; - let list = result.take_collectibles::>(); + let result_op = my_collecting_function_indirect(); + let result_val = result_op.connect().strongly_consistent().await?; + let list = result_op.take_collectibles::>(); // my_collecting_function already processed the collectibles so the list should // be empty assert!(list.is_empty()); - assert_eq!(result.await?.0, 0); + assert_eq!(result_val.0, 0); anyhow::Ok(()) }) .await @@ -101,38 +102,38 @@ async fn taking_collectibles_extra_layer() { #[tokio::test] async fn taking_collectibles_parallel() { run(®ISTRATION, || async { - let result = my_transitive_emitting_function("".into(), "a".into()); - result.strongly_consistent().await?; - let list = result.take_collectibles::>(); + let result_op = my_transitive_emitting_function("".into(), "a".into()); + let result_val = result_op.connect().strongly_consistent().await?; + let list = result_op.take_collectibles::>(); assert_eq!(list.len(), 2); - assert_eq!(result.await?.0, 0); + assert_eq!(result_val.0, 0); - let result = my_transitive_emitting_function("".into(), "b".into()); - result.strongly_consistent().await?; - let list = result.take_collectibles::>(); + let result_op = my_transitive_emitting_function("".into(), "b".into()); + let result_val = result_op.connect().strongly_consistent().await?; + let list = result_op.take_collectibles::>(); assert_eq!(list.len(), 2); - assert_eq!(result.await?.0, 0); + assert_eq!(result_val.0, 0); - let result = + let result_op = my_transitive_emitting_function_with_child_scope("".into(), "b".into(), "1".into()); - result.strongly_consistent().await?; - let list = result.take_collectibles::>(); + let result_val = result_op.connect().strongly_consistent().await?; + let list = result_op.take_collectibles::>(); assert_eq!(list.len(), 2); - assert_eq!(result.await?.0, 0); + assert_eq!(result_val.0, 0); - let result = + let result_op = my_transitive_emitting_function_with_child_scope("".into(), "b".into(), "2".into()); - result.strongly_consistent().await?; - let list = result.take_collectibles::>(); + let result_val = result_op.connect().strongly_consistent().await?; + let list = result_op.take_collectibles::>(); assert_eq!(list.len(), 2); - assert_eq!(result.await?.0, 0); + assert_eq!(result_val.0, 0); - let result = + let result_op = my_transitive_emitting_function_with_child_scope("".into(), "c".into(), "3".into()); - result.strongly_consistent().await?; - let list = result.take_collectibles::>(); + let result_val = result_op.connect().strongly_consistent().await?; + let list = result_op.take_collectibles::>(); assert_eq!(list.len(), 2); - assert_eq!(result.await?.0, 0); + assert_eq!(result_val.0, 0); anyhow::Ok(()) }) @@ -143,46 +144,53 @@ async fn taking_collectibles_parallel() { #[turbo_tasks::value(transparent)] struct Collectibles(AutoSet>>); -#[turbo_tasks::function] +#[turbo_tasks::function(operation)] async fn my_collecting_function() -> Result> { - let result = my_transitive_emitting_function("".into(), "".into()); - result.take_collectibles::>(); - Ok(result) + let result_op = my_transitive_emitting_function("".into(), "".into()); + let result_vc = result_op.connect(); + result_vc.await?; + result_op.take_collectibles::>(); + Ok(result_vc) } -#[turbo_tasks::function] +#[turbo_tasks::function(operation)] async fn my_collecting_function_indirect() -> Result> { - let result = my_collecting_function(); - result.strongly_consistent().await?; - let list = result.peek_collectibles::>(); + let result_op = my_collecting_function(); + let result_vc = result_op.connect(); + result_vc.strongly_consistent().await?; + let list = result_op.peek_collectibles::>(); // my_collecting_function already processed the collectibles so the list should // be empty assert!(list.is_empty()); - Ok(result) + Ok(result_vc) } -#[turbo_tasks::function] +#[turbo_tasks::function(operation)] async fn my_multi_emitting_function() -> Result> { - my_transitive_emitting_function("".into(), "a".into()).await?; - my_transitive_emitting_function("".into(), "b".into()).await?; + my_transitive_emitting_function("".into(), "a".into()) + .connect() + .await?; + my_transitive_emitting_function("".into(), "b".into()) + .connect() + .await?; my_emitting_function("".into()).await?; Ok(Thing::cell(Thing(0))) } -#[turbo_tasks::function] +#[turbo_tasks::function(operation)] async fn my_transitive_emitting_function(key: RcStr, _key2: RcStr) -> Result> { my_emitting_function(key).await?; Ok(Thing::cell(Thing(0))) } -#[turbo_tasks::function] +#[turbo_tasks::function(operation)] async fn my_transitive_emitting_function_collectibles( key: RcStr, key2: RcStr, ) -> Result> { - let result = my_transitive_emitting_function(key, key2); + let result_op = my_transitive_emitting_function(key, key2); Ok(Vc::cell( - result + result_op .peek_collectibles::>() .into_iter() .map(|v| v.to_resolved()) @@ -193,17 +201,18 @@ async fn my_transitive_emitting_function_collectibles( )) } -#[turbo_tasks::function] +#[turbo_tasks::function(operation)] async fn my_transitive_emitting_function_with_child_scope( key: RcStr, key2: RcStr, _key3: RcStr, ) -> Result> { - let thing = my_transitive_emitting_function(key, key2); - thing.strongly_consistent().await?; - let list = thing.peek_collectibles::>(); + let thing_op = my_transitive_emitting_function(key, key2); + let thing_vc = thing_op.connect(); + thing_vc.await?; + let list = thing_op.peek_collectibles::>(); assert_eq!(list.len(), 2); - Ok(thing) + Ok(thing_vc) } #[turbo_tasks::function] diff --git a/turbopack/crates/turbo-tasks-testing/tests/dirty_in_progress.rs b/turbopack/crates/turbo-tasks-testing/tests/dirty_in_progress.rs index 6ea1877472aeb..9053abcde93fe 100644 --- a/turbopack/crates/turbo-tasks-testing/tests/dirty_in_progress.rs +++ b/turbopack/crates/turbo-tasks-testing/tests/dirty_in_progress.rs @@ -71,8 +71,8 @@ impl ValueToString for Collectible { } } -#[turbo_tasks::function] -async fn inner_compute(input: Vc) -> Result> { +#[turbo_tasks::function(operation)] +async fn inner_compute(input: ResolvedVc) -> Result> { println!("start inner_compute"); let value = *input.await?.state.get(); tokio::time::sleep(Duration::from_millis(200)).await; @@ -90,10 +90,10 @@ async fn inner_compute(input: Vc) -> Result> { } #[turbo_tasks::function] -async fn compute(input: Vc) -> Result> { +async fn compute(input: ResolvedVc) -> Result> { println!("start compute"); let operation = inner_compute(input); - let value = *operation.await?; + let value = *operation.connect().await?; let collectibles = operation.peek_collectibles::>(); if collectibles.len() > 1 { bail!("expected 0..1 collectible, found {}", collectibles.len()); diff --git a/turbopack/crates/turbo-tasks-testing/tests/recompute_collectibles.rs b/turbopack/crates/turbo-tasks-testing/tests/recompute_collectibles.rs index 7f05bdb856aee..215974944d3a8 100644 --- a/turbopack/crates/turbo-tasks-testing/tests/recompute_collectibles.rs +++ b/turbopack/crates/turbo-tasks-testing/tests/recompute_collectibles.rs @@ -57,9 +57,9 @@ impl ValueToString for Collectible { } } -#[turbo_tasks::function] -fn inner_compute(input: Vc) -> Vc { - inner_compute2(input, 1000) +#[turbo_tasks::function(operation)] +fn inner_compute(input: ResolvedVc) -> Vc { + inner_compute2(*input, 1000) } #[turbo_tasks::function] @@ -79,12 +79,12 @@ async fn inner_compute2(input: Vc, innerness: u32) -> Result, innerness: u32) -> Result> { +async fn compute(input: ResolvedVc, innerness: u32) -> Result> { if innerness > 0 { - return Ok(compute(input, innerness - 1)); + return Ok(compute(*input, innerness - 1)); } let operation = inner_compute(input); - let value = *operation.await?; + let value = *operation.connect().await?; let collectibles = operation.peek_collectibles::>(); if collectibles.len() != 1 { bail!("expected 1 collectible, found {}", collectibles.len()); diff --git a/turbopack/crates/turbo-tasks/src/vc/mod.rs b/turbopack/crates/turbo-tasks/src/vc/mod.rs index b36dcc3bdce17..81729ea3397f8 100644 --- a/turbopack/crates/turbo-tasks/src/vc/mod.rs +++ b/turbopack/crates/turbo-tasks/src/vc/mod.rs @@ -17,7 +17,6 @@ use std::{ }; use anyhow::Result; -use auto_hash_map::AutoSet; use serde::{Deserialize, Serialize}; pub use self::{ @@ -35,7 +34,7 @@ use crate::{ manager::{create_local_cell, try_get_function_meta}, registry, trace::{TraceRawVcs, TraceRawVcsContext}, - CellId, CollectiblesSource, RawVc, ResolveTypeError, SharedReference, ShrinkToFit, + CellId, RawVc, ResolveTypeError, SharedReference, ShrinkToFit, }; /// A "Value Cell" (`Vc` for short) is a reference to a memoized computation result stored on the @@ -425,11 +424,6 @@ impl Vc where T: ?Sized, { - /// Connects the operation pointed to by this `Vc` to the current task. - pub fn connect(vc: Self) { - vc.node.connect() - } - /// Returns a debug identifier for this `Vc`. pub async fn debug_identifier(vc: Self) -> Result { let resolved = vc.resolve().await?; @@ -587,19 +581,6 @@ where } } -impl CollectiblesSource for Vc -where - T: ?Sized, -{ - fn take_collectibles(self) -> AutoSet> { - self.node.take_collectibles() - } - - fn peek_collectibles(self) -> AutoSet> { - self.node.peek_collectibles() - } -} - impl From for Vc where T: ?Sized, diff --git a/turbopack/crates/turbopack-tests/tests/execution.rs b/turbopack/crates/turbopack-tests/tests/execution.rs index 7f5558a2f7322..d954007e2cbc6 100644 --- a/turbopack/crates/turbopack-tests/tests/execution.rs +++ b/turbopack/crates/turbopack-tests/tests/execution.rs @@ -13,7 +13,7 @@ use serde::{Deserialize, Serialize}; use turbo_rcstr::RcStr; use turbo_tasks::{ apply_effects, debug::ValueDebugFormat, fxindexmap, trace::TraceRawVcs, Completion, - NonLocalValue, ResolvedVc, TryJoinIterExt, TurboTasks, Value, Vc, + NonLocalValue, OperationVc, ResolvedVc, TryJoinIterExt, TurboTasks, Value, Vc, }; use turbo_tasks_bytes::stream::SingleValue; use turbo_tasks_env::CommandLineProcessEnv; @@ -170,27 +170,28 @@ async fn run(resource: PathBuf, snapshot_mode: IssueSnapshotMode) -> Result, ) -> Result> { - let prepared_test = prepare_test(resource); - let run_result = run_test(prepared_test); + let prepared_test = prepare_test(resource).to_resolved().await?; + let run_result_op = run_test_operation(prepared_test); if *snapshot_mode == IssueSnapshotMode::Snapshots { - snapshot_issues(prepared_test, run_result).await?; + snapshot_issues(*prepared_test, run_result_op).await?; } - Ok(*run_result.await?.js_result) + Ok(*run_result_op.connect().await?.js_result) } #[derive( @@ -264,8 +265,8 @@ async fn prepare_test(resource: RcStr) -> Result> { .cell()) } -#[turbo_tasks::function] -async fn run_test(prepared_test: Vc) -> Result> { +#[turbo_tasks::function(operation)] +async fn run_test_operation(prepared_test: ResolvedVc) -> Result> { let PreparedTest { path, project_path, @@ -451,10 +452,10 @@ async fn run_test(prepared_test: Vc) -> Result> #[turbo_tasks::function] async fn snapshot_issues( prepared_test: Vc, - run_result: Vc, + run_result: OperationVc, ) -> Result> { let PreparedTest { path, .. } = *prepared_test.await?; - let _ = run_result.resolve_strongly_consistent().await; + let _ = run_result.connect().resolve_strongly_consistent().await; let captured_issues = run_result.peek_issues_with_path().await?; diff --git a/turbopack/crates/turbopack-tests/tests/snapshot.rs b/turbopack/crates/turbopack-tests/tests/snapshot.rs index 5848296216db2..fce3442c2b9ef 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot.rs +++ b/turbopack/crates/turbopack-tests/tests/snapshot.rs @@ -157,9 +157,9 @@ async fn run(resource: PathBuf) -> Result<()> { let tt = TurboTasks::new(MemoryBackend::default()); let task = tt.spawn_once_task(async move { - let emit = run_inner(resource.to_str().unwrap().into()); - emit.strongly_consistent().await?; - apply_effects(emit).await?; + let emit_op = run_inner_operation(resource.to_str().unwrap().into()); + emit_op.connect().strongly_consistent().await?; + apply_effects(emit_op).await?; Ok(Vc::<()>::default()) }); @@ -169,11 +169,12 @@ async fn run(resource: PathBuf) -> Result<()> { Ok(()) } -#[turbo_tasks::function] -async fn run_inner(resource: RcStr) -> Result<()> { - let out = run_test(resource); - let _ = out.resolve_strongly_consistent().await?; - let captured_issues = out.peek_issues_with_path().await?; +#[turbo_tasks::function(operation)] +async fn run_inner_operation(resource: RcStr) -> Result<()> { + let out_op = run_test_operation(resource); + let out_vc = out_op.connect(); + let _ = out_vc.resolve_strongly_consistent().await?; + let captured_issues = out_op.peek_issues_with_path().await?; let plain_issues = captured_issues .iter_with_shortest_path() @@ -181,15 +182,15 @@ async fn run_inner(resource: RcStr) -> Result<()> { .try_join() .await?; - snapshot_issues(plain_issues, out.join("issues".into()), &REPO_ROOT) + snapshot_issues(plain_issues, out_vc.join("issues".into()), &REPO_ROOT) .await .context("Unable to handle issues")?; Ok(()) } -#[turbo_tasks::function] -async fn run_test(resource: RcStr) -> Result> { +#[turbo_tasks::function(operation)] +async fn run_test_operation(resource: RcStr) -> Result> { let test_path = canonicalize(&resource)?; assert!(test_path.exists(), "{} does not exist", resource); assert!( diff --git a/turbopack/crates/turbopack/benches/node_file_trace.rs b/turbopack/crates/turbopack/benches/node_file_trace.rs index 36c9f9abb071a..efdc73c20a151 100644 --- a/turbopack/crates/turbopack/benches/node_file_trace.rs +++ b/turbopack/crates/turbopack/benches/node_file_trace.rs @@ -3,11 +3,11 @@ use std::{fs, path::PathBuf}; use criterion::{Bencher, BenchmarkId, Criterion}; use regex::Regex; use turbo_rcstr::RcStr; -use turbo_tasks::{apply_effects, ReadConsistency, TurboTasks, Value, Vc}; +use turbo_tasks::{apply_effects, ReadConsistency, ResolvedVc, TurboTasks, Value, Vc}; use turbo_tasks_fs::{DiskFileSystem, FileSystem, NullFileSystem}; use turbo_tasks_memory::MemoryBackend; use turbopack::{ - emit_with_completion, + emit_with_completion_operation, module_options::{EcmascriptOptionsContext, ModuleOptionsContext}, register, ModuleAssetContext, }; @@ -80,7 +80,7 @@ fn bench_emit(b: &mut Bencher, bench_input: &BenchInput) { let input_dir = input.parent().parent(); let output_fs: Vc = NullFileSystem.into(); - let output_dir = output_fs.root(); + let output_dir = output_fs.root().to_resolved().await?; let source = FileSource::new(input); let compile_time_info = CompileTimeInfo::builder( @@ -115,11 +115,14 @@ fn bench_emit(b: &mut Bencher, bench_input: &BenchInput) { let module = module_asset_context .process(Vc::upcast(source), Value::new(ReferenceType::Undefined)) .module(); - let rebased = RebasedAsset::new(Vc::upcast(module), input_dir, output_dir); + let rebased = RebasedAsset::new(Vc::upcast(module), input_dir, *output_dir) + .to_resolved() + .await?; - let emit = emit_with_completion(Vc::upcast(rebased), output_dir); - emit.strongly_consistent().await?; - apply_effects(emit).await?; + let emit_op = + emit_with_completion_operation(ResolvedVc::upcast(rebased), output_dir); + emit_op.connect().strongly_consistent().await?; + apply_effects(emit_op).await?; Ok::, _>(Default::default()) }); diff --git a/turbopack/crates/turbopack/src/lib.rs b/turbopack/crates/turbopack/src/lib.rs index 786c76d2affc2..bbd5af77b2ce2 100644 --- a/turbopack/crates/turbopack/src/lib.rs +++ b/turbopack/crates/turbopack/src/lib.rs @@ -904,6 +904,14 @@ pub fn emit_with_completion(asset: Vc>, output_dir: Vc>, + output_dir: ResolvedVc, +) -> Vc<()> { + emit_with_completion(*asset, *output_dir) +} + #[turbo_tasks::function] fn emit_assets_aggregated(asset: Vc>, output_dir: Vc) { let aggregated = aggregate(asset); diff --git a/turbopack/crates/turbopack/tests/node-file-trace.rs b/turbopack/crates/turbopack/tests/node-file-trace.rs index 22798d69a3871..499485a734dcd 100644 --- a/turbopack/crates/turbopack/tests/node-file-trace.rs +++ b/turbopack/crates/turbopack/tests/node-file-trace.rs @@ -36,7 +36,7 @@ use turbo_tasks::{ use turbo_tasks_fs::{DiskFileSystem, FileSystem, FileSystemPath}; use turbo_tasks_memory::MemoryBackend; use turbopack::{ - emit_with_completion, + emit_with_completion_operation, module_options::{CssOptionsContext, EcmascriptOptionsContext, ModuleOptionsContext}, register, ModuleAssetContext, }; @@ -420,7 +420,7 @@ fn node_file_trace( let original_output = exec_node(package_root, input); let output_fs = DiskFileSystem::new("output".into(), directory.clone(), vec![]); - let output_dir = output_fs.root(); + let output_dir = output_fs.root().to_resolved().await?; let source = FileSource::new(input); let module_asset_context = ModuleAssetContext::new( @@ -457,7 +457,7 @@ fn node_file_trace( let module = module_asset_context .process(Vc::upcast(source), Value::new(ReferenceType::Undefined)) .module(); - let rebased = RebasedAsset::new(Vc::upcast(module), *input_dir, output_dir) + let rebased = RebasedAsset::new(Vc::upcast(module), *input_dir, *output_dir) .to_resolved() .await?; @@ -466,9 +466,10 @@ fn node_file_trace( print_graph(ResolvedVc::upcast(rebased)).await?; - let emit = emit_with_completion(*ResolvedVc::upcast(rebased), output_dir); - emit.strongly_consistent().await?; - apply_effects(emit).await?; + let emit_op = + emit_with_completion_operation(ResolvedVc::upcast(rebased), output_dir); + emit_op.connect().strongly_consistent().await?; + apply_effects(emit_op).await?; #[cfg(not(feature = "bench_against_node_nft"))] { From 78d51282172ab807fde4dcfd8b8cd09f6d5b5e58 Mon Sep 17 00:00:00 2001 From: Jam Balaya Date: Tue, 14 Jan 2025 14:19:27 +0900 Subject: [PATCH 25/65] examples: update README.md in `mdx` example (#73454) ## Description [`mdx`](https://github.com/vercel/next.js/tree/canary/examples/mdx) example [README.md](https://github.com/vercel/next.js/blob/canary/examples/app-dir-mdx/README.md) is inaccurate. For instance, API routes is described even though it does not exist. In conclusion, I rewrote the README.md following [example guidelines](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md). CC: @samcx ### Adding or Updating Examples - [x] The "examples guidelines" are followed from our contributing doc https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md - [x] Make sure the linting passes by running `pnpm build && pnpm lint`. See https://github.com/vercel/next.js/blob/canary/contributing/repository/linting.md --- examples/mdx/README.md | 45 +++++++++++++++++++----------------------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/examples/mdx/README.md b/examples/mdx/README.md index bb30f88bc869e..96abbfc114ca0 100644 --- a/examples/mdx/README.md +++ b/examples/mdx/README.md @@ -1,36 +1,31 @@ -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). +# Example app with MDX -## Getting Started +This example shows using [MDX](https://github.com/mdx-js/mdx) as top level pages for your next.js app. -First, run the development server: +## Deploy your own -```bash -npm run dev -# or -yarn dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/mdx) -[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/mdx&project-name=mdx&repository-name=mdx) -The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. +## How to use -This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. +Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app) with [npm](https://docs.npmjs.com/cli/init), [Yarn](https://yarnpkg.com/lang/en/docs/cli/create/), [pnpm](https://pnpm.io), or [Bun](https://bun.sh/docs/cli/bunx) to bootstrap the example: -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. +```bash +npx create-next-app --example mdx mdx-app +``` -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! +```bash +yarn create next-app --example mdx mdx-app +``` -## Deploy on Vercel +```bash +pnpm create next-app --example mdx mdx-app +``` -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. +```bash +bunx create-next-app --example mdx mdx-app +``` -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. +Deploy it to the cloud with [Vercel](https://vercel.com/new?utm_source=github&utm_medium=readme&utm_campaign=next-example) ([Documentation](https://nextjs.org/docs/app/building-your-application/deploying)). From 36dce2fe7e03fd286711497f074ce0ce02198418 Mon Sep 17 00:00:00 2001 From: Jam Balaya Date: Tue, 14 Jan 2025 14:24:51 +0900 Subject: [PATCH 26/65] examples: add StackBlitz preview to README.md (#73546) ### Description Follow up #35349. 1. Update the [example template](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md) with [StackBlitz](https://stackblitz.com/) preview 2. Add `preview live with StackBlitz` to the examples 3. Remove the below old StackBlitz preview section from the examples ```md ## Preview Preview the example live on [StackBlitz](http://stackblitz.com/): [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/active-class-name) ``` CC: @samcx ### Improving Documentation - [x] Run `pnpm prettier-fix` to fix formatting issues before opening the PR. - [x] Read the Docs Contribution Guide to ensure your contribution follows the docs guidelines: https://nextjs.org/docs/community/contribution-guide ### Adding or Updating Examples - [x] The "examples guidelines" are followed from our contributing doc https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md - [x] Make sure the linting passes by running `pnpm build && pnpm lint`. See https://github.com/vercel/next.js/blob/canary/contributing/repository/linting.md --- contributing/examples/adding-examples.md | 2 +- examples/amp/README.md | 2 +- examples/auth/README.md | 2 +- examples/cms-agilitycms/README.md | 2 +- examples/cms-cosmic/README.md | 2 +- examples/cms-datocms/README.md | 2 +- examples/cms-drupal/README.md | 2 +- examples/cms-enterspeed/README.md | 2 +- examples/cms-ghost/README.md | 2 +- examples/cms-graphcms/README.md | 2 +- examples/cms-kontent-ai/README.md | 2 +- examples/cms-makeswift/README.md | 2 +- examples/cms-payload/README.md | 2 +- examples/cms-plasmic/README.md | 2 +- examples/cms-prismic/README.md | 2 +- examples/cms-storyblok/README.md | 2 +- examples/cms-takeshape/README.md | 2 +- examples/cms-umbraco-heartcore/README.md | 2 +- examples/cms-webiny/README.md | 2 +- examples/cms-wordpress/README.md | 2 +- examples/convex/README.md | 2 +- examples/inngest/README.md | 2 +- examples/middleware-matcher/README.md | 2 +- examples/middleware/README.md | 2 +- examples/panda-css/README.md | 10 +++++----- examples/progressive-web-app/README.md | 2 +- examples/radix-ui/README.md | 2 +- examples/with-algolia-react-instantsearch/README.md | 2 +- examples/with-apivideo/README.md | 2 +- examples/with-apollo-and-redux/README.md | 2 +- examples/with-apollo/README.md | 2 +- examples/with-azure-cosmos/README.md | 2 +- examples/with-clerk/README.md | 2 +- examples/with-edgedb/README.md | 2 +- examples/with-elasticsearch/README.md | 2 +- examples/with-emotion/README.md | 8 +------- examples/with-facebook-pixel/README.md | 2 +- examples/with-fauna/README.md | 2 +- examples/with-fingerprintjs-pro/README.md | 2 +- examples/with-firebase/README.md | 2 +- examples/with-google-analytics/README.md | 2 +- examples/with-google-maps-embed/README.md | 2 +- examples/with-google-tag-manager/README.md | 2 +- examples/with-graphql-gateway/README.md | 2 +- examples/with-graphql-hooks/README.md | 2 +- examples/with-graphql-react/README.md | 2 +- examples/with-joi/README.md | 2 +- examples/with-knex/README.md | 2 +- examples/with-magic/README.md | 2 +- examples/with-mantine/README.md | 6 ------ examples/with-meilisearch/README.md | 2 +- examples/with-mongodb-mongoose/README.md | 2 +- examples/with-mongodb/README.md | 2 +- examples/with-mqtt-js/README.md | 2 +- examples/with-msw/README.md | 2 +- examples/with-mysql/README.md | 2 +- examples/with-neo4j/README.md | 2 +- examples/with-next-ui/README.md | 2 +- examples/with-nhost-auth-realtime-graphql/README.md | 2 +- examples/with-passport-and-next-connect/README.md | 2 +- examples/with-passport/README.md | 2 +- examples/with-react-ga4/README.md | 2 +- examples/with-realm-web/README.md | 2 +- examples/with-redux/README.md | 2 +- examples/with-relay-modern/README.md | 2 +- examples/with-sentry/README.md | 8 +------- examples/with-service-worker/README.md | 2 +- examples/with-stencil/README.md | 2 +- examples/with-stripe-typescript/README.md | 2 +- examples/with-unsplash/README.md | 2 +- examples/with-userbase/README.md | 2 +- examples/with-vanilla-extract/README.md | 2 +- examples/with-webassembly/README.md | 6 +++--- examples/with-youtube-embed/README.md | 2 +- examples/with-zones/README.md | 12 ++++-------- 75 files changed, 83 insertions(+), 105 deletions(-) diff --git a/contributing/examples/adding-examples.md b/contributing/examples/adding-examples.md index aaa4bb4ae1154..98ef8562a3525 100644 --- a/contributing/examples/adding-examples.md +++ b/contributing/examples/adding-examples.md @@ -33,7 +33,7 @@ Description ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/DIRECTORY_NAME) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/DIRECTORY_NAME&project-name=DIRECTORY_NAME&repository-name=DIRECTORY_NAME) diff --git a/examples/amp/README.md b/examples/amp/README.md index 7d30f4d4bab86..caad55a183005 100644 --- a/examples/amp/README.md +++ b/examples/amp/README.md @@ -4,7 +4,7 @@ This example shows how to create AMP pages using Next.js and the AMP feature. It ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/amp) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/amp&project-name=amp&repository-name=amp) diff --git a/examples/auth/README.md b/examples/auth/README.md index aa0e14c8c5cb2..6834b0e6019ac 100644 --- a/examples/auth/README.md +++ b/examples/auth/README.md @@ -4,7 +4,7 @@ This is an example using NextAuth.js for authentication. ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/auth) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/auth&project-name=auth&repository-name=auth&env=AUTH_GITHUB_ID,AUTH_GITHUB_SECRET,AUTH_SECRET) diff --git a/examples/cms-agilitycms/README.md b/examples/cms-agilitycms/README.md index 5a98322e6086e..92b4dd1223f62 100644 --- a/examples/cms-agilitycms/README.md +++ b/examples/cms-agilitycms/README.md @@ -11,7 +11,7 @@ This example showcases Next.js's [Static Generation](https://nextjs.org/docs/bas ## Deploy your own -Once you have access to [the environment variables you'll need](#step-15-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#step-15-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-agilitycms) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/cms-agilitycms&project-name=cms-agilitycms&repository-name=cms-agilitycms&env=AGILITY_CMS_GUID,AGILITY_CMS_API_FETCH_KEY,AGILITY_CMS_API_PREVIEW_KEY,AGILITY_CMS_SECURITY_KEY&envDescription=API%20Keys%20required%20by%20Agility%20CMS&envLink=https://vercel.link/agility-cms-env) diff --git a/examples/cms-cosmic/README.md b/examples/cms-cosmic/README.md index 412ffaa4fd23e..60c8f023805c5 100644 --- a/examples/cms-cosmic/README.md +++ b/examples/cms-cosmic/README.md @@ -8,7 +8,7 @@ This example showcases Next.js's [Static Generation](https://nextjs.org/docs/bas ## Deploy your own -Once you have access to [the environment variables you'll need](#step-3-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#step-3-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-cosmic) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/cms-cosmic&project-name=cms-cosmic&repository-name=cms-cosmic&env=COSMIC_BUCKET_SLUG,COSMIC_READ_KEY,COSMIC_PREVIEW_SECRET&envDescription=Required%20to%20connect%20the%20app%20with%20Cosmic&envLink=https://vercel.link/cms-cosmic-env) diff --git a/examples/cms-datocms/README.md b/examples/cms-datocms/README.md index 119655071420e..9e36db457d8fb 100644 --- a/examples/cms-datocms/README.md +++ b/examples/cms-datocms/README.md @@ -39,7 +39,7 @@ This example showcases Next.js's [Static Generation](https://nextjs.org/docs/bas ## Deploy your own -Once you have access to [the environment variables you'll need](#step-5-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#step-5-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-datocms) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/cms-datocms&project-name=cms-datocms&repository-name=cms-datocms&env=DATOCMS_API_TOKEN,DATOCMS_PREVIEW_SECRET&envDescription=Required%20to%20connect%20the%20app%20with%20DatoCMS&envLink=https://vercel.link/cms-datocms-env) diff --git a/examples/cms-drupal/README.md b/examples/cms-drupal/README.md index 12120633b6e84..241348ed0f5ed 100644 --- a/examples/cms-drupal/README.md +++ b/examples/cms-drupal/README.md @@ -8,7 +8,7 @@ This example showcases Next.js's [Static Generation](https://nextjs.org/docs/bas ## Deploy your own -Once you have [configured the Next.js module for Drupal](https://next-drupal.org/guides/decoupled-drupal-nextjs) and have access to the environment variables you'll need, deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have [configured the Next.js module for Drupal](https://next-drupal.org/guides/decoupled-drupal-nextjs) and have access to the environment variables you'll need, deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-drupal) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/import/git?c=1&s=https://github.com/vercel/next.js/tree/canary/examples/cms-drupal&env=NEXT_PUBLIC_DRUPAL_BASE_URL,NEXT_IMAGE_DOMAIN,DRUPAL_SITE_ID,DRUPAL_FRONT_PAGE,DRUPAL_PREVIEW_SECRET,DRUPAL_NEXT_CLIENT_ID,DRUPAL_NEXT_CLIENT_SECRET&envDescription=Required%20to%20connect%20the%20app%20with%20ghost&envLink=https://vercel.link/cms-drupal-env) diff --git a/examples/cms-enterspeed/README.md b/examples/cms-enterspeed/README.md index 644ef73c04e11..cf76e4a14aa4d 100644 --- a/examples/cms-enterspeed/README.md +++ b/examples/cms-enterspeed/README.md @@ -8,7 +8,7 @@ This example showcases Next.js's [Static Generation](https://nextjs.org/docs/bas ## Deploy your own -Once you have access to [the environment variables you'll need](#step-3-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#step-3-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-enterspeed) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fnext.js%2Ftree%2Fcanary%2Fexamples%2Fcms-enterspeed&env=ENTERSPEED_PRODUCTION_ENVIRONMENT_API_KEY&envDescription=Required%20to%20connect%20the%20app%20with%20Enterspeed&envLink=https%3A%2F%2Fgithub.com%2Fvercel%2Fnext.js%2Ftree%2Fcanary%2Fexamples%2Fcms-enterspeed%23step-5-set-up-environment-variables&demo-title=Next.js%20with%20Enterspeed&demo-description=A%20statically%20generated%20blog%20example%20using%20Next.js%20and%20Enterspeed.) diff --git a/examples/cms-ghost/README.md b/examples/cms-ghost/README.md index 6046665824698..47a2c1cff64ef 100644 --- a/examples/cms-ghost/README.md +++ b/examples/cms-ghost/README.md @@ -7,7 +7,7 @@ This example showcases Next.js's [Static Generation](https://nextjs.org/docs/bas ## Deploy your own -Once you have access to [the environment variables you'll need](#step-2-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#step-2-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-ghost) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/import/git?c=1&s=https://github.com/vercel/next.js/tree/canary/examples/cms-ghost&env=ghost_BUCKET_SLUG,ghost_READ_KEY,ghost_PREVIEW_SECRET&envDescription=Required%20to%20connect%20the%20app%20with%20ghost&envLink=https://vercel.link/cms-ghost-env) diff --git a/examples/cms-graphcms/README.md b/examples/cms-graphcms/README.md index 439e8c1161f24..1fb66690b7a89 100644 --- a/examples/cms-graphcms/README.md +++ b/examples/cms-graphcms/README.md @@ -42,7 +42,7 @@ This example showcases Next.js's [Static Generation](https://nextjs.org/docs/bas ## Deploy your own -Once you have access to [the environment variables you'll need](#step-3-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#step-3-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-graphcms) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/cms-graphcms&project-name=cms-graphcms&repository-name=cms-graphcms&env=GRAPHCMS_PROJECT_API,GRAPHCMS_PROD_AUTH_TOKEN,GRAPHCMS_DEV_AUTH_TOKEN,GRAPHCMS_PREVIEW_SECRET&envDescription=Required%20to%20connect%20the%20app%20with%20GraphCMS&envLink=https://vercel.link/cms-graphcms-env) diff --git a/examples/cms-kontent-ai/README.md b/examples/cms-kontent-ai/README.md index 4d5eaa4639b21..e8bbd9d65d504 100644 --- a/examples/cms-kontent-ai/README.md +++ b/examples/cms-kontent-ai/README.md @@ -8,7 +8,7 @@ This example showcases Next.js's [Static Generation](https://nextjs.org/docs/bas ## Deploy your own -Once you have access to [the environment variables you'll need](#step-3-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#step-3-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-kontent-ai) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/cms-kontent-ai&project-name=cms-kontent-ai&repository-name=cms-kontent-ai&env=KONTENT_PROJECT_ID,KONTENT_PREVIEW_API_KEY,KONTENT_PREVIEW_SECRET&envDescription=Required%20to%20connect%20the%20app%20with%20Kontent.ai&envLink=https://github.com/vercel/next.js/tree/canary/examples/cms-kontent-ai) diff --git a/examples/cms-makeswift/README.md b/examples/cms-makeswift/README.md index cfb3cde750350..1ad5c2c5dc4c7 100644 --- a/examples/cms-makeswift/README.md +++ b/examples/cms-makeswift/README.md @@ -4,7 +4,7 @@ This example showcases how you can use [Makeswift](https://www.makeswift.com/) t ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-makeswift) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/cms-makeswift&project-name=cms-makeswift&repository-name=cms-makeswift) diff --git a/examples/cms-payload/README.md b/examples/cms-payload/README.md index 5adf6f6c31775..faf3963a8895c 100644 --- a/examples/cms-payload/README.md +++ b/examples/cms-payload/README.md @@ -4,7 +4,7 @@ This is a demo showing how to utilize `@payloadcms/next-payload` to deploy Paylo ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-payload) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/git/external?repository-url=https://github.com/vercel/next.js/tree/canary/examples/cms-payload&project-name=cms-payload&repository-name=cms-payload) diff --git a/examples/cms-plasmic/README.md b/examples/cms-plasmic/README.md index 767cb8d1f38b9..1f76c1396fcf4 100644 --- a/examples/cms-plasmic/README.md +++ b/examples/cms-plasmic/README.md @@ -13,7 +13,7 @@ You'll get: ## Deploy your own -Once you have access to the [environment variables you need](#step-3-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to the [environment variables you need](#step-3-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-plasmic) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fnext.js%2Ftree%2Fcanary%2Fexamples%2Fcms-plasmic&env=NEXT_PUBLIC_PLASMIC_PROJECT_ID,NEXT_PUBLIC_PLASMIC_PROJECT_API_TOKEN,PLASMIC_PREVIEW_SECRET&envDescription=Required%20to%20connect%20the%20app%20with%20Plasmic&envLink=https%3A%2F%2Fgithub.com%2Fvercel%2Fnext.js%2Ftree%2Fcanary%2Fexamples%2Fcms-plasmic) diff --git a/examples/cms-prismic/README.md b/examples/cms-prismic/README.md index 76db911c0b57e..4d6b44abab8df 100644 --- a/examples/cms-prismic/README.md +++ b/examples/cms-prismic/README.md @@ -8,7 +8,7 @@ This example showcases Next.js's [Static Generation](https://nextjs.org/docs/bas ## Deploy your own -Once you have access to [the environment variables you'll need](#step-5-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#step-5-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-prismic) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/cms-prismic&project-name=cms-prismic&repository-name=cms-prismic&env=PRISMIC_API_TOKEN,PRISMIC_REPOSITORY_NAME&envDescription=Required%20to%20connect%20the%20app%20with%20Prismic&envLink=https://vercel.link/cms-prismic-env) diff --git a/examples/cms-storyblok/README.md b/examples/cms-storyblok/README.md index bb90f95032de9..dbc8db1fdb0ff 100644 --- a/examples/cms-storyblok/README.md +++ b/examples/cms-storyblok/README.md @@ -8,7 +8,7 @@ This example showcases Next.js's [Static Generation](https://nextjs.org/docs/bas ## Deploy your own -Once you have access to [the environment variables you'll need](#step-6-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#step-6-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-storyblok) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/cms-storyblok&project-name=cms-storyblok&repository-name=cms-storyblok&env=STORYBLOK_PREVIEW_SECRET,STORYBLOK_API_KEY&envDescription=Required%20to%20connect%20the%20app%20with%20Storyblok&envLink=https://vercel.link/cms-storyblok-env) diff --git a/examples/cms-takeshape/README.md b/examples/cms-takeshape/README.md index 5904849510aad..7f42801766060 100644 --- a/examples/cms-takeshape/README.md +++ b/examples/cms-takeshape/README.md @@ -8,7 +8,7 @@ This example showcases Next.js's [Static Generation](https://nextjs.org/docs/bas ## Deploy your own -Once you have access to [the environment variables you'll need](#step-5-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#step-5-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-takeshape) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/cms-takeshape&project-name=cms-takeshape&repository-name=cms-takeshape&env=TAKESHAPE_PROJECT_ID,TAKESHAPE_API_KEY,TAKESHAPE_PREVIEW_SECRET&envDescription=Required%20to%20connect%20the%20app%20with%20TakeShape&envLink=https://vercel.link/cms-takeshape-env) diff --git a/examples/cms-umbraco-heartcore/README.md b/examples/cms-umbraco-heartcore/README.md index 3fd5e63aba33f..f43a5d29f923a 100644 --- a/examples/cms-umbraco-heartcore/README.md +++ b/examples/cms-umbraco-heartcore/README.md @@ -9,7 +9,7 @@ This example showcases Next.js's [Static Generation](https://nextjs.org/docs/bas ## Deploy your own -Once you have access to [the environment variables you'll need](#step-3-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#step-3-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-umbraco-heartcore) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/import/git?c=1&s=https://github.com/vercel/next.js/tree/canary/examples/cms-umbraco-heartcore&env=UMBRACO_PROJECT_ALIAS,UMBRACO_API_KEY,UMBRACO_PREVIEW_SECRET&envDescription=Required%20to%20connect%20the%20app%20with%20Umbraco%20Heartcore&envLink=https://vercel.link/cms-umbraco-heartcore-env) diff --git a/examples/cms-webiny/README.md b/examples/cms-webiny/README.md index 80a6ce7e4dbd5..a74ad2159f9aa 100644 --- a/examples/cms-webiny/README.md +++ b/examples/cms-webiny/README.md @@ -8,7 +8,7 @@ This example showcases Next.js's [Static Generation](https://nextjs.org/docs/bas ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-webiny) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/cms-webiny&project-name=cms-webiny&repository-name=cms-webiny&env=PREVIEW_API_SECRET,WEBINY_API_SECRET,NEXT_PUBLIC_WEBINY_API_URL,NEXT_PUBLIC_WEBINY_PREVIEW_API_URL&envDescription=Required%20to%20connect%20the%20app%20with%20Webiny&envLink=https://vercel.link/cms-webiny-env) diff --git a/examples/cms-wordpress/README.md b/examples/cms-wordpress/README.md index de9fe7ab9c4b4..5056ff1a60299 100644 --- a/examples/cms-wordpress/README.md +++ b/examples/cms-wordpress/README.md @@ -15,7 +15,7 @@ This is an example on how you can build a Next.js 14 project (with App Router), ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/cms-wordpress) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/cms-wordpress&project-name=cms-wordpress&repository-name=cms-wordpress) diff --git a/examples/convex/README.md b/examples/convex/README.md index 16b18216a6980..8bdc63a6c8432 100644 --- a/examples/convex/README.md +++ b/examples/convex/README.md @@ -4,7 +4,7 @@ This example demonstrates the [Convex](https://convex.dev) backend platform. ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/convex) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/convex&project-name=convex&repository-name=convex) diff --git a/examples/inngest/README.md b/examples/inngest/README.md index bdcf54db89fdf..0ab27f098728a 100755 --- a/examples/inngest/README.md +++ b/examples/inngest/README.md @@ -7,7 +7,7 @@ This is an example of how to use [Inngest](https://inngest.com) to easily add du ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/inngest) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/inngest&project-name=inngest&repository-name=inngest) diff --git a/examples/middleware-matcher/README.md b/examples/middleware-matcher/README.md index 8bcc30920904c..8e692ee54522e 100755 --- a/examples/middleware-matcher/README.md +++ b/examples/middleware-matcher/README.md @@ -14,7 +14,7 @@ Please keep in mind that: ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/middleware-matcher) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/middleware-matcher&project-name=middleware-matcher&repository-name=middleware-matcher) diff --git a/examples/middleware/README.md b/examples/middleware/README.md index a8eeb816f9d3d..6db03fdb9446c 100755 --- a/examples/middleware/README.md +++ b/examples/middleware/README.md @@ -8,7 +8,7 @@ On the Middleware file ([`middleware.ts`](middleware.ts)) the routes are already ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/middleware) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/middleware&project-name=middleware&repository-name=middleware) diff --git a/examples/panda-css/README.md b/examples/panda-css/README.md index 8c2753e870313..3b4c8f43166ab 100644 --- a/examples/panda-css/README.md +++ b/examples/panda-css/README.md @@ -9,15 +9,15 @@ This example contains a simple implementation of [Panda CSS](https://panda-css.c - [Config Recipe](https://panda-css.com/docs/concepts/recipes#config-recipe) Reusable recipes extracted and generated just-in-time. - [Text Styles](https://panda-css.com/docs/theming/text-styles#defining-text-styles) Global text styles for consistent and legible typography. -## Deploy your own +## Demo -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +[https://example-panda-css.vercel.app/](https://example-panda-css.vercel.app/) -[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/DIRECTORY_NAME&project-name=DIRECTORY_NAME&repository-name=DIRECTORY_NAME) +## Deploy your own -## Preview +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/panda-css) -Preview the example live on [https://example-panda-css.vercel.app/](https://example-panda-css.vercel.app/) +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/DIRECTORY_NAME&project-name=DIRECTORY_NAME&repository-name=DIRECTORY_NAME) ## How to use diff --git a/examples/progressive-web-app/README.md b/examples/progressive-web-app/README.md index 22dbf5277deea..7be960415920c 100644 --- a/examples/progressive-web-app/README.md +++ b/examples/progressive-web-app/README.md @@ -4,7 +4,7 @@ This example uses [`next-pwa`](https://github.com/shadowwalker/next-pwa) to crea ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/progressive-web-app) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/progressive-web-app&project-name=progressive-web-app&repository-name=progressive-web-app) diff --git a/examples/radix-ui/README.md b/examples/radix-ui/README.md index 6212bc6704964..32c4c4dcb8a23 100644 --- a/examples/radix-ui/README.md +++ b/examples/radix-ui/README.md @@ -4,7 +4,7 @@ This example showcases a few basic Radix UI components ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/radix-ui) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/radix-ui&project-name=radix-ui&repository-name=radix-ui) diff --git a/examples/with-algolia-react-instantsearch/README.md b/examples/with-algolia-react-instantsearch/README.md index d15f2c77ef80f..19469f2944432 100644 --- a/examples/with-algolia-react-instantsearch/README.md +++ b/examples/with-algolia-react-instantsearch/README.md @@ -4,7 +4,7 @@ The goal of this example is to illustrate how you can use [Algolia React Instant ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-algolia-react-instantsearch) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-algolia-react-instantsearch&project-name=with-algolia-react-instantsearch&repository-name=with-algolia-react-instantsearch) diff --git a/examples/with-apivideo/README.md b/examples/with-apivideo/README.md index 14253e1085d85..05c153c98aa4b 100644 --- a/examples/with-apivideo/README.md +++ b/examples/with-apivideo/README.md @@ -8,7 +8,7 @@ This video uploader and playback app is built with Next.js and api.video, the vi ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-apivideo) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-apivideo&project-name=with-apivideo&repository-name=with-apivideo) diff --git a/examples/with-apollo-and-redux/README.md b/examples/with-apollo-and-redux/README.md index 69b08f1ebd4de..23fc5abebca73 100644 --- a/examples/with-apollo-and-redux/README.md +++ b/examples/with-apollo-and-redux/README.md @@ -8,7 +8,7 @@ To inspect the GraphQL API, use its [web IDE](https://nextjs-graphql-with-prisma ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-apollo-and-redux) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-apollo-and-redux&project-name=with-apollo-and-redux&repository-name=with-apollo-and-redux) diff --git a/examples/with-apollo/README.md b/examples/with-apollo/README.md index 7508b6e12ba9c..5352bef8576c2 100644 --- a/examples/with-apollo/README.md +++ b/examples/with-apollo/README.md @@ -4,7 +4,7 @@ ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-apollo) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-apollo&project-name=with-apollo&repository-name=with-apollo) diff --git a/examples/with-azure-cosmos/README.md b/examples/with-azure-cosmos/README.md index 0f49ea5377887..eb40116edb71e 100644 --- a/examples/with-azure-cosmos/README.md +++ b/examples/with-azure-cosmos/README.md @@ -4,7 +4,7 @@ ## Deploy your own -Once you have access to the environment variables you'll need, deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to the environment variables you'll need, deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-azure-cosmos) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?project-name=with-azure-cosmos&repository-name=with-azure-cosmos&repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fnext.js%2Ftree%2Fcanary%2Fexamples%2Fwith-azure-cosmos&integration-ids=oac_mPA9PZCLjkhQGhlA5zntNs0L) diff --git a/examples/with-clerk/README.md b/examples/with-clerk/README.md index 7882cbd815043..767b2d3713191 100644 --- a/examples/with-clerk/README.md +++ b/examples/with-clerk/README.md @@ -8,7 +8,7 @@ A hosted demo of this example is available at [clerk-app-router.clerkpreview.com ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-clerk) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-clerk&integration-ids=oac_7uYNbc9CdDAZmNqbt3LEkO3a) diff --git a/examples/with-edgedb/README.md b/examples/with-edgedb/README.md index a901bda95af27..a2ce2fb5fe923 100644 --- a/examples/with-edgedb/README.md +++ b/examples/with-edgedb/README.md @@ -4,7 +4,7 @@ A simple blog application built with Next.js, TypeScript, [React](https://reactj ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-edgedb) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-edgedb&project-name=with-edgedb&repository-name=with-edgedb&env=EDGEDB_DSN) diff --git a/examples/with-elasticsearch/README.md b/examples/with-elasticsearch/README.md index 1492f41905ee6..8be7956886114 100644 --- a/examples/with-elasticsearch/README.md +++ b/examples/with-elasticsearch/README.md @@ -9,7 +9,7 @@ If you want to learn more about Elasticsearch, visit the following pages: ## Deploy your own -Once you have access to the environment variables you'll need, deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to the environment variables you'll need, deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-elasticsearch) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-elasticsearch&project-name=with-elasticsearch&repository-name=with-elasticsearch&env=ESS_CLOUD_ID,ESS_CLOUD_USERNAME,ESS_CLOUD_PASSWORD&envDescription=Required%20to%20connect%20the%20app%20with%Elasticsearch) diff --git a/examples/with-emotion/README.md b/examples/with-emotion/README.md index a253be53d1cff..34ab24350d58f 100644 --- a/examples/with-emotion/README.md +++ b/examples/with-emotion/README.md @@ -6,15 +6,9 @@ Extract and inline critical css with [@emotion/react](https://github.com/emotion-js/emotion/tree/master/packages/react), and [@emotion/styled](https://github.com/emotion-js/emotion/tree/master/packages/styled). -## Preview - -Preview the example live on [StackBlitz](http://stackblitz.com/): - -[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-emotion) - ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-emotion) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-emotion&project-name=with-emotion&repository-name=with-emotion) diff --git a/examples/with-facebook-pixel/README.md b/examples/with-facebook-pixel/README.md index 09fee5b3f4923..eac2225d28e9d 100644 --- a/examples/with-facebook-pixel/README.md +++ b/examples/with-facebook-pixel/README.md @@ -4,7 +4,7 @@ This example shows how to use Next.js along with Facebook Pixel. A custom [\_doc ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-facebook-pixel) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-facebook-pixel&project-name=with-facebook-pixel&repository-name=with-facebook-pixel) diff --git a/examples/with-fauna/README.md b/examples/with-fauna/README.md index a85a6b0aecbba..47e77b250d1a6 100644 --- a/examples/with-fauna/README.md +++ b/examples/with-fauna/README.md @@ -4,7 +4,7 @@ This Guestbook Application example shows you how to use [Fauna](https://docs.fau ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-fauna) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-fauna&project-name=fauna-nextjs-guestbook&repository-name=fauna-nextjs-guestbook&demo-title=Next.js%20Fauna%20Guestbook%20App&demo-description=A%20simple%20guestbook%20application%20built%20with%20Next.js%20and%20Fauna&integration-ids=oac_Erlbqm8Teb1y4WhioE3r2utY) diff --git a/examples/with-fingerprintjs-pro/README.md b/examples/with-fingerprintjs-pro/README.md index d223383ed5254..a52c556f691b4 100644 --- a/examples/with-fingerprintjs-pro/README.md +++ b/examples/with-fingerprintjs-pro/README.md @@ -4,7 +4,7 @@ This example shows how to identify visitors using [FingerprintJS Pro](https://fi ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-fingerprintjs-pro) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-fingerprintjs-pro&project-name=with-fingerprintjs-pro&repository-name=with-fingerprintjs-pro) diff --git a/examples/with-firebase/README.md b/examples/with-firebase/README.md index 02903754b72c2..4a9efb9dbd3d2 100644 --- a/examples/with-firebase/README.md +++ b/examples/with-firebase/README.md @@ -8,7 +8,7 @@ The React Context API is used to provide user state. ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-firebase) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-firebase&project-name=with-firebase&repository-name=with-firebase) diff --git a/examples/with-google-analytics/README.md b/examples/with-google-analytics/README.md index f5e507a140384..33b0e1792c4e5 100644 --- a/examples/with-google-analytics/README.md +++ b/examples/with-google-analytics/README.md @@ -6,7 +6,7 @@ If you are using the Pages Router, please refer to the [pages/ documentation.](h ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-google-analytics) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-google-analytics&project-name=with-google-analytics&repository-name=with-google-analytics) diff --git a/examples/with-google-maps-embed/README.md b/examples/with-google-maps-embed/README.md index 05e1599f008d4..d881e5ee53400 100644 --- a/examples/with-google-maps-embed/README.md +++ b/examples/with-google-maps-embed/README.md @@ -4,7 +4,7 @@ This example shows how to embed a Google Maps Embed using [`@next/third-parties` ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-google-maps-embed) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-google-maps-embed&project-name=with-google-maps-embed&repository-name=with-google-maps-embed) diff --git a/examples/with-google-tag-manager/README.md b/examples/with-google-tag-manager/README.md index f81975facdaf4..f7f74384a12cd 100644 --- a/examples/with-google-tag-manager/README.md +++ b/examples/with-google-tag-manager/README.md @@ -4,7 +4,7 @@ This example shows how to include Google Tag Manager in a Next.js application us ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-google-tag-manager) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-google-tag-manager&project-name=with-google-tag-manager&repository-name=with-google-tag-manager) diff --git a/examples/with-graphql-gateway/README.md b/examples/with-graphql-gateway/README.md index d1e98ed5e356a..c6400dd8ee8f1 100644 --- a/examples/with-graphql-gateway/README.md +++ b/examples/with-graphql-gateway/README.md @@ -42,7 +42,7 @@ More information on GraphQL Mesh configuration and concepts [are available in ou ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-graphql-gateway) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-graphql-gateway&project-name=with-graphql-gateway&repository-name=with-graphql-gateway&env=NEO4J_URI,NEO4J_USER,NEO4J_PASSWORD&envDescription=Required%20to%20connect%20the%20app%20with%20a%20Neo4j%20database&envLink=https://github.com/vercel/next.js/tree/canary/examples/with-graphql-gateway%23step-3-set-up-environment-variables) diff --git a/examples/with-graphql-hooks/README.md b/examples/with-graphql-hooks/README.md index 9400f8a239ed6..f2f2ddfdbc9e2 100644 --- a/examples/with-graphql-hooks/README.md +++ b/examples/with-graphql-hooks/README.md @@ -8,7 +8,7 @@ This started life as a copy of the `with-apollo` example. We then stripped out A ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-graphql-hooks) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-graphql-hooks&project-name=with-graphql-hooks&repository-name=with-graphql-hooks) diff --git a/examples/with-graphql-react/README.md b/examples/with-graphql-react/README.md index 8410cbfab5d7d..8ecb83b2da224 100644 --- a/examples/with-graphql-react/README.md +++ b/examples/with-graphql-react/README.md @@ -4,7 +4,7 @@ ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-graphql-react) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-graphql-react&project-name=with-graphql-react&repository-name=with-graphql-react) diff --git a/examples/with-joi/README.md b/examples/with-joi/README.md index 8bf661b21c62d..b4d3ecbf7a4ea 100644 --- a/examples/with-joi/README.md +++ b/examples/with-joi/README.md @@ -4,7 +4,7 @@ This example shows how to validate Next.js API routes by using the `joi` and `ne ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-joi) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-joi&project-name=with-joi&repository-name=with-joi) diff --git a/examples/with-knex/README.md b/examples/with-knex/README.md index 205f9c81b4bc2..31c586ec00297 100644 --- a/examples/with-knex/README.md +++ b/examples/with-knex/README.md @@ -4,7 +4,7 @@ ## Deploy your own -Once you have access to the environment variables you'll need, deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to the environment variables you'll need, deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-knex) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-knex&project-name=with-knex&repository-name=with-knex&env=PG_URI&envDescription=Required%20to%20connect%20the%20app%20with%20Postgres) diff --git a/examples/with-magic/README.md b/examples/with-magic/README.md index 29dc42afeb20f..853831b57e2b0 100644 --- a/examples/with-magic/README.md +++ b/examples/with-magic/README.md @@ -10,7 +10,7 @@ The login cookie is `httpOnly`, meaning it can only be accessed by the API, and ## Deploy your own -Once you have access to [the environment variables you'll need](#configuration), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#configuration), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-magic) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-magic&project-name=with-magic&repository-name=with-magic&env=NEXT_PUBLIC_MAGIC_PUBLISHABLE_KEY,MAGIC_SECRET_KEY,TOKEN_SECRET&envDescription=Required%20to%20connect%20the%20app%20with%20Magic&envLink=https://github.com/vercel/next.js/tree/canary/examples/with-magic%23configuration) diff --git a/examples/with-mantine/README.md b/examples/with-mantine/README.md index f4b8db01befc6..35f194aa2edfe 100644 --- a/examples/with-mantine/README.md +++ b/examples/with-mantine/README.md @@ -2,12 +2,6 @@ This example features how you use [mantine](https://github.com/mantine/mantine), a React component library. -## Preview - -Preview the example live on [StackBlitz](http://stackblitz.com/): - -[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-mantine) - ## Deploy your own Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-mantine) diff --git a/examples/with-meilisearch/README.md b/examples/with-meilisearch/README.md index ecf73f60f23c4..08029176fb55f 100644 --- a/examples/with-meilisearch/README.md +++ b/examples/with-meilisearch/README.md @@ -4,7 +4,7 @@ This starter configures Meilisearch and InstantSearch for a Next.js application. ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-mailisearch) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-meilisearch&project-name=with-meilisearch&repository-name=with-meilisearch&integration-ids=oac_VnRV92Cy6BoP96QY6Rkc5898) diff --git a/examples/with-mongodb-mongoose/README.md b/examples/with-mongodb-mongoose/README.md index 105b60ed40758..db65077c1f1e5 100644 --- a/examples/with-mongodb-mongoose/README.md +++ b/examples/with-mongodb-mongoose/README.md @@ -6,7 +6,7 @@ This example shows how you can use a MongoDB database to support your Next.js ap ## Deploy your own -Once you have access to [the environment variables you'll need](#step-2-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#step-2-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-mongodb-mongoose) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-mongodb-mongoose&project-name=with-mongodb-mongoose&repository-name=with-mongodb-mongoose&env=MONGODB_URI&envDescription=Required%20to%20connect%20the%20app%20with%20MongoDB&envLink=https://github.com/vercel/next.js/tree/canary/examples/with-mongodb-mongoose%23step-2-set-up-environment-variables) diff --git a/examples/with-mongodb/README.md b/examples/with-mongodb/README.md index 183ca9ab87b94..34731ac924a47 100644 --- a/examples/with-mongodb/README.md +++ b/examples/with-mongodb/README.md @@ -9,7 +9,7 @@ If you want to learn more about MongoDB, visit the following pages: ## Deploy your own -Once you have access to the environment variables you'll need, deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to the environment variables you'll need, deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-mongodb) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?project-name=with-mongodb&repository-name=with-mongodb&repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fnext.js%2Ftree%2Fcanary%2Fexamples%2Fwith-mongodb&integration-ids=oac_jnzmjqM10gllKmSrG0SGrHOH) diff --git a/examples/with-mqtt-js/README.md b/examples/with-mqtt-js/README.md index 95a8dd2cc81d1..3bd0485a64ba6 100644 --- a/examples/with-mqtt-js/README.md +++ b/examples/with-mqtt-js/README.md @@ -4,7 +4,7 @@ This example shows how to use [MQTT.js](https://github.com/mqttjs/MQTT.js) with ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-mqtt-js) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-mqtt-js&project-name=with-mqtt-js&repository-name=with-mqtt-js) diff --git a/examples/with-msw/README.md b/examples/with-msw/README.md index 8276517878d2f..d9c75c296b45d 100644 --- a/examples/with-msw/README.md +++ b/examples/with-msw/README.md @@ -28,7 +28,7 @@ More information on this setup step can be found in the MSW documentation [here] ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-msw) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-msw&project-name=with-msw&repository-name=with-msw) diff --git a/examples/with-mysql/README.md b/examples/with-mysql/README.md index 2e9c12f712374..958fa87b84115 100644 --- a/examples/with-mysql/README.md +++ b/examples/with-mysql/README.md @@ -127,7 +127,7 @@ pscale branch promote Now that your branch has been promoted to production, you can either use the existing password you generated earlier for running locally or create a new password. Regardless, you'll need a password in the deployment steps below. -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-mysql) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-mysql&project-name=with-mysql&repository-name=with-mysql&env=DATABASE_URL) diff --git a/examples/with-neo4j/README.md b/examples/with-neo4j/README.md index eec27358ee7c9..461f10944a61e 100644 --- a/examples/with-neo4j/README.md +++ b/examples/with-neo4j/README.md @@ -4,7 +4,7 @@ This is a simple set up for Next using Neo4j Database with api routes. Neo4j's M ## Deploy your own -Once you have access to [the environment variables you'll need](#step-3-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#step-3-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-neo4j) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-neo4j&project-name=with-neo4j&repository-name=with-neo4j&env=NEO4J_URI,NEO4J_USER,NEO4J_PASSWORD&envDescription=Required%20to%20connect%20the%20app%20with%20a%20Neo4j%20database&envLink=https://github.com/vercel/next.js/tree/canary/examples/with-neo4j%23step-3-set-up-environment-variables) diff --git a/examples/with-next-ui/README.md b/examples/with-next-ui/README.md index 5a0729f404328..e8e8009348137 100755 --- a/examples/with-next-ui/README.md +++ b/examples/with-next-ui/README.md @@ -4,7 +4,7 @@ This example shows how to use Next.js along with [NextUI](https://nextui.org/) o ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-next-ui) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-next-ui) diff --git a/examples/with-nhost-auth-realtime-graphql/README.md b/examples/with-nhost-auth-realtime-graphql/README.md index f6f00c0d62395..095421e06e228 100644 --- a/examples/with-nhost-auth-realtime-graphql/README.md +++ b/examples/with-nhost-auth-realtime-graphql/README.md @@ -8,7 +8,7 @@ This example showcases Next.js as the frontend using [Nhost](https://nhost.io/) ## Deploy Your Own -Once you have created a Nhost project and have access to [the environment variables you'll need](#step-4-add-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have created a Nhost project and have access to [the environment variables you'll need](#step-4-add-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-nhost-auth-realtime-graphql) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-nhost-auth-realtime-graphql&project-name=with-nhost-auth-realtime-graphql&repository-name=with-nhost-auth-realtime-graphql&env=NEXT_PUBLIC_GRAPHQL_URL,NEXT_PUBLIC_BACKEND_URL&envDescription=Enter%20your%20Nhost%20project%27s%20URLs) diff --git a/examples/with-passport-and-next-connect/README.md b/examples/with-passport-and-next-connect/README.md index ba2f2b1e2534a..700c2ca03558b 100644 --- a/examples/with-passport-and-next-connect/README.md +++ b/examples/with-passport-and-next-connect/README.md @@ -8,7 +8,7 @@ For demo purposes, the users database is stored in the cookie session. You need ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-passport-and-next-connect) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-passport-and-next-connect&project-name=with-passport-and-next-connect&repository-name=with-passport-and-next-connect) diff --git a/examples/with-passport/README.md b/examples/with-passport/README.md index 58799c0b46cb4..8817850090bd1 100644 --- a/examples/with-passport/README.md +++ b/examples/with-passport/README.md @@ -10,7 +10,7 @@ The login cookie is httpOnly, meaning it can only be accessed by the API, and it ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-passport) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-passport&project-name=with-passport&repository-name=with-passport) diff --git a/examples/with-react-ga4/README.md b/examples/with-react-ga4/README.md index a7155c5abb8e7..5c873b6ddead3 100644 --- a/examples/with-react-ga4/README.md +++ b/examples/with-react-ga4/README.md @@ -7,7 +7,7 @@ component with Next.js. Modify `Tracking ID` in `utils/analytics.js` file for te ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-react-ga4) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-react-ga&project-name=with-react-ga&repository-name=with-react-ga) diff --git a/examples/with-realm-web/README.md b/examples/with-realm-web/README.md index 7ad9b6bfcd0fa..c0f0e68a61ea4 100644 --- a/examples/with-realm-web/README.md +++ b/examples/with-realm-web/README.md @@ -6,7 +6,7 @@ This example relies on [MongoDB Realm](https://www.mongodb.com/realm) for its Gr ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-realm-web) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-realm-web&project-name=with-realm-web&repository-name=with-realm-web) diff --git a/examples/with-redux/README.md b/examples/with-redux/README.md index 4e9f353b67b04..934a26d72ba06 100644 --- a/examples/with-redux/README.md +++ b/examples/with-redux/README.md @@ -6,7 +6,7 @@ This example shows how to integrate Next.js with [Redux Toolkit](https://redux-t ## Deploy Your Own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-redux) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-redux&project-name=with-redux&repository-name=with-redux) diff --git a/examples/with-relay-modern/README.md b/examples/with-relay-modern/README.md index 17af683d3b161..2a030538bd790 100644 --- a/examples/with-relay-modern/README.md +++ b/examples/with-relay-modern/README.md @@ -6,7 +6,7 @@ This example relies on [Prisma + Nexus](https://github.com/prisma-labs/nextjs-gr ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-relay-modern) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-relay-modern&project-name=with-relay-modern&repository-name=with-relay-modern) diff --git a/examples/with-sentry/README.md b/examples/with-sentry/README.md index 78d1c307ad626..fdea0b59696db 100644 --- a/examples/with-sentry/README.md +++ b/examples/with-sentry/README.md @@ -6,19 +6,13 @@ This is an example showing how to use [Sentry](https://sentry.io) to catch and r - `next.config.js` automatically injects Sentry into your app using `withSentryConfig` - `_error.js` (which is rendered by Next.js when handling certain types of exceptions) is overridden so those exceptions can be passed along to Sentry -## Preview - -Preview the example live on [StackBlitz](http://stackblitz.com/): - -[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-sentry) - ## Deploy your own It only takes a few steps to create and deploy your own version of this example app. Before you begin, make sure you have [linked your Vercel account to GitHub](https://vercel.com/docs/teams-and-accounts#existing-login-connection), and [set up a project in Sentry](https://docs.sentry.io/product/sentry-basics/guides/integrate-frontend/create-new-project/). ### Option 1: Deploy directly to Vercel -You can deploy a copy of this project directly to [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example). +You can deploy a copy of this project directly to [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-sentry). [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-sentry&project-name=nextjs-sentry-example&repository-name=nextjs-sentry-example&integration-ids=oac_5lUsiANun1DEzgLg0NZx5Es3) diff --git a/examples/with-service-worker/README.md b/examples/with-service-worker/README.md index 1080c6ea6c771..2e99a1698f177 100644 --- a/examples/with-service-worker/README.md +++ b/examples/with-service-worker/README.md @@ -6,7 +6,7 @@ The example is based on the following blog post: [Adding a service worker into y ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-service-worker) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-service-worker&project-name=with-service-worker&repository-name=with-service-worker) diff --git a/examples/with-stencil/README.md b/examples/with-stencil/README.md index 011f4b7fdcf67..beb940e3a03a5 100644 --- a/examples/with-stencil/README.md +++ b/examples/with-stencil/README.md @@ -2,7 +2,7 @@ ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-stencil) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-stencil&project-name=with-stencil&repository-name=with-stencil) diff --git a/examples/with-stripe-typescript/README.md b/examples/with-stripe-typescript/README.md index 19807d7fac4b5..c2b1f0c88e2c4 100644 --- a/examples/with-stripe-typescript/README.md +++ b/examples/with-stripe-typescript/README.md @@ -30,7 +30,7 @@ Use the `4000002760003184` test card number to trigger a 3D Secure challenge flo ## Deploy your own -Once you have access to [the environment variables you'll need](#required-configuration) from the [Stripe Dashboard](https://dashboard.stripe.com/apikeys), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#required-configuration) from the [Stripe Dashboard](https://dashboard.stripe.com/apikeys), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-stripe-typescript) [![Deploy to Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-stripe-typescript&project-name=with-stripe-typescript&repository-name=with-stripe-typescript&env=NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY,STRIPE_SECRET_KEY&envDescription=Enter%20your%20Stripe%20Keys&envLink=https://github.com/vercel/next.js/tree/canary/examples/with-stripe-typescript%23required-configuration) diff --git a/examples/with-unsplash/README.md b/examples/with-unsplash/README.md index 6f99b3cb9274a..f89e9c95fc49e 100644 --- a/examples/with-unsplash/README.md +++ b/examples/with-unsplash/README.md @@ -4,7 +4,7 @@ This is an example of how [Unsplash](https://unsplash.com/) can be used with `Ne ## Deploy your own -Once you have access to [the environment variables you'll need](#step-2-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#step-2-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-unsplash) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-unsplash&project-name=with-unsplash&repository-name=with-unsplash&env=UNSPLASH_ACCESS_KEY,UNSPLASH_USER&envDescription=Required%20to%20connect%20the%20app%20with%20Unsplash&envLink=https://github.com/vercel/next.js/tree/canary/examples/with-unsplash%23step-2-set-up-environment-variables) diff --git a/examples/with-userbase/README.md b/examples/with-userbase/README.md index 7802ee9c9c38a..c197bb2087df5 100644 --- a/examples/with-userbase/README.md +++ b/examples/with-userbase/README.md @@ -6,7 +6,7 @@ Deployed Demo: [https://next-userbase.vercel.app](https://next-userbase.vercel.a ## Deploy your own -Once you have access to [the environment variables you'll need](#step-2-setting-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Once you have access to [the environment variables you'll need](#step-2-setting-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-userbase) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-userbase&project-name=with-userbase&repository-name=with-userbase&env=NEXT_PUBLIC_USERBASE_APP_ID&envDescription=The%20Userbase%20app%20ID,%20found%20in%20the%20Userbase%20dashboard&envLink=https://v1.userbase.com/) diff --git a/examples/with-vanilla-extract/README.md b/examples/with-vanilla-extract/README.md index c81541245ce2d..a093512fece1e 100644 --- a/examples/with-vanilla-extract/README.md +++ b/examples/with-vanilla-extract/README.md @@ -4,7 +4,7 @@ This example demonstrates usage of [Vanilla Extract](https://vanilla-extract.sty ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-vanilla-extract) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-vanilla-extract&project-name=with-vanilla-extract&repository-name=with-vanilla-extract) diff --git a/examples/with-webassembly/README.md b/examples/with-webassembly/README.md index e846c711927e0..a4bd48565e0a7 100644 --- a/examples/with-webassembly/README.md +++ b/examples/with-webassembly/README.md @@ -2,11 +2,11 @@ This example shows how to import WebAssembly files (`.wasm`) and use them inside of a React component that is server rendered. So the WebAssembly code is executed on the server too. In the case of this example we're showing Rust compiled to WebAssembly. -## Preview +## Deploy your own -Preview the example live on [StackBlitz](http://stackblitz.com/): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-webassembly) -[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-webassembly) +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-emotion&project-name=with-emotion&repository-name=with-emotion) ## How to use diff --git a/examples/with-youtube-embed/README.md b/examples/with-youtube-embed/README.md index 7cf2c2e88eae2..6e717e70148c7 100644 --- a/examples/with-youtube-embed/README.md +++ b/examples/with-youtube-embed/README.md @@ -4,7 +4,7 @@ This example shows how to embed a YouTube Embed using [`@next/third-parties`](ht ## Deploy your own -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-youtube-embed) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-youtube-embed&project-name=with-youtube-embed&repository-name=with-youtube-embed) diff --git a/examples/with-zones/README.md b/examples/with-zones/README.md index 2573dfb084409..c6b5222d49551 100644 --- a/examples/with-zones/README.md +++ b/examples/with-zones/README.md @@ -63,17 +63,13 @@ pnpm install && pnpm dev The `blog` app should be up and running in [http://localhost:4000/blog](http://localhost:4000/blog)! -## Preview +## Deploy your own -Preview the example live on [StackBlitz](http://stackblitz.com/): +Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-zones) -[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-zones) +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-youtube-embed&project-name=with-youtube-embed&repository-name=with-youtube-embed) -### Deploy on Vercel - -You can deploy this app to the cloud with [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) ([Documentation](https://nextjs.org/docs/deployment)). - -#### Deploy Your Local Project +### Deploy Your Local Project To deploy the apps to Vercel, we'll use [monorepos support](https://vercel.com/blog/monorepos) to create a new project for each app. From 6aafef389b567a384ab3688cdc0132904daadaee Mon Sep 17 00:00:00 2001 From: Jam Balaya Date: Tue, 14 Jan 2025 14:38:46 +0900 Subject: [PATCH 27/65] examples: improve DX while copying command to create new project (#73463) ## Description Follow up #38410. Some examples remain the multiple commands in a single block, and we couldn't use copy button to select one line. With this change users would be able to copy the command (using their choice package manager) with a single click using the github copy feature. CC: @samcx ### Adding or Updating Examples - [x] The "examples guidelines" are followed from our contributing doc https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md - [x] Make sure the linting passes by running `pnpm build && pnpm lint`. See https://github.com/vercel/next.js/blob/canary/contributing/repository/linting.md --- examples/blog/README.md | 8 ++++++-- examples/cms-dotcms/README.md | 8 ++++++-- examples/cms-enterspeed/README.md | 8 ++++++-- examples/cms-makeswift/README.md | 8 ++++++-- examples/cms-umbraco/README.md | 8 ++++++-- examples/convex/README.md | 8 ++++++-- examples/custom-server/README.md | 8 ++++++-- examples/image-component/README.md | 8 ++++++-- examples/image-legacy-component/README.md | 8 ++++++-- examples/progressive-web-app/README.md | 8 ++++++-- examples/with-axiom/README.md | 8 ++++++-- examples/with-contentlayer/README.md | 8 +++++++- examples/with-cookies-next/README.md | 10 ++++++++-- examples/with-docker-multi-env/README.md | 8 ++++++-- examples/with-docker/README.md | 8 ++++++-- examples/with-mysql/README.md | 8 ++++++-- examples/with-next-seo/README.md | 8 ++++++-- examples/with-next-ui/README.md | 8 ++++++-- .../with-nhost-auth-realtime-graphql/README.md | 8 ++++++-- examples/with-particles/README.md | 8 ++++++-- examples/with-redis/README.md | 8 ++++++-- examples/with-sentry/README.md | 8 ++++++-- examples/with-sfcc/README.md | 2 +- examples/with-supabase/README.md | 12 ++++++++++-- examples/with-temporal/README.md | 8 ++++++-- examples/with-userbase/README.md | 8 ++++++-- examples/with-windicss/README.md | 14 +++++++++----- 27 files changed, 167 insertions(+), 55 deletions(-) diff --git a/examples/blog/README.md b/examples/blog/README.md index 635589d86bdb5..7aea6fe99e512 100644 --- a/examples/blog/README.md +++ b/examples/blog/README.md @@ -29,9 +29,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example blog my-blog -# or +``` + +```bash yarn create next-app --example blog my-blog -# or +``` + +```bash pnpm create next-app --example blog my-blog ``` diff --git a/examples/cms-dotcms/README.md b/examples/cms-dotcms/README.md index ece74b28a5010..35adc3b7b457a 100644 --- a/examples/cms-dotcms/README.md +++ b/examples/cms-dotcms/README.md @@ -60,9 +60,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example cms-dotcms cms-dotcms-app -# or +``` + +```bash yarn create next-app --example cms-dotcms cms-dotcms-app -# or +``` + +```bash pnpm create next-app --example cms-dotcms cms-dotcms-app ``` diff --git a/examples/cms-enterspeed/README.md b/examples/cms-enterspeed/README.md index cf76e4a14aa4d..e245f4b145cdd 100644 --- a/examples/cms-enterspeed/README.md +++ b/examples/cms-enterspeed/README.md @@ -49,9 +49,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example cms-enterspeed enterspeed-app -# or +``` + +```bash yarn create next-app --example cms-enterspeed enterspeed-app -# or +``` + +```bash pnpm create next-app -- --example cms-enterspeed enterspeed-app ``` diff --git a/examples/cms-makeswift/README.md b/examples/cms-makeswift/README.md index 1ad5c2c5dc4c7..33fa484c7c3da 100644 --- a/examples/cms-makeswift/README.md +++ b/examples/cms-makeswift/README.md @@ -51,9 +51,13 @@ Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_mediu ```bash npx create-next-app --example cms-makeswift cms-makeswift-app - # or + ``` + + ```bash yarn create next-app --example cms-makeswift cms-makeswift-app - # or + ``` + + ```bash pnpm create next-app --example cms-makeswift cms-makeswift-app ``` diff --git a/examples/cms-umbraco/README.md b/examples/cms-umbraco/README.md index 12d49423bdc23..8634f7fc24023 100644 --- a/examples/cms-umbraco/README.md +++ b/examples/cms-umbraco/README.md @@ -43,9 +43,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example cms-umbraco umbraco-app -# or +``` + +```bash yarn create next-app --example cms-umbraco umbraco-app -# or +``` + +```bash pnpm create next-app --example cms-umbraco umbraco-app ``` diff --git a/examples/convex/README.md b/examples/convex/README.md index 8bdc63a6c8432..c3db11a834473 100644 --- a/examples/convex/README.md +++ b/examples/convex/README.md @@ -14,9 +14,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example convex convex-app -# or +``` + +```bash yarn create next-app --example convex convex-app -# or +``` + +```bash pnpm create next-app --example convex convex-app ``` diff --git a/examples/custom-server/README.md b/examples/custom-server/README.md index e19010a8fe1b3..39a9d8817ded1 100644 --- a/examples/custom-server/README.md +++ b/examples/custom-server/README.md @@ -17,8 +17,12 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example custom-server custom-server-app -# or +``` + +```bash yarn create next-app --example custom-server custom-server-app -# or +``` + +```bash pnpm create next-app --example custom-server custom-server-app ``` diff --git a/examples/image-component/README.md b/examples/image-component/README.md index ac72eab8eb885..3b84d5000bcf6 100644 --- a/examples/image-component/README.md +++ b/examples/image-component/README.md @@ -20,9 +20,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example image-component image-app -# or +``` + +```bash yarn create next-app --example image-component image-app -# or +``` + +```bash pnpm create next-app --example image-component image-app ``` diff --git a/examples/image-legacy-component/README.md b/examples/image-legacy-component/README.md index 95bb6101bb04f..5841cec301ce3 100644 --- a/examples/image-legacy-component/README.md +++ b/examples/image-legacy-component/README.md @@ -20,9 +20,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example image-legacy-component image-app -# or +``` + +```bash yarn create next-app --example image-legacy-component image-app -# or +``` + +```bash pnpm create next-app --example image-legacy-component image-app ``` diff --git a/examples/progressive-web-app/README.md b/examples/progressive-web-app/README.md index 7be960415920c..26f94f21e0b00 100644 --- a/examples/progressive-web-app/README.md +++ b/examples/progressive-web-app/README.md @@ -14,9 +14,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example progressive-web-app progressive-web-app -# or +``` + +```bash yarn create next-app --example progressive-web-app progressive-web-app -# or +``` + +```bash pnpm create next-app --example progressive-web-app progressive-web-app ``` diff --git a/examples/with-axiom/README.md b/examples/with-axiom/README.md index ca9e6f31874ab..530ccb6c8045b 100644 --- a/examples/with-axiom/README.md +++ b/examples/with-axiom/README.md @@ -16,9 +16,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example with-axiom with-axiom-app -# or +``` + +```bash yarn create next-app --example with-axiom with-axiom-app -# or +``` + +```bash pnpm create next-app --example with-axiom with-axiom-app ``` diff --git a/examples/with-contentlayer/README.md b/examples/with-contentlayer/README.md index a842253181b8f..48f5ad46b0996 100644 --- a/examples/with-contentlayer/README.md +++ b/examples/with-contentlayer/README.md @@ -14,8 +14,14 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example with-contentlayer with-contentlayer-app -# or +``` + +```bash yarn create next-app --example with-contentlayer with-contentlayer-app ``` +```bash +pnpm create next-app --example with-contentlayer with-contentlayer-app +``` + Deploy it to the cloud with [Vercel](https://vercel.com/new?utm_source=github&utm_medium=readme&utm_campaign=next-example) ([Documentation](https://nextjs.org/docs/deployment)). diff --git a/examples/with-cookies-next/README.md b/examples/with-cookies-next/README.md index c7396aca34e2f..1e9da50e6be92 100644 --- a/examples/with-cookies-next/README.md +++ b/examples/with-cookies-next/README.md @@ -16,12 +16,18 @@ Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_mediu ## How to use -Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app) with [npm](https://docs.npmjs.com/cli/init) or [Yarn](https://yarnpkg.com/lang/en/docs/cli/create/) to bootstrap the example: +Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app) with [npm](https://docs.npmjs.com/cli/init), [Yarn](https://yarnpkg.com/lang/en/docs/cli/create/), or [pnpm](https://pnpm.io) to bootstrap the example: ```bash npx create-next-app --example with-cookies-next with-cookies-next-app -# or +``` + +```bash yarn create next-app --example with-cookies-next with-cookies-next-app ``` +```bash +pnpm create next-app --example with-cookies-next with-cookies-next-app +``` + Deploy it to the cloud with [Vercel](https://vercel.com/new?utm_source=github&utm_medium=readme&utm_campaign=next-example) ([Documentation](https://nextjs.org/docs/deployment)). diff --git a/examples/with-docker-multi-env/README.md b/examples/with-docker-multi-env/README.md index c4cb587b0ada6..7daad7ab4840c 100644 --- a/examples/with-docker-multi-env/README.md +++ b/examples/with-docker-multi-env/README.md @@ -8,9 +8,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example with-docker-multi-env nextjs-docker-multi-env -# or +``` + +```bash yarn create next-app --example with-docker-multi-env nextjs-docker-multi-env -# or +``` + +```bash pnpm create next-app --example with-docker-multi-env nextjs-docker-multi-env ``` diff --git a/examples/with-docker/README.md b/examples/with-docker/README.md index 1906eccc59661..d61fc6b2dc190 100644 --- a/examples/with-docker/README.md +++ b/examples/with-docker/README.md @@ -8,9 +8,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example with-docker nextjs-docker -# or +``` + +```bash yarn create next-app --example with-docker nextjs-docker -# or +``` + +```bash pnpm create next-app --example with-docker nextjs-docker ``` diff --git a/examples/with-mysql/README.md b/examples/with-mysql/README.md index 958fa87b84115..83c43fcd42635 100644 --- a/examples/with-mysql/README.md +++ b/examples/with-mysql/README.md @@ -32,9 +32,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example with-mysql nextjs-mysql -# or +``` + +```bash yarn create next-app --example with-mysql nextjs-mysql -# or +``` + +```bash pnpm create next-app --example with-mysql nextjs-mysql ``` diff --git a/examples/with-next-seo/README.md b/examples/with-next-seo/README.md index 233adc3b33470..aafc43633e24f 100644 --- a/examples/with-next-seo/README.md +++ b/examples/with-next-seo/README.md @@ -14,9 +14,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example with-next-seo next-seo-app -# or +``` + +```bash yarn create next-app --example with-next-seo next-seo-app -# or +``` + +```bash pnpm create next-app --example with-next-seo next-seo-app ``` diff --git a/examples/with-next-ui/README.md b/examples/with-next-ui/README.md index e8e8009348137..b4f9669d589b9 100755 --- a/examples/with-next-ui/README.md +++ b/examples/with-next-ui/README.md @@ -14,9 +14,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example with-next-ui with-next-ui-app -# or +``` + +```bash yarn create next-app --example with-next-ui with-next-ui-app -# or +``` + +```bash pnpm create next-app --example with-next-ui with-next-ui-app ``` diff --git a/examples/with-nhost-auth-realtime-graphql/README.md b/examples/with-nhost-auth-realtime-graphql/README.md index 095421e06e228..3c5d42ef77b29 100644 --- a/examples/with-nhost-auth-realtime-graphql/README.md +++ b/examples/with-nhost-auth-realtime-graphql/README.md @@ -18,9 +18,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example with-nhost-auth-realtime-graphql nhost-app -# or +``` + +```bash yarn create next-app --example with-nhost-auth-realtime-graphql nhost-app -# or +``` + +```bash pnpm create next-app --example with-nhost-auth-realtime-graphql nhost-app ``` diff --git a/examples/with-particles/README.md b/examples/with-particles/README.md index 7fb0f432aa58e..fa4a3752a0cf3 100644 --- a/examples/with-particles/README.md +++ b/examples/with-particles/README.md @@ -16,9 +16,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example with-particles with-particles-app -# or +``` + +```bash yarn create next-app --example with-particles with-particles-app -# or +``` + +```bash pnpm create next-app -- --example with-particles with-particles-app ``` diff --git a/examples/with-redis/README.md b/examples/with-redis/README.md index bd5b7c3c8acf5..d9edb8dce6dd8 100644 --- a/examples/with-redis/README.md +++ b/examples/with-redis/README.md @@ -23,9 +23,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example with-redis roadmap -# or +``` + +```bash yarn create next-app --example with-redis roadmap -# or +``` + +```bash pnpm create next-app --example with-redis roadmap ``` diff --git a/examples/with-sentry/README.md b/examples/with-sentry/README.md index fdea0b59696db..9b3436e766746 100644 --- a/examples/with-sentry/README.md +++ b/examples/with-sentry/README.md @@ -28,9 +28,13 @@ To begin, execute [`create-next-app`](https://github.com/vercel/next.js/tree/can ```bash npx create-next-app --example with-sentry nextjs-sentry-example -# or +``` + +```bash yarn create next-app --example with-sentry nextjs-sentry-example -# or +``` + +```bash pnpm create next-app --example with-sentry nextjs-sentry-example ``` diff --git a/examples/with-sfcc/README.md b/examples/with-sfcc/README.md index 41f9b6df18902..df39929a16fb1 100644 --- a/examples/with-sfcc/README.md +++ b/examples/with-sfcc/README.md @@ -15,7 +15,7 @@ Check out our [Next.js deployment documentation](https://nextjs.org/docs/deploym Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app) with [npm](https://docs.npmjs.com/cli/init), [Yarn](https://yarnpkg.com/lang/en/docs/cli/create/), or [pnpm](https://pnpm.io) to bootstrap the example: ```bash - npx create-next-app --example with-sfcc nextjs-sfcc-app +npx create-next-app --example with-sfcc nextjs-sfcc-app ``` ```bash diff --git a/examples/with-supabase/README.md b/examples/with-supabase/README.md index 53c555a6ed94e..bb6a4ed6aec27 100644 --- a/examples/with-supabase/README.md +++ b/examples/with-supabase/README.md @@ -55,13 +55,21 @@ If you wish to just develop locally and not deploy to Vercel, [follow the steps 2. Create a Next.js app using the Supabase Starter template npx command ```bash - npx create-next-app -e with-supabase + npx create-next-app --example with-supabase with-supabase-app + ``` + + ```bash + yarn create next-app --example with-supabase with-supabase-app + ``` + + ```bash + pnpm create next-app --example with-supabase with-supabase-app ``` 3. Use `cd` to change into the app's directory ```bash - cd name-of-new-app + cd with-supabase-app ``` 4. Rename `.env.example` to `.env.local` and update the following: diff --git a/examples/with-temporal/README.md b/examples/with-temporal/README.md index dc5cab1c5d0cc..30d4e685d09d5 100644 --- a/examples/with-temporal/README.md +++ b/examples/with-temporal/README.md @@ -58,9 +58,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example with-temporal next-temporal-app -# or +``` + +```bash yarn create next-app --example with-temporal next-temporal-app -# or +``` + +```bash pnpm create next-app --example with-temporal next-temporal-app ``` diff --git a/examples/with-userbase/README.md b/examples/with-userbase/README.md index c197bb2087df5..1625720dcf1d5 100644 --- a/examples/with-userbase/README.md +++ b/examples/with-userbase/README.md @@ -16,9 +16,13 @@ Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packag ```bash npx create-next-app --example with-userbase next-userbase-app -# or +``` + +```bash yarn create next-app --example with-userbase next-userbase-app -# or +``` + +```bash pnpm create next-app --example with-userbase next-userbase-app ``` diff --git a/examples/with-windicss/README.md b/examples/with-windicss/README.md index 4abe83a8069b2..e7de1fa68e91b 100644 --- a/examples/with-windicss/README.md +++ b/examples/with-windicss/README.md @@ -13,11 +13,15 @@ Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_mediu Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app) with [npm](https://docs.npmjs.com/cli/init) or [Yarn](https://yarnpkg.com/lang/en/docs/cli/create/) to bootstrap the example: ```bash -npx create-next-app --example with-windicss -# or -yarn create next-app --example with-windicss -# or -pnpm create next-app --example with-windicss +npx create-next-app --example with-windicss with-windicss-app +``` + +```bash +yarn create next-app --example with-windicss with-windicss-app +``` + +```bash +pnpm create next-app --example with-windicss with-windicss-app ``` Deploy it to the cloud with [Vercel](https://vercel.com/new?utm_source=github&utm_medium=readme&utm_campaign=next-example) ([Documentation](https://nextjs.org/docs/deployment)). From 58255f9a642c2d605f636e3f8a90fd32d5651810 Mon Sep 17 00:00:00 2001 From: Jam Balaya Date: Tue, 14 Jan 2025 14:49:26 +0900 Subject: [PATCH 28/65] examples: fix `with-zones` repository name in the deploy link (#74852) ## Summary At #73546, I missed the deploy link of [`with-zones` example README.md](https://github.com/vercel/next.js/blob/canary/examples/with-zones/README.md). This PR fix it. CC: @samcx ### Adding or Updating Examples - [x] The "examples guidelines" are followed from our contributing doc https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md - [x] Make sure the linting passes by running `pnpm build && pnpm lint`. See https://github.com/vercel/next.js/blob/canary/contributing/repository/linting.md --- examples/with-zones/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/with-zones/README.md b/examples/with-zones/README.md index c6b5222d49551..1b2d9cd22e7ea 100644 --- a/examples/with-zones/README.md +++ b/examples/with-zones/README.md @@ -67,7 +67,7 @@ The `blog` app should be up and running in [http://localhost:4000/blog](http://l Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) or preview live with [StackBlitz](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/with-zones) -[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-youtube-embed&project-name=with-youtube-embed&repository-name=with-youtube-embed) +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-zones&project-name=with-zones&repository-name=with-zones) ### Deploy Your Local Project From 6cc85deaeac30ac916e0f310d05d99923d85a1eb Mon Sep 17 00:00:00 2001 From: Hendrik Liebau Date: Tue, 14 Jan 2025 10:27:04 +0100 Subject: [PATCH 29/65] Add partial support for `"use cache"` in metadata route handlers (#74835) Adds support for using `"use cache"` in the special metadata route handlers like [`sitemap.ts`](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/sitemap#generating-a-sitemap-using-code-js-ts), [`opengraph-image.tsx`](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/opengraph-image#generate-images-using-code-js-ts-tsx), [`icon.tsx`](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/app-icons#generate-icons-using-code-js-ts-tsx), and other [metadata files](https://nextjs.org/docs/app/api-reference/file-conventions/metadata). reverts #71225 fixes #74146 closes NAR-51 As a follow-up we need to ensure that opengraph image responses do not bail out of static generation when `dynamicIO` is enabled. --- crates/next-api/src/app.rs | 591 ++++++++---------- packages/next/src/build/webpack-config.ts | 11 + .../plugins/flight-client-entry-plugin.ts | 33 +- .../webpack/plugins/flight-manifest-plugin.ts | 7 +- .../plugins/next-trace-entrypoints-plugin.ts | 22 +- packages/next/src/build/webpack/utils.ts | 7 +- packages/next/src/server/load-components.ts | 6 +- .../app/icon.tsx | 38 ++ .../app/manifest.ts | 12 + .../app/opengraph-image.tsx | 38 ++ .../app/products/sitemap.ts | 20 + .../app/robots.ts | 14 + .../app/sentinel.ts | 7 + .../app/sitemap.ts | 12 + .../next.config.js | 10 + .../use-cache-metadata-route-handler.test.ts | 134 ++++ 16 files changed, 610 insertions(+), 352 deletions(-) create mode 100644 test/e2e/app-dir/use-cache-metadata-route-handler/app/icon.tsx create mode 100644 test/e2e/app-dir/use-cache-metadata-route-handler/app/manifest.ts create mode 100644 test/e2e/app-dir/use-cache-metadata-route-handler/app/opengraph-image.tsx create mode 100644 test/e2e/app-dir/use-cache-metadata-route-handler/app/products/sitemap.ts create mode 100644 test/e2e/app-dir/use-cache-metadata-route-handler/app/robots.ts create mode 100644 test/e2e/app-dir/use-cache-metadata-route-handler/app/sentinel.ts create mode 100644 test/e2e/app-dir/use-cache-metadata-route-handler/app/sitemap.ts create mode 100644 test/e2e/app-dir/use-cache-metadata-route-handler/next.config.js create mode 100644 test/e2e/app-dir/use-cache-metadata-route-handler/use-cache-metadata-route-handler.test.ts diff --git a/crates/next-api/src/app.rs b/crates/next-api/src/app.rs index 6227e55a1a545..5d4ad2780d893 100644 --- a/crates/next-api/src/app.rs +++ b/crates/next-api/src/app.rs @@ -67,9 +67,7 @@ use turbopack_core::{ use turbopack_ecmascript::resolve::cjs_resolve; use crate::{ - dynamic_imports::{ - collect_next_dynamic_chunks, DynamicImportedChunks, NextDynamicChunkAvailability, - }, + dynamic_imports::{collect_next_dynamic_chunks, NextDynamicChunkAvailability}, font::create_font_manifest, loadable_manifest::create_react_loadable_manifest, module_graph::get_reduced_graphs_for_endpoint, @@ -917,17 +915,15 @@ impl AppEndpoint { let app_entry = self.app_endpoint_entry().await?; - let (process_client_components, process_client_assets, process_ssr, emit_manifests) = - match this.ty { - AppEndpointType::Page { ty, .. } => ( - true, - true, - matches!(ty, AppPageEndpointType::Html), - matches!(ty, AppPageEndpointType::Html), - ), - AppEndpointType::Route { .. } => (true, false, false, true), - AppEndpointType::Metadata { .. } => (false, false, false, true), - }; + let (process_client_assets, process_ssr, emit_manifests) = match this.ty { + AppEndpointType::Page { ty, .. } => ( + true, + matches!(ty, AppPageEndpointType::Html), + matches!(ty, AppPageEndpointType::Html), + ), + AppEndpointType::Route { .. } => (false, false, true), + AppEndpointType::Metadata { .. } => (false, false, true), + }; let node_root = this.app_project.project().node_root(); @@ -960,223 +956,197 @@ impl AppEndpoint { None }; - let (next_dynamic_imports, client_references, client_references_chunks) = - if process_client_components { - let client_shared_chunk_group = get_app_client_shared_chunk_group( - AssetIdent::from_path(this.app_project.project().project_path()) - .with_modifier(client_shared_chunks_modifier()), - this.app_project.client_runtime_entries(), - client_chunking_context, - ) - .await?; - - let mut client_shared_chunks = vec![]; - for chunk in client_shared_chunk_group.assets.await?.iter().copied() { - client_assets.insert(chunk); + let client_shared_chunk_group = get_app_client_shared_chunk_group( + AssetIdent::from_path(this.app_project.project().project_path()) + .with_modifier(client_shared_chunks_modifier()), + this.app_project.client_runtime_entries(), + client_chunking_context, + ) + .await?; - let chunk_path = chunk.ident().path().await?; - if chunk_path.extension_ref() == Some("js") { - client_shared_chunks.push(chunk); - } - } - let client_shared_availability_info = client_shared_chunk_group.availability_info; + let mut client_shared_chunks = vec![]; + for chunk in client_shared_chunk_group.assets.await?.iter().copied() { + client_assets.insert(chunk); - let reduced_graphs = - get_reduced_graphs_for_endpoint(this.app_project.project(), *rsc_entry); - let next_dynamic_imports = reduced_graphs - .get_next_dynamic_imports_for_endpoint(*rsc_entry) - .await?; + let chunk_path = chunk.ident().path().await?; + if chunk_path.extension_ref() == Some("js") { + client_shared_chunks.push(chunk); + } + } + let client_shared_availability_info = client_shared_chunk_group.availability_info; - let client_references_cell = - reduced_graphs.get_client_references_for_endpoint(*rsc_entry); - - let client_references_chunks = get_app_client_references_chunks( - client_references_cell, - client_chunking_context, - Value::new(client_shared_availability_info), - ssr_chunking_context, - ); - let client_references_chunks_ref = client_references_chunks.await?; - - let mut entry_client_chunks = FxIndexSet::default(); - // TODO(alexkirsz) In which manifest does this go? - let mut entry_ssr_chunks = FxIndexSet::default(); - for chunks in client_references_chunks_ref - .layout_segment_client_chunks - .values() - { - entry_client_chunks.extend(chunks.await?.iter().copied()); - } - for (chunks, _) in client_references_chunks_ref - .client_component_client_chunks - .values() - { - client_assets.extend(chunks.await?.iter().copied()); - } - for (chunks, _) in client_references_chunks_ref - .client_component_ssr_chunks - .values() - { - entry_ssr_chunks.extend(chunks.await?.iter().copied()); - } + let reduced_graphs = + get_reduced_graphs_for_endpoint(this.app_project.project(), *rsc_entry); + let next_dynamic_imports = reduced_graphs + .get_next_dynamic_imports_for_endpoint(*rsc_entry) + .await?; - client_assets.extend(entry_client_chunks.iter().copied()); - server_assets.extend(entry_ssr_chunks.iter().copied()); + let client_references = reduced_graphs.get_client_references_for_endpoint(*rsc_entry); + + let client_references_chunks = get_app_client_references_chunks( + client_references, + client_chunking_context, + Value::new(client_shared_availability_info), + ssr_chunking_context, + ); + let client_references_chunks_ref = client_references_chunks.await?; + + let mut entry_client_chunks = FxIndexSet::default(); + // TODO(alexkirsz) In which manifest does this go? + let mut entry_ssr_chunks = FxIndexSet::default(); + for chunks in client_references_chunks_ref + .layout_segment_client_chunks + .values() + { + entry_client_chunks.extend(chunks.await?.iter().copied()); + } + for (chunks, _) in client_references_chunks_ref + .client_component_client_chunks + .values() + { + client_assets.extend(chunks.await?.iter().copied()); + } + for (chunks, _) in client_references_chunks_ref + .client_component_ssr_chunks + .values() + { + entry_ssr_chunks.extend(chunks.await?.iter().copied()); + } - let manifest_path_prefix = &app_entry.original_name; + client_assets.extend(entry_client_chunks.iter().copied()); + server_assets.extend(entry_ssr_chunks.iter().copied()); - if emit_manifests { - let app_build_manifest = AppBuildManifest { - pages: fxindexmap!( - app_entry.original_name.clone() => Vc::cell(entry_client_chunks - .iter() - .chain(client_shared_chunks.iter()) - .copied() - .collect()) - ), - }; - let app_build_manifest_output = - app_build_manifest - .build_output( - node_root.join( - format!( - "server/app{manifest_path_prefix}/app-build-manifest.json", - ) - .into(), - ), - client_relative_path, - ) - .await? - .to_resolved() - .await?; + let manifest_path_prefix = &app_entry.original_name; - server_assets.insert(app_build_manifest_output); - } + if emit_manifests { + let app_build_manifest = AppBuildManifest { + pages: fxindexmap!( + app_entry.original_name.clone() => Vc::cell(entry_client_chunks + .iter() + .chain(client_shared_chunks.iter()) + .copied() + .collect()) + ), + }; + let app_build_manifest_output = app_build_manifest + .build_output( + node_root.join( + format!("server/app{manifest_path_prefix}/app-build-manifest.json",).into(), + ), + client_relative_path, + ) + .await? + .to_resolved() + .await?; - // polyfill-nomodule.js is a pre-compiled asset distributed as part of next, - // load it as a RawModule. - let next_package = get_next_package(this.app_project.project().project_path()); - let polyfill_source = FileSource::new( - next_package.join("dist/build/polyfills/polyfill-nomodule.js".into()), - ); - let polyfill_output_path = - client_chunking_context.chunk_path(polyfill_source.ident(), ".js".into()); - let polyfill_output_asset = ResolvedVc::upcast( - RawOutput::new(polyfill_output_path, Vc::upcast(polyfill_source)) - .to_resolved() - .await?, - ); - client_assets.insert(polyfill_output_asset); + server_assets.insert(app_build_manifest_output); + } - if emit_manifests { - if *this - .app_project - .project() - .should_create_webpack_stats() - .await? - { - let webpack_stats = - generate_webpack_stats(app_entry.original_name.clone(), &client_assets) - .await?; - let stats_output = VirtualOutputAsset::new( - node_root.join( - format!("server/app{manifest_path_prefix}/webpack-stats.json",) - .into(), - ), - AssetContent::file( - File::from(serde_json::to_string_pretty(&webpack_stats)?).into(), - ), - ) - .to_resolved() - .await?; - server_assets.insert(ResolvedVc::upcast(stats_output)); - } + // polyfill-nomodule.js is a pre-compiled asset distributed as part of next, + // load it as a RawModule. + let next_package = get_next_package(this.app_project.project().project_path()); + let polyfill_source = + FileSource::new(next_package.join("dist/build/polyfills/polyfill-nomodule.js".into())); + let polyfill_output_path = + client_chunking_context.chunk_path(polyfill_source.ident(), ".js".into()); + let polyfill_output_asset = ResolvedVc::upcast( + RawOutput::new(polyfill_output_path, Vc::upcast(polyfill_source)) + .to_resolved() + .await?, + ); + client_assets.insert(polyfill_output_asset); - let build_manifest = BuildManifest { - root_main_files: client_shared_chunks, - polyfill_files: vec![polyfill_output_asset], - ..Default::default() - }; - let build_manifest_output = - ResolvedVc::upcast( - build_manifest - .build_output( - node_root.join( - format!( - "server/app{manifest_path_prefix}/build-manifest.json", - ) - .into(), - ), - client_relative_path, - ) - .await? - .to_resolved() - .await?, - ); - server_assets.insert(build_manifest_output); - } + if emit_manifests { + if *this + .app_project + .project() + .should_create_webpack_stats() + .await? + { + let webpack_stats = + generate_webpack_stats(app_entry.original_name.clone(), &client_assets).await?; + let stats_output = VirtualOutputAsset::new( + node_root.join( + format!("server/app{manifest_path_prefix}/webpack-stats.json",).into(), + ), + AssetContent::file( + File::from(serde_json::to_string_pretty(&webpack_stats)?).into(), + ), + ) + .to_resolved() + .await?; + server_assets.insert(ResolvedVc::upcast(stats_output)); + } - if runtime == NextRuntime::Edge { - // as the edge runtime doesn't support chunk loading we need to add all client - // references to the middleware manifest so they get loaded during runtime - // initialization - let client_references_chunks = &*client_references_chunks.await?; + let build_manifest = BuildManifest { + root_main_files: client_shared_chunks, + polyfill_files: vec![polyfill_output_asset], + ..Default::default() + }; + let build_manifest_output = ResolvedVc::upcast( + build_manifest + .build_output( + node_root.join( + format!("server/app{manifest_path_prefix}/build-manifest.json",).into(), + ), + client_relative_path, + ) + .await? + .to_resolved() + .await?, + ); + server_assets.insert(build_manifest_output); + } - for (ssr_chunks, _) in client_references_chunks - .client_component_ssr_chunks - .values() - { - let ssr_chunks = ssr_chunks.await?; + if runtime == NextRuntime::Edge { + // as the edge runtime doesn't support chunk loading we need to add all client + // references to the middleware manifest so they get loaded during runtime + // initialization + let client_references_chunks = &*client_references_chunks.await?; - middleware_assets.extend(ssr_chunks); - } - } + for (ssr_chunks, _) in client_references_chunks + .client_component_ssr_chunks + .values() + { + let ssr_chunks = ssr_chunks.await?; - ( - Some(next_dynamic_imports), - Some(client_references_cell), - Some(client_references_chunks), - ) - } else { - (None, None, None) - }; + middleware_assets.extend(ssr_chunks); + } + } - let server_action_manifest_loader = if process_client_components { - let reduced_graphs = - get_reduced_graphs_for_endpoint(this.app_project.project(), *rsc_entry); - let actions = reduced_graphs.get_server_actions_for_endpoint( - *rsc_entry, - match runtime { - NextRuntime::Edge => Vc::upcast(this.app_project.edge_rsc_module_context()), - NextRuntime::NodeJs => Vc::upcast(this.app_project.rsc_module_context()), - }, - ); + let reduced_graphs = + get_reduced_graphs_for_endpoint(this.app_project.project(), *rsc_entry); + let actions = reduced_graphs.get_server_actions_for_endpoint( + *rsc_entry, + match runtime { + NextRuntime::Edge => Vc::upcast(this.app_project.edge_rsc_module_context()), + NextRuntime::NodeJs => Vc::upcast(this.app_project.rsc_module_context()), + }, + ); + + let server_action_manifest = create_server_actions_manifest( + actions, + this.app_project.project().project_path(), + node_root, + app_entry.original_name.clone(), + runtime, + match runtime { + NextRuntime::Edge => Vc::upcast(this.app_project.edge_rsc_module_context()), + NextRuntime::NodeJs => Vc::upcast(this.app_project.rsc_module_context()), + }, + this.app_project + .project() + .runtime_chunking_context(process_client_assets, runtime), + ) + .await?; + server_assets.insert(server_action_manifest.manifest); - let server_action_manifest = create_server_actions_manifest( - actions, - this.app_project.project().project_path(), - node_root, - app_entry.original_name.clone(), - runtime, - match runtime { - NextRuntime::Edge => Vc::upcast(this.app_project.edge_rsc_module_context()), - NextRuntime::NodeJs => Vc::upcast(this.app_project.rsc_module_context()), - }, - this.app_project - .project() - .runtime_chunking_context(process_client_assets, runtime), - ) - .await?; - server_assets.insert(server_action_manifest.manifest); - Some(server_action_manifest.loader) - } else { - None - }; + let server_action_manifest_loader = server_action_manifest.loader; let (app_entry_chunks, app_entry_chunks_availability) = &*self .app_entry_chunks( client_references, - server_action_manifest_loader.map(|v| *v), + *server_action_manifest_loader, server_path, process_client_assets, ) @@ -1192,31 +1162,27 @@ impl AppEndpoint { let mut client_reference_manifest = None; if emit_manifests { - if let (Some(client_references), Some(client_references_chunks)) = - (client_references, client_references_chunks) - { - let entry_manifest = ClientReferenceManifest::build_output( - node_root, - client_relative_path, - app_entry.original_name.clone(), - client_references, - client_references_chunks, - **app_entry_chunks, - Value::new(*app_entry_chunks_availability), - client_chunking_context, - ssr_chunking_context, - this.app_project.project().next_config(), - runtime, - this.app_project.project().next_mode(), - ) - .to_resolved() - .await?; - server_assets.insert(entry_manifest); - if runtime == NextRuntime::Edge { - middleware_assets.push(entry_manifest); - } - client_reference_manifest = Some(entry_manifest) + let entry_manifest = ClientReferenceManifest::build_output( + node_root, + client_relative_path, + app_entry.original_name.clone(), + client_references, + client_references_chunks, + **app_entry_chunks, + Value::new(*app_entry_chunks_availability), + client_chunking_context, + ssr_chunking_context, + this.app_project.project().next_config(), + runtime, + this.app_project.project().next_mode(), + ) + .to_resolved() + .await?; + server_assets.insert(entry_manifest); + if runtime == NextRuntime::Edge { + middleware_assets.push(entry_manifest); } + client_reference_manifest = Some(entry_manifest); let next_font_manifest_output = create_font_manifest( this.app_project.project().client_root(), @@ -1266,21 +1232,15 @@ impl AppEndpoint { let entry_file = "app-edge-has-no-entrypoint".into(); if emit_manifests { - let dynamic_import_entries = - if let (Some(next_dynamic_imports), Some(client_references_chunks)) = - (next_dynamic_imports, client_references_chunks) - { - collect_next_dynamic_chunks( - Vc::upcast(client_chunking_context), - next_dynamic_imports, - NextDynamicChunkAvailability::ClientReferences( - &*(client_references_chunks.await?), - ), - ) - .await? - } else { - DynamicImportedChunks::default().resolved_cell() - }; + let dynamic_import_entries = collect_next_dynamic_chunks( + Vc::upcast(client_chunking_context), + next_dynamic_imports, + NextDynamicChunkAvailability::ClientReferences( + &*(client_references_chunks.await?), + ), + ) + .await?; + let loadable_manifest_output = create_react_loadable_manifest( *dynamic_import_entries, client_relative_path, @@ -1294,6 +1254,7 @@ impl AppEndpoint { NextRuntime::Edge, ) .await?; + server_assets.extend(loadable_manifest_output.iter().copied()); file_paths_from_root.extend( get_js_paths_from_root(&node_root_value, &loadable_manifest_output).await?, @@ -1385,21 +1346,15 @@ impl AppEndpoint { server_assets.insert(app_paths_manifest_output); // create react-loadable-manifest for next/dynamic - let dynamic_import_entries = - if let (Some(next_dynamic_imports), Some(client_references_chunks)) = - (next_dynamic_imports, client_references_chunks) - { - collect_next_dynamic_chunks( - Vc::upcast(client_chunking_context), - next_dynamic_imports, - NextDynamicChunkAvailability::ClientReferences( - &*(client_references_chunks.await?), - ), - ) - .await? - } else { - DynamicImportedChunks::default().resolved_cell() - }; + let dynamic_import_entries = collect_next_dynamic_chunks( + Vc::upcast(client_chunking_context), + next_dynamic_imports, + NextDynamicChunkAvailability::ClientReferences( + &*(client_references_chunks.await?), + ), + ) + .await?; + let loadable_manifest_output = create_react_loadable_manifest( *dynamic_import_entries, client_relative_path, @@ -1413,6 +1368,7 @@ impl AppEndpoint { NextRuntime::NodeJs, ) .await?; + server_assets.extend(loadable_manifest_output.iter().copied()); Some(loadable_manifest_output) } else { @@ -1459,8 +1415,8 @@ impl AppEndpoint { #[turbo_tasks::function] async fn app_entry_chunks( self: Vc, - client_references: Option>, - server_action_manifest_loader: Option>>, + client_references: Vc, + server_action_manifest_loader: ResolvedVc>, server_path: Vc, process_client_assets: bool, ) -> Result> { @@ -1484,10 +1440,7 @@ impl AppEndpoint { .await? .context("Entry module must be evaluatable")?; evaluatable_assets.push(evaluatable); - - if let Some(server_action_manifest_loader) = server_action_manifest_loader { - evaluatable_assets.push(server_action_manifest_loader.to_resolved().await?); - } + evaluatable_assets.push(server_action_manifest_loader); { let _span = tracing::info_span!("Server Components"); @@ -1508,9 +1461,7 @@ impl AppEndpoint { let mut evaluatable_assets = this.app_project.rsc_runtime_entries().await?.clone_value(); - if let Some(server_action_manifest_loader) = server_action_manifest_loader { - evaluatable_assets.push(server_action_manifest_loader.to_resolved().await?); - } + evaluatable_assets.push(server_action_manifest_loader); let EntryChunkGroupResult { asset: rsc_chunk, @@ -1518,20 +1469,54 @@ impl AppEndpoint { } = *(async { let mut current_chunks = OutputAssets::empty(); let mut current_availability_info = AvailabilityInfo::Root; - if let Some(client_references) = client_references { - let client_references = client_references.await?; - let span = tracing::trace_span!("server utils"); - async { - let utils_module = IncludeModulesModule::new( - AssetIdent::from_path(this.app_project.project().project_path()) - .with_modifier(server_utils_modifier()), - client_references.server_utils.iter().map(|v| **v).collect(), - ); + let client_references = client_references.await?; + let span = tracing::trace_span!("server utils"); + async { + let utils_module = IncludeModulesModule::new( + AssetIdent::from_path(this.app_project.project().project_path()) + .with_modifier(server_utils_modifier()), + client_references.server_utils.iter().map(|v| **v).collect(), + ); + + let chunk_group = chunking_context + .chunk_group( + utils_module.ident(), + Vc::upcast(utils_module), + Value::new(current_availability_info), + ) + .await?; + + current_chunks = current_chunks + .concatenate(*chunk_group.assets) + .resolve() + .await?; + current_availability_info = chunk_group.availability_info; + + anyhow::Ok(()) + } + .instrument(span) + .await?; + for server_component in client_references + .server_component_entries + .iter() + .copied() + .take( + client_references + .server_component_entries + .len() + .saturating_sub(1), + ) + { + let span = tracing::trace_span!( + "layout segment", + name = server_component.ident().to_string().await?.as_str() + ); + async { let chunk_group = chunking_context .chunk_group( - utils_module.ident(), - Vc::upcast(utils_module), + server_component.ident(), + *ResolvedVc::upcast(server_component), Value::new(current_availability_info), ) .await?; @@ -1546,42 +1531,8 @@ impl AppEndpoint { } .instrument(span) .await?; - for server_component in client_references - .server_component_entries - .iter() - .copied() - .take( - client_references - .server_component_entries - .len() - .saturating_sub(1), - ) - { - let span = tracing::trace_span!( - "layout segment", - name = server_component.ident().to_string().await?.as_str() - ); - async { - let chunk_group = chunking_context - .chunk_group( - server_component.ident(), - *ResolvedVc::upcast(server_component), - Value::new(current_availability_info), - ) - .await?; - - current_chunks = current_chunks - .concatenate(*chunk_group.assets) - .resolve() - .await?; - current_availability_info = chunk_group.availability_info; - - anyhow::Ok(()) - } - .instrument(span) - .await?; - } } + chunking_context .entry_chunk_group( server_path.join( diff --git a/packages/next/src/build/webpack-config.ts b/packages/next/src/build/webpack-config.ts index 884be1b1f6c6e..af8bcd9dcdf7a 100644 --- a/packages/next/src/build/webpack-config.ts +++ b/packages/next/src/build/webpack-config.ts @@ -1309,6 +1309,17 @@ export default async function getBaseWebpackConfig( }, ], }, + resourceQuery: { + // Do not apply next-flight-loader to imports generated by the + // next-metadata-image-loader, to avoid generating unnecessary + // and conflicting entries in the flight client entry plugin. + // These are already covered by the next-metadata-route-loader + // entries. + not: [ + new RegExp(WEBPACK_RESOURCE_QUERIES.metadata), + new RegExp(WEBPACK_RESOURCE_QUERIES.metadataImageMeta), + ], + }, resolve: { mainFields: getMainField(compilerType, true), conditionNames: reactServerCondition, diff --git a/packages/next/src/build/webpack/plugins/flight-client-entry-plugin.ts b/packages/next/src/build/webpack/plugins/flight-client-entry-plugin.ts index d917c1c344105..7268afdd1a3ec 100644 --- a/packages/next/src/build/webpack/plugins/flight-client-entry-plugin.ts +++ b/packages/next/src/build/webpack/plugins/flight-client-entry-plugin.ts @@ -4,7 +4,7 @@ import type { } from '../loaders/next-flight-client-entry-loader' import { webpack } from 'next/dist/compiled/webpack/webpack' -import { stringify } from 'querystring' +import { parse, stringify } from 'querystring' import path from 'path' import { sources } from 'next/dist/compiled/webpack/webpack' import { @@ -13,7 +13,10 @@ import { EntryTypes, getEntryKey, } from '../../../server/dev/on-demand-entry-handler' -import { WEBPACK_LAYERS } from '../../../lib/constants' +import { + WEBPACK_LAYERS, + WEBPACK_RESOURCE_QUERIES, +} from '../../../lib/constants' import { APP_CLIENT_INTERNALS, BARREL_OPTIMIZATION_PREFIX, @@ -41,6 +44,7 @@ import { PAGE_TYPES } from '../../../lib/page-types' import { getModuleBuildInfo } from '../loaders/get-module-build-info' import { getAssumedSourceType } from '../loaders/next-flight-loader' import { isAppRouteRoute } from '../../../lib/is-app-route-route' +import { isMetadataRoute } from '../../../lib/metadata/is-metadata-route' interface Options { dev: boolean @@ -296,10 +300,14 @@ export class FlightClientEntryPlugin { compilation.moduleGraph )) { // Entry can be any user defined entry files such as layout, page, error, loading, etc. - const entryRequest = ( + let entryRequest = ( connection.dependency as unknown as webpack.NormalModule ).request + if (entryRequest.endsWith(WEBPACK_RESOURCE_QUERIES.metadataRoute)) { + entryRequest = getMetadataRouteResource(entryRequest) + } + const { clientComponentImports, actionImports, cssImports } = this.collectComponentInfoFromServerEntryDependency({ entryRequest, @@ -332,10 +340,16 @@ export class FlightClientEntryPlugin { : entryRequest // Replace file suffix as `.js` will be added. - const bundlePath = normalizePathSep( + let bundlePath = normalizePathSep( relativeRequest.replace(/\.[^.\\/]+$/, '').replace(/^src[\\/]/, '') ) + // For metadata routes, the entry name can be used as the bundle path, + // as it has been normalized already. + if (isMetadataRoute(bundlePath)) { + bundlePath = name + } + Object.assign(mergedCSSimports, cssImports) clientEntriesToInject.push({ compiler, @@ -1094,5 +1108,16 @@ function getModuleResource(mod: webpack.NormalModule): string { if (mod.matchResource?.startsWith(BARREL_OPTIMIZATION_PREFIX)) { modResource = mod.matchResource + ':' + modResource } + + if (mod.resource === `?${WEBPACK_RESOURCE_QUERIES.metadataRoute}`) { + return getMetadataRouteResource(mod.rawRequest) + } + return modResource } + +function getMetadataRouteResource(request: string): string { + const query = request.split('next-metadata-route-loader?')[1] + + return parse(query).filePath as string +} diff --git a/packages/next/src/build/webpack/plugins/flight-manifest-plugin.ts b/packages/next/src/build/webpack/plugins/flight-manifest-plugin.ts index c6e62cf27d4dd..be012833e6b7b 100644 --- a/packages/next/src/build/webpack/plugins/flight-manifest-plugin.ts +++ b/packages/next/src/build/webpack/plugins/flight-manifest-plugin.ts @@ -26,7 +26,6 @@ import { } from '../utils' import type { ChunkGroup } from 'webpack' import { encodeURIPath } from '../../../shared/lib/encode-uri-path' -import { isMetadataRoute } from '../../../lib/metadata/is-metadata-route' import type { ModuleInfo } from './flight-client-entry-plugin' interface Options { @@ -559,9 +558,9 @@ export class ClientReferenceManifestPlugin { manifestEntryFiles.push(entryName.replace(/\/page(\.[^/]+)?$/, '/page')) } - // We also need to create manifests for route handler entrypoints - // (excluding metadata route handlers) to enable `'use cache'`. - if (/\/route$/.test(entryName) && !isMetadataRoute(entryName)) { + // We also need to create manifests for route handler entrypoints to + // enable `'use cache'`. + if (/\/route$/.test(entryName)) { manifestEntryFiles.push(entryName) } diff --git a/packages/next/src/build/webpack/plugins/next-trace-entrypoints-plugin.ts b/packages/next/src/build/webpack/plugins/next-trace-entrypoints-plugin.ts index 8d2056380ce62..38dba137b1dcc 100644 --- a/packages/next/src/build/webpack/plugins/next-trace-entrypoints-plugin.ts +++ b/packages/next/src/build/webpack/plugins/next-trace-entrypoints-plugin.ts @@ -19,7 +19,6 @@ import picomatch from 'next/dist/compiled/picomatch' import { getModuleBuildInfo } from '../loaders/get-module-build-info' import { getPageFilePath } from '../../entries' import { resolveExternal } from '../../handle-externals' -import { isMetadataRoute } from '../../../lib/metadata/is-metadata-route' const PLUGIN_NAME = 'TraceEntryPointsPlugin' export const TRACE_IGNORES = [ @@ -243,18 +242,15 @@ export class TraceEntryPointsPlugin implements webpack.WebpackPluginInstance { ) if (entrypoint.name.startsWith('app/')) { - // Include the client reference manifest for pages and route handlers, - // excluding metadata route handlers. - const clientManifestsForEntrypoint = isMetadataRoute(entrypoint.name) - ? null - : nodePath.join( - outputPath, - outputPrefix, - entrypoint.name.replace(/%5F/g, '_') + - '_' + - CLIENT_REFERENCE_MANIFEST + - '.js' - ) + // include the client reference manifest + const clientManifestsForEntrypoint = nodePath.join( + outputPath, + outputPrefix, + entrypoint.name.replace(/%5F/g, '_') + + '_' + + CLIENT_REFERENCE_MANIFEST + + '.js' + ) if (clientManifestsForEntrypoint !== null) { entryFiles.add(clientManifestsForEntrypoint) diff --git a/packages/next/src/build/webpack/utils.ts b/packages/next/src/build/webpack/utils.ts index 981559871021a..0ea11a65bb52d 100644 --- a/packages/next/src/build/webpack/utils.ts +++ b/packages/next/src/build/webpack/utils.ts @@ -7,7 +7,6 @@ import type { ModuleGraph, } from 'webpack' import type { ModuleGraphConnection } from 'webpack' -import { isMetadataRoute } from '../../lib/metadata/is-metadata-route' export function traverseModules( compilation: Compilation, @@ -48,11 +47,7 @@ export function forEachEntryModule( ) { for (const [name, entry] of compilation.entries.entries()) { // Skip for entries under pages/ - if ( - name.startsWith('pages/') || - // Skip for metadata route handlers - (name.startsWith('app/') && isMetadataRoute(name)) - ) { + if (name.startsWith('pages/')) { continue } diff --git a/packages/next/src/server/load-components.ts b/packages/next/src/server/load-components.ts index 499f6afcaf9d7..40c6f6d670708 100644 --- a/packages/next/src/server/load-components.ts +++ b/packages/next/src/server/load-components.ts @@ -32,7 +32,6 @@ import { wait } from '../lib/wait' import { setReferenceManifestsSingleton } from './app-render/encryption-utils' import { createServerModuleMap } from './app-render/action-utils' import type { DeepReadonly } from '../shared/lib/deep-readonly' -import { isMetadataRoute } from '../lib/metadata/is-metadata-route' import { normalizePagePath } from '../shared/lib/page-path/normalize-page-path' export type ManifestItem = { @@ -169,9 +168,6 @@ async function loadComponentsImpl({ ]) } - // Make sure to avoid loading the manifest for metadata route handlers. - const hasClientManifest = isAppPath && !isMetadataRoute(page) - // In dev mode we retry loading a manifest file to handle a race condition // that can occur while app and pages are compiling at the same time, and the // build-manifest is still being written to disk while an app path is @@ -227,7 +223,7 @@ async function loadComponentsImpl({ join(distDir, `${DYNAMIC_CSS_MANIFEST}.json`), manifestLoadAttempts ).catch(() => undefined), - hasClientManifest + isAppPath ? tryLoadClientReferenceManifest( join( distDir, diff --git a/test/e2e/app-dir/use-cache-metadata-route-handler/app/icon.tsx b/test/e2e/app-dir/use-cache-metadata-route-handler/app/icon.tsx new file mode 100644 index 0000000000000..7a1a1cca1656f --- /dev/null +++ b/test/e2e/app-dir/use-cache-metadata-route-handler/app/icon.tsx @@ -0,0 +1,38 @@ +import { ImageResponse } from 'next/og' +import { setTimeout } from 'timers/promises' + +export const size = { width: 32, height: 32 } +export const contentType = 'image/png' + +async function fetchIconLetter() { + 'use cache' + + // Simulate I/O + await setTimeout(100) + + return 'N' +} + +export default async function Icon() { + const letter = await fetchIconLetter() + + return new ImageResponse( + ( +
+ {letter} +
+ ), + { ...size } + ) +} diff --git a/test/e2e/app-dir/use-cache-metadata-route-handler/app/manifest.ts b/test/e2e/app-dir/use-cache-metadata-route-handler/app/manifest.ts new file mode 100644 index 0000000000000..138a6ba1b483f --- /dev/null +++ b/test/e2e/app-dir/use-cache-metadata-route-handler/app/manifest.ts @@ -0,0 +1,12 @@ +import type { MetadataRoute } from 'next' +import { getSentinelValue } from './sentinel' +import { setTimeout } from 'timers/promises' + +export default async function manifest(): Promise { + 'use cache' + + // Simulate I/O + await setTimeout(100) + + return { name: getSentinelValue() } +} diff --git a/test/e2e/app-dir/use-cache-metadata-route-handler/app/opengraph-image.tsx b/test/e2e/app-dir/use-cache-metadata-route-handler/app/opengraph-image.tsx new file mode 100644 index 0000000000000..1913162fbc4ff --- /dev/null +++ b/test/e2e/app-dir/use-cache-metadata-route-handler/app/opengraph-image.tsx @@ -0,0 +1,38 @@ +import { ImageResponse } from 'next/og' + +export const alt = 'About Acme' +export const size = { width: 1200, height: 630 } +export const contentType = 'image/png' + +async function fetchPostData() { + 'use cache' + + return { title: 'Test', created: Date.now() } +} + +export default async function Image() { + const post = await fetchPostData() + + return new ImageResponse( + ( +
+

{post.title}

+

+ {new Date(post.created).toLocaleTimeString()} +

+
+ ), + size + ) +} diff --git a/test/e2e/app-dir/use-cache-metadata-route-handler/app/products/sitemap.ts b/test/e2e/app-dir/use-cache-metadata-route-handler/app/products/sitemap.ts new file mode 100644 index 0000000000000..147ed3deb90d4 --- /dev/null +++ b/test/e2e/app-dir/use-cache-metadata-route-handler/app/products/sitemap.ts @@ -0,0 +1,20 @@ +import type { MetadataRoute } from 'next' +import { getSentinelValue } from '../sentinel' +import { setTimeout } from 'timers/promises' + +export async function generateSitemaps() { + return [{ id: 0 }, { id: 1 }] +} + +export default async function sitemap({ + id, +}: { + id: number +}): Promise { + 'use cache' + + // Simulate I/O + await setTimeout(100) + + return [{ url: `https://acme.com/${id}?sentinel=${getSentinelValue()}` }] +} diff --git a/test/e2e/app-dir/use-cache-metadata-route-handler/app/robots.ts b/test/e2e/app-dir/use-cache-metadata-route-handler/app/robots.ts new file mode 100644 index 0000000000000..f48d0d95bb0a9 --- /dev/null +++ b/test/e2e/app-dir/use-cache-metadata-route-handler/app/robots.ts @@ -0,0 +1,14 @@ +import type { MetadataRoute } from 'next' +import { getSentinelValue } from './sentinel' +import { setTimeout } from 'timers/promises' + +export default async function robots(): Promise { + 'use cache' + + // Simulate I/O + await setTimeout(100) + + return { + rules: { userAgent: '*', allow: `/${getSentinelValue()}` }, + } +} diff --git a/test/e2e/app-dir/use-cache-metadata-route-handler/app/sentinel.ts b/test/e2e/app-dir/use-cache-metadata-route-handler/app/sentinel.ts new file mode 100644 index 0000000000000..4571ba8f47bb8 --- /dev/null +++ b/test/e2e/app-dir/use-cache-metadata-route-handler/app/sentinel.ts @@ -0,0 +1,7 @@ +const { PHASE_PRODUCTION_BUILD } = require('next/constants') + +export function getSentinelValue() { + return process.env.NEXT_PHASE === PHASE_PRODUCTION_BUILD + ? 'buildtime' + : 'runtime' +} diff --git a/test/e2e/app-dir/use-cache-metadata-route-handler/app/sitemap.ts b/test/e2e/app-dir/use-cache-metadata-route-handler/app/sitemap.ts new file mode 100644 index 0000000000000..05ccea5bbf45b --- /dev/null +++ b/test/e2e/app-dir/use-cache-metadata-route-handler/app/sitemap.ts @@ -0,0 +1,12 @@ +import type { MetadataRoute } from 'next' +import { getSentinelValue } from './sentinel' +import { setTimeout } from 'timers/promises' + +export default async function sitemap(): Promise { + 'use cache' + + // Simulate I/O + await setTimeout(100) + + return [{ url: `https://acme.com?sentinel=${getSentinelValue()}` }] +} diff --git a/test/e2e/app-dir/use-cache-metadata-route-handler/next.config.js b/test/e2e/app-dir/use-cache-metadata-route-handler/next.config.js new file mode 100644 index 0000000000000..ac4afcf432196 --- /dev/null +++ b/test/e2e/app-dir/use-cache-metadata-route-handler/next.config.js @@ -0,0 +1,10 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + dynamicIO: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/use-cache-metadata-route-handler/use-cache-metadata-route-handler.test.ts b/test/e2e/app-dir/use-cache-metadata-route-handler/use-cache-metadata-route-handler.test.ts new file mode 100644 index 0000000000000..3c144e42f29e5 --- /dev/null +++ b/test/e2e/app-dir/use-cache-metadata-route-handler/use-cache-metadata-route-handler.test.ts @@ -0,0 +1,134 @@ +import { nextTestSetup } from 'e2e-utils' + +describe('use-cache-metadata-route-handler', () => { + const { next, isNextDev, isNextStart } = nextTestSetup({ + files: __dirname, + }) + + it('should generate an opengraph image with a metadata route handler that uses "use cache"', async () => { + const res = await next.fetch('/opengraph-image') + expect(res.status).toBe(200) + expect(res.headers.get('content-type')).toBe('image/png') + + if (isNextStart) { + const [buildStatus] = next.cliOutput.match(/. \/opengraph-image/) + + // TODO: Should always be `○ /opengraph-image`. + expect(buildStatus).toBeOneOf([ + '○ /opengraph-image', + 'ƒ /opengraph-image', + ]) + } + }) + + it('should generate an icon image with a metadata route handler that uses "use cache"', async () => { + const res = await next.fetch('/icon') + expect(res.status).toBe(200) + expect(res.headers.get('content-type')).toBe('image/png') + + if (isNextStart) { + const [buildStatus] = next.cliOutput.match(/. \/icon/) + + // TODO: Should always be `○ /icon`. + expect(buildStatus).toBeOneOf(['○ /icon', 'ƒ /icon']) + } + }) + + it('should generate sitemaps with a metadata route handler that uses "use cache"', async () => { + const res = await next.fetch('/sitemap.xml') + expect(res.status).toBe(200) + expect(res.headers.get('content-type')).toBe('application/xml') + + const body = await res.text() + + if (isNextDev) { + expect(body).toMatchInlineSnapshot(` + " + + + https://acme.com?sentinel=runtime + + + " + `) + } else { + expect(body).toMatchInlineSnapshot(` + " + + + https://acme.com?sentinel=buildtime + + + " + `) + } + }) + + it('should generate multiple sitemaps with a metadata route handler that uses "use cache"', async () => { + const res = await next.fetch('/products/sitemap/1.xml') + expect(res.status).toBe(200) + expect(res.headers.get('content-type')).toBe('application/xml') + + const body = await res.text() + + if (isNextDev) { + expect(body).toMatchInlineSnapshot(` + " + + + https://acme.com/1?sentinel=runtime + + + " + `) + } else { + expect(body).toMatchInlineSnapshot(` + " + + + https://acme.com/1?sentinel=buildtime + + + " + `) + } + }) + + it('should generate robots.txt with a metadata route handler that uses "use cache"', async () => { + const res = await next.fetch('/robots.txt') + expect(res.status).toBe(200) + expect(res.headers.get('content-type')).toBe('text/plain') + + const body = await res.text() + + if (isNextDev) { + expect(body).toMatchInlineSnapshot(` + "User-Agent: * + Allow: /runtime + + " + `) + } else { + expect(body).toMatchInlineSnapshot(` + "User-Agent: * + Allow: /buildtime + + " + `) + } + }) + + it('should generate manifest.json with a metadata route handler that uses "use cache"', async () => { + const res = await next.fetch('/manifest.webmanifest') + expect(res.status).toBe(200) + expect(res.headers.get('content-type')).toBe('application/manifest+json') + + const body = await res.json() + + if (isNextDev) { + expect(body).toEqual({ name: 'runtime' }) + } else { + expect(body).toEqual({ name: 'buildtime' }) + } + }) +}) From b29026882911dfcdc9ef3a0effa4171c9437b887 Mon Sep 17 00:00:00 2001 From: Hana Date: Tue, 14 Jan 2025 16:40:54 +0800 Subject: [PATCH 30/65] feat: support rspack otel --- packages/next/src/build/compiler.ts | 13 ++- pnpm-lock.yaml | 159 +++++++++++++++------------- 2 files changed, 95 insertions(+), 77 deletions(-) diff --git a/packages/next/src/build/compiler.ts b/packages/next/src/build/compiler.ts index d867bc5e4ee09..fa204275d4a2d 100644 --- a/packages/next/src/build/compiler.ts +++ b/packages/next/src/build/compiler.ts @@ -35,7 +35,7 @@ function closeCompiler(compiler: webpack.Compiler | webpack.MultiCompiler) { }) } -export function runCompiler( +export async function runCompiler( config: webpack.Configuration, { runWebpackSpan, @@ -50,6 +50,14 @@ export function runCompiler( inputFileSystem?: webpack.Compiler['inputFileSystem'], ] > { + if (process.env.NEXT_RSPACK_OTEL) { + console.log('next bin rspack otel') + await require('@rspack/core').experiments.globalTrace.register( + 'trace', + 'otel', + '' + ) + } return new Promise((resolve, reject) => { const compiler = webpack(config) // Ensure we use the previous inputFileSystem @@ -71,6 +79,9 @@ export function runCompiler( }) webpackCloseSpan .traceAsyncFn(() => closeCompiler(compiler)) + .then(() => { + return require('@rspack/core').experiments.globalTrace.cleanup() + }) .then(() => { if (err) { const reason = err.stack ?? err.toString() diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1db1c0a1ce7f4..6b4d40e909e00 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -497,7 +497,7 @@ importers: version: react-server-dom-webpack@0.0.0-experimental-056073de-20250109(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109)(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))) react-ssr-prepass: specifier: 1.0.8 - version: 1.0.8(react-is@19.1.0-canary-7b402084-20250107)(react@19.1.0-canary-056073de-20250109) + version: 1.0.8(react-is@19.1.0-canary-518d06d2-20241219)(react@19.1.0-canary-056073de-20250109) react-virtualized: specifier: 9.22.3 version: 9.22.3(react-dom@19.1.0-canary-056073de-20250109(react@19.1.0-canary-056073de-20250109))(react@19.1.0-canary-056073de-20250109) @@ -626,13 +626,13 @@ importers: dependencies: '@mantine/core': specifier: ^7.10.1 - version: 7.10.1(@mantine/hooks@7.11.2(react@19.1.0-canary-7b402084-20250107))(@types/react@19.0.0)(react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107))(react@19.1.0-canary-7b402084-20250107) + version: 7.10.1(@mantine/hooks@7.11.2(react@19.1.0-canary-518d06d2-20241219))(@types/react@19.0.0)(react-dom@19.1.0-canary-518d06d2-20241219(react@19.1.0-canary-518d06d2-20241219))(react@19.1.0-canary-518d06d2-20241219) lodash-es: specifier: ^4.17.21 version: 4.17.21 lucide-react: specifier: ^0.383.0 - version: 0.383.0(react@19.1.0-canary-7b402084-20250107) + version: 0.383.0(react@19.1.0-canary-518d06d2-20241219) mermaid: specifier: ^10.9.1 version: 10.9.1 @@ -1617,7 +1617,7 @@ importers: version: 2.2.1(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))) '@mdx-js/react': specifier: '>=0.15.0' - version: 2.2.1(react@19.1.0-canary-7b402084-20250107) + version: 2.2.1(react@19.1.0-canary-518d06d2-20241219) source-map: specifier: ^0.7.0 version: 0.7.3 @@ -13509,6 +13509,10 @@ packages: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + pupa@2.1.1: resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} engines: {node: '>=8'} @@ -13526,6 +13530,7 @@ packages: engines: {node: '>=0.6.0', teleport: '>=0.2.0'} deprecated: |- You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. + (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) qs@6.11.0: @@ -13628,16 +13633,16 @@ packages: peerDependencies: react: 19.1.0-canary-056073de-20250109 - react-dom@19.1.0-canary-7b402084-20250107: - resolution: {integrity: sha512-ETzHi3lWsrfAeQz60P9YyhvvlOYPEOcP2Du0cRvaqzAuF/iP4kBsHKmSuFQU1Usn1g/u3ecbar6d08jsup2V0Q==} + react-dom@19.1.0-canary-518d06d2-20241219: + resolution: {integrity: sha512-oixjdOc1WBtMEFcGNt4LntwKuua6upXROoRdaj8CWESdr7Sw2ZBDubiIVRHlJ+3NBE+DzXFycz6kj1W6z/t6sg==} peerDependencies: react: 19.1.0-canary-056073de-20250109 react-is@19.1.0-canary-056073de-20250109: resolution: {integrity: sha512-2u0EwVfKVHgqCx/4Bwp8x/m3/hMtEu5/NUd4fhM87n7ZwLsFoU0o17Jo+eealID2ctHt652w8VypFSbzgembRw==} - react-is@19.1.0-canary-7b402084-20250107: - resolution: {integrity: sha512-RFQLt4TJ3QcacHkWKICm1NPgd6BR/M5NF07aGT0ueGQcYkBRbauRilulQVl/nAR5c+y3sxkNJ4mWk3U7tKtEGQ==} + react-is@19.1.0-canary-518d06d2-20241219: + resolution: {integrity: sha512-zjquJOa2EM9HV6eXZ+td1TVYglbi+PFyVs47Ez6OLVwTpsESLs5H2ZRZCSi/VdcGrrIls5GSyclhvJes92G19Q==} react-lifecycles-compat@3.0.4: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} @@ -13748,8 +13753,8 @@ packages: resolution: {integrity: sha512-/oh0HJ0iDcPeoDYTJPjgMJpX2pFopmcbGANxRjED7tS4yrxX32ABdALPPStYTXaPwNUm/cnJFZwZWJiesWANVw==} engines: {node: '>=0.10.0'} - react@19.1.0-canary-7b402084-20250107: - resolution: {integrity: sha512-eNedwsJPq2YuB8dfdne6GW9LEEI/xlZdW7ABjTgGYLwTlmt0avtgMOUlLpABhWyTW5l//JIZTWWbhQ2plw7Pxw==} + react@19.1.0-canary-518d06d2-20241219: + resolution: {integrity: sha512-Xu6FUDhor6JaOtb02hNhxDu3K+e/lE1V3pfwfTS5h8alv12hP4Qmh+CYRKQ54d1KIwa9UWliI+qC2bcqWDZNgQ==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -14902,7 +14907,7 @@ packages: superagent@3.8.3: resolution: {integrity: sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==} engines: {node: '>= 4.0'} - deprecated: Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at . + deprecated: Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net superstruct@1.0.3: resolution: {integrity: sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg==} @@ -18855,18 +18860,18 @@ snapshots: '@floating-ui/core': 1.6.2 '@floating-ui/utils': 0.2.2 - '@floating-ui/react-dom@2.1.0(react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107))(react@19.1.0-canary-7b402084-20250107)': + '@floating-ui/react-dom@2.1.0(react-dom@19.1.0-canary-518d06d2-20241219(react@19.1.0-canary-518d06d2-20241219))(react@19.1.0-canary-518d06d2-20241219)': dependencies: '@floating-ui/dom': 1.6.5 - react: 19.1.0-canary-7b402084-20250107 - react-dom: 19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107) + react: 19.1.0-canary-518d06d2-20241219 + react-dom: 19.1.0-canary-518d06d2-20241219(react@19.1.0-canary-518d06d2-20241219) - '@floating-ui/react@0.26.16(react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107))(react@19.1.0-canary-7b402084-20250107)': + '@floating-ui/react@0.26.16(react-dom@19.1.0-canary-518d06d2-20241219(react@19.1.0-canary-518d06d2-20241219))(react@19.1.0-canary-518d06d2-20241219)': dependencies: - '@floating-ui/react-dom': 2.1.0(react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107))(react@19.1.0-canary-7b402084-20250107) + '@floating-ui/react-dom': 2.1.0(react-dom@19.1.0-canary-518d06d2-20241219(react@19.1.0-canary-518d06d2-20241219))(react@19.1.0-canary-518d06d2-20241219) '@floating-ui/utils': 0.2.2 - react: 19.1.0-canary-7b402084-20250107 - react-dom: 19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107) + react: 19.1.0-canary-518d06d2-20241219 + react-dom: 19.1.0-canary-518d06d2-20241219(react@19.1.0-canary-518d06d2-20241219) tabbable: 6.2.0 '@floating-ui/utils@0.2.2': {} @@ -19363,7 +19368,7 @@ snapshots: '@jridgewell/trace-mapping@0.3.22': dependencies: '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.4.14 '@lerna/add@4.0.0': dependencies: @@ -19728,7 +19733,7 @@ snapshots: dependencies: '@lerna/package': 4.0.0 '@lerna/validation-error': 4.0.0 - cosmiconfig: 7.1.0 + cosmiconfig: 7.0.0 dedent: 0.7.0 dot-prop: 6.0.1 glob-parent: 5.1.2 @@ -19885,23 +19890,23 @@ snapshots: dependencies: call-bind: 1.0.7 - '@mantine/core@7.10.1(@mantine/hooks@7.11.2(react@19.1.0-canary-7b402084-20250107))(@types/react@19.0.0)(react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107))(react@19.1.0-canary-7b402084-20250107)': + '@mantine/core@7.10.1(@mantine/hooks@7.11.2(react@19.1.0-canary-518d06d2-20241219))(@types/react@19.0.0)(react-dom@19.1.0-canary-518d06d2-20241219(react@19.1.0-canary-518d06d2-20241219))(react@19.1.0-canary-518d06d2-20241219)': dependencies: - '@floating-ui/react': 0.26.16(react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107))(react@19.1.0-canary-7b402084-20250107) - '@mantine/hooks': 7.11.2(react@19.1.0-canary-7b402084-20250107) + '@floating-ui/react': 0.26.16(react-dom@19.1.0-canary-518d06d2-20241219(react@19.1.0-canary-518d06d2-20241219))(react@19.1.0-canary-518d06d2-20241219) + '@mantine/hooks': 7.11.2(react@19.1.0-canary-518d06d2-20241219) clsx: 2.1.1 - react: 19.1.0-canary-7b402084-20250107 - react-dom: 19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107) - react-number-format: 5.4.0(react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107))(react@19.1.0-canary-7b402084-20250107) - react-remove-scroll: 2.5.10(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) - react-textarea-autosize: 8.5.3(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) + react: 19.1.0-canary-518d06d2-20241219 + react-dom: 19.1.0-canary-518d06d2-20241219(react@19.1.0-canary-518d06d2-20241219) + react-number-format: 5.4.0(react-dom@19.1.0-canary-518d06d2-20241219(react@19.1.0-canary-518d06d2-20241219))(react@19.1.0-canary-518d06d2-20241219) + react-remove-scroll: 2.5.10(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219) + react-textarea-autosize: 8.5.3(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219) type-fest: 4.18.3 transitivePeerDependencies: - '@types/react' - '@mantine/hooks@7.11.2(react@19.1.0-canary-7b402084-20250107)': + '@mantine/hooks@7.11.2(react@19.1.0-canary-518d06d2-20241219)': dependencies: - react: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-518d06d2-20241219 '@mapbox/node-pre-gyp@1.0.5(encoding@0.1.13)': dependencies: @@ -19954,11 +19959,11 @@ snapshots: '@types/react': 19.0.0 react: 19.1.0-canary-056073de-20250109 - '@mdx-js/react@2.2.1(react@19.1.0-canary-7b402084-20250107)': + '@mdx-js/react@2.2.1(react@19.1.0-canary-518d06d2-20241219)': dependencies: '@types/mdx': 2.0.3 '@types/react': 19.0.0 - react: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-518d06d2-20241219 '@mdx-js/react@3.1.0(@types/react@19.0.0)(react@19.1.0-canary-056073de-20250109)': dependencies: @@ -22489,7 +22494,7 @@ snapshots: babel-plugin-macros@3.1.0: dependencies: '@babel/runtime': 7.22.5 - cosmiconfig: 7.1.0 + cosmiconfig: 7.0.0 resolve: 1.22.8 babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.22.5): @@ -25844,13 +25849,13 @@ snapshots: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 - mime-types: 2.1.35 + mime-types: 2.1.30 form-data@2.5.1: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 - mime-types: 2.1.35 + mime-types: 2.1.30 form-data@3.0.1: dependencies: @@ -26736,7 +26741,7 @@ snapshots: dependencies: acorn: 8.14.0 acorn-import-assertions: 1.9.0(acorn@8.14.0) - cjs-module-lexer: 1.4.1 + cjs-module-lexer: 1.2.2 module-details-from-path: 1.0.3 import-lazy@2.1.0: {} @@ -28136,7 +28141,7 @@ snapshots: load-json-file@6.2.0: dependencies: graceful-fs: 4.2.11 - parse-json: 5.2.0 + parse-json: 5.0.0 strip-bom: 4.0.0 type-fest: 0.6.0 @@ -28336,9 +28341,9 @@ snapshots: lru-cache@7.18.3: {} - lucide-react@0.383.0(react@19.1.0-canary-7b402084-20250107): + lucide-react@0.383.0(react@19.1.0-canary-518d06d2-20241219): dependencies: - react: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-518d06d2-20241219 lz-string@1.5.0: {} @@ -31302,6 +31307,8 @@ snapshots: punycode@2.1.1: {} + punycode@2.3.1: {} + pupa@2.1.1: dependencies: escape-goat: 2.1.1 @@ -31419,41 +31426,41 @@ snapshots: react: 19.1.0-canary-056073de-20250109 scheduler: 0.26.0-canary-056073de-20250109 - react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107): + react-dom@19.1.0-canary-518d06d2-20241219(react@19.1.0-canary-518d06d2-20241219): dependencies: - react: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-518d06d2-20241219 scheduler: 0.26.0-canary-056073de-20250109 react-is@19.1.0-canary-056073de-20250109: {} - react-is@19.1.0-canary-7b402084-20250107: {} + react-is@19.1.0-canary-518d06d2-20241219: {} react-lifecycles-compat@3.0.4: {} - react-number-format@5.4.0(react-dom@19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107))(react@19.1.0-canary-7b402084-20250107): + react-number-format@5.4.0(react-dom@19.1.0-canary-518d06d2-20241219(react@19.1.0-canary-518d06d2-20241219))(react@19.1.0-canary-518d06d2-20241219): dependencies: prop-types: 15.8.1 - react: 19.1.0-canary-7b402084-20250107 - react-dom: 19.1.0-canary-7b402084-20250107(react@19.1.0-canary-7b402084-20250107) + react: 19.1.0-canary-518d06d2-20241219 + react-dom: 19.1.0-canary-518d06d2-20241219(react@19.1.0-canary-518d06d2-20241219) react-refresh@0.12.0: {} - react-remove-scroll-bar@2.3.6(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): + react-remove-scroll-bar@2.3.6(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219): dependencies: - react: 19.1.0-canary-7b402084-20250107 - react-style-singleton: 2.2.1(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) + react: 19.1.0-canary-518d06d2-20241219 + react-style-singleton: 2.2.1(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219) tslib: 2.8.1 optionalDependencies: '@types/react': 19.0.0 - react-remove-scroll@2.5.10(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): + react-remove-scroll@2.5.10(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219): dependencies: - react: 19.1.0-canary-7b402084-20250107 - react-remove-scroll-bar: 2.3.6(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) - react-style-singleton: 2.2.1(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) + react: 19.1.0-canary-518d06d2-20241219 + react-remove-scroll-bar: 2.3.6(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219) + react-style-singleton: 2.2.1(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219) tslib: 2.8.1 - use-callback-ref: 1.3.2(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) - use-sidecar: 1.1.2(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) + use-callback-ref: 1.3.2(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219) + use-sidecar: 1.1.2(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219) optionalDependencies: '@types/react': 19.0.0 @@ -31495,17 +31502,17 @@ snapshots: react: 19.1.0-canary-056073de-20250109 react-is: 19.1.0-canary-056073de-20250109 - react-ssr-prepass@1.0.8(react-is@19.1.0-canary-7b402084-20250107)(react@19.1.0-canary-056073de-20250109): + react-ssr-prepass@1.0.8(react-is@19.1.0-canary-518d06d2-20241219)(react@19.1.0-canary-056073de-20250109): dependencies: object-is: 1.0.2 react: 19.1.0-canary-056073de-20250109 - react-is: 19.1.0-canary-7b402084-20250107 + react-is: 19.1.0-canary-518d06d2-20241219 - react-style-singleton@2.2.1(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): + react-style-singleton@2.2.1(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219): dependencies: get-nonce: 1.0.1 invariant: 2.2.4 - react: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-518d06d2-20241219 tslib: 2.8.1 optionalDependencies: '@types/react': 19.0.0 @@ -31517,12 +31524,12 @@ snapshots: react-shallow-renderer: 16.15.0(react@19.1.0-canary-056073de-20250109) scheduler: 0.26.0-canary-056073de-20250109 - react-textarea-autosize@8.5.3(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): + react-textarea-autosize@8.5.3(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219): dependencies: '@babel/runtime': 7.22.5 - react: 19.1.0-canary-7b402084-20250107 - use-composed-ref: 1.3.0(react@19.1.0-canary-7b402084-20250107) - use-latest: 1.2.1(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) + react: 19.1.0-canary-518d06d2-20241219 + use-composed-ref: 1.3.0(react@19.1.0-canary-518d06d2-20241219) + use-latest: 1.2.1(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219) transitivePeerDependencies: - '@types/react' @@ -31541,7 +31548,7 @@ snapshots: react@19.1.0-canary-056073de-20250109: {} - react@19.1.0-canary-7b402084-20250107: {} + react@19.1.0-canary-518d06d2-20241219: {} read-cache@1.0.0: dependencies: @@ -31613,7 +31620,7 @@ snapshots: dependencies: '@types/normalize-package-data': 2.4.0 normalize-package-data: 2.5.0 - parse-json: 5.2.0 + parse-json: 5.0.0 type-fest: 0.6.0 read@1.0.7: @@ -33897,7 +33904,7 @@ snapshots: uri-js@4.4.1: dependencies: - punycode: 2.1.1 + punycode: 2.3.1 url-parse-lax@1.0.0: dependencies: @@ -33921,34 +33928,34 @@ snapshots: punycode: 1.4.1 qs: 6.13.1 - use-callback-ref@1.3.2(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): + use-callback-ref@1.3.2(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219): dependencies: - react: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-518d06d2-20241219 tslib: 2.8.1 optionalDependencies: '@types/react': 19.0.0 - use-composed-ref@1.3.0(react@19.1.0-canary-7b402084-20250107): + use-composed-ref@1.3.0(react@19.1.0-canary-518d06d2-20241219): dependencies: - react: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-518d06d2-20241219 - use-isomorphic-layout-effect@1.1.2(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): + use-isomorphic-layout-effect@1.1.2(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219): dependencies: - react: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-518d06d2-20241219 optionalDependencies: '@types/react': 19.0.0 - use-latest@1.2.1(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): + use-latest@1.2.1(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219): dependencies: - react: 19.1.0-canary-7b402084-20250107 - use-isomorphic-layout-effect: 1.1.2(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107) + react: 19.1.0-canary-518d06d2-20241219 + use-isomorphic-layout-effect: 1.1.2(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219) optionalDependencies: '@types/react': 19.0.0 - use-sidecar@1.1.2(@types/react@19.0.0)(react@19.1.0-canary-7b402084-20250107): + use-sidecar@1.1.2(@types/react@19.0.0)(react@19.1.0-canary-518d06d2-20241219): dependencies: detect-node-es: 1.1.0 - react: 19.1.0-canary-7b402084-20250107 + react: 19.1.0-canary-518d06d2-20241219 tslib: 2.8.1 optionalDependencies: '@types/react': 19.0.0 From 23dee53f610c5365026d480af6d581dc08fda3b4 Mon Sep 17 00:00:00 2001 From: Jam Balaya Date: Tue, 14 Jan 2025 19:14:37 +0900 Subject: [PATCH 31/65] docs: fix typos in 08-mutating-data.mdx (#74856) --- docs/01-app/01-getting-started/08-mutating-data.mdx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/01-app/01-getting-started/08-mutating-data.mdx b/docs/01-app/01-getting-started/08-mutating-data.mdx index 5ca1654826376..b4b689a79b4a7 100644 --- a/docs/01-app/01-getting-started/08-mutating-data.mdx +++ b/docs/01-app/01-getting-started/08-mutating-data.mdx @@ -38,7 +38,7 @@ export async function deletePost(formData) {} Server Functions can be inlined in Server Components by adding the `"use server"` directive to the top of the function body: ```tsx filename="app/page.tsx" switcher -export async default function Page() { +export default function Page() { // Server Action async function createPost() { 'use server' @@ -66,7 +66,7 @@ export default function Page() { It's not possible to define Server Functions in Client Components. However, you can invoke them in Client Components by importing them from a file that has the `"use server"` directive at the top of it: -```tsx filename="app/actions.ts" switcher +```ts filename="app/actions.ts" switcher 'use server' export async function createPost() {} @@ -139,7 +139,7 @@ export function Form() { } ``` -```tsx filename="app/actions.ts" switcher +```ts filename="app/actions.ts" switcher 'use server' export async function createPost(formData: FormData) { @@ -151,7 +151,7 @@ export async function createPost(formData: FormData) { } ``` -```jsx filename="app/actions.js" switcher +```js filename="app/actions.js" switcher 'use server' export async function createPost(formData) { @@ -189,6 +189,9 @@ export default function LikeButton({ initialLikes }: { initialLikes: number }) { > Like + + ) +} ``` ```jsx filename="app/like-button.js" switcher From b0c14f6b7e1c1631c311f5fd72f72b5bd26893e2 Mon Sep 17 00:00:00 2001 From: Jiwon Choi Date: Tue, 14 Jan 2025 18:22:50 +0800 Subject: [PATCH 32/65] [DevOverlay] Hydration Error Code Frame (#74822) This PR added Hydration Error Code Frame. ### Light https://github.com/user-attachments/assets/1e44cf6b-f3f3-498d-a771-876282d485b3 ### Dark https://github.com/user-attachments/assets/1098cb51-54ff-4bec-a12b-27d09b469be9 Closes NDX-611 --- .../internal/container/Errors.tsx | 8 +- .../component-stack-pseudo-html.stories.tsx | 65 ++++++++++ .../component-stack-pseudo-html.tsx | 119 ++++++++++++++---- 3 files changed, 163 insertions(+), 29 deletions(-) create mode 100644 packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/RuntimeError/component-stack-pseudo-html.stories.tsx diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/Errors.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/Errors.tsx index 69f0e65ae4847..e37b7895957dc 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/Errors.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/Errors.tsx @@ -333,12 +333,6 @@ export const styles = css` margin-bottom: var(--size-gap); font-size: var(--size-font-big); } - .nextjs__container_errors__component-stack { - margin: 0; - padding: 12px 32px; - color: var(--color-ansi-fg); - background: var(--color-ansi-bg); - } .nextjs-toast-errors-parent { cursor: pointer; transition: transform 0.2s ease; @@ -384,6 +378,6 @@ export const styles = css` margin-bottom: var(--size-3); } .error-overlay-notes-container { - padding: 0 var (--size-4); + padding: 0 var(--size-4); } ` diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/RuntimeError/component-stack-pseudo-html.stories.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/RuntimeError/component-stack-pseudo-html.stories.tsx new file mode 100644 index 0000000000000..d46a5fc58bbc1 --- /dev/null +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/RuntimeError/component-stack-pseudo-html.stories.tsx @@ -0,0 +1,65 @@ +import type { Meta, StoryObj } from '@storybook/react' +import { PseudoHtmlDiff } from './component-stack-pseudo-html' +import { withShadowPortal } from '../../storybook/with-shadow-portal' + +const meta: Meta = { + component: PseudoHtmlDiff, + parameters: { + layout: 'fullscreen', + }, + decorators: [withShadowPortal], +} + +export default meta +type Story = StoryObj + +const sampleComponentStack = [ + { + component: 'div', + canOpenInEditor: false, + }, + { + component: 'article', + canOpenInEditor: false, + }, + { + component: 'main', + canOpenInEditor: false, + }, + { + component: 'Home', + canOpenInEditor: false, + }, +] + +export const TextMismatch: Story = { + args: { + componentStackFrames: sampleComponentStack, + firstContent: 'Server rendered content', + secondContent: 'Client rendered content', + hydrationMismatchType: 'text', + reactOutputComponentDiff: undefined, + }, +} + +export const TextInTagMismatch: Story = { + args: { + componentStackFrames: sampleComponentStack, + firstContent: 'Mismatched content', + secondContent: 'p', + hydrationMismatchType: 'text-in-tag', + reactOutputComponentDiff: undefined, + }, +} + +export const ReactUnifiedMismatch: Story = { + args: { + componentStackFrames: sampleComponentStack, + hydrationMismatchType: 'tag', + reactOutputComponentDiff: ` + +
+-

Server content

++

Client content

`, + }, +} diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/RuntimeError/component-stack-pseudo-html.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/RuntimeError/component-stack-pseudo-html.tsx index 31708915277b5..f340fd9c74991 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/RuntimeError/component-stack-pseudo-html.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/RuntimeError/component-stack-pseudo-html.tsx @@ -98,10 +98,19 @@ export function PseudoHtmlDiff({ sign === '+' ? 'add' : 'remove' } > - {sign} - {spaces} - {trimmedLine} - {'\n'} + {sign === '+' ? : } + + {/* Slice 2 spaces for the icon */} + {spaces.slice(2)} + {trimmedLine} + {'\n'} + ) } else if (currentComponentIndex >= 0) { @@ -295,13 +304,15 @@ export function PseudoHtmlDiff({ return (
- + + +
         {htmlComponents}
       
@@ -309,27 +320,69 @@ export function PseudoHtmlDiff({ ) } +function PlusIcon() { + return ( + + + + ) +} + +function MinusIcon() { + return ( + + + + ) +} + export const PSEUDO_HTML_DIFF_STYLES = css` [data-nextjs-container-errors-pseudo-html] { - position: relative; + border-top: 1px solid var(--color-gray-400); + background: var(--color-background-200); + color: var(--color-syntax-constant); + font-family: var(--font-stack-monospace); + font-size: var(--size-font-smaller); + line-height: var(--size-4); } [data-nextjs-container-errors-pseudo-html-collapse] { - position: absolute; - left: 10px; - top: 10px; - color: inherit; - background: none; - border: none; - padding: 0; + all: unset; + &:focus { + outline: none; + } } [data-nextjs-container-errors-pseudo-html--diff='add'] { - color: var(--color-ansi-green); + background: var(--color-green-300); } [data-nextjs-container-errors-pseudo-html--diff='remove'] { - color: var(--color-ansi-red); + background: var(--color-red-300); } [data-nextjs-container-errors-pseudo-html--tag-error] { - color: var(--color-ansi-red); + background: var(--color-red-300); font-weight: bold; } /* hide but text are still accessible in DOM */ @@ -340,4 +393,26 @@ export const PSEUDO_HTML_DIFF_STYLES = css` [data-nextjs-container-errors-pseudo-html--tag-adjacent='false'] { color: var(--color-accents-1); } + + [data-nextjs-container-errors-pseudo-html] > span { + display: block; + height: var(--size-5); + } + [data-nextjs-container-errors-pseudo-html] > pre > code > span { + display: block; + height: var(--size-5); + } + + .nextjs__container_errors__component-stack { + margin: 0; + } + .error-overlay-hydration-error-collapsed { + padding-left: var(--size-4); + } + .error-overlay-hydration-error-diff-plus-icon { + color: var(--color-green-900); + } + .error-overlay-hydration-error-diff-minus-icon { + color: var(--color-red-900); + } ` From e4cffaead070ff992a4f8017fcc8b4d807e536fa Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Tue, 14 Jan 2025 11:39:16 +0100 Subject: [PATCH 33/65] fix: when metadatabase is set we should not warn (#74840) --- .../metadata/resolvers/resolve-opengraph.ts | 1 + ...ata-warnings-missing-metadatabase.test.ts} | 0 ...etadata-warnings-with-metadatabase.test.ts | 73 +++++++++++++++++++ 3 files changed, 74 insertions(+) rename test/e2e/app-dir/metadata-warnings/{index.test.ts => metadata-warnings-missing-metadatabase.test.ts} (100%) create mode 100644 test/e2e/app-dir/metadata-warnings/metadata-warnings-with-metadatabase.test.ts diff --git a/packages/next/src/lib/metadata/resolvers/resolve-opengraph.ts b/packages/next/src/lib/metadata/resolvers/resolve-opengraph.ts index f915bf399990c..cbc574cb00984 100644 --- a/packages/next/src/lib/metadata/resolvers/resolve-opengraph.ts +++ b/packages/next/src/lib/metadata/resolvers/resolve-opengraph.ts @@ -83,6 +83,7 @@ function resolveAndValidateImage( // devtools. const shouldWarn = !isUsingVercelSystemEnvironmentVariables && + !metadataBase && (process.env.NODE_ENV === 'production' || !isStaticMetadataRouteFile) if (shouldWarn) { diff --git a/test/e2e/app-dir/metadata-warnings/index.test.ts b/test/e2e/app-dir/metadata-warnings/metadata-warnings-missing-metadatabase.test.ts similarity index 100% rename from test/e2e/app-dir/metadata-warnings/index.test.ts rename to test/e2e/app-dir/metadata-warnings/metadata-warnings-missing-metadatabase.test.ts diff --git a/test/e2e/app-dir/metadata-warnings/metadata-warnings-with-metadatabase.test.ts b/test/e2e/app-dir/metadata-warnings/metadata-warnings-with-metadatabase.test.ts new file mode 100644 index 0000000000000..4be3e870d1f10 --- /dev/null +++ b/test/e2e/app-dir/metadata-warnings/metadata-warnings-with-metadatabase.test.ts @@ -0,0 +1,73 @@ +import { nextTestSetup } from 'e2e-utils' + +const METADATA_BASE_WARN_STRING = + 'metadataBase property in metadata export is not set for resolving social open graph or twitter images,' + +describe('app dir - metadata missing metadataBase', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname, + skipDeployment: true, + overrideFiles: { + 'app/layout.js': ` + export default function Layout({ children }) { + return ( +
+ {children} +
+ ) + } + + export const metadata = { + metadataBase: new URL('https://example.com'), + } + `, + }, + }) + + if (skipped) { + return + } + + // If it's start mode, we get the whole logs since they're from build process. + // If it's development mode, we get the logs after request + function getCliOutput(logStartPosition: number) { + return isNextDev ? next.cliOutput.slice(logStartPosition) : next.cliOutput + } + + it('should not show warning in vercel deployment output in default build output mode', async () => { + const logStartPosition = next.cliOutput.length + await next.fetch('/og-image-convention') + const output = getCliOutput(logStartPosition) + + expect(output).not.toInclude(METADATA_BASE_WARN_STRING) + }) + + it('should not warn metadataBase is missing and a relative URL is used', async () => { + const logStartPosition = next.cliOutput.length + await next.fetch('/relative-url-og') + const output = getCliOutput(logStartPosition) + + expect(output).not.toInclude(METADATA_BASE_WARN_STRING) + }) + + it('should warn for unsupported metadata properties', async () => { + const logStartPosition = next.cliOutput.length + await next.fetch('/unsupported-metadata') + const output = getCliOutput(logStartPosition) + expect(output).toInclude( + 'Unsupported metadata themeColor is configured in metadata export in /unsupported-metadata. Please move it to viewport' + ) + expect(output).toInclude( + 'Read more: https://nextjs.org/docs/app/api-reference/functions/generate-viewport' + ) + }) + + it('should not warn for viewport properties during manually merging metadata', async () => { + const outputLength = next.cliOutput.length + await next.fetch('/merge') + // Should not log the unsupported metadata viewport warning in the output + // during merging the metadata, if the value is still nullable. + const output = next.cliOutput.slice(outputLength) + expect(output).not.toContain('Unsupported metadata viewport') + }) +}) From 0d1dd9ca9c63697e91e0e3fa5c640a9f48dd3cf2 Mon Sep 17 00:00:00 2001 From: Jiwon Choi Date: Tue, 14 Jan 2025 21:32:26 +0900 Subject: [PATCH 34/65] [DevOverlay] Sync Terminal component with CodeFrame for Build Error (#74831) This PR synced the Terminal component style with the CodeFrame component for the Build Error. Technically, we may merge those two, but we haven't yet, as we need to consider more edge cases for the Build Error. ### Light ![CleanShot 2025-01-14 at 03 58 59](https://github.com/user-attachments/assets/f790a394-7beb-449a-af26-c9e101e6c005) ### Dark ![CleanShot 2025-01-14 at 03 55 52](https://github.com/user-attachments/assets/f1955dfd-8a8f-4a66-ba9a-b341e71494fc) Closes NDX-644 --- .../components/CodeFrame/CodeFrame.tsx | 15 +-- .../components/Terminal/EditorLink.tsx | 26 ++++- .../internal/components/Terminal/Terminal.tsx | 101 ++++++++++++++++-- .../internal/components/Terminal/styles.tsx | 55 ---------- .../components/Terminal/terminal.stories.tsx | 42 ++++++++ .../_experimental/internal/icons/file.tsx | 18 ++++ .../internal/styles/ComponentStyles.tsx | 6 +- 7 files changed, 183 insertions(+), 80 deletions(-) delete mode 100644 packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Terminal/styles.tsx create mode 100644 packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Terminal/terminal.stories.tsx create mode 100644 packages/next/src/client/components/react-dev-overlay/_experimental/internal/icons/file.tsx diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/CodeFrame/CodeFrame.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/CodeFrame/CodeFrame.tsx index 224e466e9b88f..ee870c4b0bc4f 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/CodeFrame/CodeFrame.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/CodeFrame/CodeFrame.tsx @@ -9,6 +9,7 @@ import { getFrameSource } from '../../helpers/stack-frame' import { useOpenInEditor } from '../../helpers/use-open-in-editor' import { noop as css } from '../../helpers/noop-template' import { ExternalIcon } from '../../icons/external' +import { FileIcon } from '../../icons/file' export type CodeFrameProps = { stackFrame: StackFrame; codeFrame: string } @@ -156,17 +157,3 @@ export const CODE_FRAME_STYLES = css` margin-right: 6px; } ` - -// TODO: Add more Icons (react, next, etc.) -function FileIcon() { - return ( - - - - ) -} diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Terminal/EditorLink.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Terminal/EditorLink.tsx index 518c29e4c7023..61386cc1d811d 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Terminal/EditorLink.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Terminal/EditorLink.tsx @@ -1,5 +1,5 @@ -import React from 'react' import { useOpenInEditor } from '../../helpers/use-open-in-editor' +import { noop as css } from '../../helpers/noop-template' type EditorLinkProps = { file: string @@ -48,3 +48,27 @@ export function EditorLink({ file, isSourceFile, location }: EditorLinkProps) {
) } + +export const EDITOR_LINK_STYLES = css` + [data-with-open-in-editor-link] svg { + width: auto; + height: var(--size-font-small); + margin-left: var(--size-gap); + } + [data-with-open-in-editor-link] { + cursor: pointer; + } + [data-with-open-in-editor-link]:hover { + text-decoration: underline dotted; + } + [data-with-open-in-editor-link-import-trace] { + margin-left: var(--size-gap-double); + } + [data-with-open-in-editor-link-source-file] { + border-bottom: 1px solid var(--color-ansi-bright-black); + display: flex; + align-items: center; + justify-content: space-between; + line-break: anywhere; + } +` diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Terminal/Terminal.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Terminal/Terminal.tsx index 57ab805437483..af2bdb0a31b3a 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Terminal/Terminal.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Terminal/Terminal.tsx @@ -2,6 +2,11 @@ import Anser from 'next/dist/compiled/anser' import * as React from 'react' import { HotlinkedText } from '../hot-linked-text' import { EditorLink } from './EditorLink' +import { ExternalIcon } from '../../icons/external' +import { noop as css } from '../../helpers/noop-template' +import { getFrameSource } from '../../helpers/stack-frame' +import { useOpenInEditor } from '../../helpers/use-open-in-editor' +import { FileIcon } from '../../icons/file' export type TerminalProps = { content: string } @@ -70,16 +75,37 @@ export const Terminal: React.FC = function Terminal({ }) }, [source]) + const open = useOpenInEditor({ + file: file?.fileName, + lineNumber: file?.location?.line, + column: file?.location?.column, + }) + + const stackFrame = { + file: file?.fileName ?? null, + methodName: '', + arguments: [], + lineNumber: file?.location?.line ?? null, + column: file?.location?.column ?? null, + } + return (
- {file && ( - - )} +
+

+ + + {getFrameSource(stackFrame)} @{' '} + + + +

+
         {decoded.map((entry, index) => (
            = function Terminal({
     
) } + +export const TERMINAL_STYLES = css` + [data-nextjs-terminal] { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 1; + flex: 1 0 0; + + background-color: var(--color-background-200); + overflow: hidden; + color: var(--color-gray-1000); + text-overflow: ellipsis; + font-family: var(--font-stack-monospace); + font-size: 12px; + line-height: 16px; + } + + .terminal-header { + border-top: 1px solid var(--color-gray-400); + border-bottom: 1px solid var(--color-gray-400); + } + + [data-nextjs-terminal]::selection, + [data-nextjs-terminal] *::selection { + background-color: var(--color-ansi-selection); + } + + [data-nextjs-terminal] * { + color: inherit; + background-color: transparent; + font-family: var(--font-stack-monospace); + } + + [data-nextjs-terminal] > * { + margin: 0; + padding: calc(var(--size-gap) + var(--size-gap-half)) + calc(var(--size-gap-double) + var(--size-gap-half)); + } + + [data-nextjs-terminal] > div > p { + display: flex; + align-items: center; + justify-content: space-between; + cursor: pointer; + margin: 0; + } + [data-nextjs-terminal] > div > p:hover { + text-decoration: underline dotted; + } + [data-nextjs-terminal] div > pre { + overflow: hidden; + display: inline-block; + } + + [data-nextjs-terminal] svg { + color: var(--color-gray-900); + margin-right: 6px; + } +` diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Terminal/styles.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Terminal/styles.tsx deleted file mode 100644 index 5ed1fc4565138..0000000000000 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Terminal/styles.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { noop as css } from '../../helpers/noop-template' - -const styles = css` - [data-nextjs-terminal] { - border-radius: var(--size-gap-half); - background-color: var(--color-ansi-bg); - color: var(--color-ansi-fg); - } - [data-nextjs-terminal]::selection, - [data-nextjs-terminal] *::selection { - background-color: var(--color-ansi-selection); - } - [data-nextjs-terminal] * { - color: inherit; - background-color: transparent; - font-family: var(--font-stack-monospace); - } - [data-nextjs-terminal] > * { - margin: 0; - padding: calc(var(--size-gap) + var(--size-gap-half)) - calc(var(--size-gap-double) + var(--size-gap-half)); - } - - [data-nextjs-terminal] pre { - white-space: pre-wrap; - word-break: break-word; - } - - [data-with-open-in-editor-link] svg { - width: auto; - height: var(--size-font-small); - margin-left: var(--size-gap); - } - [data-with-open-in-editor-link] { - cursor: pointer; - } - [data-with-open-in-editor-link]:hover { - text-decoration: underline dotted; - } - [data-with-open-in-editor-link-source-file] { - border-bottom: 1px solid var(--color-ansi-bright-black); - display: flex; - align-items: center; - justify-content: space-between; - line-break: anywhere; - } - [data-with-open-in-editor-link-import-trace] { - margin-left: var(--size-gap-double); - } - [data-nextjs-terminal] a { - color: inherit; - } -` - -export { styles } diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Terminal/terminal.stories.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Terminal/terminal.stories.tsx new file mode 100644 index 0000000000000..b32ec6077ff45 --- /dev/null +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Terminal/terminal.stories.tsx @@ -0,0 +1,42 @@ +import type { Meta, StoryObj } from '@storybook/react' +import { Terminal } from './Terminal' +import { withShadowPortal } from '../../storybook/with-shadow-portal' + +const meta: Meta = { + component: Terminal, + parameters: { + layout: 'fullscreen', + }, + decorators: [withShadowPortal], +} + +export default meta +type Story = StoryObj + +export const SimpleTerminal: Story = { + args: { + content: + './app/page.tsx:10:5\n\u001b[31mError:\u001b[39m Something went wrong\n at Home (./app/page.tsx:10:5)', + }, +} + +export const WithImportTrace: Story = { + args: { + content: `./components/Button.tsx:15:3 +ReactServerComponentsError: Failed to load component +Import trace for requested module: +./pages/index.tsx +./components/Layout.tsx +./components/Button.tsx`, + }, +} + +export const WithAnsiColors: Story = { + args: { + content: `./app/error.tsx:5:10 +\u001b[31m\u001b[1mError:\u001b[22m\u001b[39m Failed to compile +\u001b[36m console\u001b[39m.\u001b[33mlog\u001b[39m('Debug message') +\u001b[32m✓\u001b[39m Success message +\u001b[31m✕\u001b[39m Error message`, + }, +} diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/icons/file.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/icons/file.tsx new file mode 100644 index 0000000000000..6cb49c55333ad --- /dev/null +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/icons/file.tsx @@ -0,0 +1,18 @@ +export function FileIcon(props: React.SVGProps) { + return ( + + + + ) +} diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/styles/ComponentStyles.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/styles/ComponentStyles.tsx index ea76455226863..9f4198006e245 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/styles/ComponentStyles.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/styles/ComponentStyles.tsx @@ -5,7 +5,7 @@ import { styles as bottomStacks } from '../components/Errors/error-overlay-botto import { styles as pagination } from '../components/Errors/error-overlay-pagination/error-overlay-pagination' import { styles as overlay } from '../components/Overlay/styles' import { styles as footer } from '../components/Errors/error-overlay-footer/error-overlay-footer' -import { styles as terminal } from '../components/Terminal/styles' +import { TERMINAL_STYLES } from '../components/Terminal/Terminal' import { styles as toast } from '../components/Toast' import { styles as versionStaleness } from '../components/VersionStalenessInfo/VersionStalenessInfo' import { styles as buildErrorStyles } from '../container/BuildError' @@ -15,6 +15,7 @@ import { COPY_BUTTON_STYLES } from '../components/copy-button' import { CALL_STACK_FRAME_STYLES } from '../components/call-stack-frame/call-stack-frame' import { styles as devToolsIndicator } from '../components/Errors/dev-tools-indicator/styles' import { noop as css } from '../helpers/noop-template' +import { EDITOR_LINK_STYLES } from '../components/Terminal/EditorLink' export function ComponentStyles() { return ( @@ -30,7 +31,8 @@ export function ComponentStyles() { ${bottomStacks} ${pagination} ${CODE_FRAME_STYLES} - ${terminal} + ${TERMINAL_STYLES} + ${EDITOR_LINK_STYLES} ${buildErrorStyles} ${containerErrorStyles} ${containerRuntimeErrorStyles} From 11eaeb23ed3fc2cc2434ba938ed6659705bea195 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Tue, 14 Jan 2025 13:48:58 +0100 Subject: [PATCH 35/65] [Turbopack] add count method to storage (#74830) add count method to storage avoid tracking children count --- .../backend/operation/cleanup_old_edges.rs | 4 +-- .../src/backend/operation/connect_child.rs | 6 ++--- .../src/backend/operation/mod.rs | 6 +++++ .../src/backend/storage.rs | 11 ++++++++ .../crates/turbo-tasks-backend/src/data.rs | 6 +++++ .../src/derive/key_value_pair_macro.rs | 25 +++++++++++++++++++ 6 files changed, 52 insertions(+), 6 deletions(-) diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/cleanup_old_edges.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/cleanup_old_edges.rs index 9dcdaa499c9ad..05add4cd36918 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backend/operation/cleanup_old_edges.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/cleanup_old_edges.rs @@ -13,7 +13,7 @@ use crate::{ invalidate::{make_task_dirty, TaskDirtyCause}, AggregatedDataUpdate, ExecuteContext, Operation, TaskGuard, }, - storage::{update_count, update_ucount_and_get}, + storage::update_count, TaskDataCategory, }, data::{CachedDataItemKey, CellRef, CollectibleRef, CollectiblesRef}, @@ -82,8 +82,6 @@ impl Operation for CleanupOldEdgesOperation { for &child_id in children.iter() { task.remove(&CachedDataItemKey::Child { task: child_id }); } - let remove_children_count = u32::try_from(children.len()).unwrap(); - update_ucount_and_get!(task, ChildrenCount, -remove_children_count); if is_aggregating_node(get_aggregation_number(&task)) { queue.push(AggregationUpdateJob::InnerOfUpperLostFollowers { upper_id: task_id, diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/connect_child.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/connect_child.rs index e6befd263a406..6180b70a3b8fa 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backend/operation/connect_child.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/connect_child.rs @@ -12,7 +12,7 @@ use crate::{ }, is_root_node, ExecuteContext, Operation, TaskGuard, }, - storage::{get, update_ucount_and_get}, + storage::{count, get}, TaskDataCategory, }, data::{CachedDataItem, CachedDataItemKey}, @@ -60,8 +60,8 @@ impl ConnectChildOperation { }) { let mut queue = AggregationUpdateQueue::new(); - // Update the children count - let children_count = update_ucount_and_get!(parent_task, ChildrenCount, 1); + // Get the children count + let children_count = count!(parent_task, Child); // Compute future parent aggregation number based on the number of children let current_parent_aggregation = get!(parent_task, AggregationNumber) diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/mod.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/mod.rs index 99d84b563ff1d..90da3175c7197 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backend/operation/mod.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/mod.rs @@ -371,6 +371,7 @@ pub trait TaskGuard: Debug { fn get(&self, key: &CachedDataItemKey) -> Option>; fn get_mut(&mut self, key: &CachedDataItemKey) -> Option>; fn has_key(&self, key: &CachedDataItemKey) -> bool; + fn count(&self, ty: CachedDataItemType) -> usize; fn iter( &self, ty: CachedDataItemType, @@ -600,6 +601,11 @@ impl TaskGuard for TaskGuardImpl<'_, B> { self.task.has_key(key) } + fn count(&self, ty: CachedDataItemType) -> usize { + self.check_access(ty.category()); + self.task.count(ty) + } + fn iter( &self, ty: CachedDataItemType, diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/storage.rs b/turbopack/crates/turbo-tasks-backend/src/backend/storage.rs index 328cca2d53c2b..c9715413e8fed 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backend/storage.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backend/storage.rs @@ -199,6 +199,10 @@ impl InnerStorage { .unwrap_or_default() } + pub fn count(&self, ty: CachedDataItemType) -> usize { + self.get_map(ty).map(|m| m.len()).unwrap_or_default() + } + pub fn iter( &self, ty: CachedDataItemType, @@ -321,6 +325,12 @@ impl DerefMut for StorageWriteGuard<'_> { } } +macro_rules! count { + ($task:ident, $key:ident) => {{ + $task.count($crate::data::CachedDataItemType::$key) + }}; +} + macro_rules! get { ($task:ident, $key:ident $input:tt) => {{ #[allow(unused_imports)] @@ -516,6 +526,7 @@ macro_rules! remove { }; } +pub(crate) use count; pub(crate) use get; pub(crate) use get_many; pub(crate) use get_mut; diff --git a/turbopack/crates/turbo-tasks-backend/src/data.rs b/turbopack/crates/turbo-tasks-backend/src/data.rs index 7cecd0caca081..5ed4732cc8d91 100644 --- a/turbopack/crates/turbo-tasks-backend/src/data.rs +++ b/turbopack/crates/turbo-tasks-backend/src/data.rs @@ -577,6 +577,12 @@ impl CachedDataItemKey { matches!(self, CachedDataItemKey::CellData { .. }) } + pub fn category(&self) -> TaskDataCategory { + self.ty().category() + } +} + +impl CachedDataItemType { pub fn category(&self) -> TaskDataCategory { match self { Self::Collectible { .. } diff --git a/turbopack/crates/turbo-tasks-macros/src/derive/key_value_pair_macro.rs b/turbopack/crates/turbo-tasks-macros/src/derive/key_value_pair_macro.rs index 05692a23053f7..1d8203dfa977a 100644 --- a/turbopack/crates/turbo-tasks-macros/src/derive/key_value_pair_macro.rs +++ b/turbopack/crates/turbo-tasks-macros/src/derive/key_value_pair_macro.rs @@ -162,6 +162,11 @@ pub fn derive_key_value_pair(input: TokenStream) -> TokenStream { storage.is_none() } }, + len: quote! { + #storage_name::#variant_name { storage } => { + if storage.is_some() { 1 } else { 0 } + } + }, iter: quote! { #storage_name::#variant_name { storage } => { #iter_name::#variant_name(storage.iter()) @@ -234,6 +239,11 @@ pub fn derive_key_value_pair(input: TokenStream) -> TokenStream { storage.is_empty() } }, + len: quote! { + #storage_name::#variant_name { storage } => { + storage.len() + } + }, iter: quote! { #storage_name::#variant_name { storage } => { #iter_name::#variant_name(storage.iter()) @@ -307,6 +317,11 @@ pub fn derive_key_value_pair(input: TokenStream) -> TokenStream { storage.is_empty() } }, + len: quote! { + #storage_name::#variant_name { storage } => { + storage.len() + } + }, iter: quote! { #storage_name::#variant_name { storage } => { #iter_name::#variant_name(storage.iter()) @@ -344,6 +359,7 @@ pub fn derive_key_value_pair(input: TokenStream) -> TokenStream { .iter() .map(|decl| &decl.is_empty) .collect::>(); + let storage_len = storage.iter().map(|decl| &decl.len).collect::>(); let storage_iter = storage.iter().map(|decl| &decl.iter).collect::>(); let storage_iterator = storage .iter() @@ -590,6 +606,14 @@ pub fn derive_key_value_pair(input: TokenStream) -> TokenStream { } } + pub fn len(&self) -> usize { + match self { + #( + #storage_len + )* + } + } + pub fn iter(&self) -> #iter_name { match self { #( @@ -764,6 +788,7 @@ struct StorageDecl { get_mut: proc_macro2::TokenStream, shrink_to_fit: proc_macro2::TokenStream, is_empty: proc_macro2::TokenStream, + len: proc_macro2::TokenStream, iter: proc_macro2::TokenStream, iterator: proc_macro2::TokenStream, From 92e3200d0ed27addf76aa8f1f6f5a3594973782b Mon Sep 17 00:00:00 2001 From: Jude Gao Date: Tue, 14 Jan 2025 08:16:23 -0500 Subject: [PATCH 36/65] feat: animated dev build/render indicator (#74833) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Note: This is part of the new dev overlay initiative, so it's only enabled when the new overlay experience is turned on. There are two kinds of loading states, namely, `build` and `render`. - you will see the `build` indicator when you make a client navigation that has not been built to a new route OR during an HMR update - you will see the `render` indicator while React processes the router transition -- callout: we currently only support `render` status in App Router Here is a quick demo of what it looks like - you will see that the `build` is using a more muted colour than `render`:
🎥 Video uploaded on Graphite:
Note on implementation detail: We previously had a mechanism to surface the build status. We extended that mechanism to display the status in the new indicator UI without adding new HMR event bindings. Since the render status is a new requirement and specific to the new overlay, it is directly coupled with the overlay and plumbed separately from the build status. --- .../dev-tools-indicator.tsx | 7 + .../internal/dev-render-indicator.tsx | 37 ++++ .../internal/next-logo.stories.tsx | 32 +++ .../internal/next-logo.tsx | 193 ++++++++++++----- ...use-sync-dev-render-indicator-internal.tsx | 16 ++ .../use-sync-dev-render-indicator.tsx | 20 ++ .../next/src/client/components/use-reducer.ts | 15 +- .../internal/dev-build-indicator.ts | 197 +----------------- .../internal/initialize-for-new-overlay.ts | 35 ++++ .../internal/initialize-for-old-overlay.ts | 194 +++++++++++++++++ 10 files changed, 501 insertions(+), 245 deletions(-) create mode 100644 packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/dev-render-indicator.tsx create mode 100644 packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/use-sync-dev-render-indicator-internal.tsx create mode 100644 packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/use-sync-dev-render-indicator.tsx create mode 100644 packages/next/src/client/dev/dev-build-indicator/internal/initialize-for-new-overlay.ts create mode 100644 packages/next/src/client/dev/dev-build-indicator/internal/initialize-for-old-overlay.ts diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/dev-tools-indicator.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/dev-tools-indicator.tsx index 0d06b39eeea36..b914bd82afac8 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/dev-tools-indicator.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/dev-tools-indicator.tsx @@ -3,6 +3,8 @@ import type { ReadyRuntimeError } from '../../../helpers/get-error-by-type' import { Toast } from '../../Toast' import React, { useState } from 'react' import { NextLogo } from './internal/next-logo' +import { useIsDevBuilding } from '../../../../../../../dev/dev-build-indicator/internal/initialize-for-new-overlay' +import { useIsDevRendering } from './internal/dev-render-indicator' // TODO: test a11y // TODO: add E2E tests to cover different scenarios @@ -51,6 +53,9 @@ const DevToolsPopover = ({ }) => { // TODO: close when clicking outside + const isDevBuilding = useIsDevBuilding() + const isDevRendering = useIsDevRendering() + const [isPopoverOpen, setIsPopoverOpen] = useState(false) const togglePopover = () => setIsPopoverOpen((prev) => !prev) return ( @@ -58,6 +63,8 @@ const DevToolsPopover = ({ void> = [] + +const subscribe = (listener: () => void) => { + listeners.push(listener) + return () => { + listeners = listeners.filter((l) => l !== listener) + } +} + +const getSnapshot = () => isVisible + +const show = () => { + isVisible = true + listeners.forEach((listener) => listener()) +} + +const hide = () => { + isVisible = false + listeners.forEach((listener) => listener()) +} + +export function useIsDevRendering() { + return useSyncExternalStore(subscribe, getSnapshot) +} + +export const devRenderIndicator = { + show, + hide, +} diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/next-logo.stories.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/next-logo.stories.tsx index 810c5e46fca5e..55f4c3881c397 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/next-logo.stories.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/next-logo.stories.tsx @@ -17,23 +17,55 @@ type Story = StoryObj export const NoIssues: Story = { args: { issueCount: 0, + isDevBuilding: false, + isDevRendering: false, }, } export const SingleIssue: Story = { args: { issueCount: 1, + isDevBuilding: false, + isDevRendering: false, }, } export const MultipleIssues: Story = { args: { issueCount: 5, + isDevBuilding: false, + isDevRendering: false, }, } export const ManyIssues: Story = { args: { issueCount: 99, + isDevBuilding: false, + isDevRendering: false, + }, +} + +export const Building: Story = { + args: { + issueCount: 0, + isDevBuilding: true, + isDevRendering: false, + }, +} + +export const BuildingWithError: Story = { + args: { + issueCount: 1, + isDevBuilding: true, + isDevRendering: false, + }, +} + +export const Rendering: Story = { + args: { + issueCount: 0, + isDevBuilding: false, + isDevRendering: true, }, } diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/next-logo.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/next-logo.tsx index 533b44315da83..2953d5158ef46 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/next-logo.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/next-logo.tsx @@ -1,13 +1,84 @@ +import { useEffect, useState } from 'react' +import { noop as css } from '../../../../../../internal/helpers/noop-template' + interface Props extends React.ComponentProps<'svg'> { issueCount: number onClick: () => void + isDevBuilding: boolean + isDevRendering: boolean } -export const NextLogo = ({ issueCount, onClick, ...props }: Props) => { - // TODO: animate it based on build status.. - // TODO: add red dot when there are errors + change color of the logo +export const NextLogo = ({ + issueCount, + onClick, + isDevBuilding, + isDevRendering, + ...props +}: Props) => { + const [isLoading, setIsLoading] = useState(false) + + // Only shows the loading state after a 200ms delay when building or rendering, + // to avoid flashing the loading state for quick updates + useEffect(() => { + if (isDevBuilding || isDevRendering) { + const timeout = setTimeout(() => { + setIsLoading(true) + }, 200) + return () => clearTimeout(timeout) + } else { + setIsLoading(false) + } + }, [isDevBuilding, isDevRendering]) + return (
+ + {/* Add issue count circle if issues exist */} {issueCount > 0 ? (
{ width="36" height="36" rx="18" - fill={issueCount > 0 ? '#CA2A30' : '#551A1E'} - /> - - 0 ? '#CA2A30' : '#2A2A2A'} /> + + + + + + + + + + + + + + + + + + + { - - - - - - - - - - -
diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/use-sync-dev-render-indicator-internal.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/use-sync-dev-render-indicator-internal.tsx new file mode 100644 index 0000000000000..3102d06104956 --- /dev/null +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/use-sync-dev-render-indicator-internal.tsx @@ -0,0 +1,16 @@ +import { useEffect, useTransition } from 'react' +import { devRenderIndicator } from './dev-render-indicator' + +export const useSyncDevRenderIndicatorInternal = () => { + const [isPending, startTransition] = useTransition() + + useEffect(() => { + if (isPending) { + devRenderIndicator.show() + } else { + devRenderIndicator.hide() + } + }, [isPending]) + + return startTransition +} diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/use-sync-dev-render-indicator.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/use-sync-dev-render-indicator.tsx new file mode 100644 index 0000000000000..a02d117e27149 --- /dev/null +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/use-sync-dev-render-indicator.tsx @@ -0,0 +1,20 @@ +const NOOP = (fn: () => void) => fn() + +/** + * Returns a transition function that can be used to wrap router actions. + * This allows us to tap into the transition state of the router as an + * approximation of React render time. + */ +export const useSyncDevRenderIndicator = () => { + let syncDevRenderIndicator = NOOP + + if (process.env.NODE_ENV === 'development') { + const { useSyncDevRenderIndicatorInternal } = + require('./internal/use-sync-dev-render-indicator-internal') as typeof import('./internal/use-sync-dev-render-indicator-internal') + + // eslint-disable-next-line react-hooks/rules-of-hooks + syncDevRenderIndicator = useSyncDevRenderIndicatorInternal() + } + + return syncDevRenderIndicator +} diff --git a/packages/next/src/client/components/use-reducer.ts b/packages/next/src/client/components/use-reducer.ts index 38906e8695eab..3da5ab0a42e99 100644 --- a/packages/next/src/client/components/use-reducer.ts +++ b/packages/next/src/client/components/use-reducer.ts @@ -1,13 +1,13 @@ import type { Dispatch } from 'react' -import React, { use } from 'react' -import { useCallback } from 'react' +import React, { use, useCallback } from 'react' +import { isThenable } from '../../shared/lib/is-thenable' +import type { AppRouterActionQueue } from '../../shared/lib/router/action-queue' import type { AppRouterState, ReducerActions, ReducerState, } from './router-reducer/router-reducer-types' -import type { AppRouterActionQueue } from '../../shared/lib/router/action-queue' -import { isThenable } from '../../shared/lib/is-thenable' +import { useSyncDevRenderIndicator } from './react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/use-sync-dev-render-indicator' export function useUnwrapState(state: ReducerState): AppRouterState { // reducer actions can be async, so sometimes we need to suspend until the state is resolved @@ -23,12 +23,15 @@ export function useReducer( actionQueue: AppRouterActionQueue ): [ReducerState, Dispatch] { const [state, setState] = React.useState(actionQueue.state) + const syncDevRenderIndicator = useSyncDevRenderIndicator() const dispatch = useCallback( (action: ReducerActions) => { - actionQueue.dispatch(action, setState) + syncDevRenderIndicator(() => { + actionQueue.dispatch(action, setState) + }) }, - [actionQueue] + [actionQueue, syncDevRenderIndicator] ) return [state, dispatch] diff --git a/packages/next/src/client/dev/dev-build-indicator/internal/dev-build-indicator.ts b/packages/next/src/client/dev/dev-build-indicator/internal/dev-build-indicator.ts index f8d69a6442792..34796b1b1cd37 100644 --- a/packages/next/src/client/dev/dev-build-indicator/internal/dev-build-indicator.ts +++ b/packages/next/src/client/dev/dev-build-indicator/internal/dev-build-indicator.ts @@ -1,6 +1,3 @@ -type VerticalPosition = 'top' | 'bottom' -type HorizonalPosition = 'left' | 'right' - const NOOP = () => {} export const devBuildIndicator = { @@ -9,191 +6,11 @@ export const devBuildIndicator = { /** Hides build indicator when Next.js finishes compiling. Requires initialize() first. */ hide: NOOP, /** Sets up the build indicator UI component. Call this before using show/hide. */ - initialize, -} - -function initialize(position = 'bottom-right') { - const shadowHost = document.createElement('div') - const [verticalProperty, horizontalProperty] = position.split('-', 2) as [ - VerticalPosition, - HorizonalPosition, - ] - shadowHost.id = '__next-build-indicator' - // Make sure container is fixed and on a high zIndex so it shows - shadowHost.style.position = 'fixed' - // Ensure container's position to be top or bottom (default) - shadowHost.style[verticalProperty] = '10px' - // Ensure container's position to be left or right (default) - shadowHost.style[horizontalProperty] = '20px' - shadowHost.style.width = '0' - shadowHost.style.height = '0' - shadowHost.style.zIndex = '99999' - document.body.appendChild(shadowHost) - - let shadowRoot - let prefix = '' - - if (shadowHost.attachShadow) { - shadowRoot = shadowHost.attachShadow({ mode: 'open' }) - } else { - // If attachShadow is undefined then the browser does not support - // the Shadow DOM, we need to prefix all the names so there - // will be no conflicts - shadowRoot = shadowHost - prefix = '__next-build-indicator-' - } - - // Container - const container = createContainer(prefix) - shadowRoot.appendChild(container) - - // CSS - const css = createCss(prefix, { horizontalProperty, verticalProperty }) - shadowRoot.appendChild(css) - - // State - let isVisible = false - let isBuilding = false - let timeoutId: null | ReturnType = null - - devBuildIndicator.show = () => { - timeoutId && clearTimeout(timeoutId) - isVisible = true - isBuilding = true - updateContainer() - } - - devBuildIndicator.hide = () => { - isBuilding = false - // Wait for the fade out transition to complete - timeoutId = setTimeout(() => { - isVisible = false - updateContainer() - }, 100) - updateContainer() - } - - function updateContainer() { - if (isBuilding) { - container.classList.add(`${prefix}building`) - } else { - container.classList.remove(`${prefix}building`) - } - - if (isVisible) { - container.classList.add(`${prefix}visible`) - } else { - container.classList.remove(`${prefix}visible`) - } - } -} - -function createContainer(prefix: string) { - const container = document.createElement('div') - container.id = `${prefix}container` - container.innerHTML = ` -
- - - - - - - - - - - -
- ` - - return container -} - -function createCss( - prefix: string, - { - horizontalProperty, - verticalProperty, - }: { horizontalProperty: string; verticalProperty: string } -) { - const css = document.createElement('style') - css.textContent = ` - #${prefix}container { - position: absolute; - ${verticalProperty}: 10px; - ${horizontalProperty}: 30px; - - border-radius: 3px; - background: #000; - color: #fff; - font: initial; - cursor: initial; - letter-spacing: initial; - text-shadow: initial; - text-transform: initial; - visibility: initial; - - padding: 7px 10px 8px 10px; - align-items: center; - box-shadow: 0 11px 40px 0 rgba(0, 0, 0, 0.25), 0 2px 10px 0 rgba(0, 0, 0, 0.12); - - display: none; - opacity: 0; - transition: opacity 0.1s ease, ${verticalProperty} 0.1s ease; - animation: ${prefix}fade-in 0.1s ease-in-out; - } - - #${prefix}container.${prefix}visible { - display: flex; - } - - #${prefix}container.${prefix}building { - ${verticalProperty}: 20px; - opacity: 1; - } - - #${prefix}icon-wrapper { - width: 16px; - height: 16px; - } - - #${prefix}icon-wrapper > svg { - width: 100%; - height: 100%; - } - - #${prefix}icon-group { - animation: ${prefix}strokedash 1s ease-in-out both infinite; - } - - @keyframes ${prefix}fade-in { - from { - ${verticalProperty}: 10px; - opacity: 0; - } - to { - ${verticalProperty}: 20px; - opacity: 1; - } - } - - @keyframes ${prefix}strokedash { - 0% { - stroke-dasharray: 0 226; - } - 80%, - 100% { - stroke-dasharray: 659 226; - } - } - ` - - return css + initialize: process.env.__NEXT_EXPERIMENTAL_NEW_DEV_OVERLAY + ? ( + require('./initialize-for-new-overlay') as typeof import('./initialize-for-new-overlay') + ).initializeForNewOverlay + : ( + require('./initialize-for-old-overlay') as typeof import('./initialize-for-old-overlay') + ).initializeForOldOverlay, } diff --git a/packages/next/src/client/dev/dev-build-indicator/internal/initialize-for-new-overlay.ts b/packages/next/src/client/dev/dev-build-indicator/internal/initialize-for-new-overlay.ts new file mode 100644 index 0000000000000..f1a3aaaca77c9 --- /dev/null +++ b/packages/next/src/client/dev/dev-build-indicator/internal/initialize-for-new-overlay.ts @@ -0,0 +1,35 @@ +/* + * Singleton store to track whether the app is currently being built + * Used by the dev tools indicator of the new overlay to show build status + */ + +import { devBuildIndicator } from './dev-build-indicator' +import { useSyncExternalStore } from 'react' + +let isVisible = false +let listeners: Array<() => void> = [] + +const subscribe = (listener: () => void) => { + listeners.push(listener) + return () => { + listeners = listeners.filter((l) => l !== listener) + } +} + +const getSnapshot = () => isVisible + +export function useIsDevBuilding() { + return useSyncExternalStore(subscribe, getSnapshot) +} + +export function initializeForNewOverlay() { + devBuildIndicator.show = () => { + isVisible = true + listeners.forEach((listener) => listener()) + } + + devBuildIndicator.hide = () => { + isVisible = false + listeners.forEach((listener) => listener()) + } +} diff --git a/packages/next/src/client/dev/dev-build-indicator/internal/initialize-for-old-overlay.ts b/packages/next/src/client/dev/dev-build-indicator/internal/initialize-for-old-overlay.ts new file mode 100644 index 0000000000000..cfe0a081696aa --- /dev/null +++ b/packages/next/src/client/dev/dev-build-indicator/internal/initialize-for-old-overlay.ts @@ -0,0 +1,194 @@ +/* + * Initializes the build indicator for the old overlay + * This is a singleton store to track whether the app is currently being built + * Used by the dev tools indicator of the old overlay to show build status + */ + +import { devBuildIndicator } from './dev-build-indicator' + +type VerticalPosition = 'top' | 'bottom' +type HorizonalPosition = 'left' | 'right' + +export function initializeForOldOverlay(position = 'bottom-right') { + const shadowHost = document.createElement('div') + const [verticalProperty, horizontalProperty] = position.split('-', 2) as [ + VerticalPosition, + HorizonalPosition, + ] + shadowHost.id = '__next-build-indicator' + // Make sure container is fixed and on a high zIndex so it shows + shadowHost.style.position = 'fixed' + // Ensure container's position to be top or bottom (default) + shadowHost.style[verticalProperty] = '10px' + // Ensure container's position to be left or right (default) + shadowHost.style[horizontalProperty] = '20px' + shadowHost.style.width = '0' + shadowHost.style.height = '0' + shadowHost.style.zIndex = '99999' + document.body.appendChild(shadowHost) + + let shadowRoot + let prefix = '' + + if (shadowHost.attachShadow) { + shadowRoot = shadowHost.attachShadow({ mode: 'open' }) + } else { + // If attachShadow is undefined then the browser does not support + // the Shadow DOM, we need to prefix all the names so there + // will be no conflicts + shadowRoot = shadowHost + prefix = '__next-build-indicator-' + } + + // Container + const container = createContainer(prefix) + shadowRoot.appendChild(container) + + // CSS + const css = createCss(prefix, { horizontalProperty, verticalProperty }) + shadowRoot.appendChild(css) + + // State + let isVisible = false + let isBuilding = false + let timeoutId: null | ReturnType = null + + devBuildIndicator.show = () => { + timeoutId && clearTimeout(timeoutId) + isVisible = true + isBuilding = true + updateContainer() + } + + devBuildIndicator.hide = () => { + isBuilding = false + // Wait for the fade out transition to complete + timeoutId = setTimeout(() => { + isVisible = false + updateContainer() + }, 100) + updateContainer() + } + + function updateContainer() { + if (isBuilding) { + container.classList.add(`${prefix}building`) + } else { + container.classList.remove(`${prefix}building`) + } + + if (isVisible) { + container.classList.add(`${prefix}visible`) + } else { + container.classList.remove(`${prefix}visible`) + } + } +} +function createContainer(prefix: string) { + const container = document.createElement('div') + container.id = `${prefix}container` + container.innerHTML = ` +
+ + + + + + + + + + + +
+ ` + + return container +} +function createCss( + prefix: string, + { + horizontalProperty, + verticalProperty, + }: { horizontalProperty: string; verticalProperty: string } +) { + const css = document.createElement('style') + css.textContent = ` + #${prefix}container { + position: absolute; + ${verticalProperty}: 10px; + ${horizontalProperty}: 30px; + + border-radius: 3px; + background: #000; + color: #fff; + font: initial; + cursor: initial; + letter-spacing: initial; + text-shadow: initial; + text-transform: initial; + visibility: initial; + + padding: 7px 10px 8px 10px; + align-items: center; + box-shadow: 0 11px 40px 0 rgba(0, 0, 0, 0.25), 0 2px 10px 0 rgba(0, 0, 0, 0.12); + + display: none; + opacity: 0; + transition: opacity 0.1s ease, ${verticalProperty} 0.1s ease; + animation: ${prefix}fade-in 0.1s ease-in-out; + } + + #${prefix}container.${prefix}visible { + display: flex; + } + + #${prefix}container.${prefix}building { + ${verticalProperty}: 20px; + opacity: 1; + } + + #${prefix}icon-wrapper { + width: 16px; + height: 16px; + } + + #${prefix}icon-wrapper > svg { + width: 100%; + height: 100%; + } + + #${prefix}icon-group { + animation: ${prefix}strokedash 1s ease-in-out both infinite; + } + + @keyframes ${prefix}fade-in { + from { + ${verticalProperty}: 10px; + opacity: 0; + } + to { + ${verticalProperty}: 20px; + opacity: 1; + } + } + + @keyframes ${prefix}strokedash { + 0% { + stroke-dasharray: 0 226; + } + 80%, + 100% { + stroke-dasharray: 659 226; + } + } + ` + + return css +} From fe7c60bd125e1017f23618ff1dca709efaa5aa96 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Tue, 14 Jan 2025 14:18:16 +0100 Subject: [PATCH 37/65] [Turbopack] add tracing to task execution (#74770) add tracing to task_execution_completed add tracing for strongly consistent read improve aggregation update tracing --- .../turbo-tasks-backend/src/backend/mod.rs | 24 ++++++++++++------- .../backend/operation/aggregation_update.rs | 20 +++++++++++++--- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs b/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs index 56b9c5bed0988..ecb267262eb25 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs @@ -420,14 +420,21 @@ impl TurboTasksBackendInner { break; } drop(task); - AggregationUpdateQueue::run( - AggregationUpdateJob::UpdateAggregationNumber { - task_id, - base_aggregation_number: u32::MAX, - distance: None, - }, - &mut ctx, - ); + { + let _span = tracing::trace_span!( + "make root node for strongly consistent read", + %task_id + ) + .entered(); + AggregationUpdateQueue::run( + AggregationUpdateJob::UpdateAggregationNumber { + task_id, + base_aggregation_number: u32::MAX, + distance: None, + }, + &mut ctx, + ); + } task = ctx.task(task_id, TaskDataCategory::All); } @@ -1173,6 +1180,7 @@ impl TurboTasksBackendInner { operation::UpdateOutputOperation::run(task_id, result, self.execute_context(turbo_tasks)); } + #[tracing::instrument(level = "trace", skip_all)] fn task_execution_completed( &self, task_id: TaskId, diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs index 15a9ec258ac68..c93c1e5b2f44a 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs @@ -1568,7 +1568,7 @@ impl AggregationUpdateQueue { ) { #[cfg(feature = "trace_aggregation_update")] let _span = - trace_span!("process update aggregation numger", base_aggregation_number).entered(); + trace_span!("check update aggregation number", base_aggregation_number).entered(); let mut task = ctx.task(task_id, TaskDataCategory::Meta); let current = get!(task, AggregationNumber).copied().unwrap_or_default(); @@ -1601,7 +1601,13 @@ impl AggregationUpdateQueue { } } else { #[cfg(feature = "trace_aggregation_update")] - let _span = trace_span!("update aggregation numger", aggregation_number).entered(); + let _span = trace_span!( + "update aggregation number", + task = ctx.get_task_description(task_id), + old, + aggregation_number + ) + .entered(); task.insert(CachedDataItem::AggregationNumber { value: AggregationNumber { base: base_aggregation_number, @@ -1655,7 +1661,7 @@ impl AggregationUpdateQueue { /// upper edges as this amplifies the updates needed when changes to that task occur. fn optimize_task(&mut self, ctx: &mut impl ExecuteContext<'_>, task_id: TaskId) { #[cfg(feature = "trace_aggregation_update")] - let _span = trace_span!("optimize").entered(); + let _span = trace_span!("check optimize").entered(); let task = ctx.task(task_id, TaskDataCategory::Meta); let aggregation_number = get!(task, AggregationNumber).copied().unwrap_or_default(); @@ -1750,6 +1756,14 @@ impl AggregationUpdateQueue { } if aggregation_number.effective != new_aggregation_number { + #[cfg(feature = "trace_aggregation_update")] + let _span = trace_span!( + "optimize", + upper_count, + old_aggregation_number = aggregation_number.effective, + new_aggregation_number, + ) + .entered(); self.push(AggregationUpdateJob::UpdateAggregationNumber { task_id, base_aggregation_number: new_aggregation_number From 4a3ff85d4ae73f26e11252530faa6048f047aea3 Mon Sep 17 00:00:00 2001 From: vexcat <45345203+vexcat@users.noreply.github.com> Date: Tue, 14 Jan 2025 05:34:22 -0800 Subject: [PATCH 38/65] Fix mojibake in server action inputs (fixes #74843) (#74845) Fixes #74843 --------- Co-authored-by: Gabriel Pulido Co-authored-by: Hendrik Liebau --- .../src/server/app-render/action-handler.ts | 7 +++-- test/e2e/app-dir/actions/app-action.test.ts | 20 +++++++++++-- .../actions/app/decode-req-body/edge/page.tsx | 3 ++ .../actions/app/decode-req-body/node/form.tsx | 28 +++++++++++++++++++ .../actions/app/decode-req-body/node/page.tsx | 13 +++++++++ test/e2e/app-dir/actions/middleware.js | 9 ++++++ .../app/layout.tsx | 7 +++++ .../app/page.tsx | 3 ++ 8 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 test/e2e/app-dir/actions/app/decode-req-body/edge/page.tsx create mode 100644 test/e2e/app-dir/actions/app/decode-req-body/node/form.tsx create mode 100644 test/e2e/app-dir/actions/app/decode-req-body/node/page.tsx create mode 100644 test/e2e/app-dir/use-cache-metadata-route-handler/app/layout.tsx create mode 100644 test/e2e/app-dir/use-cache-metadata-route-handler/app/page.tsx diff --git a/packages/next/src/server/app-render/action-handler.ts b/packages/next/src/server/app-render/action-handler.ts index b787a6e2c67ba..e05be7791db8f 100644 --- a/packages/next/src/server/app-render/action-handler.ts +++ b/packages/next/src/server/app-render/action-handler.ts @@ -710,8 +710,7 @@ export async function handleAction({ } } - let actionData = '' - + const chunks: Buffer[] = [] const reader = req.body.getReader() while (true) { const { done, value } = await reader.read() @@ -719,9 +718,11 @@ export async function handleAction({ break } - actionData += new TextDecoder().decode(value) + chunks.push(value) } + const actionData = Buffer.concat(chunks).toString('utf-8') + if (isURLEncodedAction) { const formData = formDataFromSearchQueryString(actionData) boundActionArguments = await decodeReply( diff --git a/test/e2e/app-dir/actions/app-action.test.ts b/test/e2e/app-dir/actions/app-action.test.ts index 6279844e05bbf..4577286c917a7 100644 --- a/test/e2e/app-dir/actions/app-action.test.ts +++ b/test/e2e/app-dir/actions/app-action.test.ts @@ -888,9 +888,9 @@ describe('app-dir action handling', () => { async (runtime) => { let redirectResponseCode const browser = await next.browser(`/delayed-action/${runtime}`, { - beforePageLoad(page) { + beforePageLoad(page: Page) { page.on('response', async (res: Response) => { - const headers = await res.allHeaders() + const headers = await res.allHeaders().catch(() => ({})) if (headers['x-action-redirect']) { redirectResponseCode = res.status() } @@ -1867,4 +1867,20 @@ describe('app-dir action handling', () => { }) }) }) + + describe('request body decoding', () => { + it.each(['node', 'edge'])( + 'should correctly decode multi-byte characters in the request body (%s)', + async (runtime) => { + const browser = await next.browser(`/decode-req-body/${runtime}`) + + await browser.elementByCss('button').click() + const result = await browser.elementByCss('p').text() + + expect(result).toEqual( + 'Server responded with 100000 あ characters and 0 � characters.' + ) + } + ) + }) }) diff --git a/test/e2e/app-dir/actions/app/decode-req-body/edge/page.tsx b/test/e2e/app-dir/actions/app/decode-req-body/edge/page.tsx new file mode 100644 index 0000000000000..84d20a059e006 --- /dev/null +++ b/test/e2e/app-dir/actions/app/decode-req-body/edge/page.tsx @@ -0,0 +1,3 @@ +export { default } from '../node/page' + +export const runtime = 'edge' diff --git a/test/e2e/app-dir/actions/app/decode-req-body/node/form.tsx b/test/e2e/app-dir/actions/app/decode-req-body/node/form.tsx new file mode 100644 index 0000000000000..bb969cb9281b8 --- /dev/null +++ b/test/e2e/app-dir/actions/app/decode-req-body/node/form.tsx @@ -0,0 +1,28 @@ +'use client' + +import { useActionState } from 'react' + +export function Form({ + echoAction, +}: { + echoAction: (value: string) => Promise +}) { + let [result, formAction] = useActionState( + () => echoAction(new Array(100000).fill('あ').join('')), + null + ) + + let aCount = result ? result.match(/あ/g)!.length : 0 + + return ( +
+ {result && ( +

+ Server responded with {aCount} あ characters and{' '} + {result.length - aCount} � characters. +

+ )} + +
+ ) +} diff --git a/test/e2e/app-dir/actions/app/decode-req-body/node/page.tsx b/test/e2e/app-dir/actions/app/decode-req-body/node/page.tsx new file mode 100644 index 0000000000000..21adab3ba85d7 --- /dev/null +++ b/test/e2e/app-dir/actions/app/decode-req-body/node/page.tsx @@ -0,0 +1,13 @@ +import { Form } from './form' + +export default function Page() { + return ( +
{ + 'use server' + + return value + }} + /> + ) +} diff --git a/test/e2e/app-dir/actions/middleware.js b/test/e2e/app-dir/actions/middleware.js index c79a0effb25cc..33382ffb7d93c 100644 --- a/test/e2e/app-dir/actions/middleware.js +++ b/test/e2e/app-dir/actions/middleware.js @@ -9,3 +9,12 @@ export async function middleware(req) { return NextResponse.next() } + +/** + * @type {import('next/server').MiddlewareConfig} + */ +export const config = { + // Ensure that middleware doesn't interfere with the request body parsing for + // this test fixture. + matcher: ['/((?!decode-req-body).*)'], +} diff --git a/test/e2e/app-dir/use-cache-metadata-route-handler/app/layout.tsx b/test/e2e/app-dir/use-cache-metadata-route-handler/app/layout.tsx new file mode 100644 index 0000000000000..e7077399c03ce --- /dev/null +++ b/test/e2e/app-dir/use-cache-metadata-route-handler/app/layout.tsx @@ -0,0 +1,7 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + {children} + + ) +} diff --git a/test/e2e/app-dir/use-cache-metadata-route-handler/app/page.tsx b/test/e2e/app-dir/use-cache-metadata-route-handler/app/page.tsx new file mode 100644 index 0000000000000..ff7159d9149fe --- /dev/null +++ b/test/e2e/app-dir/use-cache-metadata-route-handler/app/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return

hello world

+} From c8251c303065e4f819b1e8aeed8019ef39bf5846 Mon Sep 17 00:00:00 2001 From: Jiwon Choi Date: Tue, 14 Jan 2025 22:44:57 +0900 Subject: [PATCH 39/65] [DevOverlay] Add Turbopack story for Error Containers (#74834) This PR added the Turbopack story for Error Containers: `BuildError`, `Errors`, and `RootLayoutMissingTagsError`. --- .../_experimental/app/ReactDevOverlay.tsx | 6 +++++- .../dev-tools-indicator/dev-tools-indicator.tsx | 12 ++++++------ .../error-overlay-layout/error-overlay-layout.tsx | 2 +- .../internal/container/BuildError.stories.tsx | 7 +++++++ .../_experimental/internal/container/BuildError.tsx | 8 +++++++- .../internal/container/Errors.stories.tsx | 9 ++++++++- .../_experimental/internal/container/Errors.tsx | 7 ++++--- .../container/RootLayoutMissingTagsError.stories.tsx | 7 +++++++ .../container/RootLayoutMissingTagsError.tsx | 3 +++ .../_experimental/pages/ReactDevOverlay.tsx | 7 +++++-- 10 files changed, 53 insertions(+), 15 deletions(-) diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/app/ReactDevOverlay.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/app/ReactDevOverlay.tsx index 8fdd2991a50dc..bd9b1801088b7 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/app/ReactDevOverlay.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/app/ReactDevOverlay.tsx @@ -43,6 +43,8 @@ export default class ReactDevOverlay extends React.PureComponent< const hasStaticIndicator = state.staticIndicator const debugInfo = state.debugInfo + const isTurbopack = !!process.env.TURBOPACK + return ( <> {isReactError ? ( @@ -61,15 +63,17 @@ export default class ReactDevOverlay extends React.PureComponent< {state.rootLayoutMissingTags?.length ? ( ) : hasBuildError ? ( ) : ( void hide: () => void hasStaticIndicator?: boolean - isTurbopackEnabled: boolean + isTurbopack: boolean }) { return ( ) } @@ -42,14 +42,14 @@ const DevToolsPopover = ({ isStaticRoute, hide, semver, - isTurbopackEnabled, + isTurbopack, }: { onIssuesClick: () => void issueCount: number isStaticRoute: boolean hide: () => void semver: string | undefined - isTurbopackEnabled: boolean + isTurbopack: boolean }) => { // TODO: close when clicking outside @@ -111,7 +111,7 @@ const DevToolsPopover = ({ ) : null}

- Turbopack {isTurbopackEnabled ? 'enabled' : 'not enabled'} + Turbopack {isTurbopack ? 'enabled' : 'not enabled'}

diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-layout/error-overlay-layout.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-layout/error-overlay-layout.tsx index 998fc6a51c6b8..3a7cd86f83a03 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-layout/error-overlay-layout.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/error-overlay-layout/error-overlay-layout.tsx @@ -66,7 +66,7 @@ export function ErrorOverlayLayout({ activeIdx, setActiveIndex, footerMessage, - isTurbopack = !!process.env.TURBOPACK, + isTurbopack, }: ErrorOverlayLayoutProps) { return ( diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/BuildError.stories.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/BuildError.stories.tsx index 53ad13ac8eda1..6b60b3b3b0fe1 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/BuildError.stories.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/BuildError.stories.tsx @@ -31,3 +31,10 @@ Expected identError: Failed to resolve import "./missing-module"`, }, }, } + +export const Turbopack: Story = { + args: { + ...Default.args, + isTurbopack: true, + }, +} diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/BuildError.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/BuildError.tsx index 7701ec8734cda..f7544818eb56f 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/BuildError.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/BuildError.tsx @@ -4,11 +4,16 @@ import { Terminal } from '../components/Terminal' import { noop as css } from '../helpers/noop-template' import { ErrorOverlayLayout } from '../components/Errors/error-overlay-layout/error-overlay-layout' -export type BuildErrorProps = { message: string; versionInfo?: VersionInfo } +export type BuildErrorProps = { + message: string + isTurbopack: boolean + versionInfo?: VersionInfo +} export const BuildError: React.FC = function BuildError({ message, versionInfo, + isTurbopack, }) { const noop = React.useCallback(() => {}, []) return ( @@ -18,6 +23,7 @@ export const BuildError: React.FC = function BuildError({ onClose={noop} versionInfo={versionInfo} footerMessage="This error occurred during the build process and can only be dismissed by fixing the error." + isTurbopack={isTurbopack} > diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/Errors.stories.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/Errors.stories.tsx index 5dd9128f9c119..a8f1009825941 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/Errors.stories.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/Errors.stories.tsx @@ -74,7 +74,14 @@ export const Default: Story = { }, initialDisplayState: 'fullscreen', hasStaticIndicator: true, - isTurbopackEnabled: true, + isTurbopack: true, + }, +} + +export const Turbopack: Story = { + args: { + ...Default.args, + isTurbopack: true, }, } diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/Errors.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/Errors.tsx index e37b7895957dc..244c8829bb7c3 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/Errors.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/Errors.tsx @@ -35,10 +35,10 @@ export type ErrorsProps = { isAppDir: boolean errors: SupportedErrorEvent[] initialDisplayState: DisplayState + isTurbopack: boolean versionInfo?: VersionInfo hasStaticIndicator?: boolean debugInfo?: DebugInfo - isTurbopackEnabled: boolean } type ReadyErrorEvent = ReadyRuntimeError @@ -110,7 +110,7 @@ export function Errors({ hasStaticIndicator, debugInfo, versionInfo, - isTurbopackEnabled, + isTurbopack, }: ErrorsProps) { const [lookups, setLookups] = useState( {} as { [eventId: string]: ReadyErrorEvent } @@ -214,7 +214,7 @@ export function Errors({ fullscreen={fullscreen} hide={hide} versionInfo={versionInfo} - isTurbopackEnabled={isTurbopackEnabled} + isTurbopack={isTurbopack} /> ) } @@ -272,6 +272,7 @@ export function Errors({ setActiveIndex={setActiveIndex} footerMessage={footerMessage} versionInfo={versionInfo} + isTurbopack={isTurbopack} >
{notes ? ( diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/RootLayoutMissingTagsError.stories.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/RootLayoutMissingTagsError.stories.tsx index ba9e611301ea2..5642d16894538 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/RootLayoutMissingTagsError.stories.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/RootLayoutMissingTagsError.stories.tsx @@ -32,3 +32,10 @@ export const SingleTag: Story = { }, }, } + +export const Turbopack: Story = { + args: { + ...Default.args, + isTurbopack: true, + }, +} diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/RootLayoutMissingTagsError.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/RootLayoutMissingTagsError.tsx index 2e14c1a2ca050..bdbba514da226 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/RootLayoutMissingTagsError.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/container/RootLayoutMissingTagsError.tsx @@ -5,11 +5,13 @@ import { ErrorOverlayLayout } from '../components/Errors/error-overlay-layout/er type RootLayoutMissingTagsErrorProps = { missingTags: string[] + isTurbopack: boolean versionInfo?: VersionInfo } export function RootLayoutMissingTagsError({ missingTags, + isTurbopack, versionInfo, }: RootLayoutMissingTagsErrorProps) { const noop = useCallback(() => {}, []) @@ -27,6 +29,7 @@ export function RootLayoutMissingTagsError({ } onClose={noop} versionInfo={versionInfo} + isTurbopack={isTurbopack} /> ) } diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/pages/ReactDevOverlay.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/pages/ReactDevOverlay.tsx index a1d470c685178..b6f3a08d3977f 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/pages/ReactDevOverlay.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/pages/ReactDevOverlay.tsx @@ -26,6 +26,8 @@ export default function ReactDevOverlay({ children }: ReactDevOverlayProps) { onComponentError, } = usePagesReactDevOverlay() + const isTurbopack = !!process.env.TURBOPACK + return ( <> @@ -41,6 +43,7 @@ export default function ReactDevOverlay({ children }: ReactDevOverlayProps) { ) : hasRuntimeErrors ? ( ) : ( )} From 15915c34692ed8199817873b1c42fe1b623839ae Mon Sep 17 00:00:00 2001 From: Zach Jaensch <79816238+Zach-Jaensch@users.noreply.github.com> Date: Wed, 15 Jan 2025 01:47:46 +1100 Subject: [PATCH 40/65] Add pagination SEO link tags (#74737) Apologies in advance if I have missed something in the contributing process. Fixes #52925 ### What? Adds metadata config option for pagination link tags. ### Why? The ` --- .../src/lib/metadata/default-metadata.tsx | 4 ++++ .../next/src/lib/metadata/generate/basic.tsx | 10 ++++++++++ .../next/src/lib/metadata/resolve-metadata.ts | 9 +++++++++ .../lib/metadata/resolvers/resolve-basics.ts | 14 +++++++++++++ .../lib/metadata/types/metadata-interface.ts | 20 +++++++++++++++++++ .../app-dir/metadata/app/basic-edge/page.tsx | 4 ++++ test/e2e/app-dir/metadata/app/basic/page.tsx | 4 ++++ test/e2e/app-dir/metadata/metadata.test.ts | 4 ++++ 8 files changed, 69 insertions(+) diff --git a/packages/next/src/lib/metadata/default-metadata.tsx b/packages/next/src/lib/metadata/default-metadata.tsx index 2449688350c52..2ac6da75d4564 100644 --- a/packages/next/src/lib/metadata/default-metadata.tsx +++ b/packages/next/src/lib/metadata/default-metadata.tsx @@ -55,6 +55,10 @@ export function createDefaultMetadata(): ResolvedMetadata { bookmarks: null, category: null, classification: null, + pagination: { + previous: null, + next: null, + }, other: {}, } } diff --git a/packages/next/src/lib/metadata/generate/basic.tsx b/packages/next/src/lib/metadata/generate/basic.tsx index 70062d11d8c36..4dc8efbc30509 100644 --- a/packages/next/src/lib/metadata/generate/basic.tsx +++ b/packages/next/src/lib/metadata/generate/basic.tsx @@ -99,6 +99,16 @@ export function BasicMeta({ metadata }: { metadata: ResolvedMetadata }) { )) : []), + ...(metadata.pagination + ? [ + metadata.pagination.previous ? ( + + ) : null, + metadata.pagination.next ? ( + + ) : null, + ] + : []), Meta({ name: 'category', content: metadata.category }), Meta({ name: 'classification', content: metadata.classification }), ...(metadata.other diff --git a/packages/next/src/lib/metadata/resolve-metadata.ts b/packages/next/src/lib/metadata/resolve-metadata.ts index 2cc4af36bbd03..94b692ca8fefc 100644 --- a/packages/next/src/lib/metadata/resolve-metadata.ts +++ b/packages/next/src/lib/metadata/resolve-metadata.ts @@ -46,6 +46,7 @@ import { resolveVerification, resolveItunes, resolveFacebook, + resolvePagination, } from './resolvers/resolve-basics' import { resolveIcons } from './resolvers/resolve-icons' import { getTracer } from '../../server/lib/trace/tracer' @@ -252,6 +253,14 @@ function mergeMetadata({ ) break } + case 'pagination': { + target.pagination = resolvePagination( + source.pagination, + metadataBase, + metadataContext + ) + break + } // directly assign fields that fallback to null case 'applicationName': case 'description': diff --git a/packages/next/src/lib/metadata/resolvers/resolve-basics.ts b/packages/next/src/lib/metadata/resolvers/resolve-basics.ts index f6a2e98ca6a85..4be6a797af799 100644 --- a/packages/next/src/lib/metadata/resolvers/resolve-basics.ts +++ b/packages/next/src/lib/metadata/resolvers/resolve-basics.ts @@ -263,3 +263,17 @@ export const resolveFacebook: FieldResolver<'facebook'> = (facebook) => { admins: resolveAsArrayOrUndefined(facebook.admins), } } + +export const resolvePagination: FieldResolverExtraArgs< + 'pagination', + [ResolvedMetadata['metadataBase'], MetadataContext] +> = (pagination, metadataBase, context) => { + return { + previous: pagination?.previous + ? resolveAlternateUrl(pagination.previous, metadataBase, context) + : null, + next: pagination?.next + ? resolveAlternateUrl(pagination.next, metadataBase, context) + : null, + } +} diff --git a/packages/next/src/lib/metadata/types/metadata-interface.ts b/packages/next/src/lib/metadata/types/metadata-interface.ts index cf4a408f2ee39..32c9198516d59 100644 --- a/packages/next/src/lib/metadata/types/metadata-interface.ts +++ b/packages/next/src/lib/metadata/types/metadata-interface.ts @@ -454,6 +454,22 @@ interface Metadata extends DeprecatedMetadataFields { */ bookmarks?: null | string | Array | undefined // This is technically against HTML spec but is used in wild + /** + * The pagination link rel properties. + * + * @see https://developers.google.com/search/blog/2011/09/pagination-with-relnext-and-relprev + * @example + * ```tsx + * "https://example.com/items" + * + * + * ``` + */ + pagination?: { + previous?: null | string | URL | undefined + next?: null | string | URL | undefined + } + // meta name properties /** @@ -566,6 +582,10 @@ interface ResolvedMetadata extends DeprecatedMetadataFields { archives: null | Array assets: null | Array bookmarks: null | Array // This is technically against HTML spec but is used in wild + pagination: { + previous: null | string + next: null | string + } // meta name properties category: null | string diff --git a/test/e2e/app-dir/metadata/app/basic-edge/page.tsx b/test/e2e/app-dir/metadata/app/basic-edge/page.tsx index 6aa3fd5913282..df12533453980 100644 --- a/test/e2e/app-dir/metadata/app/basic-edge/page.tsx +++ b/test/e2e/app-dir/metadata/app/basic-edge/page.tsx @@ -28,6 +28,10 @@ export const metadata: Metadata = { manifest: '/api/manifest', robots: 'index, follow', alternates: {}, + pagination: { + previous: '/basic?page=1', + next: '/basic?page=3', + }, formatDetection: { email: false, address: false, diff --git a/test/e2e/app-dir/metadata/app/basic/page.tsx b/test/e2e/app-dir/metadata/app/basic/page.tsx index 0213db6c94775..34396492cac80 100644 --- a/test/e2e/app-dir/metadata/app/basic/page.tsx +++ b/test/e2e/app-dir/metadata/app/basic/page.tsx @@ -29,6 +29,10 @@ export const metadata: Metadata = { publisher: 'vercel', robots: 'index, follow', alternates: {}, + pagination: { + previous: '/basic?page=1', + next: '/basic?page=3', + }, formatDetection: { email: false, address: false, diff --git a/test/e2e/app-dir/metadata/metadata.test.ts b/test/e2e/app-dir/metadata/metadata.test.ts index 2dcc2a472300f..94b053653f3fb 100644 --- a/test/e2e/app-dir/metadata/metadata.test.ts +++ b/test/e2e/app-dir/metadata/metadata.test.ts @@ -82,6 +82,8 @@ describe('app dir - metadata', () => { preconnect: '/preconnect-url', preload: '/api/preload', 'dns-prefetch': '/dns-prefetch-url', + prev: '/basic?page=1', + next: '/basic?page=3', }) // Manifest link should have crossOrigin attribute @@ -117,6 +119,8 @@ describe('app dir - metadata', () => { preconnect: '/preconnect-url', preload: '/api/preload', 'dns-prefetch': '/dns-prefetch-url', + prev: '/basic?page=1', + next: '/basic?page=3', }) // Manifest link should have crossOrigin attribute From 3256ff86dd44e1a11b0569dfe1730736a6a0ce0c Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Tue, 14 Jan 2025 16:21:50 +0100 Subject: [PATCH 41/65] [Turbopack] improve task aggregation update (#74771) improve performance test case add mark_as_completed fix aggregation graph bug optimize update make sure to not miss the power_of_two mark add threshold for leaf uppers add test case --- .../turbo-tasks-backend/src/backend/mod.rs | 27 ++ .../backend/operation/aggregation_update.rs | 246 ++++++++---- .../crates/turbo-tasks-backend/src/data.rs | 1 + .../turbo-tasks-testing/tests/performance.rs | 350 +++++++++++++++--- 4 files changed, 484 insertions(+), 140 deletions(-) diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs b/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs index ecb267262eb25..a4944b78be4fc 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs @@ -998,6 +998,7 @@ impl TurboTasksBackendInner { once_task, done_event, session_dependent: false, + marked_as_completed: false, }, }); @@ -1319,6 +1320,7 @@ impl TurboTasksBackendInner { once_task: _, stale, session_dependent, + marked_as_completed: _, } = in_progress else { panic!("Task execution completed, but task is not in progress: {task:#?}"); @@ -1669,6 +1671,23 @@ impl TurboTasksBackendInner { } } + fn mark_own_task_as_finished( + &self, + task: TaskId, + turbo_tasks: &dyn TurboTasksBackendApi>, + ) { + let mut ctx = self.execute_context(turbo_tasks); + let mut task = ctx.task(task, TaskDataCategory::Data); + if let Some(InProgressState::InProgress { + marked_as_completed, + .. + }) = get_mut!(task, InProgress) + { + *marked_as_completed = true; + // TODO this should remove the dirty state (also check session_dependent) + } + } + fn connect_task( &self, task: TaskId, @@ -1952,6 +1971,14 @@ impl Backend for TurboTasksBackend { self.0.update_task_cell(task_id, cell, content, turbo_tasks); } + fn mark_own_task_as_finished( + &self, + task_id: TaskId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) { + self.0.mark_own_task_as_finished(task_id, turbo_tasks); + } + fn mark_own_task_as_session_dependent( &self, task: TaskId, diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs index c93c1e5b2f44a..3f2359ff2202c 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs @@ -34,6 +34,7 @@ use crate::{ pub const LEAF_NUMBER: u32 = 16; const MAX_COUNT_BEFORE_YIELD: usize = 1000; +const MAX_UPPERS_FOR_LEAF: u32 = 3; /// Returns true, when a node is aggregating its children and a partial subgraph. pub fn is_aggregating_node(aggregation_number: u32) -> bool { @@ -1245,7 +1246,7 @@ impl AggregationUpdateQueue { }; let mut upper_upper_ids_with_new_follower = Vec::new(); let mut is_aggregate_root = false; - upper_ids.retain(|&upper_id| { + swap_retain(&mut upper_ids, |&mut upper_id| { let mut upper = ctx.task(upper_id, TaskDataCategory::Meta); // decide if it should be an inner or follower let upper_aggregation_number = get_aggregation_number(&upper); @@ -1263,6 +1264,16 @@ impl AggregationUpdateQueue { ) { upper_upper_ids_with_new_follower.extend(iter_uppers(&upper)); } + + // Balancing is only needed when they are equal. This is not perfect from + // concurrent perspective, but we can accept a few incorrect + // invariants in the graph. + if upper_aggregation_number == follower_aggregation_number { + self.push(AggregationUpdateJob::BalanceEdge { + upper_id, + task_id: new_follower_id, + }); + } false } else { // It's an inner node, continue with the list @@ -1277,7 +1288,7 @@ impl AggregationUpdateQueue { let mut follower = ctx.task(new_follower_id, TaskDataCategory::Meta); let mut uppers_count: Option = None; let mut persistent_uppers = 0; - upper_ids.retain(|&upper_id| { + swap_retain(&mut upper_ids, |&mut upper_id| { if update_count!(follower, Upper { task: upper_id }, 1) { // It's a new upper let uppers_count = uppers_count.get_or_insert_with(|| { @@ -1289,6 +1300,7 @@ impl AggregationUpdateQueue { if !upper_id.is_transient() { persistent_uppers += 1; } + true } else { // It's already an upper @@ -1298,8 +1310,10 @@ impl AggregationUpdateQueue { #[cfg(feature = "trace_aggregation_update")] let _span = trace_span!("new inner").entered(); if !upper_ids.is_empty() { - if update_ucount_and_get!(follower, PersistentUpperCount, persistent_uppers) - .is_power_of_two() + let new_count = + update_ucount_and_get!(follower, PersistentUpperCount, persistent_uppers); + if (new_count - persistent_uppers).next_power_of_two() + != new_count.next_power_of_two() { self.push_optimize_task(new_follower_id); } @@ -1369,25 +1383,34 @@ impl AggregationUpdateQueue { let mut new_followers_of_upper_uppers = Vec::new(); let is_aggregate_root; let mut upper_upper_ids_for_new_followers = Vec::new(); + let upper_aggregation_number; { let mut upper = ctx.task(upper_id, TaskDataCategory::Meta); is_aggregate_root = upper.has_key(&CachedDataItemKey::AggregateRoot {}); // decide if it should be an inner or follower - let upper_aggregation_number = get_aggregation_number(&upper); + upper_aggregation_number = get_aggregation_number(&upper); if !is_root_node(upper_aggregation_number) { followers_with_aggregation_number.retain( |(follower_id, follower_aggregation_number)| { - if upper_aggregation_number <= *follower_aggregation_number { - // It's a follower of the upper node - if update_count!(upper, Follower { task: *follower_id }, 1) { - new_followers_of_upper_uppers.push(*follower_id); - } - false - } else { + if upper_aggregation_number > *follower_aggregation_number { // It's an inner node, continue with the list - true + return true; + } + // It's a follower of the upper node + if update_count!(upper, Follower { task: *follower_id }, 1) { + new_followers_of_upper_uppers.push(*follower_id); + } + if upper_aggregation_number == *follower_aggregation_number { + // Balancing is only needed when they are equal. This is not + // perfect from concurrent perspective, but we + // can accept a few incorrect invariants in the graph. + self.push(AggregationUpdateJob::BalanceEdge { + upper_id, + task_id: *follower_id, + }) } + false }, ); } @@ -1397,77 +1420,91 @@ impl AggregationUpdateQueue { } } - let mut upper_data_updates = Vec::new(); - let mut upper_new_followers = Vec::new(); - for &(follower_id, _) in followers_with_aggregation_number.iter() { - let mut follower = ctx.task(follower_id, TaskDataCategory::Meta); - if update_count!(follower, Upper { task: upper_id }, 1) { - if !upper_id.is_transient() - && update_ucount_and_get!(follower, PersistentUpperCount, 1).is_power_of_two() - { - self.push_optimize_task(follower_id); - } + if !followers_with_aggregation_number.is_empty() { + #[cfg(feature = "trace_aggregation_update")] + let _span = trace_span!("new inner").entered(); + let mut upper_data_updates = Vec::new(); + let mut upper_new_followers = Vec::new(); + for &(follower_id, _) in followers_with_aggregation_number.iter() { + let mut follower = ctx.task(follower_id, TaskDataCategory::Meta); + if update_count!(follower, Upper { task: upper_id }, 1) { + if !upper_id.is_transient() + && update_ucount_and_get!(follower, PersistentUpperCount, 1) + .is_power_of_two() + { + self.push_optimize_task(follower_id); + } - // It's a new upper - let data = AggregatedDataUpdate::from_task(&mut follower); - let children: Vec<_> = get_followers(&follower); - drop(follower); + // It's a new upper + let data = AggregatedDataUpdate::from_task(&mut follower); + let children: Vec<_> = get_followers(&follower); + let follower_aggregation_number = get_aggregation_number(&follower); + drop(follower); - if !data.is_empty() { - upper_data_updates.push(data); + if !data.is_empty() { + upper_data_updates.push(data); + } + upper_new_followers.extend(children); + + // Balancing is only needed when they are equal (or could have become equal in + // the meantime). This is not perfect from concurrent + // perspective, but we can accept a few incorrect invariants + // in the graph. + if upper_aggregation_number <= follower_aggregation_number { + self.push(AggregationUpdateJob::BalanceEdge { + upper_id, + task_id: follower_id, + }) + } } - upper_new_followers.extend(children); } - } - if !upper_new_followers.is_empty() { - #[cfg(feature = "trace_aggregation_update")] - let _span = trace_span!("new follower").entered(); - self.push(AggregationUpdateJob::InnerOfUpperHasNewFollowers { - upper_id, - new_follower_ids: upper_new_followers, - }); - } - #[cfg(feature = "trace_aggregation_update")] - let _span = trace_span!("new inner").entered(); - if !upper_data_updates.is_empty() { - // add data to upper - let mut upper = ctx.task(upper_id, TaskDataCategory::Meta); - let diffs = upper_data_updates - .into_iter() - .filter_map(|data| { - let diff = data.apply(&mut upper, ctx.session_id(), self); - (!diff.is_empty()).then_some(diff) - }) - .collect::>(); - let mut iter = diffs.into_iter(); - if let Some(mut diff) = iter.next() { - let upper_ids = get_uppers(&upper); - drop(upper); - // TODO merge AggregatedDataUpdate - for next_diff in iter { + if !upper_new_followers.is_empty() { + self.push(AggregationUpdateJob::InnerOfUpperHasNewFollowers { + upper_id, + new_follower_ids: upper_new_followers, + }); + } + if !upper_data_updates.is_empty() { + // add data to upper + let mut upper = ctx.task(upper_id, TaskDataCategory::Meta); + let diffs = upper_data_updates + .into_iter() + .filter_map(|data| { + let diff = data.apply(&mut upper, ctx.session_id(), self); + (!diff.is_empty()).then_some(diff) + }) + .collect::>(); + let mut iter = diffs.into_iter(); + if let Some(mut diff) = iter.next() { + let upper_ids = get_uppers(&upper); + drop(upper); + // TODO merge AggregatedDataUpdate + for next_diff in iter { + self.push(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids: upper_ids.clone(), + update: diff, + }); + diff = next_diff; + } self.push(AggregationUpdateJob::AggregatedDataUpdate { - upper_ids: upper_ids.clone(), + upper_ids, update: diff, }); - diff = next_diff; } - self.push(AggregationUpdateJob::AggregatedDataUpdate { - upper_ids, - update: diff, - }); + } + if is_aggregate_root { + self.extend_find_and_schedule_dirty( + followers_with_aggregation_number + .into_iter() + .map(|(id, _)| id), + ); } } - if is_aggregate_root { - self.extend_find_and_schedule_dirty( - followers_with_aggregation_number - .into_iter() - .map(|(id, _)| id), - ); - } - if !new_followers_of_upper_uppers.is_empty() - && !upper_upper_ids_for_new_followers.is_empty() - { + // notify uppers about new follower + if !upper_upper_ids_for_new_followers.is_empty() { + #[cfg(feature = "trace_aggregation_update")] + let _span = trace_span!("new follower").entered(); self.push(AggregationUpdateJob::InnerOfUppersHasNewFollowers { upper_ids: upper_upper_ids_for_new_followers, new_follower_ids: new_followers_of_upper_uppers, @@ -1518,6 +1555,16 @@ impl AggregationUpdateQueue { new_follower_id, }); } + + // Balancing is only needed when they are equal. This is not perfect from concurrent + // perspective, but we can accept a few incorrect invariants in the + // graph. + if upper_aggregation_number == follower_aggregation_number { + self.push(AggregationUpdateJob::BalanceEdge { + upper_id, + task_id: new_follower_id, + }); + } } } else { #[cfg(feature = "trace_aggregation_update")] @@ -1664,6 +1711,10 @@ impl AggregationUpdateQueue { let _span = trace_span!("check optimize").entered(); let task = ctx.task(task_id, TaskDataCategory::Meta); + let children_count = get!(task, ChildrenCount).copied().unwrap_or_default(); + if children_count == 0 { + return; + } let aggregation_number = get!(task, AggregationNumber).copied().unwrap_or_default(); if is_root_node(aggregation_number.effective) { return; @@ -1671,6 +1722,23 @@ impl AggregationUpdateQueue { let upper_count = get!(task, PersistentUpperCount) .copied() .unwrap_or_default(); + if !is_aggregating_node(aggregation_number.effective) { + if upper_count > MAX_UPPERS_FOR_LEAF { + #[cfg(feature = "trace_aggregation_update")] + let _span = trace_span!( + "optimize leaf", + old_aggregation_number = aggregation_number.effective, + upper_count + ) + .entered(); + self.push(AggregationUpdateJob::UpdateAggregationNumber { + task_id, + base_aggregation_number: LEAF_NUMBER, + distance: None, + }); + } + return; + } if upper_count <= aggregation_number.effective { // Doesn't need optimization return; @@ -1678,15 +1746,6 @@ impl AggregationUpdateQueue { let uppers = get_uppers(&task); drop(task); - if !is_aggregating_node(aggregation_number.effective) { - self.push(AggregationUpdateJob::UpdateAggregationNumber { - task_id, - base_aggregation_number: LEAF_NUMBER, - distance: None, - }); - return; - } - let mut root_uppers = 0; let mut uppers_aggregation_numbers = uppers @@ -1784,3 +1843,26 @@ impl Operation for AggregationUpdateQueue { } } } + +fn swap_retain(vec: &mut Vec, mut f: impl FnMut(&mut T) -> bool) { + let mut i = 0; + while i < vec.len() { + if !f(&mut vec[i]) { + vec.swap_remove(i); + } else { + i += 1; + } + } +} + +#[cfg(test)] +mod tests { + use crate::backend::operation::aggregation_update::swap_retain; + + #[test] + fn test_swap_retain() { + let mut vec = vec![1, 2, 3, 4, 5]; + swap_retain(&mut vec, |a| *a % 2 != 0); + assert_eq!(vec, vec![1, 5, 3]); + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/data.rs b/turbopack/crates/turbo-tasks-backend/src/data.rs index 5ed4732cc8d91..3a12070f15f1e 100644 --- a/turbopack/crates/turbo-tasks-backend/src/data.rs +++ b/turbopack/crates/turbo-tasks-backend/src/data.rs @@ -258,6 +258,7 @@ pub enum InProgressState { #[allow(dead_code)] once_task: bool, session_dependent: bool, + marked_as_completed: bool, done_event: Event, }, } diff --git a/turbopack/crates/turbo-tasks-testing/tests/performance.rs b/turbopack/crates/turbo-tasks-testing/tests/performance.rs index 1392bd154f574..f576ba05caf09 100644 --- a/turbopack/crates/turbo-tasks-testing/tests/performance.rs +++ b/turbopack/crates/turbo-tasks-testing/tests/performance.rs @@ -2,9 +2,10 @@ #![feature(arbitrary_self_types_pointers)] #![allow(clippy::needless_return)] // tokio macro-generated code doesn't respect this -use std::time::Duration; +use std::{future::Future, time::Duration}; -use turbo_tasks::Vc; +use anyhow::Result; +use turbo_tasks::{TransientInstance, Vc}; use turbo_tasks_testing::{register, run, Registration}; static REGISTRATION: Registration = register!(); @@ -12,77 +13,288 @@ static REGISTRATION: Registration = register!(); const COUNT1: u32 = 100; const COUNT2: u32 = 2000; -#[tokio::test] -async fn many_calls_to_many_children() { +async fn run_test( + f: impl Fn() -> F + Sync + Send + Clone + 'static, + limit: Duration, +) -> anyhow::Result<()> +where + F: Future> + Sync + Send + 'static, +{ + // The first call will actually execute everything. + let start = std::time::Instant::now(); + f().await?; + println!("Initial call took {:?}", start.elapsed()); + + let mut warmup_calls = Vec::new(); + + for _ in 0..10 { + let start = std::time::Instant::now(); + f().await?; + let warmup_call = start.elapsed(); + println!("Subsequent call took {:?}", warmup_call); + warmup_calls.push(warmup_call); + } + + // Susbsequent calls should be very fast. + let start = std::time::Instant::now(); + for _ in 0..COUNT1 { + f().await?; + } + let subsequent = start.elapsed(); + println!( + "First {} subsequent calls took {:?} ({:?} per call)", + COUNT1, + subsequent, + subsequent / COUNT1 + ); + + let start = std::time::Instant::now(); + for _ in 0..COUNT1 { + f().await?; + } + let subsequent2 = start.elapsed(); + println!( + "Another {} subsequent calls took {:?} ({:?} per call)", + COUNT1, + subsequent2, + subsequent2 / COUNT1 + ); + + let start = std::time::Instant::now(); + for _ in 0..COUNT1 { + f().await?; + } + let subsequent3 = start.elapsed(); + println!( + "Another {} subsequent calls took {:?} ({:?} per call)", + COUNT1, + subsequent3, + subsequent3 / COUNT1 + ); + + if subsequent2 * 2 > subsequent * 3 || subsequent3 * 2 > subsequent * 3 { + // Performance regresses with more calls + // Check if this fixes itself eventually + for i in 0.. { + let start = std::time::Instant::now(); + for _ in 0..COUNT1 { + f().await?; + } + let subsequent4 = start.elapsed(); + println!( + "Another {} subsequent calls took {:?} ({:?} per call)", + COUNT1, + subsequent4, + subsequent4 / COUNT1 + ); + if subsequent4 * 2 < subsequent * 3 { + break; + } + if i >= 20 { + panic!("Performance regressed with more calls"); + } + } + } + + let start = std::time::Instant::now(); + f().await?; + let final_call = start.elapsed(); + println!("Final call took {:?}", final_call); + + let target = subsequent / COUNT1; + + for (i, warmup_call) in warmup_calls.into_iter().enumerate() { + assert!( + warmup_call < target * 10, + "Warmup call {} should be less than {:?}", + i, + target * 10 + ); + } + + assert!( + subsequent < limit * COUNT1, + "Each call should be less than {:?}", + limit + ); + + assert!( + subsequent2 < limit * COUNT1, + "Each call should be less than {:?}", + limit + ); + + assert!( + subsequent3 < limit * COUNT1, + "Each call should be less than {:?}", + limit + ); + + anyhow::Ok(()) +} + +fn check_skip() -> bool { if matches!( std::env::var("TURBOPACK_TEST_PERFORMANCE").ok().as_deref(), None | Some("") | Some("no") | Some("false") ) { println!("Skipping test, pass `TURBOPACK_TEST_PERFORMANCE=yes` to run it"); + return true; + } + + false +} + +#[tokio::test] +async fn many_calls_to_many_children() { + if check_skip() { return; } + run(®ISTRATION, || { + run_test( + || calls_many_children(TransientInstance::new(()), None).strongly_consistent(), + Duration::from_micros(100), + ) + }) + .await + .unwrap(); +} - run(®ISTRATION, || async { - // The first call will actually execute many_children and its children. - let start = std::time::Instant::now(); - calls_many_children(0).strongly_consistent().await?; - println!("Initial call took {:?}", start.elapsed()); +#[tokio::test] +async fn many_calls_to_uncached_many_children() { + if check_skip() { + return; + } + run(®ISTRATION, || { + run_test( + || { + calls_many_children(TransientInstance::new(()), Some(TransientInstance::new(()))) + .strongly_consistent() + }, + Duration::from_micros(100) * COUNT2, + ) + }) + .await + .unwrap(); +} - // The second call will connect to the cached many_children, but it would be ok if that's - // not yet optimized. - let start = std::time::Instant::now(); - calls_many_children(1).strongly_consistent().await?; - println!("Second call took {:?}", start.elapsed()); +fn run_big_graph_test(counts: Vec) -> impl Future> + Send + 'static { + println!( + "Graph {:?} = {} tasks", + counts, + (1..=counts.len()) + .map(|i| counts.iter().take(i).product::()) + .sum::() + ); + run_test( + move || calls_big_graph(counts.clone(), TransientInstance::new(())).strongly_consistent(), + Duration::from_micros(100), + ) +} - // Susbsequent calls should be very fast. - let start = std::time::Instant::now(); - for i in 2..COUNT1 { - calls_many_children(i).strongly_consistent().await?; - } - let subsequent = start.elapsed(); - println!( - "First {} subsequent calls took {:?}", - COUNT1 - 2, - subsequent - ); +#[tokio::test] +async fn many_calls_to_big_graph_1() { + if check_skip() { + return; + } + run(®ISTRATION, || run_big_graph_test(vec![5, 8, 10, 15, 20])) + .await + .unwrap(); +} - let start = std::time::Instant::now(); - for i in COUNT1..COUNT1 * 2 - 2 { - calls_many_children(i).strongly_consistent().await?; - } - let subsequent2 = start.elapsed(); - println!( - "Another {} subsequent calls took {:?}", - COUNT1 - 2, - subsequent2 - ); +#[tokio::test] +async fn many_calls_to_big_graph_2() { + if check_skip() { + return; + } + run(®ISTRATION, || { + run_big_graph_test(vec![2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]) + }) + .await + .unwrap(); +} - let start = std::time::Instant::now(); - calls_many_children(COUNT1 - 1) - .strongly_consistent() - .await?; - let final_call = start.elapsed(); - println!("Final call took {:?}", final_call); +#[tokio::test] +async fn many_calls_to_big_graph_3() { + if check_skip() { + return; + } + run(®ISTRATION, || run_big_graph_test(vec![1000, 3, 3, 3, 3])) + .await + .unwrap(); +} - assert!( - subsequent2 * 2 < subsequent * 3, - "Performance should not regress with more calls" - ); +#[tokio::test] +async fn many_calls_to_big_graph_4() { + if check_skip() { + return; + } + run(®ISTRATION, || run_big_graph_test(vec![3, 3, 3, 3, 1000])) + .await + .unwrap(); +} - assert!( - subsequent < Duration::from_micros(100) * (COUNT1 - 2), - "Each call should be less than 100µs" - ); +#[tokio::test] +async fn many_calls_to_big_graph_5() { + if check_skip() { + return; + } + run(®ISTRATION, || { + run_big_graph_test(vec![10, 10, 10, 10, 10]) + }) + .await + .unwrap(); +} - assert!( - subsequent2 < Duration::from_micros(100) * (COUNT1 - 2), - "Each call should be less than 100µs" - ); +#[tokio::test] +async fn many_calls_to_big_graph_6() { + if check_skip() { + return; + } + run(®ISTRATION, || { + run_big_graph_test(vec![2, 2, 2, 1000, 2, 2, 2]) + }) + .await + .unwrap(); +} + +#[tokio::test] +async fn many_calls_to_big_graph_7() { + if check_skip() { + return; + } + run(®ISTRATION, || { + run_big_graph_test(vec![ + 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 2, 1, 1, 1, 1, 5, 1, 1, 1, 200, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + ]) + }) + .await + .unwrap(); +} + +#[tokio::test] +async fn many_calls_to_big_graph_8() { + if check_skip() { + return; + } + run(®ISTRATION, || { + run_big_graph_test(vec![200, 2, 2, 2, 2, 200]) + }) + .await + .unwrap(); +} - anyhow::Ok(()) +#[tokio::test] +async fn many_calls_to_big_graph_9() { + if check_skip() { + return; + } + run(®ISTRATION, || { + run_big_graph_test(vec![10000, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1]) }) .await - .unwrap() + .unwrap(); } #[turbo_tasks::value] @@ -91,13 +303,16 @@ struct Value { } #[turbo_tasks::function] -async fn calls_many_children(_i: u32) -> Vc<()> { - let _ = many_children(); +async fn calls_many_children( + _i: TransientInstance<()>, + j: Option>, +) -> Vc<()> { + let _ = many_children(j); Vc::cell(()) } #[turbo_tasks::function] -fn many_children() -> Vc<()> { +fn many_children(_j: Option>) -> Vc<()> { for i in 0..COUNT2 { let _ = many_children_inner(i); } @@ -108,3 +323,22 @@ fn many_children() -> Vc<()> { fn many_children_inner(_i: u32) -> Vc<()> { Vc::cell(()) } + +#[turbo_tasks::function] +async fn calls_big_graph(mut counts: Vec, _i: TransientInstance<()>) -> Vc<()> { + counts.reverse(); + let _ = big_graph(counts, vec![]); + Vc::cell(()) +} + +#[turbo_tasks::function] +fn big_graph(mut counts: Vec, keys: Vec) -> Vc<()> { + let Some(count) = counts.pop() else { + return Vc::cell(()); + }; + for i in 0..count { + let new_keys = keys.iter().copied().chain(std::iter::once(i)).collect(); + let _ = big_graph(counts.clone(), new_keys); + } + Vc::cell(()) +} From c82d85e6f50e8d399eb264b9a190fa22c72ee256 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Tue, 14 Jan 2025 16:39:15 +0100 Subject: [PATCH 42/65] [Turbopack] add active_counter to keep tasks active (#74772) Rename AggregateRoot to Activeness and split into both sources improve readablility add active_counter as source of activeness add Debug for DequeSet --- .../turbo-tasks-backend/src/backend/mod.rs | 44 ++-- .../backend/operation/aggregation_update.rs | 205 +++++++++++++++--- .../backend/operation/cleanup_old_edges.rs | 8 + .../src/backend/operation/connect_child.rs | 6 + .../src/backend/operation/invalidate.rs | 2 +- .../src/backend/operation/mod.rs | 14 ++ .../src/backend/storage.rs | 28 +++ .../crates/turbo-tasks-backend/src/data.rs | 91 ++++++-- .../src/utils/deque_set.rs | 7 + .../src/derive/key_value_pair_macro.rs | 55 +++++ 10 files changed, 389 insertions(+), 71 deletions(-) diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs b/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs index a4944b78be4fc..ed2ab3804714f 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs @@ -44,13 +44,13 @@ use crate::{ ExecuteContext, ExecuteContextImpl, Operation, OutdatedEdge, TaskDirtyCause, TaskGuard, }, persisted_storage_log::PersistedStorageLog, - storage::{get, get_many, get_mut, iter_many, remove, Storage}, + storage::{get, get_many, get_mut, get_mut_or_insert_with, iter_many, remove, Storage}, }, backing_storage::BackingStorage, data::{ - ActiveType, AggregationNumber, CachedDataItem, CachedDataItemKey, CachedDataItemType, + ActivenessState, AggregationNumber, CachedDataItem, CachedDataItemKey, CachedDataItemType, CachedDataItemValue, CachedDataItemValueRef, CachedDataUpdate, CellRef, CollectibleRef, - CollectiblesRef, DirtyState, InProgressCellState, InProgressState, OutputValue, RootState, + CollectiblesRef, DirtyState, InProgressCellState, InProgressState, OutputValue, RootType, }, utils::{bi_map::BiMap, chunked_vec::ChunkedVec, ptr_eq_arc::PtrEqArc, sharded::Sharded}, }; @@ -447,7 +447,7 @@ impl TurboTasksBackendInner { .unwrap_or_default() .get(self.session_id); if dirty_tasks > 0 || is_dirty { - let root = get!(task, AggregateRoot); + let root = get!(task, Activeness); let mut task_ids_to_schedule: Vec<_> = Vec::new(); // When there are dirty task, subscribe to the all_clean_event let root = if let Some(root) = root { @@ -456,10 +456,9 @@ impl TurboTasksBackendInner { // If we don't have a root state, add one. This also makes sure all tasks stay // active and this task won't stale. CachedActiveUntilClean // is automatically removed when this task is clean. - task.add_new(CachedDataItem::AggregateRoot { - value: RootState::new(ActiveType::CachedActiveUntilClean, task_id), - }); - // A newly added AggregateRoot need to make sure to schedule the tasks + get_mut_or_insert_with!(task, Activeness, || ActivenessState::new(task_id)) + .set_active_until_clean(); + // A newly added Activeness need to make sure to schedule the tasks task_ids_to_schedule = get_many!( task, AggregatedDirtyContainer { @@ -471,7 +470,7 @@ impl TurboTasksBackendInner { if is_dirty { task_ids_to_schedule.push(task_id); } - get!(task, AggregateRoot).unwrap() + get!(task, Activeness).unwrap() }; let listener = root.all_clean_event.listen_with_note(move || { format!( @@ -1373,10 +1372,11 @@ impl TurboTasksBackendInner { }; if !aggregated_update.is_zero() { if aggregated_update.get(self.session_id) < 0 { - if let Some(root_state) = get!(task, AggregateRoot) { + if let Some(root_state) = get_mut!(task, Activeness) { root_state.all_clean_event.notify(usize::MAX); - if matches!(root_state.ty, ActiveType::CachedActiveUntilClean) { - task.remove(&CachedDataItemKey::AggregateRoot {}); + root_state.unset_active_until_clean(); + if root_state.is_empty() { + task.remove(&CachedDataItemKey::Activeness {}); } } } @@ -1700,8 +1700,8 @@ impl TurboTasksBackendInner { fn create_transient_task(&self, task_type: TransientTaskType) -> TaskId { let task_id = self.transient_task_id_factory.get(); let root_type = match task_type { - TransientTaskType::Root(_) => ActiveType::RootTask, - TransientTaskType::Once(_) => ActiveType::OnceTask, + TransientTaskType::Root(_) => RootType::RootTask, + TransientTaskType::Once(_) => RootType::OnceTask, }; self.transient_tasks.insert( task_id, @@ -1719,13 +1719,12 @@ impl TurboTasksBackendInner { effective: u32::MAX, }, }); - task.add(CachedDataItem::AggregateRoot { - value: RootState::new(root_type, task_id), + task.add(CachedDataItem::Activeness { + value: ActivenessState::new_root(root_type, task_id), }); task.add(CachedDataItem::new_scheduled(move || match root_type { - ActiveType::RootTask => "Root Task".to_string(), - ActiveType::OnceTask => "Once Task".to_string(), - _ => unreachable!(), + RootType::RootTask => "Root Task".to_string(), + RootType::OnceTask => "Once Task".to_string(), })); } task_id @@ -1744,11 +1743,12 @@ impl TurboTasksBackendInner { dirty_containers.get(self.session_id) > 0 }); if is_dirty || has_dirty_containers { - if let Some(root_state) = get_mut!(task, AggregateRoot) { + if let Some(root_state) = get_mut!(task, Activeness) { // We will finish the task, but it would be removed after the task is done - root_state.ty = ActiveType::CachedActiveUntilClean; + root_state.unset_root_type(); + root_state.set_active_until_clean(); }; - } else if let Some(root_state) = remove!(task, AggregateRoot) { + } else if let Some(root_state) = remove!(task, Activeness) { // Technically nobody should be listening to this event, but just in case // we notify it anyway root_state.all_clean_event.notify(usize::MAX); diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs index 3f2359ff2202c..8a2859e1e9e27 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs @@ -18,6 +18,7 @@ use turbo_tasks::{FxIndexMap, SessionId, TaskId, TraitTypeId}; use crate::{ backend::{ + get_mut, get_mut_or_insert_with, operation::{ invalidate::{make_task_dirty, TaskDirtyCause}, ExecuteContext, Operation, TaskGuard, @@ -26,8 +27,8 @@ use crate::{ TaskDataCategory, }, data::{ - ActiveType, AggregationNumber, CachedDataItem, CachedDataItemKey, CollectibleRef, - DirtyContainerCount, RootState, + ActivenessState, AggregationNumber, CachedDataItem, CachedDataItemKey, CollectibleRef, + DirtyContainerCount, }, utils::deque_set::DequeSet, }; @@ -137,6 +138,14 @@ pub enum AggregationUpdateJob { task_ids: SmallVec<[TaskId; 4]>, collectible_type: TraitTypeId, }, + /// Increases the active counter of the task + IncreaseActiveCount { task: TaskId }, + /// Increases the active counters of the tasks + IncreaseActiveCounts { task_ids: Vec }, + /// Decreases the active counter of the task + DecreaseActiveCount { task: TaskId }, + /// Decreases the active counters of the tasks + DecreaseActiveCounts { task_ids: Vec }, /// Balances the edges of the graph. This checks if the graph invariant is still met for this /// edge and coverts a upper edge to a follower edge or vice versa. Balancing might triggers /// more changes to the structure. @@ -244,9 +253,9 @@ impl AggregatedDataUpdate { let mut result = Self::default(); if let Some((dirty_container_id, count)) = dirty_container_update { // When a dirty container count is increased and the task is considered as active - // `AggregateRoot` we need to schedule the dirty tasks in the new dirty container + // we need to schedule the dirty tasks in the new dirty container let current_session_update = count.get(session_id); - if current_session_update > 0 && task.has_key(&CachedDataItemKey::AggregateRoot {}) { + if current_session_update > 0 && task.has_key(&CachedDataItemKey::Activeness {}) { queue.push_find_and_schedule_dirty(*dirty_container_id) } @@ -286,10 +295,11 @@ impl AggregatedDataUpdate { if count.get(session_id) < 0 { // When the current task is no longer dirty, we need to fire the aggregate // root events and do some cleanup - if let Some(root_state) = get!(task, AggregateRoot) { + if let Some(root_state) = get_mut!(task, Activeness) { root_state.all_clean_event.notify(usize::MAX); - if matches!(root_state.ty, ActiveType::CachedActiveUntilClean) { - task.remove(&CachedDataItemKey::AggregateRoot {}); + root_state.unset_active_until_clean(); + if root_state.is_empty() { + task.remove(&CachedDataItemKey::Activeness {}); } } } @@ -774,6 +784,32 @@ impl AggregationUpdateQueue { ); } } + AggregationUpdateJob::DecreaseActiveCount { task } => { + self.decrease_active_count(ctx, task); + } + AggregationUpdateJob::DecreaseActiveCounts { mut task_ids } => { + if let Some(task_id) = task_ids.pop() { + self.decrease_active_count(ctx, task_id); + if !task_ids.is_empty() { + self.jobs.push_front(AggregationUpdateJobItem::new( + AggregationUpdateJob::DecreaseActiveCounts { task_ids }, + )); + } + } + } + AggregationUpdateJob::IncreaseActiveCount { task } => { + self.increase_active_count(ctx, task); + } + AggregationUpdateJob::IncreaseActiveCounts { mut task_ids } => { + if let Some(task_id) = task_ids.pop() { + self.increase_active_count(ctx, task_id); + if !task_ids.is_empty() { + self.jobs.push_front(AggregationUpdateJobItem::new( + AggregationUpdateJob::IncreaseActiveCounts { task_ids }, + )); + } + } + } } false } else if !self.number_updates.is_empty() { @@ -905,6 +941,8 @@ impl AggregationUpdateQueue { // followers let data = AggregatedDataUpdate::from_task(&mut task); let followers = get_followers(&task); + let has_active_count = + get!(task, Activeness).is_some_and(|a| a.active_counter > 0); let diff = data.apply(&mut upper, ctx.session_id(), self); if !upper_ids.is_empty() && !diff.is_empty() { @@ -915,14 +953,20 @@ impl AggregationUpdateQueue { }); } if !followers.is_empty() { + if has_active_count { + // TODO combine both operations to avoid the clone + self.push(AggregationUpdateJob::IncreaseActiveCounts { + task_ids: followers.clone(), + }) + } self.push(AggregationUpdateJob::InnerOfUpperHasNewFollowers { upper_id, new_follower_ids: followers, }); } - if upper.has_key(&CachedDataItemKey::AggregateRoot {}) { - // If the upper node is an `AggregateRoot` we need to schedule the + if upper.has_key(&CachedDataItemKey::Activeness {}) { + // If the upper node is has `Activeness` we need to schedule the // dirty tasks in the new dirty container self.push_find_and_schedule_dirty(task_id); } @@ -958,6 +1002,10 @@ impl AggregationUpdateQueue { // Add the same amount of follower edges if update_count!(upper, Follower { task: task_id }, count) { + // update active count + if get!(task, Activeness).is_some_and(|a| a.active_counter > 0) { + self.push(AggregationUpdateJob::IncreaseActiveCount { task: task_id }); + } // notify uppers about new follower if !upper_ids.is_empty() { self.push(AggregationUpdateJob::InnerOfUppersHasNewFollower { @@ -1025,14 +1073,17 @@ impl AggregationUpdateQueue { } } if is_aggregating_node(get_aggregation_number(&task)) { - // if it has an `AggregateRoot` we can skip visiting the nested nodes since - // this would already be scheduled by the `AggregateRoot` - if !task.has_key(&CachedDataItemKey::AggregateRoot {}) { + // if it has `Activeness` we can skip visiting the nested nodes since + // this would already be scheduled by the `Activeness` + if !task.has_key(&CachedDataItemKey::Activeness {}) { let dirty_containers: Vec<_> = get_many!(task, AggregatedDirtyContainer { task } count if count.get(session_id) > 0 => task); if !dirty_containers.is_empty() || dirty { - task.insert(CachedDataItem::AggregateRoot { - value: RootState::new(ActiveType::CachedActiveUntilClean, task_id), + let mut activeness_state = ActivenessState::new(task_id); + activeness_state.set_active_until_clean(); + task.insert(CachedDataItem::Activeness { + value: activeness_state, }); + drop(task); self.extend_find_and_schedule_dirty(dirty_containers); } @@ -1135,7 +1186,17 @@ impl AggregationUpdateQueue { }, -1 ) { + let has_active_count = + get!(upper, Activeness).is_some_and(|a| a.active_counter > 0); let upper_ids = get_uppers(&upper); + drop(upper); + // update active count + if has_active_count { + self.push(AggregationUpdateJob::DecreaseActiveCount { + task: lost_follower_id, + }); + } + // notify uppers about new follower if !upper_ids.is_empty() { self.push(AggregationUpdateJob::InnerOfUppersLostFollower { upper_ids, @@ -1220,6 +1281,16 @@ impl AggregationUpdateQueue { -1 ) { let upper_ids = get_uppers(&upper); + let has_active_count = + get!(upper, Activeness).is_some_and(|a| a.active_counter > 0); + drop(upper); + // update active count + if has_active_count { + self.push(AggregationUpdateJob::DecreaseActiveCount { + task: lost_follower_id, + }); + } + // notify uppers about new follower if !upper_ids.is_empty() { self.push(AggregationUpdateJob::InnerOfUppersLostFollower { upper_ids, @@ -1245,7 +1316,8 @@ impl AggregationUpdateQueue { get_aggregation_number(&follower) }; let mut upper_upper_ids_with_new_follower = Vec::new(); - let mut is_aggregate_root = false; + let mut tasks_for_which_increment_active_count = Vec::new(); + let mut is_active = false; swap_retain(&mut upper_ids, |&mut upper_id| { let mut upper = ctx.task(upper_id, TaskDataCategory::Meta); // decide if it should be an inner or follower @@ -1262,6 +1334,11 @@ impl AggregationUpdateQueue { }, 1 ) { + // update active count + if get!(upper, Activeness).is_some_and(|a| a.active_counter > 0) { + tasks_for_which_increment_active_count.push(new_follower_id); + } + // notify uppers about new follower upper_upper_ids_with_new_follower.extend(iter_uppers(&upper)); } @@ -1277,8 +1354,8 @@ impl AggregationUpdateQueue { false } else { // It's an inner node, continue with the list - if upper.has_key(&CachedDataItemKey::AggregateRoot {}) { - is_aggregate_root = true; + if upper.has_key(&CachedDataItemKey::Activeness {}) { + is_active = true; } true } @@ -1346,9 +1423,14 @@ impl AggregationUpdateQueue { drop(follower); } } - if is_aggregate_root { + if is_active { self.push_find_and_schedule_dirty(new_follower_id); } + if !tasks_for_which_increment_active_count.is_empty() { + self.push(AggregationUpdateJob::IncreaseActiveCounts { + task_ids: tasks_for_which_increment_active_count, + }); + } if !upper_upper_ids_with_new_follower.is_empty() { #[cfg(feature = "trace_aggregation_update")] let _span = trace_span!("new follower").entered(); @@ -1381,12 +1463,15 @@ impl AggregationUpdateQueue { .collect::>(); let mut new_followers_of_upper_uppers = Vec::new(); - let is_aggregate_root; + let is_active; + let has_active_count; let mut upper_upper_ids_for_new_followers = Vec::new(); let upper_aggregation_number; { let mut upper = ctx.task(upper_id, TaskDataCategory::Meta); - is_aggregate_root = upper.has_key(&CachedDataItemKey::AggregateRoot {}); + let activeness_state = get!(upper, Activeness); + is_active = activeness_state.is_some(); + has_active_count = activeness_state.is_some_and(|a| a.active_counter > 0); // decide if it should be an inner or follower upper_aggregation_number = get_aggregation_number(&upper); @@ -1493,7 +1578,7 @@ impl AggregationUpdateQueue { }); } } - if is_aggregate_root { + if is_active { self.extend_find_and_schedule_dirty( followers_with_aggregation_number .into_iter() @@ -1501,14 +1586,23 @@ impl AggregationUpdateQueue { ); } } - // notify uppers about new follower - if !upper_upper_ids_for_new_followers.is_empty() { + if !new_followers_of_upper_uppers.is_empty() { #[cfg(feature = "trace_aggregation_update")] let _span = trace_span!("new follower").entered(); - self.push(AggregationUpdateJob::InnerOfUppersHasNewFollowers { - upper_ids: upper_upper_ids_for_new_followers, - new_follower_ids: new_followers_of_upper_uppers, - }); + // update active count + if has_active_count { + // TODO combine both operations to avoid the clone + self.push(AggregationUpdateJob::IncreaseActiveCounts { + task_ids: new_followers_of_upper_uppers.clone(), + }); + } + // notify uppers about new follower + if !upper_upper_ids_for_new_followers.is_empty() { + self.push(AggregationUpdateJob::InnerOfUppersHasNewFollowers { + upper_ids: upper_upper_ids_for_new_followers, + new_follower_ids: new_followers_of_upper_uppers, + }); + } } } @@ -1527,7 +1621,7 @@ impl AggregationUpdateQueue { }; let mut upper = ctx.task(upper_id, TaskDataCategory::Meta); - if upper.has_key(&CachedDataItemKey::AggregateRoot {}) { + if upper.has_key(&CachedDataItemKey::Activeness {}) { self.push_find_and_schedule_dirty(new_follower_id); } // decide if it should be an inner or follower @@ -1547,8 +1641,17 @@ impl AggregationUpdateQueue { }, 1 ) { + let has_active_count = + get!(upper, Activeness).is_some_and(|a| a.active_counter > 0); let upper_ids = get_uppers(&upper); drop(upper); + // update active count + if has_active_count { + self.push(AggregationUpdateJob::IncreaseActiveCount { + task: new_follower_id, + }); + } + // notify uppers about new follower if !upper_ids.is_empty() { self.push(AggregationUpdateJob::InnerOfUppersHasNewFollower { upper_ids, @@ -1606,6 +1709,52 @@ impl AggregationUpdateQueue { } } + fn decrease_active_count(&mut self, ctx: &mut impl ExecuteContext, task_id: TaskId) { + #[cfg(feature = "trace_aggregation_update")] + let _span = trace_span!("decrease active count").entered(); + + let mut task = ctx.task(task_id, TaskDataCategory::Meta); + let state = get_mut_or_insert_with!(task, Activeness, || ActivenessState::new(task_id)); + let is_zero = state.decrement_active_counter(); + let is_empty = state.is_empty(); + if is_empty { + task.remove(&CachedDataItemKey::Activeness {}); + } + if is_zero { + let followers = get_followers(&task); + drop(task); + if !followers.is_empty() { + self.push(AggregationUpdateJob::DecreaseActiveCounts { + task_ids: followers, + }); + } + } + } + + fn increase_active_count(&mut self, ctx: &mut impl ExecuteContext, task_id: TaskId) { + #[cfg(feature = "trace_aggregation_update")] + let _span = trace_span!("increase active count").entered(); + + let mut task = ctx.task(task_id, TaskDataCategory::Meta); + let state = get_mut_or_insert_with!(task, Activeness, || ActivenessState::new(task_id)); + let is_positive = state.increment_active_counter(); + let is_empty = state.is_empty(); + // This can happen if active count is negative before + if is_empty { + task.remove(&CachedDataItemKey::Activeness {}); + } + if is_positive { + let followers = get_followers(&task); + drop(task); + if !followers.is_empty() { + self.push(AggregationUpdateJob::IncreaseActiveCounts { + task_ids: followers, + }); + } + self.push_find_and_schedule_dirty(task_id); + } + } + fn update_aggregation_number( &mut self, ctx: &mut impl ExecuteContext, diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/cleanup_old_edges.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/cleanup_old_edges.rs index 05add4cd36918..7b9113451d8b2 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backend/operation/cleanup_old_edges.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/cleanup_old_edges.rs @@ -5,6 +5,7 @@ use turbo_tasks::{TaskId, ValueTypeId}; use crate::{ backend::{ + get, operation::{ aggregation_update::{ get_aggregation_number, get_uppers, is_aggregating_node, AggregationUpdateJob, @@ -89,6 +90,13 @@ impl Operation for CleanupOldEdgesOperation { }); } else { let upper_ids = get_uppers(&task); + if get!(task, Activeness).is_some_and(|a| a.active_counter > 0) + { + // TODO combine both operations to avoid the clone + queue.push(AggregationUpdateJob::DecreaseActiveCounts { + task_ids: children.clone(), + }); + } queue.push(AggregationUpdateJob::InnerOfUppersLostFollowers { upper_ids, lost_follower_ids: children, diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/connect_child.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/connect_child.rs index 6180b70a3b8fa..d7338d6cf54f9 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backend/operation/connect_child.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/connect_child.rs @@ -60,6 +60,12 @@ impl ConnectChildOperation { }) { let mut queue = AggregationUpdateQueue::new(); + if get!(parent_task, Activeness).is_some_and(|a| a.active_counter > 0) { + queue.push(AggregationUpdateJob::IncreaseActiveCount { + task: child_task_id, + }) + } + // Get the children count let children_count = count!(parent_task, Child); diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/invalidate.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/invalidate.rs index 1ba1759743a83..1693d0c81b315 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backend/operation/invalidate.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/invalidate.rs @@ -232,7 +232,7 @@ pub fn make_task_dirty_internal( AggregatedDataUpdate::new().dirty_container_update(task_id, aggregated_update), )); } - task.has_key(&CachedDataItemKey::AggregateRoot {}) + task.has_key(&CachedDataItemKey::Activeness {}) } else { true }; diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/mod.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/mod.rs index 90da3175c7197..e8752ec7b0630 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backend/operation/mod.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/mod.rs @@ -370,6 +370,11 @@ pub trait TaskGuard: Debug { fn remove(&mut self, key: &CachedDataItemKey) -> Option; fn get(&self, key: &CachedDataItemKey) -> Option>; fn get_mut(&mut self, key: &CachedDataItemKey) -> Option>; + fn get_mut_or_insert_with( + &mut self, + key: &CachedDataItemKey, + insert: impl FnOnce() -> CachedDataItemValue, + ) -> CachedDataItemValueRefMut<'_>; fn has_key(&self, key: &CachedDataItemKey) -> bool; fn count(&self, ty: CachedDataItemType) -> usize; fn iter( @@ -596,6 +601,15 @@ impl TaskGuard for TaskGuardImpl<'_, B> { self.task.get_mut(key) } + fn get_mut_or_insert_with( + &mut self, + key: &CachedDataItemKey, + insert: impl FnOnce() -> CachedDataItemValue, + ) -> CachedDataItemValueRefMut<'_> { + self.check_access(key.category()); + self.task.get_mut_or_insert_with(key, insert) + } + fn has_key(&self, key: &CachedDataItemKey) -> bool { self.check_access(key.category()); self.task.has_key(key) diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/storage.rs b/turbopack/crates/turbo-tasks-backend/src/backend/storage.rs index c9715413e8fed..ec3b206927f1d 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backend/storage.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backend/storage.rs @@ -193,6 +193,15 @@ impl InnerStorage { self.get_map_mut(key.ty()).and_then(|m| m.get_mut(key)) } + pub fn get_mut_or_insert_with( + &mut self, + key: &CachedDataItemKey, + f: impl FnOnce() -> CachedDataItemValue, + ) -> CachedDataItemValueRefMut<'_> { + self.get_or_create_map_mut(key.ty()) + .get_mut_or_insert_with(key, f) + } + pub fn has_key(&self, key: &CachedDataItemKey) -> bool { self.get_map(key.ty()) .map(|m| m.contains_key(key)) @@ -366,6 +375,24 @@ macro_rules! get_mut { }; } +macro_rules! get_mut_or_insert_with { + ($task:ident, $key:ident $input:tt, $f:expr) => {{ + #[allow(unused_imports)] + use $crate::backend::operation::TaskGuard; + let () = $crate::data::allow_mut_access::$key; + let functor = $f; + let $crate::data::CachedDataItemValueRefMut::$key { + value, + } = $task.get_mut_or_insert_with(&$crate::data::CachedDataItemKey::$key $input, move || $crate::data::CachedDataItemValue::$key { value: functor() }) else { + unreachable!() + }; + value + }}; + ($task:ident, $key:ident, $f:expr) => { + $crate::backend::storage::get_mut_or_insert_with!($task, $key {}, $f) + }; +} + /// Creates an iterator over all [`CachedDataItemKey::$key`][crate::data::CachedDataItemKey]s in /// `$task` matching the given `$key_pattern`, optional `$value_pattern`, and optional `if $cond`. /// @@ -530,6 +557,7 @@ pub(crate) use count; pub(crate) use get; pub(crate) use get_many; pub(crate) use get_mut; +pub(crate) use get_mut_or_insert_with; pub(crate) use iter_many; pub(crate) use remove; pub(crate) use update; diff --git a/turbopack/crates/turbo-tasks-backend/src/data.rs b/turbopack/crates/turbo-tasks-backend/src/data.rs index 3a12070f15f1e..a29159aa13c8c 100644 --- a/turbopack/crates/turbo-tasks-backend/src/data.rs +++ b/turbopack/crates/turbo-tasks-backend/src/data.rs @@ -67,23 +67,78 @@ impl OutputValue { } #[derive(Debug)] -pub struct RootState { - pub ty: ActiveType, +pub struct ActivenessState { + /// When this counter is > 0, the task is active. + pub active_counter: i32, + /// The task is a root or once task and is active due to that. + pub root_ty: Option, + /// The subgraph is active as long it's dirty. Once it become clean, it will unset this flag. + /// + /// This happens primarily when a dirty subgraph wants to be scheduled. It will set this flag + /// to "cache" the activeness. + /// + /// It also happens when a task is strongly consistently read. We need the `all_clean_event` in + /// that case and want to keep the task active to not stale the task. + pub active_until_clean: bool, + /// An event which is notifies when the subgraph is no longer dirty. It must be combined with + /// `active_until_clean` to avoid staling the task. pub all_clean_event: Event, } -impl RootState { - pub fn new(ty: ActiveType, id: TaskId) -> Self { +impl ActivenessState { + pub fn new(id: TaskId) -> Self { Self { - ty, - all_clean_event: Event::new(move || format!("RootState::all_clean_event {:?}", id)), + active_counter: 0, + root_ty: None, + active_until_clean: false, + all_clean_event: Event::new(move || { + format!("ActivenessState::all_clean_event {:?}", id) + }), } } + + pub fn new_root(root_ty: RootType, id: TaskId) -> Self { + let mut this = Self::new(id); + this.set_root(root_ty); + this + } + + pub fn set_root(&mut self, root_ty: RootType) { + self.root_ty = Some(root_ty); + } + + pub fn set_active_until_clean(&mut self) { + self.active_until_clean = true; + } + + /// Increment the active counter and return true if the counter was 0 before. + pub fn increment_active_counter(&mut self) -> bool { + self.active_counter += 1; + self.active_counter == 1 + } + + /// Decrement the active counter and return true if the counter is 0 after. + pub fn decrement_active_counter(&mut self) -> bool { + self.active_counter -= 1; + self.active_counter == 0 + } + + pub fn unset_root_type(&mut self) { + self.root_ty = None; + } + + pub fn unset_active_until_clean(&mut self) { + self.active_until_clean = false; + } + + pub fn is_empty(&self) -> bool { + self.root_ty.is_none() && !self.active_until_clean && self.active_counter == 0 + } } -transient_traits!(RootState); +transient_traits!(ActivenessState); -impl Eq for RootState {} +impl Eq for ActivenessState {} #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] pub struct DirtyState { @@ -239,13 +294,9 @@ impl DirtyContainerCount { } #[derive(Debug, Clone, Copy)] -pub enum ActiveType { +pub enum RootType { RootTask, OnceTask, - /// The aggregated task graph was scheduled because it has reached an AggregatedRoot while - /// propagating the dirty container or is read strongly consistent. This state is reset when - /// all this sub graph becomes clean again. - CachedActiveUntilClean, } #[derive(Debug)] @@ -390,8 +441,8 @@ pub enum CachedDataItem { // Transient Root Type #[serde(skip)] - AggregateRoot { - value: RootState, + Activeness { + value: ActivenessState, }, // Transient In Progress state @@ -464,7 +515,7 @@ impl CachedDataItem { !collectible.cell.task.is_transient() } CachedDataItem::AggregatedDirtyContainerCount { .. } => true, - CachedDataItem::AggregateRoot { .. } => false, + CachedDataItem::Activeness { .. } => false, CachedDataItem::InProgress { .. } => false, CachedDataItem::InProgressCell { .. } => false, CachedDataItem::OutdatedCollectible { .. } => false, @@ -530,7 +581,7 @@ impl CachedDataItem { | Self::InProgressCell { .. } | Self::InProgress { .. } | Self::Error { .. } - | Self::AggregateRoot { .. } => TaskDataCategory::All, + | Self::Activeness { .. } => TaskDataCategory::All, } } } @@ -562,7 +613,7 @@ impl CachedDataItemKey { !collectible.cell.task.is_transient() } CachedDataItemKey::AggregatedDirtyContainerCount { .. } => true, - CachedDataItemKey::AggregateRoot { .. } => false, + CachedDataItemKey::Activeness { .. } => false, CachedDataItemKey::InProgress { .. } => false, CachedDataItemKey::InProgressCell { .. } => false, CachedDataItemKey::OutdatedCollectible { .. } => false, @@ -616,7 +667,7 @@ impl CachedDataItemType { | Self::InProgressCell { .. } | Self::InProgress { .. } | Self::Error { .. } - | Self::AggregateRoot { .. } => TaskDataCategory::All, + | Self::Activeness { .. } => TaskDataCategory::All, } } } @@ -627,7 +678,7 @@ impl CachedDataItemType { #[allow(non_upper_case_globals, dead_code)] pub mod allow_mut_access { pub const InProgress: () = (); - pub const AggregateRoot: () = (); + pub const Activeness: () = (); } impl CachedDataItemValue { diff --git a/turbopack/crates/turbo-tasks-backend/src/utils/deque_set.rs b/turbopack/crates/turbo-tasks-backend/src/utils/deque_set.rs index c4b7fd1b47e8d..5ee5a3095f4ee 100644 --- a/turbopack/crates/turbo-tasks-backend/src/utils/deque_set.rs +++ b/turbopack/crates/turbo-tasks-backend/src/utils/deque_set.rs @@ -1,5 +1,6 @@ use std::{ collections::{HashSet, VecDeque}, + fmt::Debug, hash::{BuildHasher, BuildHasherDefault, Hash}, }; @@ -20,6 +21,12 @@ pub struct DequeSet> { queue: VecDeque, } +impl Debug for DequeSet { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + self.queue.fmt(f) + } +} + impl Default for DequeSet { fn default() -> Self { Self { diff --git a/turbopack/crates/turbo-tasks-macros/src/derive/key_value_pair_macro.rs b/turbopack/crates/turbo-tasks-macros/src/derive/key_value_pair_macro.rs index 1d8203dfa977a..2e5d6daca94a1 100644 --- a/turbopack/crates/turbo-tasks-macros/src/derive/key_value_pair_macro.rs +++ b/turbopack/crates/turbo-tasks-macros/src/derive/key_value_pair_macro.rs @@ -152,6 +152,19 @@ pub fn derive_key_value_pair(input: TokenStream) -> TokenStream { .map(|#(#value_fields)*| #value_ref_mut_name::#variant_name { #(#value_fields)* }) } }, + get_mut_or_insert_with: quote! { + (#storage_name::#variant_name { storage }, #key_name::#variant_name {}) => { + #value_ref_mut_name::#variant_name { + #(#value_fields)*: storage + .get_or_insert_with(|| { + let #value_name::#variant_name { #(#value_fields)* } = insert_with() else { + unreachable!(); + }; + #(#value_fields)* + }) + } + } + }, shrink_to_fit: quote! { #storage_name::#variant_name { .. } => { // nothing to do @@ -229,6 +242,20 @@ pub fn derive_key_value_pair(input: TokenStream) -> TokenStream { .map(|#(#value_fields)*| #value_ref_mut_name::#variant_name { #(#value_fields)* }) } }, + get_mut_or_insert_with: quote! { + (#storage_name::#variant_name { storage }, #key_name::#variant_name { #(#key_fields)* }) => { + #value_ref_mut_name::#variant_name { + #(#value_fields)*: storage + .entry(*#(#key_fields)*) + .or_insert_with(|| { + let #value_name::#variant_name { #(#value_fields)* } = insert_with() else { + unreachable!(); + }; + #(#value_fields)* + }) + } + } + }, shrink_to_fit: quote! { #storage_name::#variant_name { storage } => { storage.shrink_to_fit() @@ -307,6 +334,20 @@ pub fn derive_key_value_pair(input: TokenStream) -> TokenStream { .map(|#(#value_fields)*| #value_ref_mut_name::#variant_name { #(#value_fields)* }) } }, + get_mut_or_insert_with: quote! { + (#storage_name::#variant_name { storage }, #key_name::#variant_name { #(#key_fields),* }) => { + #value_ref_mut_name::#variant_name { + #(#value_fields)*: storage + .entry((#(*#key_fields),*)) + .or_insert_with(|| { + let #value_name::#variant_name { #(#value_fields)* } = insert_with() else { + unreachable!(); + }; + #(#value_fields)* + }) + } + } + }, shrink_to_fit: quote! { #storage_name::#variant_name { storage } => { storage.shrink_to_fit() @@ -351,6 +392,10 @@ pub fn derive_key_value_pair(input: TokenStream) -> TokenStream { .collect::>(); let storage_get = storage.iter().map(|decl| &decl.get).collect::>(); let storage_get_mut = storage.iter().map(|decl| &decl.get_mut).collect::>(); + let storage_get_mut_or_insert_with = storage + .iter() + .map(|decl| &decl.get_mut_or_insert_with) + .collect::>(); let storage_shrink_to_fit = storage .iter() .map(|decl| &decl.shrink_to_fit) @@ -590,6 +635,15 @@ pub fn derive_key_value_pair(input: TokenStream) -> TokenStream { } } + pub fn get_mut_or_insert_with(&mut self, key: &#key_name, insert_with: impl FnOnce() -> #value_name) -> #value_ref_mut_name { + match (self, key) { + #( + #storage_get_mut_or_insert_with + )* + _ => unreachable!(), + } + } + pub fn shrink_to_fit(&mut self) { match self { #( @@ -786,6 +840,7 @@ struct StorageDecl { contains_key: proc_macro2::TokenStream, get: proc_macro2::TokenStream, get_mut: proc_macro2::TokenStream, + get_mut_or_insert_with: proc_macro2::TokenStream, shrink_to_fit: proc_macro2::TokenStream, is_empty: proc_macro2::TokenStream, len: proc_macro2::TokenStream, From 87bd4ecf6fce60f8654f61eb8e0b543018e75f70 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Tue, 14 Jan 2025 17:13:13 +0100 Subject: [PATCH 43/65] chore: fix local development warnings inside next monorepo (#74863) ### What Follow up of #74647, do not enque warnings otherwise it's showing a message of updating `tsconfig.json` inside nextjs monorepo when you do `pnpm next ` ``` We detected TypeScript in your project and reconfigured your tsconfig.json file for you. Strict-mode is set to false by default. ``` This is because when there's action we'll always log this. --- .../src/lib/typescript/writeConfigurationDefaults.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/next/src/lib/typescript/writeConfigurationDefaults.ts b/packages/next/src/lib/typescript/writeConfigurationDefaults.ts index 95e847db769cd..1858bc174225a 100644 --- a/packages/next/src/lib/typescript/writeConfigurationDefaults.ts +++ b/packages/next/src/lib/typescript/writeConfigurationDefaults.ts @@ -317,15 +317,21 @@ export async function writeConfigurationDefaults( if (process.env.NEXT_PRIVATE_LOCAL_DEV && userTsConfig.exclude) { const tsGlob = '**/*.test.ts' const tsxGlob = '**/*.test.tsx' + let hasUpdates = false if (!userTsConfig.exclude.includes(tsGlob)) { userTsConfig.exclude.push(tsGlob) + hasUpdates = true } if (!userTsConfig.exclude.includes(tsxGlob)) { userTsConfig.exclude.push(tsxGlob) + hasUpdates = true + } + + if (hasUpdates) { + requiredActions.push( + 'Local development only: Excluded test files from coverage' + ) } - requiredActions.push( - 'Local development only: Excluded test files from coverage' - ) } if (suggestedActions.length < 1 && requiredActions.length < 1) { From 2261bd37d59a32458f83bef27cca8b783e0bbe81 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Tue, 14 Jan 2025 08:25:13 -0800 Subject: [PATCH 44/65] Update CI config for Windows runner (#74850) As discussed this replaces our Azure pipelines handling with our own runners instead. This allows us to build the `next-swc` binary to run tests against for Windows when necessary instead of trying to leverage the canary binary which requires any relevant changes to have been published which can cause us to miss Windows specific failures until after a canary is published. This also has the benefit of us being able to consolidate our CI config for Windows/Linux for better consistency. Since running workloads on Windows is slower still this just starts with copying over the tests we had configured previously although we can look at adding more we see useful for catching regressions. --- .github/workflows/build_and_test.yml | 98 +++++++++++++- .github/workflows/build_reusable.yml | 21 +-- azure-pipelines.yml | 184 --------------------------- 3 files changed, 109 insertions(+), 194 deletions(-) delete mode 100644 azure-pipelines.yml diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 75042104433bc..f750f6c673c65 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -72,6 +72,17 @@ jobs: stepName: 'build-native' secrets: inherit + build-native-windows: + name: build-native-windows + uses: ./.github/workflows/build_reusable.yml + with: + skipInstallBuild: 'yes' + stepName: 'build-native-windows' + runs_on_labels: '["windows","self-hosted","x64"]' + buildNativeTarget: 'x86_64-pc-windows-msvc' + + secrets: inherit + build-next: name: build-next uses: ./.github/workflows/build_reusable.yml @@ -201,8 +212,6 @@ jobs: name: test devlow package needs: ['optimize-ci', 'changes'] if: ${{ needs.optimize-ci.outputs.skip == 'false' && needs.changes.outputs.docs-only == 'false' }} - strategy: - fail-fast: false uses: ./.github/workflows/build_reusable.yml with: stepName: 'test-devlow' @@ -336,6 +345,26 @@ jobs: secrets: inherit + test-unit-windows: + name: test unit windows + needs: ['changes', 'build-native', 'build-native-windows'] + if: ${{ needs.changes.outputs.docs-only == 'false' }} + + strategy: + fail-fast: false + matrix: + node: [18, 20] # TODO: use env var like [env.NODE_MAINTENANCE_VERSION, env.NODE_LTS_VERSION] + + uses: ./.github/workflows/build_reusable.yml + with: + nodeVersion: ${{ matrix.node }} + afterBuild: node run-tests.js -c ${TEST_CONCURRENCY} --type unit + stepName: 'test-unit-windows-${{ matrix.node }}' + runs_on_labels: '["windows","self-hosted","x64"]' + buildNativeTarget: 'x86_64-pc-windows-msvc' + + secrets: inherit + test-new-tests-dev: name: Test new tests for flakes (dev) needs: ['optimize-ci', 'changes', 'build-native', 'build-next'] @@ -408,6 +437,67 @@ jobs: stepName: 'test-dev-react-${{ matrix.react }}-${{ matrix.group }}' secrets: inherit + test-dev-windows: + name: test dev windows + needs: + [ + 'optimize-ci', + 'changes', + 'build-native-windows', + 'build-native', + 'build-next', + ] + if: ${{ needs.optimize-ci.outputs.skip == 'false' && needs.changes.outputs.docs-only == 'false' }} + + uses: ./.github/workflows/build_reusable.yml + with: + afterBuild: NEXT_TEST_MODE=dev node run-tests.js -c ${TEST_CONCURRENCY} test/e2e/app-dir/app/index.test.ts test/e2e/app-dir/app-edge/app-edge.test.ts + stepName: 'test-dev-windows' + runs_on_labels: '["windows","self-hosted","x64"]' + buildNativeTarget: 'x86_64-pc-windows-msvc' + secrets: inherit + + test-integration-windows: + name: test integration windows + needs: + [ + 'optimize-ci', + 'changes', + 'build-native-windows', + 'build-native', + 'build-next', + ] + if: ${{ needs.optimize-ci.outputs.skip == 'false' && needs.changes.outputs.docs-only == 'false' }} + + uses: ./.github/workflows/build_reusable.yml + with: + nodeVersion: 18.18.2 + afterBuild: node run-tests.js -c 4 test/production/pages-dir/production/test/index.test.ts test/integration/css-client-nav/test/index.test.js test/integration/rewrites-has-condition/test/index.test.js test/integration/create-next-app/index.test.ts test/integration/create-next-app/package-manager/pnpm.test.ts + stepName: 'test-integration-windows' + runs_on_labels: '["windows","self-hosted","x64"]' + buildNativeTarget: 'x86_64-pc-windows-msvc' + secrets: inherit + + test-prod-windows: + name: test prod windows + needs: + [ + 'optimize-ci', + 'changes', + 'build-native-windows', + 'build-native', + 'build-next', + ] + if: ${{ needs.optimize-ci.outputs.skip == 'false' && needs.changes.outputs.docs-only == 'false' }} + + uses: ./.github/workflows/build_reusable.yml + with: + afterBuild: NEXT_TEST_MODE=start node run-tests.js test/e2e/app-dir/app/index.test.ts test/e2e/app-dir/app-edge/app-edge.test.ts + stepName: 'test-prod-windows' + runs_on_labels: '["windows","self-hosted","x64"]' + buildNativeTarget: 'x86_64-pc-windows-msvc' + secrets: inherit + test-prod: name: test prod needs: ['optimize-ci', 'changes', 'build-native', 'build-next'] @@ -589,6 +679,10 @@ jobs: 'test-new-tests-deploy', 'test-turbopack-production', 'test-turbopack-production-integration', + 'test-unit-windows', + 'test-dev-windows', + 'test-integration-windows', + 'test-prod-windows', ] if: always() diff --git a/.github/workflows/build_reusable.yml b/.github/workflows/build_reusable.yml index 67cc37549c303..00ab4078627cb 100644 --- a/.github/workflows/build_reusable.yml +++ b/.github/workflows/build_reusable.yml @@ -64,6 +64,11 @@ on: required: false type: string default: '["self-hosted", "linux", "x64", "metal"]' + buildNativeTarget: + description: 'Target for build-native step' + required: false + type: string + default: 'x86_64-unknown-linux-gnu' env: NAPI_CLI_VERSION: 2.14.7 @@ -92,6 +97,10 @@ jobs: timeout-minutes: ${{ inputs.timeout_minutes }} runs-on: ${{ fromJson(inputs.runs_on_labels) }} + defaults: + run: + shell: bash -leo pipefail {0} + outputs: input_step_key: ${{ steps.var.outputs.input_step_key }} @@ -103,12 +112,8 @@ jobs: script: | core.setOutput('input_step_key', '${{ inputs.stepName }}'.toLowerCase().replaceAll(/[/.]/g, '-').trim('-')); - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: ${{ inputs.nodeVersion || env.NODE_LTS_VERSION }} - check-latest: true - + - run: fnm use --install-if-missing ${{ inputs.nodeVersion || env.NODE_LTS_VERSION }} + - run: fnm default ${{ inputs.nodeVersion || env.NODE_LTS_VERSION }} - run: node -v - run: corepack enable - run: pwd @@ -146,7 +151,7 @@ jobs: with: cache-provider: 'turbo' save-if: ${{ github.ref_name == 'canary' }} - shared-key: ${{ inputs.rustCacheKey }}-x86_64-unknown-linux-gnu-build-${{ hashFiles('.cargo/config.toml') }} + shared-key: ${{ inputs.rustCacheKey }}-${{ inputs.buildNativeTarget }}-build-${{ hashFiles('.cargo/config.toml') }} # clean up any previous artifacts to avoid hitting disk space limits - run: git clean -xdf && rm -rf /tmp/next-repo-*; rm -rf /tmp/next-install-* /tmp/yarn-* /tmp/ncc-cache target @@ -164,7 +169,7 @@ jobs: - run: node scripts/normalize-version-bump.js name: normalize versions - - run: turbo run build-native-release -vvv --env-mode loose --remote-cache-timeout 90 --summarize -- --target x86_64-unknown-linux-gnu + - run: turbo run build-native-release -v --env-mode loose --remote-cache-timeout 90 --summarize -- --target ${{ inputs.buildNativeTarget }} if: ${{ inputs.skipNativeBuild != 'yes' }} - name: Upload next-swc artifact diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index 7c5cdd004b7af..0000000000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,184 +0,0 @@ -trigger: - # Only run latest commit for branches: - batch: true - # Do not run Azure CI for docs-only/example-only changes: - paths: - include: - - '*' - exclude: - - bench - - docs - - errors - - examples - # Do not run Azure on release tags. This unnecessarily increases the backlog. - branches: - include: - - '*' - exclude: - - refs/tags/* - -pr: - # Do not run Azure CI for docs-only/example-only changes: - paths: - include: - - '*' - exclude: - - bench - - docs - - errors - - examples - -variables: - PNPM_CACHE_FOLDER: $(Pipeline.Workspace)/.pnpm-store - NEXT_TELEMETRY_DISABLED: '1' - node_version: ^18.18.2 - -stages: - - stage: Test - jobs: - - job: test_integration - pool: - vmImage: 'windows-2019' - steps: - - task: NodeTool@0 - inputs: - versionSpec: $(node_version) - displayName: 'Install Node.js' - - - bash: | - node scripts/run-for-change.js --not --type docs --exec echo "##vso[task.setvariable variable=isDocsOnly]No" - displayName: 'Check Docs Only Change' - - - script: corepack enable - condition: eq(variables['isDocsOnly'], 'No') - displayName: 'Enable Corepack' - - - script: pnpm config set store-dir $(PNPM_CACHE_FOLDER) - condition: eq(variables['isDocsOnly'], 'No') - - - script: pnpm store path - condition: eq(variables['isDocsOnly'], 'No') - - - script: pnpm install && pnpm run build - condition: eq(variables['isDocsOnly'], 'No') - displayName: 'Install and build' - - - script: npx playwright@1.35.1 install chromium - condition: eq(variables['isDocsOnly'], 'No') - - # Test critical app router and CNA tests to cover basic usage cases with windows - - script: | - node run-tests.js -c 1 test/production/pages-dir/production/test/index.test.ts test/integration/css-client-nav/test/index.test.js test/integration/rewrites-has-condition/test/index.test.js test/integration/create-next-app/examples.test.ts test/integration/create-next-app/index.test.ts test/integration/create-next-app/package-manager/pnpm.test.ts - condition: eq(variables['isDocsOnly'], 'No') - displayName: 'Run tests' - - - job: test_unit - pool: - vmImage: 'windows-2019' - steps: - - script: | - wmic datafile where name="C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe" get Version /value - displayName: 'List Chrome version' - - - task: NodeTool@0 - inputs: - versionSpec: $(node_version) - displayName: 'Install Node.js' - - - bash: | - node scripts/run-for-change.js --not --type docs --exec echo "##vso[task.setvariable variable=isDocsOnly]No" - displayName: 'Check Docs Only Change' - - - script: corepack enable - condition: eq(variables['isDocsOnly'], 'No') - displayName: 'Enable Corepack' - - - script: pnpm config set store-dir $(PNPM_CACHE_FOLDER) - condition: eq(variables['isDocsOnly'], 'No') - - - script: pnpm store path - condition: eq(variables['isDocsOnly'], 'No') - - - script: pnpm install && pnpm run build - condition: eq(variables['isDocsOnly'], 'No') - displayName: 'Install and build' - - - script: node run-tests.js --type unit - condition: eq(variables['isDocsOnly'], 'No') - displayName: 'Run tests' - env: - NEXT_TEST_MODE: 'dev' - - - job: test_e2e_dev - pool: - vmImage: 'windows-2019' - steps: - - task: NodeTool@0 - inputs: - versionSpec: $(node_version) - displayName: 'Install Node.js' - - - bash: | - node scripts/run-for-change.js --not --type docs --exec echo "##vso[task.setvariable variable=isDocsOnly]No" - displayName: 'Check Docs Only Change' - - - script: corepack enable - condition: eq(variables['isDocsOnly'], 'No') - displayName: 'Enable Corepack' - - - script: pnpm config set store-dir $(PNPM_CACHE_FOLDER) - condition: eq(variables['isDocsOnly'], 'No') - - - script: pnpm store path - condition: eq(variables['isDocsOnly'], 'No') - - - script: pnpm install && pnpm run build - condition: eq(variables['isDocsOnly'], 'No') - displayName: 'Install and build' - - - script: npx playwright@1.35.1 install chromium - condition: eq(variables['isDocsOnly'], 'No') - - - script: | - node run-tests.js -c 1 --debug test/e2e/app-dir/app/index.test.ts test/e2e/app-dir/app-edge/app-edge.test.ts - condition: eq(variables['isDocsOnly'], 'No') - displayName: 'Run tests (E2E Development)' - env: - NEXT_TEST_MODE: 'dev' - - - job: test_e2e_prod - pool: - vmImage: 'windows-2019' - steps: - - task: NodeTool@0 - inputs: - versionSpec: $(node_version) - displayName: 'Install Node.js' - - - bash: | - node scripts/run-for-change.js --not --type docs --exec echo "##vso[task.setvariable variable=isDocsOnly]No" - displayName: 'Check Docs Only Change' - - - script: corepack enable - condition: eq(variables['isDocsOnly'], 'No') - displayName: 'Enable Corepack' - - - script: pnpm config set store-dir $(PNPM_CACHE_FOLDER) - condition: eq(variables['isDocsOnly'], 'No') - - - script: pnpm store path - condition: eq(variables['isDocsOnly'], 'No') - - - script: pnpm install && pnpm run build - condition: eq(variables['isDocsOnly'], 'No') - displayName: 'Install and build' - - - script: npx playwright@1.35.1 install chromium - condition: eq(variables['isDocsOnly'], 'No') - - - script: | - node run-tests.js -c 1 --debug test/e2e/app-dir/app/index.test.ts test/e2e/app-dir/app-edge/app-edge.test.ts - condition: eq(variables['isDocsOnly'], 'No') - displayName: 'Run tests (E2E Production)' - env: - NEXT_TEST_MODE: 'start' From 958b6b8cd0c497204acfdf9fec4d6b773aae9e2e Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Tue, 14 Jan 2025 17:26:08 +0100 Subject: [PATCH 45/65] fix: eslint rule of using img in metadata routes (#74864) --- .../src/rules/no-img-element.ts | 17 ++++++ .../eslint-plugin-next/no-img-element.test.ts | 61 +++++++++++++++++++ 2 files changed, 78 insertions(+) diff --git a/packages/eslint-plugin-next/src/rules/no-img-element.ts b/packages/eslint-plugin-next/src/rules/no-img-element.ts index 01511b96fec9a..2c3f5f2c92e13 100644 --- a/packages/eslint-plugin-next/src/rules/no-img-element.ts +++ b/packages/eslint-plugin-next/src/rules/no-img-element.ts @@ -1,3 +1,4 @@ +import path = require('path') import { defineRule } from '../utils/define-rule' const url = 'https://nextjs.org/docs/messages/no-img-element' @@ -15,6 +16,14 @@ export = defineRule({ schema: [], }, create(context) { + // Get relative path of the file + const relativePath = context.filename + .replace(path.sep, '/') + .replace(context.cwd, '') + .replace(/^\//, '') + + const isAppDir = /^(src\/)?app\//.test(relativePath) + return { JSXOpeningElement(node) { if (node.name.name !== 'img') { @@ -29,6 +38,14 @@ export = defineRule({ return } + // If is metadata route files, ignore + // e.g. opengraph-image.js, twitter-image.js, icon.js + if ( + isAppDir && + /\/opengraph-image|twitter-image|icon\.\w+$/.test(relativePath) + ) + return + context.report({ node, message: `Using \`\` could result in slower LCP and higher bandwidth. Consider using \`\` from \`next/image\` or a custom image loader to automatically optimize images. This may incur additional usage or cost from your provider. See: ${url}`, diff --git a/test/unit/eslint-plugin-next/no-img-element.test.ts b/test/unit/eslint-plugin-next/no-img-element.test.ts index 9f636883b7d59..8477bace54c2b 100644 --- a/test/unit/eslint-plugin-next/no-img-element.test.ts +++ b/test/unit/eslint-plugin-next/no-img-element.test.ts @@ -55,6 +55,46 @@ const tests = { ); } }`, + { + code: `\ +import { ImageResponse } from "next/og"; + +export default function icon() { + return new ImageResponse( + ( + avatar + ) + ); +} +`, + filename: `src/app/icon.js`, + }, + { + code: `\ +import { ImageResponse } from "next/og"; + +export default function Image() { + return new ImageResponse( + ( + avatar + ) + ); +} +`, + filename: `app/opengraph-image.tsx`, + }, ], invalid: [ { @@ -91,6 +131,27 @@ const tests = { }`, errors: [{ message, type: 'JSXOpeningElement' }], }, + { + code: `\ +import { ImageResponse } from "next/og"; + +export default function Image() { +return new ImageResponse( + ( + avatar + ) +); +} +`, + filename: `some/non-metadata-route-image.tsx`, + errors: [{ message, type: 'JSXOpeningElement' }], + }, ], } From 4c09fa53a9555eab69c0fcf530fb968fecca52e6 Mon Sep 17 00:00:00 2001 From: Vercel Release Bot <88769842+vercel-release-bot@users.noreply.github.com> Date: Tue, 14 Jan 2025 17:55:05 +0100 Subject: [PATCH 46/65] Upgrade React from `cabd8a0e-20250113` to `b3a95caf-20250113` (#74868) --- package.json | 30 +- .../cjs/react-dom-client.development.js | 10 +- .../cjs/react-dom-client.production.js | 10 +- .../cjs/react-dom-profiling.development.js | 10 +- .../cjs/react-dom-profiling.profiling.js | 10 +- ...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 | 10 +- .../react-dom-unstable_testing.production.js | 10 +- .../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 | 10 +- .../cjs/react-dom-client.production.js | 10 +- .../cjs/react-dom-profiling.development.js | 10 +- .../cjs/react-dom-profiling.profiling.js | 10 +- ...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 | 14 +- .../cjs/react.production.js | 3 +- .../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 | 14 +- .../compiled/react/cjs/react.production.js | 3 +- .../cjs/react.react-server.development.js | 2 +- .../cjs/react.react-server.production.js | 2 +- .../next/src/compiled/unistore/unistore.js | 2 +- pnpm-lock.yaml | 477 +++++++++--------- 62 files changed, 421 insertions(+), 388 deletions(-) diff --git a/package.json b/package.json index 845c15941ef0e..1dc797d82f9e8 100644 --- a/package.json +++ b/package.json @@ -213,16 +213,16 @@ "pretty-ms": "7.0.0", "random-seed": "0.3.0", "react": "19.0.0", - "react-builtin": "npm:react@19.1.0-canary-cabd8a0e-20250113", + "react-builtin": "npm:react@19.1.0-canary-b3a95caf-20250113", "react-dom": "19.0.0", - "react-dom-builtin": "npm:react-dom@19.1.0-canary-cabd8a0e-20250113", - "react-dom-experimental-builtin": "npm:react-dom@0.0.0-experimental-cabd8a0e-20250113", - "react-experimental-builtin": "npm:react@0.0.0-experimental-cabd8a0e-20250113", - "react-is-builtin": "npm:react-is@19.1.0-canary-cabd8a0e-20250113", - "react-server-dom-turbopack": "19.1.0-canary-cabd8a0e-20250113", - "react-server-dom-turbopack-experimental": "npm:react-server-dom-turbopack@0.0.0-experimental-cabd8a0e-20250113", - "react-server-dom-webpack": "19.1.0-canary-cabd8a0e-20250113", - "react-server-dom-webpack-experimental": "npm:react-server-dom-webpack@0.0.0-experimental-cabd8a0e-20250113", + "react-dom-builtin": "npm:react-dom@19.1.0-canary-b3a95caf-20250113", + "react-dom-experimental-builtin": "npm:react-dom@0.0.0-experimental-b3a95caf-20250113", + "react-experimental-builtin": "npm:react@0.0.0-experimental-b3a95caf-20250113", + "react-is-builtin": "npm:react-is@19.1.0-canary-b3a95caf-20250113", + "react-server-dom-turbopack": "19.1.0-canary-b3a95caf-20250113", + "react-server-dom-turbopack-experimental": "npm:react-server-dom-turbopack@0.0.0-experimental-b3a95caf-20250113", + "react-server-dom-webpack": "19.1.0-canary-b3a95caf-20250113", + "react-server-dom-webpack-experimental": "npm:react-server-dom-webpack@0.0.0-experimental-b3a95caf-20250113", "react-ssr-prepass": "1.0.8", "react-virtualized": "9.22.3", "relay-compiler": "13.0.2", @@ -232,8 +232,8 @@ "resolve-from": "5.0.0", "sass": "1.54.0", "satori": "0.10.9", - "scheduler-builtin": "npm:scheduler@0.26.0-canary-cabd8a0e-20250113", - "scheduler-experimental-builtin": "npm:scheduler@0.0.0-experimental-cabd8a0e-20250113", + "scheduler-builtin": "npm:scheduler@0.26.0-canary-b3a95caf-20250113", + "scheduler-experimental-builtin": "npm:scheduler@0.0.0-experimental-b3a95caf-20250113", "seedrandom": "3.0.5", "semver": "7.3.7", "shell-quote": "1.7.3", @@ -274,10 +274,10 @@ "@types/react": "19.0.0", "@types/react-dom": "19.0.0", "jest-snapshot": "30.0.0-alpha.6", - "react": "19.1.0-canary-cabd8a0e-20250113", - "react-dom": "19.1.0-canary-cabd8a0e-20250113", - "react-is": "19.1.0-canary-cabd8a0e-20250113", - "scheduler": "0.26.0-canary-cabd8a0e-20250113" + "react": "19.1.0-canary-b3a95caf-20250113", + "react-dom": "19.1.0-canary-b3a95caf-20250113", + "react-is": "19.1.0-canary-b3a95caf-20250113", + "scheduler": "0.26.0-canary-b3a95caf-20250113" }, "patchedDependencies": { "webpack-sources@3.2.3": "patches/webpack-sources@3.2.3.patch", 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 c99b7b1485c9b..48d47372a92b5 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 @@ -26794,11 +26794,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-b3a95caf-20250113" !== 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.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -26835,10 +26835,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.1.0-experimental-cabd8a0e-20250113", + version: "19.1.0-experimental-b3a95caf-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-cabd8a0e-20250113" + reconcilerVersion: "19.1.0-experimental-b3a95caf-20250113" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -26982,7 +26982,7 @@ listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; - exports.version = "19.1.0-experimental-cabd8a0e-20250113"; + exports.version = "19.1.0-experimental-b3a95caf-20250113"; "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 6cd98e391d3fb..2661bb73434cb 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 @@ -16373,14 +16373,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_1799 = React.version; if ( - "19.1.0-experimental-cabd8a0e-20250113" !== + "19.1.0-experimental-b3a95caf-20250113" !== isomorphicReactPackageVersion$jscomp$inline_1799 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_1799, - "19.1.0-experimental-cabd8a0e-20250113" + "19.1.0-experimental-b3a95caf-20250113" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -16402,10 +16402,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2330 = { bundleType: 0, - version: "19.1.0-experimental-cabd8a0e-20250113", + version: "19.1.0-experimental-b3a95caf-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-cabd8a0e-20250113" + reconcilerVersion: "19.1.0-experimental-b3a95caf-20250113" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2331 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -16511,4 +16511,4 @@ exports.hydrateRoot = function (container, initialChildren, options) { listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; -exports.version = "19.1.0-experimental-cabd8a0e-20250113"; +exports.version = "19.1.0-experimental-b3a95caf-20250113"; 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 b038f57abe1f7..83e604efff48f 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 @@ -26847,11 +26847,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-b3a95caf-20250113" !== 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.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -26888,10 +26888,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.1.0-experimental-cabd8a0e-20250113", + version: "19.1.0-experimental-b3a95caf-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-cabd8a0e-20250113" + reconcilerVersion: "19.1.0-experimental-b3a95caf-20250113" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -27365,7 +27365,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.1.0-experimental-cabd8a0e-20250113"; + exports.version = "19.1.0-experimental-b3a95caf-20250113"; "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 c2a00a3c056cb..db555192094c9 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 @@ -17805,14 +17805,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_1947 = React.version; if ( - "19.1.0-experimental-cabd8a0e-20250113" !== + "19.1.0-experimental-b3a95caf-20250113" !== isomorphicReactPackageVersion$jscomp$inline_1947 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_1947, - "19.1.0-experimental-cabd8a0e-20250113" + "19.1.0-experimental-b3a95caf-20250113" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -17834,10 +17834,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2471 = { bundleType: 0, - version: "19.1.0-experimental-cabd8a0e-20250113", + version: "19.1.0-experimental-b3a95caf-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-cabd8a0e-20250113" + reconcilerVersion: "19.1.0-experimental-b3a95caf-20250113" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2472 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -18104,7 +18104,7 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.1.0-experimental-cabd8a0e-20250113"; +exports.version = "19.1.0-experimental-b3a95caf-20250113"; "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 4369b340ad7ac..d2771ccba1594 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 @@ -9291,5 +9291,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.1.0-experimental-cabd8a0e-20250113"; + exports.version = "19.1.0-experimental-b3a95caf-20250113"; })(); 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 890a357face8a..9b8df2732bfa4 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 @@ -6056,4 +6056,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.1.0-experimental-cabd8a0e-20250113"; +exports.version = "19.1.0-experimental-b3a95caf-20250113"; 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 106e35445b0de..956fb1af40d4d 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 @@ -9291,5 +9291,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.1.0-experimental-cabd8a0e-20250113"; + exports.version = "19.1.0-experimental-b3a95caf-20250113"; })(); 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 b5eb08331fd9e..b0ec8f57b38cf 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 @@ -6147,4 +6147,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.1.0-experimental-cabd8a0e-20250113"; +exports.version = "19.1.0-experimental-b3a95caf-20250113"; 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 6896b72082d08..6f32828700b17 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 @@ -8201,11 +8201,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-b3a95caf-20250113" !== 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.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react-experimental"), @@ -9973,5 +9973,5 @@ startWork(request); }); }; - exports.version = "19.1.0-experimental-cabd8a0e-20250113"; + exports.version = "19.1.0-experimental-b3a95caf-20250113"; })(); 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 afa680304ac8a..17ad927c81618 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 @@ -6584,12 +6584,12 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-b3a95caf-20250113" !== isomorphicReactPackageVersion) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion, - "19.1.0-experimental-cabd8a0e-20250113" + "19.1.0-experimental-b3a95caf-20250113" ) ); } @@ -6844,4 +6844,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.1.0-experimental-cabd8a0e-20250113"; +exports.version = "19.1.0-experimental-b3a95caf-20250113"; 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 19a67e3fd173b..7358bce8d9213 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 @@ -6065,13 +6065,13 @@ function addToReplayParent(node, parentKeyPath, trackedPostpones) { } var isomorphicReactPackageVersion$jscomp$inline_777 = React.version; if ( - "19.1.0-experimental-cabd8a0e-20250113" !== + "19.1.0-experimental-b3a95caf-20250113" !== isomorphicReactPackageVersion$jscomp$inline_777 ) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion$jscomp$inline_777 + - "\n - react-dom: 19.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); exports.renderToReadableStream = function (children, options) { return new Promise(function (resolve, reject) { @@ -6162,4 +6162,4 @@ exports.renderToReadableStream = function (children, options) { startWork(request); }); }; -exports.version = "19.1.0-experimental-cabd8a0e-20250113"; +exports.version = "19.1.0-experimental-b3a95caf-20250113"; 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 c31442849830b..56a3097ce29b4 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 @@ -8224,11 +8224,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-b3a95caf-20250113" !== 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.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react-experimental"), @@ -10003,5 +10003,5 @@ const setTimeoutOrImmediate = ? globalThis['set' + 'Immediate'] : setTimeout; - exports.version = "19.1.0-experimental-cabd8a0e-20250113"; + exports.version = "19.1.0-experimental-b3a95caf-20250113"; })(); 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 0fe1765182f4f..007ca1284c7f5 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 @@ -6690,11 +6690,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-b3a95caf-20250113" !== 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.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -6959,4 +6959,4 @@ const setTimeoutOrImmediate = ? globalThis['set' + 'Immediate'] : setTimeout; -exports.version = "19.1.0-experimental-cabd8a0e-20250113"; +exports.version = "19.1.0-experimental-b3a95caf-20250113"; 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 4e292a3074ed0..7b4a3c92d47b7 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 @@ -8088,11 +8088,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-b3a95caf-20250113" !== 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.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } function createDrainHandler(destination, request) { @@ -9853,5 +9853,5 @@ } }; }; - exports.version = "19.1.0-experimental-cabd8a0e-20250113"; + exports.version = "19.1.0-experimental-b3a95caf-20250113"; })(); 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 b3aa6354934a9..671161e1d0dd1 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 @@ -6569,11 +6569,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-b3a95caf-20250113" !== 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.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -6824,4 +6824,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.1.0-experimental-cabd8a0e-20250113"; +exports.version = "19.1.0-experimental-b3a95caf-20250113"; 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 416485e23beb2..e3b1ac56f6a6a 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 @@ -27128,11 +27128,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-experimental-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-experimental-b3a95caf-20250113" !== 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.1.0-experimental-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-experimental-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -27169,10 +27169,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.1.0-experimental-cabd8a0e-20250113", + version: "19.1.0-experimental-b3a95caf-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-cabd8a0e-20250113" + reconcilerVersion: "19.1.0-experimental-b3a95caf-20250113" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -27482,5 +27482,5 @@ } }; }; - exports.version = "19.1.0-experimental-cabd8a0e-20250113"; + exports.version = "19.1.0-experimental-b3a95caf-20250113"; })(); 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 a9eb19d3de5d9..58d2f8a39f260 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 @@ -16702,14 +16702,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_1828 = React.version; if ( - "19.1.0-experimental-cabd8a0e-20250113" !== + "19.1.0-experimental-b3a95caf-20250113" !== isomorphicReactPackageVersion$jscomp$inline_1828 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_1828, - "19.1.0-experimental-cabd8a0e-20250113" + "19.1.0-experimental-b3a95caf-20250113" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -16731,10 +16731,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2364 = { bundleType: 0, - version: "19.1.0-experimental-cabd8a0e-20250113", + version: "19.1.0-experimental-b3a95caf-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-cabd8a0e-20250113" + reconcilerVersion: "19.1.0-experimental-b3a95caf-20250113" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2365 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -16991,4 +16991,4 @@ exports.observeVisibleRects = function ( } }; }; -exports.version = "19.1.0-experimental-cabd8a0e-20250113"; +exports.version = "19.1.0-experimental-b3a95caf-20250113"; 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 b582210b3dcf4..46bcfea285679 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 @@ -416,7 +416,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.1.0-experimental-cabd8a0e-20250113"; + exports.version = "19.1.0-experimental-b3a95caf-20250113"; "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 c7bc9031f67bb..3dafc12b207c2 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 @@ -207,4 +207,4 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.1.0-experimental-cabd8a0e-20250113"; +exports.version = "19.1.0-experimental-b3a95caf-20250113"; 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 f3697dc2f8e18..adab9082864bc 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 @@ -336,5 +336,5 @@ })) : Internals.d.m(href)); }; - exports.version = "19.1.0-experimental-cabd8a0e-20250113"; + exports.version = "19.1.0-experimental-b3a95caf-20250113"; })(); 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 f35028737cbf0..4bc728c6f504d 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 @@ -149,4 +149,4 @@ exports.preloadModule = function (href, options) { }); } else Internals.d.m(href); }; -exports.version = "19.1.0-experimental-cabd8a0e-20250113"; +exports.version = "19.1.0-experimental-b3a95caf-20250113"; diff --git a/packages/next/src/compiled/react-dom-experimental/package.json b/packages/next/src/compiled/react-dom-experimental/package.json index c302e5f218947..0dbdc3e2c1c81 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-cabd8a0e-20250113" + "scheduler": "0.0.0-experimental-b3a95caf-20250113" }, "peerDependencies": { - "react": "0.0.0-experimental-cabd8a0e-20250113" + "react": "0.0.0-experimental-b3a95caf-20250113" }, "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 94930c37c491b..249d59ff1edf6 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 @@ -24570,11 +24570,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-b3a95caf-20250113" !== 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.1.0-canary-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -24611,10 +24611,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.1.0-canary-cabd8a0e-20250113", + version: "19.1.0-canary-b3a95caf-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-cabd8a0e-20250113" + reconcilerVersion: "19.1.0-canary-b3a95caf-20250113" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -24760,7 +24760,7 @@ listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; - exports.version = "19.1.0-canary-cabd8a0e-20250113"; + exports.version = "19.1.0-canary-b3a95caf-20250113"; "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 302f0518ee0d6..4e5697c9ba75c 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 @@ -15202,14 +15202,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_1737 = React.version; if ( - "19.1.0-canary-cabd8a0e-20250113" !== + "19.1.0-canary-b3a95caf-20250113" !== isomorphicReactPackageVersion$jscomp$inline_1737 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_1737, - "19.1.0-canary-cabd8a0e-20250113" + "19.1.0-canary-b3a95caf-20250113" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -15231,10 +15231,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2214 = { bundleType: 0, - version: "19.1.0-canary-cabd8a0e-20250113", + version: "19.1.0-canary-b3a95caf-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-cabd8a0e-20250113" + reconcilerVersion: "19.1.0-canary-b3a95caf-20250113" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2215 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -15340,4 +15340,4 @@ exports.hydrateRoot = function (container, initialChildren, options) { listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; -exports.version = "19.1.0-canary-cabd8a0e-20250113"; +exports.version = "19.1.0-canary-b3a95caf-20250113"; 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 7e7e933975521..84b4b6648c4ca 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 @@ -24627,11 +24627,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-b3a95caf-20250113" !== 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.1.0-canary-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -24668,10 +24668,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.1.0-canary-cabd8a0e-20250113", + version: "19.1.0-canary-b3a95caf-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-cabd8a0e-20250113" + reconcilerVersion: "19.1.0-canary-b3a95caf-20250113" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -25147,7 +25147,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.1.0-canary-cabd8a0e-20250113"; + exports.version = "19.1.0-canary-b3a95caf-20250113"; "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 5e90d951834bb..726aab2293b07 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 @@ -15848,14 +15848,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_1833 = React.version; if ( - "19.1.0-canary-cabd8a0e-20250113" !== + "19.1.0-canary-b3a95caf-20250113" !== isomorphicReactPackageVersion$jscomp$inline_1833 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_1833, - "19.1.0-canary-cabd8a0e-20250113" + "19.1.0-canary-b3a95caf-20250113" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -15877,10 +15877,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_1840 = { bundleType: 0, - version: "19.1.0-canary-cabd8a0e-20250113", + version: "19.1.0-canary-b3a95caf-20250113", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-cabd8a0e-20250113", + reconcilerVersion: "19.1.0-canary-b3a95caf-20250113", getLaneLabelMap: function () { for ( var map = new Map(), lane = 1, index$279 = 0; @@ -16162,7 +16162,7 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.1.0-canary-cabd8a0e-20250113"; +exports.version = "19.1.0-canary-b3a95caf-20250113"; "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 c13e81e73897b..c0d10c8bbf847 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 @@ -8555,5 +8555,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.1.0-canary-cabd8a0e-20250113"; + exports.version = "19.1.0-canary-b3a95caf-20250113"; })(); 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 5312516503d13..8af8fd655a194 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 @@ -5610,4 +5610,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.1.0-canary-cabd8a0e-20250113"; +exports.version = "19.1.0-canary-b3a95caf-20250113"; 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 71ebc6b7a075d..01065410146a2 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 @@ -8555,5 +8555,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.1.0-canary-cabd8a0e-20250113"; + exports.version = "19.1.0-canary-b3a95caf-20250113"; })(); 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 de19b42a32876..52795bf90922b 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 @@ -5687,4 +5687,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.1.0-canary-cabd8a0e-20250113"; +exports.version = "19.1.0-canary-b3a95caf-20250113"; 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 e3ef7f168e49c..28af26d20d1e9 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 @@ -7293,11 +7293,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-b3a95caf-20250113" !== 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.1.0-canary-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react"), @@ -8937,5 +8937,5 @@ startWork(request); }); }; - exports.version = "19.1.0-canary-cabd8a0e-20250113"; + exports.version = "19.1.0-canary-b3a95caf-20250113"; })(); 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 47f36bef8f479..fa5f921c066e9 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 @@ -5942,12 +5942,12 @@ function abort(request, reason) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-b3a95caf-20250113" !== isomorphicReactPackageVersion) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion, - "19.1.0-canary-cabd8a0e-20250113" + "19.1.0-canary-b3a95caf-20250113" ) ); } @@ -6094,4 +6094,4 @@ exports.renderToReadableStream = function (children, options) { startWork(request); }); }; -exports.version = "19.1.0-canary-cabd8a0e-20250113"; +exports.version = "19.1.0-canary-b3a95caf-20250113"; 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 09121ba39e65b..c5c673a224e0a 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 @@ -5579,13 +5579,13 @@ function abort(request, reason) { } var isomorphicReactPackageVersion$jscomp$inline_728 = React.version; if ( - "19.1.0-canary-cabd8a0e-20250113" !== + "19.1.0-canary-b3a95caf-20250113" !== isomorphicReactPackageVersion$jscomp$inline_728 ) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion$jscomp$inline_728 + - "\n - react-dom: 19.1.0-canary-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); exports.renderToReadableStream = function (children, options) { return new Promise(function (resolve, reject) { @@ -5676,4 +5676,4 @@ exports.renderToReadableStream = function (children, options) { startWork(request); }); }; -exports.version = "19.1.0-canary-cabd8a0e-20250113"; +exports.version = "19.1.0-canary-b3a95caf-20250113"; 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 28295f332746d..4dd29f809d757 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 @@ -7316,11 +7316,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-b3a95caf-20250113" !== 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.1.0-canary-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react"), @@ -8967,5 +8967,5 @@ const setTimeoutOrImmediate = ? globalThis['set' + 'Immediate'] : setTimeout; - exports.version = "19.1.0-canary-cabd8a0e-20250113"; + exports.version = "19.1.0-canary-b3a95caf-20250113"; })(); 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 120a307146d65..4664f3313bda8 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 @@ -6034,11 +6034,11 @@ function abort(request, reason) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-b3a95caf-20250113" !== 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.1.0-canary-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -6195,4 +6195,4 @@ const setTimeoutOrImmediate = ? globalThis['set' + 'Immediate'] : setTimeout; -exports.version = "19.1.0-canary-cabd8a0e-20250113"; +exports.version = "19.1.0-canary-b3a95caf-20250113"; 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 ad15a542f8768..52f2b88f43500 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 @@ -7191,11 +7191,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-b3a95caf-20250113" !== 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.1.0-canary-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } function createDrainHandler(destination, request) { @@ -8830,5 +8830,5 @@ } }; }; - exports.version = "19.1.0-canary-cabd8a0e-20250113"; + exports.version = "19.1.0-canary-b3a95caf-20250113"; })(); 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 26dbe053259ec..06bf1bea3b76a 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 @@ -5926,11 +5926,11 @@ function abort(request, reason) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.1.0-canary-cabd8a0e-20250113" !== isomorphicReactPackageVersion) + if ("19.1.0-canary-b3a95caf-20250113" !== 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.1.0-canary-cabd8a0e-20250113\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.1.0-canary-b3a95caf-20250113\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -6079,4 +6079,4 @@ exports.renderToPipeableStream = function (children, options) { } }; }; -exports.version = "19.1.0-canary-cabd8a0e-20250113"; +exports.version = "19.1.0-canary-b3a95caf-20250113"; 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 f6b90af1cacf0..4778d25968e41 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 @@ -416,7 +416,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.1.0-canary-cabd8a0e-20250113"; + exports.version = "19.1.0-canary-b3a95caf-20250113"; "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 0b7c0c439daab..62dfe9b9e9b1f 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 @@ -207,4 +207,4 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.1.0-canary-cabd8a0e-20250113"; +exports.version = "19.1.0-canary-b3a95caf-20250113"; 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 b16ffe5f46000..e680749669334 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 @@ -336,5 +336,5 @@ })) : Internals.d.m(href)); }; - exports.version = "19.1.0-canary-cabd8a0e-20250113"; + exports.version = "19.1.0-canary-b3a95caf-20250113"; })(); 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 b852589481669..a5a0cc59f073e 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 @@ -149,4 +149,4 @@ exports.preloadModule = function (href, options) { }); } else Internals.d.m(href); }; -exports.version = "19.1.0-canary-cabd8a0e-20250113"; +exports.version = "19.1.0-canary-b3a95caf-20250113"; diff --git a/packages/next/src/compiled/react-dom/package.json b/packages/next/src/compiled/react-dom/package.json index b408d136e20de..027c87e406e7d 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.26.0-canary-cabd8a0e-20250113" + "scheduler": "0.26.0-canary-b3a95caf-20250113" }, "peerDependencies": { - "react": "19.1.0-canary-cabd8a0e-20250113" + "react": "19.1.0-canary-b3a95caf-20250113" }, "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 bd55177d4e69d..923b894655aea 100644 --- a/packages/next/src/compiled/react-experimental/cjs/react.development.js +++ b/packages/next/src/compiled/react-experimental/cjs/react.development.js @@ -723,6 +723,12 @@ }); } : enqueueTask; + deprecatedAPIs = Object.freeze({ + __proto__: null, + c: function (size) { + return resolveDispatcher().useMemoCache(size); + } + }); exports.Children = { map: mapChildren, forEach: function (children, forEachFunc, forEachContext) { @@ -764,11 +770,7 @@ exports.Suspense = REACT_SUSPENSE_TYPE; exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = ReactSharedInternals; - exports.__COMPILER_RUNTIME = { - c: function (size) { - return resolveDispatcher().useMemoCache(size); - } - }; + exports.__COMPILER_RUNTIME = deprecatedAPIs; exports.act = function (callback) { var prevActQueue = ReactSharedInternals.actQueue, prevActScopeDepth = actScopeDepth; @@ -1247,7 +1249,7 @@ exports.useTransition = function () { return resolveDispatcher().useTransition(); }; - exports.version = "19.1.0-experimental-cabd8a0e-20250113"; + exports.version = "19.1.0-experimental-b3a95caf-20250113"; "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 c2e71a7efce3a..d5c7830a11b25 100644 --- a/packages/next/src/compiled/react-experimental/cjs/react.production.js +++ b/packages/next/src/compiled/react-experimental/cjs/react.production.js @@ -365,6 +365,7 @@ exports.Suspense = REACT_SUSPENSE_TYPE; exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = ReactSharedInternals; exports.__COMPILER_RUNTIME = { + __proto__: null, c: function (size) { return ReactSharedInternals.H.useMemoCache(size); } @@ -567,4 +568,4 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactSharedInternals.H.useTransition(); }; -exports.version = "19.1.0-experimental-cabd8a0e-20250113"; +exports.version = "19.1.0-experimental-b3a95caf-20250113"; 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 00b814bdd04ca..3246c43c2c3fd 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 @@ -987,5 +987,5 @@ exports.useMemo = function (create, deps) { return resolveDispatcher().useMemo(create, deps); }; - exports.version = "19.1.0-experimental-cabd8a0e-20250113"; + exports.version = "19.1.0-experimental-b3a95caf-20250113"; })(); 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 de507f640b2b6..9be2e6d24dfdb 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 @@ -567,4 +567,4 @@ exports.useId = function () { exports.useMemo = function (create, deps) { return ReactSharedInternals.H.useMemo(create, deps); }; -exports.version = "19.1.0-experimental-cabd8a0e-20250113"; +exports.version = "19.1.0-experimental-b3a95caf-20250113"; diff --git a/packages/next/src/compiled/react-is/package.json b/packages/next/src/compiled/react-is/package.json index 7d650c0ef17b9..8c34418fd108d 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.1.0-canary-cabd8a0e-20250113", + "version": "19.1.0-canary-b3a95caf-20250113", "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 73003af3afb98..ccdb32957f0b2 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 @@ -2894,10 +2894,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.1.0-experimental-cabd8a0e-20250113", + version: "19.1.0-experimental-b3a95caf-20250113", rendererPackageName: "react-server-dom-turbopack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-cabd8a0e-20250113", + reconcilerVersion: "19.1.0-experimental-b3a95caf-20250113", 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 412db36a16cb6..ed0299006c2db 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-cabd8a0e-20250113", - "react-dom": "0.0.0-experimental-cabd8a0e-20250113" + "react": "0.0.0-experimental-b3a95caf-20250113", + "react-dom": "0.0.0-experimental-b3a95caf-20250113" } } \ 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 c9edfb418214d..fbebce311dc81 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 @@ -2460,10 +2460,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.1.0-canary-cabd8a0e-20250113", + version: "19.1.0-canary-b3a95caf-20250113", rendererPackageName: "react-server-dom-turbopack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-cabd8a0e-20250113", + reconcilerVersion: "19.1.0-canary-b3a95caf-20250113", 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 7eb08c0ced32f..79116be0c671e 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.1.0-canary-cabd8a0e-20250113", - "react-dom": "19.1.0-canary-cabd8a0e-20250113" + "react": "19.1.0-canary-b3a95caf-20250113", + "react-dom": "19.1.0-canary-b3a95caf-20250113" } } \ 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 ee2a9defc1151..378416f288438 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 @@ -2909,10 +2909,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.1.0-experimental-cabd8a0e-20250113", + version: "19.1.0-experimental-b3a95caf-20250113", rendererPackageName: "react-server-dom-webpack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-experimental-cabd8a0e-20250113", + reconcilerVersion: "19.1.0-experimental-b3a95caf-20250113", 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 244aac31b6932..738fa9c47fdee 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 @@ -64,8 +64,8 @@ "webpack-sources": "^3.2.0" }, "peerDependencies": { - "react": "0.0.0-experimental-cabd8a0e-20250113", - "react-dom": "0.0.0-experimental-cabd8a0e-20250113", + "react": "0.0.0-experimental-b3a95caf-20250113", + "react-dom": "0.0.0-experimental-b3a95caf-20250113", "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 be4c397239d56..73bea6ba46113 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 @@ -2475,10 +2475,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.1.0-canary-cabd8a0e-20250113", + version: "19.1.0-canary-b3a95caf-20250113", rendererPackageName: "react-server-dom-webpack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.1.0-canary-cabd8a0e-20250113", + reconcilerVersion: "19.1.0-canary-b3a95caf-20250113", 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 aa0346dc9a675..a03afc27a491a 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/package.json +++ b/packages/next/src/compiled/react-server-dom-webpack/package.json @@ -64,8 +64,8 @@ "webpack-sources": "^3.2.0" }, "peerDependencies": { - "react": "19.1.0-canary-cabd8a0e-20250113", - "react-dom": "19.1.0-canary-cabd8a0e-20250113", + "react": "19.1.0-canary-b3a95caf-20250113", + "react-dom": "19.1.0-canary-b3a95caf-20250113", "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 ead6cabc45372..db47c59407dfc 100644 --- a/packages/next/src/compiled/react/cjs/react.development.js +++ b/packages/next/src/compiled/react/cjs/react.development.js @@ -1029,6 +1029,12 @@ }); } : enqueueTask; + deprecatedAPIs = Object.freeze({ + __proto__: null, + c: function (size) { + return resolveDispatcher().useMemoCache(size); + } + }); exports.Children = { map: mapChildren, forEach: function (children, forEachFunc, forEachContext) { @@ -1070,11 +1076,7 @@ exports.Suspense = REACT_SUSPENSE_TYPE; exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = ReactSharedInternals; - exports.__COMPILER_RUNTIME = { - c: function (size) { - return resolveDispatcher().useMemoCache(size); - } - }; + exports.__COMPILER_RUNTIME = deprecatedAPIs; exports.act = function (callback) { var prevActQueue = ReactSharedInternals.actQueue, prevActScopeDepth = actScopeDepth; @@ -1518,7 +1520,7 @@ exports.useTransition = function () { return resolveDispatcher().useTransition(); }; - exports.version = "19.1.0-canary-cabd8a0e-20250113"; + exports.version = "19.1.0-canary-b3a95caf-20250113"; "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 6a127ad0701c7..78c5ce836b7df 100644 --- a/packages/next/src/compiled/react/cjs/react.production.js +++ b/packages/next/src/compiled/react/cjs/react.production.js @@ -358,6 +358,7 @@ exports.Suspense = REACT_SUSPENSE_TYPE; exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = ReactSharedInternals; exports.__COMPILER_RUNTIME = { + __proto__: null, c: function (size) { return ReactSharedInternals.H.useMemoCache(size); } @@ -540,4 +541,4 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactSharedInternals.H.useTransition(); }; -exports.version = "19.1.0-canary-cabd8a0e-20250113"; +exports.version = "19.1.0-canary-b3a95caf-20250113"; 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 0880948d870b8..3ab0066e0424e 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 @@ -1110,5 +1110,5 @@ exports.useMemo = function (create, deps) { return resolveDispatcher().useMemo(create, deps); }; - exports.version = "19.1.0-canary-cabd8a0e-20250113"; + exports.version = "19.1.0-canary-b3a95caf-20250113"; })(); 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 e7a6fbbe473cf..fe37f8ff3c501 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 @@ -423,4 +423,4 @@ exports.useId = function () { exports.useMemo = function (create, deps) { return ReactSharedInternals.H.useMemo(create, deps); }; -exports.version = "19.1.0-canary-cabd8a0e-20250113"; +exports.version = "19.1.0-canary-b3a95caf-20250113"; diff --git a/packages/next/src/compiled/unistore/unistore.js b/packages/next/src/compiled/unistore/unistore.js index 3a4ad90d3ac59..6c7ea9a3adb54 100644 --- a/packages/next/src/compiled/unistore/unistore.js +++ b/packages/next/src/compiled/unistore/unistore.js @@ -1 +1 @@ -(()=>{var t={803: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={525: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=14.0.0'} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113 '@storybook/instrumenter@8.4.7': resolution: {integrity: sha512-k6NSD3jaRCCHAFtqXZ7tw8jAzD/yTEWXGya+REgZqq5RCkmJ+9S4Ytp/6OhQMPtPFX23gAuJJzTQVLcCr+gjRg==} @@ -5088,8 +5088,8 @@ packages: resolution: {integrity: sha512-geTSBKyrBagVihil5MF7LkVFynbfHhCinvnbCZZqXW7M1vgcxvatunUENB+iV8eWg/0EJ+8O7scZL+BAxQ/2qg==} engines: {node: '>=18.0.0'} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113 storybook: ^8.4.7 typescript: '*' peerDependenciesMeta: @@ -5110,16 +5110,16 @@ packages: '@storybook/react-dom-shim@8.4.7': resolution: {integrity: sha512-6bkG2jvKTmWrmVzCgwpTxwIugd7Lu+2btsLAqhQSzDyIj2/uhMNp8xIMr/NBDtLgq3nomt9gefNa9xxLwk/OMg==} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113 storybook: ^8.4.7 '@storybook/react-webpack5@8.4.7': resolution: {integrity: sha512-T9GLqlsP4It4El7cC8rSkBPRWvORAsTDULeWlO36RST2TrYnmBOUytsi22mk7cAAAVhhD6rTrs1YdqWRMpfa1w==} engines: {node: '>=18.0.0'} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113 storybook: ^8.4.7 typescript: '>= 4.2.x' peerDependenciesMeta: @@ -5131,8 +5131,8 @@ packages: engines: {node: '>=18.0.0'} peerDependencies: '@storybook/test': 8.4.7 - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113 storybook: ^8.4.7 typescript: '>= 4.2.x' peerDependenciesMeta: @@ -5355,8 +5355,8 @@ packages: engines: {node: '>=18'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113 peerDependenciesMeta: '@types/react': optional: true @@ -11097,7 +11097,7 @@ packages: lucide-react@0.383.0: resolution: {integrity: sha512-13xlG0CQCJtzjSQYwwJ3WRqMHtRj3EXmLlorrARt7y+IHnxUCp3XyFNL1DfaGySWxHObDvnu1u1dV+0VMKHUSg==} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} @@ -13509,7 +13509,7 @@ packages: resolution: {integrity: sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw==} engines: {node: '>=10.18'} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 react-docgen-typescript@2.2.2: resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} @@ -13520,15 +13520,23 @@ packages: resolution: {integrity: sha512-APPU8HB2uZnpl6Vt/+0AFoVYgSRtfiP6FLrZgPPTDmqSb2R4qZRbgd0A3VzIFxDt5e+Fozjx79WjLWnF69DK8g==} engines: {node: '>=16.14.0'} - react-dom@0.0.0-experimental-cabd8a0e-20250113: - resolution: {integrity: sha512-kVIvO/ulHGuwD9UIe4CfosieurqRP49NYbNqSjLT17Ii5jYK+PDHGwsERHHJr2D18+KB/LGueZKrlHd5OieWng==} + react-dom@0.0.0-experimental-b3a95caf-20250113: + resolution: {integrity: sha512-HrNpWjaY2erQr3qlB3PZBf/ok6m6MeTE+9m+TqV5dub5H4te5G8TZkw5457CPLgwu0VsYxAJtwgnQWEzuiwa9A==} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + + react-dom@19.1.0-canary-b3a95caf-20250113: + resolution: {integrity: sha512-3DV2GV6AKXicm5Mk/yaVQjc0dUH19zlRcvo8PNRvQupn0UzkMX17Vb4HPRbk9W6ym3ZsGp8CarxDTfPrVQQO1Q==} + peerDependencies: + react: 19.1.0-canary-b3a95caf-20250113 react-dom@19.1.0-canary-cabd8a0e-20250113: resolution: {integrity: sha512-/f4D7cChtjlV1JRNTsfRYZuHEejoI44Q0uFbaaB4NPRdn9CnFOGy5VC/1noahJsZMUpQXiQsRT9nGjwGvl8chg==} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + + react-is@19.1.0-canary-b3a95caf-20250113: + resolution: {integrity: sha512-ZjptDxWV7DmyFEnQjDrxlOmFnIqIEON3B18xTWu3kWz/Q4XnfeXxFPhg1nDLhTaZ+xrH7+F83HuZYkJ6UpU8Sw==} react-is@19.1.0-canary-cabd8a0e-20250113: resolution: {integrity: sha512-JW0m9wMfbt3QBl6QTss8hJEkOCvGtbA8spSpx5f5lyF+hM9a/JgZvgmuodl0uF8I6XLcU3rDaPI5itsI7MRrRA==} @@ -13539,8 +13547,8 @@ packages: react-number-format@5.4.0: resolution: {integrity: sha512-NWdICrqLhI7rAS8yUeLVd6Wr4cN7UjJ9IBTS0f/a9i7UB4x4Ti70kGnksBtZ7o4Z7YRbvCMMR/jQmkoOBa/4fg==} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113 react-refresh@0.12.0: resolution: {integrity: sha512-suLIhrU2IHKL5JEKR/fAwJv7bbeq4kJ+pJopf77jHwuR+HmJS/HbrPIGsTBUVfw7tXPOmYv7UJ7PCaN49e8x4A==} @@ -13551,7 +13559,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 peerDependenciesMeta: '@types/react': optional: true @@ -13561,58 +13569,58 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 peerDependenciesMeta: '@types/react': optional: true - react-server-dom-turbopack@0.0.0-experimental-cabd8a0e-20250113: - resolution: {integrity: sha512-CKdMWD40BAs9xQD1Ib8XYStyHiNHW+M/e6edL0FsfEW8P0J6UrixMzCfHoedHj7dW0gGn4fuptdNHLprtMcCuw==} + react-server-dom-turbopack@0.0.0-experimental-b3a95caf-20250113: + resolution: {integrity: sha512-sf5SIxxOlJPNlPmQCV7f+bLCk4aBt/EN0eSlHWDeWbaV+7UAyYw3xNf3SRDBpRryo5WNXLgg8JLXr5O14ifJQg==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113 - react-server-dom-turbopack@19.1.0-canary-cabd8a0e-20250113: - resolution: {integrity: sha512-13wQ54Qto3XPmP1KkJciwvppINJYWW/Aw3BimhECrORtzTKlJdxM8pWZlzqJT3+B+q02pvM0NlffHQ32STdGXg==} + react-server-dom-turbopack@19.1.0-canary-b3a95caf-20250113: + resolution: {integrity: sha512-rDEycSZlseeuNkmAp1vu3o7GJZFDwiIRY0nbAUicB8kAX4zOFe1JaCtLIQJ74OJbSckE/JDWBicycDA1tHYjjg==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113 - react-server-dom-webpack@0.0.0-experimental-cabd8a0e-20250113: - resolution: {integrity: sha512-8awhtZtmg53T9I20Ru/LwVWlULcBibkg3Nk+sEIE57jagavqJ/lAjxItN+KGZ5ecEQ2M5GsHmwMv6e0KgJsw6A==} + react-server-dom-webpack@0.0.0-experimental-b3a95caf-20250113: + resolution: {integrity: sha512-/6/IP8sP/I1CKIBsXvuF3mQEO0Vw/Nu85QyNliCx+K6WT7plTbjpFlEnbJKWoZdh/9uQkG17IZZiGlOgExmjbA==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113 webpack: 5.96.1 - react-server-dom-webpack@19.1.0-canary-cabd8a0e-20250113: - resolution: {integrity: sha512-ZU0visw8kKSBG3um+5Kxiusc2j5aHpGiTSGSZ+tEnS+Ddi7gFS0uahEFi6CBziaMwHUj6CBkvX3/m+B0mdIlrg==} + react-server-dom-webpack@19.1.0-canary-b3a95caf-20250113: + resolution: {integrity: sha512-j1sFX2OvNC5vddF1MWeAo7zEc3LrO5SPg78+krtPQE6qAw7iaiC3IE94txWob+lr5YM9wu1X8HWxN9yqN+RP0A==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113 webpack: 5.96.1 react-shallow-renderer@16.15.0: resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 react-ssr-prepass@1.0.8: resolution: {integrity: sha512-O0gfRA1SaK+9ITKxqfnXsej2jF+OHGP/+GxD4unROQaM/0/UczGF9fuF+wTboxaQoKdIf4FvS3h/OigWh704VA==} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 - react-is: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + react-is: 19.1.0-canary-b3a95caf-20250113 react-style-singleton@2.2.1: resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 peerDependenciesMeta: '@types/react': optional: true @@ -13620,22 +13628,26 @@ packages: react-test-renderer@18.2.0: resolution: {integrity: sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 react-textarea-autosize@8.5.3: resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} engines: {node: '>=10'} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 react-virtualized@9.22.3: resolution: {integrity: sha512-MKovKMxWTcwPSxE1kK1HcheQTWfuCxAuBoSTf2gwyMM21NdX/PXUhnoP8Uc5dRKd+nKm8v41R36OellhdCpkrw==} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113 - react@0.0.0-experimental-cabd8a0e-20250113: - resolution: {integrity: sha512-HMHxGi5X0Fa/7r477S39uBhPUWT368FzPLHRolgi4goL7OtE4j7ZebfvB5+4nEKvwYADaWhz1rSWcKwaZ3lFSA==} + react@0.0.0-experimental-b3a95caf-20250113: + resolution: {integrity: sha512-Sx4o/oQ4+cxn9fFgfvrknlR0QSXl3sNztFM8P+4aazqXtLc6JM2zcQh5EBeJN9rZMPS3cPX/2gnDCD+bgwHSYw==} + engines: {node: '>=0.10.0'} + + react@19.1.0-canary-b3a95caf-20250113: + resolution: {integrity: sha512-2TnspIIMpVpvtOlT1SuTy4CZnpl60VN6rbl8s5oYVEklfoij3yQSXJCe9IR6iP4CsFLTbKqoPJxRWSpG+06mPw==} engines: {node: '>=0.10.0'} react@19.1.0-canary-cabd8a0e-20250113: @@ -14175,11 +14187,11 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.0.0-experimental-cabd8a0e-20250113: - resolution: {integrity: sha512-XznrqyeXlBKj1KzJ5AyzV1ntc6d1EkTx9KvDMmNu1XzZCnvlT7e31q+8pGP/vZc88khO3Wps3JRFEeeIBRmmVg==} + scheduler@0.0.0-experimental-b3a95caf-20250113: + resolution: {integrity: sha512-yS9HMQA9CTA5zNVQCiMfPa4bHeTlR8VRCOjrC74SJSx5aqX+h2se86jD0IAQIVaFobCD+y6UMPJHsHw73lgMmw==} - scheduler@0.26.0-canary-cabd8a0e-20250113: - resolution: {integrity: sha512-PQHH4ULgODMRbF3JtyD9WVqk7OhQrm3J2sVO71CSt8mf8j6s/NEm2xloOBZe1vmtjBQFBX+3ZFC/+7Fs2/5qNQ==} + scheduler@0.26.0-canary-b3a95caf-20250113: + resolution: {integrity: sha512-ZhVP/ZFE+lyF+3hNNJ47Zf4qOanoDzVueHK5tID26g77TXfCNU0b2B7Ul5zy7dIRmo2KLsLuN+r0sLL40YsiCg==} schema-utils@2.7.1: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} @@ -14751,8 +14763,8 @@ packages: engines: {node: '>= 16'} peerDependencies: babel-plugin-styled-components: '>= 2' - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113 peerDependenciesMeta: babel-plugin-styled-components: optional: true @@ -14766,7 +14778,7 @@ packages: peerDependencies: '@babel/core': '*' babel-plugin-macros: '*' - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 peerDependenciesMeta: '@babel/core': optional: true @@ -14850,7 +14862,7 @@ packages: swr@2.2.4: resolution: {integrity: sha512-njiZ/4RiIhoOlAaLYDqwz5qH/KZXVilRLvomrx83HjzCWTfa+InyfAjv05PSFxnmLzZkNO9ZfvgoqzAaEI4sGQ==} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 symbol-observable@1.0.1: resolution: {integrity: sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==} @@ -15616,7 +15628,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 peerDependenciesMeta: '@types/react': optional: true @@ -15624,13 +15636,13 @@ packages: use-composed-ref@1.3.0: resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 use-isomorphic-layout-effect@1.1.2: resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 peerDependenciesMeta: '@types/react': optional: true @@ -15639,7 +15651,7 @@ packages: resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} peerDependencies: '@types/react': '*' - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 peerDependenciesMeta: '@types/react': optional: true @@ -15649,7 +15661,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.0.0 - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 peerDependenciesMeta: '@types/react': optional: true @@ -15657,7 +15669,7 @@ packages: use-sync-external-store@1.2.0: resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -18210,12 +18222,12 @@ snapshots: '@capsizecss/metrics@3.4.0': {} - '@chromatic-com/storybook@3.2.2(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))': + '@chromatic-com/storybook@3.2.2(react@19.1.0-canary-b3a95caf-20250113)(storybook@8.4.7(prettier@3.3.3))': dependencies: chromatic: 11.20.2 filesize: 10.1.6 jsonfile: 6.1.0 - react-confetti: 6.1.0(react@19.1.0-canary-cabd8a0e-20250113) + react-confetti: 6.1.0(react@19.1.0-canary-b3a95caf-20250113) storybook: 8.4.7(prettier@3.3.3) strip-ansi: 7.1.0 transitivePeerDependencies: @@ -18363,17 +18375,17 @@ snapshots: '@emotion/memoize@0.8.1': {} - '@emotion/react@11.11.1(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113)': + '@emotion/react@11.11.1(@types/react@19.0.0)(react@19.1.0-canary-b3a95caf-20250113)': dependencies: '@babel/runtime': 7.22.5 '@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.1.0-canary-cabd8a0e-20250113) + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@19.1.0-canary-b3a95caf-20250113) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 hoist-non-react-statics: 3.3.2 - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 optionalDependencies: '@types/react': 19.0.0 transitivePeerDependencies: @@ -18391,9 +18403,9 @@ snapshots: '@emotion/unitless@0.8.1': {} - '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@19.1.0-canary-cabd8a0e-20250113)': + '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@19.1.0-canary-b3a95caf-20250113)': dependencies: - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 '@emotion/utils@1.2.1': {} @@ -19835,17 +19847,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@mdx-js/react@2.2.1(react@19.1.0-canary-b3a95caf-20250113)': + dependencies: + '@types/mdx': 2.0.3 + '@types/react': 19.0.0 + react: 19.1.0-canary-b3a95caf-20250113 + '@mdx-js/react@2.2.1(react@19.1.0-canary-cabd8a0e-20250113)': dependencies: '@types/mdx': 2.0.3 '@types/react': 19.0.0 react: 19.1.0-canary-cabd8a0e-20250113 - '@mdx-js/react@3.1.0(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113)': + '@mdx-js/react@3.1.0(@types/react@19.0.0)(react@19.1.0-canary-b3a95caf-20250113)': dependencies: '@types/mdx': 2.0.3 '@types/react': 19.0.0 - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 '@mswjs/cookies@1.1.0': {} @@ -20415,12 +20433,12 @@ snapshots: '@storybook/addon-docs@8.4.7(@types/react@19.0.0)(storybook@8.4.7(prettier@3.3.3))': dependencies: - '@mdx-js/react': 3.1.0(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113) - '@storybook/blocks': 8.4.7(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3)) + '@mdx-js/react': 3.1.0(@types/react@19.0.0)(react@19.1.0-canary-b3a95caf-20250113) + '@storybook/blocks': 8.4.7(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113)(storybook@8.4.7(prettier@3.3.3)) '@storybook/csf-plugin': 8.4.7(storybook@8.4.7(prettier@3.3.3)) - '@storybook/react-dom-shim': 8.4.7(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3)) - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) + '@storybook/react-dom-shim': 8.4.7(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113)(storybook@8.4.7(prettier@3.3.3)) + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113) storybook: 8.4.7(prettier@3.3.3) ts-dedent: 2.2.0 transitivePeerDependencies: @@ -20462,9 +20480,9 @@ snapshots: storybook: 8.4.7(prettier@3.3.3) tiny-invariant: 1.3.3 - '@storybook/addon-onboarding@8.4.7(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))': + '@storybook/addon-onboarding@8.4.7(react@19.1.0-canary-b3a95caf-20250113)(storybook@8.4.7(prettier@3.3.3))': dependencies: - react-confetti: 6.1.0(react@19.1.0-canary-cabd8a0e-20250113) + react-confetti: 6.1.0(react@19.1.0-canary-b3a95caf-20250113) storybook: 8.4.7(prettier@3.3.3) transitivePeerDependencies: - react @@ -20492,15 +20510,15 @@ snapshots: - '@swc/helpers' - webpack - '@storybook/blocks@8.4.7(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))': + '@storybook/blocks@8.4.7(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113)(storybook@8.4.7(prettier@3.3.3))': dependencies: '@storybook/csf': 0.1.12 - '@storybook/icons': 1.3.0(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113) + '@storybook/icons': 1.3.0(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113) storybook: 8.4.7(prettier@3.3.3) ts-dedent: 2.2.0 optionalDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113) '@storybook/builder-webpack5@8.4.7(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': dependencies: @@ -20580,10 +20598,10 @@ snapshots: '@storybook/global@5.0.0': {} - '@storybook/icons@1.3.0(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)': + '@storybook/icons@1.3.0(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113)': dependencies: - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113) '@storybook/instrumenter@8.4.7(storybook@8.4.7(prettier@3.3.3))': dependencies: @@ -20595,18 +20613,18 @@ snapshots: dependencies: storybook: 8.4.7(prettier@3.3.3) - '@storybook/preset-react-webpack@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': + '@storybook/preset-react-webpack@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': dependencies: '@storybook/core-webpack': 8.4.7(storybook@8.4.7(prettier@3.3.3)) - '@storybook/react': 8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) + '@storybook/react': 8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.7.2)(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)) '@types/node': 20.17.6 '@types/semver': 7.5.6 find-up: 5.0.0 magic-string: 0.30.17 - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 react-docgen: 7.1.0 - react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) + react-dom: 19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113) resolve: 1.22.8 semver: 7.6.3 storybook: 8.4.7(prettier@3.3.3) @@ -20640,20 +20658,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/react-dom-shim@8.4.7(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))': + '@storybook/react-dom-shim@8.4.7(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113)(storybook@8.4.7(prettier@3.3.3))': dependencies: - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113) storybook: 8.4.7(prettier@3.3.3) - '@storybook/react-webpack5@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': + '@storybook/react-webpack5@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': dependencies: '@storybook/builder-webpack5': 8.4.7(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) - '@storybook/preset-react-webpack': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) - '@storybook/react': 8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) + '@storybook/preset-react-webpack': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1)(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) + '@storybook/react': 8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) '@types/node': 20.17.6 - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113) storybook: 8.4.7(prettier@3.3.3) optionalDependencies: typescript: 5.7.2 @@ -20666,16 +20684,16 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react@8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': + '@storybook/react@8.4.7(patch_hash=3vtnbaj5dhujyrhznezprlo624)(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': dependencies: '@storybook/components': 8.4.7(storybook@8.4.7(prettier@3.3.3)) '@storybook/global': 5.0.0 '@storybook/manager-api': 8.4.7(storybook@8.4.7(prettier@3.3.3)) '@storybook/preview-api': 8.4.7(storybook@8.4.7(prettier@3.3.3)) - '@storybook/react-dom-shim': 8.4.7(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(storybook@8.4.7(prettier@3.3.3)) + '@storybook/react-dom-shim': 8.4.7(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113)(storybook@8.4.7(prettier@3.3.3)) '@storybook/theming': 8.4.7(storybook@8.4.7(prettier@3.3.3)) - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113) storybook: 8.4.7(prettier@3.3.3) optionalDependencies: '@storybook/test': 8.4.7(storybook@8.4.7(prettier@3.3.3)) @@ -20911,13 +20929,13 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react@15.0.7(@types/react@19.0.0)(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)': + '@testing-library/react@15.0.7(@types/react@19.0.0)(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113)': dependencies: '@babel/runtime': 7.22.5 '@testing-library/dom': 10.1.0 '@types/react-dom': 19.0.0 - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113) optionalDependencies: '@types/react': 19.0.0 @@ -26273,7 +26291,7 @@ snapshots: hoist-non-react-statics@3.3.2: dependencies: - react-is: 19.1.0-canary-cabd8a0e-20250113 + react-is: 19.1.0-canary-b3a95caf-20250113 homedir-polyfill@1.0.3: dependencies: @@ -30929,31 +30947,31 @@ snapshots: '@jest/types': 24.9.0 ansi-regex: 4.1.0 ansi-styles: 3.2.1 - react-is: 19.1.0-canary-cabd8a0e-20250113 + react-is: 19.1.0-canary-b3a95caf-20250113 pretty-format@27.5.1: dependencies: ansi-regex: 5.0.1 ansi-styles: 5.2.0 - react-is: 19.1.0-canary-cabd8a0e-20250113 + react-is: 19.1.0-canary-b3a95caf-20250113 pretty-format@29.5.0: dependencies: '@jest/schemas': 29.4.3 ansi-styles: 5.2.0 - react-is: 19.1.0-canary-cabd8a0e-20250113 + react-is: 19.1.0-canary-b3a95caf-20250113 pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 19.1.0-canary-cabd8a0e-20250113 + react-is: 19.1.0-canary-b3a95caf-20250113 pretty-format@30.0.0-alpha.6: dependencies: '@jest/schemas': 30.0.0-alpha.6 ansi-styles: 5.2.0 - react-is: 19.1.0-canary-cabd8a0e-20250113 + react-is: 19.1.0-canary-b3a95caf-20250113 pretty-ms@7.0.0: dependencies: @@ -31012,7 +31030,7 @@ snapshots: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 - react-is: 19.1.0-canary-cabd8a0e-20250113 + react-is: 19.1.0-canary-b3a95caf-20250113 property-information@5.6.0: dependencies: @@ -31182,9 +31200,9 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-confetti@6.1.0(react@19.1.0-canary-cabd8a0e-20250113): + react-confetti@6.1.0(react@19.1.0-canary-b3a95caf-20250113): dependencies: - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 tween-functions: 1.2.0 react-docgen-typescript@2.2.2(typescript@5.7.2): @@ -31206,15 +31224,22 @@ snapshots: transitivePeerDependencies: - supports-color - react-dom@0.0.0-experimental-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113): + react-dom@0.0.0-experimental-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113): dependencies: - react: 19.1.0-canary-cabd8a0e-20250113 - scheduler: 0.26.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + scheduler: 0.26.0-canary-b3a95caf-20250113 + + react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113): + dependencies: + react: 19.1.0-canary-b3a95caf-20250113 + scheduler: 0.26.0-canary-b3a95caf-20250113 react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113): dependencies: react: 19.1.0-canary-cabd8a0e-20250113 - scheduler: 0.26.0-canary-cabd8a0e-20250113 + scheduler: 0.26.0-canary-b3a95caf-20250113 + + react-is@19.1.0-canary-b3a95caf-20250113: {} react-is@19.1.0-canary-cabd8a0e-20250113: {} @@ -31247,48 +31272,48 @@ snapshots: optionalDependencies: '@types/react': 19.0.0 - react-server-dom-turbopack@0.0.0-experimental-cabd8a0e-20250113(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113): + react-server-dom-turbopack@0.0.0-experimental-b3a95caf-20250113(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113) - react-server-dom-turbopack@19.1.0-canary-cabd8a0e-20250113(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113): + react-server-dom-turbopack@19.1.0-canary-b3a95caf-20250113(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113) - react-server-dom-webpack@0.0.0-experimental-cabd8a0e-20250113(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))): + react-server-dom-webpack@0.0.0-experimental-b3a95caf-20250113(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113)(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113) webpack: 5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15)) webpack-sources: 3.2.3(patch_hash=jbynf5dc46ambamq3wuyho6hkq) - react-server-dom-webpack@19.1.0-canary-cabd8a0e-20250113(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113)(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))): + react-server-dom-webpack@19.1.0-canary-b3a95caf-20250113(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113)(webpack@5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113) webpack: 5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15)) webpack-sources: 3.2.3(patch_hash=jbynf5dc46ambamq3wuyho6hkq) - react-shallow-renderer@16.15.0(react@19.1.0-canary-cabd8a0e-20250113): + react-shallow-renderer@16.15.0(react@19.1.0-canary-b3a95caf-20250113): dependencies: object-assign: 4.1.1 - react: 19.1.0-canary-cabd8a0e-20250113 - react-is: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + react-is: 19.1.0-canary-b3a95caf-20250113 - react-ssr-prepass@1.0.8(react-is@19.1.0-canary-cabd8a0e-20250113)(react@19.1.0-canary-cabd8a0e-20250113): + react-ssr-prepass@1.0.8(react-is@19.1.0-canary-cabd8a0e-20250113)(react@19.1.0-canary-b3a95caf-20250113): dependencies: object-is: 1.0.2 - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 react-is: 19.1.0-canary-cabd8a0e-20250113 react-style-singleton@2.2.1(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113): @@ -31300,12 +31325,12 @@ snapshots: optionalDependencies: '@types/react': 19.0.0 - react-test-renderer@18.2.0(react@19.1.0-canary-cabd8a0e-20250113): + react-test-renderer@18.2.0(react@19.1.0-canary-b3a95caf-20250113): dependencies: - react: 19.1.0-canary-cabd8a0e-20250113 - react-is: 19.1.0-canary-cabd8a0e-20250113 - react-shallow-renderer: 16.15.0(react@19.1.0-canary-cabd8a0e-20250113) - scheduler: 0.26.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 + react-is: 19.1.0-canary-b3a95caf-20250113 + react-shallow-renderer: 16.15.0(react@19.1.0-canary-b3a95caf-20250113) + scheduler: 0.26.0-canary-b3a95caf-20250113 react-textarea-autosize@8.5.3(@types/react@19.0.0)(react@19.1.0-canary-cabd8a0e-20250113): dependencies: @@ -31316,18 +31341,20 @@ snapshots: transitivePeerDependencies: - '@types/react' - react-virtualized@9.22.3(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113): + react-virtualized@9.22.3(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113): dependencies: '@babel/runtime': 7.22.5 clsx: 1.1.1 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113) react-lifecycles-compat: 3.0.4 - react@0.0.0-experimental-cabd8a0e-20250113: {} + react@0.0.0-experimental-b3a95caf-20250113: {} + + react@19.1.0-canary-b3a95caf-20250113: {} react@19.1.0-canary-cabd8a0e-20250113: {} @@ -32067,9 +32094,9 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.0.0-experimental-cabd8a0e-20250113: {} + scheduler@0.0.0-experimental-b3a95caf-20250113: {} - scheduler@0.26.0-canary-cabd8a0e-20250113: {} + scheduler@0.26.0-canary-b3a95caf-20250113: {} schema-utils@2.7.1: dependencies: @@ -32707,7 +32734,7 @@ snapshots: dependencies: inline-style-parser: 0.1.1 - styled-components@6.0.0-rc.3(react-dom@19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113))(react@19.1.0-canary-cabd8a0e-20250113): + styled-components@6.0.0-rc.3(react-dom@19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113))(react@19.1.0-canary-b3a95caf-20250113): dependencies: '@babel/cli': 7.21.5(@babel/core@7.22.5) '@babel/core': 7.22.5 @@ -32722,8 +32749,8 @@ snapshots: '@emotion/unitless': 0.8.1 css-to-react-native: 3.2.0 postcss: 8.4.31 - react: 19.1.0-canary-cabd8a0e-20250113 - react-dom: 19.1.0-canary-cabd8a0e-20250113(react@19.1.0-canary-cabd8a0e-20250113) + react: 19.1.0-canary-b3a95caf-20250113 + react-dom: 19.1.0-canary-b3a95caf-20250113(react@19.1.0-canary-b3a95caf-20250113) shallowequal: 1.1.0 stylis: 4.2.0 tslib: 2.5.3 @@ -32735,10 +32762,10 @@ snapshots: postcss: 7.0.32 postcss-load-plugins: 2.3.0 - styled-jsx@5.1.6(@babel/core@7.22.5)(babel-plugin-macros@3.1.0)(react@19.1.0-canary-cabd8a0e-20250113): + styled-jsx@5.1.6(@babel/core@7.22.5)(babel-plugin-macros@3.1.0)(react@19.1.0-canary-b3a95caf-20250113): dependencies: client-only: 0.0.1 - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 optionalDependencies: '@babel/core': 7.22.5 babel-plugin-macros: 3.1.0 @@ -32834,11 +32861,11 @@ snapshots: '@swc/counter': 0.1.3 webpack: 5.96.1(@swc/core@1.9.3(@swc/helpers@0.5.15))(esbuild@0.23.1) - swr@2.2.4(react@19.1.0-canary-cabd8a0e-20250113): + swr@2.2.4(react@19.1.0-canary-b3a95caf-20250113): dependencies: client-only: 0.0.1 - react: 19.1.0-canary-cabd8a0e-20250113 - use-sync-external-store: 1.2.0(react@19.1.0-canary-cabd8a0e-20250113) + react: 19.1.0-canary-b3a95caf-20250113 + use-sync-external-store: 1.2.0(react@19.1.0-canary-b3a95caf-20250113) symbol-observable@1.0.1: {} @@ -33610,9 +33637,9 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - unistore@3.4.1(react@19.1.0-canary-cabd8a0e-20250113): + unistore@3.4.1(react@19.1.0-canary-b3a95caf-20250113): optionalDependencies: - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 universal-github-app-jwt@1.1.1: dependencies: @@ -33738,9 +33765,9 @@ snapshots: optionalDependencies: '@types/react': 19.0.0 - use-sync-external-store@1.2.0(react@19.1.0-canary-cabd8a0e-20250113): + use-sync-external-store@1.2.0(react@19.1.0-canary-b3a95caf-20250113): dependencies: - react: 19.1.0-canary-cabd8a0e-20250113 + react: 19.1.0-canary-b3a95caf-20250113 util-deprecate@1.0.2: {} From 65db12fee15bb33b3464b73e193863e44d888cf0 Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Tue, 14 Jan 2025 12:24:25 -0500 Subject: [PATCH 47/65] [Segment Cache] Support (#74172) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This implements support in the Segment Cache for "full" link prefetches, typically initiated by passing `prefetch={true}` to a ``. The goal of a full prefetch is to request all the data needed for a navigation, both static and dynamic, so that once the navigation occurs, the router does not need to fetch any additional data. So, a full prefetch implicitly instructs the client cache to treat the response as static, even the dynamic data. The implementation is largely the same as what we do to support non-PPR-enabled routes — a request tree is sent to the server describing which segments are already cached and which ones need to be rendered. While constructing the request tree, if all the segments are already in the client cache, the request can be skipped entirely. The main difference is that a full prefetch will only reuse a cached segment entry if it does not contain any dynamic holes. --- .../next/src/client/components/app-router.tsx | 5 +- .../client/components/segment-cache/cache.ts | 12 +- .../components/segment-cache/prefetch.ts | 11 +- .../components/segment-cache/scheduler.ts | 356 ++++++++++++++---- .../app/mixed-fetch-strategies/page.tsx | 11 + .../segment-cache-incremental-opt-in.test.ts | 182 +++++++++ 6 files changed, 498 insertions(+), 79 deletions(-) diff --git a/packages/next/src/client/components/app-router.tsx b/packages/next/src/client/components/app-router.tsx index 32e407f65842b..e319759869d53 100644 --- a/packages/next/src/client/components/app-router.tsx +++ b/packages/next/src/client/components/app-router.tsx @@ -279,11 +279,12 @@ function Router({ ? // Unlike the old implementation, the Segment Cache doesn't store its // data in the router reducer state; it writes into a global mutable // cache. So we don't need to dispatch an action. - (href) => + (href, options) => prefetchWithSegmentCache( href, actionQueue.state.nextUrl, - actionQueue.state.tree + actionQueue.state.tree, + options?.kind === PrefetchKind.FULL ) : (href, options) => { // Use the old prefetch implementation. diff --git a/packages/next/src/client/components/segment-cache/cache.ts b/packages/next/src/client/components/segment-cache/cache.ts index 6fd8585fc0e1c..c981a11b7b529 100644 --- a/packages/next/src/client/components/segment-cache/cache.ts +++ b/packages/next/src/client/components/segment-cache/cache.ts @@ -147,6 +147,7 @@ export type RouteCacheEntry = export const enum FetchStrategy { PPR, + Full, LoadingBoundary, } @@ -1005,9 +1006,10 @@ export async function fetchSegmentOnCacheMiss( } } -export async function fetchSegmentPrefetchesForPPRDisabledRoute( +export async function fetchSegmentPrefetchesUsingDynamicRequest( task: PrefetchTask, route: FulfilledRouteCacheEntry, + fetchStrategy: FetchStrategy, dynamicRequestTree: FlightRouterState, spawnedEntries: Map ): Promise | null> { @@ -1015,7 +1017,6 @@ export async function fetchSegmentPrefetchesForPPRDisabledRoute( const nextUrl = task.key.nextUrl const headers: RequestHeaders = { [RSC_HEADER]: '1', - [NEXT_ROUTER_PREFETCH_HEADER]: '1', [NEXT_ROUTER_STATE_TREE_HEADER]: encodeURIComponent( JSON.stringify(dynamicRequestTree) ), @@ -1023,6 +1024,13 @@ export async function fetchSegmentPrefetchesForPPRDisabledRoute( if (nextUrl !== null) { headers[NEXT_URL] = nextUrl } + // Only set the prefetch header if we're not doing a "full" prefetch. We + // omit the prefetch header from a full prefetch because it's essentially + // just a navigation request that happens ahead of time — it should include + // all the same data in the response. + if (fetchStrategy !== FetchStrategy.Full) { + headers[NEXT_ROUTER_PREFETCH_HEADER] = '1' + } try { const response = await fetchPrefetchResponse(href, headers) if (!response || !response.ok || !response.body) { diff --git a/packages/next/src/client/components/segment-cache/prefetch.ts b/packages/next/src/client/components/segment-cache/prefetch.ts index 83f03014b0f2d..7f7fa0c2607e3 100644 --- a/packages/next/src/client/components/segment-cache/prefetch.ts +++ b/packages/next/src/client/components/segment-cache/prefetch.ts @@ -7,11 +7,18 @@ import { schedulePrefetchTask } from './scheduler' * Entrypoint for prefetching a URL into the Segment Cache. * @param href - The URL to prefetch. Typically this will come from a , * or router.prefetch. It must be validated before we attempt to prefetch it. + * @param nextUrl - A special header used by the server for interception routes. + * Roughly corresponds to the current URL. + * @param treeAtTimeOfPrefetch - The FlightRouterState at the time the prefetch + * was requested. This is only used when PPR is disabled. + * @param includeDynamicData - Whether to prefetch dynamic data, in addition to + * static data. This is used by . */ export function prefetch( href: string, nextUrl: string | null, - treeAtTimeOfPrefetch: FlightRouterState + treeAtTimeOfPrefetch: FlightRouterState, + includeDynamicData: boolean ) { const url = createPrefetchURL(href) if (url === null) { @@ -19,5 +26,5 @@ export function prefetch( return } const cacheKey = createCacheKey(url.href, nextUrl) - schedulePrefetchTask(cacheKey, treeAtTimeOfPrefetch) + schedulePrefetchTask(cacheKey, treeAtTimeOfPrefetch, includeDynamicData) } diff --git a/packages/next/src/client/components/segment-cache/scheduler.ts b/packages/next/src/client/components/segment-cache/scheduler.ts index 866a3b643e71b..0ba95ac86f973 100644 --- a/packages/next/src/client/components/segment-cache/scheduler.ts +++ b/packages/next/src/client/components/segment-cache/scheduler.ts @@ -13,7 +13,7 @@ import { type RouteCacheEntry, type SegmentCacheEntry, type RouteTree, - fetchSegmentPrefetchesForPPRDisabledRoute, + fetchSegmentPrefetchesUsingDynamicRequest, type PendingSegmentCacheEntry, convertRouteTreeToFlightRouterState, FetchStrategy, @@ -21,6 +21,8 @@ import { upsertSegmentEntry, type FulfilledSegmentCacheEntry, upgradeToPendingSegment, + waitForSegmentCacheEntry, + resetRevalidatingSegmentEntry, } from './cache' import type { RouteCacheKey } from './cache-key' @@ -46,6 +48,12 @@ export type PrefetchTask = { */ treeAtTimeOfPrefetch: FlightRouterState + /** + * Whether to prefetch dynamic data, in addition to static data. This is + * used by . + */ + includeDynamicData: boolean + /** * sortId is an incrementing counter * @@ -158,10 +166,13 @@ let didScheduleMicrotask = false * * @param key The RouteCacheKey to prefetch. * @param treeAtTimeOfPrefetch The app's current FlightRouterState + * @param includeDynamicData Whether to prefetch dynamic data, in addition to + * static data. This is used by . */ export function schedulePrefetchTask( key: RouteCacheKey, - treeAtTimeOfPrefetch: FlightRouterState + treeAtTimeOfPrefetch: FlightRouterState, + includeDynamicData: boolean ): void { // Spawn a new prefetch task const task: PrefetchTask = { @@ -169,6 +180,7 @@ export function schedulePrefetchTask( treeAtTimeOfPrefetch, priority: PrefetchPriority.Default, hasBackgroundWork: false, + includeDynamicData, sortId: sortIdCounter++, isBlocked: false, _heapIndex: -1, @@ -388,64 +400,68 @@ function pingRootRouteTree( return PrefetchTaskExitStatus.InProgress } const tree = route.tree - if (route.isPPREnabled) { - return pingRouteTree(now, task, route, tree) - } else { - // When PPR is disabled, we can't prefetch per segment. We must fallback - // to the old prefetch behavior and send a dynamic request. - // - // Construct a tree (currently a FlightRouterState) that represents - // which segments need to be prefetched and which ones are already - // cached. If the tree is empty, then we can exit. Otherwise, we'll send - // the request tree to the server and use the response to populate the - // segment cache. - // - // Only routes that include a loading boundary can be prefetched in this - // way. The server will only render up to the first loading boundary - // inside new part of the tree. If there's no loading boundary, the - // server will never return any data. - // TODO: When we prefetch the route tree, the server should - // indicate whether there's a loading boundary so the client doesn't - // send a second request for no reason. - const spawnedEntries = new Map() - const dynamicRequestTree = pingRouteTreeForPPRDisabledRoute( - now, - route, - task.treeAtTimeOfPrefetch, - tree, - spawnedEntries - ) - const needsDynamicRequest = spawnedEntries.size > 0 - if (needsDynamicRequest) { - // Perform a dynamic prefetch request and populate the cache with - // the result - spawnPrefetchSubtask( - fetchSegmentPrefetchesForPPRDisabledRoute( - task, - route, - dynamicRequestTree, - spawnedEntries - ) + + // Determine which fetch strategy to use for this prefetch task. + const fetchStrategy = task.includeDynamicData + ? FetchStrategy.Full + : route.isPPREnabled + ? FetchStrategy.PPR + : FetchStrategy.LoadingBoundary + + switch (fetchStrategy) { + case FetchStrategy.PPR: + // Individually prefetch the static shell for each segment. This is + // the default prefetching behavior for static routes, or when PPR is + // enabled. It will not include any dynamic data. + return pingPPRRouteTree(now, task, route, tree) + case FetchStrategy.Full: + case FetchStrategy.LoadingBoundary: { + // Prefetch multiple segments using a single dynamic request. + const spawnedEntries = new Map() + const dynamicRequestTree = diffRouteTreeAgainstCurrent( + now, + route, + task.treeAtTimeOfPrefetch, + tree, + spawnedEntries, + fetchStrategy ) + const needsDynamicRequest = spawnedEntries.size > 0 + if (needsDynamicRequest) { + // Perform a dynamic prefetch request and populate the cache with + // the result + spawnPrefetchSubtask( + fetchSegmentPrefetchesUsingDynamicRequest( + task, + route, + fetchStrategy, + dynamicRequestTree, + spawnedEntries + ) + ) + } + return PrefetchTaskExitStatus.Done } - return PrefetchTaskExitStatus.Done + default: + fetchStrategy satisfies never } + break } default: { - const _exhaustiveCheck: never = route - return PrefetchTaskExitStatus.Done + route satisfies never } } + return PrefetchTaskExitStatus.Done } -function pingRouteTree( +function pingPPRRouteTree( now: number, task: PrefetchTask, route: FulfilledRouteCacheEntry, tree: RouteTree ): PrefetchTaskExitStatus.InProgress | PrefetchTaskExitStatus.Done { const segment = readOrCreateSegmentCacheEntry(now, route, tree.key) - pingSegment(now, task, route, segment, task.key, tree.key, tree.token) + pingPerSegment(now, task, route, segment, task.key, tree.key, tree.token) if (tree.slots !== null) { if (!hasNetworkBandwidth()) { // Stop prefetching segments until there's more bandwidth. @@ -454,7 +470,7 @@ function pingRouteTree( // Recursively ping the children. for (const parallelRouteKey in tree.slots) { const childTree = tree.slots[parallelRouteKey] - const childExitStatus = pingRouteTree(now, task, route, childTree) + const childExitStatus = pingPPRRouteTree(now, task, route, childTree) if (childExitStatus === PrefetchTaskExitStatus.InProgress) { // Child yielded without finishing. return PrefetchTaskExitStatus.InProgress @@ -465,12 +481,13 @@ function pingRouteTree( return PrefetchTaskExitStatus.Done } -function pingRouteTreeForPPRDisabledRoute( +function diffRouteTreeAgainstCurrent( now: number, route: FulfilledRouteCacheEntry, oldTree: FlightRouterState, newTree: RouteTree, - spawnedEntries: Map + spawnedEntries: Map, + fetchStrategy: FetchStrategy.Full | FetchStrategy.LoadingBoundary ): FlightRouterState { // This is a single recursive traversal that does multiple things: // - Finds the parts of the target route (newTree) that are not part of @@ -492,32 +509,83 @@ function pingRouteTreeForPPRDisabledRoute( oldTreeChildren[parallelRouteKey] const oldTreeChildSegment: FlightRouterStateSegment | void = oldTreeChild?.[0] - let requestTreeChild if ( oldTreeChildSegment !== undefined && matchSegment(newTreeChildSegment, oldTreeChildSegment) ) { // This segment is already part of the current route. Keep traversing. - requestTreeChild = pingRouteTreeForPPRDisabledRoute( + const requestTreeChild = diffRouteTreeAgainstCurrent( now, route, oldTreeChild, newTreeChild, - spawnedEntries + spawnedEntries, + fetchStrategy ) + requestTreeChildren[parallelRouteKey] = requestTreeChild } else { // This segment is not part of the current route. We're entering a // part of the tree that we need to prefetch (unless everything is // already cached). - requestTreeChild = createDynamicRequestTreeForPartiallyCachedSegments( - now, - route, - newTreeChild, - null, - spawnedEntries - ) + switch (fetchStrategy) { + case FetchStrategy.LoadingBoundary: { + // When PPR is disabled, we can't prefetch per segment. We must + // fallback to the old prefetch behavior and send a dynamic request. + // Only routes that include a loading boundary can be prefetched in + // this way. + // + // This is simlar to a "full" prefetch, but we're much more + // conservative about which segments to include in the request. + // + // The server will only render up to the first loading boundary + // inside new part of the tree. If there's no loading boundary, the + // server will never return any data. TODO: When we prefetch the + // route tree, the server should indicate whether there's a loading + // boundary so the client doesn't send a second request for no + // reason. + const requestTreeChild = + pingPPRDisabledRouteTreeUpToLoadingBoundary( + now, + route, + newTreeChild, + null, + spawnedEntries + ) + requestTreeChildren[parallelRouteKey] = requestTreeChild + break + } + case FetchStrategy.Full: { + // This is a "full" prefetch. Fetch all the data in the tree, both + // static and dynamic. We issue roughly the same request that we + // would during a real navigation. The goal is that once the + // navigation occurs, the router should not have to fetch any + // additional data. + // + // Although the response will include dynamic data, opting into a + // Full prefetch — via — implicitly + // instructs the cache to treat the response as "static", or non- + // dynamic, since the whole point is to cache it for + // future navigations. + // + // Construct a tree (currently a FlightRouterState) that represents + // which segments need to be prefetched and which ones are already + // cached. If the tree is empty, then we can exit. Otherwise, we'll + // send the request tree to the server and use the response to + // populate the segment cache. + const requestTreeChild = pingRouteTreeAndIncludeDynamicData( + now, + route, + newTreeChild, + false, + spawnedEntries + ) + requestTreeChildren[parallelRouteKey] = requestTreeChild + break + } + default: + fetchStrategy satisfies never + } } - requestTreeChildren[parallelRouteKey] = requestTreeChild } } const requestTree: FlightRouterState = [ @@ -530,24 +598,24 @@ function pingRouteTreeForPPRDisabledRoute( return requestTree } -function createDynamicRequestTreeForPartiallyCachedSegments( +function pingPPRDisabledRouteTreeUpToLoadingBoundary( now: number, route: FulfilledRouteCacheEntry, tree: RouteTree, refetchMarkerContext: 'refetch' | 'inside-shared-layout' | null, spawnedEntries: Map ): FlightRouterState { - // The tree we're constructing is the same shape as the tree we're navigating - // to — specifically, it's the subtree that isn't present in the previous - // route. But even though this is a "new" tree, some of the individual - // segments may be cached as a result of other route prefetches. - // - // So we need to find the first uncached segment along each path - // add an explicit "refetch" marker so the server knows where to start - // rendering. Once the server starts rendering along a path, it keeps - // rendering until it hits a loading boundary. We use `refetchMarkerContext` - // to represent the nearest parent marker. + // This function is similar to pingRouteTreeAndIncludeDynamicData, except the + // server is only going to return a minimal loading state — it will stop + // rendering at the first loading boundary. Whereas a Full prefetch is + // intentionally aggressive and tries to pretfetch all the data that will be + // needed for a navigation, a LoadingBoundary prefetch is much more + // conservative. For example, it will omit from the request tree any segment + // that is already cached, regardles of whether it's partial or full. By + // contrast, a Full prefetch will refetch partial segments. + // "inside-shared-layout" tells the server where to start looking for a + // loading boundary. let refetchMarker: 'refetch' | 'inside-shared-layout' | null = refetchMarkerContext === null ? 'inside-shared-layout' : null @@ -617,7 +685,7 @@ function createDynamicRequestTreeForPartiallyCachedSegments( for (const parallelRouteKey in tree.slots) { const childTree = tree.slots[parallelRouteKey] requestTreeChildren[parallelRouteKey] = - createDynamicRequestTreeForPartiallyCachedSegments( + pingPPRDisabledRouteTreeUpToLoadingBoundary( now, route, childTree, @@ -636,7 +704,87 @@ function createDynamicRequestTreeForPartiallyCachedSegments( return requestTree } -function pingSegment( +function pingRouteTreeAndIncludeDynamicData( + now: number, + route: FulfilledRouteCacheEntry, + tree: RouteTree, + isInsideRefetchingParent: boolean, + spawnedEntries: Map +): FlightRouterState { + // The tree we're constructing is the same shape as the tree we're navigating + // to. But even though this is a "new" tree, some of the individual segments + // may be cached as a result of other route prefetches. + // + // So we need to find the first uncached segment along each path add an + // explicit "refetch" marker so the server knows where to start rendering. + // Once the server starts rendering along a path, it keeps rendering the + // entire subtree. + const segment = readOrCreateSegmentCacheEntry(now, route, tree.key) + + let spawnedSegment: PendingSegmentCacheEntry | null = null + + switch (segment.status) { + case EntryStatus.Empty: { + // This segment is not cached. Include it in the request. + spawnedSegment = upgradeToPendingSegment(segment, FetchStrategy.Full) + break + } + case EntryStatus.Fulfilled: { + // The segment is already cached. + if (segment.isPartial) { + // The cached segment contians dynamic holes. Since this is a Full + // prefetch, we need to include it in the request. + spawnedSegment = pingFullSegmentRevalidation(now, segment, tree.key) + } + break + } + case EntryStatus.Pending: + case EntryStatus.Rejected: { + // There's either another prefetch currently in progress, or the previous + // attempt failed. If it wasn't a Full prefetch, fetch it again. + if (segment.fetchStrategy !== FetchStrategy.Full) { + spawnedSegment = pingFullSegmentRevalidation(now, segment, tree.key) + } + break + } + default: + segment satisfies never + } + const requestTreeChildren: Record = {} + if (tree.slots !== null) { + for (const parallelRouteKey in tree.slots) { + const childTree = tree.slots[parallelRouteKey] + requestTreeChildren[parallelRouteKey] = + pingRouteTreeAndIncludeDynamicData( + now, + route, + childTree, + isInsideRefetchingParent || spawnedSegment !== null, + spawnedEntries + ) + } + } + + if (spawnedSegment !== null) { + // Add the pending entry to the result map. + spawnedEntries.set(tree.key, spawnedSegment) + } + + // Don't bother to add a refetch marker if one is already present in a parent. + const refetchMarker = + !isInsideRefetchingParent && spawnedSegment !== null ? 'refetch' : null + + const requestTree: FlightRouterState = [ + tree.segment, + requestTreeChildren, + null, + refetchMarker, + tree.isRootLayout, + ] + return requestTree +} + +function pingPerSegment( now: number, task: PrefetchTask, route: FulfilledRouteCacheEntry, @@ -667,9 +815,10 @@ function pingSegment( break case EntryStatus.Pending: { // There's already a request in progress. Depending on what kind of - // request it is, we may want to + // request it is, we may want to revalidate it. switch (segment.fetchStrategy) { case FetchStrategy.PPR: + case FetchStrategy.Full: // There's already a request in progress. Don't do anything. break case FetchStrategy.LoadingBoundary: @@ -701,6 +850,7 @@ function pingSegment( // was originally fetched, we may or may not want to revalidate it. switch (segment.fetchStrategy) { case FetchStrategy.PPR: + case FetchStrategy.Full: // The previous attempt to fetch this entry failed. Don't attempt to // fetch it again until the entry expires. break @@ -783,6 +933,66 @@ function pingPPRSegmentRevalidation( } } +function pingFullSegmentRevalidation( + now: number, + currentSegment: SegmentCacheEntry, + segmentKey: string +): PendingSegmentCacheEntry | null { + const revalidatingSegment = readOrCreateRevalidatingSegmentEntry( + now, + currentSegment + ) + if (revalidatingSegment.status === EntryStatus.Empty) { + // During a Full prefetch, a single dynamic request is made for all the + // segments that we need. So we don't initiate a request here directly. By + // returning a pending entry from this function, it signals to the caller + // that this segment should be included in the request that's sent to + // the server. + const pendingSegment = upgradeToPendingSegment( + revalidatingSegment, + FetchStrategy.Full + ) + upsertSegmentOnCompletion( + segmentKey, + waitForSegmentCacheEntry(pendingSegment) + ) + return pendingSegment + } else { + // There's already a revalidation in progress. + const nonEmptyRevalidatingSegment = revalidatingSegment + if (nonEmptyRevalidatingSegment.fetchStrategy !== FetchStrategy.Full) { + // The existing revalidation was not fetched using the Full strategy. + // Reset it and start a new revalidation. + const emptySegment = resetRevalidatingSegmentEntry( + nonEmptyRevalidatingSegment + ) + const pendingSegment = upgradeToPendingSegment( + emptySegment, + FetchStrategy.Full + ) + upsertSegmentOnCompletion( + segmentKey, + waitForSegmentCacheEntry(pendingSegment) + ) + return pendingSegment + } + switch (nonEmptyRevalidatingSegment.status) { + case EntryStatus.Pending: + // There's already an in-progress prefetch that includes this segment. + return null + case EntryStatus.Fulfilled: + case EntryStatus.Rejected: + // A previous revalidation attempt finished, but we chose not to replace + // the existing entry in the cache. Don't try again until or unless the + // revalidation entry expires. + return null + default: + nonEmptyRevalidatingSegment satisfies never + return null + } + } +} + const noop = () => {} function upsertSegmentOnCompletion( diff --git a/test/e2e/app-dir/segment-cache/incremental-opt-in/app/mixed-fetch-strategies/page.tsx b/test/e2e/app-dir/segment-cache/incremental-opt-in/app/mixed-fetch-strategies/page.tsx index d36e7d1deb9ca..629599ce81da6 100644 --- a/test/e2e/app-dir/segment-cache/incremental-opt-in/app/mixed-fetch-strategies/page.tsx +++ b/test/e2e/app-dir/segment-cache/incremental-opt-in/app/mixed-fetch-strategies/page.tsx @@ -18,6 +18,17 @@ export default function MixedFetchStrategies() { > Link to PPR enabled page +
    +
  • + + Same link, but with prefetch=true + +
  • +
  • { }) } ) + + it( + 'when a link is prefetched with , no dynamic request ' + + 'is made on navigation', + async () => { + let act + const browser = await next.browser('/mixed-fetch-strategies', { + beforePageLoad(p: Playwright.Page) { + act = createRouterAct(p) + }, + }) + + await act( + async () => { + const checkbox = await browser.elementById( + 'ppr-enabled-prefetch-true' + ) + await checkbox.click() + }, + { + includes: 'Dynamic page content', + } + ) + + // Navigate to fully prefetched route + const link = await browser.elementByCss('#ppr-enabled-prefetch-true + a') + await act( + async () => { + await link.click() + + // We should be able to fully load the page content, including the + // dynamic data, before the server responds. + await browser.elementById('page-content') + }, + // Assert that no network requests are initiated within this block. + 'no-requests' + ) + } + ) + + it( + 'when prefetching with prefetch=true, refetches cache entries that only ' + + 'contain partial data', + async () => { + let act + const browser = await next.browser('/mixed-fetch-strategies', { + beforePageLoad(p: Playwright.Page) { + act = createRouterAct(p) + }, + }) + + // Prefetch a link with PPR + await act( + async () => { + const checkbox = await browser.elementById('ppr-enabled') + await checkbox.click() + }, + { includes: 'Loading (PPR shell of shared-layout)...' } + ) + + // Prefetch the same link again, this time with prefetch=true to include + // the dynamic data + await act( + async () => { + const checkbox = await browser.elementById( + 'ppr-enabled-prefetch-true' + ) + await checkbox.click() + }, + { + includes: 'Dynamic content in shared layout', + } + ) + + // Navigate to the PPR-enabled route + const link = await browser.elementByCss('#ppr-enabled-prefetch-true + a') + await act( + async () => { + await link.click() + + // If we prefetched all the segments correctly, we should be able to + // fully load the page content, including the dynamic data, before the + // server responds. + // + // If this fails, it likely means that the partial cache entry that + // resulted from prefetching the normal link () + // was not properly re-fetched when the full link () was prefetched. + await browser.elementById('page-content') + }, + // Assert that no network requests are initiated within this block. + 'no-requests' + ) + } + ) + + it( + 'when prefetching with prefetch=true, refetches partial cache entries ' + + "even if there's already a pending PPR request", + async () => { + // This test is hard to describe succinctly because it involves a fairly + // complex race condition between a non-PPR prefetch, a PPR prefetch, and + // a "full" prefetch. Despite the complexity of the scenario, it's worth + // testing because could easily happen in real world conditions. + + let act + const browser = await next.browser('/mixed-fetch-strategies', { + beforePageLoad(p: Playwright.Page) { + act = createRouterAct(p) + }, + }) + + // Initiate a prefetch for the PPR-disabled route first. This will not + // include the /shared-layout/ segment, because it's inside the + // loading boundary. + await act( + async () => { + const checkbox = await browser.elementById('ppr-disabled') + await checkbox.click() + }, + { includes: 'Loading (has-loading-boundary/loading.tsx)...' } + ) + + // Then initiate a prefetch for the PPR-enabled route. + await act(async () => { + // Create an inner act scope so we initate a prefetch but block it + // from responding. + await act( + async () => { + const checkbox = await browser.elementById('ppr-enabled') + await checkbox.click() + }, + { + // This prefetch should include the /shared-layout/ segment despite + // the presence of the loading boundary, and despite the earlier + // non-PPR attempt. + includes: 'Loading (PPR shell of shared-layout)...', + // We're going to block it from responding, so we can test what + // happens if another prefetch is initiated in the meantime. + block: true, + } + ) + + // Before the previous prefetch finishes, prefetch the same link again, + // this time with prefetch=true to include the dynamic data. + await act( + async () => { + const checkbox = await browser.elementById( + 'ppr-enabled-prefetch-true' + ) + await checkbox.click() + }, + // This prefetch should load the dynamic data in the shared layout + { + includes: 'Dynamic content in shared layout', + } + ) + }) + + // Navigate to the PPR-enabled route. + await act( + async () => { + const link = await browser.elementByCss( + '#ppr-enabled-prefetch-true + a' + ) + await link.click() + + // If we prefetched all the segments correctly, we should be able to + // fully load the page content, including the dynamic data, before the + // server responds. + // + // If this fails, it likely means that the pending cache entry that + // resulted from prefetching the normal link () + // was not properly re-fetched when the full link () was prefetched. + await browser.elementById('page-content') + }, + // Assert that no network requests are initiated within this block. + 'no-requests' + ) + } + ) }) From 2e9538bdea8c1da10629b49b9a01a8dcc3db3238 Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Tue, 14 Jan 2025 12:28:48 -0500 Subject: [PATCH 48/65] Remove unnecessary re render on link reveal (#74670) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Link component initiates a prefetch whenever it enters the viewport, but currently the implementation works by setting an `isVisible` state to true, rerendering the component, and calling `router.prefetch` inside a `useEffect` hook. This extra render is not necessary — we can initiate the prefetch directly inside the IntersectionObserver's event handler. The bulk of the changes in this commit involve removing the use of the `useIntersection` abstraction and inlining the IntersectionObserver into the Link module. The removal of this indirection will make it easier to add more sophisticated scheduling improvements, like canceling the prefetch on viewport exit, and increasing the priority of the prefetch during hover. --- packages/next/errors.json | 3 +- packages/next/src/client/app-dir/link.tsx | 257 ++++++++++++++---- .../components/segment-cache/scheduler.ts | 50 ++-- .../src/shared/lib/router/action-queue.ts | 19 ++ .../app/cancellation/[pageNumber]/page.tsx | 30 ++ .../app/cancellation/page.tsx | 64 +++++ .../prefetch-scheduling/app/layout.tsx | 11 + .../prefetch-scheduling/next.config.js | 12 + .../prefetch-scheduling.test.ts | 61 +++++ 9 files changed, 433 insertions(+), 74 deletions(-) create mode 100644 test/e2e/app-dir/segment-cache/prefetch-scheduling/app/cancellation/[pageNumber]/page.tsx create mode 100644 test/e2e/app-dir/segment-cache/prefetch-scheduling/app/cancellation/page.tsx create mode 100644 test/e2e/app-dir/segment-cache/prefetch-scheduling/app/layout.tsx create mode 100644 test/e2e/app-dir/segment-cache/prefetch-scheduling/next.config.js create mode 100644 test/e2e/app-dir/segment-cache/prefetch-scheduling/prefetch-scheduling.test.ts diff --git a/packages/next/errors.json b/packages/next/errors.json index c86fb3498fa53..f3a918ac233fe 100644 --- a/packages/next/errors.json +++ b/packages/next/errors.json @@ -621,5 +621,6 @@ "620": "A required parameter (%s) was not provided as %s received %s in getStaticPaths for %s", "621": "Required root params (%s) were not provided in generateStaticParams for %s, please provide at least one value for each.", "622": "A required root parameter (%s) was not provided in generateStaticParams for %s, please provide at least one value.", - "623": "Invalid quality prop (%s) on \\`next/image\\` does not match \\`images.qualities\\` configured in your \\`next.config.js\\`\\nSee more info: https://nextjs.org/docs/messages/next-image-unconfigured-qualities" + "623": "Invalid quality prop (%s) on \\`next/image\\` does not match \\`images.qualities\\` configured in your \\`next.config.js\\`\\nSee more info: https://nextjs.org/docs/messages/next-image-unconfigured-qualities", + "624": "Internal Next.js Error: createMutableActionQueue was called more than once" } diff --git a/packages/next/src/client/app-dir/link.tsx b/packages/next/src/client/app-dir/link.tsx index 753ce7f7c1bd7..0a4e1f262b3a4 100644 --- a/packages/next/src/client/app-dir/link.tsx +++ b/packages/next/src/client/app-dir/link.tsx @@ -7,13 +7,19 @@ import type { UrlObject } from 'url' import { formatUrl } from '../../shared/lib/router/utils/format-url' import { AppRouterContext } from '../../shared/lib/app-router-context.shared-runtime' import type { AppRouterInstance } from '../../shared/lib/app-router-context.shared-runtime' -import type { PrefetchOptions } from '../../shared/lib/app-router-context.shared-runtime' -import { useIntersection } from '../use-intersection' import { PrefetchKind } from '../components/router-reducer/router-reducer-types' import { useMergedRef } from '../use-merged-ref' import { isAbsoluteUrl } from '../../shared/lib/utils' import { addBasePath } from '../add-base-path' import { warnOnce } from '../../shared/lib/utils/warn-once' +import { + type PrefetchTask, + schedulePrefetchTask as scheduleSegmentPrefetchTask, + bumpPrefetchTask, +} from '../components/segment-cache/scheduler' +import { getCurrentAppRouterState } from '../../shared/lib/router/action-queue' +import { createCacheKey } from '../components/segment-cache/cache-key' +import { createPrefetchURL } from '../components/app-router' type Url = string | UrlObject type RequiredKeys = { @@ -112,11 +118,181 @@ export type LinkProps = InternalLinkProps type LinkPropsRequired = RequiredKeys type LinkPropsOptional = OptionalKeys> -function prefetch( - router: AppRouterInstance, +type LinkInstance = { + router: AppRouterInstance + kind: PrefetchKind.AUTO | PrefetchKind.FULL + prefetchHref: string + + isVisible: boolean + + // The most recently initiated prefetch task. It may or may not have + // already completed. The same prefetch task object can be reused across + // multiple prefetches of the same link. + prefetchTask: PrefetchTask | null +} + +// TODO: This is currently a WeakMap because it doesn't need to be enumerable, +// but eventually we'll want to be able to re-prefetch all the currently +// visible links, e.g. after a revalidation or refresh. +const links: + | WeakMap + | Map = + typeof WeakMap === 'function' ? new WeakMap() : new Map() + +// A single IntersectionObserver instance shared by all components. +const observer: IntersectionObserver | null = + typeof IntersectionObserver === 'function' + ? new IntersectionObserver(handleIntersect, { + rootMargin: '200px', + }) + : null + +function mountLinkInstance( + element: HTMLAnchorElement | SVGAElement, href: string, - options: PrefetchOptions -): void { + router: AppRouterInstance, + kind: PrefetchKind.AUTO | PrefetchKind.FULL +) { + let prefetchUrl: URL | null = null + try { + prefetchUrl = createPrefetchURL(href) + if (prefetchUrl === null) { + // We only track the link if it's prefetchable. For example, this excludes + // links to external URLs. + return + } + } catch { + // createPrefetchURL sometimes throws an error if an invalid URL is + // provided, though I'm not sure if it's actually necessary. + // TODO: Consider removing the throw from the inner function, or change it + // to reportError. Or maybe the error isn't even necessary for automatic + // prefetches, just navigations. + const reportErrorFn = + typeof reportError === 'function' ? reportError : console.error + reportErrorFn( + `Cannot prefetch '${href}' because it cannot be converted to a URL.` + ) + return + } + + const instance: LinkInstance = { + prefetchHref: prefetchUrl.href, + router, + kind, + isVisible: false, + prefetchTask: null, + } + const existingInstance = links.get(element) + if (existingInstance !== undefined) { + // This shouldn't happen because each component should have its own + // anchor tag instance, but it's defensive coding to avoid a memory leak in + // case there's a logical error somewhere else. + unmountLinkInstance(element) + } + links.set(element, instance) + if (observer !== null) { + observer.observe(element) + } +} + +export function unmountLinkInstance(element: HTMLAnchorElement | SVGAElement) { + const instance = links.get(element) + if (instance !== undefined) { + links.delete(element) + const prefetchTask = instance.prefetchTask + if (prefetchTask !== null) { + // TODO: In the Segment Cache implementation, cancel the prefetch task + // when the link is unmounted. + } + } + if (observer !== null) { + observer.unobserve(element) + } +} + +function handleIntersect(entries: Array) { + for (const entry of entries) { + // Some extremely old browsers or polyfills don't reliably support + // isIntersecting so we check intersectionRatio instead. (Do we care? Not + // really. But whatever this is fine.) + const isVisible = entry.intersectionRatio > 0 + onLinkVisibilityChanged(entry.target as HTMLAnchorElement, isVisible) + } +} + +function onLinkVisibilityChanged( + element: HTMLAnchorElement | SVGAElement, + isVisible: boolean +) { + if (process.env.NODE_ENV !== 'production') { + // Prefetching on viewport is disabled in development for performance + // reasons, because it requires compiling the target page. + // TODO: Investigate re-enabling this. + return + } + + const instance = links.get(element) + if (instance === undefined) { + return + } + + instance.isVisible = isVisible + rescheduleLinkPrefetch(instance) +} + +function onNavigationIntent(element: HTMLAnchorElement | SVGAElement) { + const instance = links.get(element) + if (instance === undefined) { + return + } + // Prefetch the link on hover/touchstart. + if (instance !== undefined) { + rescheduleLinkPrefetch(instance) + } +} + +function rescheduleLinkPrefetch(instance: LinkInstance) { + const existingPrefetchTask = instance.prefetchTask + + if (!instance.isVisible) { + // TODO: In the Segment Cache implementation, cancel the prefetch task when + // the link leaves the viewport. + return + } + + if (!process.env.__NEXT_CLIENT_SEGMENT_CACHE) { + // The old prefetch implementation does not have different priority levels. + // Just schedule a new prefetch task. + prefetchWithOldCacheImplementation(instance) + return + } + + // In the Segment Cache implementation, we increase the relative priority of + // links whenever they re-enter the viewport, as if they were being scheduled + // for the first time. + // TODO: Prioritize links that are hovered. + if (existingPrefetchTask === null) { + // Initiate a prefetch task. + const appRouterState = getCurrentAppRouterState() + if (appRouterState !== null) { + const nextUrl = appRouterState.nextUrl + const treeAtTimeOfPrefetch = appRouterState.tree + const cacheKey = createCacheKey(instance.prefetchHref, nextUrl) + instance.prefetchTask = scheduleSegmentPrefetchTask( + cacheKey, + treeAtTimeOfPrefetch, + instance.kind === PrefetchKind.FULL + ) + } + } else { + // We already have an old task object that we can reschedule. This is + // effectively the same as canceling the old task and creating a new one. + bumpPrefetchTask(existingPrefetchTask) + } +} + +function prefetchWithOldCacheImplementation(instance: LinkInstance) { + // This is the path used when the Segment Cache is not enabled. if (typeof window === 'undefined') { return } @@ -124,7 +300,9 @@ function prefetch( const doPrefetch = async () => { // note that `appRouter.prefetch()` is currently sync, // so we have to wrap this call in an async function to be able to catch() errors below. - return router.prefetch(href, options) + return instance.router.prefetch(instance.prefetchHref, { + kind: instance.kind, + }) } // Prefetch the page if asked (only in the client) @@ -394,9 +572,6 @@ const Link = React.forwardRef( } }, [hrefProp, asProp]) - const previousHref = React.useRef(href) - const previousAs = React.useRef(as) - // This will return the first child, if multiple are provided it will throw an error let child: any if (legacyBehavior) { @@ -443,47 +618,23 @@ const Link = React.forwardRef( ? child && typeof child === 'object' && child.ref : forwardedRef - const [setIntersectionRef, isVisible, resetVisible] = useIntersection({ - rootMargin: '200px', - }) - - const setIntersectionWithResetRef = React.useCallback( - (el: Element) => { - // Before the link getting observed, check if visible state need to be reset - if (previousAs.current !== as || previousHref.current !== href) { - resetVisible() - previousAs.current = as - previousHref.current = href + // Use a callback ref to attach an IntersectionObserver to the anchor tag on + // mount. In the future we will also use this to keep track of all the + // currently mounted instances, e.g. so we can re-prefetch them after + // a revalidation or refresh. + const observeLinkVisibilityOnMount = React.useCallback( + (element: HTMLAnchorElement | SVGAElement) => { + if (prefetchEnabled && router !== null) { + mountLinkInstance(element, href, router, appPrefetchKind) + } + return () => { + unmountLinkInstance(element) } - - setIntersectionRef(el) }, - [as, href, resetVisible, setIntersectionRef] + [prefetchEnabled, href, router, appPrefetchKind] ) - const setRef = useMergedRef(setIntersectionWithResetRef, childRef) - - // Prefetch the URL if we haven't already and it's visible. - React.useEffect(() => { - // in dev, we only prefetch on hover to avoid wasting resources as the prefetch will trigger compiling the page. - if (process.env.NODE_ENV !== 'production') { - return - } - - if (!router) { - return - } - - // If we don't need to prefetch the URL, don't do prefetch. - if (!isVisible || !prefetchEnabled) { - return - } - - // Prefetch the URL. - prefetch(router, href, { - kind: appPrefetchKind, - }) - }, [as, href, isVisible, prefetchEnabled, router, appPrefetchKind]) + const mergedRef = useMergedRef(observeLinkVisibilityOnMount, childRef) const childProps: { onTouchStart?: React.TouchEventHandler @@ -492,7 +643,7 @@ const Link = React.forwardRef( href?: string ref?: any } = { - ref: setRef, + ref: mergedRef, onClick(e) { if (process.env.NODE_ENV !== 'production') { if (!e) { @@ -545,9 +696,7 @@ const Link = React.forwardRef( return } - prefetch(router, href, { - kind: appPrefetchKind, - }) + onNavigationIntent(e.currentTarget as HTMLAnchorElement | SVGAElement) }, onTouchStart: process.env.__NEXT_LINK_NO_TOUCH_START ? undefined @@ -572,9 +721,9 @@ const Link = React.forwardRef( return } - prefetch(router, href, { - kind: appPrefetchKind, - }) + onNavigationIntent( + e.currentTarget as HTMLAnchorElement | SVGAElement + ) }, } diff --git a/packages/next/src/client/components/segment-cache/scheduler.ts b/packages/next/src/client/components/segment-cache/scheduler.ts index 0ba95ac86f973..e7bf26fbf91ee 100644 --- a/packages/next/src/client/components/segment-cache/scheduler.ts +++ b/packages/next/src/client/components/segment-cache/scheduler.ts @@ -90,22 +90,14 @@ export type PrefetchTask = { */ hasBackgroundWork: boolean - /** - * True if the prefetch is blocked by network data. We remove tasks from the - * queue once they are blocked, and add them back when they receive data. - * - * isBlocked also indicates whether the task is currently in the queue; tasks - * are removed from the queue when they are blocked. Use this to avoid - * queueing the same task multiple times. - */ - isBlocked: boolean - /** * The index of the task in the heap's backing array. Used to efficiently * change the priority of a task by re-sifting it, which requires knowing * where it is in the array. This is only used internally by the heap * algorithm. The naive alternative is indexOf every time a task is queued, * which has O(n) complexity. + * + * We also use this field to check whether a task is currently in the queue. */ _heapIndex: number } @@ -173,7 +165,7 @@ export function schedulePrefetchTask( key: RouteCacheKey, treeAtTimeOfPrefetch: FlightRouterState, includeDynamicData: boolean -): void { +): PrefetchTask { // Spawn a new prefetch task const task: PrefetchTask = { key, @@ -182,7 +174,6 @@ export function schedulePrefetchTask( hasBackgroundWork: false, includeDynamicData, sortId: sortIdCounter++, - isBlocked: false, _heapIndex: -1, } heapPush(taskHeap, task) @@ -195,6 +186,27 @@ export function schedulePrefetchTask( // If they have different priorities, it also ensures they are processed in // the optimal order. ensureWorkIsScheduled() + + return task +} + +export function bumpPrefetchTask(task: PrefetchTask): void { + // Bump the prefetch task to the top of the queue, as if it were a fresh + // task. This is essentially the same as canceling the task and scheduling + // a new one, except it reuses the original object. + // + // The primary use case is to increase the relative priority of a Link- + // initated prefetch on hover. + + // Assign a new sort ID. Higher sort IDs are higher priority. + task.sortId = sortIdCounter++ + if (task._heapIndex !== -1) { + // The task is already in the queue. + heapResift(taskHeap, task) + } else { + heapPush(taskHeap, task) + } + ensureWorkIsScheduled() } function ensureWorkIsScheduled() { @@ -263,12 +275,14 @@ function onPrefetchConnectionClosed(): void { */ export function pingPrefetchTask(task: PrefetchTask) { // "Ping" a prefetch that's already in progress to notify it of new data. - if (!task.isBlocked) { - // Prefetch is already queued. + if ( + // Check if prefetch is already queued. + // TODO: Check if task was canceled, too + task._heapIndex !== -1 + ) { return } - // Unblock the task and requeue it. - task.isBlocked = false + // Add the task back to the queue. heapPush(taskHeap, task) ensureWorkIsScheduled() } @@ -300,10 +314,8 @@ function processQueueInMicrotask() { case PrefetchTaskExitStatus.Blocked: // The task is blocked. It needs more data before it can proceed. // Keep the task out of the queue until the server responds. - task.isBlocked = true - - // Continue to the next task heapPop(taskHeap) + // Continue to the next task task = heapPeek(taskHeap) continue case PrefetchTaskExitStatus.Done: diff --git a/packages/next/src/shared/lib/router/action-queue.ts b/packages/next/src/shared/lib/router/action-queue.ts index 40a5eb9c22250..7c62b78b2d62c 100644 --- a/packages/next/src/shared/lib/router/action-queue.ts +++ b/packages/next/src/shared/lib/router/action-queue.ts @@ -174,6 +174,8 @@ function dispatchAction( } } +let globalActionQueue: AppRouterActionQueue | null = null + export function createMutableActionQueue( initialState: AppRouterState ): AppRouterActionQueue { @@ -189,5 +191,22 @@ export function createMutableActionQueue( last: null, } + if (typeof window !== 'undefined') { + // The action queue is lazily created on hydration, but after that point + // it doesn't change. So we can store it in a global rather than pass + // it around everywhere via props/context. + if (globalActionQueue !== null) { + throw new Error( + 'Internal Next.js Error: createMutableActionQueue was called more ' + + 'than once' + ) + } + globalActionQueue = actionQueue + } + return actionQueue } + +export function getCurrentAppRouterState(): AppRouterState | null { + return globalActionQueue !== null ? globalActionQueue.state : null +} diff --git a/test/e2e/app-dir/segment-cache/prefetch-scheduling/app/cancellation/[pageNumber]/page.tsx b/test/e2e/app-dir/segment-cache/prefetch-scheduling/app/cancellation/[pageNumber]/page.tsx new file mode 100644 index 0000000000000..32653a296aec4 --- /dev/null +++ b/test/e2e/app-dir/segment-cache/prefetch-scheduling/app/cancellation/[pageNumber]/page.tsx @@ -0,0 +1,30 @@ +import { Suspense } from 'react' + +type Params = { + pageNumber: string +} + +async function Content({ params }: { params: Promise }) { + const { pageNumber } = await params + return 'Content of page ' + pageNumber +} + +export default async function LinkCancellationTargetPage({ + params, +}: { + params: Promise +}) { + return ( + + + + ) +} + +export async function generateStaticParams(): Promise> { + const result: Array = [] + for (let n = 1; n <= 1; n++) { + result.push({ pageNumber: n.toString() }) + } + return result +} diff --git a/test/e2e/app-dir/segment-cache/prefetch-scheduling/app/cancellation/page.tsx b/test/e2e/app-dir/segment-cache/prefetch-scheduling/app/cancellation/page.tsx new file mode 100644 index 0000000000000..44cc0a46173aa --- /dev/null +++ b/test/e2e/app-dir/segment-cache/prefetch-scheduling/app/cancellation/page.tsx @@ -0,0 +1,64 @@ +'use client' + +import Link from 'next/link' +import { useState } from 'react' + +type PaginationConfig = { + start: number + end: number +} + +export default function LinkCancellationPage() { + const [areLinksVisible, setLinksVisibility] = useState(false) + const [showMoreLinks, setShowMoreLinks] = useState(false) + + return ( + <> +

    + This page is used to test that a prefetch scheduled when a Link enters + the viewport is cancelled when the Link exits. The visibility toggle + does not affect whether the links are mounted, only whether they are + visible (using the `hidden` attribute). +

    + + + + ) +} + +function Links({ start, end }: PaginationConfig) { + const links: Array = [] + for (let pageNumber = start; pageNumber <= end; pageNumber++) { + links.push( +
  • + + Link to page {pageNumber} + +
  • + ) + } + return links +} diff --git a/test/e2e/app-dir/segment-cache/prefetch-scheduling/app/layout.tsx b/test/e2e/app-dir/segment-cache/prefetch-scheduling/app/layout.tsx new file mode 100644 index 0000000000000..dbce4ea8e3aeb --- /dev/null +++ b/test/e2e/app-dir/segment-cache/prefetch-scheduling/app/layout.tsx @@ -0,0 +1,11 @@ +export default function RootLayout({ + children, +}: { + children: React.ReactNode +}) { + return ( + + {children} + + ) +} diff --git a/test/e2e/app-dir/segment-cache/prefetch-scheduling/next.config.js b/test/e2e/app-dir/segment-cache/prefetch-scheduling/next.config.js new file mode 100644 index 0000000000000..a74129c5a24f2 --- /dev/null +++ b/test/e2e/app-dir/segment-cache/prefetch-scheduling/next.config.js @@ -0,0 +1,12 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: true, + dynamicIO: true, + clientSegmentCache: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/segment-cache/prefetch-scheduling/prefetch-scheduling.test.ts b/test/e2e/app-dir/segment-cache/prefetch-scheduling/prefetch-scheduling.test.ts new file mode 100644 index 0000000000000..932e7ba43a911 --- /dev/null +++ b/test/e2e/app-dir/segment-cache/prefetch-scheduling/prefetch-scheduling.test.ts @@ -0,0 +1,61 @@ +import { nextTestSetup } from 'e2e-utils' +import type * as Playwright from 'playwright' +import { createRouterAct } from '../router-act' + +describe('segment cache prefetch scheduling', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname, + skipDeployment: true, + }) + if (isNextDev || skipped) { + test('prefetching is disabled', () => {}) + return + } + + it('increases the priority of a viewport-initiated prefetch on hover', async () => { + // TODO: This works because we bump the prefetch task to the front of the + // queue on mouseenter. But there's a flaw: if another link enters the + // viewport while the first link is still being hovered, the second link + // will go ahead of it in the queue. In other words, we currently don't + // treat mouseenter as a higher priority signal than "viewport enter". To + // fix this, we need distinct priority levels for hover and viewport; the + // last-in-first-out strategy is not sufficient for the desired behavior. + let act: ReturnType + const browser = await next.browser('/cancellation', { + beforePageLoad(p: Playwright.Page) { + act = createRouterAct(p) + }, + }) + + const checkbox = await browser.elementByCss('input[type="checkbox"]') + await act( + async () => { + // Reveal the links to start prefetching, but block the responses from + // reaching the client. This will initiate prefetches for the route + // trees, but it won't start prefetching any segment data yet until the + // trees have loaded. + await act(async () => { + await checkbox.click() + }, 'block') + + // Hover over a link to increase its relative priority. + const link2 = await browser.elementByCss('a[href="/cancellation/2"]') + await link2.hover() + + // Hover over a different link to increase its relative priority. + const link5 = await browser.elementByCss('a[href="/cancellation/5"]') + await link5.hover() + }, + // Assert that the segment data is prefetched in the expected order. + [ + // The last link we hovered over should be the first to prefetch. + { includes: 'Content of page 5' }, + // The second-to-last link we hovered over should come next. + { includes: 'Content of page 2' }, + // Then all the other links come after that. (We don't need to assert + // on every single prefetch response. I picked one of them arbitrarily.) + { includes: 'Content of page 4' }, + ] + ) + }) +}) From 52281196b8d02ef2fd0493d0a9a94c407dbaa317 Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Tue, 14 Jan 2025 12:31:06 -0500 Subject: [PATCH 49/65] [Segment Cache] Cancel prefetch on viewport exit (#74671) We use an IntersectionObserver to prefetch links when they enter the viewport. This updates the behavior to cancel the prefetch if the link exits the viewport before it completes. This can greatly reduce the amount of data transfer caused by prefetching, however, the impact of this change will depend on the user's network conditions. The faster the network conditions, the more likely the link will have already been prefetched by the time the link exits the screen. We'll need a different strategy for limiting prefetch data transfer in fast network conditions, perhaps by tracking and throttling the overall bitrate. --- packages/next/src/client/app-dir/link.tsx | 15 ++- .../components/segment-cache/scheduler.ts | 37 +++++++- .../basic/segment-cache-basic.test.ts | 14 +-- .../prefetch-scheduling.test.ts | 91 +++++++++++++++++++ 4 files changed, 143 insertions(+), 14 deletions(-) diff --git a/packages/next/src/client/app-dir/link.tsx b/packages/next/src/client/app-dir/link.tsx index 0a4e1f262b3a4..183ca919dba17 100644 --- a/packages/next/src/client/app-dir/link.tsx +++ b/packages/next/src/client/app-dir/link.tsx @@ -15,6 +15,7 @@ import { warnOnce } from '../../shared/lib/utils/warn-once' import { type PrefetchTask, schedulePrefetchTask as scheduleSegmentPrefetchTask, + cancelPrefetchTask, bumpPrefetchTask, } from '../components/segment-cache/scheduler' import { getCurrentAppRouterState } from '../../shared/lib/router/action-queue' @@ -201,8 +202,7 @@ export function unmountLinkInstance(element: HTMLAnchorElement | SVGAElement) { links.delete(element) const prefetchTask = instance.prefetchTask if (prefetchTask !== null) { - // TODO: In the Segment Cache implementation, cancel the prefetch task - // when the link is unmounted. + cancelPrefetchTask(prefetchTask) } } if (observer !== null) { @@ -255,8 +255,15 @@ function rescheduleLinkPrefetch(instance: LinkInstance) { const existingPrefetchTask = instance.prefetchTask if (!instance.isVisible) { - // TODO: In the Segment Cache implementation, cancel the prefetch task when - // the link leaves the viewport. + // Cancel any in-progress prefetch task. (If it already finished then this + // is a no-op.) + if (existingPrefetchTask !== null) { + cancelPrefetchTask(existingPrefetchTask) + } + // We don't need to reset the prefetchTask to null upon cancellation; an + // old task object can be rescheduled with bumpPrefetchTask. This is a + // micro-optimization but also makes the code simpler (don't need to + // worry about whether an old task object is stale). return } diff --git a/packages/next/src/client/components/segment-cache/scheduler.ts b/packages/next/src/client/components/segment-cache/scheduler.ts index e7bf26fbf91ee..e784b60965155 100644 --- a/packages/next/src/client/components/segment-cache/scheduler.ts +++ b/packages/next/src/client/components/segment-cache/scheduler.ts @@ -90,6 +90,11 @@ export type PrefetchTask = { */ hasBackgroundWork: boolean + /** + * True if the prefetch was cancelled. + */ + isCanceled: boolean + /** * The index of the task in the heap's backing array. Used to efficiently * change the priority of a task by re-sifting it, which requires knowing @@ -174,6 +179,7 @@ export function schedulePrefetchTask( hasBackgroundWork: false, includeDynamicData, sortId: sortIdCounter++, + isCanceled: false, _heapIndex: -1, } heapPush(taskHeap, task) @@ -190,6 +196,16 @@ export function schedulePrefetchTask( return task } +export function cancelPrefetchTask(task: PrefetchTask): void { + // Remove the prefetch task from the queue. If the task already completed, + // then this is a no-op. + // + // We must also explicitly mark the task as canceled so that a blocked task + // does not get added back to the queue when it's pinged by the network. + task.isCanceled = true + heapDelete(taskHeap, task) +} + export function bumpPrefetchTask(task: PrefetchTask): void { // Bump the prefetch task to the top of the queue, as if it were a fresh // task. This is essentially the same as canceling the task and scheduling @@ -198,6 +214,9 @@ export function bumpPrefetchTask(task: PrefetchTask): void { // The primary use case is to increase the relative priority of a Link- // initated prefetch on hover. + // Un-cancel the task, in case it was previously canceled. + task.isCanceled = false + // Assign a new sort ID. Higher sort IDs are higher priority. task.sortId = sortIdCounter++ if (task._heapIndex !== -1) { @@ -276,8 +295,9 @@ function onPrefetchConnectionClosed(): void { export function pingPrefetchTask(task: PrefetchTask) { // "Ping" a prefetch that's already in progress to notify it of new data. if ( + // Check if prefetch was canceled. + task.isCanceled || // Check if prefetch is already queued. - // TODO: Check if task was canceled, too task._heapIndex !== -1 ) { return @@ -1068,6 +1088,21 @@ function heapPop(heap: Array): PrefetchTask | null { return first } +function heapDelete(heap: Array, node: PrefetchTask): void { + const index = node._heapIndex + if (index !== -1) { + node._heapIndex = -1 + if (heap.length !== 0) { + const last = heap.pop() as PrefetchTask + if (last !== node) { + heap[index] = last + last._heapIndex = index + heapSiftDown(heap, last, index) + } + } + } +} + function heapResift(heap: Array, node: PrefetchTask): void { const index = node._heapIndex if (index !== -1) { diff --git a/test/e2e/app-dir/segment-cache/basic/segment-cache-basic.test.ts b/test/e2e/app-dir/segment-cache/basic/segment-cache-basic.test.ts index 2146f00385183..cd1f270c76c2e 100644 --- a/test/e2e/app-dir/segment-cache/basic/segment-cache-basic.test.ts +++ b/test/e2e/app-dir/segment-cache/basic/segment-cache-basic.test.ts @@ -47,15 +47,11 @@ describe('segment cache (basic tests)', () => { `"
    Static in nav
    Dynamic in nav
    "` ) }, - // When the outer act scope exits, the blocked prefetches are allowed - // to continue. - // TODO: As an optimization, in the case where a fully static page is - // returned during a dynamic response, we should populate the prefetch - // cache with the static data. Then we wouldn't have to prefetch it again - // here, because it would already be cached. Only works for fully static - // pages because in a partial response we don't know which parts are - // static versus dynamic. - { includes: 'Static in nav' } + // Although the blocked prefetches are allowed to continue when we exit + // the outer `act` scope, they were canceled when we navigated to the new + // page. So there should be no additional requests in the outer + // `act` scope. + 'no-requests' ) }) diff --git a/test/e2e/app-dir/segment-cache/prefetch-scheduling/prefetch-scheduling.test.ts b/test/e2e/app-dir/segment-cache/prefetch-scheduling/prefetch-scheduling.test.ts index 932e7ba43a911..d917a003e3ea6 100644 --- a/test/e2e/app-dir/segment-cache/prefetch-scheduling/prefetch-scheduling.test.ts +++ b/test/e2e/app-dir/segment-cache/prefetch-scheduling/prefetch-scheduling.test.ts @@ -58,4 +58,95 @@ describe('segment cache prefetch scheduling', () => { ] ) }) + + it( + 'cancels a viewport-initiated prefetch if the link leaves the viewport ' + + 'before it finishes', + async () => { + let act: ReturnType + const browser = await next.browser('/cancellation', { + beforePageLoad(p: Playwright.Page) { + act = createRouterAct(p) + }, + }) + + const checkbox = await browser.elementByCss('input[type="checkbox"]') + + await act( + async () => { + // Reveal the links to start prefetching, but block the responses from + // reaching the client. Because the router limits the number of + // concurrent prefetches, not all the links will start prefetching — + // some of them will remain in the queue, waiting for additional + // network bandwidth. This test demonstrates that those prefetches + // will be canceled on viewport exit, too. + await act(async () => { + await checkbox.click() + }, 'block') + + // Before the prefetch finishes, click the checkbox again to hide + // the link. + await checkbox.click() + }, + // When the outer `act` scope finishes, the route tree prefetch will + // continue. Normally when the router is done prefetching the route + // tree, it will proceed to prefetching the segments. However, since + // the link is no longer visible, it should stop prefetching. + // + // Assert that no additional network requests are initiated in this + // outer scope. If this fails, it suggests that the prefetches were not + // canceled when the links left the viewport. + 'no-requests' + ) + } + ) + + it("reschedules a link's prefetch when it re-enters the viewport", async () => { + let act: ReturnType + const browser = await next.browser('/cancellation', { + beforePageLoad(p: Playwright.Page) { + act = createRouterAct(p) + }, + }) + + const checkbox = await browser.elementByCss('input[type="checkbox"]') + + await act( + async () => { + // Reveal the links to start prefetching, but block the responses from + // reaching the client. Because the router limits the number of + // concurrent prefetches, not all the links will start prefetching — + // some of them will remain in the queue, waiting for additional + // network bandwidth. This test demonstrates that those prefetches + // will be canceled on viewport exit, too. + await act(async () => { + await checkbox.click() + }, 'block') + + // Before the prefetch finishes, click the checkbox again to hide + // the link. + await checkbox.click() + }, + // When the outer `act` scope finishes, the route tree prefetch will + // continue. Normally when the router is done prefetching the route + // tree, it will proceed to prefetching the segments. However, since + // the link is no longer visible, it should stop prefetching. + // + // Assert that no additional network requests are initiated in this + // outer scope. If this fails, it suggests that the prefetches were not + // canceled when the links left the viewport. + 'no-requests' + ) + + // Now we'll reveal the links again to verify that the prefetch tasks are + // rescheduled, after having been canceled. + await act( + async () => { + await checkbox.click() + }, + // Don't need to assert on all the prefetch responses. I picked an + // arbitrary one. + { includes: 'Content of page 5' } + ) + }) }) From 39c7aded0769fbf3d4a2aedda51f4cba5893d8b5 Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Tue, 14 Jan 2025 12:33:45 -0500 Subject: [PATCH 50/65] [Segment Cache] Prioritize hovered links (#74672) This adds a new internal priority level to the prefetch queue for links that are hovered or touched. The idea is that if a user hovers over a link, they're much more likely to click on it. The elevated priority is added on mouseenter/touchstart. It is _not_ removed on mouseleave/touchend, because even though the user left the link without navigating to it, the link is still more likely to be navigated to than a link that was never hovered at all. Because the prefetch queue is last-in-first-out, the highest priority link is whichever link was most recently hovered. --- packages/next/src/client/app-dir/link.tsx | 22 +++++-- .../components/segment-cache/prefetch.ts | 9 ++- .../components/segment-cache/scheduler.ts | 34 ++++++++--- .../prefetch-scheduling.test.ts | 60 ++++++++++++++++--- 4 files changed, 103 insertions(+), 22 deletions(-) diff --git a/packages/next/src/client/app-dir/link.tsx b/packages/next/src/client/app-dir/link.tsx index 183ca919dba17..adf90964deb75 100644 --- a/packages/next/src/client/app-dir/link.tsx +++ b/packages/next/src/client/app-dir/link.tsx @@ -17,6 +17,7 @@ import { schedulePrefetchTask as scheduleSegmentPrefetchTask, cancelPrefetchTask, bumpPrefetchTask, + PrefetchPriority, } from '../components/segment-cache/scheduler' import { getCurrentAppRouterState } from '../../shared/lib/router/action-queue' import { createCacheKey } from '../components/segment-cache/cache-key' @@ -125,6 +126,7 @@ type LinkInstance = { prefetchHref: string isVisible: boolean + wasHoveredOrTouched: boolean // The most recently initiated prefetch task. It may or may not have // already completed. The same prefetch task object can be reused across @@ -181,6 +183,7 @@ function mountLinkInstance( router, kind, isVisible: false, + wasHoveredOrTouched: false, prefetchTask: null, } const existingInstance = links.get(element) @@ -247,6 +250,7 @@ function onNavigationIntent(element: HTMLAnchorElement | SVGAElement) { } // Prefetch the link on hover/touchstart. if (instance !== undefined) { + instance.wasHoveredOrTouched = true rescheduleLinkPrefetch(instance) } } @@ -274,10 +278,15 @@ function rescheduleLinkPrefetch(instance: LinkInstance) { return } - // In the Segment Cache implementation, we increase the relative priority of - // links whenever they re-enter the viewport, as if they were being scheduled - // for the first time. - // TODO: Prioritize links that are hovered. + // In the Segment Cache implementation, we assign a higher priority level to + // links that were at one point hovered or touched. Since the queue is last- + // in-first-out, the highest priority Link is whichever one was hovered last. + // + // We also increase the relative priority of links whenever they re-enter the + // viewport, as if they were being scheduled for the first time. + const priority = instance.wasHoveredOrTouched + ? PrefetchPriority.Intent + : PrefetchPriority.Default if (existingPrefetchTask === null) { // Initiate a prefetch task. const appRouterState = getCurrentAppRouterState() @@ -288,13 +297,14 @@ function rescheduleLinkPrefetch(instance: LinkInstance) { instance.prefetchTask = scheduleSegmentPrefetchTask( cacheKey, treeAtTimeOfPrefetch, - instance.kind === PrefetchKind.FULL + instance.kind === PrefetchKind.FULL, + priority ) } } else { // We already have an old task object that we can reschedule. This is // effectively the same as canceling the old task and creating a new one. - bumpPrefetchTask(existingPrefetchTask) + bumpPrefetchTask(existingPrefetchTask, priority) } } diff --git a/packages/next/src/client/components/segment-cache/prefetch.ts b/packages/next/src/client/components/segment-cache/prefetch.ts index 7f7fa0c2607e3..00d1bd7ca33cf 100644 --- a/packages/next/src/client/components/segment-cache/prefetch.ts +++ b/packages/next/src/client/components/segment-cache/prefetch.ts @@ -1,7 +1,7 @@ import type { FlightRouterState } from '../../../server/app-render/types' import { createPrefetchURL } from '../../components/app-router' import { createCacheKey } from './cache-key' -import { schedulePrefetchTask } from './scheduler' +import { schedulePrefetchTask, PrefetchPriority } from './scheduler' /** * Entrypoint for prefetching a URL into the Segment Cache. @@ -26,5 +26,10 @@ export function prefetch( return } const cacheKey = createCacheKey(url.href, nextUrl) - schedulePrefetchTask(cacheKey, treeAtTimeOfPrefetch, includeDynamicData) + schedulePrefetchTask( + cacheKey, + treeAtTimeOfPrefetch, + includeDynamicData, + PrefetchPriority.Default + ) } diff --git a/packages/next/src/client/components/segment-cache/scheduler.ts b/packages/next/src/client/components/segment-cache/scheduler.ts index e784b60965155..3c3ea868c6e83 100644 --- a/packages/next/src/client/components/segment-cache/scheduler.ts +++ b/packages/next/src/client/components/segment-cache/scheduler.ts @@ -131,8 +131,21 @@ const enum PrefetchTaskExitStatus { /** * The priority of the prefetch task. Higher numbers are higher priority. */ -const enum PrefetchPriority { +export const enum PrefetchPriority { + /** + * Assigned to any visible link that was hovered/touched at some point. This + * is not removed on mouse exit, because a link that was momentarily + * hovered is more likely to to be interacted with than one that was not. + */ + Intent = 2, + /** + * The default priority for prefetch tasks. + */ Default = 1, + /** + * Assigned to tasks when they spawn non-blocking background work, like + * revalidating a partially cached entry to see if more data is available. + */ Background = 0, } @@ -169,13 +182,14 @@ let didScheduleMicrotask = false export function schedulePrefetchTask( key: RouteCacheKey, treeAtTimeOfPrefetch: FlightRouterState, - includeDynamicData: boolean + includeDynamicData: boolean, + priority: PrefetchPriority ): PrefetchTask { // Spawn a new prefetch task const task: PrefetchTask = { key, treeAtTimeOfPrefetch, - priority: PrefetchPriority.Default, + priority, hasBackgroundWork: false, includeDynamicData, sortId: sortIdCounter++, @@ -206,19 +220,25 @@ export function cancelPrefetchTask(task: PrefetchTask): void { heapDelete(taskHeap, task) } -export function bumpPrefetchTask(task: PrefetchTask): void { +export function bumpPrefetchTask( + task: PrefetchTask, + priority: PrefetchPriority +): void { // Bump the prefetch task to the top of the queue, as if it were a fresh // task. This is essentially the same as canceling the task and scheduling // a new one, except it reuses the original object. // - // The primary use case is to increase the relative priority of a Link- - // initated prefetch on hover. + // The primary use case is to increase the priority of a Link-initated + // prefetch on hover. // Un-cancel the task, in case it was previously canceled. task.isCanceled = false - // Assign a new sort ID. Higher sort IDs are higher priority. + // Assign a new sort ID to move it ahead of all other tasks at the same + // priority level. (Higher sort IDs are processed first.) task.sortId = sortIdCounter++ + task.priority = priority + if (task._heapIndex !== -1) { // The task is already in the queue. heapResift(taskHeap, task) diff --git a/test/e2e/app-dir/segment-cache/prefetch-scheduling/prefetch-scheduling.test.ts b/test/e2e/app-dir/segment-cache/prefetch-scheduling/prefetch-scheduling.test.ts index d917a003e3ea6..7fbf4dfa7698d 100644 --- a/test/e2e/app-dir/segment-cache/prefetch-scheduling/prefetch-scheduling.test.ts +++ b/test/e2e/app-dir/segment-cache/prefetch-scheduling/prefetch-scheduling.test.ts @@ -13,13 +13,6 @@ describe('segment cache prefetch scheduling', () => { } it('increases the priority of a viewport-initiated prefetch on hover', async () => { - // TODO: This works because we bump the prefetch task to the front of the - // queue on mouseenter. But there's a flaw: if another link enters the - // viewport while the first link is still being hovered, the second link - // will go ahead of it in the queue. In other words, we currently don't - // treat mouseenter as a higher priority signal than "viewport enter". To - // fix this, we need distinct priority levels for hover and viewport; the - // last-in-first-out strategy is not sufficient for the desired behavior. let act: ReturnType const browser = await next.browser('/cancellation', { beforePageLoad(p: Playwright.Page) { @@ -59,6 +52,59 @@ describe('segment cache prefetch scheduling', () => { ) }) + it( + 'even on mouseexit, any link that was previously hovered is prioritized ' + + 'over links that were never hovered at all', + async () => { + let act: ReturnType + const browser = await next.browser('/cancellation', { + beforePageLoad(p: Playwright.Page) { + act = createRouterAct(p) + }, + }) + + const checkbox = await browser.elementByCss('input[type="checkbox"]') + await act( + async () => { + // Reveal the links to start prefetching, but block the responses from + // reaching the client. This will initiate prefetches for the route + // trees, but it won't start prefetching any segment data yet until the + // trees have loaded. + await act(async () => { + await checkbox.click() + }, 'block') + + // Hover over a link to increase its relative priority. + const link2 = await browser.elementByCss('a[href="/cancellation/2"]') + await link2.hover() + + // Hover over a different link to increase its relative priority. + const link5 = await browser.elementByCss('a[href="/cancellation/5"]') + await link5.hover() + + // Click on the "Show More Links" button to reveal additional links. + // Even though these links are newer than the ones we hovered over, + // the hovered links should be prefetched first. + const showMoreLinksButton = + await browser.elementById('show-more-links') + await showMoreLinksButton.click() + }, + // Assert that the segment data is prefetched in the expected order. + [ + // The last link we hovered over should be the first to prefetch. + { includes: 'Content of page 5' }, + // The second-to-last link we hovered over should come next. + { includes: 'Content of page 2' }, + // Then assert on one of the links that were revealed when we click + // the "Show More Links" button + { includes: 'Content of page 10' }, + // Then assert on one of the other links that were revealed originally + { includes: 'Content of page 4' }, + ] + ) + } + ) + it( 'cancels a viewport-initiated prefetch if the link leaves the viewport ' + 'before it finishes', From 019afc323b941bcf535379724dfbd4f4cc5f0820 Mon Sep 17 00:00:00 2001 From: Jude Gao Date: Tue, 14 Jan 2025 13:22:23 -0500 Subject: [PATCH 51/65] Refine NextLogo Accessibility and Styling (#74869) This PR addresses the following issues and improvements: 1. Apply a style reset to Storybook for consistency. 2. Update NextLogo element from div to button to improve accessibility. 3. Add a press effect to shrink NextLogo for better interactivity. 4. Ensure the pointer cursor is consistent across the entire NextLogo area. 5. Add a box shadow to NextLogo for improved visual depth. 6. Optimize animation by refining speed and sequence. 7. Replace hardcoded colors with CSS variables to enable dark mode support. 8. Fix overflow issues with effects. 9. Resolve black background overflow problem. 10. Enhance SVG anti-aliasing for a cleaner appearance. 11. Center the logo by moving it to the right by 1 pixel. This PR serves as a fast-follow to https://github.com/vercel/next.js/pull/74833 --- .../internal/next-logo.stories.tsx | 12 +- .../internal/next-logo.tsx | 187 +++++++++--------- .../internal/styles/CssReset.tsx | 13 ++ 3 files changed, 121 insertions(+), 91 deletions(-) diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/next-logo.stories.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/next-logo.stories.tsx index 55f4c3881c397..5fda7e623a357 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/next-logo.stories.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/next-logo.stories.tsx @@ -1,5 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react' import { NextLogo } from './next-logo' +import { withShadowPortal } from '../../../../storybook/with-shadow-portal' const meta: Meta = { component: NextLogo, @@ -7,8 +8,9 @@ const meta: Meta = { layout: 'centered', }, args: { - onClick: () => alert('Clicked!'), + onClick: () => console.log('Clicked!'), }, + decorators: [withShadowPortal], } export default meta @@ -69,3 +71,11 @@ export const Rendering: Story = { isDevRendering: true, }, } + +export const RenderingWithError: Story = { + args: { + issueCount: 1, + isDevBuilding: false, + isDevRendering: true, + }, +} diff --git a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/next-logo.tsx b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/next-logo.tsx index 2953d5158ef46..31357dd8b0b74 100644 --- a/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/next-logo.tsx +++ b/packages/next/src/client/components/react-dev-overlay/_experimental/internal/components/Errors/dev-tools-indicator/internal/next-logo.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react' import { noop as css } from '../../../../../../internal/helpers/noop-template' -interface Props extends React.ComponentProps<'svg'> { +interface Props extends React.ComponentProps<'button'> { issueCount: number onClick: () => void isDevBuilding: boolean @@ -16,6 +16,7 @@ export const NextLogo = ({ ...props }: Props) => { const [isLoading, setIsLoading] = useState(false) + const [isPressed, setIsPressed] = useState(false) // Only shows the loading state after a 200ms delay when building or rendering, // to avoid flashing the loading state for quick updates @@ -31,47 +32,71 @@ export const NextLogo = ({ }, [isDevBuilding, isDevRendering]) return ( -
    +