heartbeat-monitor/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs.map

1 line
11 KiB
Plaintext

{"version":3,"file":"KeyframesResolver.mjs","sources":["../../../../src/animation/keyframes/KeyframesResolver.ts"],"sourcesContent":["import { frame } from \"../../frameloop\"\nimport { MotionValue } from \"../../value\"\nimport { AnyResolvedKeyframe } from \"../types\"\nimport { WithRender } from \"./types\"\nimport { fillWildcards } from \"./utils/fill-wildcards\"\nimport { removeNonTranslationalTransform } from \"./utils/unit-conversion\"\n\nexport type UnresolvedKeyframes<T extends AnyResolvedKeyframe> = Array<T | null>\n\nexport type ResolvedKeyframes<T extends AnyResolvedKeyframe> = Array<T>\n\nconst toResolve = new Set<KeyframeResolver>()\nlet isScheduled = false\nlet anyNeedsMeasurement = false\nlet isForced = false\n\nfunction measureAllKeyframes() {\n if (anyNeedsMeasurement) {\n const resolversToMeasure = Array.from(toResolve).filter(\n (resolver: KeyframeResolver) => resolver.needsMeasurement\n )\n const elementsToMeasure = new Set(\n resolversToMeasure.map((resolver) => resolver.element)\n )\n const transformsToRestore = new Map<\n WithRender,\n [string, AnyResolvedKeyframe][]\n >()\n\n /**\n * Write pass\n * If we're measuring elements we want to remove bounding box-changing transforms.\n */\n elementsToMeasure.forEach((element: WithRender) => {\n const removedTransforms = removeNonTranslationalTransform(\n element as any\n )\n\n if (!removedTransforms.length) return\n\n transformsToRestore.set(element, removedTransforms)\n\n element.render()\n })\n\n // Read\n resolversToMeasure.forEach((resolver) => resolver.measureInitialState())\n\n // Write\n elementsToMeasure.forEach((element: WithRender) => {\n element.render()\n\n const restore = transformsToRestore.get(element)\n if (restore) {\n restore.forEach(([key, value]) => {\n element.getValue(key)?.set(value)\n })\n }\n })\n\n // Read\n resolversToMeasure.forEach((resolver) => resolver.measureEndState())\n\n // Write\n resolversToMeasure.forEach((resolver) => {\n if (resolver.suspendedScrollY !== undefined) {\n window.scrollTo(0, resolver.suspendedScrollY)\n }\n })\n }\n\n anyNeedsMeasurement = false\n isScheduled = false\n\n toResolve.forEach((resolver) => resolver.complete(isForced))\n toResolve.clear()\n}\n\nfunction readAllKeyframes() {\n toResolve.forEach((resolver) => {\n resolver.readKeyframes()\n\n if (resolver.needsMeasurement) {\n anyNeedsMeasurement = true\n }\n })\n}\n\nexport function flushKeyframeResolvers() {\n isForced = true\n readAllKeyframes()\n measureAllKeyframes()\n isForced = false\n}\n\nexport type OnKeyframesResolved<T extends AnyResolvedKeyframe> = (\n resolvedKeyframes: ResolvedKeyframes<T>,\n finalKeyframe: T,\n forced: boolean\n) => void\n\nexport class KeyframeResolver<T extends AnyResolvedKeyframe = any> {\n name?: string\n element?: WithRender\n finalKeyframe?: T\n suspendedScrollY?: number\n\n protected unresolvedKeyframes: UnresolvedKeyframes<AnyResolvedKeyframe>\n\n private motionValue?: MotionValue<T>\n private onComplete: OnKeyframesResolved<T>\n\n state: \"pending\" | \"scheduled\" | \"complete\" = \"pending\"\n\n /**\n * Track whether this resolver is async. If it is, it'll be added to the\n * resolver queue and flushed in the next frame. Resolvers that aren't going\n * to trigger read/write thrashing don't need to be async.\n */\n private isAsync = false\n\n /**\n * Track whether this resolver needs to perform a measurement\n * to resolve its keyframes.\n */\n needsMeasurement = false\n\n constructor(\n unresolvedKeyframes: UnresolvedKeyframes<AnyResolvedKeyframe>,\n onComplete: OnKeyframesResolved<T>,\n name?: string,\n motionValue?: MotionValue<T>,\n element?: WithRender,\n isAsync = false\n ) {\n this.unresolvedKeyframes = [...unresolvedKeyframes]\n this.onComplete = onComplete\n this.name = name\n this.motionValue = motionValue\n this.element = element\n this.isAsync = isAsync\n }\n\n scheduleResolve() {\n this.state = \"scheduled\"\n\n if (this.isAsync) {\n toResolve.add(this)\n\n if (!isScheduled) {\n isScheduled = true\n frame.read(readAllKeyframes)\n frame.resolveKeyframes(measureAllKeyframes)\n }\n } else {\n this.readKeyframes()\n this.complete()\n }\n }\n\n readKeyframes() {\n const { unresolvedKeyframes, name, element, motionValue } = this\n\n // If initial keyframe is null we need to read it from the DOM\n if (unresolvedKeyframes[0] === null) {\n const currentValue = motionValue?.get()\n\n // TODO: This doesn't work if the final keyframe is a wildcard\n const finalKeyframe =\n unresolvedKeyframes[unresolvedKeyframes.length - 1]\n\n if (currentValue !== undefined) {\n unresolvedKeyframes[0] = currentValue\n } else if (element && name) {\n const valueAsRead = element.readValue(name, finalKeyframe)\n\n if (valueAsRead !== undefined && valueAsRead !== null) {\n unresolvedKeyframes[0] = valueAsRead\n }\n }\n\n if (unresolvedKeyframes[0] === undefined) {\n unresolvedKeyframes[0] = finalKeyframe\n }\n\n if (motionValue && currentValue === undefined) {\n motionValue.set(unresolvedKeyframes[0] as T)\n }\n }\n\n fillWildcards(unresolvedKeyframes)\n }\n\n setFinalKeyframe() {}\n measureInitialState() {}\n renderEndStyles() {}\n measureEndState() {}\n\n complete(isForcedComplete = false) {\n this.state = \"complete\"\n\n this.onComplete(\n this.unresolvedKeyframes as ResolvedKeyframes<T>,\n this.finalKeyframe as T,\n isForcedComplete\n )\n\n toResolve.delete(this)\n }\n\n cancel() {\n if (this.state === \"scheduled\") {\n toResolve.delete(this)\n this.state = \"pending\"\n }\n }\n\n resume() {\n if (this.state === \"pending\") this.scheduleResolve()\n }\n}\n"],"names":[],"mappings":"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"}