@brytdesigns/web-component-parallax 1.2.17 → 1.2.19

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/parallax-container/index.ts","../../src/hooks/useParallax.ts","../../src/utils.ts","../../src/hooks/useParallaxStickyLayer.ts","../../src/components/parallax-sticky-layer/index.ts","../../src/components/parallax-animation/index.ts","../../src/index.ts"],"names":["info","splitProps","motionValue","createEffect","onCleanup","createContext","mergeProps","provide","consume","createWithElementContext","getContextFromProvider","Component","Name","messages","animate","createStore","active","props","transform","mTransform","unsub","frame","_"],"mappings":"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","file":"index.js","sourcesContent":["import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\nimport { provideParallaxContext } from \"../../hooks/index.js\";\n\nexport type Props = {\n maxPages: number;\n};\n\nexport const Name = `parallax-container`;\n\nexport const Component: CorrectComponentType<Props> = (props, { element }) => {\n if (!props.maxPages)\n return console.warn(\n `${Name}: requires max-pages attribute to be set!`,\n element,\n );\n if (props.maxPages < 1)\n return console.warn(\n `${Name}: max-pages must be greater than or equal to 1!`,\n element,\n );\n provideParallaxContext(props, element);\n};\n","import {\n onCleanup,\n createEffect,\n splitProps,\n mergeProps,\n batch,\n} from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\nimport {\n getContextFromProvider,\n createWithElementContext,\n} from \"@brytdesigns/web-component-core/utils\";\nimport {\n type ICustomElement,\n createContext,\n provide,\n consume,\n} from \"component-register\";\nimport { scroll, motionValue } from \"motion\";\n\ntype CreateContextOptions = {\n root: HTMLElement & ICustomElement;\n maxPages: number;\n};\n\ntype WalkableNode = Parameters<typeof provide>[2];\n\ntype ParallaxContext = ReturnType<typeof initializeParallaxContext>;\n\nfunction initializeParallaxContext(props: CreateContextOptions) {\n const [_internal, _state] = splitProps(props, [\"root\"]);\n\n const scrollYProgress = motionValue(-1);\n const scrollY = motionValue(-1);\n const [info, setInfo] = createStore({\n offset: [-1, -1],\n scrollLength: -1,\n });\n\n window.addEventListener(\"resize\", () => {});\n\n createEffect(() => {\n const pages = _state.maxPages;\n\n _internal.root.style.height = `${pages * 100}vh`;\n _internal.root.style.width = `100%`;\n _internal.root.style.position = \"relative\";\n if (!_internal.root.style.display) {\n _internal.root.style.display = \"block\";\n }\n\n const remove = scroll(\n (_, info) => {\n const { y } = info;\n\n scrollYProgress.set(y.progress);\n scrollY.set(y.current);\n batch(() => {\n setInfo(\"offset\", 0, y.offset?.at(0) || 0);\n setInfo(\"offset\", 1, y.offset?.at(1) || 0);\n setInfo(\"scrollLength\", y.scrollLength);\n });\n },\n {\n target: _internal.root,\n axis: \"y\",\n offset: [\"start start\", \"end end\"],\n },\n );\n\n onCleanup(() => {\n if (remove) {\n remove();\n }\n scrollYProgress.destroy();\n scrollY.destroy();\n });\n });\n\n return mergeProps(_state, {\n scrollYProgress,\n scrollY,\n info,\n });\n}\n\nconst ParallaxContextState = createContext(initializeParallaxContext);\n\nexport const provideParallaxContext = (\n initialState: Omit<CreateContextOptions, \"root\">,\n element: WalkableNode,\n): ParallaxContext => {\n const props = mergeProps(initialState, { root: element });\n return provide(ParallaxContextState, props, element);\n};\n\nexport const useParallaxContext = (context: ParallaxContext) => {\n return context;\n};\n\nexport const useParallax = (element: HTMLElement & ICustomElement) => {\n const context: ParallaxContext = consume(ParallaxContextState, element);\n\n if (!context) {\n throw console.error(\n \"ParallaxContext not found! Please ensure to wrap your custom element with parallax-container element.\",\n );\n }\n\n return useParallaxContext(context);\n};\n\nexport const withParallaxElementContext = createWithElementContext<\n typeof ParallaxContextState,\n ParallaxContext\n>(ParallaxContextState);\n\nexport const getParallaxContext = (element: Element) => {\n const context = getContextFromProvider<ParallaxContext>(\n ParallaxContextState,\n element,\n );\n return useParallaxContext(context);\n};\n","export function normalizeTuple(range: [number, number], max: number) {\n if (max <= 1) {\n throw new Error(\"The maximum value must be greater than 1.\");\n }\n\n const [start, end] = range;\n const normalizedStart = (start - 1) / (max - 1);\n const normalizedEnd = (end - 1) / (max - 1);\n\n return [normalizedStart, normalizedEnd] as const;\n}\n\nexport function isInRange({\n range: [start, end],\n value,\n}: {\n range: [number, number];\n value: number;\n}) {\n return start <= value && end >= value;\n}\n\nexport function getLastMatchingMediaQueryIndex(queries: string[]): number {\n let lastMatchIndex = -1;\n\n for (let i = 0; i < queries.length; i++) {\n const query = queries[i];\n if (typeof query !== \"string\") continue;\n if (window.matchMedia(query).matches) {\n lastMatchIndex = i;\n }\n }\n\n return lastMatchIndex;\n}\n\nexport function getActiveBreakpoints(queries: string[]): boolean[] {\n return queries.map((query) => window.matchMedia(query).matches);\n}\n\nexport function getLastTruthyIndex(values: boolean[]): number {\n for (let i = values.length - 1; i >= 0; i--) {\n if (values[i]) return i;\n }\n return -1;\n}\nexport function getLastValidValue<T>(\n arr: (T | null)[],\n index: number,\n): T | null {\n if (arr[index] != null) return arr[index]!;\n\n for (let i = index - 1; i >= 0; i--) {\n if (arr[i] != null) return arr[i]!;\n }\n\n return null;\n}\n","import {\n\tcreateWithElementContext,\n\tgetContextFromProvider,\n} from \"@brytdesigns/web-component-core/utils\";\nimport {\n\tconsume,\n\tcreateContext,\n\ttype ICustomElement,\n\tprovide,\n} from \"component-register\";\nimport {\n\ttype AnimationPlaybackControlsWithThen,\n\tanimate,\n\tframe,\n\tmotionValue,\n} from \"motion\";\nimport { createEffect, mergeProps, onCleanup, splitProps } from \"solid-js\";\nimport { isInRange, normalizeTuple } from \"../utils\";\nimport { useParallax } from \"./useParallax\";\n\ntype CreateContextOptions = {\n\troot: HTMLElement & ICustomElement;\n\tstart: number;\n\tend: number;\n};\n\ntype WalkableNode = Parameters<typeof provide>[2];\n\ntype ParallaxStickyLayerContext = ReturnType<\n\ttypeof initializeParallaxStickyLayerContext\n>;\n\ntype LayerMode = \"absolute-below\" | \"sticky\" | \"absolute-above\";\n\nconst HANDOFF_EASE = \"easeOut\";\nconst ENTER_HYSTERESIS = 0.001;\nconst EXIT_HYSTERESIS = 0.005;\nconst HANDOFF_MIN_DELTA_PX = 0.75;\nconst EXIT_WAIT_TIMEOUT_MS = 500;\nconst PREDICT_LOOKAHEAD_MS = 28;\nconst PREDICT_ENTER_BAND = 0.006;\nconst PREDICT_EXIT_BAND = 0.01;\nconst PREDICT_MIN_VELOCITY = 0.0004;\nconst LOW_VELOCITY_NO_TWEEN = 0.001;\nconst HIGH_VELOCITY_SKIP_HANDOFF = 0.01;\nconst MAX_PREDICT_LOOKAHEAD_MS = 60;\nconst MAX_HANDOFF_DELTA_PX = 56;\n\nfunction supportsStickyPosition() {\n\tif (typeof CSS === \"undefined\" || typeof CSS.supports !== \"function\") {\n\t\treturn false;\n\t}\n\n\treturn (\n\t\tCSS.supports(\"position\", \"sticky\") ||\n\t\tCSS.supports(\"position\", \"-webkit-sticky\")\n\t);\n}\n\nfunction initializeParallaxStickyLayerContext(props: CreateContextOptions) {\n\tconst [_internal, _state] = splitProps(props, [\"root\", \"start\", \"end\"]);\n\tconst parallax = useParallax(_internal.root);\n\tconst stickySupported = supportsStickyPosition();\n\n\tconst progress = motionValue(-1);\n\tconst rawScrollProgress = motionValue(-1);\n\tconst inRange = motionValue(false);\n\tconst belowRange = motionValue(false);\n\tconst aboveRange = motionValue(false);\n\tconst normStartValue = motionValue(0);\n\tconst normEndValue = motionValue(1);\n\tconst mode = motionValue<LayerMode>(\"absolute-below\");\n\tconst handoffOffsetY = motionValue(0);\n\n\tconst activeContentAnimations = new Set<AnimationPlaybackControlsWithThen>();\n\tlet handoffAnimation: AnimationPlaybackControlsWithThen | null = null;\n\tlet exitWaitRaf: number | null = null;\n\tlet exitWaitTimeout: number | null = null;\n\tlet pendingExitVersion = 0;\n\tlet pendingExitMode: LayerMode | null = null;\n\tlet lastScrollSampleValue = 0;\n\tlet lastScrollSampleTime = 0;\n\tlet hasScrollSample = false;\n\tlet latestScrollVelocity = 0;\n\n\t_internal.root.style.top = \"0px\";\n\t_internal.root.style.right = \"0px\";\n\t_internal.root.style.bottom = \"0px\";\n\t_internal.root.style.left = \"0px\";\n\t_internal.root.style.height = `100dvh`;\n\t_internal.root.style.overflowX = \"hidden\";\n\t_internal.root.style.maxWidth = \"100%\";\n\tif (window.getComputedStyle(_internal.root).display === \"inline\") {\n\t\t_internal.root.style.display = \"block\";\n\t}\n\n\tfunction updateStyles() {\n\t\tif (!stickySupported) {\n\t\t\tconst normStart = normStartValue.get();\n\t\t\tconst normEnd = normEndValue.get();\n\t\t\tconst raw = rawScrollProgress.get();\n\t\t\tconst span = Math.max(normEnd - normStart, Number.EPSILON);\n\t\t\tconst t = Math.min(Math.max((raw - normStart) / span, 0), 1);\n\t\t\tconst pageY = _internal.start - 1 + t * (_internal.end - _internal.start);\n\n\t\t\t_internal.root.style.position = \"absolute\";\n\t\t\t_internal.root.style.transform = `translate(0px, ${pageY * 100}vh)`;\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentMode = mode.get();\n\t\tconst offset = handoffOffsetY.get();\n\t\tconst hasOffset = Math.abs(offset) >= 0.1;\n\n\t\tif (currentMode === \"sticky\") {\n\t\t\t_internal.root.style.position = \"sticky\";\n\t\t\t_internal.root.style.transform = hasOffset\n\t\t\t\t? `translate(0px, ${offset}px)`\n\t\t\t\t: \"none\";\n\t\t\treturn;\n\t\t}\n\n\t\tconst baseTransform =\n\t\t\tcurrentMode === \"absolute-below\"\n\t\t\t\t? `translate(0px, ${(_internal.start - 1) * 100}vh)`\n\t\t\t\t: `translate(0px, ${(_internal.end - 1) * 100}vh)`;\n\n\t\t_internal.root.style.position = \"absolute\";\n\t\t_internal.root.style.transform = hasOffset\n\t\t\t? `${baseTransform} translate(0px, ${offset}px)`\n\t\t\t: baseTransform;\n\t}\n\n\tfunction renderStyles() {\n\t\tframe.render(updateStyles);\n\t}\n\n\tfunction stopHandoffAnimation() {\n\t\thandoffAnimation?.stop();\n\t\thandoffAnimation = null;\n\t\thandoffOffsetY.set(0);\n\t}\n\n\tfunction clearExitWaitHandles() {\n\t\tif (exitWaitRaf !== null) {\n\t\t\twindow.cancelAnimationFrame(exitWaitRaf);\n\t\t\texitWaitRaf = null;\n\t\t}\n\t\tif (exitWaitTimeout !== null) {\n\t\t\twindow.clearTimeout(exitWaitTimeout);\n\t\t\texitWaitTimeout = null;\n\t\t}\n\t}\n\n\tfunction pruneFinishedAnimations() {\n\t\tfor (const animation of activeContentAnimations) {\n\t\t\tif (animation.state !== \"running\") {\n\t\t\t\tactiveContentAnimations.delete(animation);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction hasActiveContentAnimations() {\n\t\tpruneFinishedAnimations();\n\t\treturn activeContentAnimations.size > 0;\n\t}\n\n\tfunction registerContentAnimation(\n\t\tanimation: AnimationPlaybackControlsWithThen,\n\t) {\n\t\tactiveContentAnimations.add(animation);\n\t\tanimation.then(\n\t\t\t() => {\n\t\t\t\tactiveContentAnimations.delete(animation);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tactiveContentAnimations.delete(animation);\n\t\t\t},\n\t\t);\n\t}\n\n\tfunction getHandoffDuration(deltaY: number, velocity: number) {\n\t\tconst speed = Math.abs(velocity);\n\t\tif (speed <= LOW_VELOCITY_NO_TWEEN) return 0;\n\n\t\tconst byDistance = Math.min(0.12, Math.max(0.05, Math.abs(deltaY) / 1400));\n\t\tconst speedScale = Math.min(speed / 0.01, 1);\n\t\treturn Math.max(0.04, byDistance - speedScale * 0.02);\n\t}\n\n\tfunction settleHandoffOverFrames(deltaY: number, frameCount: number) {\n\t\thandoffOffsetY.set(deltaY);\n\t\tupdateStyles();\n\n\t\tlet remainingFrames = Math.max(frameCount, 1);\n\t\tconst settle = () => {\n\t\t\tremainingFrames -= 1;\n\t\t\tif (remainingFrames <= 0) {\n\t\t\t\thandoffOffsetY.set(0);\n\t\t\t\tupdateStyles();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tframe.render(settle);\n\t\t};\n\n\t\tframe.render(settle);\n\t}\n\n\tfunction cancelPendingExit() {\n\t\tpendingExitVersion += 1;\n\t\tpendingExitMode = null;\n\t\tclearExitWaitHandles();\n\t}\n\n\tfunction commitModeImmediately(nextMode: LayerMode) {\n\t\tstopHandoffAnimation();\n\t\tmode.set(nextMode);\n\t\tupdateStyles();\n\t}\n\n\tfunction waitForAnimations(nextMode: LayerMode) {\n\t\tif (\n\t\t\tpendingExitMode === nextMode &&\n\t\t\t(exitWaitRaf !== null || exitWaitTimeout !== null)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tcancelPendingExit();\n\t\tpendingExitMode = nextMode;\n\t\tconst version = pendingExitVersion;\n\n\t\tconst completeExit = () => {\n\t\t\tif (version !== pendingExitVersion) return;\n\t\t\tclearExitWaitHandles();\n\t\t\tpendingExitMode = null;\n\n\t\t\tconst latest = Math.min(Math.max(rawScrollProgress.get(), 0), 1);\n\t\t\tconst stableMode = getTargetMode(\n\t\t\t\tlatest,\n\t\t\t\tnormStartValue.get(),\n\t\t\t\tnormEndValue.get(),\n\t\t\t);\n\t\t\tif (stableMode !== nextMode) return;\n\n\t\t\tcommitModeImmediately(nextMode);\n\t\t};\n\n\t\tif (!hasActiveContentAnimations()) {\n\t\t\tcompleteExit();\n\t\t\treturn;\n\t\t}\n\n\t\tconst tick = () => {\n\t\t\tif (version !== pendingExitVersion) return;\n\t\t\tif (!hasActiveContentAnimations()) {\n\t\t\t\tcompleteExit();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\texitWaitRaf = window.requestAnimationFrame(tick);\n\t\t};\n\n\t\texitWaitTimeout = window.setTimeout(() => {\n\t\t\tcompleteExit();\n\t\t}, EXIT_WAIT_TIMEOUT_MS);\n\t\texitWaitRaf = window.requestAnimationFrame(tick);\n\t}\n\n\tfunction getTargetMode(value: number, normStart: number, normEnd: number) {\n\t\tif (!stickySupported) {\n\t\t\tif (value <= normStart) return \"absolute-below\";\n\t\t\tif (value >= normEnd) return \"absolute-above\";\n\t\t\treturn \"absolute-below\";\n\t\t}\n\n\t\tconst current = mode.get();\n\t\tif (current === \"sticky\") {\n\t\t\tif (value < normStart - EXIT_HYSTERESIS) return \"absolute-below\";\n\t\t\tif (value > normEnd + EXIT_HYSTERESIS) return \"absolute-above\";\n\t\t\treturn \"sticky\";\n\t\t}\n\n\t\tif (current === \"absolute-below\") {\n\t\t\tif (value >= normStart + ENTER_HYSTERESIS) return \"sticky\";\n\t\t\treturn \"absolute-below\";\n\t\t}\n\n\t\tif (value <= normEnd - ENTER_HYSTERESIS) return \"sticky\";\n\t\treturn \"absolute-above\";\n\t}\n\n\tfunction getModeDecisionValue(\n\t\tvalue: number,\n\t\tnormStart: number,\n\t\tnormEnd: number,\n\t\tallowPrediction: boolean,\n\t) {\n\t\tconst now = performance.now();\n\t\tlet velocity = 0;\n\n\t\tif (hasScrollSample) {\n\t\t\tconst elapsed = Math.max(now - lastScrollSampleTime, 1);\n\t\t\tvelocity = (value - lastScrollSampleValue) / elapsed;\n\t\t}\n\n\t\tlastScrollSampleValue = value;\n\t\tlastScrollSampleTime = now;\n\t\thasScrollSample = true;\n\t\tlatestScrollVelocity = velocity;\n\n\t\tif (!allowPrediction || Math.abs(velocity) < PREDICT_MIN_VELOCITY) {\n\t\t\treturn value;\n\t\t}\n\n\t\tconst speed = Math.abs(velocity);\n\t\tconst speedScale = Math.min(speed / HIGH_VELOCITY_SKIP_HANDOFF, 1);\n\t\tconst lookaheadMs =\n\t\t\tPREDICT_LOOKAHEAD_MS +\n\t\t\tspeedScale * (MAX_PREDICT_LOOKAHEAD_MS - PREDICT_LOOKAHEAD_MS);\n\n\t\tconst predicted = Math.min(Math.max(value + velocity * lookaheadMs, 0), 1);\n\n\t\tconst currentMode = mode.get();\n\t\tif (currentMode === \"absolute-below\") {\n\t\t\tconst entryEdge = normStart + ENTER_HYSTERESIS;\n\t\t\tconst nearStart = Math.abs(value - entryEdge) <= PREDICT_ENTER_BAND;\n\t\t\tif (\n\t\t\t\tvelocity > 0 &&\n\t\t\t\tnearStart &&\n\t\t\t\tvalue < entryEdge &&\n\t\t\t\tpredicted >= entryEdge\n\t\t\t) {\n\t\t\t\treturn entryEdge;\n\t\t\t}\n\t\t}\n\n\t\tif (currentMode === \"absolute-above\") {\n\t\t\tconst entryEdge = normEnd - ENTER_HYSTERESIS;\n\t\t\tconst nearEnd = Math.abs(value - entryEdge) <= PREDICT_ENTER_BAND;\n\t\t\tif (\n\t\t\t\tvelocity < 0 &&\n\t\t\t\tnearEnd &&\n\t\t\t\tvalue > entryEdge &&\n\t\t\t\tpredicted <= entryEdge\n\t\t\t) {\n\t\t\t\treturn entryEdge;\n\t\t\t}\n\t\t}\n\n\t\tif (currentMode === \"sticky\") {\n\t\t\tconst exitTopEdge = normStart - EXIT_HYSTERESIS;\n\t\t\tconst exitBottomEdge = normEnd + EXIT_HYSTERESIS;\n\n\t\t\tconst nearTop = Math.abs(value - exitTopEdge) <= PREDICT_EXIT_BAND;\n\t\t\tif (\n\t\t\t\tvelocity < 0 &&\n\t\t\t\tnearTop &&\n\t\t\t\tvalue > exitTopEdge &&\n\t\t\t\tpredicted <= exitTopEdge\n\t\t\t) {\n\t\t\t\treturn exitTopEdge;\n\t\t\t}\n\n\t\t\tconst nearBottom = Math.abs(value - exitBottomEdge) <= PREDICT_EXIT_BAND;\n\t\t\tif (\n\t\t\t\tvelocity > 0 &&\n\t\t\t\tnearBottom &&\n\t\t\t\tvalue < exitBottomEdge &&\n\t\t\t\tpredicted >= exitBottomEdge\n\t\t\t) {\n\t\t\t\treturn exitBottomEdge;\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tfunction applyModeWithHandoff(nextMode: LayerMode) {\n\t\tif (!stickySupported) {\n\t\t\tstopHandoffAnimation();\n\t\t\tmode.set(nextMode);\n\t\t\trenderStyles();\n\t\t\treturn;\n\t\t}\n\n\t\tstopHandoffAnimation();\n\n\t\tconst prevRect = _internal.root.getBoundingClientRect();\n\t\tmode.set(nextMode);\n\t\tupdateStyles();\n\n\t\tconst nextRect = _internal.root.getBoundingClientRect();\n\t\tconst deltaY = prevRect.top - nextRect.top;\n\t\tif (Math.abs(deltaY) <= HANDOFF_MIN_DELTA_PX) {\n\t\t\thandoffOffsetY.set(0);\n\t\t\trenderStyles();\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tMath.abs(latestScrollVelocity) >= HIGH_VELOCITY_SKIP_HANDOFF ||\n\t\t\tMath.abs(deltaY) >= MAX_HANDOFF_DELTA_PX\n\t\t) {\n\t\t\tsettleHandoffOverFrames(deltaY, 2);\n\t\t\treturn;\n\t\t}\n\n\t\thandoffOffsetY.set(deltaY);\n\t\tupdateStyles();\n\t\tconst duration = getHandoffDuration(deltaY, latestScrollVelocity);\n\t\tif (duration <= 0) {\n\t\t\tsettleHandoffOverFrames(deltaY, 1);\n\t\t\treturn;\n\t\t}\n\n\t\thandoffAnimation = animate([\n\t\t\t[handoffOffsetY, 0, { duration, ease: HANDOFF_EASE }],\n\t\t]);\n\t\thandoffAnimation.then(() => {\n\t\t\tif (!handoffAnimation) return;\n\t\t\thandoffAnimation = null;\n\t\t\thandoffOffsetY.set(0);\n\t\t\trenderStyles();\n\t\t});\n\t}\n\n\tfunction syncFromScroll(value: number, allowHandoff: boolean) {\n\t\tconst clamped = Math.min(Math.max(value, 0), 1);\n\t\trawScrollProgress.set(clamped);\n\n\t\tconst normStart = normStartValue.get();\n\t\tconst normEnd = normEndValue.get();\n\t\tconst range = [normStart, normEnd] as [number, number];\n\t\tconst span = Math.max(normEnd - normStart, Number.EPSILON);\n\t\tconst normalizedProgress = Math.min(\n\t\t\tMath.max((clamped - normStart) / span, 0),\n\t\t\t1,\n\t\t);\n\n\t\tinRange.set(isInRange({ range, value: clamped }));\n\t\tbelowRange.set(clamped <= normStart);\n\t\taboveRange.set(clamped >= normEnd);\n\t\tprogress.set(normalizedProgress);\n\n\t\tconst decisionValue = getModeDecisionValue(\n\t\t\tclamped,\n\t\t\tnormStart,\n\t\t\tnormEnd,\n\t\t\tallowHandoff,\n\t\t);\n\t\tconst nextMode = getTargetMode(decisionValue, normStart, normEnd);\n\t\tconst currentMode = mode.get();\n\n\t\tif (currentMode === \"sticky\" && nextMode !== \"sticky\" && allowHandoff) {\n\t\t\twaitForAnimations(nextMode);\n\t\t\tupdateStyles();\n\t\t\treturn;\n\t\t}\n\n\t\tcancelPendingExit();\n\t\tif (nextMode === currentMode) {\n\t\t\tif (!allowHandoff) {\n\t\t\t\tstopHandoffAnimation();\n\t\t\t\tupdateStyles();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (allowHandoff) {\n\t\t\tapplyModeWithHandoff(nextMode);\n\t\t\treturn;\n\t\t}\n\n\t\tcommitModeImmediately(nextMode);\n\t}\n\n\tcreateEffect(() => {\n\t\tconst range = [_internal.start, _internal.end];\n\t\tconst maxPages = parallax.maxPages;\n\t\tconst normalizedRange = normalizeTuple(range as any, maxPages);\n\t\tconst [normStart, normEnd] = normalizedRange;\n\t\tnormStartValue.set(normStart);\n\t\tnormEndValue.set(normEnd);\n\n\t\tconst initialValue = parallax.scrollYProgress.get();\n\t\tsyncFromScroll(initialValue, false);\n\t\trenderStyles();\n\n\t\tconst unsubscribe = parallax.scrollYProgress.on(\"change\", (value) => {\n\t\t\tsyncFromScroll(value, true);\n\t\t});\n\n\t\treturn onCleanup(() => {\n\t\t\tunsubscribe();\n\t\t});\n\t});\n\n\tconst unsubHandoffOffset = handoffOffsetY.on(\"change\", (_) => {\n\t\trenderStyles();\n\t});\n\n\tfunction _animate(...args: Parameters<typeof animate>) {\n\t\tconst animation = animate(...args);\n\t\tregisterContentAnimation(animation);\n\t\treturn animation;\n\t}\n\n\tonCleanup(() => {\n\t\tcancelPendingExit();\n\t\tstopHandoffAnimation();\n\t\tunsubHandoffOffset();\n\t});\n\n\treturn [progress, { animate: _animate }] as const;\n}\n\nconst ParallaxStickyLayerContextState = createContext(\n\tinitializeParallaxStickyLayerContext,\n);\n\nexport const provideParallaxStickyLayerContext = (\n\tinitialState: Omit<CreateContextOptions, \"root\">,\n\telement: WalkableNode,\n): ParallaxStickyLayerContext => {\n\tconst props = mergeProps(initialState, { root: element });\n\treturn provide(ParallaxStickyLayerContextState, props, element);\n};\n\nexport const useParallaxStickyLayerContext = (\n\tcontext: ParallaxStickyLayerContext,\n) => {\n\treturn context;\n};\n\nexport const useParallaxStickyLayer = (\n\telement: HTMLElement & ICustomElement,\n) => {\n\tconst context: ParallaxStickyLayerContext = consume(\n\t\tParallaxStickyLayerContextState,\n\t\telement,\n\t);\n\n\tif (!context) {\n\t\tthrow console.error(\n\t\t\t\"ParallaxContext not found! Please ensure to wrap your custom element with parallax-container element.\",\n\t\t);\n\t}\n\n\treturn useParallaxStickyLayerContext(context);\n};\n\nexport const withParallaxStickyLayerContext = createWithElementContext<\n\ttypeof ParallaxStickyLayerContextState,\n\tParallaxStickyLayerContext\n>(ParallaxStickyLayerContextState);\n\nexport const getParallaxStickyLayerContext = (element: Element) => {\n\tconst context = getContextFromProvider<ParallaxStickyLayerContext>(\n\t\tParallaxStickyLayerContextState,\n\t\telement,\n\t);\n\treturn useParallaxStickyLayerContext(context);\n};\n","import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\nimport { provideParallaxStickyLayerContext } from \"../../hooks/index.js\";\n\nexport type Props = {\n start: number;\n end: number;\n};\n\nexport const Name = `parallax-sticky-layer`;\n\nexport const Component: CorrectComponentType<Props> = (props, { element }) => {\n if (!props.start)\n return console.warn(\n `${Name}: requires start attribute to be set!`,\n element,\n );\n if (!props.end)\n return console.warn(`${Name}: requires end attribute to be set!`, element);\n if (props.end <= props.start)\n return console.warn(\n `${Name}: the start attribute must be less than the end attribute!`,\n element,\n );\n if (props.start < 1 || props.end < 1)\n return console.warn(\n `${Name}: The start and end attributes must be greater than or equal to 1!`,\n element,\n );\n provideParallaxStickyLayerContext(props, element);\n};\n","import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\nimport {\n onCleanup,\n createEffect,\n createMemo,\n splitProps,\n mergeProps,\n} from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\nimport {\n motionValue,\n transformValue,\n transform as mTransform,\n styleEffect,\n frame,\n type MotionValue,\n} from \"motion\";\n\nimport { useParallaxStickyLayer } from \"../../hooks/index.js\";\nimport { getActiveBreakpoints, getLastTruthyIndex } from \"../../utils.js\";\n\ntype AnimatableArray = Array<string | number> | null;\n\nexport type Props = {\n breakpoints: string[];\n range: number[] | number[][];\n y: AnimatableArray | AnimatableArray[];\n x: AnimatableArray | AnimatableArray[];\n scale: AnimatableArray | AnimatableArray[];\n rotate: AnimatableArray | AnimatableArray[];\n opacity: AnimatableArray | AnimatableArray[];\n backgroundColor: AnimatableArray | AnimatableArray[];\n borderRadius: AnimatableArray | AnimatableArray[];\n};\n\ntype ActiveProps = {\n range: number[];\n y: AnimatableArray;\n x: AnimatableArray;\n scale: AnimatableArray;\n rotate: AnimatableArray;\n opacity: AnimatableArray;\n backgroundColor: AnimatableArray;\n borderRadius: AnimatableArray;\n};\n\nfunction keysFromObject<T extends object>(object: T): (keyof T)[] {\n return Object.keys(object) as (keyof T)[];\n}\n\nexport const Name = `parallax-animation`;\n\nexport const PROPS = {\n breakpoints: [\"\"],\n range: [0, 1],\n y: null,\n x: null,\n scale: null,\n rotate: null,\n opacity: null,\n color: null,\n backgroundColor: null,\n borderRadius: null,\n};\n\nconst PROP_DEFAULTS = {\n y: \"0%\",\n x: \"0%\",\n scale: 1,\n rotate: 0,\n opacity: null,\n color: null,\n backgroundColor: null,\n borderRadius: null,\n};\n\nconst KEYS = Object.keys(PROPS);\n\nconst isNestedAnimatableArray = (\n values: AnimatableArray | AnimatableArray[],\n): values is AnimatableArray[] => {\n return (\n Array.isArray(values) && (Array.isArray(values[0]) || values[0] === null)\n );\n};\n\nconst flattenAnimatableArray = (\n value: AnimatableArray | AnimatableArray[],\n index: number = 0,\n) => {\n if (isNestedAnimatableArray(value)) {\n return value[index]!;\n }\n return value;\n};\n\nexport const Component: CorrectComponentType<Props> = (props, { element }) => {\n if (\n Object.keys(props).some(\n (key) => KEYS.includes(key) && !Array.isArray(Reflect.get(props, key)),\n )\n )\n return console.warn(\n `parallax-animate: At least one of ${KEYS.join(\",\")} properties is required and must be an array of values!`,\n element,\n );\n\n const messages = Object.entries(props).reduce((messages, [key, value]) => {\n if (!KEYS.includes(key)) return messages;\n if (value && value.length !== props.range.length) {\n return messages.concat(\n `${key} attribute must have the same length as range attribute!`,\n );\n }\n return messages;\n }, [] as string[]);\n\n if (messages.length)\n return console.warn(\n element,\n `\\nparallax-animate: Please fix the following issues:\\n${messages.join(\"\\n\")}`,\n );\n\n const [progress, { animate }] = useParallaxStickyLayer(element);\n\n const [activeBreakpoints, setActiveBreakpoints] = createStore<boolean[]>(\n getActiveBreakpoints(props.breakpoints),\n );\n const activeBreakpointIndex = createMemo(() =>\n getLastTruthyIndex(activeBreakpoints),\n );\n\n const [_, importantProps] = splitProps(props, [\"breakpoints\"]);\n const animateableProps = mergeProps(importantProps, {});\n\n const activeProps = createMemo<ActiveProps>(() => {\n const index = activeBreakpointIndex();\n\n if (index === -1) {\n const { breakpoints, ...active } = PROPS;\n return active;\n }\n\n const keys = keysFromObject(animateableProps);\n\n const active = keys.reduce((active, key) => {\n const value = animateableProps[key];\n if (isNestedAnimatableArray(value)) {\n const flattenedValue = flattenAnimatableArray(value, index);\n return {\n ...active,\n [key]: flattenedValue,\n };\n }\n return {\n ...active,\n [key]: value,\n };\n }, {} as ActiveProps);\n\n return active;\n });\n\n createEffect(() => {\n const breakpoints = props.breakpoints;\n const controller = new AbortController();\n\n for (let i = 0; i < breakpoints.length; i++) {\n const query = breakpoints[i];\n if (!query) continue;\n const mediaQuery = window.matchMedia(query);\n mediaQuery.addEventListener(\n \"change\",\n (e) => setActiveBreakpoints(i, e.matches),\n { signal: controller.signal },\n );\n }\n\n return onCleanup(() => {\n controller.abort();\n });\n });\n\n element.style.willChange = \"transform\";\n if (\n window.getComputedStyle(element).getPropertyValue(\"display\") === \"inline\"\n ) {\n element.style.display = \"block\";\n }\n\n createEffect(() => {\n const active = activeProps();\n const { range, ...props } = active;\n const valueSubscribers: VoidFunction[] = [];\n\n const progressValue = Object.keys(PROP_DEFAULTS).reduce(\n (values, key) => {\n const fallback = Reflect.get(PROP_DEFAULTS, key);\n const valueRange = Reflect.get(props, key);\n if (valueRange?.length === range.length) {\n const transform = mTransform(range, valueRange);\n const value = motionValue(transform(progress.get()));\n const unsub = progress.on(\"change\", (latest) => {\n value.set(transform(latest));\n });\n valueSubscribers.push(unsub);\n values[key] = value;\n } else values[key] = fallback;\n return values;\n },\n {} as Record<string, any>,\n );\n\n const animated = Object.keys(progressValue).reduce(\n (obj, key) => {\n const v = progressValue[key];\n Reflect.set(\n obj,\n key,\n motionValue(typeof v === \"object\" && v !== null ? v.get() : v),\n );\n return obj;\n },\n {} as Record<string, MotionValue>,\n );\n\n const transform = transformValue(\n () =>\n `translate(${animated.x?.get()}, ${animated.y?.get()}) scale(${animated.scale?.get()}) rotate(${animated.rotate?.get()}deg)`,\n );\n\n function animateValues() {\n const sequence = Object.keys(animated)\n .map((key) => {\n let v = progressValue[key]?.get?.();\n if (typeof v === \"undefined\") return null;\n return [animated[key], v, { at: \"<\" }];\n })\n .filter((v) => v !== null);\n //@ts-ignore\n animate(sequence);\n }\n\n function scheduleAnimation() {\n frame.update(animateValues);\n }\n\n const unsub = progress.on(\"change\", (_) => {\n scheduleAnimation();\n });\n\n const styledValues = Object.keys(animated)\n .filter(\n (key) =>\n key !== \"y\" && key !== \"x\" && key !== \"rotate\" && key !== \"scale\",\n )\n .reduce((obj, key) => {\n Reflect.set(obj, key, animated[key]);\n return obj;\n }, {});\n\n const unstyle = styleEffect(element, {\n transform,\n ...styledValues,\n });\n\n return onCleanup(() => {\n unstyle();\n unsub();\n valueSubscribers.forEach((unsub) => unsub());\n Object.values(animated).forEach((value) => {\n value.destroy();\n });\n Object.values(progressValue).forEach((value) => {\n value?.destroy?.();\n });\n transform.destroy();\n });\n });\n};\n","import {\n customShadowlessElement,\n correctElementType,\n} from \"@brytdesigns/web-component-core/utils\";\n\nimport {\n ParallaxContainer,\n ParallaxStickyLayer,\n ParallaxAnimation,\n} from \"./components/index.js\";\n\nexport type ParallaxContainerProps = ParallaxContainer.Props;\nexport type ParallaxStickyLayerProps = ParallaxStickyLayer.Props;\nexport type ParallaxAnimationProps = ParallaxAnimation.Props;\n\ncustomShadowlessElement(\n ParallaxContainer.Name,\n {\n maxPages: 2,\n },\n correctElementType(ParallaxContainer.Component),\n);\n\ncustomShadowlessElement(\n ParallaxStickyLayer.Name,\n {\n start: 1,\n end: 2,\n },\n correctElementType(ParallaxStickyLayer.Component),\n);\n\ncustomShadowlessElement(\n ParallaxAnimation.Name,\n ParallaxAnimation.PROPS,\n correctElementType(ParallaxAnimation.Component),\n);\n\nexport {\n useParallax,\n getParallaxContext,\n useParallaxStickyLayer,\n getParallaxStickyLayerContext,\n withParallaxElementContext,\n withParallaxStickyLayerContext,\n} from \"./hooks/index.js\";\n"]}
1
+ {"version":3,"sources":["../../src/components/parallax-container/index.ts","../../src/hooks/useParallax.ts","../../src/utils.ts","../../src/hooks/useParallaxStickyLayer.ts","../../src/components/parallax-sticky-layer/index.ts","../../src/components/parallax-animation/index.ts","../../src/index.ts"],"names":["info","splitProps","motionValue","transform","isInRange","createEffect","mTransform","onCleanup","createContext","mergeProps","provide","consume","createWithElementContext","getContextFromProvider","Component","Name","messages","animate","createStore","active","props","unsub","transformValue","frame","_"],"mappings":"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","file":"index.js","sourcesContent":["import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\nimport { provideParallaxContext } from \"../../hooks/index.js\";\n\nexport type Props = {\n maxPages: number;\n};\n\nexport const Name = `parallax-container`;\n\nexport const Component: CorrectComponentType<Props> = (props, { element }) => {\n if (!props.maxPages)\n return console.warn(\n `${Name}: requires max-pages attribute to be set!`,\n element,\n );\n if (props.maxPages < 1)\n return console.warn(\n `${Name}: max-pages must be greater than or equal to 1!`,\n element,\n );\n provideParallaxContext(props, element);\n};\n","import {\n onCleanup,\n createEffect,\n splitProps,\n mergeProps,\n batch,\n} from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\nimport {\n getContextFromProvider,\n createWithElementContext,\n} from \"@brytdesigns/web-component-core/utils\";\nimport {\n type ICustomElement,\n createContext,\n provide,\n consume,\n} from \"component-register\";\nimport { scroll, motionValue } from \"motion\";\n\ntype CreateContextOptions = {\n root: HTMLElement & ICustomElement;\n maxPages: number;\n};\n\ntype WalkableNode = Parameters<typeof provide>[2];\n\ntype ParallaxContext = ReturnType<typeof initializeParallaxContext>;\n\nfunction initializeParallaxContext(props: CreateContextOptions) {\n const [_internal, _state] = splitProps(props, [\"root\"]);\n\n const scrollYProgress = motionValue(-1);\n const scrollY = motionValue(-1);\n const [info, setInfo] = createStore({\n offset: [-1, -1],\n scrollLength: -1,\n });\n\n window.addEventListener(\"resize\", () => {});\n\n createEffect(() => {\n const pages = _state.maxPages;\n\n _internal.root.style.height = `${pages * 100}vh`;\n _internal.root.style.width = `100%`;\n _internal.root.style.position = \"relative\";\n if (!_internal.root.style.display) {\n _internal.root.style.display = \"block\";\n }\n\n const remove = scroll(\n (_, info) => {\n const { y } = info;\n\n scrollYProgress.set(y.progress);\n scrollY.set(y.current);\n batch(() => {\n setInfo(\"offset\", 0, y.offset?.at(0) || 0);\n setInfo(\"offset\", 1, y.offset?.at(1) || 0);\n setInfo(\"scrollLength\", y.scrollLength);\n });\n },\n {\n target: _internal.root,\n axis: \"y\",\n offset: [\"start start\", \"end end\"],\n },\n );\n\n onCleanup(() => {\n if (remove) {\n remove();\n }\n scrollYProgress.destroy();\n scrollY.destroy();\n });\n });\n\n return mergeProps(_state, {\n scrollYProgress,\n scrollY,\n info,\n });\n}\n\nconst ParallaxContextState = createContext(initializeParallaxContext);\n\nexport const provideParallaxContext = (\n initialState: Omit<CreateContextOptions, \"root\">,\n element: WalkableNode,\n): ParallaxContext => {\n const props = mergeProps(initialState, { root: element });\n return provide(ParallaxContextState, props, element);\n};\n\nexport const useParallaxContext = (context: ParallaxContext) => {\n return context;\n};\n\nexport const useParallax = (element: HTMLElement & ICustomElement) => {\n const context: ParallaxContext = consume(ParallaxContextState, element);\n\n if (!context) {\n throw console.error(\n \"ParallaxContext not found! Please ensure to wrap your custom element with parallax-container element.\",\n );\n }\n\n return useParallaxContext(context);\n};\n\nexport const withParallaxElementContext = createWithElementContext<\n typeof ParallaxContextState,\n ParallaxContext\n>(ParallaxContextState);\n\nexport const getParallaxContext = (element: Element) => {\n const context = getContextFromProvider<ParallaxContext>(\n ParallaxContextState,\n element,\n );\n return useParallaxContext(context);\n};\n","export function normalizeTuple(range: [number, number], max: number) {\n if (max <= 1) {\n throw new Error(\"The maximum value must be greater than 1.\");\n }\n\n const [start, end] = range;\n const normalizedStart = (start - 1) / (max - 1);\n const normalizedEnd = (end - 1) / (max - 1);\n\n return [normalizedStart, normalizedEnd] as const;\n}\n\nexport function isInRange({\n range: [start, end],\n value,\n}: {\n range: [number, number];\n value: number;\n}) {\n return start <= value && end >= value;\n}\n\nexport function getLastMatchingMediaQueryIndex(queries: string[]): number {\n let lastMatchIndex = -1;\n\n for (let i = 0; i < queries.length; i++) {\n const query = queries[i];\n if (typeof query !== \"string\") continue;\n if (window.matchMedia(query).matches) {\n lastMatchIndex = i;\n }\n }\n\n return lastMatchIndex;\n}\n\nexport function getActiveBreakpoints(queries: string[]): boolean[] {\n return queries.map((query) => window.matchMedia(query).matches);\n}\n\nexport function getLastTruthyIndex(values: boolean[]): number {\n for (let i = values.length - 1; i >= 0; i--) {\n if (values[i]) return i;\n }\n return -1;\n}\nexport function getLastValidValue<T>(\n arr: (T | null)[],\n index: number,\n): T | null {\n if (arr[index] != null) return arr[index]!;\n\n for (let i = index - 1; i >= 0; i--) {\n if (arr[i] != null) return arr[i]!;\n }\n\n return null;\n}\n","import { onCleanup, createEffect, splitProps, mergeProps } from \"solid-js\";\nimport {\n\ttype ICustomElement,\n\tcreateContext,\n\tprovide,\n\tconsume,\n} from \"component-register\";\nimport {\n\tmotionValue,\n\ttransformValue,\n\ttransform as mTransform,\n\tframe,\n\tanimate,\n\ttype AnimationPlaybackControlsWithThen,\n} from \"motion\";\nimport { awaitAllAnimations } from \"@brytdesigns/web-component-core/animation\";\nimport { abortablePromise } from \"@brytdesigns/web-component-core/promise\";\nimport {\n\tgetContextFromProvider,\n\tcreateWithElementContext,\n} from \"@brytdesigns/web-component-core/utils\";\n\nimport { useParallax } from \"./useParallax\";\nimport { normalizeTuple, isInRange } from \"../utils\";\n\ntype CreateContextOptions = {\n\troot: HTMLElement & ICustomElement;\n\tstart: number;\n\tend: number;\n};\n\ntype WalkableNode = Parameters<typeof provide>[2];\n\ntype ParallaxStickyLayerContext = ReturnType<\n\ttypeof initializeParallaxStickyLayerContext\n>;\n\nfunction initializeParallaxStickyLayerContext(props: CreateContextOptions) {\n\tconst [_internal, _state] = splitProps(props, [\"root\", \"start\", \"end\"]);\n\tconst parallax = useParallax(_internal.root);\n\n\tconst progress = motionValue(-1);\n\tconst inRange = motionValue(false);\n\tconst belowRange = motionValue(false);\n\tconst aboveRange = motionValue(false);\n\n\tconst position = transformValue(() =>\n\t\tinRange.get() ? \"sticky\" : \"absolute\",\n\t);\n\tconst transform = transformValue(() => {\n\t\tconst isInRange = inRange.get();\n\t\tconst isBelowRange = belowRange.get();\n\t\tconst isAboveRange = aboveRange.get();\n\t\tif (isInRange) return \"none\";\n\t\tif (isBelowRange) return `translate(0px, ${(_internal.start - 1) * 100}vh)`;\n\t\tif (isAboveRange) return `translate(0px, ${(_internal.end - 1) * 100}vh)`;\n\t});\n\tconst animations = motionValue<AnimationPlaybackControlsWithThen[]>([]);\n\n\tconst styles = transformValue(() => ({\n\t\tposition: position.get(),\n\t\ttransform: transform.get(),\n\t}));\n\n\t_internal.root.style.top = \"0px\";\n\t_internal.root.style.right = \"0px\";\n\t_internal.root.style.bottom = \"0px\";\n\t_internal.root.style.left = \"0px\";\n\t_internal.root.style.height = `100dvh`;\n\t_internal.root.style.overflowX = \"hidden\";\n\t_internal.root.style.maxWidth = \"100%\";\n\tif (window.getComputedStyle(_internal.root).display === \"inline\") {\n\t\t_internal.root.style.display = \"block\";\n\t}\n\n\tcreateEffect(() => {\n\t\tconst range = [_internal.start, _internal.end];\n\t\tconst maxPages = parallax.maxPages;\n\t\tconst normalizedRange = normalizeTuple(range as any, maxPages);\n\t\tconst [normStart, normEnd] = normalizedRange;\n\t\tconst transformer = mTransform(normalizedRange as any, [0, 1]);\n\n\t\tconst unsubscribe = parallax.scrollYProgress.on(\"change\", (value) => {\n\t\t\tinRange.set(isInRange({ range: normalizedRange as any, value }));\n\t\t\tbelowRange.set(value <= normStart);\n\t\t\taboveRange.set(value >= normEnd);\n\t\t\tprogress.set(transformer(value));\n\t\t});\n\n\t\treturn onCleanup(() => {\n\t\t\tunsubscribe();\n\t\t});\n\t});\n\n\tfunction updateStyles() {\n\t\tconst s = styles.get();\n\t\t_internal.root.style.position = s.position;\n\t\t_internal.root.style.transform = s.transform;\n\t}\n\n\tfunction renderStyles() {\n\t\tframe.render(updateStyles);\n\t}\n\n\tfunction waitForAnimations() {\n\t\tconst a = animations.get();\n\t\tconst controller = new AbortController();\n\t\tabortablePromise(awaitAllAnimations(a), controller.signal).then(() => {\n\t\t\tanimations.set([]);\n\t\t\trenderStyles();\n\t\t});\n\t}\n\n\tconst unsubStyles = styles.on(\"change\", (_) => {\n\t\tif (progress.get() === 1 || progress.get() === 0)\n\t\t\treturn waitForAnimations();\n\t\tanimations.set([]);\n\t\trenderStyles();\n\t});\n\n\tfunction _animate(...args: Parameters<typeof animate>) {\n\t\tconst animation = animate(...args);\n\t\tanimations.set([...animations.get(), animation]);\n\t\treturn animation;\n\t}\n\n\tonCleanup(() => {\n\t\tunsubStyles();\n\t});\n\n\treturn [progress, { animate: _animate }] as const;\n}\n\nconst ParallaxStickyLayerContextState = createContext(\n\tinitializeParallaxStickyLayerContext,\n);\n\nexport const provideParallaxStickyLayerContext = (\n\tinitialState: Omit<CreateContextOptions, \"root\">,\n\telement: WalkableNode,\n): ParallaxStickyLayerContext => {\n\tconst props = mergeProps(initialState, { root: element });\n\treturn provide(ParallaxStickyLayerContextState, props, element);\n};\n\nexport const useParallaxStickyLayerContext = (\n\tcontext: ParallaxStickyLayerContext,\n) => {\n\treturn context;\n};\n\nexport const useParallaxStickyLayer = (\n\telement: HTMLElement & ICustomElement,\n) => {\n\tconst context: ParallaxStickyLayerContext = consume(\n\t\tParallaxStickyLayerContextState,\n\t\telement,\n\t);\n\n\tif (!context) {\n\t\tthrow console.error(\n\t\t\t\"ParallaxContext not found! Please ensure to wrap your custom element with parallax-container element.\",\n\t\t);\n\t}\n\n\treturn useParallaxStickyLayerContext(context);\n};\n\nexport const withParallaxStickyLayerContext = createWithElementContext<\n\ttypeof ParallaxStickyLayerContextState,\n\tParallaxStickyLayerContext\n>(ParallaxStickyLayerContextState);\n\nexport const getParallaxStickyLayerContext = (element: Element) => {\n\tconst context = getContextFromProvider<ParallaxStickyLayerContext>(\n\t\tParallaxStickyLayerContextState,\n\t\telement,\n\t);\n\treturn useParallaxStickyLayerContext(context);\n};\n","import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\nimport { provideParallaxStickyLayerContext } from \"../../hooks/index.js\";\n\nexport type Props = {\n start: number;\n end: number;\n};\n\nexport const Name = `parallax-sticky-layer`;\n\nexport const Component: CorrectComponentType<Props> = (props, { element }) => {\n if (!props.start)\n return console.warn(\n `${Name}: requires start attribute to be set!`,\n element,\n );\n if (!props.end)\n return console.warn(`${Name}: requires end attribute to be set!`, element);\n if (props.end <= props.start)\n return console.warn(\n `${Name}: the start attribute must be less than the end attribute!`,\n element,\n );\n if (props.start < 1 || props.end < 1)\n return console.warn(\n `${Name}: The start and end attributes must be greater than or equal to 1!`,\n element,\n );\n provideParallaxStickyLayerContext(props, element);\n};\n","import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\nimport {\n\tframe,\n\ttype MotionValue,\n\tmotionValue,\n\ttransform as mTransform,\n\tstyleEffect,\n\ttransformValue,\n} from \"motion\";\nimport {\n\tcreateEffect,\n\tcreateMemo,\n\tmergeProps,\n\tonCleanup,\n\tsplitProps,\n} from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\n\nimport { useParallaxStickyLayer } from \"../../hooks/index.js\";\nimport { getActiveBreakpoints, getLastTruthyIndex } from \"../../utils.js\";\n\ntype AnimatableArray = Array<string | number> | null;\n\nexport type Props = {\n\tbreakpoints: string[];\n\trange: number[] | number[][];\n\ty: AnimatableArray | AnimatableArray[];\n\tx: AnimatableArray | AnimatableArray[];\n\tscale: AnimatableArray | AnimatableArray[];\n\trotate: AnimatableArray | AnimatableArray[];\n\topacity: AnimatableArray | AnimatableArray[];\n\tbackgroundColor: AnimatableArray | AnimatableArray[];\n\tborderRadius: AnimatableArray | AnimatableArray[];\n};\n\ntype ActiveProps = {\n\trange: number[];\n\ty: AnimatableArray;\n\tx: AnimatableArray;\n\tscale: AnimatableArray;\n\trotate: AnimatableArray;\n\topacity: AnimatableArray;\n\tbackgroundColor: AnimatableArray;\n\tborderRadius: AnimatableArray;\n};\n\nfunction keysFromObject<T extends object>(object: T): (keyof T)[] {\n\treturn Object.keys(object) as (keyof T)[];\n}\n\nexport const Name = `parallax-animation`;\n\nexport const PROPS = {\n\tbreakpoints: [\"\"],\n\trange: [0, 1],\n\ty: null,\n\tx: null,\n\tscale: null,\n\trotate: null,\n\topacity: null,\n\tcolor: null,\n\tbackgroundColor: null,\n\tborderRadius: null,\n};\n\nconst PROP_DEFAULTS = {\n\ty: \"0%\",\n\tx: \"0%\",\n\tscale: 1,\n\trotate: 0,\n\topacity: null,\n\tcolor: null,\n\tbackgroundColor: null,\n\tborderRadius: null,\n};\n\nconst KEYS = Object.keys(PROPS);\n\nconst isNestedAnimatableArray = (\n\tvalues: AnimatableArray | AnimatableArray[],\n): values is AnimatableArray[] => {\n\treturn (\n\t\tArray.isArray(values) && (Array.isArray(values[0]) || values[0] === null)\n\t);\n};\n\nconst flattenAnimatableArray = (\n\tvalue: AnimatableArray | AnimatableArray[],\n\tindex: number = 0,\n) => {\n\tif (isNestedAnimatableArray(value)) {\n\t\treturn value[index]!;\n\t}\n\treturn value;\n};\n\nexport const Component: CorrectComponentType<Props> = (props, { element }) => {\n\tif (\n\t\tObject.keys(props).some(\n\t\t\t(key) => KEYS.includes(key) && !Array.isArray(Reflect.get(props, key)),\n\t\t)\n\t)\n\t\treturn console.warn(\n\t\t\t`parallax-animate: At least one of ${KEYS.join(\",\")} properties is required and must be an array of values!`,\n\t\t\telement,\n\t\t);\n\n\tconst messages = Object.entries(props).reduce((messages, [key, value]) => {\n\t\tif (!KEYS.includes(key)) return messages;\n\t\tif (value && value.length !== props.range.length) {\n\t\t\treturn messages.concat(\n\t\t\t\t`${key} attribute must have the same length as range attribute!`,\n\t\t\t);\n\t\t}\n\t\treturn messages;\n\t}, [] as string[]);\n\n\tif (messages.length)\n\t\treturn console.warn(\n\t\t\telement,\n\t\t\t`\\nparallax-animate: Please fix the following issues:\\n${messages.join(\"\\n\")}`,\n\t\t);\n\n\tconst [progress, { animate }] = useParallaxStickyLayer(element);\n\n\tconst [activeBreakpoints, setActiveBreakpoints] = createStore<boolean[]>(\n\t\tgetActiveBreakpoints(props.breakpoints),\n\t);\n\tconst activeBreakpointIndex = createMemo(() =>\n\t\tgetLastTruthyIndex(activeBreakpoints),\n\t);\n\n\tconst [_, importantProps] = splitProps(props, [\"breakpoints\"]);\n\tconst animateableProps = mergeProps(importantProps, {});\n\n\tconst activeProps = createMemo<ActiveProps>(() => {\n\t\tconst index = activeBreakpointIndex();\n\n\t\tif (index === -1) {\n\t\t\tconst { breakpoints, ...active } = PROPS;\n\t\t\treturn active;\n\t\t}\n\n\t\tconst keys = keysFromObject(animateableProps);\n\n\t\tconst active = keys.reduce((active, key) => {\n\t\t\tconst value = animateableProps[key];\n\t\t\tif (isNestedAnimatableArray(value)) {\n\t\t\t\tconst flattenedValue = flattenAnimatableArray(value, index);\n\t\t\t\treturn {\n\t\t\t\t\t...active,\n\t\t\t\t\t[key]: flattenedValue,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...active,\n\t\t\t\t[key]: value,\n\t\t\t};\n\t\t}, {} as ActiveProps);\n\n\t\treturn active;\n\t});\n\n\tcreateEffect(() => {\n\t\tconst breakpoints = props.breakpoints;\n\t\tconst controller = new AbortController();\n\n\t\tfor (let i = 0; i < breakpoints.length; i++) {\n\t\t\tconst query = breakpoints[i];\n\t\t\tif (!query) continue;\n\t\t\tconst mediaQuery = window.matchMedia(query);\n\t\t\tmediaQuery.addEventListener(\n\t\t\t\t\"change\",\n\t\t\t\t(e) => setActiveBreakpoints(i, e.matches),\n\t\t\t\t{ signal: controller.signal },\n\t\t\t);\n\t\t}\n\n\t\treturn onCleanup(() => {\n\t\t\tcontroller.abort();\n\t\t});\n\t});\n\n\telement.style.willChange = \"transform\";\n\tif (\n\t\twindow.getComputedStyle(element).getPropertyValue(\"display\") === \"inline\"\n\t) {\n\t\telement.style.display = \"block\";\n\t}\n\n\tcreateEffect(() => {\n\t\tconst active = activeProps();\n\t\tconst { range, ...props } = active;\n\t\tconst valueSubscribers: VoidFunction[] = [];\n\t\tlet disposed = false;\n\n\t\tconst progressValue = Object.keys(PROP_DEFAULTS).reduce(\n\t\t\t(values, key) => {\n\t\t\t\tconst fallback = Reflect.get(PROP_DEFAULTS, key);\n\t\t\t\tconst valueRange = Reflect.get(props, key);\n\t\t\t\tif (valueRange?.length === range.length) {\n\t\t\t\t\tconst transform = mTransform(range, valueRange);\n\t\t\t\t\tconst value = motionValue(transform(progress.get()));\n\t\t\t\t\tconst unsub = progress.on(\"change\", (latest) => {\n\t\t\t\t\t\tvalue.set(transform(latest));\n\t\t\t\t\t});\n\t\t\t\t\tvalueSubscribers.push(unsub);\n\t\t\t\t\tvalues[key] = value;\n\t\t\t\t} else values[key] = fallback;\n\t\t\t\treturn values;\n\t\t\t},\n\t\t\t{} as Record<string, any>,\n\t\t);\n\n\t\tconst animated = Object.keys(progressValue).reduce(\n\t\t\t(obj, key) => {\n\t\t\t\tconst v = progressValue[key];\n\t\t\t\tReflect.set(\n\t\t\t\t\tobj,\n\t\t\t\t\tkey,\n\t\t\t\t\tmotionValue(typeof v === \"object\" && v !== null ? v.get() : v),\n\t\t\t\t);\n\t\t\t\treturn obj;\n\t\t\t},\n\t\t\t{} as Record<string, MotionValue>,\n\t\t);\n\n\t\tconst transform = transformValue(\n\t\t\t() =>\n\t\t\t\t`translate(${animated.x?.get()}, ${animated.y?.get()}) scale(${animated.scale?.get()}) rotate(${animated.rotate?.get()}deg)`,\n\t\t);\n\n\t\tfunction animateValues() {\n\t\t\tif (disposed) return;\n\n\t\t\tconst sequence = Object.keys(animated)\n\t\t\t\t.map((key) => {\n\t\t\t\t\tconst subject = animated[key];\n\t\t\t\t\tconst v = progressValue[key]?.get?.();\n\t\t\t\t\tif (!subject) return null;\n\t\t\t\t\tif (typeof v === \"undefined\" || v === null) return null;\n\t\t\t\t\tif (typeof v !== \"string\" && typeof v !== \"number\") return null;\n\t\t\t\t\treturn [animated[key], v, { at: \"<\" }];\n\t\t\t\t})\n\t\t\t\t.filter((v) => v !== null);\n\n\t\t\tif (sequence.length === 0) return;\n\t\t\t//@ts-expect-error\n\t\t\tanimate(sequence);\n\t\t}\n\n\t\tfunction scheduleAnimation() {\n\t\t\tframe.update(animateValues);\n\t\t}\n\n\t\tconst unsub = progress.on(\"change\", (_) => {\n\t\t\tscheduleAnimation();\n\t\t});\n\n\t\tconst styledValues = Object.keys(animated)\n\t\t\t.filter(\n\t\t\t\t(key) =>\n\t\t\t\t\tkey !== \"y\" && key !== \"x\" && key !== \"rotate\" && key !== \"scale\",\n\t\t\t)\n\t\t\t.reduce((obj, key) => {\n\t\t\t\tReflect.set(obj, key, animated[key]);\n\t\t\t\treturn obj;\n\t\t\t}, {});\n\n\t\tconst unstyle = styleEffect(element, {\n\t\t\ttransform,\n\t\t\t...styledValues,\n\t\t});\n\n\t\treturn onCleanup(() => {\n\t\t\tdisposed = true;\n\t\t\tunstyle();\n\t\t\tunsub();\n\t\t\tvalueSubscribers.forEach((unsub) => {\n\t\t\t\tunsub();\n\t\t\t});\n\t\t\tObject.values(animated).forEach((value) => {\n\t\t\t\tvalue.destroy();\n\t\t\t});\n\t\t\tObject.values(progressValue).forEach((value) => {\n\t\t\t\tvalue?.destroy?.();\n\t\t\t});\n\t\t\ttransform.destroy();\n\t\t});\n\t});\n};\n","import {\n customShadowlessElement,\n correctElementType,\n} from \"@brytdesigns/web-component-core/utils\";\n\nimport {\n ParallaxContainer,\n ParallaxStickyLayer,\n ParallaxAnimation,\n} from \"./components/index.js\";\n\nexport type ParallaxContainerProps = ParallaxContainer.Props;\nexport type ParallaxStickyLayerProps = ParallaxStickyLayer.Props;\nexport type ParallaxAnimationProps = ParallaxAnimation.Props;\n\ncustomShadowlessElement(\n ParallaxContainer.Name,\n {\n maxPages: 2,\n },\n correctElementType(ParallaxContainer.Component),\n);\n\ncustomShadowlessElement(\n ParallaxStickyLayer.Name,\n {\n start: 1,\n end: 2,\n },\n correctElementType(ParallaxStickyLayer.Component),\n);\n\ncustomShadowlessElement(\n ParallaxAnimation.Name,\n ParallaxAnimation.PROPS,\n correctElementType(ParallaxAnimation.Component),\n);\n\nexport {\n useParallax,\n getParallaxContext,\n useParallaxStickyLayer,\n getParallaxStickyLayerContext,\n withParallaxElementContext,\n withParallaxStickyLayerContext,\n} from \"./hooks/index.js\";\n"]}
@@ -1,6 +1,6 @@
1
+ import { transform, motionValue, transformValue, styleEffect, frame } from 'motion';
1
2
  import { createMemo, splitProps, mergeProps, createEffect, onCleanup } from 'solid-js';
