@tanstack/redact 0.0.21 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/attributes.js +2 -1
- package/dist/core/attributes.js.map +2 -2
- package/dist/core/browser.d.ts +9 -0
- package/dist/core/browser.js +35 -0
- package/dist/core/browser.js.map +7 -0
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +3 -3
- package/dist/core/internal.d.ts +31 -8
- package/dist/core/internal.js +3 -1
- package/dist/core/internal.js.map +2 -2
- package/dist/core/resource-hints.d.ts +7 -0
- package/dist/core/resource-hints.js +19 -0
- package/dist/core/resource-hints.js.map +7 -0
- package/dist/core/types.js +1 -1
- package/dist/dom/_all.d.ts +11 -16
- package/dist/dom/_all.js +9 -20
- package/dist/dom/_all.js.map +2 -2
- package/dist/dom/client.d.ts +4 -4
- package/dist/dom/client.js +4 -4
- package/dist/dom/commit.d.ts +23 -0
- package/dist/dom/commit.js +191 -0
- package/dist/dom/commit.js.map +7 -0
- package/dist/dom/dispatcher.d.ts +4 -22
- package/dist/dom/dispatcher.js +184 -126
- package/dist/dom/dispatcher.js.map +3 -3
- package/dist/dom/dom.d.ts +2 -0
- package/dist/dom/dom.js +72 -52
- package/dist/dom/dom.js.map +2 -2
- package/dist/dom/error-info.d.ts +2 -0
- package/dist/dom/error-info.js +16 -0
- package/dist/dom/error-info.js.map +7 -0
- package/dist/dom/event-replay.js +1 -1
- package/dist/dom/features/activity/full.d.ts +1 -0
- package/dist/dom/features/activity/full.js +162 -0
- package/dist/dom/features/activity/full.js.map +7 -0
- package/dist/dom/features/activity/index.d.ts +1 -0
- package/dist/dom/features/activity/index.js +3 -0
- package/dist/dom/features/activity/index.js.map +7 -0
- package/dist/dom/features/activity/stub.d.ts +1 -0
- package/dist/dom/features/activity/stub.js +12 -0
- package/dist/dom/features/activity/stub.js.map +7 -0
- package/dist/dom/features/class/full.js +87 -27
- package/dist/dom/features/class/full.js.map +2 -2
- package/dist/dom/features/class/index.d.ts +1 -1
- package/dist/dom/features/class/index.js +2 -2
- package/dist/dom/features/class/stub.js +3 -3
- package/dist/dom/features/context/full.d.ts +4 -1
- package/dist/dom/features/context/full.js +69 -9
- package/dist/dom/features/context/full.js.map +2 -2
- package/dist/dom/features/context/index.d.ts +1 -1
- package/dist/dom/features/context/index.js +2 -2
- package/dist/dom/features/context/stub.d.ts +4 -1
- package/dist/dom/features/context/stub.js +15 -4
- package/dist/dom/features/context/stub.js.map +2 -2
- package/dist/dom/features/forward-ref/full.js +12 -21
- package/dist/dom/features/forward-ref/full.js.map +2 -2
- package/dist/dom/features/forward-ref/index.d.ts +1 -1
- package/dist/dom/features/forward-ref/index.js +2 -2
- package/dist/dom/features/forward-ref/stub.js +4 -4
- package/dist/dom/features/fragment-refs/index.d.ts +1 -0
- package/dist/dom/features/fragment-refs/index.js +8 -0
- package/dist/dom/features/fragment-refs/index.js.map +7 -0
- package/dist/dom/features/fragment-refs/stub.d.ts +3 -0
- package/dist/dom/features/fragment-refs/stub.js +14 -0
- package/dist/dom/features/fragment-refs/stub.js.map +7 -0
- package/dist/dom/features/hydration/full.d.ts +11 -6
- package/dist/dom/features/hydration/full.js +76 -77
- package/dist/dom/features/hydration/full.js.map +2 -2
- package/dist/dom/features/hydration/index.d.ts +1 -1
- package/dist/dom/features/hydration/index.js +2 -2
- package/dist/dom/features/hydration/stub.d.ts +7 -2
- package/dist/dom/features/hydration/stub.js +1 -1
- package/dist/dom/features/hydration/stub.js.map +1 -1
- package/dist/dom/features/index.d.ts +8 -7
- package/dist/dom/features/index.js +9 -8
- package/dist/dom/features/index.js.map +2 -2
- package/dist/dom/features/lazy/full.js +4 -4
- package/dist/dom/features/lazy/index.d.ts +1 -1
- package/dist/dom/features/lazy/index.js +2 -2
- package/dist/dom/features/lazy/stub.js +4 -4
- package/dist/dom/features/memo/full.js +8 -6
- package/dist/dom/features/memo/full.js.map +2 -2
- package/dist/dom/features/memo/index.d.ts +1 -1
- package/dist/dom/features/memo/index.js +2 -2
- package/dist/dom/features/memo/stub.js +4 -4
- package/dist/dom/features/portal/full.js +4 -4
- package/dist/dom/features/portal/index.d.ts +1 -1
- package/dist/dom/features/portal/index.js +2 -2
- package/dist/dom/features/portal/stub.js +4 -4
- package/dist/dom/features/suspense/full.js +197 -52
- package/dist/dom/features/suspense/full.js.map +2 -2
- package/dist/dom/features/suspense/index.d.ts +1 -1
- package/dist/dom/features/suspense/index.js +2 -2
- package/dist/dom/features/suspense/stub.js +4 -4
- package/dist/dom/features/view-transition/full.d.ts +6 -0
- package/dist/dom/features/view-transition/full.js +280 -0
- package/dist/dom/features/view-transition/full.js.map +7 -0
- package/dist/dom/features/view-transition/index.d.ts +1 -0
- package/dist/dom/features/view-transition/index.js +3 -0
- package/dist/dom/features/view-transition/index.js.map +7 -0
- package/dist/dom/features/view-transition/resources.d.ts +11 -0
- package/dist/dom/features/view-transition/resources.js +108 -0
- package/dist/dom/features/view-transition/resources.js.map +7 -0
- package/dist/dom/features/view-transition/stub.d.ts +6 -0
- package/dist/dom/features/view-transition/stub.js +22 -0
- package/dist/dom/features/view-transition/stub.js.map +7 -0
- package/dist/dom/features/view-transition/visual.d.ts +14 -0
- package/dist/dom/features/view-transition/visual.js +356 -0
- package/dist/dom/features/view-transition/visual.js.map +7 -0
- package/dist/dom/fragment-instance.d.ts +40 -0
- package/dist/dom/fragment-instance.js +324 -0
- package/dist/dom/fragment-instance.js.map +7 -0
- package/dist/dom/index.d.ts +11 -11
- package/dist/dom/index.js +11 -18
- package/dist/dom/index.js.map +3 -3
- package/dist/dom/portal.d.ts +2 -2
- package/dist/dom/portal.js +2 -2
- package/dist/dom/portal.js.map +1 -1
- package/dist/dom/reconcile.d.ts +32 -3
- package/dist/dom/reconcile.js +689 -221
- package/dist/dom/reconcile.js.map +2 -2
- package/dist/dom/resource-hints.d.ts +6 -0
- package/dist/dom/resource-hints.js +115 -0
- package/dist/dom/resource-hints.js.map +7 -0
- package/dist/dom/resource-store.d.ts +13 -0
- package/dist/dom/resource-store.js +43 -0
- package/dist/dom/resource-store.js.map +7 -0
- package/dist/dom/resources.d.ts +1 -0
- package/dist/dom/resources.js +44 -0
- package/dist/dom/resources.js.map +7 -0
- package/dist/dom/retained-effects.d.ts +6 -0
- package/dist/dom/retained-effects.js +49 -0
- package/dist/dom/retained-effects.js.map +7 -0
- package/dist/dom/root-internal.d.ts +4 -4
- package/dist/dom/root-internal.js +2 -2
- package/dist/dom/root-internal.js.map +2 -2
- package/dist/dom/root.d.ts +5 -5
- package/dist/dom/root.js +11 -11
- package/dist/dom/root.js.map +2 -2
- package/dist/dom/test-utils.js +1 -1
- package/dist/react/activity.d.ts +7 -0
- package/dist/react/activity.js +8 -0
- package/dist/react/activity.js.map +7 -0
- package/dist/react/children.d.ts +1 -1
- package/dist/react/children.js +3 -3
- package/dist/react/children.js.map +1 -1
- package/dist/react/class.d.ts +1 -1
- package/dist/react/class.js +3 -3
- package/dist/react/class.js.map +1 -1
- package/dist/react/compiler-runtime.js +2 -2
- package/dist/react/context.d.ts +1 -1
- package/dist/react/context.js +3 -3
- package/dist/react/context.js.map +1 -1
- package/dist/react/element.d.ts +6 -3
- package/dist/react/element.js +2 -2
- package/dist/react/element.js.map +2 -2
- package/dist/react/hooks.d.ts +26 -7
- package/dist/react/hooks.js +13 -3
- package/dist/react/hooks.js.map +2 -2
- package/dist/react/index.d.ts +39 -24
- package/dist/react/index.js +39 -19
- package/dist/react/index.js.map +3 -3
- package/dist/react/jsx-runtime.d.ts +2 -2
- package/dist/react/jsx-runtime.js +3 -3
- package/dist/react/memo.d.ts +1 -1
- package/dist/react/memo.js +1 -1
- package/dist/react/portal.js +1 -1
- package/dist/react/shared-internals.d.ts +15 -5
- package/dist/react/shared-internals.js +2 -3
- package/dist/react/shared-internals.js.map +2 -2
- package/dist/react/suspense.js +1 -1
- package/dist/react/view-transition.d.ts +32 -0
- package/dist/react/view-transition.js +13 -0
- package/dist/react/view-transition.js.map +7 -0
- package/dist/scheduler/index.js +1 -1
- package/dist/server/bootstrap-script.d.ts +1 -23
- package/dist/server/bootstrap-script.js +7 -6
- package/dist/server/bootstrap-script.js.map +2 -2
- package/dist/server/dispatcher.d.ts +28 -6
- package/dist/server/dispatcher.js +33 -15
- package/dist/server/dispatcher.js.map +2 -2
- package/dist/server/escape.js +16 -15
- package/dist/server/escape.js.map +2 -2
- package/dist/server/index.d.ts +6 -6
- package/dist/server/index.js +7 -7
- package/dist/server/renderToString.d.ts +1 -1
- package/dist/server/renderToString.js +12 -8
- package/dist/server/renderToString.js.map +2 -2
- package/dist/server/resource-hints.d.ts +22 -0
- package/dist/server/resource-hints.js +148 -0
- package/dist/server/resource-hints.js.map +7 -0
- package/dist/server/stream.d.ts +15 -2
- package/dist/server/stream.js +155 -63
- package/dist/server/stream.js.map +2 -2
- package/dist/server/walk.d.ts +15 -2
- package/dist/server/walk.js +143 -96
- package/dist/server/walk.js.map +2 -2
- package/dist/vite/index.d.ts +6 -0
- package/dist/vite/index.js +22 -6
- package/dist/vite/index.js.map +2 -2
- package/package.json +1 -1
- package/src/core/attributes.ts +1 -0
- package/src/core/browser.ts +33 -0
- package/src/core/internal.ts +24 -6
- package/src/core/resource-hints.ts +36 -0
- package/src/dom/_all.ts +1 -7
- package/src/dom/commit.ts +186 -0
- package/src/dom/dispatcher.ts +190 -134
- package/src/dom/dom.ts +70 -54
- package/src/dom/error-info.ts +15 -0
- package/src/dom/features/activity/full.ts +166 -0
- package/src/dom/features/activity/index.ts +1 -0
- package/src/dom/features/activity/stub.ts +14 -0
- package/src/dom/features/class/full.ts +72 -28
- package/src/dom/features/context/full.ts +66 -4
- package/src/dom/features/context/stub.ts +6 -0
- package/src/dom/features/forward-ref/full.ts +9 -19
- package/src/dom/features/fragment-refs/index.ts +1 -0
- package/src/dom/features/fragment-refs/stub.ts +3 -0
- package/src/dom/features/hydration/full.ts +84 -85
- package/src/dom/features/hydration/stub.ts +1 -1
- package/src/dom/features/index.ts +1 -0
- package/src/dom/features/memo/full.ts +4 -3
- package/src/dom/features/suspense/full.ts +192 -55
- package/src/dom/features/view-transition/full.ts +288 -0
- package/src/dom/features/view-transition/index.ts +1 -0
- package/src/dom/features/view-transition/resources.ts +107 -0
- package/src/dom/features/view-transition/stub.ts +7 -0
- package/src/dom/features/view-transition/visual.ts +406 -0
- package/src/dom/fragment-instance.ts +337 -0
- package/src/dom/index.ts +6 -7
- package/src/dom/portal.ts +1 -1
- package/src/dom/reconcile.ts +695 -242
- package/src/dom/resource-hints.ts +115 -0
- package/src/dom/resource-store.ts +52 -0
- package/src/dom/resources.ts +39 -0
- package/src/dom/retained-effects.ts +38 -0
- package/src/dom/root-internal.ts +4 -4
- package/src/dom/root.ts +12 -14
- package/src/react/activity.ts +10 -0
- package/src/react/element.ts +6 -2
- package/src/react/hooks.ts +12 -3
- package/src/react/index.ts +18 -0
- package/src/react/shared-internals.ts +3 -3
- package/src/react/view-transition.ts +41 -0
- package/src/server/bootstrap-script.ts +36 -5
- package/src/server/dispatcher.ts +35 -13
- package/src/server/escape.ts +15 -12
- package/src/server/renderToString.ts +7 -5
- package/src/server/resource-hints.ts +165 -0
- package/src/server/stream.ts +154 -62
- package/src/server/walk.ts +72 -11
- package/src/vite/index.ts +30 -13
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/dom/features/suspense/full.ts"],
|
|
4
|
-
"sourcesContent": ["import { FiberTag, createFiber, type Fiber } from '../../../core'\nimport { REACT_SUSPENSE_TYPE } from '../../../react'\nimport {\n registerRenderer,\n registerTypeMatcher,\n installCapability,\n reconcileChildren,\n childrenToArray,\n renderFiber,\n scheduleUpdate,\n unmountAllChildren,\n unmountFiber,\n findRoot,\n runEffects,\n getCurrentRoot,\n withCurrentRoot,\n discardPendingWork,\n} from '../../reconcile'\nimport {\n HydrationCursor,\n setHydrationCursor,\n clearHydrationCursor,\n advanceCursorPast,\n tryConsumeBoundary,\n isHydrationBailout,\n} from '../hydration'\n\nlet suspendHandler: ((t: Promise<any>) => void) | null = null\n\nfunction realHandleSuspended(fiber: Fiber, thenable: Promise<any>): void {\n if (suspendHandler) return suspendHandler(thenable)\n // Fallback: schedule re-render when promise settles\n thenable.then(\n () => scheduleUpdate(fiber),\n () => scheduleUpdate(fiber),\n )\n}\n\n// React's Suspense semantics: when a re-render of an already-committed\n// boundary suspends, the previously-committed children are kept in the DOM\n// (hidden) so their scroll position, focus, selection, native form state,\n// and component state survive across the suspension. The fallback is mounted\n// alongside the hidden primary until the pending promise resolves.\n//\n// We track the hidden subtree DOM in `state.d` (root host nodes +\n// their original `display` so we can restore it) and the fallback as a\n// detached Fragment fiber in `state.f` (deliberately kept OUT of\n// `fiber.child` so reconciles against `props.children` don't trip on it).\n// First-mount suspensions have no committed DOM worth preserving, so they\n// keep the original unmount-and-render-fallback behavior.\ninterface SuspenseState {\n p?: Promise<any> | null\n b?: Comment\n e?: Comment\n r?: any\n a?: boolean\n // Re-suspend preservation:\n d?: Array<[HTMLElement, string]> | null\n f?: Fiber | null\n}\n\nfunction renderSuspense(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const props = fiber.pp ?? {}\n const state = (fiber.ms ??= {}) as SuspenseState\n\n // Streaming hydration: if the next DOM node is a server-emitted boundary\n // marker, route through the boundary-aware hydration path.\n const root = getCurrentRoot()\n if (root?.h && !state.b) {\n const boundary = tryConsumeBoundary(fiber.parent!)\n if (boundary) {\n hydrateSuspenseBoundary(fiber, props, boundary, domParent, anchor)\n return\n }\n }\n\n // A descendant Lazy deferred its hydration (see renderLazy's hydrating\n // branch). Its SSR-rendered content is still in the DOM and cursor-bound\n // via the Lazy fiber \u2014 we just haven't swapped it into a fiber subtree\n // yet. Until the Lazy's resume fires, skip our own tryChildren pass so\n // an unrelated re-render can't accidentally flip us into the suspended\n // path and mount a duplicate fallback on top of the SSR content.\n if (state.a) {\n fiber.mp = props\n return\n }\n\n // We were already in the suspended-with-preserved-primary state. Don't\n // re-attempt primary children (would re-throw and churn the tree). Just\n // refresh the fallback in case its JSX changed, and wait for the pending\n // promise to fire scheduleUpdate.\n if (state.p) {\n if (state.f) {\n state.f.pp = { children: props.fallback }\n renderFiber(state.f, domParent, anchor)\n } else {\n // Initial-mount suspended path: no committed primary to preserve.\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n }\n fiber.mp = props\n return\n }\n\n // Snapshot whether we have an existing committed primary tree before\n // attempting the new render. If the new attempt suspends and we did have a\n // committed primary, we keep it (hidden) rather than destroying it.\n const hadCommittedPrimary = fiber.mp && fiber.child\n\n const prevHandler = suspendHandler\n let pendingThenable: any\n suspendHandler = (thenable) => {\n pendingThenable = thenable\n }\n try {\n reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor)\n } finally {\n suspendHandler = prevHandler\n }\n\n if (pendingThenable) {\n state.p = pendingThenable\n const onSettle = () => {\n state.p = null\n scheduleUpdate(fiber)\n }\n pendingThenable.then(onSettle, onSettle)\n\n if (hadCommittedPrimary) {\n // Hide the primary subtree's root host doms so the fallback is the only\n // thing visible, but the underlying nodes (and their scroll/state/focus)\n // survive. Save original `display` for the resume path.\n const hidden: Array<[HTMLElement, string]> = []\n let c: Fiber | null = hadCommittedPrimary\n while (c) {\n hideRootHostDoms(c, hidden)\n c = c.sibling\n }\n state.d = hidden\n\n // Mount fallback in a detached Fragment fiber. Kept off `fiber.child`\n // so reconciles of primary don't see it as a stale match candidate.\n if (!state.f) {\n state.f = createFiber(FiberTag.Fragment, null, null)\n state.f.parent = fiber\n }\n state.f.pp = { children: props.fallback }\n renderFiber(state.f, domParent, anchor)\n } else {\n // First-mount suspension \u2014 nothing to preserve.\n unmountAllChildren(fiber)\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n }\n } else {\n // Render succeeded. Clean up any preserved-suspend state from a prior\n // suspension cycle: unhide primary, unmount the orphan fallback fiber.\n if (state.d) {\n for (const [el, origDisplay] of state.d) {\n el.style.display = origDisplay\n }\n state.d = null\n }\n if (state.f) {\n unmountFiber(state.f)\n state.f = null\n }\n }\n fiber.mp = props\n}\n\n// Walk a fiber subtree collecting host/text DOM nodes that sit at the root\n// of the subtree (do not descend through their children \u2014 display:none on\n// the root hides the whole element). Used by the hide-on-suspend path.\nfunction hideRootHostDoms(fiber: Fiber, out: Array<[HTMLElement, string]>): void {\n if (fiber.tag === FiberTag.Host) {\n const el = fiber.dom as HTMLElement\n out.push([el, el.style.display])\n el.style.display = 'none'\n return\n }\n if (fiber.tag === FiberTag.Portal) return\n let c = fiber.child\n while (c) {\n hideRootHostDoms(c, out)\n c = c.sibling\n }\n}\n\nfunction hydrateSuspenseBoundary(\n fiber: Fiber,\n props: any,\n boundary: [0 | 1, number, Comment, Comment],\n domParent: Node,\n anchor: Node | null,\n): void {\n const [pendingBoundary, id, startMark, endMark] = boundary\n // Record the boundary shape so we can re-hydrate on reveal.\n fiber.ms = {\n b: startMark,\n e: endMark,\n r: props.children,\n }\n\n if (!pendingBoundary) {\n // Real DOM is inline between startMark and endMark. Hydrate into it.\n const parent = startMark.parentNode!\n try {\n setHydrationCursor(fiber, new HydrationCursor(parent, startMark.nextSibling, endMark))\n reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor)\n advanceCursorPast(fiber.parent!, endMark)\n } catch (e) {\n if (!isHydrationBailout(e)) {\n clearBoundaryRange(startMark, endMark)\n unmountAllChildren(fiber)\n throw e\n }\n recoverBoundaryHydration(fiber, props.children, parent, startMark, endMark)\n } finally {\n clearHydrationCursor(fiber)\n }\n fiber.mp = props\n return\n }\n\n // Pending: fallback DOM lives inside <div id=\"B:ID\">. Hydrate the fallback\n // React subtree against that div's children.\n const bDiv = document.getElementById(`B:${id}`)\n try {\n if (bDiv) {\n setHydrationCursor(fiber, new HydrationCursor(bDiv))\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n } else {\n // Couldn't find fallback container \u2014 render fresh (non-adopting)\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n }\n } catch (e) {\n if (!isHydrationBailout(e) || !bDiv) throw e\n recoverFallbackHydration(fiber, props.fallback, bDiv)\n } finally {\n clearHydrationCursor(fiber)\n }\n advanceCursorPast(fiber.parent!, endMark)\n\n // Register for server-streamed reveal (HTML chunks + $RC calls).\n ;(globalThis as any).$RH?.(id, () => rehydrateBoundary(fiber))\n // If the inline runtime isn't present, nothing external will mark us dy.\n\n fiber.mp = props\n}\n\nfunction recoverBoundaryHydration(\n fiber: Fiber,\n children: any,\n parent: Node,\n startMark: Comment,\n endMark: Comment,\n): void {\n const root = findRoot(fiber)!\n const prevHydrating = root.h\n discardPendingWork(root)\n clearBoundaryRange(startMark, endMark)\n unmountAllChildren(fiber)\n root.h = false\n try {\n reconcileChildren(fiber, childrenToArray(children), parent, endMark)\n advanceCursorPast(fiber.parent!, endMark)\n } catch (clientError) {\n clearBoundaryRange(startMark, endMark)\n unmountAllChildren(fiber)\n throw clientError\n } finally {\n root.h = prevHydrating\n }\n}\n\nfunction recoverFallbackHydration(fiber: Fiber, fallback: any, parent: HTMLElement): void {\n const root = findRoot(fiber)!\n const prevHydrating = root.h\n discardPendingWork(root)\n parent.textContent = ''\n unmountAllChildren(fiber)\n root.h = false\n try {\n reconcileChildren(fiber, childrenToArray(fallback), parent, null)\n } catch (clientError) {\n parent.textContent = ''\n unmountAllChildren(fiber)\n throw clientError\n } finally {\n root.h = prevHydrating\n }\n}\n\nfunction rehydrateBoundary(fiber: Fiber): void {\n const state = fiber.ms\n if (!state?.b || !state.e) return\n\n const root = findRoot(fiber)\n const parent = state.b.parentNode as Node\n if (!(root && parent)) return\n\n // Unmount existing fallback subtree. Its DOM has already been removed by $RC\n // (or at least its container); unmounting here cleans up fibers + fx.\n withCurrentRoot(root, () => {\n const prevHydrating = root.h\n try {\n unmountAllChildren(fiber)\n\n // Re-hydrate with real children against the now-real DOM range.\n root.h = true\n setHydrationCursor(fiber, new HydrationCursor(parent, state.b.nextSibling, state.e))\n reconcileChildren(fiber, childrenToArray(state.r), parent, null)\n } catch (e) {\n if (!isHydrationBailout(e)) {\n clearBoundaryRange(state.b, state.e)\n unmountAllChildren(fiber)\n throw e\n }\n\n recoverBoundaryHydration(fiber, state.r, parent, state.b, state.e)\n } finally {\n root.h = prevHydrating\n clearHydrationCursor(fiber)\n }\n runEffects(root)\n })\n}\n\nfunction clearBoundaryRange(startMark: Comment, endMark: Comment): void {\n let node = startMark.nextSibling\n while (node && node !== endMark) {\n const next = node.nextSibling\n node.parentNode?.removeChild(node)\n node = next\n }\n}\n\nregisterTypeMatcher((type) => (type === REACT_SUSPENSE_TYPE ? FiberTag.Suspense : null))\nregisterRenderer(FiberTag.Suspense, renderSuspense)\ninstallCapability('handleSuspended', realHandleSuspended)\n"],
|
|
5
|
-
"mappings": ";AAAA,SAAS,UAAU,mBAA+B;AAClD,SAAS,
|
|
4
|
+
"sourcesContent": ["import { FiberTag, createFiber, type Fiber } from '../../../core'\nimport { REACT_SUSPENSE_TYPE, ReactSharedInternals, startTransition } from '../../../react'\nimport {\n registerRenderer,\n registerTypeMatcher,\n installCapability,\n reconcileChildren,\n childrenToArray,\n renderFiber,\n scheduleUpdate,\n unmountAllChildren,\n unmountFiber,\n findRoot,\n runEffects,\n getCurrentRoot,\n withCurrentRoot,\n discardPendingWork,\n findSuspenseBoundary,\n RenderSuspenseCapture,\n activityIsDisconnected,\n isActivityHidden,\n attachRef,\n detachRef,\n enqueueEffect,\n flushFiberCommits,\n scheduleLifecycle,\n handleCommitError,\n} from '../../reconcile'\nimport { cleanupEffect } from '../../dispatcher'\nimport { retainedEffects, inSuspensePrimary, setLayoutDisconnected, walkRetained } from '../../retained-effects'\nimport {\n HydrationCursor,\n setHydrationCursor,\n clearHydrationCursor,\n advanceCursorPast,\n tryConsumeBoundary,\n isHydrationBailout,\n} from '../hydration'\nimport { hasContextChanged, renderContextConsumers } from '../context'\nimport { checkpointCommit, rewindCommit, queueMutation, onCommitFailure } from '../../commit'\n\nlet suspendHandler: ((t: Promise<any>) => void) | null = null\n\nfunction scheduleRetry(fiber: Fiber): void {\n const previous = ReactSharedInternals.T\n ReactSharedInternals.T = null\n try { startTransition(() => scheduleUpdate(fiber)) } finally { ReactSharedInternals.T = previous }\n}\n\nfunction realHandleSuspended(fiber: Fiber, thenable: Promise<any>): void {\n if (suspendHandler) return suspendHandler(thenable)\n const boundary = findSuspenseBoundary(fiber)\n if (boundary) throw new RenderSuspenseCapture(boundary)\n // Fallback: schedule re-render when promise settles\n thenable.then(\n () => scheduleRetry(fiber),\n () => scheduleRetry(fiber),\n )\n}\n\n// React's Suspense semantics: when a re-render of an already-committed\n// boundary suspends, the previously-committed children are kept in the DOM\n// (hidden) so their scroll position, focus, selection, native form state,\n// and component state survive across the suspension. The fallback is mounted\n// alongside the hidden primary until the pending promise resolves.\n//\n// We track the hidden subtree DOM in `state.d` (root host nodes +\n// their original `display` so we can restore it) and the fallback as a\n// detached Fragment fiber in `state.f` (deliberately kept OUT of\n// `fiber.child` so reconciles against `props.children` don't trip on it).\n// First-mount suspensions discard the failed primary but retain a separate\n// fallback fiber so unsuccessful retries preserve its state and DOM.\ninterface SuspenseState {\n p?: Promise<any> | null\n b?: Comment\n e?: Comment\n r?: any\n a?: boolean\n u?: boolean\n // Re-suspend preservation:\n d?: Array<[HTMLElement, string]> | null\n f?: Fiber | null\n}\n\nfunction renderSuspense(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const props = fiber.pp ?? {}\n let state = (fiber.ms ??= {}) as SuspenseState\n\n // Streaming hydration: if the next DOM node is a server-emitted boundary\n // marker, route through the boundary-aware hydration path.\n const root = getCurrentRoot()\n if (root) root.sp = true\n if (root?.h && !state.b) {\n const boundary = tryConsumeBoundary(fiber.parent!)\n if (boundary) {\n hydrateSuspenseBoundary(fiber, props, boundary, domParent, anchor)\n return\n }\n }\n\n // A descendant Lazy deferred its hydration (see renderLazy's hydrating\n // branch). Its SSR-rendered content is still in the DOM and cursor-bound\n // via the Lazy fiber \u2014 we just haven't swapped it into a fiber subtree\n // yet. Until the Lazy's resume fires, skip our own tryChildren pass so\n // an unrelated re-render can't accidentally flip us into the suspended\n // path and mount a duplicate fallback on top of the SSR content.\n if (state.a) {\n fiber.mp = props\n return\n }\n\n // New primary children or context can unblock a boundary before its old\n // promise settles. A fallback-only update can keep the pending primary.\n if (state.p && !state.u && props.children === fiber.mp?.children && !hasContextChanged(fiber, false)) {\n if (state.f) {\n renderFallback(state.f, props.fallback, domParent, anchor)\n } else {\n // Initial-mount suspended path: no committed primary to preserve.\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n }\n fiber.mp = props\n return\n }\n\n // Snapshot whether we have an existing committed primary tree before\n // attempting the new render. If the new attempt suspends and we did have a\n // committed primary, we keep it (hidden) rather than destroying it.\n const hadCommittedPrimary = fiber.mp && fiber.child\n state.u = false\n const checkpoint = checkpointCommit(fiber)\n\n const prevHandler = suspendHandler\n fiber.cx?.clear()\n let pendingThenable: any\n suspendHandler = (thenable) => {\n pendingThenable = thenable\n }\n try {\n reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor)\n } finally {\n suspendHandler = prevHandler\n }\n\n if (pendingThenable) {\n rewindCommit(checkpoint)\n state = (fiber.ms ??= {}) as SuspenseState\n const previousThenable = state.p\n state.p = pendingThenable\n const onSettle = () => {\n const current = fiber.ms as SuspenseState | null\n if (!current || current.p !== pendingThenable) return\n current.p = null\n scheduleRetry(fiber)\n }\n if (previousThenable !== pendingThenable) pendingThenable.then(onSettle, onSettle)\n\n // Rewind restored the committed tree, including its existing hidden state.\n // Only the first hide needs update-target, lifecycle and DOM work.\n if (hadCommittedPrimary && !state.d) {\n // Hide the primary subtree's root host doms so the fallback is the only\n // thing visible, but the underlying nodes (and their scroll/state/focus)\n // survive. Save original `display` for the resume path.\n const hidden: Array<[HTMLElement, string]> = []\n let c: Fiber | null = hadCommittedPrimary\n while (c) {\n setUpdateBoundary(c, fiber)\n walkRetained(c, disconnectLayout)\n c = c.sibling\n }\n c = hadCommittedPrimary\n while (c) {\n hideRootHostDoms(c, hidden)\n c = c.sibling\n }\n state.d = hidden\n\n } else if (!hadCommittedPrimary) {\n // First-mount suspension \u2014 nothing to preserve.\n unmountAllChildren(fiber, domParent)\n }\n // Keep fallback identity across unsuccessful retries of an initial mount.\n if (!state.f) {\n state.f = createFiber(FiberTag.Fragment, null, null)\n state.f.parent = fiber\n }\n renderFallback(state.f, props.fallback, domParent, anchor)\n } else {\n state.p = null\n fiber.cx?.clear()\n const wasHidden = !!state.d\n // Render succeeded. Clean up any preserved-suspend state from a prior\n // suspension cycle: unhide primary, unmount the orphan fallback fiber.\n if (state.d) {\n for (let child = fiber.child; child; child = child.sibling) setUpdateBoundary(child, fiber.su)\n const hidden = state.d\n queueMutation(() => {\n for (const [el, origDisplay] of hidden) el.style.display = origDisplay\n })\n state.d = null\n }\n if (state.f) {\n unmountFiber(state.f, domParent)\n state.f = null\n }\n if (wasHidden) for (let child = fiber.child; child; child = child.sibling) walkRetained(child, reconnectLayout, true)\n }\n fiber.mp = props\n}\n\nfunction renderFallback(fiber: Fiber, children: any, domParent: Node, anchor: Node | null): void {\n // Local updates remain independently queued, unless an outer hidden primary\n // owns them. Context must still cross an otherwise unchanged fallback.\n if (fiber.mp && fiber.mp.children === children && !fiber.su) renderContextConsumers(fiber)\n else {\n fiber.pp = { children }\n renderFiber(fiber, domParent, anchor)\n }\n}\n\nfunction disconnectLayout(fiber: Fiber): void {\n if (setLayoutDisconnected(fiber, true) || activityIsDisconnected(fiber)) return\n queueMutation(() => {\n for (const [hook, effect] of retainedEffects.get(fiber) ?? []) {\n if (effect.t === 1 && !effect.s) cleanupEffect(hook, fiber)\n }\n const cleanup = fiber.rc\n fiber.rc = null\n if (cleanup) {\n const index = fiber.cu?.indexOf(cleanup) ?? -1\n if (index >= 0) fiber.cu!.splice(index, 1)\n try { cleanup() } catch (error) { handleCommitError(fiber, error) }\n }\n detachRef(fiber.cr ?? fiber.ref, fiber)\n fiber.cr = null\n const instance = fiber.sn?._fiber === fiber ? fiber.sn : null\n if (instance?.componentWillUnmount) {\n const props = instance.props, state = instance.state, committed = fiber.ms?.c\n if (committed) { instance.props = committed.props; instance.state = committed.state }\n try { instance.componentWillUnmount() } catch (error) { handleCommitError(fiber, error) }\n finally { instance.props = props; instance.state = state }\n }\n })\n}\n\nfunction reconnectLayout(fiber: Fiber): void {\n if (!fiber.ld || isActivityHidden(fiber) || activityIsDisconnected(fiber)) return\n if (inSuspensePrimary(fiber)) return\n setLayoutDisconnected(fiber, false)\n const instance = fiber.sn?._fiber === fiber ? fiber.sn : null\n if (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Resource) attachRef(fiber, fiber.dom)\n else if (instance || fiber.tag === FiberTag.Fragment) attachRef(fiber, fiber.sn)\n for (const effect of retainedEffects.get(fiber)?.values() ?? []) {\n if (effect.t === 1 && !effect.s) enqueueEffect(fiber, effect)\n }\n if (instance?.componentDidMount) scheduleLifecycle(fiber, () => instance.componentDidMount())\n flushFiberCommits(fiber)\n}\n\nfunction setUpdateBoundary(fiber: Fiber, boundary: Fiber | null | undefined): void {\n fiber.su = boundary ?? null\n const primary = fiber.tag === FiberTag.Suspense && fiber.ms?.p ? fiber : boundary\n for (let child = fiber.child; child; child = child.sibling) setUpdateBoundary(child, primary)\n if (fiber.tag === FiberTag.Suspense && fiber.ms?.f) setUpdateBoundary(fiber.ms.f, boundary)\n}\n\n// Walk a fiber subtree collecting host/text DOM nodes that sit at the root\n// of the subtree (do not descend through their children \u2014 display:none on\n// the root hides the whole element). Used by the hide-on-suspend path.\nfunction hideRootHostDoms(fiber: Fiber, out: Array<[HTMLElement, string]>): void {\n if (fiber.tag === FiberTag.Host) {\n const el = fiber.dom as HTMLElement\n const existing = out.find(([node]) => node === el)\n const entry: [HTMLElement, string] = existing ?? [el, el.style.display]\n if (!existing) out.push(entry)\n const display = fiber.pp?.style?.display\n queueMutation(() => {\n // Earlier Activity or host updates in this commit can change display.\n if (!existing || el.style.display !== 'none' || display === 'none') entry[1] = el.style.display\n el.style.display = 'none'\n })\n return\n }\n if (fiber.tag === FiberTag.Portal) return\n let c = fiber.child\n while (c) {\n hideRootHostDoms(c, out)\n c = c.sibling\n }\n}\n\nfunction hydrateSuspenseBoundary(\n fiber: Fiber,\n props: any,\n boundary: [0 | 1 | 2 | 3, number, Comment, Comment],\n domParent: Node,\n anchor: Node | null,\n): void {\n const [pendingBoundary, id, startMark, endMark] = boundary\n // Record the boundary shape so we can re-hydrate on reveal.\n fiber.ms = {\n b: startMark,\n e: endMark,\n r: props.children,\n }\n\n if (pendingBoundary >= 2) {\n if (pendingBoundary === 3) reportServerFailure(fiber)\n recoverBoundaryHydration(fiber, props.children, startMark.parentNode!, startMark, endMark, true)\n fiber.mp = props\n return\n }\n\n if (!pendingBoundary) {\n // Real DOM is inline between startMark and endMark. Hydrate into it.\n const parent = startMark.parentNode!\n try {\n setHydrationCursor(fiber, new HydrationCursor(parent, startMark.nextSibling, endMark))\n reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor)\n advanceCursorPast(fiber.parent!, endMark)\n } catch (e) {\n if (!isHydrationBailout(e)) {\n onCommitFailure(() => {\n clearBoundaryRange(startMark, endMark)\n unmountAllChildren(fiber, parent)\n })\n throw e\n }\n recoverBoundaryHydration(fiber, props.children, parent, startMark, endMark)\n } finally {\n clearHydrationCursor(fiber)\n }\n fiber.mp = props\n return\n }\n\n // Pending: fallback DOM lives inside <div id=\"B:ID\">. Hydrate the fallback\n // React subtree against that div's children.\n const bDiv = document.getElementById(`B:${id}`)\n try {\n if (bDiv) {\n setHydrationCursor(fiber, new HydrationCursor(bDiv))\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n } else {\n // Couldn't find fallback container \u2014 render fresh (non-adopting)\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n }\n } catch (e) {\n if (!isHydrationBailout(e) || !bDiv) throw e\n recoverFallbackHydration(fiber, props.fallback, bDiv)\n } finally {\n clearHydrationCursor(fiber)\n }\n advanceCursorPast(fiber.parent!, endMark)\n\n // Register for server-streamed reveal (HTML chunks + $RC calls).\n ;(globalThis as any).$RH?.(id, () => rehydrateBoundary(fiber))\n // If the inline runtime isn't present, nothing external will mark us dy.\n\n fiber.mp = props\n}\n\nfunction recoverBoundaryHydration(\n fiber: Fiber,\n children: any,\n parent: Node,\n startMark: Comment,\n endMark: Comment,\n retryBoundary = false,\n): void {\n const root = findRoot(fiber)!\n const prevHydrating = root.h\n if (!retryBoundary) discardPendingWork(root)\n clearBoundaryRange(startMark, endMark)\n unmountAllChildren(fiber, parent)\n root.h = false\n try {\n if (retryBoundary) {\n fiber.ms = {}\n renderSuspense(fiber, parent, endMark)\n } else reconcileChildren(fiber, childrenToArray(children), parent, endMark)\n advanceCursorPast(fiber.parent!, endMark)\n } catch (clientError) {\n onCommitFailure(() => {\n clearBoundaryRange(startMark, endMark)\n unmountAllChildren(fiber, parent)\n })\n throw clientError\n } finally {\n root.h = prevHydrating\n }\n}\n\nfunction recoverFallbackHydration(fiber: Fiber, fallback: any, parent: HTMLElement): void {\n const root = findRoot(fiber)!\n const prevHydrating = root.h\n discardPendingWork(root)\n queueMutation(() => { parent.textContent = '' })\n unmountAllChildren(fiber, parent)\n root.h = false\n try {\n reconcileChildren(fiber, childrenToArray(fallback), parent, null)\n } catch (clientError) {\n onCommitFailure(() => {\n parent.textContent = ''\n unmountAllChildren(fiber, parent)\n })\n throw clientError\n } finally {\n root.h = prevHydrating\n }\n}\n\nfunction rehydrateBoundary(fiber: Fiber): void {\n const state = fiber.ms\n if (!state?.b || !state.e) return\n\n const root = findRoot(fiber)\n const parent = state.b.parentNode as Node\n if (!(root && parent)) return\n\n // Unmount existing fallback subtree. Its DOM has already been removed by $RC\n // (or at least its container); unmounting here cleans up fibers + fx.\n withCurrentRoot(root, () => {\n const prevHydrating = root.h\n if (state.b.data.startsWith('$!') || state.b.data.startsWith('$E')) {\n if (state.b.data.startsWith('$E')) reportServerFailure(fiber)\n recoverBoundaryHydration(fiber, state.r, parent, state.b, state.e, true)\n runEffects(root)\n return\n }\n try {\n unmountAllChildren(fiber, parent)\n\n // Re-hydrate with real children against the now-real DOM range.\n root.h = true\n setHydrationCursor(fiber, new HydrationCursor(parent, state.b.nextSibling, state.e))\n reconcileChildren(fiber, childrenToArray(state.r), parent, null)\n } catch (e) {\n if (!isHydrationBailout(e)) {\n onCommitFailure(() => {\n clearBoundaryRange(state.b, state.e)\n unmountAllChildren(fiber, parent)\n })\n throw e\n }\n\n recoverBoundaryHydration(fiber, state.r, parent, state.b, state.e)\n } finally {\n root.h = prevHydrating\n clearHydrationCursor(fiber)\n }\n runEffects(root)\n })\n}\n\nfunction reportServerFailure(fiber: Fiber): void {\n const error = new Error('Switched to client rendering because the server render did not complete.')\n const handler = findRoot(fiber)?.re\n if (handler) handler(error, { componentStack: null })\n else console.error(error)\n}\n\nfunction clearBoundaryRange(startMark: Comment, endMark: Comment): void {\n queueMutation(() => {\n let node = startMark.nextSibling\n while (node && node !== endMark) {\n const next = node.nextSibling\n node.parentNode?.removeChild(node)\n node = next\n }\n })\n}\n\nregisterTypeMatcher((type) => (type === REACT_SUSPENSE_TYPE ? FiberTag.Suspense : null))\nregisterRenderer(FiberTag.Suspense, renderSuspense)\ninstallCapability('handleSuspended', realHandleSuspended)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from "./full.js";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
//
|
|
2
|
-
export * from "./full";
|
|
1
|
+
// src/dom/features/suspense/index.ts
|
|
2
|
+
export * from "./full.js";
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
//
|
|
2
|
-
import { FiberTag } from "../../../core";
|
|
3
|
-
import { REACT_SUSPENSE_TYPE } from "../../../react";
|
|
4
|
-
import { registerTypeMatcher } from "../../reconcile";
|
|
1
|
+
// src/dom/features/suspense/stub.ts
|
|
2
|
+
import { FiberTag } from "../../../core/index.js";
|
|
3
|
+
import { REACT_SUSPENSE_TYPE } from "../../../react/index.js";
|
|
4
|
+
import { registerTypeMatcher } from "../../reconcile.js";
|
|
5
5
|
registerTypeMatcher((type) => type === REACT_SUSPENSE_TYPE ? FiberTag.Fragment : null);
|
|
6
6
|
//# sourceMappingURL=stub.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { FiberRoot } from "../../../core/index.js";
|
|
2
|
+
export declare function markTransitionUpdate(root: FiberRoot): void;
|
|
3
|
+
export declare function deferTransition(root: FiberRoot, commit: () => void, flush: () => void): boolean;
|
|
4
|
+
export declare function cancelTransitions(): void;
|
|
5
|
+
export declare function deferTransitionLayout(work: () => void): boolean;
|
|
6
|
+
export declare function deferTransitionPassive(work: () => void): boolean;
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
// src/dom/features/view-transition/full.ts
|
|
2
|
+
import { ReactSharedInternals } from "../../../react/shared-internals.js";
|
|
3
|
+
import { currentCommit, prepareCommit, commitBeforeMutation, commitMutation, commitSynchronously } from "../../commit.js";
|
|
4
|
+
import { prepareViewTransition } from "./visual.js";
|
|
5
|
+
import { recoverRootError } from "../../reconcile.js";
|
|
6
|
+
var marks = /* @__PURE__ */ new Map();
|
|
7
|
+
var documents = /* @__PURE__ */ new Map();
|
|
8
|
+
var committing;
|
|
9
|
+
function ownerDocument(root) {
|
|
10
|
+
return root.c.nodeType === 9 ? root.c : root.c.ownerDocument;
|
|
11
|
+
}
|
|
12
|
+
function drain(queue) {
|
|
13
|
+
while (queue.length) queue.shift()();
|
|
14
|
+
}
|
|
15
|
+
function passive(transaction) {
|
|
16
|
+
if (transaction.consumed) transaction.visual.restore();
|
|
17
|
+
drain(transaction.passive);
|
|
18
|
+
}
|
|
19
|
+
function release(doc, coordinator) {
|
|
20
|
+
if (!coordinator.active && !coordinator.queued.size && documents.get(doc) === coordinator) documents.delete(doc);
|
|
21
|
+
}
|
|
22
|
+
function render(work) {
|
|
23
|
+
for (const entry of work.values()) entry.commit();
|
|
24
|
+
}
|
|
25
|
+
function prepareRoot(transaction, root, commit) {
|
|
26
|
+
try {
|
|
27
|
+
prepareCommit(() => {
|
|
28
|
+
transaction.plans.push(currentCommit);
|
|
29
|
+
commit();
|
|
30
|
+
});
|
|
31
|
+
} catch (error) {
|
|
32
|
+
transaction.plans.pop();
|
|
33
|
+
if (!recoverRootError(error)) throw error;
|
|
34
|
+
transaction.work.delete(root);
|
|
35
|
+
transaction.visual.exclude(root);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function beforeMutation(transaction) {
|
|
39
|
+
for (const plan of transaction.plans) commitBeforeMutation(plan);
|
|
40
|
+
}
|
|
41
|
+
function mutation(transaction) {
|
|
42
|
+
for (const plan of transaction.plans) commitMutation(plan);
|
|
43
|
+
}
|
|
44
|
+
function markTransitionUpdate(root) {
|
|
45
|
+
if (committing) return;
|
|
46
|
+
const coordinator = documents.size ? documents.get(ownerDocument(root)) : void 0;
|
|
47
|
+
if (coordinator?.active) passive(coordinator.active);
|
|
48
|
+
const scope = ReactSharedInternals.T;
|
|
49
|
+
if (scope) {
|
|
50
|
+
if (marks.get(root) !== null) {
|
|
51
|
+
let scopes = marks.get(root);
|
|
52
|
+
if (!scopes) marks.set(root, scopes = /* @__PURE__ */ new Set());
|
|
53
|
+
scopes.add(scope);
|
|
54
|
+
}
|
|
55
|
+
} else {
|
|
56
|
+
if (marks.has(root)) marks.set(root, null);
|
|
57
|
+
if (coordinator) cancel(coordinator);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function deferTransition(root, commit, flush) {
|
|
61
|
+
if (committing?.preparing && !currentCommit && ownerDocument(root) === committing.visual.document) {
|
|
62
|
+
prepareRoot(committing, root, commit);
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
if (!marks.size && !documents.size) return false;
|
|
66
|
+
const scopes = marks.get(root);
|
|
67
|
+
marks.delete(root);
|
|
68
|
+
const doc = ownerDocument(root);
|
|
69
|
+
const activeCoordinator = documents.get(doc);
|
|
70
|
+
if (activeCoordinator?.active?.plans.length && !activeCoordinator.active.consumed && !currentCommit) {
|
|
71
|
+
if (committing || !scopes) cancel(activeCoordinator);
|
|
72
|
+
}
|
|
73
|
+
if (committing || !scopes || !doc.startViewTransition) return false;
|
|
74
|
+
let coordinator = documents.get(doc);
|
|
75
|
+
if (!coordinator) {
|
|
76
|
+
coordinator = { queued: /* @__PURE__ */ new Map(), flush, scheduled: false };
|
|
77
|
+
documents.set(doc, coordinator);
|
|
78
|
+
}
|
|
79
|
+
const existing = coordinator.queued.get(root);
|
|
80
|
+
if (existing) for (const scope of scopes) existing.scopes.add(scope);
|
|
81
|
+
else coordinator.queued.set(root, { commit, scopes });
|
|
82
|
+
kick(doc, coordinator);
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
function kick(doc, coordinator) {
|
|
86
|
+
if (coordinator.active || coordinator.scheduled || !coordinator.queued.size) return;
|
|
87
|
+
coordinator.scheduled = true;
|
|
88
|
+
queueMicrotask(async () => {
|
|
89
|
+
coordinator.scheduled = false;
|
|
90
|
+
if (coordinator.active || !coordinator.queued.size) return;
|
|
91
|
+
const work = coordinator.queued;
|
|
92
|
+
coordinator.queued = /* @__PURE__ */ new Map();
|
|
93
|
+
const types = /* @__PURE__ */ new Set();
|
|
94
|
+
for (const entry of work.values()) for (const scope of entry.scopes) for (const type of scope) types.add(type);
|
|
95
|
+
const visual = prepareViewTransition(work.keys(), [...types]);
|
|
96
|
+
if (!visual) {
|
|
97
|
+
commitSynchronously(() => render(work));
|
|
98
|
+
release(doc, coordinator);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const transaction = { visual, work, layout: [], passive: [], plans: [], preparing: true, consumed: false, cancelled: false, ready: false };
|
|
102
|
+
coordinator.active = transaction;
|
|
103
|
+
try {
|
|
104
|
+
try {
|
|
105
|
+
within(transaction, () => {
|
|
106
|
+
for (const [root, entry] of work) prepareRoot(transaction, root, entry.commit);
|
|
107
|
+
coordinator.flush();
|
|
108
|
+
});
|
|
109
|
+
} finally {
|
|
110
|
+
transaction.preparing = false;
|
|
111
|
+
}
|
|
112
|
+
const resources = visual.prepare();
|
|
113
|
+
if (resources) await resources;
|
|
114
|
+
if (transaction.cancelled) return;
|
|
115
|
+
within(transaction, () => beforeMutation(transaction));
|
|
116
|
+
if (!visual.beforeCommit()) {
|
|
117
|
+
cancel(coordinator);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
} catch (error) {
|
|
121
|
+
cancel(coordinator);
|
|
122
|
+
report(transaction, error);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const update = () => {
|
|
126
|
+
if (transaction.consumed) return;
|
|
127
|
+
transaction.consumed = true;
|
|
128
|
+
const navigation = doc.defaultView?.navigation?.transition;
|
|
129
|
+
const fonts = doc.fonts;
|
|
130
|
+
const wasLoaded = fonts?.status === "loaded";
|
|
131
|
+
within(transaction, () => {
|
|
132
|
+
mutation(transaction);
|
|
133
|
+
coordinator.flush();
|
|
134
|
+
});
|
|
135
|
+
const finishCommit = () => {
|
|
136
|
+
if (transaction.cancelled) return;
|
|
137
|
+
within(transaction, () => {
|
|
138
|
+
drain(transaction.layout);
|
|
139
|
+
coordinator.flush();
|
|
140
|
+
});
|
|
141
|
+
if (navigation) return navigation.finished.catch(() => {
|
|
142
|
+
}).then(() => {
|
|
143
|
+
if (!transaction.cancelled) visual.afterCommit();
|
|
144
|
+
});
|
|
145
|
+
visual.afterCommit();
|
|
146
|
+
};
|
|
147
|
+
const resources = visual.waitForResources(!!wasLoaded);
|
|
148
|
+
if (resources) return resources.then(finishCommit);
|
|
149
|
+
return finishCommit();
|
|
150
|
+
};
|
|
151
|
+
try {
|
|
152
|
+
const native = transaction.native = doc.startViewTransition({ update, types: [...types] });
|
|
153
|
+
native.updateCallbackDone.catch((error) => report(transaction, error));
|
|
154
|
+
native.ready.then(() => {
|
|
155
|
+
if (!transaction.cancelled) {
|
|
156
|
+
transaction.ready = true;
|
|
157
|
+
try {
|
|
158
|
+
visual.ready();
|
|
159
|
+
} catch (error) {
|
|
160
|
+
report(transaction, error);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}, (error) => {
|
|
164
|
+
try {
|
|
165
|
+
if (!transaction.cancelled && reportable(error)) {
|
|
166
|
+
const root = transaction.work.keys().next().value;
|
|
167
|
+
if (root?.re) root.re(error, { componentStack: null });
|
|
168
|
+
else if (typeof reportError === "function") reportError(error);
|
|
169
|
+
else queueMicrotask(() => {
|
|
170
|
+
throw error;
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
} finally {
|
|
174
|
+
transaction.cancelled = true;
|
|
175
|
+
try {
|
|
176
|
+
visual.cancel();
|
|
177
|
+
} finally {
|
|
178
|
+
consume(transaction);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
native.finished.then(() => finish(doc, coordinator, transaction), () => finish(doc, coordinator, transaction));
|
|
183
|
+
} catch {
|
|
184
|
+
cancel(coordinator);
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
function reportable(error) {
|
|
189
|
+
return error !== null && !(error && typeof error === "object" && "name" in error && error.name === "InvalidStateError" && "message" in error && (error.message === "View transition was skipped because document visibility state is hidden." || error.message === "Skipping view transition because document visibility state has become hidden." || error.message === "Skipping view transition because viewport size changed." || error.message === "Transition was aborted because of invalid state"));
|
|
190
|
+
}
|
|
191
|
+
function consume(transaction) {
|
|
192
|
+
transaction.consumed = true;
|
|
193
|
+
within(transaction, () => {
|
|
194
|
+
beforeMutation(transaction);
|
|
195
|
+
mutation(transaction);
|
|
196
|
+
});
|
|
197
|
+
drain(transaction.layout);
|
|
198
|
+
}
|
|
199
|
+
function within(transaction, work) {
|
|
200
|
+
const previous = committing;
|
|
201
|
+
committing = transaction;
|
|
202
|
+
try {
|
|
203
|
+
work();
|
|
204
|
+
} finally {
|
|
205
|
+
committing = previous;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
function report(transaction, error) {
|
|
209
|
+
const root = transaction.work.keys().next().value;
|
|
210
|
+
if (root?.ue) root.ue(error, { componentStack: null });
|
|
211
|
+
else queueMicrotask(() => {
|
|
212
|
+
throw error;
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
function finish(doc, coordinator, transaction) {
|
|
216
|
+
if (coordinator.active === transaction) coordinator.active = void 0;
|
|
217
|
+
try {
|
|
218
|
+
passive(transaction);
|
|
219
|
+
} catch (error) {
|
|
220
|
+
report(transaction, error);
|
|
221
|
+
} finally {
|
|
222
|
+
try {
|
|
223
|
+
transaction.visual.finish();
|
|
224
|
+
} catch (error) {
|
|
225
|
+
report(transaction, error);
|
|
226
|
+
} finally {
|
|
227
|
+
if (coordinator.queued.size) kick(doc, coordinator);
|
|
228
|
+
else release(doc, coordinator);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
function cancel(coordinator) {
|
|
233
|
+
const transaction = coordinator.active;
|
|
234
|
+
const queued = coordinator.queued;
|
|
235
|
+
const root = queued.keys().next().value;
|
|
236
|
+
const doc = transaction?.visual.document ?? (root ? ownerDocument(root) : void 0);
|
|
237
|
+
coordinator.queued = /* @__PURE__ */ new Map();
|
|
238
|
+
if (transaction) {
|
|
239
|
+
if (!transaction.ready) {
|
|
240
|
+
coordinator.active = void 0;
|
|
241
|
+
transaction.cancelled = true;
|
|
242
|
+
transaction.native?.skipTransition();
|
|
243
|
+
try {
|
|
244
|
+
transaction.visual.cancel();
|
|
245
|
+
} catch (error) {
|
|
246
|
+
report(transaction, error);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
consume(transaction);
|
|
250
|
+
passive(transaction);
|
|
251
|
+
}
|
|
252
|
+
commitSynchronously(() => render(queued));
|
|
253
|
+
if (doc) release(doc, coordinator);
|
|
254
|
+
}
|
|
255
|
+
function cancelTransitions() {
|
|
256
|
+
if (!marks.size && !documents.size) return;
|
|
257
|
+
marks.clear();
|
|
258
|
+
for (const [doc, coordinator] of [...documents]) {
|
|
259
|
+
cancel(coordinator);
|
|
260
|
+
release(doc, coordinator);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
function deferTransitionLayout(work) {
|
|
264
|
+
if (!committing) return false;
|
|
265
|
+
committing.layout.push(work);
|
|
266
|
+
return true;
|
|
267
|
+
}
|
|
268
|
+
function deferTransitionPassive(work) {
|
|
269
|
+
if (!committing) return false;
|
|
270
|
+
committing.passive.push(work);
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
export {
|
|
274
|
+
cancelTransitions,
|
|
275
|
+
deferTransition,
|
|
276
|
+
deferTransitionLayout,
|
|
277
|
+
deferTransitionPassive,
|
|
278
|
+
markTransitionUpdate
|
|
279
|
+
};
|
|
280
|
+
//# sourceMappingURL=full.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/dom/features/view-transition/full.ts"],
|
|
4
|
+
"sourcesContent": ["import type { FiberRoot } from '../../../core'\nimport { ReactSharedInternals } from '../../../react/shared-internals'\nimport { currentCommit, prepareCommit, commitBeforeMutation, commitMutation, commitSynchronously, type CommitPlan } from '../../commit'\nimport { prepareViewTransition } from './visual'\nimport { recoverRootError } from '../../reconcile'\n\ntype Work = { commit: () => void; scopes: Set<Set<string>> }\ntype Visual = NonNullable<ReturnType<typeof prepareViewTransition>>\ninterface Transaction {\n native?: ViewTransition\n visual: Visual\n work: Map<FiberRoot, Work>\n layout: Array<() => void>\n passive: Array<() => void>\n consumed: boolean\n cancelled: boolean\n ready: boolean\n plans: CommitPlan[]\n preparing: boolean\n}\ninterface Coordinator {\n queued: Map<FiberRoot, Work>\n active?: Transaction | undefined\n flush: () => void\n scheduled: boolean\n}\n\nconst marks = new Map<FiberRoot, Set<Set<string>> | null>()\nconst documents = new Map<Document, Coordinator>()\nlet committing: Transaction | undefined\n\nfunction ownerDocument(root: FiberRoot): Document {\n return root.c.nodeType === 9 ? root.c as unknown as Document : root.c.ownerDocument!\n}\n\nfunction drain(queue: Array<() => void>): void {\n while (queue.length) queue.shift()!()\n}\n\nfunction passive(transaction: Transaction): void {\n if (transaction.consumed) transaction.visual.restore()\n drain(transaction.passive)\n}\n\nfunction release(doc: Document, coordinator: Coordinator): void {\n if (!coordinator.active && !coordinator.queued.size && documents.get(doc) === coordinator) documents.delete(doc)\n}\n\nfunction render(work: Map<FiberRoot, Work>): void {\n for (const entry of work.values()) entry.commit()\n}\n\nfunction prepareRoot(transaction: Transaction, root: FiberRoot, commit: () => void): void {\n try {\n prepareCommit(() => {\n transaction.plans.push(currentCommit!)\n commit()\n })\n } catch (error) {\n transaction.plans.pop()\n if (!recoverRootError(error)) throw error\n transaction.work.delete(root)\n transaction.visual.exclude(root)\n }\n}\n\nfunction beforeMutation(transaction: Transaction): void {\n for (const plan of transaction.plans) commitBeforeMutation(plan)\n}\n\nfunction mutation(transaction: Transaction): void {\n for (const plan of transaction.plans) commitMutation(plan)\n}\n\nexport function markTransitionUpdate(root: FiberRoot): void {\n if (committing) return\n const coordinator = documents.size ? documents.get(ownerDocument(root)) : undefined\n if (coordinator?.active) passive(coordinator.active)\n const scope = ReactSharedInternals.T\n if (scope) {\n if (marks.get(root) !== null) {\n let scopes = marks.get(root)\n if (!scopes) marks.set(root, scopes = new Set())\n scopes.add(scope)\n }\n } else {\n if (marks.has(root)) marks.set(root, null)\n if (coordinator) cancel(coordinator)\n }\n}\n\nexport function deferTransition(root: FiberRoot, commit: () => void, flush: () => void): boolean {\n if (committing?.preparing && !currentCommit && ownerDocument(root) === committing.visual.document) {\n prepareRoot(committing, root, commit)\n return true\n }\n if (!marks.size && !documents.size) return false\n const scopes = marks.get(root)\n marks.delete(root)\n const doc = ownerDocument(root)\n const activeCoordinator = documents.get(doc)\n if (activeCoordinator?.active?.plans.length && !activeCoordinator.active.consumed && !currentCommit) {\n // A reentrant urgent render must consume the already-rendered commit\n // before reconciling another tree against it.\n if (committing || !scopes) cancel(activeCoordinator)\n }\n if (committing || !scopes || !doc.startViewTransition) return false\n let coordinator = documents.get(doc)\n if (!coordinator) {\n coordinator = { queued: new Map(), flush, scheduled: false }\n documents.set(doc, coordinator)\n }\n const existing = coordinator.queued.get(root)\n if (existing) for (const scope of scopes) existing.scopes.add(scope)\n else coordinator.queued.set(root, { commit, scopes })\n kick(doc, coordinator)\n return true\n}\n\nfunction kick(doc: Document, coordinator: Coordinator): void {\n if (coordinator.active || coordinator.scheduled || !coordinator.queued.size) return\n coordinator.scheduled = true\n queueMicrotask(async () => {\n coordinator.scheduled = false\n if (coordinator.active || !coordinator.queued.size) return\n const work = coordinator.queued\n coordinator.queued = new Map()\n const types = new Set<string>()\n for (const entry of work.values()) for (const scope of entry.scopes) for (const type of scope) types.add(type)\n const visual = prepareViewTransition(work.keys(), [...types])\n if (!visual) {\n commitSynchronously(() => render(work))\n release(doc, coordinator)\n return\n }\n const transaction: Transaction = { visual, work, layout: [], passive: [], plans: [], preparing: true, consumed: false, cancelled: false, ready: false }\n coordinator.active = transaction\n try {\n try {\n within(transaction, () => {\n for (const [root, entry] of work) prepareRoot(transaction, root, entry.commit)\n coordinator.flush()\n })\n } finally { transaction.preparing = false }\n const resources = visual.prepare()\n if (resources) await resources\n if (transaction.cancelled) return\n within(transaction, () => beforeMutation(transaction))\n if (!visual.beforeCommit()) {\n cancel(coordinator)\n return\n }\n } catch (error) {\n cancel(coordinator)\n report(transaction, error)\n return\n }\n const update = () => {\n if (transaction.consumed) return\n transaction.consumed = true\n const navigation = (doc.defaultView as any)?.navigation?.transition\n const fonts = doc.fonts\n const wasLoaded = fonts?.status === 'loaded'\n within(transaction, () => {\n mutation(transaction)\n coordinator.flush()\n })\n const finishCommit = () => {\n if (transaction.cancelled) return\n within(transaction, () => { drain(transaction.layout); coordinator.flush() })\n if (navigation) return navigation.finished.catch(() => {}).then(() => {\n if (!transaction.cancelled) visual.afterCommit()\n })\n visual.afterCommit()\n }\n const resources = visual.waitForResources(!!wasLoaded)\n if (resources) return resources.then(finishCommit)\n return finishCommit()\n }\n try {\n const native = transaction.native = doc.startViewTransition({ update, types: [...types] })\n native.updateCallbackDone.catch(error => report(transaction, error))\n native.ready.then(() => {\n if (!transaction.cancelled) {\n transaction.ready = true\n try { visual.ready() } catch (error) { report(transaction, error) }\n }\n }, error => {\n try {\n if (!transaction.cancelled && reportable(error)) {\n const root = transaction.work.keys().next().value\n if (root?.re) root.re(error, { componentStack: null })\n else if (typeof reportError === 'function') reportError(error)\n else queueMicrotask(() => { throw error })\n }\n } finally {\n transaction.cancelled = true\n try { visual.cancel() } finally { consume(transaction) }\n }\n })\n native.finished.then(() => finish(doc, coordinator, transaction), () => finish(doc, coordinator, transaction))\n } catch {\n cancel(coordinator)\n }\n })\n}\n\nfunction reportable(error: unknown): boolean {\n return error !== null && !(error && typeof error === 'object' && 'name' in error && error.name === 'InvalidStateError' &&\n 'message' in error && (\n error.message === 'View transition was skipped because document visibility state is hidden.' ||\n error.message === 'Skipping view transition because document visibility state has become hidden.' ||\n error.message === 'Skipping view transition because viewport size changed.' ||\n error.message === 'Transition was aborted because of invalid state'\n ))\n}\n\nfunction consume(transaction: Transaction): void {\n transaction.consumed = true\n within(transaction, () => {\n beforeMutation(transaction)\n mutation(transaction)\n })\n drain(transaction.layout)\n}\n\nfunction within(transaction: Transaction, work: () => void): void {\n const previous = committing\n committing = transaction\n try { work() } finally { committing = previous }\n}\n\nfunction report(transaction: Transaction, error: unknown): void {\n const root = transaction.work.keys().next().value\n if (root?.ue) root.ue(error, { componentStack: null })\n else queueMicrotask(() => { throw error })\n}\n\nfunction finish(doc: Document, coordinator: Coordinator, transaction: Transaction): void {\n if (coordinator.active === transaction) coordinator.active = undefined\n try { passive(transaction) } catch (error) { report(transaction, error) } finally {\n try { transaction.visual.finish() } catch (error) { report(transaction, error) } finally {\n if (coordinator.queued.size) kick(doc, coordinator)\n else release(doc, coordinator)\n }\n }\n}\n\nfunction cancel(coordinator: Coordinator): void {\n const transaction = coordinator.active\n const queued = coordinator.queued\n const root = queued.keys().next().value\n const doc = transaction?.visual.document ?? (root ? ownerDocument(root) : undefined)\n coordinator.queued = new Map()\n if (transaction) {\n if (!transaction.ready) {\n coordinator.active = undefined\n transaction.cancelled = true\n transaction.native?.skipTransition()\n try { transaction.visual.cancel() } catch (error) { report(transaction, error) }\n }\n consume(transaction)\n passive(transaction)\n }\n commitSynchronously(() => render(queued))\n if (doc) release(doc, coordinator)\n}\n\nexport function cancelTransitions(): void {\n if (!marks.size && !documents.size) return\n marks.clear()\n for (const [doc, coordinator] of [...documents]) {\n cancel(coordinator)\n release(doc, coordinator)\n }\n}\n\nexport function deferTransitionLayout(work: () => void): boolean {\n if (!committing) return false\n committing.layout.push(work)\n return true\n}\n\nexport function deferTransitionPassive(work: () => void): boolean {\n if (!committing) return false\n committing.passive.push(work)\n return true\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./full.js";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type TransitionImages = Map<HTMLImageElement, {
|
|
2
|
+
src?: unknown;
|
|
3
|
+
srcSet?: unknown;
|
|
4
|
+
onLoad?: unknown;
|
|
5
|
+
loading?: unknown;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function transitionResources(doc: Document, previous: TransitionImages, next: TransitionImages): {
|
|
8
|
+
before(): Promise<void>;
|
|
9
|
+
after(fontsWereLoaded: boolean): Promise<void>;
|
|
10
|
+
cancel(): void;
|
|
11
|
+
};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// src/dom/features/view-transition/resources.ts
|
|
2
|
+
var imageBudget = 0;
|
|
3
|
+
function imageBytes(image) {
|
|
4
|
+
return (image.width || 100) * (image.height || 100) * (image.ownerDocument.defaultView?.devicePixelRatio || 1) * 0.25;
|
|
5
|
+
}
|
|
6
|
+
function staticResource(type) {
|
|
7
|
+
return /^(css|script|font|img|image|input|link)$/.test(type);
|
|
8
|
+
}
|
|
9
|
+
function bandwidth(doc) {
|
|
10
|
+
const view = doc.defaultView;
|
|
11
|
+
const entries = view.performance.getEntriesByType?.("resource");
|
|
12
|
+
let count = 0, bits = 0;
|
|
13
|
+
for (let i = 0; entries && i < entries.length; i++) {
|
|
14
|
+
const entry = entries[i];
|
|
15
|
+
if (!entry.transferSize || !entry.duration || !staticResource(entry.initiatorType)) continue;
|
|
16
|
+
let overlap = 0;
|
|
17
|
+
for (++i; i < entries.length; i++) {
|
|
18
|
+
const next = entries[i];
|
|
19
|
+
if (next.startTime > entry.responseEnd) break;
|
|
20
|
+
if (next.transferSize && staticResource(next.initiatorType)) {
|
|
21
|
+
overlap += next.transferSize * (next.responseEnd < entry.responseEnd ? 1 : (entry.responseEnd - next.startTime) / (next.responseEnd - next.startTime));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
i--;
|
|
25
|
+
bits += 8 * (entry.transferSize + overlap) / (entry.duration / 1e3);
|
|
26
|
+
if (++count > 10) break;
|
|
27
|
+
}
|
|
28
|
+
if (count) return bits / count / 1e6;
|
|
29
|
+
const downlink = view.navigator.connection?.downlink;
|
|
30
|
+
return typeof downlink === "number" ? downlink : 5;
|
|
31
|
+
}
|
|
32
|
+
function transitionResources(doc, previous, next) {
|
|
33
|
+
const pending = [];
|
|
34
|
+
const releases = /* @__PURE__ */ new Set();
|
|
35
|
+
function wait(promises, timeout, cleanups = []) {
|
|
36
|
+
if (!promises.length) return;
|
|
37
|
+
return new Promise((resolve) => {
|
|
38
|
+
const finish = () => {
|
|
39
|
+
if (!releases.delete(finish)) return;
|
|
40
|
+
clearTimeout(timer);
|
|
41
|
+
for (const cleanup of cleanups) cleanup();
|
|
42
|
+
resolve();
|
|
43
|
+
};
|
|
44
|
+
const timer = setTimeout(finish, timeout);
|
|
45
|
+
releases.add(finish);
|
|
46
|
+
Promise.all(promises).then(finish, finish);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
before() {
|
|
51
|
+
const promises = [];
|
|
52
|
+
let bytes = 0;
|
|
53
|
+
for (const [image, props] of next) {
|
|
54
|
+
const old = previous.get(image);
|
|
55
|
+
if (props.src == null || props.src === "" || props.onLoad != null || props.loading === "lazy" || old && props.src === old.src && props.srcSet === old.srcSet || typeof image.decode !== "function") continue;
|
|
56
|
+
if (!image.complete) {
|
|
57
|
+
pending.push(image);
|
|
58
|
+
bytes += imageBytes(image);
|
|
59
|
+
}
|
|
60
|
+
promises.push(image.decode().catch(() => {
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
if (bytes && !imageBudget) imageBudget = 125 * bandwidth(doc) * 500;
|
|
64
|
+
return wait(promises, bytes > imageBudget ? 50 : 800);
|
|
65
|
+
},
|
|
66
|
+
after(fontsWereLoaded) {
|
|
67
|
+
const promises = [];
|
|
68
|
+
const cleanups = [];
|
|
69
|
+
if (fontsWereLoaded) {
|
|
70
|
+
doc.documentElement.getBoundingClientRect();
|
|
71
|
+
if (doc.fonts.status === "loading") promises.push(doc.fonts.ready);
|
|
72
|
+
}
|
|
73
|
+
const images = [];
|
|
74
|
+
let bytes = 0;
|
|
75
|
+
const view = doc.defaultView;
|
|
76
|
+
for (const image of pending) {
|
|
77
|
+
if (image.complete) continue;
|
|
78
|
+
const rect = image.getBoundingClientRect();
|
|
79
|
+
if (rect.bottom <= 0 || rect.right <= 0 || rect.top >= view.innerHeight || rect.left >= view.innerWidth) continue;
|
|
80
|
+
bytes += imageBytes(image);
|
|
81
|
+
if (bytes > imageBudget) {
|
|
82
|
+
images.length = 0;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
images.push(image);
|
|
86
|
+
}
|
|
87
|
+
for (const image of images) {
|
|
88
|
+
promises.push(new Promise((resolve) => {
|
|
89
|
+
const loaded = () => resolve();
|
|
90
|
+
image.addEventListener("load", loaded);
|
|
91
|
+
image.addEventListener("error", loaded);
|
|
92
|
+
cleanups.push(() => {
|
|
93
|
+
image.removeEventListener("load", loaded);
|
|
94
|
+
image.removeEventListener("error", loaded);
|
|
95
|
+
});
|
|
96
|
+
}));
|
|
97
|
+
}
|
|
98
|
+
return wait(promises, 500, cleanups);
|
|
99
|
+
},
|
|
100
|
+
cancel() {
|
|
101
|
+
for (const release of releases) release();
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
export {
|
|
106
|
+
transitionResources
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/dom/features/view-transition/resources.ts"],
|
|
4
|
+
"sourcesContent": ["export type TransitionImages = Map<HTMLImageElement, { src?: unknown; srcSet?: unknown; onLoad?: unknown; loading?: unknown }>\n\nlet imageBudget = 0\n\nfunction imageBytes(image: HTMLImageElement): number {\n return (image.width || 100) * (image.height || 100) * (image.ownerDocument.defaultView?.devicePixelRatio || 1) * 0.25\n}\n\nfunction staticResource(type: string): boolean {\n return /^(css|script|font|img|image|input|link)$/.test(type)\n}\n\n// Match React's estimate from up to eleven groups of overlapping transfers,\n// falling back to the browser's downlink estimate and then 5 Mbps.\nfunction bandwidth(doc: Document): number {\n const view = doc.defaultView!\n const entries = view.performance.getEntriesByType?.('resource') as PerformanceResourceTiming[] | undefined\n let count = 0, bits = 0\n for (let i = 0; entries && i < entries.length; i++) {\n const entry = entries[i]!\n if (!entry.transferSize || !entry.duration || !staticResource(entry.initiatorType)) continue\n let overlap = 0\n for (++i; i < entries.length; i++) {\n const next = entries[i]!\n if (next.startTime > entry.responseEnd) break\n if (next.transferSize && staticResource(next.initiatorType)) {\n overlap += next.transferSize * (next.responseEnd < entry.responseEnd ? 1 :\n (entry.responseEnd - next.startTime) / (next.responseEnd - next.startTime))\n }\n }\n i--\n bits += 8 * (entry.transferSize + overlap) / (entry.duration / 1000)\n if (++count > 10) break\n }\n if (count) return bits / count / 1000000\n const downlink = (view.navigator as any).connection?.downlink\n return typeof downlink === 'number' ? downlink : 5\n}\n\nexport function transitionResources(doc: Document, previous: TransitionImages, next: TransitionImages) {\n const pending: HTMLImageElement[] = []\n const releases = new Set<() => void>()\n\n function wait(promises: Promise<unknown>[], timeout: number, cleanups: Array<() => void> = []): Promise<void> | undefined {\n if (!promises.length) return\n return new Promise(resolve => {\n const finish = () => {\n if (!releases.delete(finish)) return\n clearTimeout(timer)\n for (const cleanup of cleanups) cleanup()\n resolve()\n }\n const timer = setTimeout(finish, timeout)\n releases.add(finish)\n Promise.all(promises).then(finish, finish)\n })\n }\n\n return {\n before() {\n const promises: Promise<unknown>[] = []\n let bytes = 0\n for (const [image, props] of next) {\n const old = previous.get(image)\n if (props.src == null || props.src === '' || props.onLoad != null || props.loading === 'lazy' ||\n (old && props.src === old.src && props.srcSet === old.srcSet) || typeof image.decode !== 'function') continue\n if (!image.complete) { pending.push(image); bytes += imageBytes(image) }\n promises.push(image.decode().catch(() => {}))\n }\n if (bytes && !imageBudget) imageBudget = 125 * bandwidth(doc) * 500\n return wait(promises, bytes > imageBudget ? 50 : 800)\n },\n after(fontsWereLoaded: boolean) {\n const promises: Promise<unknown>[] = []\n const cleanups: Array<() => void> = []\n if (fontsWereLoaded) {\n // Discover fonts introduced by mutation before the browser captures.\n doc.documentElement.getBoundingClientRect()\n if (doc.fonts.status === 'loading') promises.push(doc.fonts.ready)\n }\n const images: HTMLImageElement[] = []\n let bytes = 0\n const view = doc.defaultView!\n for (const image of pending) {\n if (image.complete) continue\n const rect = image.getBoundingClientRect()\n if (rect.bottom <= 0 || rect.right <= 0 || rect.top >= view.innerHeight || rect.left >= view.innerWidth) continue\n bytes += imageBytes(image)\n if (bytes > imageBudget) { images.length = 0; break }\n images.push(image)\n }\n for (const image of images) {\n promises.push(new Promise<void>(resolve => {\n const loaded = () => resolve()\n image.addEventListener('load', loaded)\n image.addEventListener('error', loaded)\n cleanups.push(() => {\n image.removeEventListener('load', loaded)\n image.removeEventListener('error', loaded)\n })\n }))\n }\n return wait(promises, 500, cleanups)\n },\n cancel() { for (const release of releases) release() },\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { FiberRoot } from "../../../core/index.js";
|
|
2
|
+
export declare function markTransitionUpdate(_root: FiberRoot): void;
|
|
3
|
+
export declare function deferTransition(_root: FiberRoot, _commit: () => void, _flush: () => void): boolean;
|
|
4
|
+
export declare function cancelTransitions(): void;
|
|
5
|
+
export declare function deferTransitionLayout(_work: () => void): boolean;
|
|
6
|
+
export declare function deferTransitionPassive(_work: () => void): boolean;
|