angular-movement 0.0.2 → 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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-movement.mjs","sources":["../../../projects/movement/src/lib/tokens/movement.tokens.ts","../../../projects/movement/src/lib/constants.ts","../../../projects/movement/src/lib/engines/keyframe-composer.ts","../../../projects/movement/src/lib/presets/presets.ts","../../../projects/movement/src/lib/directives/move-animation.utils.ts","../../../projects/movement/src/lib/engines/waapi-player.ts","../../../projects/movement/src/lib/engines/spring-player.ts","../../../projects/movement/src/lib/engines/animation-engine.service.ts","../../../projects/movement/src/lib/tokens/stagger.tokens.ts","../../../projects/movement/src/lib/tokens/presence.tokens.ts","../../../projects/movement/src/lib/directives/move-variants.directive.ts","../../../projects/movement/src/lib/directives/move-animate.directive.ts","../../../projects/movement/src/lib/directives/move-animation.directive.ts","../../../projects/movement/src/lib/directives/move-enter.directive.ts","../../../projects/movement/src/lib/directives/move-leave.directive.ts","../../../projects/movement/src/lib/directives/move-hover.directive.ts","../../../projects/movement/src/lib/directives/move-tap.directive.ts","../../../projects/movement/src/lib/directives/move-stagger.directive.ts","../../../projects/movement/src/lib/directives/move-layout.directive.ts","../../../projects/movement/src/lib/scroll/smooth-scroll.service.ts","../../../projects/movement/src/lib/directives/move-scroll.directive.ts","../../../projects/movement/src/lib/directives/move-presence.directive.ts","../../../projects/movement/src/lib/directives/move-drag.directive.ts","../../../projects/movement/src/lib/directives/move-in-view.directive.ts","../../../projects/movement/src/lib/directives/move-text.directive.ts","../../../projects/movement/src/lib/scroll/move-smooth-scroll.directive.ts","../../../projects/movement/src/lib/directives/move-focus.directive.ts","../../../projects/movement/src/lib/directives/move-parallax.directive.ts","../../../projects/movement/src/lib/directives/move-loop.directive.ts","../../../projects/movement/src/lib/providers/provide-movement.ts","../../../projects/movement/src/lib/movement.ts","../../../projects/movement/src/public-api.ts","../../../projects/movement/src/angular-movement.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface MovementConfig {\n duration: number;\n easing: string;\n delay: number;\n disabled: boolean;\n iterations?: number;\n}\n\nexport const MOVEMENT_DEFAULTS: MovementConfig = {\n duration: 300,\n easing: 'cubic-bezier(0.16, 1, 0.3, 1)',\n delay: 0,\n disabled: false,\n iterations: 1,\n};\n\nexport const MOVEMENT_CONFIG = new InjectionToken<MovementConfig>('MOVEMENT_CONFIG', {\n factory: () => ({ ...MOVEMENT_DEFAULTS }),\n});\n","export const DEFAULT_DURATION = 300;\nexport const DEFAULT_EASING = 'ease';\nexport const DEFAULT_DELAY = 0;\n\nexport const DEFAULT_PERSPECTIVE = '1200px';\n\nexport const DEFAULT_SPRING = {\n stiffness: 500,\n damping: 30,\n} as const;\n\nexport const SPRING_BASE = {\n stiffness: 100,\n damping: 10,\n mass: 1,\n velocity: 0,\n} as const;\n\nexport const SIMULATION_TICK_RATE = 1000 / 60; // 60fps\nexport const SIMULATION_MAX_ITERATIONS = 600;\nexport const SIMULATION_SETTLED_THRESHOLD = 0.001;\n\nexport const SCROLL_MAP_DURATION = 1000;\nexport const SCROLL_WAAPI_CAP = 0.999;\nexport const SCROLL_LERP_FACTOR = 0.12;\nexport const SCROLL_RAF_THRESHOLD = 0.001;\n\nexport const SMOOTH_SCROLL_FRICTION = 0.92;\nexport const SMOOTH_SCROLL_MIN_VELOCITY = 0.05;\n\nexport const DEFAULT_STAGGER_TIME = 100;\nexport const DEFAULT_TEXT_STAGGER = 30;\n\nexport const DRAG_SNAP_DURATION = 300;\nexport const DRAG_SNAP_EASING = 'ease';\n","import { MoveKeyframes } from '../presets/presets.types';\nimport { DEFAULT_PERSPECTIVE } from '../constants';\n\nexport interface ComposedKeyframe extends Keyframe {\n opacity?: number;\n translate?: string;\n scale?: string;\n rotate?: string;\n filter?: string;\n transform?: string;\n}\n\nfunction getValAt(arr: readonly number[] | undefined, index: number): number | undefined {\n if (!arr || arr.length === 0) return undefined;\n return arr[Math.min(index, arr.length - 1)];\n}\n\nfunction getInterpolated(\n arr: readonly number[] | undefined,\n i1: number,\n i2: number,\n p: number,\n): number | undefined {\n if (!arr || arr.length === 0) return undefined;\n const v1 = arr[Math.min(i1, arr.length - 1)];\n const v2 = arr[Math.min(i2, arr.length - 1)];\n return v1 + (v2 - v1) * p;\n}\n\nconst KNOWN_KEYS = new Set([\n 'opacity',\n 'x',\n 'y',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'blur',\n]);\n\nfunction buildKeyframe(\n frames: MoveKeyframes,\n getVal: (arr: readonly number[] | undefined) => number | undefined,\n): ComposedKeyframe {\n const keyframe: ComposedKeyframe = {};\n\n const opacity = getVal(frames.opacity);\n if (opacity !== undefined) {\n keyframe.opacity = opacity;\n }\n\n const x = getVal(frames.x);\n const y = getVal(frames.y);\n if (x !== undefined || y !== undefined) {\n keyframe.translate = `${x ?? 0}px ${y ?? 0}px`;\n }\n\n const scale = getVal(frames.scale);\n if (scale !== undefined) {\n keyframe.scale = `${scale}`;\n } else {\n const scaleX = getVal(frames.scaleX);\n const scaleY = getVal(frames.scaleY);\n if (scaleX !== undefined || scaleY !== undefined) {\n keyframe.scale = `${scaleX ?? 1} ${scaleY ?? 1}`;\n }\n }\n\n const rotate = getVal(frames.rotate);\n if (rotate !== undefined) {\n keyframe.rotate = `${rotate}deg`;\n }\n\n const blur = getVal(frames.blur);\n if (blur !== undefined) {\n keyframe.filter = `blur(${blur}px)`;\n }\n\n const rotateX = getVal(frames.rotateX);\n const rotateY = getVal(frames.rotateY);\n if (rotateX !== undefined || rotateY !== undefined) {\n keyframe.transform = `perspective(${DEFAULT_PERSPECTIVE}) rotateX(${rotateX ?? 0}deg) rotateY(${rotateY ?? 0}deg)`;\n }\n\n // Passthrough arbitrary properties for WAAPI (e.g. strokeDashoffset)\n for (const key in frames) {\n if (KNOWN_KEYS.has(key)) continue;\n const arr = frames[key];\n const val = getVal(arr);\n if (val !== undefined) {\n (keyframe as Record<string, unknown>)[key] = val;\n }\n }\n\n return keyframe;\n}\n\nexport function composeKeyframeAt(frames: MoveKeyframes, index: number): ComposedKeyframe {\n return buildKeyframe(frames, (arr) => getValAt(arr, index));\n}\n\nexport function composeInterpolatedKeyframe(\n frames: MoveKeyframes,\n i1: number,\n i2: number,\n p: number,\n): ComposedKeyframe {\n return buildKeyframe(frames, (arr) => getInterpolated(arr, i1, i2, p));\n}\n\nexport function composeInitialStyle(frames: MoveKeyframes): ComposedKeyframe {\n return buildKeyframe(frames, (arr) => (arr && arr.length > 0 ? arr[0] : undefined));\n}\n\nexport function composeFinalStyle(frames: MoveKeyframes): ComposedKeyframe {\n return buildKeyframe(frames, (arr) => (arr && arr.length > 0 ? arr[arr.length - 1] : undefined));\n}\n\nconst KNOWN_STYLE_KEYS = new Set([\n 'opacity',\n 'translate',\n 'scale',\n 'rotate',\n 'transform',\n 'filter',\n]);\n\nexport function applyComposedStyle(el: Element, style: ComposedKeyframe): void {\n const styledEl = el as HTMLElement;\n if (style.opacity !== undefined) styledEl.style.opacity = `${style.opacity}`;\n if (style.translate !== undefined) styledEl.style.translate = style.translate;\n if (style.scale !== undefined) styledEl.style.scale = style.scale;\n if (style.rotate !== undefined) styledEl.style.rotate = style.rotate;\n if (style.transform !== undefined) styledEl.style.transform = style.transform;\n if (style.filter !== undefined) styledEl.style.filter = style.filter;\n\n // Passthrough arbitrary properties (e.g. strokeDashoffset)\n for (const key in style) {\n if (KNOWN_STYLE_KEYS.has(key)) continue;\n const val = (style as Record<string, unknown>)[key];\n if (val !== undefined) {\n (styledEl.style as unknown as Record<string, string>)[key] = String(val);\n }\n }\n}\n\nexport function clearComposedStyle(el: Element, extraKeys?: readonly string[]): void {\n const styledEl = el as HTMLElement;\n styledEl.style.opacity = '';\n styledEl.style.translate = '';\n styledEl.style.scale = '';\n styledEl.style.rotate = '';\n styledEl.style.transform = '';\n styledEl.style.filter = '';\n\n if (extraKeys) {\n for (const key of extraKeys) {\n (styledEl.style as unknown as Record<string, string>)[key] = '';\n }\n }\n}\n","import { MovePreset, MovePresetDefinition } from './presets.types';\n\nconst DEFAULT_FADE_OPACITY = [0, 1] as const;\nconst DEFAULT_LEAVE_OPACITY = [1, 0] as const;\n\nexport const MOVE_PRESETS: Record<MovePreset, MovePresetDefinition> = {\n 'fade-up': {\n enter: { opacity: DEFAULT_FADE_OPACITY, y: [24, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, y: [0, -16] },\n },\n 'fade-down': {\n enter: { opacity: DEFAULT_FADE_OPACITY, y: [-24, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, y: [0, 16] },\n },\n 'fade-left': {\n enter: { opacity: DEFAULT_FADE_OPACITY, x: [24, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, x: [0, -16] },\n },\n 'fade-right': {\n enter: { opacity: DEFAULT_FADE_OPACITY, x: [-24, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, x: [0, 16] },\n },\n 'slide-up': {\n enter: { y: [60, 0], opacity: DEFAULT_FADE_OPACITY },\n leave: { y: [0, -60], opacity: DEFAULT_LEAVE_OPACITY },\n },\n 'slide-down': {\n enter: { y: [-60, 0], opacity: DEFAULT_FADE_OPACITY },\n leave: { y: [0, 60], opacity: DEFAULT_LEAVE_OPACITY },\n },\n 'slide-left': {\n enter: { x: [60, 0], opacity: DEFAULT_FADE_OPACITY },\n leave: { x: [0, -60], opacity: DEFAULT_LEAVE_OPACITY },\n },\n 'slide-right': {\n enter: { x: [-60, 0], opacity: DEFAULT_FADE_OPACITY },\n leave: { x: [0, 60], opacity: DEFAULT_LEAVE_OPACITY },\n },\n 'zoom-in': {\n enter: { opacity: DEFAULT_FADE_OPACITY, scale: [0.5, 1] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, scale: [1, 0.5] },\n },\n 'zoom-out': {\n enter: { opacity: DEFAULT_FADE_OPACITY, scale: [1.3, 1] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, scale: [1, 1.3] },\n },\n 'flip-x': {\n enter: { opacity: DEFAULT_FADE_OPACITY, rotateX: [-90, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, rotateX: [0, 90] },\n },\n 'flip-y': {\n enter: { opacity: DEFAULT_FADE_OPACITY, rotateY: [-90, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, rotateY: [0, 90] },\n },\n 'bounce-in': {\n enter: { opacity: DEFAULT_FADE_OPACITY, y: [30, 0], scale: [0.85, 1] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, y: [0, -20], scale: [1, 0.9] },\n loop: { y: [0, -10, 0], scale: [1, 0.95, 1] },\n },\n 'blur-in': {\n enter: { opacity: DEFAULT_FADE_OPACITY, blur: [10, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, blur: [0, 10] },\n },\n spin: {\n enter: { opacity: DEFAULT_FADE_OPACITY, rotate: [-360, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, rotate: [0, 360] },\n loop: { rotate: [0, 360] },\n },\n pulse: {\n enter: { scale: [1, 1.05, 1] },\n leave: { scale: [1, 0.95, 1] },\n loop: { scale: [1, 1.05, 1] },\n },\n none: {\n enter: { opacity: [1, 1] },\n leave: { opacity: [1, 1] },\n },\n};\n","import {\n applyComposedStyle,\n clearComposedStyle,\n composeInitialStyle,\n} from '../engines/keyframe-composer';\nimport { MOVE_PRESETS } from '../presets/presets';\nimport { MoveKeyframes, MovePreset } from '../presets/presets.types';\nimport { MovementConfig } from '../tokens/movement.tokens';\n\nexport type MovePhase = 'enter' | 'leave' | 'loop';\n\nexport type MoveDirectiveInput = MovePreset | MoveKeyframes;\n\nexport interface MoveInputOverrides {\n duration?: number;\n easing?: string;\n delay?: number;\n disabled?: boolean;\n iterations?: number;\n}\n\nexport function resolveMovementConfig(\n defaults: MovementConfig,\n overrides: MoveInputOverrides,\n reducedMotion: boolean,\n): MovementConfig {\n if (reducedMotion && typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.warn(\n '[Movement] Animations disabled: prefers-reduced-motion is active. ' +\n 'Disable \"Reduce motion\" in your OS accessibility settings to see animations.',\n );\n }\n\n return {\n duration: Math.max(0, overrides.duration ?? defaults.duration),\n easing: overrides.easing ?? defaults.easing,\n delay: Math.max(0, overrides.delay ?? defaults.delay),\n disabled: reducedMotion || (overrides.disabled ?? defaults.disabled),\n iterations: overrides.iterations ?? defaults.iterations,\n };\n}\n\nexport function resolveMoveFrames(value: MoveDirectiveInput, phase: MovePhase): MoveKeyframes {\n if (typeof value === 'string') {\n const preset = MOVE_PRESETS[value];\n if (!preset) {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.warn(`[Movement] Unknown preset: \"${value}\". Using \"none\" preset.`);\n }\n return MOVE_PRESETS['none'][phase] ?? MOVE_PRESETS['none'].enter;\n }\n return preset[phase] ?? preset.enter;\n }\n\n return value;\n}\n\nexport function prefersReducedMotion(documentRef: Document): boolean {\n const view = documentRef.defaultView;\n if (!view || typeof view.matchMedia !== 'function') {\n return false;\n }\n\n return view.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/**\n * Reverses all keyframe value arrays in a MoveKeyframes object.\n * Used by hover and tap directives to animate back to the original state.\n */\nexport function reverseFrames(frames: MoveKeyframes): MoveKeyframes {\n const reversed: MoveKeyframes = {};\n for (const key in frames) {\n const k = key as keyof MoveKeyframes;\n const arr = frames[k];\n if (arr) {\n reversed[k] = [...arr].reverse() as readonly number[];\n }\n }\n return reversed;\n}\n\n/**\n * Applies the first keyframe values as inline styles to an element.\n * Used by in-view and text directives to set the initial (hidden) state\n * before the IntersectionObserver triggers the animation.\n */\nexport function applyInitialStyles(el: HTMLElement, frames: MoveKeyframes): void {\n applyComposedStyle(el, composeInitialStyle(frames));\n}\n\n/**\n * Clears all inline styles set by `applyInitialStyles`.\n * Called just before WAAPI animates so it can take full control.\n */\nexport function clearInitialStyles(el: HTMLElement): void {\n clearComposedStyle(el);\n}\n","import { AnimationControls } from './animation-controls';\nimport { MoveKeyframes } from '../presets/presets.types';\nimport { MovementConfig } from '../tokens/movement.tokens';\nimport { composeKeyframeAt } from './keyframe-composer';\n\nexport class WaapiPlayer implements AnimationControls {\n #animation: Animation | null = null;\n #resolveFinished!: () => void;\n public readonly finished = new Promise<void>((resolve) => {\n this.#resolveFinished = resolve;\n });\n\n constructor(host: Element, frames: MoveKeyframes, config: MovementConfig, onDone?: () => void) {\n if (typeof (host as HTMLElement).animate !== 'function') {\n this.#resolveFinished();\n onDone?.();\n return;\n }\n\n const keyframes = this.#toWAAPIKeyframes(frames);\n const iterations = config.iterations ?? 1;\n\n this.#animation = (host as HTMLElement).animate(keyframes, {\n duration: config.duration,\n easing: config.easing,\n delay: config.delay,\n fill: 'both',\n iterations,\n });\n\n if (iterations === Infinity) {\n // Infinite loops never finish; consumer must call cancel() manually.\n return;\n }\n\n this.#animation.addEventListener(\n 'finish',\n () => {\n this.#animation?.commitStyles?.();\n this.#animation?.cancel();\n this.#resolveFinished();\n onDone?.();\n },\n { once: true },\n );\n }\n\n play(): void {\n this.#animation?.play();\n }\n\n pause(): void {\n this.#animation?.pause();\n }\n\n cancel(): void {\n if (this.#animation?.playState !== 'idle') {\n this.#animation?.cancel();\n }\n this.#resolveFinished();\n }\n\n get currentTime(): number {\n return (this.#animation?.currentTime as number) ?? 0;\n }\n\n set currentTime(time: number) {\n if (this.#animation) {\n this.#animation.currentTime = time;\n }\n }\n\n #toWAAPIKeyframes(frames: MoveKeyframes): Keyframe[] {\n let maxLength = 0;\n for (const key in frames) {\n const arr = frames[key as keyof MoveKeyframes];\n if (Array.isArray(arr)) {\n maxLength = Math.max(maxLength, arr.length);\n }\n }\n\n if (maxLength === 0) return [];\n\n const keyframes: Keyframe[] = [];\n for (let i = 0; i < maxLength; i++) {\n keyframes.push(composeKeyframeAt(frames, i));\n }\n return keyframes;\n }\n}\n","import { AnimationControls } from './animation-controls';\nimport { MoveKeyframes, MoveSpring } from '../presets/presets.types';\nimport { composeInterpolatedKeyframe } from './keyframe-composer';\nimport {\n SIMULATION_MAX_ITERATIONS,\n SIMULATION_SETTLED_THRESHOLD,\n SIMULATION_TICK_RATE,\n} from '../constants';\n\nexport class SpringPlayer implements AnimationControls {\n #resolveFinished!: () => void;\n public readonly finished = new Promise<void>((resolve) => {\n this.#resolveFinished = resolve;\n });\n\n #animation: Animation | null = null;\n\n constructor(\n private readonly host: Element,\n private readonly frames: MoveKeyframes,\n userConfig: MoveSpring,\n private readonly delay: number,\n private readonly iterations = 1,\n private readonly onDone?: () => void,\n ) {\n if (typeof (host as HTMLElement).animate !== 'function') {\n this.#resolveFinished();\n onDone?.();\n return;\n }\n\n if (this.iterations !== 1 && typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.warn(\n '[Movement] Spring animations with iterations !== 1 may produce visual glitches. ' +\n 'Consider using WaapiPlayer (no spring) for loops.',\n );\n }\n\n const config: MoveSpring = {\n stiffness: 100,\n damping: 10,\n mass: 1,\n velocity: 0,\n ...userConfig,\n };\n\n const keyframes = this.#generateSpringKeyframes(frames, config);\n\n if (keyframes.length === 0) {\n this.#resolveFinished();\n onDone?.();\n return;\n }\n\n // Default duration of the calculated simulation is bound to the arrays output.\n // We run it over that specific time frame, we know exactly the duration by counting ticks * tick duration.\n // Let's assume tick rate is 16.66ms (60fps simulation)\n const duration = keyframes.length * SIMULATION_TICK_RATE;\n\n this.#animation = (host as HTMLElement).animate(keyframes, {\n duration,\n delay: this.delay,\n fill: 'both',\n easing: 'linear', // Spring physics already has the easing baked into the frames\n iterations: this.iterations,\n });\n\n if (this.iterations === Infinity) {\n // Infinite loops never finish; consumer must call cancel() manually.\n return;\n }\n\n this.#animation.addEventListener(\n 'finish',\n () => {\n this.#animation?.commitStyles?.();\n this.#animation?.cancel();\n this.#resolveFinished();\n onDone?.();\n },\n { once: true },\n );\n }\n\n play(): void {\n this.#animation?.play();\n }\n\n pause(): void {\n this.#animation?.pause();\n }\n\n cancel(): void {\n if (this.#animation?.playState !== 'idle') {\n this.#animation?.cancel();\n }\n this.#resolveFinished();\n }\n\n get currentTime(): number {\n return (this.#animation?.currentTime as number) ?? 0;\n }\n\n set currentTime(time: number) {\n if (this.#animation) {\n this.#animation.currentTime = time;\n }\n }\n\n #generateSpringKeyframes(frames: MoveKeyframes, config: MoveSpring): Keyframe[] {\n let maxSteps = 0;\n for (const key in frames) {\n const arr = frames[key as keyof MoveKeyframes];\n if (Array.isArray(arr)) {\n maxSteps = Math.max(maxSteps, arr.length);\n }\n }\n\n if (maxSteps <= 1) return [];\n\n const keyframes: Keyframe[] = [];\n const dt = 1 / 60; // Simulate at 60fps (16.66ms per tick)\n\n const stiffness = config.stiffness!;\n const damping = config.damping!;\n const mass = config.mass!;\n\n // We will simulate segments between keyframes based on physics\n for (let step = 0; step < maxSteps - 1; step++) {\n let progress = 0;\n let velocity = step === 0 ? (config.velocity ?? 0) : 0;\n let isSettled = false;\n\n // Simulate the spring for this intermediate segment\n // Prevent infinite loops safely by bounding iterations\n let iterations = 0;\n const maxIterations = SIMULATION_MAX_ITERATIONS; // max 10 seconds per step\n\n while (!isSettled && iterations < maxIterations) {\n // Evaluate frame\n const p = Math.min(Math.max(progress, 0), 1);\n keyframes.push(this.#composeFrame(frames, step, step + 1, p));\n\n // Advance physics F = -k*x - c*v\n const displacement = progress - 1;\n const force = -stiffness * displacement - damping * velocity;\n const acceleration = force / mass;\n\n velocity += acceleration * dt;\n progress += velocity * dt;\n\n if (\n Math.abs(displacement) < SIMULATION_SETTLED_THRESHOLD &&\n Math.abs(velocity) < SIMULATION_SETTLED_THRESHOLD\n ) {\n isSettled = true;\n }\n iterations++;\n }\n\n // Ensure the final state of the step is exactly 1\n keyframes.push(this.#composeFrame(frames, step, step + 1, 1));\n }\n\n return keyframes;\n }\n\n #composeFrame(frames: MoveKeyframes, i1: number, i2: number, p: number): Keyframe {\n return composeInterpolatedKeyframe(frames, i1, i2, p);\n }\n}\n","import { Injectable, inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { AnimationControls } from './animation-controls';\nimport { WaapiPlayer } from './waapi-player';\nimport { SpringPlayer } from './spring-player';\nimport { MoveKeyframes, MoveSpring } from '../presets/presets.types';\nimport { MovementConfig, MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport { applyComposedStyle, composeFinalStyle } from './keyframe-composer';\n\nexport interface PlayAnimationOptions {\n config?: MovementConfig;\n spring?: MoveSpring;\n delay?: number;\n disabled?: boolean;\n iterations?: number;\n onDone?: () => void;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AnimationEngine {\n #platformId = inject(PLATFORM_ID);\n #defaults = inject(MOVEMENT_CONFIG);\n\n play(\n host: Element,\n frames: MoveKeyframes,\n options: PlayAnimationOptions = {},\n ): AnimationControls | null {\n if (!isPlatformBrowser(this.#platformId)) {\n options.onDone?.();\n return null;\n }\n\n if (options.disabled) {\n this.#applyFinalStyles(host, frames);\n options.onDone?.();\n return null;\n }\n\n const config = options.config ?? this.#defaults;\n const isSpring = options.spring || config.easing === 'spring';\n const iterations = options.iterations ?? config.iterations;\n\n if (isSpring) {\n return new SpringPlayer(\n host,\n frames,\n options.spring ?? {},\n options.delay ?? config.delay,\n iterations,\n options.onDone,\n );\n } else {\n return new WaapiPlayer(\n host,\n frames,\n {\n duration: config.duration,\n easing: config.easing,\n delay: options.delay ?? config.delay,\n disabled: false,\n iterations,\n },\n options.onDone,\n );\n }\n }\n\n #applyFinalStyles(host: Element, frames: MoveKeyframes): void {\n applyComposedStyle(host, composeFinalStyle(frames));\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface MoveStaggerProvider {\n register(el: HTMLElement): void;\n unregister(el: HTMLElement): void;\n getDelay(el: HTMLElement): number;\n}\n\nexport const MOVE_STAGGER_PARENT = new InjectionToken<MoveStaggerProvider>('MOVE_STAGGER_PARENT');\n","import { InjectionToken } from '@angular/core';\n\nexport interface MovePresenceChild {\n playLeave(): Promise<void> | void;\n}\n\nexport interface MovePresenceProvider {\n register(child: MovePresenceChild): void;\n unregister(child: MovePresenceChild): void;\n}\n\nexport const MOVE_PRESENCE_PARENT = new InjectionToken<MovePresenceProvider>(\n 'MOVE_PRESENCE_PARENT',\n);\n","import {\n Directive,\n ElementRef,\n InjectionToken,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n OnDestroy,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { MoveKeyframes, MoveSpring, MoveVariant } from '../presets/presets.types';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport { prefersReducedMotion, resolveMovementConfig } from './move-animation.utils';\nimport { AnimationControls } from '../engines/animation-controls';\nimport { MOVE_STAGGER_PARENT } from '../tokens/stagger.tokens';\n\nexport interface MoveVariantsProvider {\n activeVariant: () => string | undefined;\n}\n\nexport const MOVE_VARIANTS_PARENT = new InjectionToken<MoveVariantsProvider>(\n 'MOVE_VARIANTS_PARENT',\n);\n\n@Directive({\n selector: '[moveVariants]',\n providers: [\n {\n provide: MOVE_VARIANTS_PARENT,\n useExisting: forwardRef(() => MoveVariantsDirective),\n },\n ],\n})\nexport class MoveVariantsDirective implements MoveVariantsProvider, OnDestroy {\n readonly moveVariants = input.required<Record<string, MoveVariant>>();\n readonly moveAnimate = input<string | undefined>(undefined);\n\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #parent = inject(MOVE_VARIANTS_PARENT, { optional: true, skipSelf: true });\n readonly #engine = inject(AnimationEngine);\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #stagger = inject(MOVE_STAGGER_PARENT, { optional: true });\n\n #currentPlayer: AnimationControls | null = null;\n #isReducedMotion = false;\n\n readonly activeVariant = computed(() => {\n return this.moveAnimate() ?? this.#parent?.activeVariant();\n });\n\n constructor() {\n this.#isReducedMotion = prefersReducedMotion(this.#documentRef);\n this.#stagger?.register(this.#host.nativeElement);\n\n effect(() => {\n const variantName = this.activeVariant();\n if (!variantName) return;\n\n const variants = this.moveVariants();\n if (!variants) return;\n\n const state = variants[variantName];\n if (!state) return;\n\n this.#currentPlayer?.cancel();\n\n const { spring, duration, easing, delay, ...keyframesMap } = state;\n const keyframes = keyframesMap as MoveKeyframes;\n\n const staggerDelay = this.#stagger?.getDelay(this.#host.nativeElement) ?? 0;\n\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: duration ?? this.moveDuration(),\n easing: easing ?? this.moveEasing(),\n delay: (delay ?? this.moveDelay() ?? 0) + staggerDelay,\n disabled: this.moveDisabled(),\n },\n this.#isReducedMotion,\n );\n\n this.#currentPlayer = this.#engine.play(this.#host.nativeElement, keyframes, {\n config,\n spring: spring ?? this.moveSpring(),\n disabled: config.disabled,\n });\n });\n }\n\n ngOnDestroy(): void {\n this.#stagger?.unregister(this.#host.nativeElement);\n this.#currentPlayer?.cancel();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\nimport { MOVE_STAGGER_PARENT } from '../tokens/stagger.tokens';\nimport { MOVE_PRESENCE_PARENT, MovePresenceChild } from '../tokens/presence.tokens';\nimport { MOVE_VARIANTS_PARENT } from './move-variants.directive';\n\n@Directive({\n selector: '[move],[moveAnimate]',\n})\nexport class MoveAnimateDirective implements OnDestroy, OnInit, MovePresenceChild {\n readonly move = input<MovePreset | MoveKeyframes | undefined>(undefined);\n readonly moveAnimate = input<MovePreset | MoveKeyframes | undefined>(undefined);\n readonly moveAnimateLeave = input<MovePreset | MoveKeyframes | undefined>(undefined);\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n readonly #stagger = inject(MOVE_STAGGER_PARENT, { optional: true });\n readonly #presence = inject(MOVE_PRESENCE_PARENT, { optional: true });\n readonly #variantsParent = inject(MOVE_VARIANTS_PARENT, { optional: true });\n\n #config = this.#defaults;\n #enterPlayer: AnimationControls | null = null;\n #leavePlayer: AnimationControls | null = null;\n\n ngOnInit(): void {\n // If moveVariants is on the same host, let it handle animation\n if (this.#variantsParent) {\n return;\n }\n\n this.#stagger?.register(this.#host.nativeElement);\n this.#presence?.register(this);\n\n Promise.resolve().then(() => {\n const staggerDelay = this.#stagger?.getDelay(this.#host.nativeElement) ?? 0;\n\n this.#config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: (this.moveDelay() ?? 0) + staggerDelay,\n disabled: this.moveDisabled(),\n },\n prefersReducedMotion(this.#documentRef),\n );\n\n const enterInput = this.resolveEnterInput();\n this.#enterPlayer = this.#engine.play(\n this.#host.nativeElement,\n resolveMoveFrames(enterInput, 'enter'),\n {\n config: this.#config,\n spring: this.moveSpring(),\n disabled: this.#config.disabled,\n },\n );\n });\n }\n\n ngOnDestroy(): void {\n this.#stagger?.unregister(this.#host.nativeElement);\n this.#presence?.unregister(this);\n this.#enterPlayer?.cancel();\n this.#leavePlayer?.cancel();\n }\n\n playLeave(): Promise<void> {\n if (this.#variantsParent || this.#config.disabled) {\n return Promise.resolve();\n }\n\n this.#enterPlayer?.cancel();\n\n this.#leavePlayer = this.#engine.play(\n this.#host.nativeElement,\n resolveMoveFrames(this.resolveLeaveInput(), 'leave'),\n {\n config: this.#config,\n spring: this.moveSpring(),\n disabled: false,\n },\n );\n\n return this.#leavePlayer?.finished ?? Promise.resolve();\n }\n\n private resolveEnterInput(): MovePreset | MoveKeyframes {\n return this.moveAnimate() ?? this.move() ?? 'none';\n }\n\n private resolveLeaveInput(): MovePreset | MoveKeyframes {\n return this.moveAnimateLeave() ?? this.resolveEnterInput();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { MoveAnimationConfig, MoveKeyframes, MoveKeyframeState } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport { prefersReducedMotion, resolveMovementConfig } from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\nimport { MOVE_STAGGER_PARENT } from '../tokens/stagger.tokens';\nimport { MOVE_PRESENCE_PARENT, MovePresenceChild } from '../tokens/presence.tokens';\n\n@Directive({\n selector: '[moveAnimation]',\n})\nexport class MoveAnimationDirective implements OnInit, OnDestroy, MovePresenceChild {\n readonly moveAnimation = input.required<MoveAnimationConfig>();\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n readonly #stagger = inject(MOVE_STAGGER_PARENT, { optional: true });\n readonly #presence = inject(MOVE_PRESENCE_PARENT, { optional: true });\n\n #config = this.#defaults;\n #enterPlayer: AnimationControls | null = null;\n #leavePlayer: AnimationControls | null = null;\n\n ngOnInit(): void {\n this.#stagger?.register(this.#host.nativeElement);\n this.#presence?.register(this);\n\n Promise.resolve().then(() => {\n const cfg = this.moveAnimation();\n const staggerDelay = this.#stagger?.getDelay(this.#host.nativeElement) ?? 0;\n\n this.#config = resolveMovementConfig(\n this.#defaults,\n {\n duration: cfg.duration,\n easing: cfg.easing,\n delay: (cfg.delay ?? 0) + staggerDelay,\n disabled: undefined,\n },\n prefersReducedMotion(this.#documentRef),\n );\n\n if (!cfg.initial || !cfg.animate) return;\n\n const frames = statesToKeyframes(cfg.initial, cfg.animate);\n if (Object.keys(frames).length === 0) return;\n\n this.#enterPlayer = this.#engine.play(this.#host.nativeElement, frames, {\n config: this.#config,\n spring: cfg.spring,\n disabled: this.#config.disabled,\n });\n });\n }\n\n ngOnDestroy(): void {\n this.#stagger?.unregister(this.#host.nativeElement);\n this.#presence?.unregister(this);\n this.#enterPlayer?.cancel();\n this.#leavePlayer?.cancel();\n }\n\n playLeave(): Promise<void> {\n const cfg = this.moveAnimation();\n\n if (this.#config.disabled || !cfg.exit || !cfg.animate) {\n return Promise.resolve();\n }\n\n this.#enterPlayer?.cancel();\n\n const frames = statesToKeyframes(cfg.animate, cfg.exit);\n if (Object.keys(frames).length === 0) return Promise.resolve();\n\n this.#leavePlayer = this.#engine.play(this.#host.nativeElement, frames, {\n config: this.#config,\n spring: cfg.spring,\n disabled: false,\n });\n\n return this.#leavePlayer?.finished ?? Promise.resolve();\n }\n}\n\nfunction statesToKeyframes(from: MoveKeyframeState, to: MoveKeyframeState): MoveKeyframes {\n const result: Partial<Record<keyof MoveKeyframes, readonly number[]>> = {};\n for (const key of Object.keys(from) as (keyof MoveKeyframeState)[]) {\n const f = from[key];\n const t = to[key];\n if (f !== undefined && t !== undefined) {\n result[key] = [f, t];\n }\n }\n return result as MoveKeyframes;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\nimport { MOVE_STAGGER_PARENT } from '../tokens/stagger.tokens';\n\n@Directive({\n selector: '[moveEnter]',\n})\nexport class MoveEnterDirective implements OnDestroy, OnInit {\n readonly moveEnter = input<MovePreset | MoveKeyframes>('none');\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n readonly #stagger = inject(MOVE_STAGGER_PARENT, { optional: true });\n\n #player: AnimationControls | null = null;\n\n ngOnInit(): void {\n this.#stagger?.register(this.#host.nativeElement);\n\n Promise.resolve().then(() => {\n const staggerDelay = this.#stagger?.getDelay(this.#host.nativeElement) ?? 0;\n\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: (this.moveDelay() ?? 0) + staggerDelay,\n disabled: this.moveDisabled(),\n },\n prefersReducedMotion(this.#documentRef),\n );\n\n this.#player = this.#engine.play(\n this.#host.nativeElement,\n resolveMoveFrames(this.moveEnter(), 'enter'),\n {\n config: config,\n spring: this.moveSpring(),\n disabled: config.disabled,\n },\n );\n });\n }\n\n ngOnDestroy(): void {\n this.#stagger?.unregister(this.#host.nativeElement);\n this.#player?.cancel();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\nimport { MOVE_PRESENCE_PARENT, MovePresenceChild } from '../tokens/presence.tokens';\n\n@Directive({\n selector: '[moveLeave]',\n})\nexport class MoveLeaveDirective implements OnDestroy, OnInit, MovePresenceChild {\n readonly moveLeave = input<MovePreset | MoveKeyframes>('none');\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n readonly #presence = inject(MOVE_PRESENCE_PARENT, { optional: true });\n\n #config = this.#defaults;\n #player: AnimationControls | null = null;\n\n ngOnInit(): void {\n this.#presence?.register(this);\n\n this.#config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: this.moveDelay(),\n disabled: this.moveDisabled(),\n },\n prefersReducedMotion(this.#documentRef),\n );\n }\n\n ngOnDestroy(): void {\n this.#presence?.unregister(this);\n this.#player?.cancel();\n }\n\n playLeave(): Promise<void> {\n if (this.#config.disabled) {\n return Promise.resolve();\n }\n\n this.#player = this.#engine.play(\n this.#host.nativeElement,\n resolveMoveFrames(this.moveLeave(), 'leave'),\n {\n config: this.#config,\n spring: this.moveSpring(),\n disabled: false,\n },\n );\n\n return this.#player?.finished ?? Promise.resolve();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnDestroy } from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n reverseFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\n\n@Directive({\n selector: '[moveWhileHover]',\n host: {\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'onMouseLeave()',\n '(touchstart)': 'onTouchStart($event)',\n '(touchend)': 'onTouchEnd()',\n '(touchcancel)': 'onTouchEnd()',\n },\n})\nexport class MoveHoverDirective implements OnDestroy {\n readonly moveWhileHover = input.required<MovePreset | MoveKeyframes>();\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n\n #currentPlayer: AnimationControls | null = null;\n #isHovered = false;\n\n onMouseEnter() {\n if (this.#isHovered) return;\n this.#isHovered = true;\n this.play(false);\n }\n\n onMouseLeave() {\n if (!this.#isHovered) return;\n this.#isHovered = false;\n this.play(true);\n }\n\n onTouchStart(event: TouchEvent) {\n event.preventDefault();\n if (this.#isHovered) return;\n this.#isHovered = true;\n this.play(false);\n }\n\n onTouchEnd() {\n if (!this.#isHovered) return;\n this.#isHovered = false;\n this.play(true);\n }\n\n private play(reverse: boolean) {\n this.#currentPlayer?.cancel();\n\n const isReduced = prefersReducedMotion(this.#documentRef);\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: this.moveDelay(),\n disabled: this.moveDisabled(),\n },\n isReduced,\n );\n\n if (config.disabled) return;\n\n let frames = resolveMoveFrames(this.moveWhileHover(), 'enter');\n if (reverse) {\n frames = reverseFrames(frames);\n }\n\n this.#currentPlayer = this.#engine.play(this.#host.nativeElement, frames, {\n config,\n spring: this.moveSpring(),\n disabled: false,\n });\n }\n\n ngOnDestroy(): void {\n this.#currentPlayer?.cancel();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnDestroy } from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n reverseFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\n\n@Directive({\n selector: '[moveWhileTap]',\n host: {\n '(pointerdown)': 'onPointerDown()',\n '(pointerup)': 'onPointerUp()',\n '(pointercancel)': 'onPointerUp()',\n '(pointerleave)': 'onPointerUp()',\n },\n})\nexport class MoveTapDirective implements OnDestroy {\n readonly moveWhileTap = input.required<MovePreset | MoveKeyframes>();\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n\n #currentPlayer: AnimationControls | null = null;\n #isTapped = false;\n\n onPointerDown() {\n if (this.#isTapped) return;\n this.#isTapped = true;\n this.play(false);\n }\n\n onPointerUp() {\n if (!this.#isTapped) return;\n this.#isTapped = false;\n this.play(true);\n }\n\n private play(reverse: boolean) {\n this.#currentPlayer?.cancel();\n\n const isReduced = prefersReducedMotion(this.#documentRef);\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: this.moveDelay(),\n disabled: this.moveDisabled(),\n },\n isReduced,\n );\n\n if (config.disabled) return;\n\n let frames = resolveMoveFrames(this.moveWhileTap(), 'enter');\n if (reverse) {\n frames = reverseFrames(frames);\n }\n\n this.#currentPlayer = this.#engine.play(this.#host.nativeElement, frames, {\n config,\n spring: this.moveSpring(),\n disabled: false,\n });\n }\n\n ngOnDestroy(): void {\n this.#currentPlayer?.cancel();\n }\n}\n","import { Directive, forwardRef, input } from '@angular/core';\nimport { MoveSpring } from '../presets/presets.types';\nimport { MOVE_STAGGER_PARENT, MoveStaggerProvider } from '../tokens/stagger.tokens';\n\nexport type MoveStaggerDirection = 'first' | 'last' | 'center';\n\n@Directive({\n selector: '[moveStagger]',\n providers: [\n {\n provide: MOVE_STAGGER_PARENT,\n useExisting: forwardRef(() => MoveStaggerDirective),\n },\n ],\n})\nexport class MoveStaggerDirective implements MoveStaggerProvider {\n readonly moveStagger = input.required<number | MoveSpring>();\n readonly moveStaggerDirection = input<MoveStaggerDirection>('first');\n\n #children = new Set<HTMLElement>();\n\n register(el: HTMLElement): void {\n this.#children.add(el);\n }\n\n unregister(el: HTMLElement): void {\n this.#children.delete(el);\n }\n\n getDelay(el: HTMLElement): number {\n if (!this.#children.has(el)) return 0;\n\n const list = Array.from(this.#children).sort((a, b) => {\n // Unreliable on detached elements, but they are in DOM when sorting\n const pos = a.compareDocumentPosition(b);\n return pos & Node.DOCUMENT_POSITION_PRECEDING ? 1 : -1;\n });\n\n const index = list.indexOf(el);\n if (index === -1) return 0;\n\n const staggerConfig = this.moveStagger();\n // If it's a spring config but used for stagger, default to 100ms or try to derive.\n const staggerTime = typeof staggerConfig === 'number' ? staggerConfig : 100;\n\n const direction = this.moveStaggerDirection();\n const total = list.length;\n\n let staggerIndex = index;\n if (direction === 'last') {\n staggerIndex = total - 1 - index;\n } else if (direction === 'center') {\n const center = (total - 1) / 2;\n staggerIndex = Math.abs(index - center);\n }\n\n return staggerIndex * staggerTime;\n }\n}\n","import { Directive, ElementRef, inject, input, OnDestroy, afterEveryRender } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport { prefersReducedMotion, resolveMovementConfig } from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\n\n@Directive({\n selector: '[moveLayout]',\n})\nexport class MoveLayoutDirective implements OnDestroy {\n readonly moveLayout = input<boolean | ''>(true);\n readonly moveLayoutId = input<string | undefined>(undefined);\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n\n #snapshot: DOMRect | null = null;\n #currentPlayer: AnimationControls | null = null;\n #isReducedMotion = false;\n #isAnimating = false;\n\n constructor() {\n this.#isReducedMotion = prefersReducedMotion(this.#documentRef);\n\n afterEveryRender({\n earlyRead: () => {\n if (\n this.moveLayout() === false ||\n this.moveDisabled() ||\n this.#isReducedMotion ||\n this.#isAnimating\n ) {\n return null;\n }\n\n const el = this.#host.nativeElement;\n if (typeof el.getBoundingClientRect !== 'function') {\n return null;\n }\n\n const currentRect = el.getBoundingClientRect();\n\n if (this.#snapshot) {\n const dx = this.#snapshot.left - currentRect.left;\n const dy = this.#snapshot.top - currentRect.top;\n const dw = this.#snapshot.width / currentRect.width;\n const dh = this.#snapshot.height / currentRect.height;\n\n if (\n Math.abs(dx) > 0.5 ||\n Math.abs(dy) > 0.5 ||\n Math.abs(dw - 1) > 0.01 ||\n Math.abs(dh - 1) > 0.01\n ) {\n return {\n dx,\n dy,\n dw,\n dh,\n targetRect: currentRect,\n };\n }\n }\n\n this.#snapshot = currentRect;\n return null;\n },\n write: (\n flipData: { dx: number; dy: number; dw: number; dh: number; targetRect: DOMRect } | null,\n ) => {\n if (flipData) {\n this.playFlip(flipData);\n }\n },\n });\n }\n\n private playFlip(flipData: {\n dx: number;\n dy: number;\n dw: number;\n dh: number;\n targetRect: DOMRect;\n }) {\n this.#isAnimating = true;\n\n // The host is currently visually at its NEW position (unpainted).\n // We apply the inverse transform to make it LOOK like it's at the OLD position.\n // We apply transform origin 0 0 so scaling works correctly from top-left.\n const transformOrigin = this.#host.nativeElement.style.transformOrigin;\n this.#host.nativeElement.style.transformOrigin = '0 0';\n\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: this.moveDelay(),\n disabled: this.moveDisabled(),\n },\n this.#isReducedMotion,\n );\n\n this.#currentPlayer = this.#engine.play(\n this.#host.nativeElement,\n {\n x: [flipData.dx, 0],\n y: [flipData.dy, 0],\n scaleX: [flipData.dw, 1],\n scaleY: [flipData.dh, 1],\n },\n {\n config,\n spring: this.moveSpring(),\n disabled: false,\n onDone: () => {\n this.#isAnimating = false;\n this.#host.nativeElement.style.transformOrigin = transformOrigin;\n // Take final snapshot so next check is fresh\n this.#snapshot = this.#host.nativeElement.getBoundingClientRect();\n },\n },\n );\n }\n\n ngOnDestroy(): void {\n this.#currentPlayer?.cancel();\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, NgZone, OnDestroy, PLATFORM_ID, signal } from '@angular/core';\n\n/**\n * SmoothScrollService — Lenis-inspired smooth scroll for Angular.\n *\n * Desktop: intercepts wheel events → lerp interpolation → synthetic scrollTop.\n * Mobile: listens to native touch scroll → lerp interpolation → synthetic scrollTop.\n * Native scroll is prevented during touch to avoid the vibration conflict.\n *\n * The `scrollY` signal is updated on every RAF tick and can be consumed by\n * `MoveScrollDirective` (or any other consumer) to react to smooth scroll position\n * without relying on the native `scroll` event (which is NOT fired during smooth scroll).\n *\n * Usage (in app root or a layout service):\n *\n * constructor() {\n * inject(SmoothScrollService).init();\n * }\n */\n@Injectable({ providedIn: 'root' })\nexport class SmoothScrollService implements OnDestroy {\n readonly #document = inject(DOCUMENT);\n readonly #platformId = inject(PLATFORM_ID);\n readonly #zone = inject(NgZone);\n\n /** Lerp factor — lower = smoother/slower, higher = snappier. Range 0–1. */\n #lerp = 0.1;\n\n #targetY = 0;\n #currentY = 0;\n #rafId = 0;\n #isRunning = false;\n #scrollElement: HTMLElement | null = null;\n\n /**\n * Reactive scroll position (in pixels) updated on every RAF tick.\n * Use this signal instead of listening to `window.scroll` when smooth scroll is active,\n * since native scroll events are NOT fired during lerp-based scrolling.\n */\n readonly scrollY = signal(0);\n\n // Touch tracking\n #touchStartY = 0;\n #lastTouchY = 0;\n #touchVelocity = 0;\n #isTouching = false;\n #lastTouchTimestamp = 0;\n\n // ─── Event handlers ────────────────────────────────────────────────────────\n\n readonly #onWheel = (e: WheelEvent): void => {\n if (this.#isInsideScrollable(e.target as HTMLElement)) return;\n e.preventDefault();\n this.#targetY = this.#clamp(this.#targetY + e.deltaY);\n };\n\n readonly #onTouchStart = (e: TouchEvent): void => {\n if (this.#isInsideScrollable(e.target as HTMLElement)) return;\n this.#isTouching = true;\n this.#touchVelocity = 0;\n this.#touchStartY = e.touches[0].clientY;\n this.#lastTouchY = this.#touchStartY;\n this.#lastTouchTimestamp = e.timeStamp;\n };\n\n readonly #onTouchMove = (e: TouchEvent): void => {\n if (!this.#isTouching) return;\n if (this.#isInsideScrollable(e.target as HTMLElement)) return;\n\n // Prevent native scroll on the root element — we handle it ourselves\n e.preventDefault();\n\n const currentY = e.touches[0].clientY;\n const deltaTime = Math.max(e.timeStamp - this.#lastTouchTimestamp, 1);\n const deltaY = this.#lastTouchY - currentY; // inverted: swipe up → scroll down\n\n // Track velocity (px/ms) for momentum after lift\n this.#touchVelocity = deltaY / deltaTime;\n\n this.#targetY = this.#clamp(this.#targetY + deltaY);\n\n this.#lastTouchY = currentY;\n this.#lastTouchTimestamp = e.timeStamp;\n };\n\n readonly #onTouchEnd = (): void => {\n this.#isTouching = false;\n // Apply momentum: fling the targetY by velocity × decay frames\n this.#applyMomentum();\n };\n\n // ─── Public API ────────────────────────────────────────────────────────────\n\n /** Whether the service is currently active (i.e. `init()` has been called). */\n get isActive(): boolean {\n return this.#isRunning;\n }\n\n init(options: { lerp?: number; element?: HTMLElement } = {}): void {\n if (!isPlatformBrowser(this.#platformId)) return;\n if (this.#isRunning) return;\n\n this.#lerp = options.lerp ?? 0.1;\n this.#scrollElement = options.element ?? this.#document.documentElement;\n this.#currentY = this.#scrollElement.scrollTop;\n this.#targetY = this.#currentY;\n\n // Run entirely outside Angular zone to avoid change detection on every RAF\n this.#zone.runOutsideAngular(() => {\n const el = this.#scrollElement!;\n\n el.addEventListener('wheel', this.#onWheel, { passive: false });\n\n // Touch events must also be non-passive to call preventDefault()\n el.addEventListener('touchstart', this.#onTouchStart, { passive: true });\n el.addEventListener('touchmove', this.#onTouchMove, { passive: false });\n el.addEventListener('touchend', this.#onTouchEnd, { passive: true });\n\n this.#isRunning = true;\n this.#tick();\n });\n }\n\n destroy(): void {\n if (!isPlatformBrowser(this.#platformId)) return;\n this.#isRunning = false;\n cancelAnimationFrame(this.#rafId);\n\n const el = this.#scrollElement;\n if (el) {\n el.removeEventListener('wheel', this.#onWheel);\n el.removeEventListener('touchstart', this.#onTouchStart);\n el.removeEventListener('touchmove', this.#onTouchMove);\n el.removeEventListener('touchend', this.#onTouchEnd);\n }\n\n this.#scrollElement = null;\n }\n\n /** Scroll programmatically to a Y position */\n scrollTo(y: number, instant = false): void {\n this.#targetY = this.#clamp(y);\n if (instant) {\n this.#currentY = this.#targetY;\n this.#applyScroll(this.#currentY);\n }\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n // ─── Internal ──────────────────────────────────────────────────────────────\n\n #tick(): void {\n if (!this.#isRunning) return;\n\n this.#currentY += (this.#targetY - this.#currentY) * this.#lerp;\n\n if (Math.abs(this.#targetY - this.#currentY) < 0.1) {\n this.#currentY = this.#targetY;\n }\n\n this.#applyScroll(this.#currentY);\n this.#rafId = requestAnimationFrame(() => this.#tick());\n }\n\n /**\n * After finger lift, simulate Lenis-style momentum decay.\n * Velocity decays by a friction factor each frame until negligible.\n */\n #applyMomentum(): void {\n const FRICTION = 0.92; // higher = more glide; lower = stops faster\n const MIN_VELOCITY = 0.05; // px/ms threshold to stop\n\n let v = this.#touchVelocity * 16; // convert px/ms → px/frame (~16ms)\n\n const step = (): void => {\n if (!this.#isRunning || Math.abs(v) < MIN_VELOCITY) return;\n v *= FRICTION;\n this.#targetY = this.#clamp(this.#targetY + v);\n requestAnimationFrame(step);\n };\n\n requestAnimationFrame(step);\n }\n\n #applyScroll(y: number): void {\n if (!this.#scrollElement) return;\n this.#scrollElement.scrollTop = y;\n // Update the reactive signal so consumers (e.g. MoveScrollDirective) can react\n // without relying on native scroll events which don't fire during lerp-based scroll.\n this.scrollY.set(y);\n }\n\n #getMaxScroll(): number {\n if (!this.#scrollElement) return 0;\n return this.#scrollElement.scrollHeight - this.#scrollElement.clientHeight;\n }\n\n #clamp(y: number): number {\n return Math.max(0, Math.min(y, this.#getMaxScroll()));\n }\n\n /**\n * Checks if the element is inside a scrollable container OTHER than the root scroll element.\n * Used to let native scroll handle inner overflow-y:auto containers (like Lenis does).\n */\n #isInsideScrollable(el: HTMLElement): boolean {\n let current: HTMLElement | null = el.parentElement;\n while (current && current !== this.#scrollElement) {\n const { overflowY } = getComputedStyle(current);\n if (\n (overflowY === 'auto' || overflowY === 'scroll') &&\n current.scrollHeight > current.clientHeight\n ) {\n return true;\n }\n current = current.parentElement;\n }\n return false;\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\nimport { AnimationControls } from '../engines/animation-controls';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { MoveKeyframes } from '../presets/presets.types';\nimport { SmoothScrollService } from '../scroll/smooth-scroll.service';\n\n@Directive({\n selector: '[moveScroll]',\n exportAs: 'moveScroll',\n})\nexport class MoveScrollDirective implements OnInit, OnDestroy {\n readonly moveScroll = input<MoveKeyframes | undefined>(undefined);\n readonly moveScrollOffset = input<[string, string]>(['0 1', '1 0']);\n /** Optional CSS selector for a custom scrollable container. Defaults to window scroll. */\n readonly moveScrollContainer = input<string | null>(null);\n\n readonly progress = signal(0);\n\n readonly #documentRef = inject(DOCUMENT);\n readonly #platformId = inject(PLATFORM_ID);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n readonly #smoothScroll = inject(SmoothScrollService, { optional: true });\n\n #player: AnimationControls | null = null;\n #observer: IntersectionObserver | null = null;\n #isVisible = false;\n #scrollListener = () => this.#updateProgress();\n #scrollTarget: EventTarget | null = null;\n\n #targetProgress = 0;\n #animProgress = 0;\n #rafId: number | null = null;\n\n constructor() {\n // Recreate the player whenever keyframes change (e.g. user changes effect type).\n // Uses duration=1000 + linear easing so that currentTime ∈ [0,1000] maps cleanly\n // to the [0,1] scroll progress without easing distortion or premature finish.\n effect(() => {\n if (!isPlatformBrowser(this.#platformId)) return;\n const keyframes = this.moveScroll();\n\n if (this.#rafId !== null) {\n this.#documentRef.defaultView?.cancelAnimationFrame(this.#rafId);\n this.#rafId = null;\n }\n this.#player?.cancel();\n this.#player = null;\n this.#animProgress = 0;\n this.#targetProgress = 0;\n\n if (!keyframes) return;\n\n const view = this.#documentRef.defaultView;\n if (!view) return;\n\n this.#player = this.#engine.play(this.#host.nativeElement, keyframes, {\n config: { duration: 1000, easing: 'linear', delay: 0, disabled: false, iterations: 1 },\n });\n this.#player?.pause();\n\n // Sync the new player to the current scroll position immediately.\n this.#updateProgress();\n });\n\n // Smooth-scroll service support (fires via RAF signal instead of native scroll event).\n effect(() => {\n this.#smoothScroll?.scrollY();\n if (this.#smoothScroll?.isActive && this.#isVisible) {\n this.#updateProgress();\n }\n });\n }\n\n ngOnInit() {\n if (!isPlatformBrowser(this.#platformId)) return;\n\n const view = this.#documentRef.defaultView;\n if (!view) return;\n\n // Resolve scroll target: custom container selector or window.\n const containerSelector = this.moveScrollContainer();\n const containerEl = containerSelector\n ? (this.#documentRef.querySelector(containerSelector) as HTMLElement | null)\n : null;\n this.#scrollTarget = containerEl ?? view;\n\n // Use the custom container as IntersectionObserver root when available so that\n // the observer fires based on container-viewport visibility, not page-viewport visibility.\n this.#observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n this.#isVisible = entry.isIntersecting;\n\n if (entry.isIntersecting) {\n if (!this.#smoothScroll?.isActive) {\n this.#scrollTarget!.addEventListener('scroll', this.#scrollListener, { passive: true });\n }\n this.#updateProgress();\n } else {\n this.#scrollTarget?.removeEventListener('scroll', this.#scrollListener);\n }\n },\n {\n root: containerEl ?? null,\n threshold: [0, 0.1, 0.25, 0.5, 0.75, 0.9, 1],\n },\n );\n\n this.#observer.observe(this.#host.nativeElement);\n }\n\n #updateProgress() {\n const view = this.#documentRef.defaultView;\n if (!view) return;\n\n const el = this.#host.nativeElement;\n const containerEl = this.#scrollTarget instanceof HTMLElement ? this.#scrollTarget : null;\n\n let p: number;\n\n if (containerEl) {\n // Container-relative scroll progress.\n const containerRect = containerEl.getBoundingClientRect();\n const elRect = el.getBoundingClientRect();\n\n // Element's fixed position within the scroll content (invariant to scrollTop changes).\n const elTop = elRect.top - containerRect.top + containerEl.scrollTop;\n const elHeight = el.offsetHeight;\n const containerHeight = containerEl.clientHeight;\n\n const offsets = this.moveScrollOffset();\n const startScroll = this.#calcContainerOffset(elTop, elHeight, containerHeight, offsets[0]);\n const endScroll = this.#calcContainerOffset(elTop, elHeight, containerHeight, offsets[1]);\n\n const range = endScroll - startScroll;\n if (range === 0) return;\n\n p = (containerEl.scrollTop - startScroll) / range;\n } else {\n // Viewport-relative scroll progress (window scroll).\n const rect = el.getBoundingClientRect();\n const windowHeight = view.innerHeight;\n\n const offsets = this.moveScrollOffset();\n const startY = this.#calcViewportOffset(rect, windowHeight, offsets[0]);\n const endY = this.#calcViewportOffset(rect, windowHeight, offsets[1]);\n\n const totalDistance = startY - endY;\n if (totalDistance === 0) return;\n\n p = startY / totalDistance;\n }\n\n // Cap at 0.999 to prevent the WAAPI player's `finish` event from firing,\n // which would cancel the animation and make it uncontrollable for further scroll.\n p = Math.max(0, Math.min(0.999, p));\n this.#targetProgress = p;\n\n this.#startRaf();\n }\n\n #startRaf() {\n if (this.#rafId !== null) return;\n\n const view = this.#documentRef.defaultView;\n if (!view) return;\n\n const tick = () => {\n const diff = this.#targetProgress - this.#animProgress;\n\n // Stop the loop when close enough (< 0.001 difference).\n if (Math.abs(diff) < 0.001) {\n this.#animProgress = this.#targetProgress;\n this.#rafId = null;\n this.#applyProgress(this.#animProgress);\n return;\n }\n\n this.#animProgress += diff * 0.12;\n this.#applyProgress(this.#animProgress);\n this.#rafId = view.requestAnimationFrame(tick);\n };\n\n this.#rafId = view.requestAnimationFrame(tick);\n }\n\n #applyProgress(p: number) {\n this.progress.set(p);\n if (this.#player) {\n this.#player.currentTime = p * 1000;\n }\n }\n\n /**\n * Scroll position at which the animation start/end offset is reached.\n * \"elFraction viewFraction\" → e.g. \"0 1\" = element-top meets container-bottom.\n */\n #calcContainerOffset(\n elTop: number,\n elHeight: number,\n containerHeight: number,\n offsetStr: string,\n ): number {\n const [elVal, viewVal] = offsetStr.split(' ').map(parseFloat);\n return elTop + elHeight * elVal - containerHeight * viewVal;\n }\n\n #calcViewportOffset(rect: DOMRect, windowHeight: number, offsetStr: string): number {\n const [elVal, viewVal] = offsetStr.split(' ').map(parseFloat);\n return rect.top + rect.height * elVal - windowHeight * viewVal;\n }\n\n ngOnDestroy() {\n if (this.#rafId !== null) {\n this.#documentRef.defaultView?.cancelAnimationFrame(this.#rafId);\n this.#rafId = null;\n }\n this.#player?.cancel();\n this.#scrollTarget?.removeEventListener('scroll', this.#scrollListener);\n this.#observer?.disconnect();\n }\n}\n","import {\n Directive,\n effect,\n EmbeddedViewRef,\n forwardRef,\n inject,\n input,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n MOVE_PRESENCE_PARENT,\n MovePresenceChild,\n MovePresenceProvider,\n} from '../tokens/presence.tokens';\n\n@Directive({\n selector: '[movePresence]',\n providers: [\n {\n provide: MOVE_PRESENCE_PARENT,\n useExisting: forwardRef(() => MovePresenceDirective),\n },\n ],\n})\nexport class MovePresenceDirective implements MovePresenceProvider {\n readonly movePresence = input<unknown>();\n\n readonly #viewContainer = inject(ViewContainerRef);\n readonly #template = inject(TemplateRef);\n\n #view: EmbeddedViewRef<unknown> | null = null;\n #isRemoving = false;\n\n readonly #children = new Set<MovePresenceChild>();\n\n constructor() {\n effect(() => {\n const show = !!this.movePresence();\n\n if (show) {\n if (!this.#view) {\n this.#view = this.#viewContainer.createEmbeddedView(this.#template);\n this.#isRemoving = false;\n } else if (this.#isRemoving) {\n // If we were removing, cancel the removal\n this.#isRemoving = false;\n }\n } else if (!show && this.#view && !this.#isRemoving) {\n this.#isRemoving = true;\n this.removeView();\n }\n });\n }\n\n register(child: MovePresenceChild): void {\n this.#children.add(child);\n }\n\n unregister(child: MovePresenceChild): void {\n this.#children.delete(child);\n }\n\n private async removeView(): Promise<void> {\n const promises: (Promise<void> | void)[] = [];\n\n // Trigger leave on all registered children\n for (const child of this.#children) {\n promises.push(child.playLeave());\n }\n\n try {\n if (promises.length > 0) {\n await Promise.all(promises);\n }\n } catch {\n // Ignore errors in animations\n }\n\n if (this.#isRemoving && this.#view) {\n this.#viewContainer.clear();\n this.#view = null;\n this.#isRemoving = false;\n this.#children.clear();\n }\n }\n}\n","import { Directive, ElementRef, inject, input, OnDestroy } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { MoveSpring } from '../presets/presets.types';\n\nimport { prefersReducedMotion } from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\n\nexport type MoveDragConstraints =\n | { top?: number; right?: number; bottom?: number; left?: number }\n | HTMLElement;\n\n@Directive({\n selector: '[moveDrag]',\n host: {\n '(pointerdown)': 'onPointerDown($event)',\n '(pointermove)': 'onPointerMove($event)',\n '(pointerup)': 'onPointerUp($event)',\n '(pointercancel)': 'onPointerUp($event)',\n },\n})\nexport class MoveDragDirective implements OnDestroy {\n readonly moveDrag = input<boolean | ''>(true);\n readonly moveDragConstraints = input<MoveDragConstraints | undefined>(undefined);\n readonly moveDragElastic = input<number>(0.5);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n\n #isDragging = false;\n #pointerId: number | null = null;\n #startX = 0;\n #startY = 0;\n\n #_x = 0;\n #_y = 0;\n\n #dragBounds: { top?: number; right?: number; bottom?: number; left?: number } | null = null;\n #player: AnimationControls | null = null;\n\n onPointerDown(e: PointerEvent) {\n if (this.moveDrag() === false || e.button !== 0) return;\n this.#isDragging = true;\n this.#pointerId = e.pointerId;\n this.#host.nativeElement.setPointerCapture(e.pointerId);\n\n this.#player?.cancel();\n // read bounds cleanly before next render\n this.#dragBounds = this.resolveBounds();\n\n this.#startX = e.clientX - this.#_x;\n this.#startY = e.clientY - this.#_y;\n\n // Prevent text selection while dragging\n this.#host.nativeElement.style.touchAction = 'none';\n this.#host.nativeElement.style.userSelect = 'none';\n }\n\n onPointerMove(e: PointerEvent) {\n if (!this.#isDragging || e.pointerId !== this.#pointerId) return;\n\n this.#_x = e.clientX - this.#startX;\n this.#_y = e.clientY - this.#startY;\n\n this.applyTransform();\n }\n\n onPointerUp(e: PointerEvent) {\n if (!this.#isDragging || e.pointerId !== this.#pointerId) return;\n this.#isDragging = false;\n this.#host.nativeElement.releasePointerCapture(e.pointerId);\n this.#pointerId = null;\n\n this.#host.nativeElement.style.touchAction = '';\n this.#host.nativeElement.style.userSelect = '';\n\n this.snapBackIfNeeded();\n }\n\n private resolveBounds() {\n const constraints = this.moveDragConstraints();\n if (!constraints) return null;\n\n if (constraints instanceof HTMLElement) {\n const oldTranslate = this.#host.nativeElement.style.translate;\n this.#host.nativeElement.style.translate = 'none';\n\n const elRect = this.#host.nativeElement.getBoundingClientRect();\n const containerRect = constraints.getBoundingClientRect();\n\n this.#host.nativeElement.style.translate = oldTranslate;\n\n return {\n left: containerRect.left - elRect.left,\n right: containerRect.right - elRect.right,\n top: containerRect.top - elRect.top,\n bottom: containerRect.bottom - elRect.bottom,\n };\n }\n\n return constraints;\n }\n\n private applyTransform() {\n let x = this.#_x;\n let y = this.#_y;\n\n if (this.#dragBounds) {\n const elastic = this.moveDragElastic();\n\n if (this.#dragBounds.left !== undefined && x < this.#dragBounds.left) {\n x = this.#dragBounds.left - (this.#dragBounds.left - x) * elastic;\n } else if (this.#dragBounds.right !== undefined && x > this.#dragBounds.right) {\n x = this.#dragBounds.right + (x - this.#dragBounds.right) * elastic;\n }\n\n if (this.#dragBounds.top !== undefined && y < this.#dragBounds.top) {\n y = this.#dragBounds.top - (this.#dragBounds.top - y) * elastic;\n } else if (this.#dragBounds.bottom !== undefined && y > this.#dragBounds.bottom) {\n y = this.#dragBounds.bottom + (y - this.#dragBounds.bottom) * elastic;\n }\n }\n\n this.#host.nativeElement.style.translate = `${x}px ${y}px`;\n }\n\n private snapBackIfNeeded() {\n if (!this.#dragBounds) return;\n\n // We base the snap on the current logical _x, _y, calculating the nearest valid position.\n let targetX = this.#_x;\n let targetY = this.#_y;\n\n if (this.#dragBounds.left !== undefined && targetX < this.#dragBounds.left)\n targetX = this.#dragBounds.left;\n if (this.#dragBounds.right !== undefined && targetX > this.#dragBounds.right)\n targetX = this.#dragBounds.right;\n if (this.#dragBounds.top !== undefined && targetY < this.#dragBounds.top)\n targetY = this.#dragBounds.top;\n if (this.#dragBounds.bottom !== undefined && targetY > this.#dragBounds.bottom)\n targetY = this.#dragBounds.bottom;\n\n if (targetX !== this.#_x || targetY !== this.#_y) {\n // Find the currently visible coordinates (which include elasticity)\n let currentVisX = this.#_x;\n let currentVisY = this.#_y;\n\n const elastic = this.moveDragElastic();\n if (this.#dragBounds.left !== undefined && this.#_x < this.#dragBounds.left) {\n currentVisX = this.#dragBounds.left - (this.#dragBounds.left - this.#_x) * elastic;\n } else if (this.#dragBounds.right !== undefined && this.#_x > this.#dragBounds.right) {\n currentVisX = this.#dragBounds.right + (this.#_x - this.#dragBounds.right) * elastic;\n }\n if (this.#dragBounds.top !== undefined && this.#_y < this.#dragBounds.top) {\n currentVisY = this.#dragBounds.top - (this.#dragBounds.top - this.#_y) * elastic;\n } else if (this.#dragBounds.bottom !== undefined && this.#_y > this.#dragBounds.bottom) {\n currentVisY = this.#dragBounds.bottom + (this.#_y - this.#dragBounds.bottom) * elastic;\n }\n\n this.#player = this.#engine.play(\n this.#host.nativeElement,\n {\n x: [currentVisX, targetX],\n y: [currentVisY, targetY],\n },\n {\n config: { duration: 300, easing: 'ease', delay: 0, disabled: false },\n spring: this.moveSpring() ?? { stiffness: 500, damping: 30 },\n disabled: prefersReducedMotion(this.#documentRef),\n },\n );\n\n this.#_x = targetX;\n this.#_y = targetY;\n }\n }\n\n ngOnDestroy(): void {\n this.#player?.cancel();\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n Directive,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n} from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n applyInitialStyles,\n clearInitialStyles,\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\n\n@Directive({\n selector: '[moveInView]',\n})\nexport class MoveInViewDirective implements OnDestroy, OnInit {\n readonly moveInView = input<MovePreset | MoveKeyframes>('none');\n readonly moveInViewMargin = input<string>('0px');\n readonly moveInViewOnce = input<boolean>(true);\n /** CSS selector for the IntersectionObserver root (for inner scrollable containers). */\n readonly moveInViewRoot = input<string | null>(null);\n\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #platformId = inject(PLATFORM_ID);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n\n #player: AnimationControls | null = null;\n #observer: IntersectionObserver | null = null;\n #frames: MoveKeyframes | null = null;\n #isAnimated = false;\n\n ngOnInit(): void {\n if (!isPlatformBrowser(this.#platformId) || this.moveDisabled()) return;\n\n const isReduced = prefersReducedMotion(this.#documentRef);\n if (isReduced) return;\n\n this.#frames = resolveMoveFrames(this.moveInView(), 'enter');\n\n // Apply initial (invisible) state directly to DOM - avoid creating a player\n applyInitialStyles(this.#host.nativeElement, this.#frames);\n\n const rootSelector = this.moveInViewRoot();\n const rootEl = rootSelector ? this.#documentRef.querySelector(rootSelector) : null;\n\n this.#observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n if (entry.isIntersecting && !this.#isAnimated) {\n this.#playAnimation();\n if (this.moveInViewOnce()) {\n this.#isAnimated = true;\n this.#observer?.disconnect();\n }\n } else if (!entry.isIntersecting && !this.moveInViewOnce() && this.#isAnimated) {\n // Reset to initial state for re-animation\n this.#player?.cancel();\n this.#player = null;\n this.#isAnimated = false;\n if (this.#frames) {\n applyInitialStyles(this.#host.nativeElement, this.#frames);\n }\n }\n },\n {\n root: rootEl as HTMLElement | null,\n rootMargin: this.moveInViewMargin(),\n threshold: 0,\n },\n );\n\n this.#observer.observe(this.#host.nativeElement);\n }\n\n #playAnimation(): void {\n if (!this.#frames) return;\n\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: this.moveDelay() ?? 0,\n disabled: false,\n },\n false,\n );\n\n // Clear inline styles before animating so WAAPI can take over cleanly\n clearInitialStyles(this.#host.nativeElement);\n\n this.#player = this.#engine.play(this.#host.nativeElement, this.#frames, {\n config,\n spring: this.moveSpring(),\n disabled: false,\n });\n\n this.#isAnimated = true;\n }\n\n ngOnDestroy(): void {\n this.#observer?.disconnect();\n this.#player?.cancel();\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n Directive,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n} from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n applyInitialStyles,\n clearInitialStyles,\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\n\n@Directive({\n selector: '[moveText]',\n})\nexport class MoveTextDirective implements OnDestroy, OnInit {\n readonly moveText = input<MovePreset | MoveKeyframes>('fade-up');\n readonly moveTextSplit = input<'chars' | 'words'>('chars');\n readonly moveTextStagger = input<number>(30);\n\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #platformId = inject(PLATFORM_ID);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n\n #players: AnimationControls[] = [];\n #spans: HTMLElement[] = [];\n #observer: IntersectionObserver | null = null;\n #frames: MoveKeyframes | null = null;\n\n ngOnInit(): void {\n if (!isPlatformBrowser(this.#platformId) || this.moveDisabled()) return;\n\n // Defer to after Angular has completed its first rendering pass and set\n // the interpolated text content on the host element (same pattern as moveEnter).\n Promise.resolve().then(() => {\n this.#splitText();\n\n const isReduced = prefersReducedMotion(this.#documentRef);\n if (isReduced) return;\n\n this.#frames = resolveMoveFrames(this.moveText(), 'enter');\n\n // Apply initial (invisible) state to each span directly — no player yet\n this.#spans.forEach((span) => {\n if (this.#frames) {\n applyInitialStyles(span, this.#frames);\n }\n });\n\n // Create player and animate only when visible\n this.#observer = new IntersectionObserver((entries) => {\n if (entries[0].isIntersecting) {\n this.#playAll();\n this.#observer?.disconnect();\n }\n });\n\n this.#observer.observe(this.#host.nativeElement);\n });\n }\n\n #playAll(): void {\n if (!this.#frames) return;\n\n const baseDelay = this.moveDelay() ?? 0;\n const stagger = this.moveTextStagger();\n\n this.#spans.forEach((span, index) => {\n if (!this.#frames) return;\n\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: baseDelay + index * stagger,\n disabled: false,\n },\n false,\n );\n\n // Clear inline styles so WAAPI can animate from the keyframe starting point\n clearInitialStyles(span);\n\n const player = this.#engine.play(span, this.#frames!, {\n config,\n spring: this.moveSpring(),\n disabled: false,\n });\n\n if (player) {\n this.#players.push(player);\n }\n });\n }\n\n #splitText() {\n const el = this.#host.nativeElement;\n const text = (el.textContent ?? '').trim();\n el.innerHTML = '';\n el.setAttribute('aria-label', text);\n\n const byChars = this.moveTextSplit() === 'chars';\n\n if (byChars) {\n // Split character by character, preserving spaces as text nodes\n [...text].forEach((char) => {\n if (char === ' ') {\n el.appendChild(this.#documentRef.createTextNode(' '));\n return;\n }\n const span = this.#documentRef.createElement('span');\n span.setAttribute('aria-hidden', 'true');\n span.style.display = 'inline-block';\n span.textContent = char;\n el.appendChild(span);\n this.#spans.push(span);\n });\n } else {\n // Split word by word\n const words = text.split(/\\s+/);\n words.forEach((word: string, index: number) => {\n const span = this.#documentRef.createElement('span');\n span.setAttribute('aria-hidden', 'true');\n span.style.display = 'inline-block';\n span.style.whiteSpace = 'pre';\n span.textContent = index < words.length - 1 ? word + ' ' : word;\n el.appendChild(span);\n this.#spans.push(span);\n });\n }\n }\n\n ngOnDestroy(): void {\n this.#observer?.disconnect();\n this.#players.forEach((p) => p.cancel());\n }\n}\n","import {\n Directive,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { SmoothScrollService } from './smooth-scroll.service';\n\n/**\n * Directive that enables smooth scrolling on a specific scrollable container.\n *\n * Supports both mouse wheel (desktop) and touch scroll (mobile) with\n * momentum-based inertia after finger lift, similar to Lenis.\n *\n * ⚠️ SmoothScrollService is a root singleton. Do NOT use this directive\n * on multiple elements simultaneously — use it once on the page root or\n * inject the service directly where needed.\n *\n * Usage:\n * <div moveSmoothScroll [moveSmoothScrollLerp]=\"0.08\" style=\"overflow-y: auto; height: 100vh\">\n * ...content...\n * </div>\n *\n * Or use the service directly (e.g. on documentElement):\n * constructor() {\n * inject(SmoothScrollService).init({ lerp: 0.1 });\n * }\n */\n@Directive({\n selector: '[moveSmoothScroll]',\n})\nexport class MoveSmoothScrollDirective implements OnInit, OnDestroy {\n /** Lerp factor passed to SmoothScrollService. Lower = smoother. Range: 0–1. */\n readonly moveSmoothScrollLerp = input<number>(0.1);\n\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #scroll = inject(SmoothScrollService);\n readonly #platformId = inject(PLATFORM_ID);\n\n ngOnInit(): void {\n if (!isPlatformBrowser(this.#platformId)) return;\n\n this.#scroll.init({\n lerp: this.moveSmoothScrollLerp(),\n element: this.#host.nativeElement,\n });\n }\n\n ngOnDestroy(): void {\n this.#scroll.destroy();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnDestroy } from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n reverseFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\n\n@Directive({\n selector: '[moveWhileFocus]',\n host: {\n '(focusin)': 'onFocus()',\n '(focusout)': 'onBlur()',\n },\n})\nexport class MoveFocusDirective implements OnDestroy {\n readonly moveWhileFocus = input.required<MovePreset | MoveKeyframes>();\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n\n #currentPlayer: AnimationControls | null = null;\n #isFocused = false;\n\n onFocus() {\n if (this.#isFocused) return;\n this.#isFocused = true;\n this.play(false);\n }\n\n onBlur() {\n if (!this.#isFocused) return;\n this.#isFocused = false;\n this.play(true);\n }\n\n private play(reverse: boolean) {\n this.#currentPlayer?.cancel();\n\n const isReduced = prefersReducedMotion(this.#documentRef);\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: this.moveDelay(),\n disabled: this.moveDisabled(),\n },\n isReduced,\n );\n\n if (config.disabled) return;\n\n let frames = resolveMoveFrames(this.moveWhileFocus(), 'enter');\n if (reverse) {\n frames = reverseFrames(frames);\n }\n\n this.#currentPlayer = this.#engine.play(this.#host.nativeElement, frames, {\n config,\n spring: this.moveSpring(),\n disabled: false,\n });\n }\n\n ngOnDestroy(): void {\n this.#currentPlayer?.cancel();\n }\n}\n","import {\n Directive,\n ElementRef,\n effect,\n inject,\n input,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n} from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\nimport { SmoothScrollService } from '../scroll/smooth-scroll.service';\nimport { MoveKeyframes } from '../presets/presets.types';\n\n@Directive({\n selector: '[moveParallax]',\n exportAs: 'moveParallax',\n})\nexport class MoveParallaxDirective implements OnInit, OnDestroy {\n readonly moveParallax = input<number>(0.2);\n readonly moveParallaxAxis = input<'x' | 'y'>('y');\n\n readonly #documentRef = inject(DOCUMENT);\n readonly #platformId = inject(PLATFORM_ID);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n readonly #smoothScroll = inject(SmoothScrollService, { optional: true });\n\n #player: AnimationControls | null = null;\n #observer: IntersectionObserver | null = null;\n #isVisible = false;\n #scrollListener = () => this.#updateProgress();\n\n #elHeight = 0;\n #windowHeight = 0;\n #totalDistance = 0;\n #initialAbsoluteTop = 0;\n\n constructor() {\n effect(() => {\n this.#smoothScroll?.scrollY();\n if (this.#smoothScroll?.isActive && this.#isVisible) {\n this.#updateProgress();\n }\n });\n }\n\n ngOnInit() {\n if (!isPlatformBrowser(this.#platformId)) return;\n\n const view = this.#documentRef.defaultView;\n if (!view) return;\n\n this.#initAnimation();\n\n this.#observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n this.#isVisible = entry.isIntersecting;\n\n if (entry.isIntersecting) {\n if (!this.#smoothScroll?.isActive) {\n view.addEventListener('scroll', this.#scrollListener, { passive: true });\n }\n this.#updateProgress();\n } else {\n view.removeEventListener('scroll', this.#scrollListener);\n }\n },\n { root: null },\n );\n\n this.#observer.observe(this.#host.nativeElement);\n\n // Re-initialize animation on resize to update dimensions\n view.addEventListener('resize', this.#resizeListener, { passive: true });\n }\n\n #resizeListener = () => {\n this.#initAnimation();\n };\n\n #initAnimation() {\n const view = this.#documentRef.defaultView;\n if (!view) return;\n\n this.#windowHeight = view.innerHeight;\n this.#elHeight = this.#host.nativeElement.offsetHeight;\n this.#totalDistance = this.#windowHeight + this.#elHeight;\n\n const scrollY = this.#smoothScroll?.isActive\n ? this.#smoothScroll.scrollY()\n : view.scrollY || view.pageYOffset || 0;\n const rect = this.#host.nativeElement.getBoundingClientRect();\n this.#initialAbsoluteTop = scrollY + rect.top;\n\n const speed = this.moveParallax();\n const axis = this.moveParallaxAxis();\n\n // Total translation distance across the entire scroll intersection\n const translateDist = this.#totalDistance * speed;\n\n const frames: MoveKeyframes = {};\n if (axis === 'x') {\n frames.x = [translateDist / 2, -translateDist / 2];\n } else {\n frames.y = [translateDist / 2, -translateDist / 2];\n }\n\n this.#player?.cancel();\n\n this.#player = this.#engine.play(this.#host.nativeElement, frames, {\n config: { duration: 1000, delay: 0, easing: 'linear', disabled: false, iterations: 1 },\n });\n this.#player?.pause();\n\n if (this.#player) {\n this.#player.currentTime = 0;\n }\n }\n\n #updateProgress() {\n const view = this.#documentRef.defaultView;\n if (!view || this.#totalDistance === 0) return;\n\n const scrollY = this.#smoothScroll?.isActive\n ? this.#smoothScroll.scrollY()\n : view.scrollY || view.pageYOffset || 0;\n\n // Efficiently calculate the current visual top without triggering layout thrashing\n // or feedback loops caused by the active CSS transform translating the element.\n const currentVirtualTop = this.#initialAbsoluteTop - scrollY;\n\n // progress is 0 when element top hits window bottom (currentVirtualTop === windowHeight)\n // progress is 1 when element bottom hits window top (currentVirtualTop === -elHeight)\n let p = (this.#windowHeight - currentVirtualTop) / this.#totalDistance;\n p = Math.max(0, Math.min(1, p));\n\n if (this.#player) {\n this.#player.currentTime = p * 1000;\n }\n }\n\n ngOnDestroy() {\n this.#player?.cancel();\n const view = this.#documentRef.defaultView;\n if (view) {\n view.removeEventListener('scroll', this.#scrollListener);\n view.removeEventListener('resize', this.#resizeListener);\n }\n this.#observer?.disconnect();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\n\n@Directive({\n selector: '[moveLoop]',\n})\nexport class MoveLoopDirective implements OnDestroy, OnInit {\n readonly moveLoop = input<MovePreset | MoveKeyframes>('none');\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n\n #player: AnimationControls | null = null;\n\n ngOnInit(): void {\n const frames = resolveMoveFrames(this.moveLoop(), 'loop');\n\n // Skip noop presets to avoid creating an infinite animation that does nothing\n if (this.moveLoop() === 'none' || Object.keys(frames).length === 0) {\n return;\n }\n\n const isReduced = prefersReducedMotion(this.#documentRef);\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: this.moveDelay(),\n disabled: this.moveDisabled(),\n },\n isReduced,\n );\n\n this.#player = this.#engine.play(this.#host.nativeElement, frames, {\n config,\n spring: this.moveSpring(),\n disabled: config.disabled,\n iterations: Infinity,\n });\n }\n\n ngOnDestroy(): void {\n this.#player?.cancel();\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { MOVEMENT_CONFIG, MOVEMENT_DEFAULTS, MovementConfig } from '../tokens/movement.tokens';\n\nexport type MovementConfigInput = Partial<MovementConfig>;\n\nexport function provideMovement(config: MovementConfigInput = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: MOVEMENT_CONFIG,\n useValue: {\n ...MOVEMENT_DEFAULTS,\n ...config,\n } satisfies MovementConfig,\n },\n ]);\n}\n","import { MoveAnimateDirective } from './directives/move-animate.directive';\nimport { MoveAnimationDirective } from './directives/move-animation.directive';\nimport { MoveEnterDirective } from './directives/move-enter.directive';\nimport { MoveLeaveDirective } from './directives/move-leave.directive';\nimport { MoveHoverDirective } from './directives/move-hover.directive';\nimport { MoveTapDirective } from './directives/move-tap.directive';\nimport { MoveVariantsDirective } from './directives/move-variants.directive';\nimport { MoveStaggerDirective } from './directives/move-stagger.directive';\nimport { MoveLayoutDirective } from './directives/move-layout.directive';\nimport { MoveScrollDirective } from './directives/move-scroll.directive';\nimport { MovePresenceDirective } from './directives/move-presence.directive';\nimport { MoveDragDirective } from './directives/move-drag.directive';\nimport { MoveInViewDirective } from './directives/move-in-view.directive';\nimport { MoveTextDirective } from './directives/move-text.directive';\nimport { MoveSmoothScrollDirective } from './scroll/move-smooth-scroll.directive';\nimport { MoveFocusDirective } from './directives/move-focus.directive';\nimport { MoveParallaxDirective } from './directives/move-parallax.directive';\nimport { MoveLoopDirective } from './directives/move-loop.directive';\n\nexport const MOVEMENT_DIRECTIVES = [\n MoveEnterDirective,\n MoveLeaveDirective,\n MoveAnimateDirective,\n MoveHoverDirective,\n MoveTapDirective,\n MoveVariantsDirective,\n MoveStaggerDirective,\n MoveLayoutDirective,\n MoveScrollDirective,\n MovePresenceDirective,\n MoveDragDirective,\n MoveInViewDirective,\n MoveTextDirective,\n MoveSmoothScrollDirective,\n MoveFocusDirective,\n MoveParallaxDirective,\n MoveAnimationDirective,\n MoveLoopDirective,\n] as const;\n\nexport * from './directives/move-animate.directive';\nexport * from './directives/move-enter.directive';\nexport * from './directives/move-leave.directive';\nexport * from './directives/move-hover.directive';\nexport * from './directives/move-tap.directive';\nexport * from './directives/move-variants.directive';\nexport * from './directives/move-stagger.directive';\nexport * from './directives/move-layout.directive';\nexport * from './directives/move-scroll.directive';\nexport * from './directives/move-presence.directive';\nexport * from './directives/move-drag.directive';\nexport * from './directives/move-in-view.directive';\nexport * from './directives/move-text.directive';\nexport * from './directives/move-focus.directive';\nexport * from './directives/move-parallax.directive';\nexport * from './directives/move-animation.directive';\nexport * from './directives/move-loop.directive';\nexport * from './directives/move-animation.utils';\nexport * from './scroll/smooth-scroll.service';\nexport * from './scroll/move-smooth-scroll.directive';\nexport * from './engines/animation-controls';\nexport * from './engines/animation-engine.service';\nexport * from './engines/spring-player';\nexport * from './engines/waapi-player';\nexport * from './presets/presets';\nexport * from './presets/presets.types';\nexport * from './providers/provide-movement';\nexport * from './tokens/movement.tokens';\nexport * from './tokens/presence.tokens';\nexport * from './tokens/stagger.tokens';\n","/*\n * Public API Surface of movement\n */\n\nexport * from './lib/movement';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"angular-movement.mjs","sources":["../../../projects/movement/src/lib/tokens/movement.tokens.ts","../../../projects/movement/src/lib/constants.ts","../../../projects/movement/src/lib/engines/keyframe-composer.ts","../../../projects/movement/src/lib/presets/presets.ts","../../../projects/movement/src/lib/directives/move-animation.utils.ts","../../../projects/movement/src/lib/engines/waapi-player.ts","../../../projects/movement/src/lib/engines/spring-player.ts","../../../projects/movement/src/lib/engines/animation-engine.service.ts","../../../projects/movement/src/lib/tokens/stagger.tokens.ts","../../../projects/movement/src/lib/tokens/presence.tokens.ts","../../../projects/movement/src/lib/directives/move-variants.directive.ts","../../../projects/movement/src/lib/directives/move-animate.directive.ts","../../../projects/movement/src/lib/directives/move-animation.directive.ts","../../../projects/movement/src/lib/directives/move-enter.directive.ts","../../../projects/movement/src/lib/directives/move-leave.directive.ts","../../../projects/movement/src/lib/directives/move-hover.directive.ts","../../../projects/movement/src/lib/directives/move-tap.directive.ts","../../../projects/movement/src/lib/directives/move-stagger.directive.ts","../../../projects/movement/src/lib/directives/move-layout.directive.ts","../../../projects/movement/src/lib/scroll/smooth-scroll.service.ts","../../../projects/movement/src/lib/directives/move-scroll.directive.ts","../../../projects/movement/src/lib/directives/move-presence.directive.ts","../../../projects/movement/src/lib/directives/move-drag.directive.ts","../../../projects/movement/src/lib/directives/move-in-view.directive.ts","../../../projects/movement/src/lib/directives/move-text.directive.ts","../../../projects/movement/src/lib/scroll/move-smooth-scroll.directive.ts","../../../projects/movement/src/lib/directives/move-focus.directive.ts","../../../projects/movement/src/lib/directives/move-parallax.directive.ts","../../../projects/movement/src/lib/directives/move-loop.directive.ts","../../../projects/movement/src/lib/directives/move-target.directive.ts","../../../projects/movement/src/lib/providers/provide-movement.ts","../../../projects/movement/src/lib/movement.ts","../../../projects/movement/src/public-api.ts","../../../projects/movement/src/angular-movement.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface MovementConfig {\n duration: number;\n easing: string;\n delay: number;\n disabled: boolean;\n iterations?: number;\n}\n\nexport const MOVEMENT_DEFAULTS: MovementConfig = {\n duration: 300,\n easing: 'cubic-bezier(0.16, 1, 0.3, 1)',\n delay: 0,\n disabled: false,\n iterations: 1,\n};\n\nexport const MOVEMENT_CONFIG = new InjectionToken<MovementConfig>('MOVEMENT_CONFIG', {\n factory: () => ({ ...MOVEMENT_DEFAULTS }),\n});\n","export const DEFAULT_DURATION = 300;\nexport const DEFAULT_EASING = 'ease';\nexport const DEFAULT_DELAY = 0;\n\nexport const DEFAULT_PERSPECTIVE = '1200px';\n\nexport const DEFAULT_SPRING = {\n stiffness: 500,\n damping: 30,\n} as const;\n\nexport const SPRING_BASE = {\n stiffness: 100,\n damping: 10,\n mass: 1,\n velocity: 0,\n} as const;\n\nexport const SIMULATION_TICK_RATE = 1000 / 60; // 60fps\nexport const SIMULATION_MAX_ITERATIONS = 600;\nexport const SIMULATION_SETTLED_THRESHOLD = 0.001;\n\nexport const SCROLL_MAP_DURATION = 1000;\nexport const SCROLL_WAAPI_CAP = 0.999;\nexport const SCROLL_LERP_FACTOR = 0.12;\nexport const SCROLL_RAF_THRESHOLD = 0.001;\n\nexport const SMOOTH_SCROLL_FRICTION = 0.92;\nexport const SMOOTH_SCROLL_MIN_VELOCITY = 0.05;\n\nexport const DEFAULT_STAGGER_TIME = 100;\nexport const DEFAULT_TEXT_STAGGER = 30;\n\nexport const DRAG_SNAP_DURATION = 300;\nexport const DRAG_SNAP_EASING = 'ease';\n","import { MoveKeyframes } from '../presets/presets.types';\nimport { DEFAULT_PERSPECTIVE } from '../constants';\n\nexport interface ComposedKeyframe extends Keyframe {\n opacity?: number;\n translate?: string;\n scale?: string;\n rotate?: string;\n filter?: string;\n transform?: string;\n}\n\nfunction getValAt(arr: readonly number[] | undefined, index: number): number | undefined {\n if (!arr || arr.length === 0) return undefined;\n return arr[Math.min(index, arr.length - 1)];\n}\n\nfunction getInterpolated(\n arr: readonly number[] | undefined,\n i1: number,\n i2: number,\n p: number,\n): number | undefined {\n if (!arr || arr.length === 0) return undefined;\n const v1 = arr[Math.min(i1, arr.length - 1)];\n const v2 = arr[Math.min(i2, arr.length - 1)];\n return v1 + (v2 - v1) * p;\n}\n\nconst KNOWN_KEYS = new Set([\n 'opacity',\n 'x',\n 'y',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'blur',\n]);\n\nfunction buildKeyframe(\n frames: MoveKeyframes,\n getVal: (arr: readonly number[] | undefined) => number | undefined,\n): ComposedKeyframe {\n const keyframe: ComposedKeyframe = {};\n\n const opacity = getVal(frames.opacity);\n if (opacity !== undefined) {\n keyframe.opacity = opacity;\n }\n\n const x = getVal(frames.x);\n const y = getVal(frames.y);\n if (x !== undefined || y !== undefined) {\n keyframe.translate = `${x ?? 0}px ${y ?? 0}px`;\n }\n\n const scale = getVal(frames.scale);\n if (scale !== undefined) {\n keyframe.scale = `${scale}`;\n } else {\n const scaleX = getVal(frames.scaleX);\n const scaleY = getVal(frames.scaleY);\n if (scaleX !== undefined || scaleY !== undefined) {\n keyframe.scale = `${scaleX ?? 1} ${scaleY ?? 1}`;\n }\n }\n\n const rotate = getVal(frames.rotate);\n if (rotate !== undefined) {\n keyframe.rotate = `${rotate}deg`;\n }\n\n const blur = getVal(frames.blur);\n if (blur !== undefined) {\n keyframe.filter = `blur(${blur}px)`;\n }\n\n const rotateX = getVal(frames.rotateX);\n const rotateY = getVal(frames.rotateY);\n if (rotateX !== undefined || rotateY !== undefined) {\n keyframe.transform = `perspective(${DEFAULT_PERSPECTIVE}) rotateX(${rotateX ?? 0}deg) rotateY(${rotateY ?? 0}deg)`;\n }\n\n // Passthrough arbitrary properties for WAAPI (e.g. strokeDashoffset)\n for (const key in frames) {\n if (KNOWN_KEYS.has(key)) continue;\n const arr = frames[key];\n const val = getVal(arr);\n if (val !== undefined) {\n (keyframe as Record<string, unknown>)[key] = val;\n }\n }\n\n return keyframe;\n}\n\nexport function composeKeyframeAt(frames: MoveKeyframes, index: number): ComposedKeyframe {\n return buildKeyframe(frames, (arr) => getValAt(arr, index));\n}\n\nexport function composeInterpolatedKeyframe(\n frames: MoveKeyframes,\n i1: number,\n i2: number,\n p: number,\n): ComposedKeyframe {\n return buildKeyframe(frames, (arr) => getInterpolated(arr, i1, i2, p));\n}\n\nexport function composeInitialStyle(frames: MoveKeyframes): ComposedKeyframe {\n return buildKeyframe(frames, (arr) => (arr && arr.length > 0 ? arr[0] : undefined));\n}\n\nexport function composeFinalStyle(frames: MoveKeyframes): ComposedKeyframe {\n return buildKeyframe(frames, (arr) => (arr && arr.length > 0 ? arr[arr.length - 1] : undefined));\n}\n\nconst KNOWN_STYLE_KEYS = new Set([\n 'opacity',\n 'translate',\n 'scale',\n 'rotate',\n 'transform',\n 'filter',\n]);\n\nexport function applyComposedStyle(el: Element, style: ComposedKeyframe): void {\n const styledEl = el as HTMLElement;\n if (style.opacity !== undefined) styledEl.style.opacity = `${style.opacity}`;\n if (style.translate !== undefined) styledEl.style.translate = style.translate;\n if (style.scale !== undefined) styledEl.style.scale = style.scale;\n if (style.rotate !== undefined) styledEl.style.rotate = style.rotate;\n if (style.transform !== undefined) styledEl.style.transform = style.transform;\n if (style.filter !== undefined) styledEl.style.filter = style.filter;\n\n // Passthrough arbitrary properties (e.g. strokeDashoffset)\n for (const key in style) {\n if (KNOWN_STYLE_KEYS.has(key)) continue;\n const val = (style as Record<string, unknown>)[key];\n if (val !== undefined) {\n (styledEl.style as unknown as Record<string, string>)[key] = String(val);\n }\n }\n}\n\nexport function clearComposedStyle(el: Element, extraKeys?: readonly string[]): void {\n const styledEl = el as HTMLElement;\n styledEl.style.opacity = '';\n styledEl.style.translate = '';\n styledEl.style.scale = '';\n styledEl.style.rotate = '';\n styledEl.style.transform = '';\n styledEl.style.filter = '';\n\n if (extraKeys) {\n for (const key of extraKeys) {\n (styledEl.style as unknown as Record<string, string>)[key] = '';\n }\n }\n}\n","import { MovePreset, MovePresetDefinition } from './presets.types';\n\nconst DEFAULT_FADE_OPACITY = [0, 1] as const;\nconst DEFAULT_LEAVE_OPACITY = [1, 0] as const;\n\nexport const MOVE_PRESETS: Record<MovePreset, MovePresetDefinition> = {\n 'fade-up': {\n enter: { opacity: DEFAULT_FADE_OPACITY, y: [24, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, y: [0, -16] },\n },\n 'fade-down': {\n enter: { opacity: DEFAULT_FADE_OPACITY, y: [-24, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, y: [0, 16] },\n },\n 'fade-left': {\n enter: { opacity: DEFAULT_FADE_OPACITY, x: [24, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, x: [0, -16] },\n },\n 'fade-right': {\n enter: { opacity: DEFAULT_FADE_OPACITY, x: [-24, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, x: [0, 16] },\n },\n 'slide-up': {\n enter: { y: [60, 0], opacity: DEFAULT_FADE_OPACITY },\n leave: { y: [0, -60], opacity: DEFAULT_LEAVE_OPACITY },\n },\n 'slide-down': {\n enter: { y: [-60, 0], opacity: DEFAULT_FADE_OPACITY },\n leave: { y: [0, 60], opacity: DEFAULT_LEAVE_OPACITY },\n },\n 'slide-left': {\n enter: { x: [60, 0], opacity: DEFAULT_FADE_OPACITY },\n leave: { x: [0, -60], opacity: DEFAULT_LEAVE_OPACITY },\n },\n 'slide-right': {\n enter: { x: [-60, 0], opacity: DEFAULT_FADE_OPACITY },\n leave: { x: [0, 60], opacity: DEFAULT_LEAVE_OPACITY },\n },\n 'zoom-in': {\n enter: { opacity: DEFAULT_FADE_OPACITY, scale: [0.5, 1] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, scale: [1, 0.5] },\n },\n 'zoom-out': {\n enter: { opacity: DEFAULT_FADE_OPACITY, scale: [1.3, 1] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, scale: [1, 1.3] },\n },\n 'flip-x': {\n enter: { opacity: DEFAULT_FADE_OPACITY, rotateX: [-90, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, rotateX: [0, 90] },\n },\n 'flip-y': {\n enter: { opacity: DEFAULT_FADE_OPACITY, rotateY: [-90, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, rotateY: [0, 90] },\n },\n 'bounce-in': {\n enter: { opacity: DEFAULT_FADE_OPACITY, y: [30, 0], scale: [0.85, 1] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, y: [0, -20], scale: [1, 0.9] },\n loop: { y: [0, -10, 0], scale: [1, 0.95, 1] },\n },\n 'blur-in': {\n enter: { opacity: DEFAULT_FADE_OPACITY, blur: [10, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, blur: [0, 10] },\n },\n spin: {\n enter: { opacity: DEFAULT_FADE_OPACITY, rotate: [-360, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, rotate: [0, 360] },\n loop: { rotate: [0, 360] },\n },\n pulse: {\n enter: { scale: [1, 1.05, 1] },\n leave: { scale: [1, 0.95, 1] },\n loop: { scale: [1, 1.05, 1] },\n },\n shake: {\n enter: { opacity: DEFAULT_FADE_OPACITY, x: [0, -10, 10, -10, 10, -5, 5, -5, 5, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, x: [0, 10, -10, 10, -10, 5, -5, 5, -5, 0] },\n },\n swing: {\n enter: { opacity: DEFAULT_FADE_OPACITY, rotate: [0, 15, -10, 5, -5, 0] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, rotate: [0, -15, 10, -5, 5, 0] },\n },\n wobble: {\n enter: {\n opacity: DEFAULT_FADE_OPACITY,\n x: [0, -25, 20, -15, 10, -5, 0],\n rotate: [0, -5, 3, -3, 2, -1, 0],\n },\n leave: {\n opacity: DEFAULT_LEAVE_OPACITY,\n x: [0, 25, -20, 15, -10, 5, 0],\n rotate: [0, 5, -3, 3, -2, 1, 0],\n },\n },\n 'rubber-band': {\n enter: {\n opacity: DEFAULT_FADE_OPACITY,\n scaleX: [1, 1.25, 0.75, 1.15, 0.95, 1.05, 1],\n scaleY: [1, 0.75, 1.25, 0.85, 1.05, 0.95, 1],\n },\n leave: {\n opacity: DEFAULT_LEAVE_OPACITY,\n scaleX: [1, 1.25, 0.75, 1.15, 0.95, 1.05, 1],\n scaleY: [1, 0.75, 1.25, 0.85, 1.05, 0.95, 1],\n },\n },\n 'heart-beat': {\n enter: { opacity: DEFAULT_FADE_OPACITY, scale: [1, 1.3, 1, 1.3, 1] },\n leave: { opacity: DEFAULT_LEAVE_OPACITY, scale: [1, 1.3, 1, 1.3, 1] },\n loop: { scale: [1, 1.3, 1, 1.3, 1] },\n },\n tada: {\n enter: {\n opacity: DEFAULT_FADE_OPACITY,\n scale: [1, 0.9, 1.1, 1.1, 1.1, 1],\n rotate: [0, -3, 3, -3, 3, 0],\n },\n leave: {\n opacity: DEFAULT_LEAVE_OPACITY,\n scale: [1, 0.9, 1.1, 1.1, 1.1, 1],\n rotate: [0, 3, -3, 3, -3, 0],\n },\n },\n jello: {\n enter: {\n opacity: DEFAULT_FADE_OPACITY,\n scaleX: [1, 1.25, 0.75, 1.15, 0.95, 1.05, 1],\n scaleY: [1, 0.75, 1.25, 0.85, 1.05, 0.95, 1],\n },\n leave: {\n opacity: DEFAULT_LEAVE_OPACITY,\n scaleX: [1, 1.25, 0.75, 1.15, 0.95, 1.05, 1],\n scaleY: [1, 0.75, 1.25, 0.85, 1.05, 0.95, 1],\n },\n },\n 'light-speed': {\n enter: { opacity: [0, 1], x: [200, 0], scaleX: [0, 1] },\n leave: { opacity: [1, 0], x: [0, 200], scaleX: [1, 0] },\n },\n 'roll-in': {\n enter: { opacity: [0, 1], x: [-100, 0], rotate: [-120, 0] },\n leave: { opacity: [1, 0], x: [0, 100], rotate: [0, 120] },\n },\n none: {\n enter: { opacity: [1, 1] },\n leave: { opacity: [1, 1] },\n },\n};\n","import {\n applyComposedStyle,\n clearComposedStyle,\n composeInitialStyle,\n} from '../engines/keyframe-composer';\nimport { MOVE_PRESETS } from '../presets/presets';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MovementConfig } from '../tokens/movement.tokens';\n\nexport type MovePhase = 'enter' | 'leave' | 'loop';\n\nexport type MoveDirectiveInput = MovePreset | MoveKeyframes;\n\nexport interface MoveInputOverrides {\n duration?: number;\n easing?: string;\n delay?: number;\n disabled?: boolean;\n iterations?: number;\n}\n\nexport function resolveMovementConfig(\n defaults: MovementConfig,\n overrides: MoveInputOverrides,\n reducedMotion: boolean,\n): MovementConfig {\n if (reducedMotion && typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.warn(\n '[Movement] Animations disabled: prefers-reduced-motion is active. ' +\n 'Disable \"Reduce motion\" in your OS accessibility settings to see animations.',\n );\n }\n\n return {\n duration: Math.max(0, overrides.duration ?? defaults.duration),\n easing: overrides.easing ?? defaults.easing,\n delay: Math.max(0, overrides.delay ?? defaults.delay),\n disabled: reducedMotion || (overrides.disabled ?? defaults.disabled),\n iterations: overrides.iterations ?? defaults.iterations,\n };\n}\n\nexport function resolveMoveFrames(value: MoveDirectiveInput, phase: MovePhase): MoveKeyframes {\n if (typeof value === 'string') {\n const preset = MOVE_PRESETS[value];\n if (!preset) {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.warn(`[Movement] Unknown preset: \"${value}\". Using \"none\" preset.`);\n }\n return MOVE_PRESETS['none'][phase] ?? MOVE_PRESETS['none'].enter;\n }\n return preset[phase] ?? preset.enter;\n }\n\n return value;\n}\n\nexport function prefersReducedMotion(documentRef: Document): boolean {\n const view = documentRef.defaultView;\n if (!view || typeof view.matchMedia !== 'function') {\n return false;\n }\n\n return view.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/**\n * Reverses all keyframe value arrays in a MoveKeyframes object.\n * Used by hover and tap directives to animate back to the original state.\n */\nexport function reverseFrames(frames: MoveKeyframes): MoveKeyframes {\n const reversed: MoveKeyframes = {};\n for (const key in frames) {\n const k = key as keyof MoveKeyframes;\n const arr = frames[k];\n if (arr) {\n reversed[k] = [...arr].reverse() as readonly number[];\n }\n }\n return reversed;\n}\n\n/**\n * Applies the first keyframe values as inline styles to an element.\n * Used by in-view and text directives to set the initial (hidden) state\n * before the IntersectionObserver triggers the animation.\n */\nexport function applyInitialStyles(el: HTMLElement, frames: MoveKeyframes): void {\n applyComposedStyle(el, composeInitialStyle(frames));\n}\n\n/**\n * Clears all inline styles set by `applyInitialStyles`.\n * Called just before WAAPI animates so it can take full control.\n */\nexport function clearInitialStyles(el: HTMLElement): void {\n clearComposedStyle(el);\n}\n\n/**\n * Validates MoveSpring configuration and returns sanitized values.\n * Warns in development mode for invalid values.\n */\nexport function validateSpring(spring: MoveSpring | undefined): MoveSpring | undefined {\n if (!spring) return undefined;\n\n const validated: MoveSpring = {};\n\n if (spring.stiffness !== undefined) {\n if (spring.stiffness <= 0 && typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.warn('[Movement] Spring stiffness must be > 0. Using default.');\n }\n validated.stiffness = spring.stiffness > 0 ? spring.stiffness : 100;\n }\n\n if (spring.damping !== undefined) {\n if (spring.damping < 0 && typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.warn('[Movement] Spring damping must be >= 0. Using default.');\n }\n validated.damping = spring.damping >= 0 ? spring.damping : 10;\n }\n\n if (spring.mass !== undefined) {\n if (spring.mass <= 0 && typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.warn('[Movement] Spring mass must be > 0. Using default.');\n }\n validated.mass = spring.mass > 0 ? spring.mass : 1;\n }\n\n if (spring.velocity !== undefined) {\n validated.velocity = spring.velocity;\n }\n\n return validated;\n}\n\n/**\n * Validates scroll offset string format \"elFraction viewFraction\".\n * Returns true if valid, warns in dev mode if invalid.\n */\nexport function isValidScrollOffset(offset: string): boolean {\n const parts = offset.split(' ').map(parseFloat);\n if (parts.length !== 2 || parts.some(Number.isNaN)) {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.warn(\n `[Movement] Invalid scroll offset: \"${offset}\". Expected format \"elFraction viewFraction\" (e.g. \"0 1\").`,\n );\n }\n return false;\n }\n return true;\n}\n\n/**\n * Validates drag elastic factor. Must be between 0 and 1.\n */\nexport function validateDragElastic(elastic: number): number {\n if (elastic < 0 || elastic > 1) {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.warn(\n `[Movement] Drag elastic must be between 0 and 1. Got ${elastic}. Clamping to range.`,\n );\n }\n return Math.max(0, Math.min(1, elastic));\n }\n return elastic;\n}\n","import { AnimationControls } from './animation-controls';\nimport { MoveKeyframes } from '../presets/presets.types';\nimport { MovementConfig } from '../tokens/movement.tokens';\nimport { composeKeyframeAt } from './keyframe-composer';\n\nexport class WaapiPlayer implements AnimationControls {\n #animation: Animation | null = null;\n #resolveFinished!: () => void;\n public readonly finished = new Promise<void>((resolve) => {\n this.#resolveFinished = resolve;\n });\n\n constructor(host: Element, frames: MoveKeyframes, config: MovementConfig, onDone?: () => void) {\n if (typeof (host as HTMLElement).animate !== 'function') {\n this.#resolveFinished();\n onDone?.();\n return;\n }\n\n const keyframes = this.#toWAAPIKeyframes(frames);\n const iterations = config.iterations ?? 1;\n\n this.#animation = (host as HTMLElement).animate(keyframes, {\n duration: config.duration,\n easing: config.easing,\n delay: config.delay,\n fill: 'both',\n iterations,\n });\n\n if (iterations === Infinity) {\n // Infinite loops never finish; consumer must call cancel() manually.\n return;\n }\n\n this.#animation.addEventListener(\n 'finish',\n () => {\n this.#animation?.commitStyles?.();\n this.#animation?.cancel();\n this.#resolveFinished();\n onDone?.();\n },\n { once: true },\n );\n }\n\n play(): void {\n this.#animation?.play();\n }\n\n pause(): void {\n this.#animation?.pause();\n }\n\n cancel(): void {\n if (this.#animation?.playState !== 'idle') {\n this.#animation?.cancel();\n }\n this.#resolveFinished();\n }\n\n get currentTime(): number {\n return (this.#animation?.currentTime as number) ?? 0;\n }\n\n set currentTime(time: number) {\n if (this.#animation) {\n this.#animation.currentTime = time;\n }\n }\n\n #toWAAPIKeyframes(frames: MoveKeyframes): Keyframe[] {\n let maxLength = 0;\n for (const key in frames) {\n const arr = frames[key as keyof MoveKeyframes];\n if (Array.isArray(arr)) {\n maxLength = Math.max(maxLength, arr.length);\n }\n }\n\n if (maxLength === 0) return [];\n\n const keyframes: Keyframe[] = [];\n for (let i = 0; i < maxLength; i++) {\n keyframes.push(composeKeyframeAt(frames, i));\n }\n return keyframes;\n }\n}\n","import { AnimationControls } from './animation-controls';\nimport { MoveKeyframes, MoveSpring } from '../presets/presets.types';\nimport { composeInterpolatedKeyframe } from './keyframe-composer';\nimport {\n SIMULATION_MAX_ITERATIONS,\n SIMULATION_SETTLED_THRESHOLD,\n SIMULATION_TICK_RATE,\n} from '../constants';\n\nexport class SpringPlayer implements AnimationControls {\n #resolveFinished!: () => void;\n public readonly finished = new Promise<void>((resolve) => {\n this.#resolveFinished = resolve;\n });\n\n #animation: Animation | null = null;\n\n constructor(\n private readonly host: Element,\n private readonly frames: MoveKeyframes,\n userConfig: MoveSpring,\n private readonly delay: number,\n private readonly iterations = 1,\n private readonly onDone?: () => void,\n ) {\n if (typeof (host as HTMLElement).animate !== 'function') {\n this.#resolveFinished();\n onDone?.();\n return;\n }\n\n if (this.iterations !== 1 && typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.warn(\n '[Movement] Spring animations with iterations !== 1 may produce visual glitches. ' +\n 'Consider using WaapiPlayer (no spring) for loops.',\n );\n }\n\n const config: MoveSpring = {\n stiffness: 100,\n damping: 10,\n mass: 1,\n velocity: 0,\n ...userConfig,\n };\n\n const keyframes = this.#generateSpringKeyframes(frames, config);\n\n if (keyframes.length === 0) {\n this.#resolveFinished();\n onDone?.();\n return;\n }\n\n // Default duration of the calculated simulation is bound to the arrays output.\n // We run it over that specific time frame, we know exactly the duration by counting ticks * tick duration.\n // Let's assume tick rate is 16.66ms (60fps simulation)\n const duration = keyframes.length * SIMULATION_TICK_RATE;\n\n this.#animation = (host as HTMLElement).animate(keyframes, {\n duration,\n delay: this.delay,\n fill: 'both',\n easing: 'linear', // Spring physics already has the easing baked into the frames\n iterations: this.iterations,\n });\n\n if (this.iterations === Infinity) {\n // Infinite loops never finish; consumer must call cancel() manually.\n return;\n }\n\n this.#animation.addEventListener(\n 'finish',\n () => {\n this.#animation?.commitStyles?.();\n this.#animation?.cancel();\n this.#resolveFinished();\n onDone?.();\n },\n { once: true },\n );\n }\n\n play(): void {\n this.#animation?.play();\n }\n\n pause(): void {\n this.#animation?.pause();\n }\n\n cancel(): void {\n if (this.#animation?.playState !== 'idle') {\n this.#animation?.cancel();\n }\n this.#resolveFinished();\n }\n\n get currentTime(): number {\n return (this.#animation?.currentTime as number) ?? 0;\n }\n\n set currentTime(time: number) {\n if (this.#animation) {\n this.#animation.currentTime = time;\n }\n }\n\n #generateSpringKeyframes(frames: MoveKeyframes, config: MoveSpring): Keyframe[] {\n let maxSteps = 0;\n for (const key in frames) {\n const arr = frames[key as keyof MoveKeyframes];\n if (Array.isArray(arr)) {\n maxSteps = Math.max(maxSteps, arr.length);\n }\n }\n\n if (maxSteps <= 1) return [];\n\n const keyframes: Keyframe[] = [];\n const dt = 1 / 60; // Simulate at 60fps (16.66ms per tick)\n\n const stiffness = config.stiffness!;\n const damping = config.damping!;\n const mass = config.mass!;\n\n // We will simulate segments between keyframes based on physics\n for (let step = 0; step < maxSteps - 1; step++) {\n let progress = 0;\n let velocity = step === 0 ? (config.velocity ?? 0) : 0;\n let isSettled = false;\n\n // Simulate the spring for this intermediate segment\n // Prevent infinite loops safely by bounding iterations\n let iterations = 0;\n const maxIterations = SIMULATION_MAX_ITERATIONS; // max 10 seconds per step\n\n while (!isSettled && iterations < maxIterations) {\n // Evaluate frame\n const p = Math.min(Math.max(progress, 0), 1);\n keyframes.push(this.#composeFrame(frames, step, step + 1, p));\n\n // Advance physics F = -k*x - c*v\n const displacement = progress - 1;\n const force = -stiffness * displacement - damping * velocity;\n const acceleration = force / mass;\n\n velocity += acceleration * dt;\n progress += velocity * dt;\n\n if (\n Math.abs(displacement) < SIMULATION_SETTLED_THRESHOLD &&\n Math.abs(velocity) < SIMULATION_SETTLED_THRESHOLD\n ) {\n isSettled = true;\n }\n iterations++;\n }\n\n // Ensure the final state of the step is exactly 1\n keyframes.push(this.#composeFrame(frames, step, step + 1, 1));\n }\n\n return keyframes;\n }\n\n #composeFrame(frames: MoveKeyframes, i1: number, i2: number, p: number): Keyframe {\n return composeInterpolatedKeyframe(frames, i1, i2, p);\n }\n}\n","import { Injectable, inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { AnimationControls } from './animation-controls';\nimport { WaapiPlayer } from './waapi-player';\nimport { SpringPlayer } from './spring-player';\nimport { MoveKeyframes, MoveSpring } from '../presets/presets.types';\nimport { MovementConfig, MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport { applyComposedStyle, composeFinalStyle } from './keyframe-composer';\nimport { validateSpring } from '../directives/move-animation.utils';\n\nexport interface PlayAnimationOptions {\n config?: MovementConfig;\n spring?: MoveSpring;\n delay?: number;\n disabled?: boolean;\n iterations?: number;\n onDone?: () => void;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AnimationEngine {\n #platformId = inject(PLATFORM_ID);\n #defaults = inject(MOVEMENT_CONFIG);\n\n play(\n host: Element,\n frames: MoveKeyframes,\n options: PlayAnimationOptions = {},\n ): AnimationControls | null {\n if (!isPlatformBrowser(this.#platformId)) {\n options.onDone?.();\n return null;\n }\n\n if (options.disabled) {\n this.#prepareSvgStrokeDraw(host, frames);\n this.#applyFinalStyles(host, frames);\n options.onDone?.();\n return null;\n }\n\n this.#prepareSvgStrokeDraw(host, frames);\n\n const config = options.config ?? this.#defaults;\n const spring = validateSpring(options.spring);\n const isSpring = spring || config.easing === 'spring';\n const iterations = options.iterations ?? config.iterations;\n\n if (isSpring) {\n return new SpringPlayer(\n host,\n frames,\n spring ?? {},\n options.delay ?? config.delay,\n iterations,\n options.onDone,\n );\n } else {\n return new WaapiPlayer(\n host,\n frames,\n {\n duration: config.duration,\n easing: config.easing,\n delay: options.delay ?? config.delay,\n disabled: false,\n iterations,\n },\n options.onDone,\n );\n }\n }\n\n #applyFinalStyles(host: Element, frames: MoveKeyframes): void {\n applyComposedStyle(host, composeFinalStyle(frames));\n }\n\n #prepareSvgStrokeDraw(host: Element, frames: MoveKeyframes): void {\n if (!frames['strokeDashoffset'] || !this.#isSvgGeometryElement(host)) {\n return;\n }\n\n let length = 28;\n try {\n length = host.getTotalLength() || length;\n } catch {\n length = 28;\n }\n\n const styledHost = host as SVGElement;\n styledHost.style.strokeDasharray = `${length}`;\n styledHost.style.strokeDashoffset = `${length}`;\n }\n\n #isSvgGeometryElement(host: Element): host is SVGGeometryElement {\n const view = host.ownerDocument?.defaultView;\n const SvgGeometryElement = view?.SVGGeometryElement;\n\n if (typeof SvgGeometryElement === 'function' && host instanceof SvgGeometryElement) {\n return true;\n }\n\n return typeof (host as Partial<SVGGeometryElement>).getTotalLength === 'function';\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface MoveStaggerProvider {\n register(el: HTMLElement): void;\n unregister(el: HTMLElement): void;\n getDelay(el: HTMLElement): number;\n}\n\nexport const MOVE_STAGGER_PARENT = new InjectionToken<MoveStaggerProvider>('MOVE_STAGGER_PARENT');\n","import { InjectionToken } from '@angular/core';\n\nexport interface MovePresenceChild {\n playLeave(): Promise<void> | void;\n}\n\nexport interface MovePresenceProvider {\n register(child: MovePresenceChild): void;\n unregister(child: MovePresenceChild): void;\n}\n\nexport const MOVE_PRESENCE_PARENT = new InjectionToken<MovePresenceProvider>(\n 'MOVE_PRESENCE_PARENT',\n);\n","import {\n Directive,\n ElementRef,\n InjectionToken,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n OnDestroy,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { MoveKeyframes, MoveSpring, MoveVariant } from '../presets/presets.types';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport { prefersReducedMotion, resolveMovementConfig } from './move-animation.utils';\nimport { AnimationControls } from '../engines/animation-controls';\nimport { MOVE_STAGGER_PARENT } from '../tokens/stagger.tokens';\n\nexport interface MoveVariantsProvider {\n activeVariant: () => string | undefined;\n}\n\nexport const MOVE_VARIANTS_PARENT = new InjectionToken<MoveVariantsProvider>(\n 'MOVE_VARIANTS_PARENT',\n);\n\n@Directive({\n selector: '[moveVariants]',\n providers: [\n {\n provide: MOVE_VARIANTS_PARENT,\n useExisting: forwardRef(() => MoveVariantsDirective),\n },\n ],\n})\nexport class MoveVariantsDirective implements MoveVariantsProvider, OnDestroy {\n readonly moveVariants = input.required<Record<string, MoveVariant>>();\n readonly moveAnimate = input<string | undefined>(undefined);\n\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #parent = inject(MOVE_VARIANTS_PARENT, { optional: true, skipSelf: true });\n readonly #engine = inject(AnimationEngine);\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #stagger = inject(MOVE_STAGGER_PARENT, { optional: true });\n\n #currentPlayer: AnimationControls | null = null;\n #isReducedMotion = false;\n\n readonly activeVariant = computed(() => {\n return this.moveAnimate() ?? this.#parent?.activeVariant();\n });\n\n constructor() {\n this.#isReducedMotion = prefersReducedMotion(this.#documentRef);\n this.#stagger?.register(this.#host.nativeElement);\n\n effect(() => {\n const variantName = this.activeVariant();\n if (!variantName) return;\n\n const variants = this.moveVariants();\n if (!variants) return;\n\n const state = variants[variantName];\n if (!state) return;\n\n this.#currentPlayer?.cancel();\n\n const { spring, duration, easing, delay, ...keyframesMap } = state;\n const keyframes = keyframesMap as MoveKeyframes;\n\n const staggerDelay = this.#stagger?.getDelay(this.#host.nativeElement) ?? 0;\n\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: duration ?? this.moveDuration(),\n easing: easing ?? this.moveEasing(),\n delay: (delay ?? this.moveDelay() ?? 0) + staggerDelay,\n disabled: this.moveDisabled(),\n },\n this.#isReducedMotion,\n );\n\n this.#currentPlayer = this.#engine.play(this.#host.nativeElement, keyframes, {\n config,\n spring: spring ?? this.moveSpring(),\n disabled: config.disabled,\n });\n });\n }\n\n ngOnDestroy(): void {\n this.#stagger?.unregister(this.#host.nativeElement);\n this.#currentPlayer?.cancel();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\nimport { MOVE_STAGGER_PARENT } from '../tokens/stagger.tokens';\nimport { MOVE_PRESENCE_PARENT, MovePresenceChild } from '../tokens/presence.tokens';\nimport { MOVE_VARIANTS_PARENT } from './move-variants.directive';\n\n@Directive({\n selector: '[move],[moveAnimate]',\n})\nexport class MoveAnimateDirective implements OnDestroy, OnInit, MovePresenceChild {\n readonly move = input<MovePreset | MoveKeyframes | undefined>(undefined);\n readonly moveAnimate = input<MovePreset | MoveKeyframes | undefined>(undefined);\n readonly moveAnimateLeave = input<MovePreset | MoveKeyframes | undefined>(undefined);\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n readonly #stagger = inject(MOVE_STAGGER_PARENT, { optional: true });\n readonly #presence = inject(MOVE_PRESENCE_PARENT, { optional: true });\n readonly #variantsParent = inject(MOVE_VARIANTS_PARENT, { optional: true });\n\n #config = this.#defaults;\n #enterPlayer: AnimationControls | null = null;\n #leavePlayer: AnimationControls | null = null;\n\n ngOnInit(): void {\n // If moveVariants is on the same host, let it handle animation\n if (this.#variantsParent) {\n return;\n }\n\n this.#stagger?.register(this.#host.nativeElement);\n this.#presence?.register(this);\n\n Promise.resolve().then(() => {\n const staggerDelay = this.#stagger?.getDelay(this.#host.nativeElement) ?? 0;\n\n this.#config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: (this.moveDelay() ?? 0) + staggerDelay,\n disabled: this.moveDisabled(),\n },\n prefersReducedMotion(this.#documentRef),\n );\n\n const enterInput = this.resolveEnterInput();\n this.#enterPlayer = this.#engine.play(\n this.#host.nativeElement,\n resolveMoveFrames(enterInput, 'enter'),\n {\n config: this.#config,\n spring: this.moveSpring(),\n disabled: this.#config.disabled,\n },\n );\n });\n }\n\n ngOnDestroy(): void {\n this.#stagger?.unregister(this.#host.nativeElement);\n this.#presence?.unregister(this);\n this.#enterPlayer?.cancel();\n this.#leavePlayer?.cancel();\n }\n\n playLeave(): Promise<void> {\n if (this.#variantsParent || this.#config.disabled) {\n return Promise.resolve();\n }\n\n this.#enterPlayer?.cancel();\n\n this.#leavePlayer = this.#engine.play(\n this.#host.nativeElement,\n resolveMoveFrames(this.resolveLeaveInput(), 'leave'),\n {\n config: this.#config,\n spring: this.moveSpring(),\n disabled: false,\n },\n );\n\n return this.#leavePlayer?.finished ?? Promise.resolve();\n }\n\n private resolveEnterInput(): MovePreset | MoveKeyframes {\n return this.moveAnimate() ?? this.move() ?? 'none';\n }\n\n private resolveLeaveInput(): MovePreset | MoveKeyframes {\n return this.moveAnimateLeave() ?? this.resolveEnterInput();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { MoveAnimationConfig, MoveKeyframes, MoveKeyframeState } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport { prefersReducedMotion, resolveMovementConfig } from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\nimport { MOVE_STAGGER_PARENT } from '../tokens/stagger.tokens';\nimport { MOVE_PRESENCE_PARENT, MovePresenceChild } from '../tokens/presence.tokens';\n\n@Directive({\n selector: '[moveAnimation]',\n})\nexport class MoveAnimationDirective implements OnInit, OnDestroy, MovePresenceChild {\n readonly moveAnimation = input.required<MoveAnimationConfig>();\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n readonly #stagger = inject(MOVE_STAGGER_PARENT, { optional: true });\n readonly #presence = inject(MOVE_PRESENCE_PARENT, { optional: true });\n\n #config = this.#defaults;\n #enterPlayer: AnimationControls | null = null;\n #leavePlayer: AnimationControls | null = null;\n\n ngOnInit(): void {\n this.#stagger?.register(this.#host.nativeElement);\n this.#presence?.register(this);\n\n Promise.resolve().then(() => {\n const cfg = this.moveAnimation();\n const staggerDelay = this.#stagger?.getDelay(this.#host.nativeElement) ?? 0;\n\n this.#config = resolveMovementConfig(\n this.#defaults,\n {\n duration: cfg.duration,\n easing: cfg.easing,\n delay: (cfg.delay ?? 0) + staggerDelay,\n disabled: undefined,\n },\n prefersReducedMotion(this.#documentRef),\n );\n\n if (!cfg.initial || !cfg.animate) return;\n\n const frames = statesToKeyframes(cfg.initial, cfg.animate);\n if (Object.keys(frames).length === 0) return;\n\n this.#enterPlayer = this.#engine.play(this.#host.nativeElement, frames, {\n config: this.#config,\n spring: cfg.spring,\n disabled: this.#config.disabled,\n });\n });\n }\n\n ngOnDestroy(): void {\n this.#stagger?.unregister(this.#host.nativeElement);\n this.#presence?.unregister(this);\n this.#enterPlayer?.cancel();\n this.#leavePlayer?.cancel();\n }\n\n playLeave(): Promise<void> {\n const cfg = this.moveAnimation();\n\n if (this.#config.disabled || !cfg.exit || !cfg.animate) {\n return Promise.resolve();\n }\n\n this.#enterPlayer?.cancel();\n\n const frames = statesToKeyframes(cfg.animate, cfg.exit);\n if (Object.keys(frames).length === 0) return Promise.resolve();\n\n this.#leavePlayer = this.#engine.play(this.#host.nativeElement, frames, {\n config: this.#config,\n spring: cfg.spring,\n disabled: false,\n });\n\n return this.#leavePlayer?.finished ?? Promise.resolve();\n }\n}\n\nfunction statesToKeyframes(from: MoveKeyframeState, to: MoveKeyframeState): MoveKeyframes {\n const result: Partial<Record<keyof MoveKeyframes, readonly number[]>> = {};\n for (const key of Object.keys(from) as (keyof MoveKeyframeState)[]) {\n const f = from[key];\n const t = to[key];\n if (f !== undefined && t !== undefined) {\n result[key] = [f, t];\n }\n }\n return result as MoveKeyframes;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\nimport { MOVE_STAGGER_PARENT } from '../tokens/stagger.tokens';\n\n@Directive({\n selector: '[moveEnter]',\n})\nexport class MoveEnterDirective implements OnDestroy, OnInit {\n readonly moveEnter = input<MovePreset | MoveKeyframes>('none');\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n readonly #stagger = inject(MOVE_STAGGER_PARENT, { optional: true });\n\n #player: AnimationControls | null = null;\n\n ngOnInit(): void {\n this.#stagger?.register(this.#host.nativeElement);\n\n Promise.resolve().then(() => {\n const staggerDelay = this.#stagger?.getDelay(this.#host.nativeElement) ?? 0;\n\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: (this.moveDelay() ?? 0) + staggerDelay,\n disabled: this.moveDisabled(),\n },\n prefersReducedMotion(this.#documentRef),\n );\n\n this.#player = this.#engine.play(\n this.#host.nativeElement,\n resolveMoveFrames(this.moveEnter(), 'enter'),\n {\n config: config,\n spring: this.moveSpring(),\n disabled: config.disabled,\n },\n );\n });\n }\n\n ngOnDestroy(): void {\n this.#stagger?.unregister(this.#host.nativeElement);\n this.#player?.cancel();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\nimport { MOVE_PRESENCE_PARENT, MovePresenceChild } from '../tokens/presence.tokens';\n\n@Directive({\n selector: '[moveLeave]',\n})\nexport class MoveLeaveDirective implements OnDestroy, OnInit, MovePresenceChild {\n readonly moveLeave = input<MovePreset | MoveKeyframes>('none');\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n readonly #presence = inject(MOVE_PRESENCE_PARENT, { optional: true });\n\n #config = this.#defaults;\n #player: AnimationControls | null = null;\n\n ngOnInit(): void {\n this.#presence?.register(this);\n\n this.#config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: this.moveDelay(),\n disabled: this.moveDisabled(),\n },\n prefersReducedMotion(this.#documentRef),\n );\n }\n\n ngOnDestroy(): void {\n this.#presence?.unregister(this);\n this.#player?.cancel();\n }\n\n playLeave(): Promise<void> {\n if (this.#config.disabled) {\n return Promise.resolve();\n }\n\n this.#player = this.#engine.play(\n this.#host.nativeElement,\n resolveMoveFrames(this.moveLeave(), 'leave'),\n {\n config: this.#config,\n spring: this.moveSpring(),\n disabled: false,\n },\n );\n\n return this.#player?.finished ?? Promise.resolve();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnDestroy } from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n reverseFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\n\n@Directive({\n selector: '[moveWhileHover]',\n host: {\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'onMouseLeave()',\n '(touchstart)': 'onTouchStart($event)',\n '(touchend)': 'onTouchEnd()',\n '(touchcancel)': 'onTouchEnd()',\n },\n})\nexport class MoveHoverDirective implements OnDestroy {\n readonly moveWhileHover = input.required<MovePreset | MoveKeyframes>();\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n\n #currentPlayer: AnimationControls | null = null;\n #isHovered = false;\n\n onMouseEnter() {\n if (this.#isHovered) return;\n this.#isHovered = true;\n this.play(false);\n }\n\n onMouseLeave() {\n if (!this.#isHovered) return;\n this.#isHovered = false;\n this.play(true);\n }\n\n onTouchStart(event: TouchEvent) {\n event.preventDefault();\n if (this.#isHovered) return;\n this.#isHovered = true;\n this.play(false);\n }\n\n onTouchEnd() {\n if (!this.#isHovered) return;\n this.#isHovered = false;\n this.play(true);\n }\n\n private play(reverse: boolean) {\n this.#currentPlayer?.cancel();\n\n const isReduced = prefersReducedMotion(this.#documentRef);\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: this.moveDelay(),\n disabled: this.moveDisabled(),\n },\n isReduced,\n );\n\n if (config.disabled) return;\n\n let frames = resolveMoveFrames(this.moveWhileHover(), 'enter');\n if (reverse) {\n frames = reverseFrames(frames);\n }\n\n this.#currentPlayer = this.#engine.play(this.#host.nativeElement, frames, {\n config,\n spring: this.moveSpring(),\n disabled: false,\n });\n }\n\n ngOnDestroy(): void {\n this.#currentPlayer?.cancel();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnDestroy } from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n reverseFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\n\n@Directive({\n selector: '[moveWhileTap]',\n host: {\n '(pointerdown)': 'onPointerDown()',\n '(pointerup)': 'onPointerUp()',\n '(pointercancel)': 'onPointerUp()',\n '(pointerleave)': 'onPointerUp()',\n },\n})\nexport class MoveTapDirective implements OnDestroy {\n readonly moveWhileTap = input.required<MovePreset | MoveKeyframes>();\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n\n #currentPlayer: AnimationControls | null = null;\n #isTapped = false;\n\n onPointerDown() {\n if (this.#isTapped) return;\n this.#isTapped = true;\n this.play(false);\n }\n\n onPointerUp() {\n if (!this.#isTapped) return;\n this.#isTapped = false;\n this.play(true);\n }\n\n private play(reverse: boolean) {\n this.#currentPlayer?.cancel();\n\n const isReduced = prefersReducedMotion(this.#documentRef);\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: this.moveDelay(),\n disabled: this.moveDisabled(),\n },\n isReduced,\n );\n\n if (config.disabled) return;\n\n let frames = resolveMoveFrames(this.moveWhileTap(), 'enter');\n if (reverse) {\n frames = reverseFrames(frames);\n }\n\n this.#currentPlayer = this.#engine.play(this.#host.nativeElement, frames, {\n config,\n spring: this.moveSpring(),\n disabled: false,\n });\n }\n\n ngOnDestroy(): void {\n this.#currentPlayer?.cancel();\n }\n}\n","import { Directive, forwardRef, input } from '@angular/core';\nimport { MoveSpring } from '../presets/presets.types';\nimport { MOVE_STAGGER_PARENT, MoveStaggerProvider } from '../tokens/stagger.tokens';\n\nexport type MoveStaggerDirection = 'first' | 'last' | 'center';\n\n@Directive({\n selector: '[moveStagger]',\n providers: [\n {\n provide: MOVE_STAGGER_PARENT,\n useExisting: forwardRef(() => MoveStaggerDirective),\n },\n ],\n})\nexport class MoveStaggerDirective implements MoveStaggerProvider {\n readonly moveStagger = input.required<number | MoveSpring>();\n readonly moveStaggerDirection = input<MoveStaggerDirection>('first');\n\n #children = new Set<HTMLElement>();\n\n register(el: HTMLElement): void {\n this.#children.add(el);\n }\n\n unregister(el: HTMLElement): void {\n this.#children.delete(el);\n }\n\n getDelay(el: HTMLElement): number {\n if (!this.#children.has(el)) return 0;\n\n const list = Array.from(this.#children).sort((a, b) => {\n if (a === b) return 0;\n const pos = a.compareDocumentPosition(b);\n if (pos & Node.DOCUMENT_POSITION_PRECEDING) return 1;\n if (pos & Node.DOCUMENT_POSITION_FOLLOWING) return -1;\n return 0;\n });\n\n const index = list.indexOf(el);\n if (index === -1) return 0;\n\n const staggerConfig = this.moveStagger();\n // If it's a spring config but used for stagger, default to 100ms or try to derive.\n const staggerTime = typeof staggerConfig === 'number' ? staggerConfig : 100;\n\n const direction = this.moveStaggerDirection();\n const total = list.length;\n\n let staggerIndex = index;\n if (direction === 'last') {\n staggerIndex = total - 1 - index;\n } else if (direction === 'center') {\n const center = (total - 1) / 2;\n staggerIndex = Math.abs(index - center);\n }\n\n return staggerIndex * staggerTime;\n }\n}\n","import { Directive, ElementRef, inject, input, OnDestroy, afterEveryRender } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport { prefersReducedMotion, resolveMovementConfig } from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\n\n@Directive({\n selector: '[moveLayout]',\n})\nexport class MoveLayoutDirective implements OnDestroy {\n readonly moveLayout = input<boolean | ''>(true);\n readonly moveLayoutId = input<string | undefined>(undefined);\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n\n #snapshot: DOMRect | null = null;\n #currentPlayer: AnimationControls | null = null;\n #isReducedMotion = false;\n #isAnimating = false;\n\n constructor() {\n this.#isReducedMotion = prefersReducedMotion(this.#documentRef);\n\n afterEveryRender({\n earlyRead: () => {\n if (\n this.moveLayout() === false ||\n this.moveDisabled() ||\n this.#isReducedMotion ||\n this.#isAnimating\n ) {\n return null;\n }\n\n const el = this.#host.nativeElement;\n if (typeof el.getBoundingClientRect !== 'function') {\n return null;\n }\n\n const currentRect = el.getBoundingClientRect();\n\n if (this.#snapshot) {\n const dx = this.#snapshot.left - currentRect.left;\n const dy = this.#snapshot.top - currentRect.top;\n const dw = this.#snapshot.width / currentRect.width;\n const dh = this.#snapshot.height / currentRect.height;\n\n if (\n Math.abs(dx) > 0.5 ||\n Math.abs(dy) > 0.5 ||\n Math.abs(dw - 1) > 0.01 ||\n Math.abs(dh - 1) > 0.01\n ) {\n return {\n dx,\n dy,\n dw,\n dh,\n targetRect: currentRect,\n };\n }\n }\n\n this.#snapshot = currentRect;\n return null;\n },\n write: (\n flipData: { dx: number; dy: number; dw: number; dh: number; targetRect: DOMRect } | null,\n ) => {\n if (flipData) {\n this.playFlip(flipData);\n }\n },\n });\n }\n\n private playFlip(flipData: {\n dx: number;\n dy: number;\n dw: number;\n dh: number;\n targetRect: DOMRect;\n }) {\n this.#isAnimating = true;\n\n // The host is currently visually at its NEW position (unpainted).\n // We apply the inverse transform to make it LOOK like it's at the OLD position.\n // We apply transform origin 0 0 so scaling works correctly from top-left.\n const transformOrigin = this.#host.nativeElement.style.transformOrigin;\n this.#host.nativeElement.style.transformOrigin = '0 0';\n\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: this.moveDelay(),\n disabled: this.moveDisabled(),\n },\n this.#isReducedMotion,\n );\n\n this.#currentPlayer = this.#engine.play(\n this.#host.nativeElement,\n {\n x: [flipData.dx, 0],\n y: [flipData.dy, 0],\n scaleX: [flipData.dw, 1],\n scaleY: [flipData.dh, 1],\n },\n {\n config,\n spring: this.moveSpring(),\n disabled: false,\n onDone: () => {\n this.#isAnimating = false;\n this.#host.nativeElement.style.transformOrigin = transformOrigin;\n // Take final snapshot so next check is fresh\n this.#snapshot = this.#host.nativeElement.getBoundingClientRect();\n },\n },\n );\n }\n\n ngOnDestroy(): void {\n this.#currentPlayer?.cancel();\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, NgZone, OnDestroy, PLATFORM_ID, signal } from '@angular/core';\n\n/**\n * SmoothScrollService — Lenis-inspired smooth scroll for Angular.\n *\n * Desktop: intercepts wheel events → lerp interpolation → synthetic scrollTop.\n * Mobile: listens to native touch scroll → lerp interpolation → synthetic scrollTop.\n * Native scroll is prevented during touch to avoid the vibration conflict.\n *\n * The `scrollY` signal is updated on every RAF tick and can be consumed by\n * `MoveScrollDirective` (or any other consumer) to react to smooth scroll position\n * without relying on the native `scroll` event (which is NOT fired during smooth scroll).\n *\n * Usage (in app root or a layout service):\n *\n * constructor() {\n * inject(SmoothScrollService).init();\n * }\n */\n@Injectable({ providedIn: 'root' })\nexport class SmoothScrollService implements OnDestroy {\n readonly #document = inject(DOCUMENT);\n readonly #platformId = inject(PLATFORM_ID);\n readonly #zone = inject(NgZone);\n\n /** Lerp factor — lower = smoother/slower, higher = snappier. Range 0–1. */\n #lerp = 0.1;\n\n #targetY = 0;\n #currentY = 0;\n #rafId = 0;\n #isRunning = false;\n #scrollElement: HTMLElement | null = null;\n\n /**\n * Reactive scroll position (in pixels) updated on every RAF tick.\n * Use this signal instead of listening to `window.scroll` when smooth scroll is active,\n * since native scroll events are NOT fired during lerp-based scrolling.\n */\n readonly scrollY = signal(0);\n\n // Touch tracking\n #touchStartY = 0;\n #lastTouchY = 0;\n #touchVelocity = 0;\n #isTouching = false;\n #lastTouchTimestamp = 0;\n\n // ─── Event handlers ────────────────────────────────────────────────────────\n\n readonly #onWheel = (e: WheelEvent): void => {\n if (this.#isInsideScrollable(e.target as HTMLElement)) return;\n e.preventDefault();\n this.#targetY = this.#clamp(this.#targetY + e.deltaY);\n };\n\n readonly #onTouchStart = (e: TouchEvent): void => {\n if (this.#isInsideScrollable(e.target as HTMLElement)) return;\n this.#isTouching = true;\n this.#touchVelocity = 0;\n this.#touchStartY = e.touches[0].clientY;\n this.#lastTouchY = this.#touchStartY;\n this.#lastTouchTimestamp = e.timeStamp;\n };\n\n readonly #onTouchMove = (e: TouchEvent): void => {\n if (!this.#isTouching) return;\n if (this.#isInsideScrollable(e.target as HTMLElement)) return;\n\n // Prevent native scroll on the root element — we handle it ourselves\n e.preventDefault();\n\n const currentY = e.touches[0].clientY;\n const deltaTime = Math.max(e.timeStamp - this.#lastTouchTimestamp, 1);\n const deltaY = this.#lastTouchY - currentY; // inverted: swipe up → scroll down\n\n // Track velocity (px/ms) for momentum after lift\n this.#touchVelocity = deltaY / deltaTime;\n\n this.#targetY = this.#clamp(this.#targetY + deltaY);\n\n this.#lastTouchY = currentY;\n this.#lastTouchTimestamp = e.timeStamp;\n };\n\n readonly #onTouchEnd = (): void => {\n this.#isTouching = false;\n // Apply momentum: fling the targetY by velocity × decay frames\n this.#applyMomentum();\n };\n\n // ─── Public API ────────────────────────────────────────────────────────────\n\n /** Whether the service is currently active (i.e. `init()` has been called). */\n get isActive(): boolean {\n return this.#isRunning;\n }\n\n init(options: { lerp?: number; element?: HTMLElement } = {}): void {\n if (!isPlatformBrowser(this.#platformId)) return;\n if (this.#isRunning) return;\n\n this.#lerp = options.lerp ?? 0.1;\n this.#scrollElement = options.element ?? this.#document.documentElement;\n this.#currentY = this.#scrollElement.scrollTop;\n this.#targetY = this.#currentY;\n\n // Run entirely outside Angular zone to avoid change detection on every RAF\n this.#zone.runOutsideAngular(() => {\n const el = this.#scrollElement!;\n\n el.addEventListener('wheel', this.#onWheel, { passive: false });\n\n // Touch events must also be non-passive to call preventDefault()\n el.addEventListener('touchstart', this.#onTouchStart, { passive: true });\n el.addEventListener('touchmove', this.#onTouchMove, { passive: false });\n el.addEventListener('touchend', this.#onTouchEnd, { passive: true });\n\n this.#isRunning = true;\n this.#tick();\n });\n }\n\n destroy(): void {\n if (!isPlatformBrowser(this.#platformId)) return;\n this.#isRunning = false;\n cancelAnimationFrame(this.#rafId);\n\n const el = this.#scrollElement;\n if (el) {\n el.removeEventListener('wheel', this.#onWheel);\n el.removeEventListener('touchstart', this.#onTouchStart);\n el.removeEventListener('touchmove', this.#onTouchMove);\n el.removeEventListener('touchend', this.#onTouchEnd);\n }\n\n this.#scrollElement = null;\n }\n\n /** Scroll programmatically to a Y position */\n scrollTo(y: number, instant = false): void {\n this.#targetY = this.#clamp(y);\n if (instant) {\n this.#currentY = this.#targetY;\n this.#applyScroll(this.#currentY);\n }\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n // ─── Internal ──────────────────────────────────────────────────────────────\n\n #tick(): void {\n if (!this.#isRunning) return;\n\n this.#currentY += (this.#targetY - this.#currentY) * this.#lerp;\n\n if (Math.abs(this.#targetY - this.#currentY) < 0.1) {\n this.#currentY = this.#targetY;\n }\n\n this.#applyScroll(this.#currentY);\n this.#rafId = requestAnimationFrame(() => this.#tick());\n }\n\n /**\n * After finger lift, simulate Lenis-style momentum decay.\n * Velocity decays by a friction factor each frame until negligible.\n */\n #applyMomentum(): void {\n const FRICTION = 0.92; // higher = more glide; lower = stops faster\n const MIN_VELOCITY = 0.05; // px/ms threshold to stop\n\n let v = this.#touchVelocity * 16; // convert px/ms → px/frame (~16ms)\n\n const step = (): void => {\n if (!this.#isRunning || Math.abs(v) < MIN_VELOCITY) return;\n v *= FRICTION;\n this.#targetY = this.#clamp(this.#targetY + v);\n requestAnimationFrame(step);\n };\n\n requestAnimationFrame(step);\n }\n\n #applyScroll(y: number): void {\n if (!this.#scrollElement) return;\n this.#scrollElement.scrollTop = y;\n // Update the reactive signal so consumers (e.g. MoveScrollDirective) can react\n // without relying on native scroll events which don't fire during lerp-based scroll.\n this.scrollY.set(y);\n }\n\n #getMaxScroll(): number {\n if (!this.#scrollElement) return 0;\n return this.#scrollElement.scrollHeight - this.#scrollElement.clientHeight;\n }\n\n #clamp(y: number): number {\n return Math.max(0, Math.min(y, this.#getMaxScroll()));\n }\n\n /**\n * Checks if the element is inside a scrollable container OTHER than the root scroll element.\n * Used to let native scroll handle inner overflow-y:auto containers (like Lenis does).\n */\n #isInsideScrollable(el: HTMLElement): boolean {\n let current: HTMLElement | null = el.parentElement;\n while (current && current !== this.#scrollElement) {\n const { overflowY } = getComputedStyle(current);\n if (\n (overflowY === 'auto' || overflowY === 'scroll') &&\n current.scrollHeight > current.clientHeight\n ) {\n return true;\n }\n current = current.parentElement;\n }\n return false;\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\nimport { AnimationControls } from '../engines/animation-controls';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { MoveKeyframes } from '../presets/presets.types';\nimport { isValidScrollOffset } from './move-animation.utils';\nimport { SmoothScrollService } from '../scroll/smooth-scroll.service';\n\n@Directive({\n selector: '[moveScroll]',\n exportAs: 'moveScroll',\n})\nexport class MoveScrollDirective implements OnInit, OnDestroy {\n readonly moveScroll = input<MoveKeyframes | undefined>(undefined);\n readonly moveScrollOffset = input<[string, string]>(['0 1', '1 0']);\n /** Optional CSS selector for a custom scrollable container. Defaults to window scroll. */\n readonly moveScrollContainer = input<string | null>(null);\n\n readonly progress = signal(0);\n\n readonly #documentRef = inject(DOCUMENT);\n readonly #platformId = inject(PLATFORM_ID);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n readonly #smoothScroll = inject(SmoothScrollService, { optional: true });\n\n #player: AnimationControls | null = null;\n #observer: IntersectionObserver | null = null;\n #isVisible = false;\n #scrollListener = () => this.#updateProgress();\n #scrollTarget: EventTarget | null = null;\n\n #targetProgress = 0;\n #animProgress = 0;\n #rafId: number | null = null;\n\n constructor() {\n // Recreate the player whenever keyframes change (e.g. user changes effect type).\n // Uses duration=1000 + linear easing so that currentTime ∈ [0,1000] maps cleanly\n // to the [0,1] scroll progress without easing distortion or premature finish.\n effect(() => {\n if (!isPlatformBrowser(this.#platformId)) return;\n const keyframes = this.moveScroll();\n\n if (this.#rafId !== null) {\n this.#documentRef.defaultView?.cancelAnimationFrame(this.#rafId);\n this.#rafId = null;\n }\n this.#player?.cancel();\n this.#player = null;\n this.#animProgress = 0;\n this.#targetProgress = 0;\n\n if (!keyframes) return;\n\n const view = this.#documentRef.defaultView;\n if (!view) return;\n\n // Validate scroll offsets\n const offsets = this.moveScrollOffset();\n if (!isValidScrollOffset(offsets[0]) || !isValidScrollOffset(offsets[1])) {\n return;\n }\n\n this.#player = this.#engine.play(this.#host.nativeElement, keyframes, {\n config: { duration: 1000, easing: 'linear', delay: 0, disabled: false, iterations: 1 },\n });\n this.#player?.pause();\n\n // Sync the new player to the current scroll position immediately.\n this.#updateProgress();\n });\n\n // Smooth-scroll service support (fires via RAF signal instead of native scroll event).\n effect(() => {\n this.#smoothScroll?.scrollY();\n if (this.#smoothScroll?.isActive && this.#isVisible) {\n this.#updateProgress();\n }\n });\n }\n\n ngOnInit() {\n if (!isPlatformBrowser(this.#platformId)) return;\n\n const view = this.#documentRef.defaultView;\n if (!view) return;\n\n // Resolve scroll target: custom container selector or window.\n const containerSelector = this.moveScrollContainer();\n const containerEl = containerSelector\n ? (this.#documentRef.querySelector(containerSelector) as HTMLElement | null)\n : null;\n this.#scrollTarget = containerEl ?? view;\n\n // Use the custom container as IntersectionObserver root when available so that\n // the observer fires based on container-viewport visibility, not page-viewport visibility.\n this.#observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n this.#isVisible = entry.isIntersecting;\n\n if (entry.isIntersecting) {\n if (!this.#smoothScroll?.isActive) {\n this.#scrollTarget!.addEventListener('scroll', this.#scrollListener, { passive: true });\n }\n this.#updateProgress();\n } else {\n this.#scrollTarget?.removeEventListener('scroll', this.#scrollListener);\n }\n },\n {\n root: containerEl ?? null,\n threshold: [0, 0.1, 0.25, 0.5, 0.75, 0.9, 1],\n },\n );\n\n this.#observer.observe(this.#host.nativeElement);\n }\n\n #updateProgress() {\n const view = this.#documentRef.defaultView;\n if (!view) return;\n\n const el = this.#host.nativeElement;\n const containerEl = this.#scrollTarget instanceof HTMLElement ? this.#scrollTarget : null;\n\n let p: number;\n\n if (containerEl) {\n // Container-relative scroll progress.\n const containerRect = containerEl.getBoundingClientRect();\n const elRect = el.getBoundingClientRect();\n\n // Element's fixed position within the scroll content (invariant to scrollTop changes).\n const elTop = elRect.top - containerRect.top + containerEl.scrollTop;\n const elHeight = el.offsetHeight;\n const containerHeight = containerEl.clientHeight;\n\n const offsets = this.moveScrollOffset();\n const startScroll = this.#calcContainerOffset(elTop, elHeight, containerHeight, offsets[0]);\n const endScroll = this.#calcContainerOffset(elTop, elHeight, containerHeight, offsets[1]);\n\n const range = endScroll - startScroll;\n if (range === 0) return;\n\n p = (containerEl.scrollTop - startScroll) / range;\n } else {\n // Viewport-relative scroll progress (window scroll).\n const rect = el.getBoundingClientRect();\n const windowHeight = view.innerHeight;\n\n const offsets = this.moveScrollOffset();\n const startY = this.#calcViewportOffset(rect, windowHeight, offsets[0]);\n const endY = this.#calcViewportOffset(rect, windowHeight, offsets[1]);\n\n const totalDistance = startY - endY;\n if (totalDistance === 0) return;\n\n p = startY / totalDistance;\n }\n\n // Cap at 0.999 to prevent the WAAPI player's `finish` event from firing,\n // which would cancel the animation and make it uncontrollable for further scroll.\n p = Math.max(0, Math.min(0.999, p));\n this.#targetProgress = p;\n\n this.#startRaf();\n }\n\n #startRaf() {\n if (this.#rafId !== null) return;\n\n const view = this.#documentRef.defaultView;\n if (!view) return;\n\n const tick = () => {\n const diff = this.#targetProgress - this.#animProgress;\n\n // Stop the loop when close enough (< 0.001 difference).\n if (Math.abs(diff) < 0.001) {\n this.#animProgress = this.#targetProgress;\n this.#rafId = null;\n this.#applyProgress(this.#animProgress);\n return;\n }\n\n this.#animProgress += diff * 0.12;\n this.#applyProgress(this.#animProgress);\n this.#rafId = view.requestAnimationFrame(tick);\n };\n\n this.#rafId = view.requestAnimationFrame(tick);\n }\n\n #applyProgress(p: number) {\n this.progress.set(p);\n if (this.#player) {\n this.#player.currentTime = p * 1000;\n }\n }\n\n /**\n * Scroll position at which the animation start/end offset is reached.\n * \"elFraction viewFraction\" → e.g. \"0 1\" = element-top meets container-bottom.\n */\n #calcContainerOffset(\n elTop: number,\n elHeight: number,\n containerHeight: number,\n offsetStr: string,\n ): number {\n const [elVal, viewVal] = offsetStr.split(' ').map(parseFloat);\n return elTop + elHeight * elVal - containerHeight * viewVal;\n }\n\n #calcViewportOffset(rect: DOMRect, windowHeight: number, offsetStr: string): number {\n const [elVal, viewVal] = offsetStr.split(' ').map(parseFloat);\n return rect.top + rect.height * elVal - windowHeight * viewVal;\n }\n\n ngOnDestroy() {\n if (this.#rafId !== null) {\n this.#documentRef.defaultView?.cancelAnimationFrame(this.#rafId);\n this.#rafId = null;\n }\n this.#player?.cancel();\n this.#scrollTarget?.removeEventListener('scroll', this.#scrollListener);\n this.#observer?.disconnect();\n }\n}\n","import {\n Directive,\n effect,\n EmbeddedViewRef,\n forwardRef,\n inject,\n input,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n MOVE_PRESENCE_PARENT,\n MovePresenceChild,\n MovePresenceProvider,\n} from '../tokens/presence.tokens';\n\n@Directive({\n selector: '[movePresence]',\n providers: [\n {\n provide: MOVE_PRESENCE_PARENT,\n useExisting: forwardRef(() => MovePresenceDirective),\n },\n ],\n})\nexport class MovePresenceDirective implements MovePresenceProvider {\n readonly movePresence = input<unknown>();\n\n readonly #viewContainer = inject(ViewContainerRef);\n readonly #template = inject(TemplateRef);\n\n #view: EmbeddedViewRef<unknown> | null = null;\n #isRemoving = false;\n\n readonly #children = new Set<MovePresenceChild>();\n\n constructor() {\n effect(() => {\n const show = !!this.movePresence();\n\n if (show) {\n if (!this.#view) {\n this.#view = this.#viewContainer.createEmbeddedView(this.#template);\n this.#isRemoving = false;\n } else if (this.#isRemoving) {\n // If we were removing, cancel the removal\n this.#isRemoving = false;\n }\n } else if (!show && this.#view && !this.#isRemoving) {\n this.#isRemoving = true;\n this.removeView();\n }\n });\n }\n\n register(child: MovePresenceChild): void {\n this.#children.add(child);\n }\n\n unregister(child: MovePresenceChild): void {\n this.#children.delete(child);\n }\n\n private async removeView(): Promise<void> {\n const promises: (Promise<void> | void)[] = [];\n\n // Trigger leave on all registered children\n for (const child of this.#children) {\n promises.push(child.playLeave());\n }\n\n try {\n if (promises.length > 0) {\n await Promise.all(promises);\n }\n } catch {\n // Ignore errors in animations\n }\n\n if (this.#isRemoving && this.#view) {\n this.#viewContainer.clear();\n this.#view = null;\n this.#isRemoving = false;\n this.#children.clear();\n }\n }\n}\n","import { Directive, ElementRef, inject, input, OnDestroy } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { MoveSpring } from '../presets/presets.types';\n\nimport { prefersReducedMotion, validateDragElastic } from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\n\nexport type MoveDragConstraints =\n | { top?: number; right?: number; bottom?: number; left?: number }\n | HTMLElement;\n\n@Directive({\n selector: '[moveDrag]',\n host: {\n '(pointerdown)': 'onPointerDown($event)',\n '(pointermove)': 'onPointerMove($event)',\n '(pointerup)': 'onPointerUp($event)',\n '(pointercancel)': 'onPointerUp($event)',\n },\n})\nexport class MoveDragDirective implements OnDestroy {\n readonly moveDrag = input<boolean | ''>(true);\n readonly moveDragConstraints = input<MoveDragConstraints | undefined>(undefined);\n readonly moveDragElastic = input<number>(0.5);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n\n #isDragging = false;\n #pointerId: number | null = null;\n #startX = 0;\n #startY = 0;\n\n #_x = 0;\n #_y = 0;\n\n #dragBounds: { top?: number; right?: number; bottom?: number; left?: number } | null = null;\n #player: AnimationControls | null = null;\n\n onPointerDown(e: PointerEvent) {\n if (this.moveDrag() === false || e.button !== 0) return;\n this.#isDragging = true;\n this.#pointerId = e.pointerId;\n if (typeof this.#host.nativeElement.setPointerCapture === 'function') {\n this.#host.nativeElement.setPointerCapture(e.pointerId);\n }\n\n this.#player?.cancel();\n // read bounds cleanly before next render\n this.#dragBounds = this.resolveBounds();\n\n this.#startX = e.clientX - this.#_x;\n this.#startY = e.clientY - this.#_y;\n\n // Prevent text selection while dragging\n this.#host.nativeElement.style.touchAction = 'none';\n this.#host.nativeElement.style.userSelect = 'none';\n }\n\n onPointerMove(e: PointerEvent) {\n if (!this.#isDragging || e.pointerId !== this.#pointerId) return;\n\n this.#_x = e.clientX - this.#startX;\n this.#_y = e.clientY - this.#startY;\n\n this.applyTransform();\n }\n\n onPointerUp(e: PointerEvent) {\n if (!this.#isDragging || e.pointerId !== this.#pointerId) return;\n this.#isDragging = false;\n if (typeof this.#host.nativeElement.releasePointerCapture === 'function') {\n this.#host.nativeElement.releasePointerCapture(e.pointerId);\n }\n this.#pointerId = null;\n\n this.#host.nativeElement.style.touchAction = '';\n this.#host.nativeElement.style.userSelect = '';\n\n this.snapBackIfNeeded();\n }\n\n private resolveBounds() {\n const constraints = this.moveDragConstraints();\n if (!constraints) return null;\n\n if (constraints instanceof HTMLElement) {\n const oldTranslate = this.#host.nativeElement.style.translate;\n this.#host.nativeElement.style.translate = 'none';\n\n const elRect = this.#host.nativeElement.getBoundingClientRect();\n const containerRect = constraints.getBoundingClientRect();\n\n this.#host.nativeElement.style.translate = oldTranslate;\n\n return {\n left: containerRect.left - elRect.left,\n right: containerRect.right - elRect.right,\n top: containerRect.top - elRect.top,\n bottom: containerRect.bottom - elRect.bottom,\n };\n }\n\n return constraints;\n }\n\n private applyTransform() {\n let x = this.#_x;\n let y = this.#_y;\n\n if (this.#dragBounds) {\n const elastic = validateDragElastic(this.moveDragElastic());\n\n if (this.#dragBounds.left !== undefined && x < this.#dragBounds.left) {\n x = this.#dragBounds.left - (this.#dragBounds.left - x) * elastic;\n } else if (this.#dragBounds.right !== undefined && x > this.#dragBounds.right) {\n x = this.#dragBounds.right + (x - this.#dragBounds.right) * elastic;\n }\n\n if (this.#dragBounds.top !== undefined && y < this.#dragBounds.top) {\n y = this.#dragBounds.top - (this.#dragBounds.top - y) * elastic;\n } else if (this.#dragBounds.bottom !== undefined && y > this.#dragBounds.bottom) {\n y = this.#dragBounds.bottom + (y - this.#dragBounds.bottom) * elastic;\n }\n }\n\n this.#host.nativeElement.style.translate = `${x}px ${y}px`;\n }\n\n private snapBackIfNeeded() {\n if (!this.#dragBounds) return;\n\n // We base the snap on the current logical _x, _y, calculating the nearest valid position.\n let targetX = this.#_x;\n let targetY = this.#_y;\n\n if (this.#dragBounds.left !== undefined && targetX < this.#dragBounds.left)\n targetX = this.#dragBounds.left;\n if (this.#dragBounds.right !== undefined && targetX > this.#dragBounds.right)\n targetX = this.#dragBounds.right;\n if (this.#dragBounds.top !== undefined && targetY < this.#dragBounds.top)\n targetY = this.#dragBounds.top;\n if (this.#dragBounds.bottom !== undefined && targetY > this.#dragBounds.bottom)\n targetY = this.#dragBounds.bottom;\n\n if (targetX !== this.#_x || targetY !== this.#_y) {\n // Find the currently visible coordinates (which include elasticity)\n let currentVisX = this.#_x;\n let currentVisY = this.#_y;\n\n const elastic = validateDragElastic(this.moveDragElastic());\n if (this.#dragBounds.left !== undefined && this.#_x < this.#dragBounds.left) {\n currentVisX = this.#dragBounds.left - (this.#dragBounds.left - this.#_x) * elastic;\n } else if (this.#dragBounds.right !== undefined && this.#_x > this.#dragBounds.right) {\n currentVisX = this.#dragBounds.right + (this.#_x - this.#dragBounds.right) * elastic;\n }\n if (this.#dragBounds.top !== undefined && this.#_y < this.#dragBounds.top) {\n currentVisY = this.#dragBounds.top - (this.#dragBounds.top - this.#_y) * elastic;\n } else if (this.#dragBounds.bottom !== undefined && this.#_y > this.#dragBounds.bottom) {\n currentVisY = this.#dragBounds.bottom + (this.#_y - this.#dragBounds.bottom) * elastic;\n }\n\n this.#player = this.#engine.play(\n this.#host.nativeElement,\n {\n x: [currentVisX, targetX],\n y: [currentVisY, targetY],\n },\n {\n config: { duration: 300, easing: 'ease', delay: 0, disabled: false },\n spring: this.moveSpring() ?? { stiffness: 500, damping: 30 },\n disabled: prefersReducedMotion(this.#documentRef),\n },\n );\n\n this.#_x = targetX;\n this.#_y = targetY;\n }\n }\n\n ngOnDestroy(): void {\n if (this.#pointerId !== null) {\n try {\n if (typeof this.#host.nativeElement.releasePointerCapture === 'function') {\n this.#host.nativeElement.releasePointerCapture(this.#pointerId);\n }\n } catch {\n // Element may already be detached\n }\n this.#pointerId = null;\n }\n this.#host.nativeElement.style.touchAction = '';\n this.#host.nativeElement.style.userSelect = '';\n this.#player?.cancel();\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n Directive,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n} from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n applyInitialStyles,\n clearInitialStyles,\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\n\n@Directive({\n selector: '[moveInView]',\n})\nexport class MoveInViewDirective implements OnDestroy, OnInit {\n readonly moveInView = input<MovePreset | MoveKeyframes>('none');\n readonly moveInViewMargin = input<string>('0px');\n readonly moveInViewOnce = input<boolean>(true);\n /** CSS selector for the IntersectionObserver root (for inner scrollable containers). */\n readonly moveInViewRoot = input<string | null>(null);\n\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #platformId = inject(PLATFORM_ID);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n\n #player: AnimationControls | null = null;\n #observer: IntersectionObserver | null = null;\n #frames: MoveKeyframes | null = null;\n #isAnimated = false;\n\n ngOnInit(): void {\n if (!isPlatformBrowser(this.#platformId) || this.moveDisabled()) return;\n\n const isReduced = prefersReducedMotion(this.#documentRef);\n if (isReduced) return;\n\n this.#frames = resolveMoveFrames(this.moveInView(), 'enter');\n\n // Apply initial (invisible) state directly to DOM - avoid creating a player\n applyInitialStyles(this.#host.nativeElement, this.#frames);\n\n const rootSelector = this.moveInViewRoot();\n const rootEl = rootSelector ? this.#documentRef.querySelector(rootSelector) : null;\n\n this.#observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n if (entry.isIntersecting && !this.#isAnimated) {\n this.#playAnimation();\n if (this.moveInViewOnce()) {\n this.#isAnimated = true;\n this.#observer?.disconnect();\n }\n } else if (!entry.isIntersecting && !this.moveInViewOnce() && this.#isAnimated) {\n // Reset to initial state for re-animation\n this.#player?.cancel();\n this.#player = null;\n this.#isAnimated = false;\n if (this.#frames) {\n applyInitialStyles(this.#host.nativeElement, this.#frames);\n }\n }\n },\n {\n root: rootEl as HTMLElement | null,\n rootMargin: this.moveInViewMargin(),\n threshold: 0,\n },\n );\n\n this.#observer.observe(this.#host.nativeElement);\n }\n\n #playAnimation(): void {\n if (!this.#frames) return;\n\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: this.moveDelay() ?? 0,\n disabled: false,\n },\n false,\n );\n\n // Clear inline styles before animating so WAAPI can take over cleanly\n clearInitialStyles(this.#host.nativeElement);\n\n this.#player = this.#engine.play(this.#host.nativeElement, this.#frames, {\n config,\n spring: this.moveSpring(),\n disabled: false,\n });\n\n this.#isAnimated = true;\n }\n\n ngOnDestroy(): void {\n this.#observer?.disconnect();\n this.#player?.cancel();\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n Directive,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n Renderer2,\n} from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n applyInitialStyles,\n clearInitialStyles,\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\n\n@Directive({\n selector: '[moveText]',\n})\nexport class MoveTextDirective implements OnDestroy, OnInit {\n readonly moveText = input<MovePreset | MoveKeyframes>('fade-up');\n readonly moveTextSplit = input<'chars' | 'words'>('chars');\n readonly moveTextStagger = input<number>(30);\n\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #platformId = inject(PLATFORM_ID);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n readonly #renderer = inject(Renderer2);\n\n #players: AnimationControls[] = [];\n #spans: HTMLElement[] = [];\n #observer: IntersectionObserver | null = null;\n #frames: MoveKeyframes | null = null;\n\n ngOnInit(): void {\n if (!isPlatformBrowser(this.#platformId) || this.moveDisabled()) return;\n\n // Defer to after Angular has completed its first rendering pass and set\n // the interpolated text content on the host element (same pattern as moveEnter).\n Promise.resolve().then(() => {\n this.#splitText();\n\n const isReduced = prefersReducedMotion(this.#documentRef);\n if (isReduced) return;\n\n this.#frames = resolveMoveFrames(this.moveText(), 'enter');\n\n // Apply initial (invisible) state to each span directly — no player yet\n this.#spans.forEach((span) => {\n if (this.#frames) {\n applyInitialStyles(span, this.#frames);\n }\n });\n\n // Create player and animate only when visible\n this.#observer = new IntersectionObserver((entries) => {\n if (entries[0].isIntersecting) {\n this.#playAll();\n this.#observer?.disconnect();\n }\n });\n\n this.#observer.observe(this.#host.nativeElement);\n });\n }\n\n #playAll(): void {\n if (!this.#frames) return;\n\n const baseDelay = this.moveDelay() ?? 0;\n const stagger = this.moveTextStagger();\n\n this.#spans.forEach((span, index) => {\n if (!this.#frames) return;\n\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: baseDelay + index * stagger,\n disabled: false,\n },\n false,\n );\n\n // Clear inline styles so WAAPI can animate from the keyframe starting point\n clearInitialStyles(span);\n\n const player = this.#engine.play(span, this.#frames!, {\n config,\n spring: this.moveSpring(),\n disabled: false,\n });\n\n if (player) {\n this.#players.push(player);\n }\n });\n }\n\n #splitText() {\n const el = this.#host.nativeElement;\n const text = (el.textContent ?? '').trim();\n\n // Clear existing content safely via Renderer2\n while (el.firstChild) {\n this.#renderer.removeChild(el, el.firstChild);\n }\n this.#renderer.setAttribute(el, 'aria-label', text);\n\n const byChars = this.moveTextSplit() === 'chars';\n\n if (byChars) {\n // Split character by character, preserving spaces as text nodes\n [...text].forEach((char) => {\n if (char === ' ') {\n this.#renderer.appendChild(el, this.#documentRef.createTextNode(' '));\n return;\n }\n const span = this.#renderer.createElement('span');\n this.#renderer.setAttribute(span, 'aria-hidden', 'true');\n this.#renderer.setStyle(span, 'display', 'inline-block');\n this.#renderer.setProperty(span, 'textContent', char);\n this.#renderer.appendChild(el, span);\n this.#spans.push(span as HTMLElement);\n });\n } else {\n // Split word by word\n const words = text.split(/\\s+/);\n words.forEach((word: string, index: number) => {\n const span = this.#renderer.createElement('span');\n this.#renderer.setAttribute(span, 'aria-hidden', 'true');\n this.#renderer.setStyle(span, 'display', 'inline-block');\n this.#renderer.setStyle(span, 'white-space', 'pre');\n this.#renderer.setProperty(\n span,\n 'textContent',\n index < words.length - 1 ? word + ' ' : word,\n );\n this.#renderer.appendChild(el, span);\n this.#spans.push(span as HTMLElement);\n });\n }\n }\n\n ngOnDestroy(): void {\n this.#observer?.disconnect();\n this.#players.forEach((p) => p.cancel());\n this.#players = [];\n this.#spans = [];\n }\n}\n","import {\n Directive,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { SmoothScrollService } from './smooth-scroll.service';\n\n/**\n * Directive that enables smooth scrolling on a specific scrollable container.\n *\n * Supports both mouse wheel (desktop) and touch scroll (mobile) with\n * momentum-based inertia after finger lift, similar to Lenis.\n *\n * ⚠️ SmoothScrollService is a root singleton. Do NOT use this directive\n * on multiple elements simultaneously — use it once on the page root or\n * inject the service directly where needed.\n *\n * Usage:\n * <div moveSmoothScroll [moveSmoothScrollLerp]=\"0.08\" style=\"overflow-y: auto; height: 100vh\">\n * ...content...\n * </div>\n *\n * Or use the service directly (e.g. on documentElement):\n * constructor() {\n * inject(SmoothScrollService).init({ lerp: 0.1 });\n * }\n */\n@Directive({\n selector: '[moveSmoothScroll]',\n})\nexport class MoveSmoothScrollDirective implements OnInit, OnDestroy {\n /** Lerp factor passed to SmoothScrollService. Lower = smoother. Range: 0–1. */\n readonly moveSmoothScrollLerp = input<number>(0.1);\n\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #scroll = inject(SmoothScrollService);\n readonly #platformId = inject(PLATFORM_ID);\n\n ngOnInit(): void {\n if (!isPlatformBrowser(this.#platformId)) return;\n\n this.#scroll.init({\n lerp: this.moveSmoothScrollLerp(),\n element: this.#host.nativeElement,\n });\n }\n\n ngOnDestroy(): void {\n this.#scroll.destroy();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnDestroy } from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n reverseFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\n\n@Directive({\n selector: '[moveWhileFocus]',\n host: {\n '(focusin)': 'onFocus()',\n '(focusout)': 'onBlur()',\n },\n})\nexport class MoveFocusDirective implements OnDestroy {\n readonly moveWhileFocus = input.required<MovePreset | MoveKeyframes>();\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n\n #currentPlayer: AnimationControls | null = null;\n #isFocused = false;\n\n onFocus() {\n if (this.#isFocused) return;\n this.#isFocused = true;\n this.play(false);\n }\n\n onBlur() {\n if (!this.#isFocused) return;\n this.#isFocused = false;\n this.play(true);\n }\n\n private play(reverse: boolean) {\n this.#currentPlayer?.cancel();\n\n const isReduced = prefersReducedMotion(this.#documentRef);\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: this.moveDelay(),\n disabled: this.moveDisabled(),\n },\n isReduced,\n );\n\n if (config.disabled) return;\n\n let frames = resolveMoveFrames(this.moveWhileFocus(), 'enter');\n if (reverse) {\n frames = reverseFrames(frames);\n }\n\n this.#currentPlayer = this.#engine.play(this.#host.nativeElement, frames, {\n config,\n spring: this.moveSpring(),\n disabled: false,\n });\n }\n\n ngOnDestroy(): void {\n this.#currentPlayer?.cancel();\n }\n}\n","import {\n Directive,\n ElementRef,\n effect,\n inject,\n input,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n} from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\nimport { SmoothScrollService } from '../scroll/smooth-scroll.service';\nimport { MoveKeyframes } from '../presets/presets.types';\n\n@Directive({\n selector: '[moveParallax]',\n exportAs: 'moveParallax',\n})\nexport class MoveParallaxDirective implements OnInit, OnDestroy {\n readonly moveParallax = input<number>(0.2);\n readonly moveParallaxAxis = input<'x' | 'y'>('y');\n\n readonly #documentRef = inject(DOCUMENT);\n readonly #platformId = inject(PLATFORM_ID);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n readonly #smoothScroll = inject(SmoothScrollService, { optional: true });\n\n #player: AnimationControls | null = null;\n #observer: IntersectionObserver | null = null;\n #isVisible = false;\n #scrollListener = () => this.#updateProgress();\n\n #elHeight = 0;\n #windowHeight = 0;\n #totalDistance = 0;\n #initialAbsoluteTop = 0;\n\n constructor() {\n effect(() => {\n this.#smoothScroll?.scrollY();\n if (this.#smoothScroll?.isActive && this.#isVisible) {\n this.#updateProgress();\n }\n });\n }\n\n ngOnInit() {\n if (!isPlatformBrowser(this.#platformId)) return;\n\n const view = this.#documentRef.defaultView;\n if (!view) return;\n\n this.#initAnimation();\n\n this.#observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n this.#isVisible = entry.isIntersecting;\n\n if (entry.isIntersecting) {\n if (!this.#smoothScroll?.isActive) {\n view.addEventListener('scroll', this.#scrollListener, { passive: true });\n }\n this.#updateProgress();\n } else {\n view.removeEventListener('scroll', this.#scrollListener);\n }\n },\n { root: null },\n );\n\n this.#observer.observe(this.#host.nativeElement);\n\n // Re-initialize animation on resize to update dimensions\n view.addEventListener('resize', this.#resizeListener, { passive: true });\n }\n\n #resizeListener = () => {\n this.#initAnimation();\n };\n\n #initAnimation() {\n const view = this.#documentRef.defaultView;\n if (!view) return;\n\n this.#windowHeight = view.innerHeight;\n this.#elHeight = this.#host.nativeElement.offsetHeight;\n this.#totalDistance = this.#windowHeight + this.#elHeight;\n\n const scrollY = this.#smoothScroll?.isActive\n ? this.#smoothScroll.scrollY()\n : view.scrollY || view.pageYOffset || 0;\n const rect = this.#host.nativeElement.getBoundingClientRect();\n this.#initialAbsoluteTop = scrollY + rect.top;\n\n const speed = this.moveParallax();\n const axis = this.moveParallaxAxis();\n\n // Total translation distance across the entire scroll intersection\n const translateDist = this.#totalDistance * speed;\n\n const frames: MoveKeyframes = {};\n if (axis === 'x') {\n frames.x = [translateDist / 2, -translateDist / 2];\n } else {\n frames.y = [translateDist / 2, -translateDist / 2];\n }\n\n this.#player?.cancel();\n\n this.#player = this.#engine.play(this.#host.nativeElement, frames, {\n config: { duration: 1000, delay: 0, easing: 'linear', disabled: false, iterations: 1 },\n });\n this.#player?.pause();\n\n if (this.#player) {\n this.#player.currentTime = 0;\n }\n }\n\n #updateProgress() {\n const view = this.#documentRef.defaultView;\n if (!view || this.#totalDistance === 0) return;\n\n const scrollY = this.#smoothScroll?.isActive\n ? this.#smoothScroll.scrollY()\n : view.scrollY || view.pageYOffset || 0;\n\n // Efficiently calculate the current visual top without triggering layout thrashing\n // or feedback loops caused by the active CSS transform translating the element.\n const currentVirtualTop = this.#initialAbsoluteTop - scrollY;\n\n // progress is 0 when element top hits window bottom (currentVirtualTop === windowHeight)\n // progress is 1 when element bottom hits window top (currentVirtualTop === -elHeight)\n let p = (this.#windowHeight - currentVirtualTop) / this.#totalDistance;\n p = Math.max(0, Math.min(1, p));\n\n if (this.#player) {\n this.#player.currentTime = p * 1000;\n }\n }\n\n ngOnDestroy() {\n this.#player?.cancel();\n const view = this.#documentRef.defaultView;\n if (view) {\n view.removeEventListener('scroll', this.#scrollListener);\n view.removeEventListener('resize', this.#resizeListener);\n }\n this.#observer?.disconnect();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { MoveKeyframes, MovePreset, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport {\n prefersReducedMotion,\n resolveMovementConfig,\n resolveMoveFrames,\n} from './move-animation.utils';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { AnimationControls } from '../engines/animation-controls';\n\n@Directive({\n selector: '[moveLoop]',\n})\nexport class MoveLoopDirective implements OnDestroy, OnInit {\n readonly moveLoop = input<MovePreset | MoveKeyframes>('none');\n readonly moveDuration = input<number | undefined>(undefined);\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<HTMLElement>);\n readonly #engine = inject(AnimationEngine);\n\n #player: AnimationControls | null = null;\n\n ngOnInit(): void {\n const frames = resolveMoveFrames(this.moveLoop(), 'loop');\n\n // Skip noop presets to avoid creating an infinite animation that does nothing\n if (this.moveLoop() === 'none' || Object.keys(frames).length === 0) {\n return;\n }\n\n const isReduced = prefersReducedMotion(this.#documentRef);\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: this.moveDelay(),\n disabled: this.moveDisabled(),\n },\n isReduced,\n );\n\n this.#player = this.#engine.play(this.#host.nativeElement, frames, {\n config,\n spring: this.moveSpring(),\n disabled: config.disabled,\n iterations: Infinity,\n });\n }\n\n ngOnDestroy(): void {\n this.#player?.cancel();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, OnDestroy, effect, inject, input } from '@angular/core';\nimport { AnimationControls } from '../engines/animation-controls';\nimport { AnimationEngine } from '../engines/animation-engine.service';\nimport { MoveKeyframes, MoveSpring } from '../presets/presets.types';\nimport { MOVEMENT_CONFIG } from '../tokens/movement.tokens';\nimport { prefersReducedMotion, resolveMovementConfig, reverseFrames } from './move-animation.utils';\n\nfunction optionalNumberAttribute(value: unknown): number | undefined {\n if (value === undefined || value === null || value === '') {\n return undefined;\n }\n\n return Number(value);\n}\n\n@Directive({\n selector: '[moveTarget]',\n standalone: true,\n})\nexport class MoveTargetDirective implements OnDestroy {\n readonly moveTarget = input.required<boolean>();\n readonly moveFrames = input.required<MoveKeyframes>();\n readonly moveDuration = input<number | undefined, unknown>(undefined, {\n transform: optionalNumberAttribute,\n });\n readonly moveEasing = input<string | undefined>(undefined);\n readonly moveDelay = input<number | undefined, unknown>(undefined, {\n transform: optionalNumberAttribute,\n });\n readonly moveSpring = input<MoveSpring | undefined>(undefined);\n readonly moveDisabled = input<boolean | undefined>(undefined);\n readonly moveReverseDuration = input<number | undefined, unknown>(undefined, {\n transform: optionalNumberAttribute,\n });\n readonly moveReverseEasing = input<string | undefined>(undefined);\n\n readonly #defaults = inject(MOVEMENT_CONFIG);\n readonly #documentRef = inject(DOCUMENT);\n readonly #host = inject(ElementRef<Element>);\n readonly #engine = inject(AnimationEngine);\n\n #currentPlayer: AnimationControls | null = null;\n #hasPlayedForward = false;\n\n readonly #targetEffect = effect(() => {\n const active = this.moveTarget();\n const frames = this.moveFrames();\n\n if (active) {\n this.#playForward(frames);\n this.#hasPlayedForward = true;\n return;\n }\n\n if (this.#hasPlayedForward) {\n this.#playReverse(frames);\n }\n });\n\n #playForward(frames: MoveKeyframes): void {\n this.#currentPlayer?.cancel();\n\n const isReduced = prefersReducedMotion(this.#documentRef);\n const config = resolveMovementConfig(\n this.#defaults,\n {\n duration: this.moveDuration(),\n easing: this.moveEasing(),\n delay: this.moveDelay(),\n disabled: this.moveDisabled(),\n },\n isReduced,\n );\n\n this.#currentPlayer = this.#engine.play(this.#host.nativeElement, frames, {\n config,\n spring: this.moveSpring(),\n disabled: config.disabled,\n });\n }\n\n #playReverse(frames: MoveKeyframes): void {\n this.#currentPlayer?.cancel();\n\n const isReduced = prefersReducedMotion(this.#documentRef);\n const config = resolveMovementConfig(\n { ...this.#defaults, duration: 200, easing: 'ease-out', delay: 0 },\n {\n duration: this.moveReverseDuration() ?? this.moveDuration(),\n easing: this.moveReverseEasing(),\n delay: 0,\n disabled: this.moveDisabled(),\n },\n isReduced,\n );\n\n this.#currentPlayer = this.#engine.play(this.#host.nativeElement, reverseFrames(frames), {\n config,\n spring: this.moveSpring(),\n disabled: config.disabled,\n });\n }\n\n ngOnDestroy(): void {\n this.#targetEffect.destroy();\n this.#currentPlayer?.cancel();\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { MOVEMENT_CONFIG, MOVEMENT_DEFAULTS, MovementConfig } from '../tokens/movement.tokens';\n\nexport type MovementConfigInput = Partial<MovementConfig>;\n\nexport function provideMovement(config: MovementConfigInput = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: MOVEMENT_CONFIG,\n useValue: {\n ...MOVEMENT_DEFAULTS,\n ...config,\n } satisfies MovementConfig,\n },\n ]);\n}\n","import { MoveAnimateDirective } from './directives/move-animate.directive';\nimport { MoveAnimationDirective } from './directives/move-animation.directive';\nimport { MoveEnterDirective } from './directives/move-enter.directive';\nimport { MoveLeaveDirective } from './directives/move-leave.directive';\nimport { MoveHoverDirective } from './directives/move-hover.directive';\nimport { MoveTapDirective } from './directives/move-tap.directive';\nimport { MoveVariantsDirective } from './directives/move-variants.directive';\nimport { MoveStaggerDirective } from './directives/move-stagger.directive';\nimport { MoveLayoutDirective } from './directives/move-layout.directive';\nimport { MoveScrollDirective } from './directives/move-scroll.directive';\nimport { MovePresenceDirective } from './directives/move-presence.directive';\nimport { MoveDragDirective } from './directives/move-drag.directive';\nimport { MoveInViewDirective } from './directives/move-in-view.directive';\nimport { MoveTextDirective } from './directives/move-text.directive';\nimport { MoveSmoothScrollDirective } from './scroll/move-smooth-scroll.directive';\nimport { MoveFocusDirective } from './directives/move-focus.directive';\nimport { MoveParallaxDirective } from './directives/move-parallax.directive';\nimport { MoveLoopDirective } from './directives/move-loop.directive';\nimport { MoveTargetDirective } from './directives/move-target.directive';\n\nexport const MOVEMENT_DIRECTIVES = [\n MoveEnterDirective,\n MoveLeaveDirective,\n MoveAnimateDirective,\n MoveHoverDirective,\n MoveTapDirective,\n MoveVariantsDirective,\n MoveStaggerDirective,\n MoveLayoutDirective,\n MoveScrollDirective,\n MovePresenceDirective,\n MoveDragDirective,\n MoveInViewDirective,\n MoveTextDirective,\n MoveSmoothScrollDirective,\n MoveFocusDirective,\n MoveParallaxDirective,\n MoveAnimationDirective,\n MoveLoopDirective,\n MoveTargetDirective,\n] as const;\n\nexport * from './directives/move-animate.directive';\nexport * from './directives/move-enter.directive';\nexport * from './directives/move-leave.directive';\nexport * from './directives/move-hover.directive';\nexport * from './directives/move-tap.directive';\nexport * from './directives/move-variants.directive';\nexport * from './directives/move-stagger.directive';\nexport * from './directives/move-layout.directive';\nexport * from './directives/move-scroll.directive';\nexport * from './directives/move-presence.directive';\nexport * from './directives/move-drag.directive';\nexport * from './directives/move-in-view.directive';\nexport * from './directives/move-text.directive';\nexport * from './directives/move-focus.directive';\nexport * from './directives/move-parallax.directive';\nexport * from './directives/move-animation.directive';\nexport * from './directives/move-loop.directive';\nexport * from './directives/move-target.directive';\nexport * from './directives/move-animation.utils';\nexport * from './scroll/smooth-scroll.service';\nexport * from './scroll/move-smooth-scroll.directive';\nexport * from './engines/animation-controls';\nexport * from './engines/animation-engine.service';\nexport * from './engines/spring-player';\nexport * from './engines/waapi-player';\nexport * from './presets/presets';\nexport * from './presets/presets.types';\nexport * from './providers/provide-movement';\nexport * from './tokens/movement.tokens';\nexport * from './tokens/presence.tokens';\nexport * from './tokens/stagger.tokens';\n","/*\n * Public API Surface of movement\n */\n\nexport * from './lib/movement';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|