2
3
  import { createStore } from 'solid-js/store';
3
- import { transform, motionValue, transformValue, styleEffect, frame } from 'motion';
4
4
  import { useParallaxStickyLayer } from '../../hooks/index.js';
5
5
  import { getActiveBreakpoints, getLastTruthyIndex } from '../../utils.js';
6
6
 
@@ -121,6 +121,7 @@ ${messages.join("\n")}`
121
121
  const active = activeProps();
122
122
  const { range, ...props2 } = active;
123
123
  const valueSubscribers = [];
124
+ let disposed = false;
124
125
  const progressValue = Object.keys(PROP_DEFAULTS).reduce(
125
126
  (values, key) => {
126
127
  const fallback = Reflect.get(PROP_DEFAULTS, key);
@@ -154,11 +155,16 @@ ${messages.join("\n")}`
154
155
  () => `translate(${animated.x?.get()}, ${animated.y?.get()}) scale(${animated.scale?.get()}) rotate(${animated.rotate?.get()}deg)`
155
156
  );
156
157
  function animateValues() {
158
+ if (disposed) return;
157
159
  const sequence = Object.keys(animated).map((key) => {
158
- let v = progressValue[key]?.get?.();
159
- if (typeof v === "undefined") return null;
160
+ const subject = animated[key];
161
+ const v = progressValue[key]?.get?.();
162
+ if (!subject) return null;
163
+ if (typeof v === "undefined" || v === null) return null;
164
+ if (typeof v !== "string" && typeof v !== "number") return null;
160
165
  return [animated[key], v, { at: "<" }];
161
166
  }).filter((v) => v !== null);
167
+ if (sequence.length === 0) return;
162
168
  animate(sequence);
163
169
  }
164
170
  function scheduleAnimation() {
@@ -178,9 +184,12 @@ ${messages.join("\n")}`
178
184
  ...styledValues
179
185
  });
180
186
  return onCleanup(() => {
187
+ disposed = true;
181
188
  unstyle();
182
189
  unsub();
183
- valueSubscribers.forEach((unsub2) => unsub2());
190
+ valueSubscribers.forEach((unsub2) => {
191
+ unsub2();
192
+ });
184
193
  Object.values(animated).forEach((value) => {
185
194
  value.destroy();
186
195
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/parallax-animation/index.ts"],"names":["messages","active","props","transform","mTransform","unsub","_"],"mappings":"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","file":"index.js","sourcesContent":["import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\nimport {\n onCleanup,\n createEffect,\n createMemo,\n splitProps,\n mergeProps,\n} from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\nimport {\n motionValue,\n transformValue,\n transform as mTransform,\n styleEffect,\n frame,\n type MotionValue,\n} from \"motion\";\n\nimport { useParallaxStickyLayer } from \"../../hooks/index.js\";\nimport { getActiveBreakpoints, getLastTruthyIndex } from \"../../utils.js\";\n\ntype AnimatableArray = Array<string | number> | null;\n\nexport type Props = {\n breakpoints: string[];\n range: number[] | number[][];\n y: AnimatableArray | AnimatableArray[];\n x: AnimatableArray | AnimatableArray[];\n scale: AnimatableArray | AnimatableArray[];\n rotate: AnimatableArray | AnimatableArray[];\n opacity: AnimatableArray | AnimatableArray[];\n backgroundColor: AnimatableArray | AnimatableArray[];\n borderRadius: AnimatableArray | AnimatableArray[];\n};\n\ntype ActiveProps = {\n range: number[];\n y: AnimatableArray;\n x: AnimatableArray;\n scale: AnimatableArray;\n rotate: AnimatableArray;\n opacity: AnimatableArray;\n backgroundColor: AnimatableArray;\n borderRadius: AnimatableArray;\n};\n\nfunction keysFromObject<T extends object>(object: T): (keyof T)[] {\n return Object.keys(object) as (keyof T)[];\n}\n\nexport const Name = `parallax-animation`;\n\nexport const PROPS = {\n breakpoints: [\"\"],\n range: [0, 1],\n y: null,\n x: null,\n scale: null,\n rotate: null,\n opacity: null,\n color: null,\n backgroundColor: null,\n borderRadius: null,\n};\n\nconst PROP_DEFAULTS = {\n y: \"0%\",\n x: \"0%\",\n scale: 1,\n rotate: 0,\n opacity: null,\n color: null,\n backgroundColor: null,\n borderRadius: null,\n};\n\nconst KEYS = Object.keys(PROPS);\n\nconst isNestedAnimatableArray = (\n values: AnimatableArray | AnimatableArray[],\n): values is AnimatableArray[] => {\n return (\n Array.isArray(values) && (Array.isArray(values[0]) || values[0] === null)\n );\n};\n\nconst flattenAnimatableArray = (\n value: AnimatableArray | AnimatableArray[],\n index: number = 0,\n) => {\n if (isNestedAnimatableArray(value)) {\n return value[index]!;\n }\n return value;\n};\n\nexport const Component: CorrectComponentType<Props> = (props, { element }) => {\n if (\n Object.keys(props).some(\n (key) => KEYS.includes(key) && !Array.isArray(Reflect.get(props, key)),\n )\n )\n return console.warn(\n `parallax-animate: At least one of ${KEYS.join(\",\")} properties is required and must be an array of values!`,\n element,\n );\n\n const messages = Object.entries(props).reduce((messages, [key, value]) => {\n if (!KEYS.includes(key)) return messages;\n if (value && value.length !== props.range.length) {\n return messages.concat(\n `${key} attribute must have the same length as range attribute!`,\n );\n }\n return messages;\n }, [] as string[]);\n\n if (messages.length)\n return console.warn(\n element,\n `\\nparallax-animate: Please fix the following issues:\\n${messages.join(\"\\n\")}`,\n );\n\n const [progress, { animate }] = useParallaxStickyLayer(element);\n\n const [activeBreakpoints, setActiveBreakpoints] = createStore<boolean[]>(\n getActiveBreakpoints(props.breakpoints),\n );\n const activeBreakpointIndex = createMemo(() =>\n getLastTruthyIndex(activeBreakpoints),\n );\n\n const [_, importantProps] = splitProps(props, [\"breakpoints\"]);\n const animateableProps = mergeProps(importantProps, {});\n\n const activeProps = createMemo<ActiveProps>(() => {\n const index = activeBreakpointIndex();\n\n if (index === -1) {\n const { breakpoints, ...active } = PROPS;\n return active;\n }\n\n const keys = keysFromObject(animateableProps);\n\n const active = keys.reduce((active, key) => {\n const value = animateableProps[key];\n if (isNestedAnimatableArray(value)) {\n const flattenedValue = flattenAnimatableArray(value, index);\n return {\n ...active,\n [key]: flattenedValue,\n };\n }\n return {\n ...active,\n [key]: value,\n };\n }, {} as ActiveProps);\n\n return active;\n });\n\n createEffect(() => {\n const breakpoints = props.breakpoints;\n const controller = new AbortController();\n\n for (let i = 0; i < breakpoints.length; i++) {\n const query = breakpoints[i];\n if (!query) continue;\n const mediaQuery = window.matchMedia(query);\n mediaQuery.addEventListener(\n \"change\",\n (e) => setActiveBreakpoints(i, e.matches),\n { signal: controller.signal },\n );\n }\n\n return onCleanup(() => {\n controller.abort();\n });\n });\n\n element.style.willChange = \"transform\";\n if (\n window.getComputedStyle(element).getPropertyValue(\"display\") === \"inline\"\n ) {\n element.style.display = \"block\";\n }\n\n createEffect(() => {\n const active = activeProps();\n const { range, ...props } = active;\n const valueSubscribers: VoidFunction[] = [];\n\n const progressValue = Object.keys(PROP_DEFAULTS).reduce(\n (values, key) => {\n const fallback = Reflect.get(PROP_DEFAULTS, key);\n const valueRange = Reflect.get(props, key);\n if (valueRange?.length === range.length) {\n const transform = mTransform(range, valueRange);\n const value = motionValue(transform(progress.get()));\n const unsub = progress.on(\"change\", (latest) => {\n value.set(transform(latest));\n });\n valueSubscribers.push(unsub);\n values[key] = value;\n } else values[key] = fallback;\n return values;\n },\n {} as Record<string, any>,\n );\n\n const animated = Object.keys(progressValue).reduce(\n (obj, key) => {\n const v = progressValue[key];\n Reflect.set(\n obj,\n key,\n motionValue(typeof v === \"object\" && v !== null ? v.get() : v),\n );\n return obj;\n },\n {} as Record<string, MotionValue>,\n );\n\n const transform = transformValue(\n () =>\n `translate(${animated.x?.get()}, ${animated.y?.get()}) scale(${animated.scale?.get()}) rotate(${animated.rotate?.get()}deg)`,\n );\n\n function animateValues() {\n const sequence = Object.keys(animated)\n .map((key) => {\n let v = progressValue[key]?.get?.();\n if (typeof v === \"undefined\") return null;\n return [animated[key], v, { at: \"<\" }];\n })\n .filter((v) => v !== null);\n //@ts-ignore\n animate(sequence);\n }\n\n function scheduleAnimation() {\n frame.update(animateValues);\n }\n\n const unsub = progress.on(\"change\", (_) => {\n scheduleAnimation();\n });\n\n const styledValues = Object.keys(animated)\n .filter(\n (key) =>\n key !== \"y\" && key !== \"x\" && key !== \"rotate\" && key !== \"scale\",\n )\n .reduce((obj, key) => {\n Reflect.set(obj, key, animated[key]);\n return obj;\n }, {});\n\n const unstyle = styleEffect(element, {\n transform,\n ...styledValues,\n });\n\n return onCleanup(() => {\n unstyle();\n unsub();\n valueSubscribers.forEach((unsub) => unsub());\n Object.values(animated).forEach((value) => {\n value.destroy();\n });\n Object.values(progressValue).forEach((value) => {\n value?.destroy?.();\n });\n transform.destroy();\n });\n });\n};\n"]}
1
+ {"version":3,"sources":["../../../../src/components/parallax-animation/index.ts"],"names":["messages","active","props","transform","mTransform","unsub","_"],"mappings":";;;;;;AA8CA,SAAS,eAAiC,MAAwB,EAAA;AACjE,EAAO,OAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAC1B;AAEO,MAAM,IAAO,GAAA,CAAA,kBAAA;AAEb,MAAM,KAAQ,GAAA;AAAA,EACpB,WAAA,EAAa,CAAC,EAAE,CAAA;AAAA,EAChB,KAAA,EAAO,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,EACZ,CAAG,EAAA,IAAA;AAAA,EACH,CAAG,EAAA,IAAA;AAAA,EACH,KAAO,EAAA,IAAA;AAAA,EACP,MAAQ,EAAA,IAAA;AAAA,EACR,OAAS,EAAA,IAAA;AAAA,EACT,KAAO,EAAA,IAAA;AAAA,EACP,eAAiB,EAAA,IAAA;AAAA,EACjB,YAAc,EAAA;AACf;AAEA,MAAM,aAAgB,GAAA;AAAA,EACrB,CAAG,EAAA,IAAA;AAAA,EACH,CAAG,EAAA,IAAA;AAAA,EACH,KAAO,EAAA,CAAA;AAAA,EACP,MAAQ,EAAA,CAAA;AAAA,EACR,OAAS,EAAA,IAAA;AAAA,EACT,KAAO,EAAA,IAAA;AAAA,EACP,eAAiB,EAAA,IAAA;AAAA,EACjB,YAAc,EAAA;AACf,CAAA;AAEA,MAAM,IAAA,GAAO,MAAO,CAAA,IAAA,CAAK,KAAK,CAAA;AAE9B,MAAM,uBAAA,GAA0B,CAC/B,MACiC,KAAA;AACjC,EAAA,OACC,KAAM,CAAA,OAAA,CAAQ,MAAM,CAAA,KAAM,KAAM,CAAA,OAAA,CAAQ,MAAO,CAAA,CAAC,CAAC,CAAA,IAAK,MAAO,CAAA,CAAC,CAAM,KAAA,IAAA,CAAA;AAEtE,CAAA;AAEA,MAAM,sBAAyB,GAAA,CAC9B,KACA,EAAA,KAAA,GAAgB,CACZ,KAAA;AACJ,EAAI,IAAA,uBAAA,CAAwB,KAAK,CAAG,EAAA;AACnC,IAAA,OAAO,MAAM,KAAK,CAAA;AAAA;AAEnB,EAAO,OAAA,KAAA;AACR,CAAA;AAEO,MAAM,SAAyC,GAAA,CAAC,KAAO,EAAA,EAAE,SAAc,KAAA;AAC7E,EACC,IAAA,MAAA,CAAO,IAAK,CAAA,KAAK,CAAE,CAAA,IAAA;AAAA,IAClB,CAAC,GAAA,KAAQ,IAAK,CAAA,QAAA,CAAS,GAAG,CAAA,IAAK,CAAC,KAAA,CAAM,OAAQ,CAAA,OAAA,CAAQ,GAAI,CAAA,KAAA,EAAO,GAAG,CAAC;AAAA,GACtE;AAEA,IAAA,OAAO,OAAQ,CAAA,IAAA;AAAA,MACd,CAAqC,kCAAA,EAAA,IAAA,CAAK,IAAK,CAAA,GAAG,CAAC,CAAA,uDAAA,CAAA;AAAA,MACnD;AAAA,KACD;AAED,EAAM,MAAA,QAAA,GAAW,MAAO,CAAA,OAAA,CAAQ,KAAK,CAAA,CAAE,MAAO,CAAA,CAACA,SAAU,EAAA,CAAC,GAAK,EAAA,KAAK,CAAM,KAAA;AACzE,IAAA,IAAI,CAAC,IAAA,CAAK,QAAS,CAAA,GAAG,GAAUA,OAAAA,SAAAA;AAChC,IAAA,IAAI,KAAS,IAAA,KAAA,CAAM,MAAW,KAAA,KAAA,CAAM,MAAM,MAAQ,EAAA;AACjD,MAAA,OAAOA,SAAS,CAAA,MAAA;AAAA,QACf,GAAG,GAAG,CAAA,wDAAA;AAAA,OACP;AAAA;AAED,IAAOA,OAAAA,SAAAA;AAAA,GACR,EAAG,EAAc,CAAA;AAEjB,EAAA,IAAI,QAAS,CAAA,MAAA;AACZ,IAAA,OAAO,OAAQ,CAAA,IAAA;AAAA,MACd,OAAA;AAAA,MACA;AAAA;AAAA,EAAyD,QAAA,CAAS,IAAK,CAAA,IAAI,CAAC,CAAA;AAAA,KAC7E;AAED,EAAA,MAAM,CAAC,QAAU,EAAA,EAAE,SAAS,CAAA,GAAI,uBAAuB,OAAO,CAAA;AAE9D,EAAM,MAAA,CAAC,iBAAmB,EAAA,oBAAoB,CAAI,GAAA,WAAA;AAAA,IACjD,oBAAA,CAAqB,MAAM,WAAW;AAAA,GACvC;AACA,EAAA,MAAM,qBAAwB,GAAA,UAAA;AAAA,IAAW,MACxC,mBAAmB,iBAAiB;AAAA,GACrC;AAEA,EAAM,MAAA,CAAC,GAAG,cAAc,CAAA,GAAI,WAAW,KAAO,EAAA,CAAC,aAAa,CAAC,CAAA;AAC7D,EAAA,MAAM,gBAAmB,GAAA,UAAA,CAAW,cAAgB,EAAA,EAAE,CAAA;AAEtD,EAAM,MAAA,WAAA,GAAc,WAAwB,MAAM;AACjD,IAAA,MAAM,QAAQ,qBAAsB,EAAA;AAEpC,IAAA,IAAI,UAAU,EAAI,EAAA;AACjB,MAAA,MAAM,EAAE,WAAA,EAAa,GAAGC,OAAAA,EAAW,GAAA,KAAA;AACnC,MAAOA,OAAAA,OAAAA;AAAA;AAGR,IAAM,MAAA,IAAA,GAAO,eAAe,gBAAgB,CAAA;AAE5C,IAAA,MAAM,MAAS,GAAA,IAAA,CAAK,MAAO,CAAA,CAACA,SAAQ,GAAQ,KAAA;AAC3C,MAAM,MAAA,KAAA,GAAQ,iBAAiB,GAAG,CAAA;AAClC,MAAI,IAAA,uBAAA,CAAwB,KAAK,CAAG,EAAA;AACnC,QAAM,MAAA,cAAA,GAAiB,sBAAuB,CAAA,KAAA,EAAO,KAAK,CAAA;AAC1D,QAAO,OAAA;AAAA,UACN,GAAGA,OAAAA;AAAA,UACH,CAAC,GAAG,GAAG;AAAA,SACR;AAAA;AAED,MAAO,OAAA;AAAA,QACN,GAAGA,OAAAA;AAAA,QACH,CAAC,GAAG,GAAG;AAAA,OACR;AAAA,KACD,EAAG,EAAiB,CAAA;AAEpB,IAAO,OAAA,MAAA;AAAA,GACP,CAAA;AAED,EAAA,YAAA,CAAa,MAAM;AAClB,IAAA,MAAM,cAAc,KAAM,CAAA,WAAA;AAC1B,IAAM,MAAA,UAAA,GAAa,IAAI,eAAgB,EAAA;AAEvC,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,WAAA,CAAY,QAAQ,CAAK,EAAA,EAAA;AAC5C,MAAM,MAAA,KAAA,GAAQ,YAAY,CAAC,CAAA;AAC3B,MAAA,IAAI,CAAC,KAAO,EAAA;AACZ,MAAM,MAAA,UAAA,GAAa,MAAO,CAAA,UAAA,CAAW,KAAK,CAAA;AAC1C,MAAW,UAAA,CAAA,gBAAA;AAAA,QACV,QAAA;AAAA,QACA,CAAC,CAAA,KAAM,oBAAqB,CAAA,CAAA,EAAG,EAAE,OAAO,CAAA;AAAA,QACxC,EAAE,MAAQ,EAAA,UAAA,CAAW,MAAO;AAAA,OAC7B;AAAA;AAGD,IAAA,OAAO,UAAU,MAAM;AACtB,MAAA,UAAA,CAAW,KAAM,EAAA;AAAA,KACjB,CAAA;AAAA,GACD,CAAA;AAED,EAAA,OAAA,CAAQ,MAAM,UAAa,GAAA,WAAA;AAC3B,EAAA,IACC,OAAO,gBAAiB,CAAA,OAAO,EAAE,gBAAiB,CAAA,SAAS,MAAM,QAChE,EAAA;AACD,IAAA,OAAA,CAAQ,MAAM,OAAU,GAAA,OAAA;AAAA;AAGzB,EAAA,YAAA,CAAa,MAAM;AAClB,IAAA,MAAM,SAAS,WAAY,EAAA;AAC3B,IAAA,MAAM,EAAE,KAAA,EAAO,GAAGC,MAAAA,EAAU,GAAA,MAAA;AAC5B,IAAA,MAAM,mBAAmC,EAAC;AAC1C,IAAA,IAAI,QAAW,GAAA,KAAA;AAEf,IAAA,MAAM,aAAgB,GAAA,MAAA,CAAO,IAAK,CAAA,aAAa,CAAE,CAAA,MAAA;AAAA,MAChD,CAAC,QAAQ,GAAQ,KAAA;AAChB,QAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,GAAI,CAAA,aAAA,EAAe,GAAG,CAAA;AAC/C,QAAA,MAAM,UAAa,GAAA,OAAA,CAAQ,GAAIA,CAAAA,MAAAA,EAAO,GAAG,CAAA;AACzC,QAAI,IAAA,UAAA,EAAY,MAAW,KAAA,KAAA,CAAM,MAAQ,EAAA;AACxC,UAAMC,MAAAA,UAAAA,GAAYC,SAAW,CAAA,KAAA,EAAO,UAAU,CAAA;AAC9C,UAAA,MAAM,QAAQ,WAAYD,CAAAA,UAAAA,CAAU,QAAS,CAAA,GAAA,EAAK,CAAC,CAAA;AACnD,UAAA,MAAME,MAAQ,GAAA,QAAA,CAAS,EAAG,CAAA,QAAA,EAAU,CAAC,MAAW,KAAA;AAC/C,YAAM,KAAA,CAAA,GAAA,CAAIF,UAAU,CAAA,MAAM,CAAC,CAAA;AAAA,WAC3B,CAAA;AACD,UAAA,gBAAA,CAAiB,KAAKE,MAAK,CAAA;AAC3B,UAAA,MAAA,CAAO,GAAG,CAAI,GAAA,KAAA;AAAA,SACf,MAAc,MAAA,CAAA,GAAG,CAAI,GAAA,QAAA;AACrB,QAAO,OAAA,MAAA;AAAA,OACR;AAAA,MACA;AAAC,KACF;AAEA,IAAA,MAAM,QAAW,GAAA,MAAA,CAAO,IAAK,CAAA,aAAa,CAAE,CAAA,MAAA;AAAA,MAC3C,CAAC,KAAK,GAAQ,KAAA;AACb,QAAM,MAAA,CAAA,GAAI,cAAc,GAAG,CAAA;AAC3B,QAAQ,OAAA,CAAA,GAAA;AAAA,UACP,GAAA;AAAA,UACA,GAAA;AAAA,UACA,WAAA,CAAY,OAAO,CAAM,KAAA,QAAA,IAAY,MAAM,IAAO,GAAA,CAAA,CAAE,GAAI,EAAA,GAAI,CAAC;AAAA,SAC9D;AACA,QAAO,OAAA,GAAA;AAAA,OACR;AAAA,MACA;AAAC,KACF;AAEA,IAAA,MAAMF,WAAY,GAAA,cAAA;AAAA,MACjB,MACC,aAAa,QAAS,CAAA,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,SAAS,CAAG,EAAA,GAAA,EAAK,CAAW,QAAA,EAAA,QAAA,CAAS,OAAO,GAAI,EAAC,YAAY,QAAS,CAAA,MAAA,EAAQ,KAAK,CAAA,IAAA;AAAA,KACxH;AAEA,IAAA,SAAS,aAAgB,GAAA;AACxB,MAAA,IAAI,QAAU,EAAA;AAEd,MAAA,MAAM,WAAW,MAAO,CAAA,IAAA,CAAK,QAAQ,CACnC,CAAA,GAAA,CAAI,CAAC,GAAQ,KAAA;AACb,QAAM,MAAA,OAAA,GAAU,SAAS,GAAG,CAAA;AAC5B,QAAA,MAAM,CAAI,GAAA,aAAA,CAAc,GAAG,CAAA,EAAG,GAAM,IAAA;AACpC,QAAI,IAAA,CAAC,SAAgB,OAAA,IAAA;AACrB,QAAA,IAAI,OAAO,CAAA,KAAM,WAAe,IAAA,CAAA,KAAM,MAAa,OAAA,IAAA;AACnD,QAAA,IAAI,OAAO,CAAM,KAAA,QAAA,IAAY,OAAO,CAAA,KAAM,UAAiB,OAAA,IAAA;AAC3D,QAAO,OAAA,CAAC,SAAS,GAAG,CAAA,EAAG,GAAG,EAAE,EAAA,EAAI,KAAK,CAAA;AAAA,OACrC,CACA,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,IAAI,CAAA;AAE1B,MAAI,IAAA,QAAA,CAAS,WAAW,CAAG,EAAA;AAE3B,MAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA;AAGjB,IAAA,SAAS,iBAAoB,GAAA;AAC5B,MAAA,KAAA,CAAM,OAAO,aAAa,CAAA;AAAA;AAG3B,IAAA,MAAM,KAAQ,GAAA,QAAA,CAAS,EAAG,CAAA,QAAA,EAAU,CAACG,EAAM,KAAA;AAC1C,MAAkB,iBAAA,EAAA;AAAA,KAClB,CAAA;AAED,IAAA,MAAM,YAAe,GAAA,MAAA,CAAO,IAAK,CAAA,QAAQ,CACvC,CAAA,MAAA;AAAA,MACA,CAAC,QACA,GAAQ,KAAA,GAAA,IAAO,QAAQ,GAAO,IAAA,GAAA,KAAQ,YAAY,GAAQ,KAAA;AAAA,KAE3D,CAAA,MAAA,CAAO,CAAC,GAAA,EAAK,GAAQ,KAAA;AACrB,MAAA,OAAA,CAAQ,GAAI,CAAA,GAAA,EAAK,GAAK,EAAA,QAAA,CAAS,GAAG,CAAC,CAAA;AACnC,MAAO,OAAA,GAAA;AAAA,KACR,EAAG,EAAE,CAAA;AAEN,IAAM,MAAA,OAAA,GAAU,YAAY,OAAS,EAAA;AAAA,iBACpCH,WAAA;AAAA,MACA,GAAG;AAAA,KACH,CAAA;AAED,IAAA,OAAO,UAAU,MAAM;AACtB,MAAW,QAAA,GAAA,IAAA;AACX,MAAQ,OAAA,EAAA;AACR,MAAM,KAAA,EAAA;AACN,MAAiB,gBAAA,CAAA,OAAA,CAAQ,CAACE,MAAU,KAAA;AACnC,QAAAA,MAAM,EAAA;AAAA,OACN,CAAA;AACD,MAAA,MAAA,CAAO,MAAO,CAAA,QAAQ,CAAE,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AAC1C,QAAA,KAAA,CAAM,OAAQ,EAAA;AAAA,OACd,CAAA;AACD,MAAA,MAAA,CAAO,MAAO,CAAA,aAAa,CAAE,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AAC/C,QAAA,KAAA,EAAO,OAAU,IAAA;AAAA,OACjB,CAAA;AACD,MAAAF,WAAA,CAAU,OAAQ,EAAA;AAAA,KAClB,CAAA;AAAA,GACD,CAAA;AACF","file":"index.js","sourcesContent":["import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\nimport {\n\tframe,\n\ttype MotionValue,\n\tmotionValue,\n\ttransform as mTransform,\n\tstyleEffect,\n\ttransformValue,\n} from \"motion\";\nimport {\n\tcreateEffect,\n\tcreateMemo,\n\tmergeProps,\n\tonCleanup,\n\tsplitProps,\n} from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\n\nimport { useParallaxStickyLayer } from \"../../hooks/index.js\";\nimport { getActiveBreakpoints, getLastTruthyIndex } from \"../../utils.js\";\n\ntype AnimatableArray = Array<string | number> | null;\n\nexport type Props = {\n\tbreakpoints: string[];\n\trange: number[] | number[][];\n\ty: AnimatableArray | AnimatableArray[];\n\tx: AnimatableArray | AnimatableArray[];\n\tscale: AnimatableArray | AnimatableArray[];\n\trotate: AnimatableArray | AnimatableArray[];\n\topacity: AnimatableArray | AnimatableArray[];\n\tbackgroundColor: AnimatableArray | AnimatableArray[];\n\tborderRadius: AnimatableArray | AnimatableArray[];\n};\n\ntype ActiveProps = {\n\trange: number[];\n\ty: AnimatableArray;\n\tx: AnimatableArray;\n\tscale: AnimatableArray;\n\trotate: AnimatableArray;\n\topacity: AnimatableArray;\n\tbackgroundColor: AnimatableArray;\n\tborderRadius: AnimatableArray;\n};\n\nfunction keysFromObject<T extends object>(object: T): (keyof T)[] {\n\treturn Object.keys(object) as (keyof T)[];\n}\n\nexport const Name = `parallax-animation`;\n\nexport const PROPS = {\n\tbreakpoints: [\"\"],\n\trange: [0, 1],\n\ty: null,\n\tx: null,\n\tscale: null,\n\trotate: null,\n\topacity: null,\n\tcolor: null,\n\tbackgroundColor: null,\n\tborderRadius: null,\n};\n\nconst PROP_DEFAULTS = {\n\ty: \"0%\",\n\tx: \"0%\",\n\tscale: 1,\n\trotate: 0,\n\topacity: null,\n\tcolor: null,\n\tbackgroundColor: null,\n\tborderRadius: null,\n};\n\nconst KEYS = Object.keys(PROPS);\n\nconst isNestedAnimatableArray = (\n\tvalues: AnimatableArray | AnimatableArray[],\n): values is AnimatableArray[] => {\n\treturn (\n\t\tArray.isArray(values) && (Array.isArray(values[0]) || values[0] === null)\n\t);\n};\n\nconst flattenAnimatableArray = (\n\tvalue: AnimatableArray | AnimatableArray[],\n\tindex: number = 0,\n) => {\n\tif (isNestedAnimatableArray(value)) {\n\t\treturn value[index]!;\n\t}\n\treturn value;\n};\n\nexport const Component: CorrectComponentType<Props> = (props, { element }) => {\n\tif (\n\t\tObject.keys(props).some(\n\t\t\t(key) => KEYS.includes(key) && !Array.isArray(Reflect.get(props, key)),\n\t\t)\n\t)\n\t\treturn console.warn(\n\t\t\t`parallax-animate: At least one of ${KEYS.join(\",\")} properties is required and must be an array of values!`,\n\t\t\telement,\n\t\t);\n\n\tconst messages = Object.entries(props).reduce((messages, [key, value]) => {\n\t\tif (!KEYS.includes(key)) return messages;\n\t\tif (value && value.length !== props.range.length) {\n\t\t\treturn messages.concat(\n\t\t\t\t`${key} attribute must have the same length as range attribute!`,\n\t\t\t);\n\t\t}\n\t\treturn messages;\n\t}, [] as string[]);\n\n\tif (messages.length)\n\t\treturn console.warn(\n\t\t\telement,\n\t\t\t`\\nparallax-animate: Please fix the following issues:\\n${messages.join(\"\\n\")}`,\n\t\t);\n\n\tconst [progress, { animate }] = useParallaxStickyLayer(element);\n\n\tconst [activeBreakpoints, setActiveBreakpoints] = createStore<boolean[]>(\n\t\tgetActiveBreakpoints(props.breakpoints),\n\t);\n\tconst activeBreakpointIndex = createMemo(() =>\n\t\tgetLastTruthyIndex(activeBreakpoints),\n\t);\n\n\tconst [_, importantProps] = splitProps(props, [\"breakpoints\"]);\n\tconst animateableProps = mergeProps(importantProps, {});\n\n\tconst activeProps = createMemo<ActiveProps>(() => {\n\t\tconst index = activeBreakpointIndex();\n\n\t\tif (index === -1) {\n\t\t\tconst { breakpoints, ...active } = PROPS;\n\t\t\treturn active;\n\t\t}\n\n\t\tconst keys = keysFromObject(animateableProps);\n\n\t\tconst active = keys.reduce((active, key) => {\n\t\t\tconst value = animateableProps[key];\n\t\t\tif (isNestedAnimatableArray(value)) {\n\t\t\t\tconst flattenedValue = flattenAnimatableArray(value, index);\n\t\t\t\treturn {\n\t\t\t\t\t...active,\n\t\t\t\t\t[key]: flattenedValue,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...active,\n\t\t\t\t[key]: value,\n\t\t\t};\n\t\t}, {} as ActiveProps);\n\n\t\treturn active;\n\t});\n\n\tcreateEffect(() => {\n\t\tconst breakpoints = props.breakpoints;\n\t\tconst controller = new AbortController();\n\n\t\tfor (let i = 0; i < breakpoints.length; i++) {\n\t\t\tconst query = breakpoints[i];\n\t\t\tif (!query) continue;\n\t\t\tconst mediaQuery = window.matchMedia(query);\n\t\t\tmediaQuery.addEventListener(\n\t\t\t\t\"change\",\n\t\t\t\t(e) => setActiveBreakpoints(i, e.matches),\n\t\t\t\t{ signal: controller.signal },\n\t\t\t);\n\t\t}\n\n\t\treturn onCleanup(() => {\n\t\t\tcontroller.abort();\n\t\t});\n\t});\n\n\telement.style.willChange = \"transform\";\n\tif (\n\t\twindow.getComputedStyle(element).getPropertyValue(\"display\") === \"inline\"\n\t) {\n\t\telement.style.display = \"block\";\n\t}\n\n\tcreateEffect(() => {\n\t\tconst active = activeProps();\n\t\tconst { range, ...props } = active;\n\t\tconst valueSubscribers: VoidFunction[] = [];\n\t\tlet disposed = false;\n\n\t\tconst progressValue = Object.keys(PROP_DEFAULTS).reduce(\n\t\t\t(values, key) => {\n\t\t\t\tconst fallback = Reflect.get(PROP_DEFAULTS, key);\n\t\t\t\tconst valueRange = Reflect.get(props, key);\n\t\t\t\tif (valueRange?.length === range.length) {\n\t\t\t\t\tconst transform = mTransform(range, valueRange);\n\t\t\t\t\tconst value = motionValue(transform(progress.get()));\n\t\t\t\t\tconst unsub = progress.on(\"change\", (latest) => {\n\t\t\t\t\t\tvalue.set(transform(latest));\n\t\t\t\t\t});\n\t\t\t\t\tvalueSubscribers.push(unsub);\n\t\t\t\t\tvalues[key] = value;\n\t\t\t\t} else values[key] = fallback;\n\t\t\t\treturn values;\n\t\t\t},\n\t\t\t{} as Record<string, any>,\n\t\t);\n\n\t\tconst animated = Object.keys(progressValue).reduce(\n\t\t\t(obj, key) => {\n\t\t\t\tconst v = progressValue[key];\n\t\t\t\tReflect.set(\n\t\t\t\t\tobj,\n\t\t\t\t\tkey,\n\t\t\t\t\tmotionValue(typeof v === \"object\" && v !== null ? v.get() : v),\n\t\t\t\t);\n\t\t\t\treturn obj;\n\t\t\t},\n\t\t\t{} as Record<string, MotionValue>,\n\t\t);\n\n\t\tconst transform = transformValue(\n\t\t\t() =>\n\t\t\t\t`translate(${animated.x?.get()}, ${animated.y?.get()}) scale(${animated.scale?.get()}) rotate(${animated.rotate?.get()}deg)`,\n\t\t);\n\n\t\tfunction animateValues() {\n\t\t\tif (disposed) return;\n\n\t\t\tconst sequence = Object.keys(animated)\n\t\t\t\t.map((key) => {\n\t\t\t\t\tconst subject = animated[key];\n\t\t\t\t\tconst v = progressValue[key]?.get?.();\n\t\t\t\t\tif (!subject) return null;\n\t\t\t\t\tif (typeof v === \"undefined\" || v === null) return null;\n\t\t\t\t\tif (typeof v !== \"string\" && typeof v !== \"number\") return null;\n\t\t\t\t\treturn [animated[key], v, { at: \"<\" }];\n\t\t\t\t})\n\t\t\t\t.filter((v) => v !== null);\n\n\t\t\tif (sequence.length === 0) return;\n\t\t\t//@ts-expect-error\n\t\t\tanimate(sequence);\n\t\t}\n\n\t\tfunction scheduleAnimation() {\n\t\t\tframe.update(animateValues);\n\t\t}\n\n\t\tconst unsub = progress.on(\"change\", (_) => {\n\t\t\tscheduleAnimation();\n\t\t});\n\n\t\tconst styledValues = Object.keys(animated)\n\t\t\t.filter(\n\t\t\t\t(key) =>\n\t\t\t\t\tkey !== \"y\" && key !== \"x\" && key !== \"rotate\" && key !== \"scale\",\n\t\t\t)\n\t\t\t.reduce((obj, key) => {\n\t\t\t\tReflect.set(obj, key, animated[key]);\n\t\t\t\treturn obj;\n\t\t\t}, {});\n\n\t\tconst unstyle = styleEffect(element, {\n\t\t\ttransform,\n\t\t\t...styledValues,\n\t\t});\n\n\t\treturn onCleanup(() => {\n\t\t\tdisposed = true;\n\t\t\tunstyle();\n\t\t\tunsub();\n\t\t\tvalueSubscribers.forEach((unsub) => {\n\t\t\t\tunsub();\n\t\t\t});\n\t\t\tObject.values(animated).forEach((value) => {\n\t\t\t\tvalue.destroy();\n\t\t\t});\n\t\t\tObject.values(progressValue).forEach((value) => {\n\t\t\t\tvalue?.destroy?.();\n\t\t\t});\n\t\t\ttransform.destroy();\n\t\t});\n\t});\n};\n"]}