triggr-motion 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +379 -0
- package/dist/animations-DhYFMdig.d.mts +63 -0
- package/dist/animations-DhYFMdig.d.ts +63 -0
- package/dist/block/animations.cjs +2 -0
- package/dist/block/animations.cjs.map +1 -0
- package/dist/block/animations.d.mts +13 -0
- package/dist/block/animations.d.ts +13 -0
- package/dist/block/animations.js +2 -0
- package/dist/block/animations.js.map +1 -0
- package/dist/block/index.cjs +11 -0
- package/dist/block/index.cjs.map +1 -0
- package/dist/block/index.d.mts +22 -0
- package/dist/block/index.d.ts +22 -0
- package/dist/block/index.js +11 -0
- package/dist/block/index.js.map +1 -0
- package/dist/list/animations.cjs +2 -0
- package/dist/list/animations.cjs.map +1 -0
- package/dist/list/animations.d.mts +13 -0
- package/dist/list/animations.d.ts +13 -0
- package/dist/list/animations.js +2 -0
- package/dist/list/animations.js.map +1 -0
- package/dist/list/index.cjs +2 -0
- package/dist/list/index.cjs.map +1 -0
- package/dist/list/index.d.mts +10 -0
- package/dist/list/index.d.ts +10 -0
- package/dist/list/index.js +2 -0
- package/dist/list/index.js.map +1 -0
- package/dist/paragraph/animations.cjs +2 -0
- package/dist/paragraph/animations.cjs.map +1 -0
- package/dist/paragraph/animations.d.mts +2 -0
- package/dist/paragraph/animations.d.ts +2 -0
- package/dist/paragraph/animations.js +2 -0
- package/dist/paragraph/animations.js.map +1 -0
- package/dist/paragraph/index.cjs +3 -0
- package/dist/paragraph/index.cjs.map +1 -0
- package/dist/paragraph/index.d.mts +10 -0
- package/dist/paragraph/index.d.ts +10 -0
- package/dist/paragraph/index.js +3 -0
- package/dist/paragraph/index.js.map +1 -0
- package/dist/text/animations.cjs +2 -0
- package/dist/text/animations.cjs.map +1 -0
- package/dist/text/animations.d.mts +12 -0
- package/dist/text/animations.d.ts +12 -0
- package/dist/text/animations.js +2 -0
- package/dist/text/animations.js.map +1 -0
- package/dist/text/index.cjs +3 -0
- package/dist/text/index.cjs.map +1 -0
- package/dist/text/index.d.mts +10 -0
- package/dist/text/index.d.ts +10 -0
- package/dist/text/index.js +3 -0
- package/dist/text/index.js.map +1 -0
- package/dist/types-BuLn_v48.d.mts +59 -0
- package/dist/types-BuLn_v48.d.ts +59 -0
- package/dist/types-BuzDNWZT.d.mts +62 -0
- package/dist/types-BuzDNWZT.d.ts +62 -0
- package/dist/types-C3sFNX1j.d.mts +77 -0
- package/dist/types-C3sFNX1j.d.ts +77 -0
- package/package.json +98 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/paragraph/useValueChange.ts","../../src/paragraph/presets.ts","../../src/paragraph/index.tsx"],"names":["useValueChange","val","prevRef","useRef","changed","prev","EASE_IN","EASE_OUT","EASE_IN_OUT","SPRING","SMOOTH","fadeIn","fadeOut","presets","validDuration","value","fallback","n","warned","_probe","getProbe","measureTextBlock","el","text","probe","computed","containerWidth","rect","prefersReducedMotion","_a","_b","cancelElementAnimations","animation","getScrollRoot","parent","style","scrollObserverOptions","threshold","root","rootHeight","clamped","inset","runPropertyAnimation","properties","options","from","to","property","pair","anim","splitWordsAsElements","parts","elements","part","span","getVisualLines","refEl","textNode","lines","range","start","lo","hi","mid","splitLinesAsElements","visualLines","line","div","animateMorph","prevValue","nextValue","baseDuration","onEnd","_c","oldText","newText","oldEl","newEl","cleanup","prepareStableParagraphSwap","oldLines","newLines","maxLines","prevDisplay","i","oldLine","newLine","same","container","oldSpan","newSpan","unfinished","halfDur","stagger","cleaned","track","marker","animateFadeSwap","duration","animateSlideReplace","direction","width","animateCrossFade","animateFadeMask","color","overlay","prevPosition","prevOverflow","fadeCleanup","animateHighlight","highlightColor","mode","hold","target","findTextChild","content","previous","hlColor","colorWithAlpha","drawDuration","cancelled","finish","abort","fadeAnim","eraseAnim","animateDiff","oldParts","newParts","diffSpans","s","remaining","maxDelay","totalDuration","animateHeightAuto","oldHeight","newHeight","heightCleanup","animateCursorBlink","_prevValue","_nextValue","cursor","blinkDuration","alpha","m","child","containerHeight","savedText","keeper","reserveStableParagraphSize","prevText","nextText","prevSize","nextSize","minW","customAnimations","_prev","_text","highlightMode","highlightHold","rebaseParagraphKeyframes","keyframes","distance","scale","blur","kf","t","f","_","runAnimation","name","presetOptions","def","baseFrames","rebased","opacity","prevOrigin","hasScaleY","k","first","last","hadOpacity","hadFilter","setupScrollWordReveal","textChild","useLines","prevWidth","prevMinHeight","fragments","wordSpans","originalInnerHTML","node","observer","entries","entry","word","lineDivs","isTargetChild","currentRect","AnimateParagraph","forwardRef","triggersProp","trigger","baseAnimation","scrollAnimation","exitAnimation","show","unmountOnExit","highlightColorProp","easing","delay","repeat","once","as","className","onClick","onEnter","onExit","onHoverStart","onHoverEnd","onAnimationEndProp","children","forwardedRef","_d","ref","animRef","propertyAnimRef","cleanupRef","timerRef","runFallbackRef","prevHeightRef","prevValRef","runningRef","queueRef","runIdRef","scrollTriggeredRef","exitAnimRef","exitKeyRef","playCount","setPlayCount","useState","currentRun","setCurrentRun","phase","setPhase","watchedCurrent","capturedPrevRef","shouldObserveOnce","triggerConfigs","useMemo","tc","triggerSources","hasTrigger","useCallback","source","activeTrigger","activeConfig","scrollConfig","scrollThreshold","finishRun","next","c","requestRun","useEffect","key","motionDuration","onExitEnd","exitFrames","exitPrevOrigin","exitHasScaleY","handleClick","e","handleMouseEnter","handleMouseLeave","removeObserver","useLayoutEffect","current","reduced","safeDuration","effectivePrev","isChange","onFinish","handler","createElement","Animate","paragraph_default"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useRef } from \"react\"\n\nexport function useValueChange(val: string | number | undefined) {\n const prevRef = useRef<string | number | undefined>(undefined)\n const changed = prevRef.current !== undefined && prevRef.current !== val\n const prev = prevRef.current\n prevRef.current = val\n return { changed, prev, current: val }\n}\n","// Easing constants (shared with paragraph/index.tsx)\nexport const EASE_IN = 'cubic-bezier(0.0, 0.0, 0.2, 1)'\nexport const EASE_OUT = 'cubic-bezier(0.4, 0.0, 1, 1)'\nexport const EASE_IN_OUT = 'cubic-bezier(0.4, 0.0, 0.2, 1)'\nexport const SPRING = 'cubic-bezier(0.34, 1.56, 0.64, 1)'\nexport const SMOOTH = 'cubic-bezier(0.22, 1, 0.36, 1)'\n\nconst fadeIn: Keyframe[] = [\n { opacity: 0, transform: 'translateY(6px)', filter: 'blur(3px)' },\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n]\nconst fadeOut: Keyframe[] = [\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'translateY(-6px)', filter: 'blur(3px)' },\n]\n\nexport const presets: Record<string, { out: Keyframe[]; in: Keyframe[] }> = {\n fadeIn: { out: [], in: fadeIn },\n fadeOut: { out: fadeOut, in: [] },\n fadeSwap: { out: fadeOut, in: fadeIn },\n fadeMask: { out: fadeOut, in: fadeIn },\n morphText: { out: fadeOut, in: fadeIn },\n slideUp: {\n out: [\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'translateY(-16px)', filter: 'blur(2.5px)' },\n ],\n in: [\n { opacity: 0, transform: 'translateY(16px)', filter: 'blur(2.5px)' },\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n ],\n },\n slideDown: {\n out: [\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'translateY(16px)', filter: 'blur(2.5px)' },\n ],\n in: [\n { opacity: 0, transform: 'translateY(-16px)', filter: 'blur(2.5px)' },\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n ],\n },\n slideLeft: {\n out: [\n { opacity: 1, transform: 'translateX(0)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'translateX(-18px)', filter: 'blur(2.5px)' },\n ],\n in: [\n { opacity: 0, transform: 'translateX(18px)', filter: 'blur(2.5px)' },\n { opacity: 1, transform: 'translateX(0)', filter: 'blur(0px)' },\n ],\n },\n slideRight: {\n out: [\n { opacity: 1, transform: 'translateX(0)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'translateX(18px)', filter: 'blur(2.5px)' },\n ],\n in: [\n { opacity: 0, transform: 'translateX(-18px)', filter: 'blur(2.5px)' },\n { opacity: 1, transform: 'translateX(0)', filter: 'blur(0px)' },\n ],\n },\n slideReplace: {\n out: [\n { opacity: 1, transform: 'translateX(0)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'translateX(-14px)', filter: 'blur(2px)' },\n ],\n in: [\n { opacity: 0, transform: 'translateX(14px)', filter: 'blur(2px)' },\n { opacity: 1, transform: 'translateX(0)', filter: 'blur(0px)' },\n ],\n },\n popIn: {\n out: [\n { opacity: 1, transform: 'scale(1)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'scale(0.93)', filter: 'blur(2px)' },\n ],\n in: [\n { opacity: 0, transform: 'scale(0.9)', filter: 'blur(2px)' },\n { opacity: 1, transform: 'scale(1.06)', filter: 'blur(0px)', offset: 0.6 },\n { opacity: 1, transform: 'scale(1)', filter: 'blur(0px)' },\n ],\n },\n popOut: {\n out: [\n { opacity: 1, transform: 'scale(1)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'scale(0.93)', filter: 'blur(2px)' },\n ],\n in: [],\n },\n expandIn: {\n out: [\n { opacity: 1, transform: 'scaleY(1)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'scaleY(0.9)', filter: 'blur(2px)' },\n ],\n in: [\n { opacity: 0, transform: 'scaleY(0.9)', filter: 'blur(2px)' },\n { opacity: 1, transform: 'scaleY(1)', filter: 'blur(0px)' },\n ],\n },\n collapseOut: {\n out: [\n { opacity: 1, transform: 'scaleY(1)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'scaleY(0)', filter: 'blur(2px)' },\n ],\n in: [],\n },\n zoomIn: {\n out: [\n { opacity: 1, transform: 'scale(1)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'scale(0.94)', filter: 'blur(2px)' },\n ],\n in: [\n { opacity: 0, transform: 'scale(0.94)', filter: 'blur(2px)' },\n { opacity: 1, transform: 'scale(1.03)', filter: 'blur(0px)', offset: 0.6 },\n { opacity: 1, transform: 'scale(1)', filter: 'blur(0px)' },\n ],\n },\n zoomOut: {\n out: [\n { opacity: 1, transform: 'scale(1)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'scale(0.94)', filter: 'blur(2px)' },\n ],\n in: [],\n },\n wordFadeIn: {\n out: [{ opacity: 1 }, { opacity: 0 }],\n in: [{ opacity: 0 }, { opacity: 1 }],\n },\n wordSlideUp: {\n out: fadeOut,\n in: [\n { opacity: 0, transform: 'translateY(12px)', filter: 'blur(2px)' },\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n ],\n },\n wordPop: {\n out: [\n { opacity: 1, transform: 'scale(1)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'scale(0.94)', filter: 'blur(2px)' },\n ],\n in: [\n { opacity: 0, transform: 'scale(0.9)', filter: 'blur(2px)' },\n { opacity: 1, transform: 'scale(1.06)', filter: 'blur(0px)', offset: 0.6 },\n { opacity: 1, transform: 'scale(1)', filter: 'blur(0px)' },\n ],\n },\n lineFadeIn: {\n out: [{ opacity: 1 }, { opacity: 0 }],\n in: [{ opacity: 0 }, { opacity: 1 }],\n },\n lineSlideUp: {\n out: fadeOut,\n in: [\n { opacity: 0, transform: 'translateY(14px)', filter: 'blur(2px)' },\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n ],\n },\n streamIn: {\n out: [{ opacity: 1 }, { opacity: 0 }],\n in: [{ opacity: 0 }, { opacity: 1 }],\n },\n streamFade: {\n out: [{ opacity: 1 }, { opacity: 0 }],\n in: [{ opacity: 0 }, { opacity: 1 }],\n },\n streamSlide: {\n out: fadeOut,\n in: [\n { opacity: 0, transform: 'translateY(10px)', filter: 'blur(2px)' },\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n ],\n },\n cursorBlink: {\n out: [{ opacity: 1 }, { opacity: 0 }],\n in: [{ opacity: 0 }, { opacity: 1 }],\n },\n expandCollapse: {\n out: fadeOut,\n in: fadeIn,\n },\n heightAuto: {\n out: fadeOut,\n in: fadeIn,\n },\n crossFade: {\n out: [{ opacity: 1 }, { opacity: 0 }],\n in: [{ opacity: 0 }, { opacity: 1 }],\n },\n pulse: {\n out: [\n { opacity: 1, transform: 'scale(1)' },\n { opacity: 1, transform: 'scale(0.98)' },\n ],\n in: [\n { opacity: 1, transform: 'scale(1)' },\n { opacity: 1, transform: 'scale(1.03)', offset: 0.5 },\n { opacity: 1, transform: 'scale(1)' },\n ],\n },\n shake: {\n out: fadeOut,\n in: [\n { opacity: 1, transform: 'translateX(0)' },\n { opacity: 1, transform: 'translateX(-7px)', offset: 0.18 },\n { opacity: 1, transform: 'translateX(7px)', offset: 0.36 },\n { opacity: 1, transform: 'translateX(-5px)', offset: 0.56 },\n { opacity: 1, transform: 'translateX(3px)', offset: 0.72 },\n { opacity: 1, transform: 'translateX(0)' },\n ],\n },\n highlight: {\n out: [{ opacity: 1 }, { opacity: 1 }],\n in: [],\n },\n flash: {\n out: [\n { filter: 'brightness(1)', opacity: 1 },\n { filter: 'brightness(1.8)', opacity: 1, offset: 0.5 },\n { filter: 'brightness(1)', opacity: 1 },\n ],\n in: [\n { filter: 'brightness(1)', opacity: 1 },\n { filter: 'brightness(1.8)', opacity: 1, offset: 0.5 },\n { filter: 'brightness(1)', opacity: 1 },\n ],\n },\n pushLeft: {\n out: [\n { opacity: 1, transform: 'translateX(0)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'translateX(-22px)', filter: 'blur(2px)' },\n ],\n in: [\n { opacity: 0, transform: 'translateX(22px)', filter: 'blur(2px)' },\n { opacity: 1, transform: 'translateX(0)', filter: 'blur(0px)' },\n ],\n },\n pushRight: {\n out: [\n { opacity: 1, transform: 'translateX(0)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'translateX(22px)', filter: 'blur(2px)' },\n ],\n in: [\n { opacity: 0, transform: 'translateX(-22px)', filter: 'blur(2px)' },\n { opacity: 1, transform: 'translateX(0)', filter: 'blur(0px)' },\n ],\n },\n flipPage: {\n out: [\n { opacity: 1, transform: 'perspective(800px) rotateY(0deg)' },\n { opacity: 0, transform: 'perspective(800px) rotateY(-32deg)' },\n ],\n in: [\n { opacity: 0, transform: 'perspective(800px) rotateY(32deg)' },\n { opacity: 1, transform: 'perspective(800px) rotateY(0deg)' },\n ],\n },\n morphBlur: {\n out: [\n { opacity: 1, filter: 'blur(0px)', transform: 'translateY(0)' },\n { opacity: 0.2, filter: 'blur(4px)', transform: 'translateY(-4px)' },\n ],\n in: [\n { opacity: 0.2, filter: 'blur(4px)', transform: 'translateY(4px)' },\n { opacity: 1, filter: 'blur(0px)', transform: 'translateY(0)' },\n ],\n },\n diffAnimate: {\n out: [],\n in: [],\n },\n scrollWordReveal: {\n out: [],\n in: [],\n },\n errorMessageIn: {\n out: [],\n in: [\n { transform: 'translateX(-6px)', opacity: 0, filter: 'blur(2px)' },\n { transform: 'translateX(5px)', opacity: 1, filter: 'blur(0px)', offset: 0.22 },\n { transform: 'translateX(-3px)', opacity: 1, filter: 'blur(0px)', offset: 0.48 },\n { transform: 'translateX(2px)', opacity: 1, filter: 'blur(0px)', offset: 0.72 },\n { transform: 'translateX(0)', opacity: 1, filter: 'blur(0px)' },\n ],\n },\n paragraphFadeOut: {\n out: [\n { opacity: 1, transform: 'translateY(0)' },\n { opacity: 0, transform: 'translateY(0)' },\n ],\n in: [\n { opacity: 0, transform: 'translateY(0)' },\n { opacity: 1, transform: 'translateY(0)' },\n ],\n },\n slideOutUp: {\n out: [\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'translateY(-18px)', filter: 'blur(2.5px)' },\n ],\n in: [\n { opacity: 0, transform: 'translateY(-18px)', filter: 'blur(2.5px)' },\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n ],\n },\n slideOutDown: {\n out: [\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'translateY(18px)', filter: 'blur(2.5px)' },\n ],\n in: [\n { opacity: 0, transform: 'translateY(18px)', filter: 'blur(2.5px)' },\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n ],\n },\n slideOutLeft: {\n out: [\n { opacity: 1, transform: 'translateX(0)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'translateX(-22px)', filter: 'blur(2.5px)' },\n ],\n in: [\n { opacity: 0, transform: 'translateX(-22px)', filter: 'blur(2.5px)' },\n { opacity: 1, transform: 'translateX(0)', filter: 'blur(0px)' },\n ],\n },\n slideOutRight: {\n out: [\n { opacity: 1, transform: 'translateX(0)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'translateX(22px)', filter: 'blur(2.5px)' },\n ],\n in: [\n { opacity: 0, transform: 'translateX(22px)', filter: 'blur(2.5px)' },\n { opacity: 1, transform: 'translateX(0)', filter: 'blur(0px)' },\n ],\n },\n collapseHeight: {\n out: [\n { maxHeight: '1000px', opacity: 1, overflow: 'hidden' },\n { maxHeight: '0px', opacity: 0, overflow: 'hidden' },\n ],\n in: [\n { maxHeight: '0px', opacity: 0, overflow: 'hidden' },\n { maxHeight: '1000px', opacity: 1, overflow: 'hidden' },\n ],\n },\n wordFadeOut: {\n out: [{ opacity: 1 }, { opacity: 0 }],\n in: [{ opacity: 0 }, { opacity: 1 }],\n },\n wordSlideOut: {\n out: [\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'translateY(-12px)', filter: 'blur(2px)' },\n ],\n in: [\n { opacity: 0, transform: 'translateY(-12px)', filter: 'blur(2px)' },\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n ],\n },\n lineFadeOut: {\n out: [{ opacity: 1 }, { opacity: 0 }],\n in: [{ opacity: 0 }, { opacity: 1 }],\n },\n lineSlideOut: {\n out: [\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'translateY(-14px)', filter: 'blur(2px)' },\n ],\n in: [\n { opacity: 0, transform: 'translateY(-14px)', filter: 'blur(2px)' },\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n ],\n },\n fadeMaskOut: {\n out: [{ opacity: 1 }, { opacity: 0 }],\n in: [{ opacity: 0 }, { opacity: 1 }],\n },\n}\n","import {\n forwardRef,\n useRef,\n useState,\n useCallback,\n useImperativeHandle,\n useEffect,\n useLayoutEffect,\n useMemo,\n createElement,\n} from 'react'\nimport type { MouseEvent } from 'react'\nimport type { AnimateParagraphHandle, AnimateParagraphProps, AnimationProperties, AnimationTrigger, ParagraphPresetOptions } from './types'\nimport { useValueChange } from './useValueChange'\nimport { EASE_IN, EASE_OUT, EASE_IN_OUT, SPRING, SMOOTH, presets } from './presets'\n\nexport { EASE_IN, EASE_OUT, EASE_IN_OUT, SPRING, SMOOTH, presets } from './presets'\n\nfunction validDuration(value: unknown, fallback = 300): number {\n\n const n = Number(value)\n return Number.isFinite(n) && n > 0 ? n : fallback\n}\n\n// ============================================================\n// UTILITIES\n// ============================================================\n// ============================================================\n// UTILITIES\n// ============================================================\n// UTILITIES\n// ============================================================\nconst warned = new Set<string>()\n\n// Reusable probe for text measurements\nlet _probe: HTMLDivElement | null = null\nfunction getProbe(): HTMLDivElement {\n if (!_probe) {\n _probe = document.createElement('div')\n _probe.style.position = 'absolute'\n _probe.style.visibility = 'hidden'\n _probe.style.pointerEvents = 'none'\n _probe.style.whiteSpace = 'pre-wrap'\n _probe.style.width = 'max-content'\n }\n return _probe\n}\n\nfunction measureTextBlock(el: HTMLElement, text?: string): { width: number; height: number } {\n const probe = getProbe()\n probe.textContent = text || '\\u00A0'\n const computed = getComputedStyle(el)\n probe.style.whiteSpace = computed.whiteSpace || 'pre-wrap'\n const containerWidth = el.clientWidth || el.getBoundingClientRect().width\n if (containerWidth > 0) {\n probe.style.width = `${containerWidth}px`\n probe.style.maxWidth = `${containerWidth}px`\n } else {\n probe.style.width = 'max-content'\n probe.style.maxWidth = 'none'\n }\n el.appendChild(probe)\n const rect = probe.getBoundingClientRect()\n probe.remove()\n return { width: rect.width, height: rect.height }\n}\n\nfunction prefersReducedMotion(): boolean {\n if (typeof window === 'undefined') return false\n return window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false\n}\n\nfunction cancelElementAnimations(el: HTMLElement) {\n el.getAnimations({ subtree: true }).forEach((animation) => animation.cancel())\n}\n\nfunction getScrollRoot(el: HTMLElement): HTMLElement | null {\n let parent = el.parentElement\n while (parent && parent !== document.body && parent !== document.documentElement) {\n const style = getComputedStyle(parent)\n if (/(auto|scroll|overlay)/.test(`${style.overflowY}${style.overflow}`) && parent.scrollHeight > parent.clientHeight) {\n return parent\n }\n parent = parent.parentElement\n }\n return null\n}\n\nfunction scrollObserverOptions(el: HTMLElement, threshold: number): IntersectionObserverInit {\n const root = getScrollRoot(el)\n const rootHeight = root?.clientHeight ?? window.innerHeight\n const clamped = Math.min(0.95, Math.max(0.05, threshold))\n const inset = Math.round(rootHeight * Math.min(0.48, clamped / 2))\n return {\n root,\n rootMargin: `-${inset}px 0px -${inset}px 0px`,\n threshold: 0,\n }\n}\n\nfunction runPropertyAnimation(\n el: HTMLElement,\n properties: AnimationProperties | undefined,\n options: KeyframeAnimationOptions,\n): Animation | null {\n if (!properties || Object.keys(properties).length === 0) return null\n const from: Keyframe = {}\n const to: Keyframe = {}\n for (const [property, pair] of Object.entries(properties)) {\n from[property as keyof Keyframe] = pair[0] as any\n to[property as keyof Keyframe] = pair[1] as any\n }\n // Apply initial from-styles inline to prevent flash on cancel/restart\n for (const [property, value] of Object.entries(from)) {\n ;(el.style as any)[property] = value\n }\n const anim = el.animate([from, to], { ...options, fill: 'forwards' })\n anim.addEventListener('finish', () => {\n for (const [property, pair] of Object.entries(properties)) {\n ;(el.style as any)[property] = String(pair[1])\n }\n })\n anim.addEventListener('cancel', () => {\n for (const [property, value] of Object.entries(from)) {\n ;(el.style as any)[property] = value\n }\n })\n return anim\n}\n\nfunction resolveInlineJustify(textAlign: string): string {\n if (textAlign === 'center') return 'center'\n if (textAlign === 'right' || textAlign === 'end') return 'flex-end'\n return 'flex-start'\n}\n\n// Safe word splitting – returns array of TextNodes and <span> elements (inline, preserves flow)\nfunction splitWordsAsElements(text: string): (Text | HTMLSpanElement)[] {\n const parts = text.match(/\\S+|\\s+/g) || []\n const elements: (Text | HTMLSpanElement)[] = []\n for (const part of parts) {\n if (/^\\s+$/.test(part)) {\n elements.push(document.createTextNode(part))\n } else {\n const span = document.createElement('span')\n span.textContent = part\n elements.push(span)\n }\n }\n return elements\n}\n\n// Detect natural visual line breaks using a probe element\nfunction getVisualLines(text: string, refEl: HTMLElement): string[] {\n if (text.length <= 1) return [text]\n const computed = getComputedStyle(refEl)\n const probe = document.createElement('div')\n probe.style.position = 'absolute'\n probe.style.visibility = 'hidden'\n probe.style.pointerEvents = 'none'\n probe.style.left = '0'\n probe.style.top = '0'\n probe.style.width = `${refEl.clientWidth || refEl.getBoundingClientRect().width}px`\n probe.style.whiteSpace = 'pre-wrap'\n probe.style.wordBreak = 'break-word'\n probe.style.overflowWrap = 'break-word'\n probe.style.font = computed.font\n probe.style.lineHeight = computed.lineHeight\n probe.style.letterSpacing = computed.letterSpacing\n probe.style.wordSpacing = computed.wordSpacing\n probe.style.padding = '0'\n probe.style.margin = '0'\n probe.textContent = text\n\n refEl.appendChild(probe)\n const textNode = probe.firstChild\n if (!textNode) { probe.remove(); return [text] }\n\n const lines: string[] = []\n const range = document.createRange()\n let start = 0\n\n while (start < text.length) {\n range.setStart(textNode, start)\n range.setEnd(textNode, text.length)\n const rects = range.getClientRects()\n if (rects.length <= 1) {\n lines.push(text.slice(start))\n break\n }\n let lo = start\n let hi = text.length\n while (lo < hi - 1) {\n const mid = Math.ceil((lo + hi) / 2)\n range.setStart(textNode, start)\n range.setEnd(textNode, mid)\n if (range.getClientRects().length > 1) {\n hi = mid\n } else {\n lo = mid\n }\n }\n lines.push(text.slice(start, lo))\n start = lo\n }\n\n probe.remove()\n return lines\n}\n\n// Line splitting – uses visual wrapping when a reference element is available\nfunction splitLinesAsElements(text: string, refEl?: HTMLElement): HTMLDivElement[] {\n if (refEl && text.length > 15) {\n const visualLines = getVisualLines(text, refEl)\n if (visualLines.length > 1) {\n return visualLines.map((line) => {\n const div = document.createElement('div')\n div.textContent = line || '\\u00A0'\n return div\n })\n }\n }\n const lines = text.split('\\n')\n return lines.map((line) => {\n const div = document.createElement('div')\n div.textContent = line || '\\u00A0'\n return div\n })\n}\n\n// ============================================================\n// CUSTOM ANIMATIONS\n// ============================================================\n\n// Morph – character-by-character swap with individual char transitions\nfunction animateMorph(\n el: HTMLElement,\n prevValue: string | undefined,\n nextValue: string | undefined,\n baseDuration: number,\n onEnd?: () => void,\n) {\n const oldText = prevValue ?? ''\n const newText = nextValue ?? el.textContent ?? ''\n if (!newText) return\n\n if (prefersReducedMotion()) {\n const { oldEl, newEl, cleanup } = prepareStableParagraphSwap(el, oldText, newText)\n oldEl.animate(\n [{ opacity: 1 }, { opacity: 0 }],\n { duration: baseDuration / 2, easing: EASE_OUT, fill: 'forwards' },\n )\n const anim = newEl.animate(\n [{ opacity: 0 }, { opacity: 1 }],\n { duration: baseDuration / 2, easing: SMOOTH, fill: 'forwards' },\n )\n anim.onfinish = () => { cleanup(); onEnd?.() }\n anim.oncancel = cleanup\n return anim\n }\n\n // Line-level morph — split old and new text into visual lines, stack\n // them in containers, and crossfade only changed lines. Unchanged lines\n // stay still, preserving paragraph layout.\n const oldLines = getVisualLines(oldText || '', el)\n const newLines = getVisualLines(newText || '', el)\n const maxLines = Math.max(oldLines.length, newLines.length)\n\n el.style.willChange = 'transform, opacity'\n const prevDisplay = el.style.display\n const rect = el.getBoundingClientRect()\n el.style.display = 'inline-block'\n el.style.width = `${Math.ceil(rect.width)}px`\n if (rect.height > 0) el.style.minHeight = `${Math.ceil(rect.height)}px`\n\n el.textContent = ''\n\n // Line containers — each holds old + new stacked via inline-grid\n const lines: { oldEl: HTMLSpanElement | null; newEl: HTMLSpanElement | null; same: boolean }[] = []\n for (let i = 0; i < maxLines; i++) {\n const oldLine = oldLines[i] ?? ''\n const newLine = newLines[i] ?? ''\n const same = oldLine === newLine\n\n const container = document.createElement('span')\n container.style.display = 'block'\n container.style.lineHeight = 'inherit'\n el.appendChild(container)\n\n if (same && newLine) {\n container.textContent = newLine\n lines.push({ oldEl: null, newEl: null, same: true })\n continue\n }\n\n // Both sides present — create grid slot for crossfade\n if (oldLine && newLine) {\n container.style.display = 'inline-grid'\n container.style.position = 'relative'\n container.style.width = '100%'\n\n const oldSpan = document.createElement('span')\n oldSpan.textContent = oldLine\n oldSpan.style.gridArea = '1 / 1'\n oldSpan.style.willChange = 'transform, opacity, filter'\n oldSpan.style.opacity = '1'\n container.appendChild(oldSpan)\n\n const newSpan = document.createElement('span')\n newSpan.textContent = newLine\n newSpan.style.gridArea = '1 / 1'\n newSpan.style.willChange = 'transform, opacity, filter'\n newSpan.style.opacity = '0'\n container.appendChild(newSpan)\n\n lines.push({ oldEl: oldSpan, newEl: newSpan, same: false })\n } else if (oldLine) {\n container.textContent = oldLine\n lines.push({ oldEl: null, newEl: null, same: true })\n } else if (newLine) {\n container.style.opacity = '0'\n container.textContent = newLine\n lines.push({ oldEl: null, newEl: container, same: false })\n } else {\n lines.push({ oldEl: null, newEl: null, same: true })\n }\n }\n\n let unfinished = 0\n const halfDur = Math.max(120, Math.min(280, baseDuration * 0.43))\n const stagger = Math.min(20, Math.max(8, halfDur * 0.12))\n let cleaned = false\n\n const cleanup = () => {\n if (cleaned) return\n cleaned = true\n el.textContent = newText\n el.style.willChange = 'auto'\n el.style.minHeight = ''\n el.style.width = ''\n el.style.display = prevDisplay\n }\n\n const track = () => {\n unfinished--\n if (unfinished <= 0) {\n cleanup()\n onEnd?.()\n }\n }\n\n lines.forEach((line, i) => {\n if (line.same) return\n if (line.oldEl) {\n unfinished++\n const anim = line.oldEl.animate(\n [\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n { opacity: 0, transform: 'translateY(-6px)', filter: 'blur(1.5px)' },\n ],\n { duration: halfDur, delay: i * stagger, easing: EASE_OUT, fill: 'forwards' },\n )\n anim.onfinish = track\n anim.oncancel = () => { line.oldEl!.style.willChange = 'auto' }\n }\n if (line.newEl) {\n unfinished++\n const anim = line.newEl.animate(\n [\n { opacity: 0, transform: 'translateY(8px)', filter: 'blur(2px)' },\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n ],\n { duration: halfDur, delay: i * stagger + halfDur * 0.3, easing: SPRING, fill: 'forwards' },\n )\n anim.onfinish = track\n anim.oncancel = () => { line.newEl!.style.willChange = 'auto' }\n }\n })\n\n if (unfinished <= 0) {\n cleanup()\n onEnd?.()\n return\n }\n\n const marker = el.animate([{ opacity: 1 }, { opacity: 1 }],\n { duration: halfDur + maxLines * stagger + halfDur + 120, fill: 'forwards' })\n marker.oncancel = cleanup\n return marker\n}\n\n// FadeSwap\nfunction animateFadeSwap(\n el: HTMLElement,\n prevValue: string | undefined,\n nextValue: string | undefined,\n duration: number,\n onEnd?: () => void,\n) {\n const oldText = prevValue ?? ''\n const newText = nextValue ?? el.textContent ?? ''\n if (!oldText && !newText) return\n\n const { oldEl, newEl, cleanup } = prepareStableParagraphSwap(el, oldText, newText)\n oldEl.style.opacity = '1'\n oldEl.style.transform = 'translateY(0)'\n oldEl.style.filter = 'blur(0px)'\n oldEl.style.willChange = 'transform, opacity, filter'\n newEl.style.opacity = '0'\n newEl.style.transform = 'translateY(0.16em)'\n newEl.style.filter = 'blur(1.8px)'\n newEl.style.willChange = 'transform, opacity, filter'\n\n oldEl.animate(\n [\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n { opacity: 0.72, transform: 'translateY(-0.04em)', filter: 'blur(0.35px)', offset: 0.58 },\n { opacity: 0, transform: 'translateY(-0.14em)', filter: 'blur(1.5px)' },\n ],\n { duration: Math.max(150, duration * 0.42), easing: SMOOTH, fill: 'forwards' },\n )\n const anim = newEl.animate(\n [\n { opacity: 0, transform: 'translateY(0.16em)', filter: 'blur(1.8px)' },\n { opacity: 0.78, transform: 'translateY(0.025em)', filter: 'blur(0.35px)', offset: 0.55 },\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n ],\n {\n duration: Math.max(220, duration * 0.62),\n delay: Math.min(80, Math.max(30, duration * 0.12)),\n easing: SMOOTH,\n fill: 'forwards',\n },\n )\n anim.onfinish = () => { cleanup(); onEnd?.() }\n anim.oncancel = cleanup\n return anim\n}\n\n// SlideReplace / pushLeft / pushRight\nfunction animateSlideReplace(\n el: HTMLElement,\n prevValue: string | undefined,\n nextValue: string | undefined,\n direction: 1 | -1,\n duration: number,\n onEnd?: () => void,\n) {\n const oldText = prevValue ?? ''\n const newText = nextValue ?? el.textContent ?? ''\n if (!oldText && !newText) return\n\n const width = el.getBoundingClientRect().width\n const { oldEl, newEl, cleanup } = prepareStableParagraphSwap(el, oldText, newText)\n newEl.style.transform = `translateX(${width * direction}px)`\n\n oldEl.animate(\n [{ transform: 'translateX(0)' }, { transform: `translateX(${-width * direction}px)` }],\n { duration: duration * 0.4, easing: EASE_OUT, fill: 'forwards' },\n )\n const anim = newEl.animate(\n [{ transform: `translateX(${width * direction}px)` }, { transform: 'translateX(0)' }],\n { duration: duration * 0.6, easing: EASE_IN, fill: 'forwards' },\n )\n anim.onfinish = () => { cleanup(); onEnd?.() }\n anim.oncancel = cleanup\n return anim\n}\n\n// CrossFade\nfunction animateCrossFade(\n el: HTMLElement,\n prevValue: string | undefined,\n nextValue: string | undefined,\n duration: number,\n onEnd?: () => void,\n) {\n const oldText = prevValue ?? ''\n const newText = nextValue ?? el.textContent ?? ''\n if (!oldText && !newText) return\n\n const { oldEl, newEl, cleanup } = prepareStableParagraphSwap(el, oldText, newText)\n oldEl.style.opacity = '1'\n newEl.style.opacity = '0'\n\n oldEl.animate([{ opacity: 1 }, { opacity: 0 }], { duration, easing: SMOOTH, fill: 'forwards' })\n const anim = newEl.animate([{ opacity: 0 }, { opacity: 1 }], { duration, easing: SMOOTH, fill: 'forwards' })\n anim.onfinish = () => { cleanup(); onEnd?.() }\n anim.oncancel = cleanup\n return anim\n}\n\n// FadeMask (gradient reveal) – inherits currentColor\nfunction animateFadeMask(el: HTMLElement, duration: number, onEnd?: () => void) {\n const color = getComputedStyle(el).color\n const overlay = document.createElement('div')\n overlay.style.position = 'absolute'\n overlay.style.inset = '0'\n overlay.style.background = `linear-gradient(to bottom, ${color} 0%, transparent 100%)`\n overlay.style.pointerEvents = 'none'\n\n const prevPosition = el.style.position\n const prevOverflow = el.style.overflow\n el.style.position = 'relative'\n el.style.overflow = 'hidden'\n el.appendChild(overlay)\n\n const anim = overlay.animate(\n [{ transform: 'translateY(0%)' }, { transform: 'translateY(-100%)' }],\n { duration, easing: EASE_IN_OUT, fill: 'forwards' },\n )\n const fadeCleanup = () => {\n overlay.remove()\n el.style.position = prevPosition\n el.style.overflow = prevOverflow\n }\n anim.onfinish = () => {\n fadeCleanup()\n onEnd?.()\n }\n anim.oncancel = fadeCleanup\n return anim\n}\n\n// Strip transform/scale from keyframes for inline word animation\nfunction stripTransforms(kfs: Keyframe[]): Keyframe[] {\n return kfs.map(k => {\n const { transform, ...rest } = k\n return rest\n })\n}\n\n// Word-level animations – uses visual line detection for paragraph-length text\nfunction animateWords(\n el: HTMLElement,\n text: string,\n keyframes: Keyframe[],\n duration: number,\n stagger: number,\n easing: string,\n onEnd?: () => void,\n): Animation | undefined {\n // For paragraph-length text, delegate to line-level animation for natural flow\n if (text.length > 30) {\n const lineDivs = splitLinesAsElements(text, el)\n if (lineDivs.length > 1) {\n el.textContent = ''\n for (const div of lineDivs) {\n div.style.willChange = 'transform, opacity'\n el.appendChild(div)\n }\n let remaining = lineDivs.length\n const maxDelay = (lineDivs.length - 1) * (stagger * 2)\n const totalDuration = duration + maxDelay\n lineDivs.forEach((div, i) => {\n const anim = div.animate(keyframes, { duration, delay: i * (stagger * 2), fill: 'forwards', easing })\n anim.onfinish = () => {\n remaining--\n if (remaining === 0) {\n lineDivs.forEach(d => d.style.willChange = 'auto')\n onEnd?.()\n }\n }\n anim.oncancel = () => { div.style.willChange = 'auto' }\n })\n return el.animate([{ opacity: 1 }, { opacity: 1 }], { duration: totalDuration, fill: 'forwards' })\n }\n }\n\n // For short text, do opacity-only word stagger (inline spans preserve flow)\n const wordKfs = stripTransforms(keyframes)\n const fragments = splitWordsAsElements(text)\n el.textContent = ''\n const wordSpans: HTMLSpanElement[] = []\n for (const node of fragments) {\n el.appendChild(node)\n if (node instanceof HTMLSpanElement) {\n wordSpans.push(node)\n node.style.willChange = 'opacity'\n }\n }\n if (wordSpans.length === 0) { onEnd?.(); return }\n\n let remaining = wordSpans.length\n const maxDelay = (wordSpans.length - 1) * stagger\n const totalDuration = duration + maxDelay\n wordSpans.forEach((span, i) => {\n const anim = span.animate(wordKfs, {\n duration,\n delay: i * stagger,\n fill: 'forwards',\n easing,\n })\n anim.onfinish = () => {\n remaining--\n if (remaining === 0) {\n wordSpans.forEach(s => s.style.willChange = 'auto')\n onEnd?.()\n }\n }\n anim.oncancel = () => { span.style.willChange = 'auto' }\n })\n return el.animate([{ opacity: 1 }, { opacity: 1 }], { duration: totalDuration, fill: 'forwards' })\n}\n\n// Line-level animations – uses visual line detection for natural paragraph flow\nfunction animateLines(\n el: HTMLElement,\n text: string,\n keyframes: Keyframe[],\n duration: number,\n stagger: number,\n easing: string,\n onEnd?: () => void,\n): Animation | undefined {\n const lineDivs = splitLinesAsElements(text, el)\n el.textContent = ''\n for (const div of lineDivs) {\n div.style.willChange = 'transform, opacity'\n el.appendChild(div)\n }\n if (lineDivs.length === 0) { onEnd?.(); return }\n\n let remaining = lineDivs.length\n const maxDelay = (lineDivs.length - 1) * stagger\n const totalDuration = duration + maxDelay\n lineDivs.forEach((div, i) => {\n const anim = div.animate(keyframes, { duration, delay: i * stagger, fill: 'forwards', easing })\n anim.onfinish = () => {\n remaining--\n if (remaining === 0) {\n lineDivs.forEach(d => d.style.willChange = 'auto')\n onEnd?.()\n }\n }\n anim.oncancel = () => { div.style.willChange = 'auto' }\n })\n return el.animate([{ opacity: 1 }, { opacity: 1 }], { duration: totalDuration, fill: 'forwards' })\n}\n\n// Stream – appends or replaces text with word-by-word reveal\nfunction animateStream(\n el: HTMLElement,\n prevValue: string | undefined,\n nextValue: string | undefined,\n keyframes: Keyframe[],\n duration: number,\n stagger: number,\n easing: string,\n onEnd?: () => void,\n): Animation | undefined {\n const oldText = prevValue ?? ''\n const newText = nextValue ?? el.textContent ?? ''\n if (!newText) return\n\n const appended = newText.startsWith(oldText) && newText.length > oldText.length\n const streamText = appended ? newText.slice(oldText.length) : newText\n if (!streamText) return\n\n const wordKfs = stripTransforms(keyframes)\n const parts = streamText.match(/\\S+|\\s+/g) || []\n if (parts.length === 0) { onEnd?.(); return }\n\n if (appended) {\n el.textContent = oldText\n parts.forEach((part, i) => {\n if (/^\\s+$/.test(part)) {\n el.appendChild(document.createTextNode(part))\n } else {\n const span = document.createElement('span')\n span.textContent = part\n span.style.willChange = 'opacity'\n span.animate(wordKfs, { duration, delay: i * stagger, fill: 'forwards', easing })\n el.appendChild(span)\n }\n })\n const total = duration + parts.length * stagger + 50\n const marker = el.animate([{ opacity: 1 }, { opacity: 1 }], { duration: total, fill: 'forwards' })\n marker.onfinish = () => onEnd?.()\n return marker\n } else {\n return animateWords(el, newText, keyframes, duration, stagger, easing, onEnd)\n }\n}\n\n// Highlight – line-by-line background sweep (highlighter effect)\nfunction animateHighlight(\n el: HTMLElement,\n text: string,\n duration: number,\n highlightColor: string | undefined,\n onEnd?: () => void,\n mode: \"persist\" | \"pulse\" | \"erase\" = \"persist\",\n hold = 800,\n): Animation | undefined {\n const target = findTextChild(el) ?? el\n const content = text || target.textContent || ''\n if (!content) { onEnd?.(); return }\n\n const previous = {\n minHeight: target.style.minHeight,\n overflow: target.style.overflow,\n }\n const rect = target.getBoundingClientRect()\n if (rect.height > 0) target.style.minHeight = previous.minHeight || `${Math.ceil(rect.height)}px`\n target.style.overflow = 'visible'\n\n const hlColor = highlightColor ?? colorWithAlpha(getComputedStyle(target).color, 0.55)\n\n // Single inline span — boxDecorationBreak handles native multi-line wrapping\n target.textContent = ''\n const span = document.createElement('span')\n span.textContent = content\n span.style.display = 'inline'\n span.style.willChange = 'background-size, background-position'\n span.style.background = `linear-gradient(120deg, ${hlColor} 50%, transparent 50%)`\n span.style.backgroundSize = '200% 100%'\n span.style.backgroundRepeat = 'no-repeat'\n span.style.backgroundPosition = '100% 0'\n span.style.borderRadius = '0.18em'\n span.style.paddingInline = '0.08em'\n span.style.marginInline = '-0.08em'\n span.style.boxDecorationBreak = 'clone'\n ;(span.style as any).webkitBoxDecorationBreak = 'clone'\n target.appendChild(span)\n\n const drawDuration = Math.max(260, validDuration(duration, 600))\n let cleaned = false\n let cancelled = false\n\n const finish = () => {\n if (cleaned) return\n cleaned = true\n span.style.willChange = 'auto'\n target.style.minHeight = previous.minHeight\n target.style.overflow = previous.overflow\n }\n\n const abort = () => {\n if (cleaned) return\n cleaned = true\n span.style.willChange = 'auto'\n span.style.background = ''\n span.style.backgroundSize = ''\n span.style.backgroundRepeat = ''\n span.style.backgroundPosition = ''\n if (span.parentElement === target) {\n target.textContent = content\n }\n target.style.minHeight = previous.minHeight\n target.style.overflow = previous.overflow\n }\n\n const anim = span.animate(\n [\n { backgroundPosition: '100% 0' },\n { backgroundPosition: '0% 0' },\n ],\n { duration: drawDuration, fill: 'forwards', easing: 'cubic-bezier(0.22, 1, 0.36, 1)' },\n )\n anim.onfinish = () => {\n if (cancelled) return\n onEnd?.()\n\n if (mode === \"pulse\") {\n const fadeAnim = span.animate(\n [{ backgroundPosition: \"0% 0\" }, { backgroundPosition: \"120% 0\" }],\n { duration: Math.min(500, hold * 0.5), easing: EASE_IN, fill: \"forwards\", delay: hold },\n )\n fadeAnim.onfinish = () => { abort() }\n fadeAnim.oncancel = () => { abort() }\n } else if (mode === \"erase\") {\n const eraseAnim = span.animate(\n [{ backgroundPosition: \"0% 0\" }, { backgroundPosition: \"120% 0\" }],\n { duration: drawDuration * 0.6, easing: EASE_IN, fill: \"forwards\", delay: 200 },\n )\n eraseAnim.onfinish = () => { abort() }\n eraseAnim.oncancel = () => { abort() }\n } else {\n finish()\n }\n }\n anim.oncancel = () => {\n cancelled = true\n abort()\n }\n\n const marker = target.animate([{ opacity: 1 }, { opacity: 1 }], { duration: drawDuration + 100, fill: 'forwards' })\n marker.oncancel = abort\n return marker\n}\nfunction animateDiff(\n el: HTMLElement,\n prevValue: string | undefined,\n nextValue: string | undefined,\n duration: number,\n onEnd?: () => void,\n): Animation | undefined {\n const oldText = prevValue ?? ''\n const target = findTextChild(el) ?? el\n const newText = nextValue ?? target.textContent ?? ''\n if (!newText) return\n\n const oldParts = oldText.match(/\\S+|\\s+/g) || []\n const newParts = newText.match(/\\S+|\\s+/g) || []\n const previous = {\n minHeight: target.style.minHeight,\n overflow: target.style.overflow,\n }\n const rect = target.getBoundingClientRect()\n if (rect.height > 0) target.style.minHeight = previous.minHeight || `${Math.ceil(rect.height)}px`\n target.style.overflow = 'visible'\n\n target.textContent = ''\n const diffSpans: HTMLSpanElement[] = []\n for (let i = 0; i < newParts.length; i++) {\n const part = newParts[i]\n if (/^\\s+$/.test(part)) {\n target.appendChild(document.createTextNode(part))\n } else {\n const span = document.createElement('span')\n span.textContent = part\n span.style.willChange = 'transform, opacity, filter'\n span.style.display = 'inline-block'\n if (i >= oldParts.length || oldParts[i] !== part) {\n span.setAttribute('data-diff', '')\n }\n target.appendChild(span)\n if (i >= oldParts.length || oldParts[i] !== part) diffSpans.push(span)\n }\n }\n\n let cleaned = false\n const cleanup = () => {\n if (cleaned) return\n cleaned = true\n diffSpans.forEach(s => {\n s.style.willChange = 'auto'\n s.style.transform = ''\n s.style.filter = ''\n })\n if (diffSpans.length === 0 || diffSpans.some(s => s.parentElement === target)) {\n target.textContent = newText\n }\n target.style.minHeight = previous.minHeight\n target.style.overflow = previous.overflow\n }\n\n if (diffSpans.length === 0) {\n cleanup()\n onEnd?.()\n return\n }\n let remaining = diffSpans.length\n const maxDelay = (diffSpans.length - 1) * 30\n const totalDuration = duration + maxDelay\n diffSpans.forEach((span, i) => {\n const anim = span.animate(\n [\n { opacity: 0, transform: 'translateY(0.16em)', filter: 'blur(1.5px)' },\n { opacity: 1, transform: 'translateY(0)', filter: 'blur(0px)' },\n ],\n { duration, delay: i * 30, fill: 'forwards', easing: SMOOTH },\n )\n anim.onfinish = () => {\n remaining--\n if (remaining === 0) {\n cleanup()\n onEnd?.()\n }\n }\n anim.oncancel = cleanup\n })\n const marker = target.animate([{ opacity: 1 }, { opacity: 1 }], { duration: totalDuration, fill: 'forwards' })\n marker.oncancel = cleanup\n return marker\n}\n\n// Expand/Collapse height animation\nfunction animateHeightAuto(\n el: HTMLElement,\n prevValue: string | undefined,\n nextValue: string | undefined,\n duration: number,\n onEnd?: () => void,\n): Animation | undefined {\n const oldText = prevValue ?? ''\n const newText = nextValue ?? ''\n const oldHeight = oldText ? measureTextBlock(el, oldText).height : 0\n const newHeight = newText ? measureTextBlock(el, newText).height : el.scrollHeight\n if (!oldHeight && !newHeight) { onEnd?.(); return }\n if (oldHeight === newHeight) { onEnd?.(); return }\n\n const { oldEl, newEl, cleanup } = prepareStableParagraphSwap(el, oldText, newText)\n\n // Override minHeight set by prepareStableParagraphSwap so height animation works\n el.style.minHeight = ''\n el.style.overflow = 'hidden'\n el.style.height = `${Math.ceil(oldHeight)}px`\n el.offsetHeight\n\n const anim = el.animate(\n [{ height: `${Math.ceil(oldHeight)}px` }, { height: `${Math.ceil(newHeight)}px` }],\n { duration, easing: EASE_IN_OUT, fill: 'forwards' },\n )\n\n function heightCleanup() {\n el.style.overflow = ''\n el.style.height = ''\n el.style.minHeight = ''\n }\n anim.onfinish = () => { heightCleanup(); cleanup(); onEnd?.() }\n anim.oncancel = () => { heightCleanup(); cleanup() }\n return anim\n}\n\nfunction animateCursorBlink(\n el: HTMLElement,\n _prevValue: string | undefined,\n _nextValue: string | undefined,\n duration: number,\n onEnd?: () => void,\n): Animation | undefined {\n const cursor = document.createElement('span')\n cursor.textContent = '|'\n cursor.style.display = 'inline-block'\n cursor.style.width = '0.6em'\n cursor.style.fontWeight = '300'\n cursor.style.opacity = '1'\n el.appendChild(cursor)\n\n const blinkDuration = validDuration(duration, 800)\n\n const anim = cursor.animate(\n [{ opacity: 1 }, { opacity: 0.3 }],\n {\n duration: blinkDuration / 2,\n iterations: Infinity,\n direction: 'alternate',\n easing: 'steps(1)',\n fill: 'forwards',\n },\n )\n\n let cleaned = false\n const cleanup = () => {\n if (cleaned) return\n cleaned = true\n cursor.remove()\n }\n\n anim.oncancel = () => {\n cleanup()\n onEnd?.()\n }\n\n queueMicrotask(() => onEnd?.())\n\n return anim\n}\n\n// ─── Helpers for old/new paragraph swap ───────────────────\n\nfunction colorWithAlpha(color: string, alpha: number): string {\n const m = color.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/)\n if (m) return `rgba(${m[1]}, ${m[2]}, ${m[3]}, ${alpha})`\n return `rgba(0, 0, 0, ${alpha})`\n}\n\nfunction findTextChild(el: HTMLElement): HTMLElement | null {\n for (const child of el.children) {\n if (child instanceof HTMLElement && child.childElementCount === 0 && (child.textContent?.trim() ?? '').length > 0) {\n return child\n }\n }\n return null\n}\n\nfunction prepareStableParagraphSwap(el: HTMLElement, oldText: string, newText: string): { oldEl: HTMLDivElement; newEl: HTMLDivElement; cleanup: () => void } {\n const containerHeight = el.getBoundingClientRect().height\n el.style.minHeight = containerHeight + 'px'\n const savedText = el.textContent ?? \"\"\n el.textContent = ''\n const keeper = document.createElement(\"span\")\n keeper.textContent = oldText || \"\\u00A0\"\n keeper.style.opacity = \"0\"\n keeper.style.pointerEvents = \"none\"\n el.appendChild(keeper)\n el.style.position = 'relative'\n const oldEl = document.createElement('div')\n const newEl = document.createElement('div')\n oldEl.textContent = oldText || '\\u00A0'\n newEl.textContent = newText || '\\u00A0'\n oldEl.style.position = 'absolute'\n oldEl.style.inset = '0'\n newEl.style.position = 'absolute'\n newEl.style.inset = '0'\n el.appendChild(oldEl)\n el.appendChild(newEl)\n return {\n oldEl,\n newEl,\n cleanup: () => {\n el.style.position = ''\n el.textContent = newText\n },\n }\n}\n\nfunction reserveStableParagraphSize(el: HTMLElement, prevText: string, nextText: string) {\n const prevSize = measureTextBlock(el, prevText)\n const nextSize = measureTextBlock(el, nextText)\n const minW = Math.max(prevSize.width, nextSize.width)\n el.dataset.motifPrevWidth = el.style.width\n el.dataset.motifPrevMinHeight = el.style.minHeight\n el.style.width = `${Math.ceil(minW)}px`\n el.style.minHeight = `${Math.ceil(prevSize.height)}px`\n}\n\n// ─── Custom animation registry ────────────────────────────\n\nconst customAnimations: Record<string, (...args: any[]) => Animation | undefined> = {\n morph: animateMorph,\n morphText: animateMorph,\n fadeSwap: animateFadeSwap,\n slideReplace: (el: HTMLElement, prev: string | undefined, text: string | undefined, duration: number, onEnd?: () => void) =>\n animateSlideReplace(el, prev, text, 1, duration, onEnd),\n crossFade: animateCrossFade,\n fadeMask: (el: HTMLElement, _prev: string | undefined, _text: string | undefined, duration: number, onEnd?: () => void) =>\n animateFadeMask(el, duration, onEnd),\n highlight: (el: HTMLElement, _prev: string | undefined, text: string | undefined, duration: number, onEnd?: () => void, highlightColor?: string, highlightMode?: \"persist\" | \"pulse\" | \"erase\", highlightHold?: number) =>\n animateHighlight(el, text ?? '', duration, highlightColor, onEnd, highlightMode, highlightHold),\n diffAnimate: animateDiff,\n heightAuto: animateHeightAuto,\n cursorBlink: animateCursorBlink,\n}\n\n// ─── runAnimation fallback ────────────────────────────────\n\nfunction rebaseParagraphKeyframes(keyframes: Keyframe[], options?: ParagraphPresetOptions): Keyframe[] {\n if (!options) return keyframes\n const { distance, scale, blur } = options\n return keyframes.map(kf => {\n let t = (kf as any).transform as string | undefined\n let f = (kf as any).filter as string | undefined\n if (distance !== undefined && t) {\n t = t.replace(/translateY\\((-?\\d+(?:\\.\\d+)?)(px)?\\)/g, (_, val) =>\n `translateY(${Math.round(Number(val) * (distance / 32))}px)`)\n t = t.replace(/translateX\\((-?\\d+(?:\\.\\d+)?)(px)?\\)/g, (_, val) =>\n `translateX(${Math.round(Number(val) * (distance / 32))}px)`)\n }\n if (scale !== undefined && t) {\n t = t.replace(/scale\\((-?[\\d.]+(?:,\\s*-?[\\d.]+)?)\\)/g, `scale(${scale})`)\n }\n if (blur !== undefined && f) {\n f = f.replace(/blur\\((\\d+)px\\)/g, `blur(${blur}px)`)\n }\n return { ...kf, transform: t, filter: f }\n })\n}\n\nfunction runAnimation(\n el: HTMLElement,\n name: string,\n options: KeyframeAnimationOptions,\n mode: 'change' | 'single' = 'single',\n presetOptions?: ParagraphPresetOptions,\n): Animation {\n el.style.willChange = 'transform, opacity, filter'\n const def = presets[name]\n if (!def) {\n if (!warned.has(name)) {\n warned.add(name)\n console.warn(`[trigr] Unknown paragraph animation \"${name}\"`)\n }\n const anim = el.animate([], options)\n anim.addEventListener('finish', () => { el.style.willChange = 'auto' })\n anim.addEventListener('cancel', () => { el.style.willChange = 'auto' })\n return anim\n }\n const baseFrames = mode === 'change' ? [...def.out, ...def.in] : (def.in.length ? [...def.in] : [...def.out])\n const rebased = rebaseParagraphKeyframes(baseFrames, presetOptions)\n const kf = prefersReducedMotion() ? rebased.map(({ opacity }) => ({ opacity: opacity ?? 1 })) : rebased\n const prevOrigin = el.style.transformOrigin\n const hasScaleY = rebased.some((k: any) => k.transform?.includes(\"scaleY\"))\n if (hasScaleY) el.style.transformOrigin = \"top\"\n const first = kf[0]\n if (first) {\n if ((first as any).opacity !== undefined) el.style.opacity = String((first as any).opacity)\n if ((first as any).transform !== undefined) el.style.transform = String((first as any).transform)\n if ((first as any).filter !== undefined) el.style.filter = String((first as any).filter)\n }\n const anim = el.animate(kf, { ...options, fill: 'forwards' })\n anim.addEventListener('finish', () => {\n const first = kf[0]\n const last = kf[kf.length - 1]\n if (last) {\n const hadOpacity = (first as any).opacity !== undefined\n const hadFilter = (first as any).filter !== undefined\n if ((last as any).opacity !== undefined) {\n el.style.opacity = String((last as any).opacity)\n } else if (hadOpacity) {\n el.style.opacity = '1'\n }\n if ((last as any).transform !== undefined) el.style.transform = String((last as any).transform)\n if ((last as any).filter !== undefined) {\n el.style.filter = String((last as any).filter)\n } else if (hadFilter) {\n el.style.filter = 'blur(0px)'\n }\n }\n if (hasScaleY) el.style.transformOrigin = prevOrigin\n el.style.willChange = 'auto'\n })\n anim.addEventListener('cancel', () => {\n const last = kf[kf.length - 1]\n if (last) {\n if ((last as any).opacity !== undefined) el.style.opacity = String((last as any).opacity) ?? 1\n if ((last as any).transform !== undefined) el.style.transform = String((last as any).transform)\n if ((last as any).filter !== undefined) el.style.filter = String((last as any).filter)\n }\n if (hasScaleY) el.style.transformOrigin = prevOrigin\n el.style.willChange = 'auto'\n })\n return anim\n}\n\n// ─── ScrollWordReveal – uses IntersectionObserver for performance, line-based for paragraphs ─────\nfunction setupScrollWordReveal(el: HTMLElement, text: string, threshold = 0.4, onEnd?: () => void) {\n const textChild = findTextChild(el)\n const content = text || textChild?.textContent || el.textContent || ''\n const useLines = content.length > 20\n\n if (textChild && !useLines) {\n const prevWidth = el.style.width\n const prevMinHeight = el.style.minHeight\n const prevOverflow = el.style.overflow\n\n const fragments = splitWordsAsElements(content)\n const wordSpans: HTMLSpanElement[] = fragments.filter((n): n is HTMLSpanElement => n instanceof HTMLSpanElement)\n\n if (wordSpans.length === 0) { onEnd?.(); return }\n\n const rect = el.getBoundingClientRect()\n el.style.width = prevWidth || `${Math.ceil(rect.width)}px`\n el.style.minHeight = prevMinHeight || `${Math.ceil(rect.height)}px`\n el.style.overflow = 'hidden'\n\n const originalInnerHTML = textChild.innerHTML\n\n textChild.textContent = ''\n for (const node of fragments) {\n textChild.appendChild(node)\n if (node instanceof HTMLSpanElement) {\n node.style.opacity = '0.18'\n node.style.transition = 'opacity 120ms linear'\n node.style.willChange = 'opacity'\n }\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n const word = entry.target as HTMLSpanElement\n word.style.opacity = '1'\n observer.unobserve(word)\n }\n }\n },\n scrollObserverOptions(el, threshold),\n )\n\n wordSpans.forEach(span => observer.observe(span))\n return () => {\n observer.disconnect()\n wordSpans.forEach(s => s.style.willChange = 'auto')\n textChild.innerHTML = originalInnerHTML\n el.style.width = prevWidth\n el.style.minHeight = prevMinHeight\n el.style.overflow = prevOverflow\n onEnd?.()\n }\n }\n\n // Line-based reveal for paragraph-length content (preserves children, natural flow)\n if (useLines) {\n const refEl = textChild || el\n const lineDivs = splitLinesAsElements(content, refEl)\n if (lineDivs.length > 1) {\n const prevWidth = el.style.width\n const prevMinHeight = el.style.minHeight\n const prevOverflow = el.style.overflow\n const originalInnerHTML = refEl.innerHTML\n\n const rect = el.getBoundingClientRect()\n el.style.width = prevWidth || `${Math.ceil(rect.width)}px`\n el.style.minHeight = prevMinHeight || `${Math.ceil(rect.height)}px`\n el.style.overflow = 'hidden'\n\n refEl.textContent = ''\n for (const div of lineDivs) {\n div.style.opacity = '0.18'\n div.style.transition = 'opacity 120ms linear'\n div.style.willChange = 'opacity'\n refEl.appendChild(div)\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n const line = entry.target as HTMLElement\n line.style.opacity = '1'\n observer.unobserve(line)\n }\n }\n },\n scrollObserverOptions(el, threshold),\n )\n\n lineDivs.forEach(div => observer.observe(div))\n return () => {\n observer.disconnect()\n lineDivs.forEach(d => d.style.willChange = 'auto')\n refEl.innerHTML = originalInnerHTML\n el.style.width = prevWidth\n el.style.minHeight = prevMinHeight\n el.style.overflow = prevOverflow\n onEnd?.()\n }\n }\n }\n\n // Word-based reveal fallback for remaining cases\n {\n const target = textChild || el\n const isTargetChild = target === textChild\n const prevWidth = el.style.width\n const prevMinHeight = el.style.minHeight\n const prevOverflow = el.style.overflow\n\n const fragments = splitWordsAsElements(content)\n const wordSpans: HTMLSpanElement[] = fragments.filter((n): n is HTMLSpanElement => n instanceof HTMLSpanElement)\n\n if (wordSpans.length === 0) { onEnd?.(); return () => {} }\n\n const currentRect = el.getBoundingClientRect()\n el.style.width = prevWidth || `${Math.ceil(currentRect.width)}px`\n el.style.minHeight = prevMinHeight || `${Math.ceil(currentRect.height)}px`\n el.style.overflow = 'hidden'\n\n const originalInnerHTML = target.innerHTML\n target.textContent = ''\n for (const node of fragments) {\n target.appendChild(node)\n if (node instanceof HTMLSpanElement) {\n node.style.opacity = '0.18'\n node.style.transition = 'opacity 120ms linear'\n node.style.willChange = 'opacity'\n }\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n const word = entry.target as HTMLSpanElement\n word.style.opacity = '1'\n observer.unobserve(word)\n }\n }\n },\n scrollObserverOptions(el, threshold),\n )\n\n wordSpans.forEach(span => observer.observe(span))\n return () => {\n observer.disconnect()\n wordSpans.forEach(s => s.style.willChange = 'auto')\n if (isTargetChild) {\n target.innerHTML = originalInnerHTML\n } else {\n el.textContent = ''\n }\n el.style.width = prevWidth\n el.style.minHeight = prevMinHeight\n el.style.overflow = prevOverflow\n onEnd?.()\n }\n }\n}\n\n// ─── Component ───────────────────────────────────────────\nexport const AnimateParagraph = forwardRef<AnimateParagraphHandle, AnimateParagraphProps>(function AnimateParagraph({\n value,\n triggers: triggersProp,\n trigger = 'change',\n animation: baseAnimation,\n scrollAnimation,\n properties,\n exitAnimation,\n show,\n unmountOnExit = true,\n highlightColor: highlightColorProp,\n highlightMode = \"persist\" as \"persist\" | \"pulse\" | \"erase\",\n highlightHold = 800,\n duration = 300,\n easing = SMOOTH,\n delay = 0,\n threshold = 0.4,\n repeat = false,\n once,\n as = 'div',\n className,\n style,\n onClick,\n onEnter,\n onExit,\n onHoverStart,\n onHoverEnd,\n onAnimationEnd: onAnimationEndProp,\n presetOptions,\n children,\n}: AnimateParagraphProps, forwardedRef) {\n const ref = useRef<HTMLElement>(null)\n const animRef = useRef<Animation | null>(null)\n const propertyAnimRef = useRef<Animation | null>(null)\n const cleanupRef = useRef<(() => void) | null>(null)\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const runFallbackRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const prevHeightRef = useRef(0)\n const prevValRef = useRef(value)\n const runningRef = useRef(false)\n const queueRef = useRef<AnimationTrigger[]>([])\n const runIdRef = useRef(0)\n const scrollTriggeredRef = useRef(false)\n const exitAnimRef = useRef<Animation | null>(null)\n const exitKeyRef = useRef(0)\n\n const [playCount, setPlayCount] = useState(0)\n const [currentRun, setCurrentRun] = useState<{ id: number; source: AnimationTrigger } | null>(null)\n const [phase, setPhase] = useState<\"entered\" | \"exiting\" | \"exited\">(\n show !== false ? \"entered\" : \"exited\"\n )\n const { changed, prev, current: watchedCurrent } = useValueChange(value)\n const capturedPrevRef = useRef(prev)\n if (changed) capturedPrevRef.current = prev\n const shouldObserveOnce = once ?? !repeat\n\n const triggerConfigs = useMemo(() => {\n if (triggersProp) {\n return triggersProp.map(tc => ({\n trigger: tc.trigger as AnimationTrigger,\n animation: tc.animation,\n threshold: tc.threshold ?? threshold,\n }))\n }\n const sources = (Array.isArray(trigger) ? trigger.slice(0, 2) : [trigger]) as AnimationTrigger[]\n return sources.map(s => ({\n trigger: s,\n animation: s === 'scroll' && scrollAnimation ? scrollAnimation : baseAnimation,\n threshold,\n }))\n }, [triggersProp, trigger, baseAnimation, scrollAnimation, threshold])\n\n const triggerSources = useMemo(\n () => triggerConfigs.map(tc => tc.trigger),\n [triggerConfigs]\n )\n\n const hasTrigger = useCallback((source: AnimationTrigger) => triggerSources.includes(source), [triggerSources])\n const activeTrigger = currentRun?.source ?? triggerSources[0] ?? 'change'\n const activeConfig = triggerConfigs.find(tc => tc.trigger === activeTrigger)\n const animation = activeConfig?.animation ?? baseAnimation\n const scrollConfig = triggerConfigs.find(tc => tc.trigger === 'scroll')\n const scrollThreshold = scrollConfig?.threshold ?? threshold\n\n const finishRun = useCallback(() => {\n if (runFallbackRef.current !== null) {\n clearTimeout(runFallbackRef.current)\n runFallbackRef.current = null\n }\n runningRef.current = false\n animRef.current = null\n onAnimationEndProp?.()\n const next = queueRef.current.shift()\n if (next) {\n runningRef.current = true\n setCurrentRun({ id: ++runIdRef.current, source: next })\n setPlayCount((c) => c + 1)\n } else {\n setCurrentRun(null)\n }\n }, [onAnimationEndProp])\n\n const requestRun = useCallback((source: AnimationTrigger) => {\n if (runningRef.current) {\n if (source !== 'scroll' && queueRef.current.length < 2) queueRef.current.push(source)\n return\n }\n runningRef.current = true\n setCurrentRun({ id: ++runIdRef.current, source })\n setPlayCount((c) => c + 1)\n }, [])\n\n const onAnimationEnd = finishRun\n\n // scroll trigger (IntersectionObserver)\n useEffect(() => {\n if (!hasTrigger('scroll')) return\n const el = ref.current\n if (!el) return\n\n scrollTriggeredRef.current = false\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n if (scrollTriggeredRef.current) return\n scrollTriggeredRef.current = true\n onEnter?.()\n requestRun('scroll')\n if (shouldObserveOnce) observer.disconnect()\n } else {\n scrollTriggeredRef.current = false\n if (repeat) onExit?.()\n }\n },\n scrollObserverOptions(el, scrollThreshold),\n )\n observer.observe(el)\n return () => observer.disconnect()\n }, [hasTrigger, onEnter, onExit, repeat, requestRun, shouldObserveOnce, scrollThreshold])\n\n useEffect(() => {\n if (hasTrigger('change') && changed) requestRun('change')\n }, [changed, hasTrigger, requestRun])\n\n useEffect(() => {\n if (!hasTrigger('mount')) return\n requestRun('mount')\n }, [hasTrigger, requestRun])\n\n useEffect(() => {\n if (show === undefined) return\n\n if (show) {\n exitAnimRef.current?.cancel()\n exitAnimRef.current = null\n setPhase(\"entered\")\n return\n }\n\n const key = ++exitKeyRef.current\n\n if (!exitAnimation) {\n setPhase(\"exited\")\n return\n }\n\n const el = ref.current\n if (!el) {\n setPhase(\"exited\")\n return\n }\n\n animRef.current?.cancel()\n animRef.current = null\n runningRef.current = false\n queueRef.current = []\n\n const motionDuration = validDuration(duration, 300)\n const def = presets[exitAnimation]\n if (!def) {\n setPhase(\"exited\")\n return\n }\n\n const onExitEnd = () => {\n if (exitKeyRef.current === key) {\n setPhase(\"exited\")\n exitAnimRef.current = null\n }\n }\n\n setPhase(\"exiting\")\n\n const exitFrames = def.out.length ? def.out : def.in.length ? def.in : [{ opacity: 0 }]\n el.style.willChange = \"transform, opacity, filter\"\n const exitPrevOrigin = el.style.transformOrigin\n const exitHasScaleY = exitFrames.some((k: any) => k.transform?.includes(\"scaleY\"))\n if (exitHasScaleY) el.style.transformOrigin = \"top\"\n const first = exitFrames[0]\n if (first) {\n if ((first as any).opacity !== undefined) el.style.opacity = String((first as any).opacity)\n if ((first as any).transform !== undefined) el.style.transform = String((first as any).transform)\n if ((first as any).filter !== undefined) el.style.filter = String((first as any).filter)\n }\n const kf = prefersReducedMotion() ? exitFrames.map(({ opacity }: any) => ({ opacity: opacity ?? 1 })) : exitFrames\n exitAnimRef.current = el.animate(kf, {\n duration: motionDuration,\n easing,\n fill: \"forwards\",\n })\n exitAnimRef.current.addEventListener(\"finish\", () => {\n const last = exitFrames[exitFrames.length - 1]\n if (last) {\n if ((last as any).opacity !== undefined) el.style.opacity = String((last as any).opacity)\n if ((last as any).transform !== undefined) el.style.transform = String((last as any).transform)\n if ((last as any).filter !== undefined) el.style.filter = String((last as any).filter)\n }\n if (exitHasScaleY) el.style.transformOrigin = exitPrevOrigin\n el.style.willChange = \"auto\"\n onExitEnd()\n })\n exitAnimRef.current.addEventListener(\"cancel\", () => {\n if (exitHasScaleY) el.style.transformOrigin = exitPrevOrigin\n el.style.willChange = \"auto\"\n })\n\n return () => {\n if (exitKeyRef.current === key) {\n exitAnimRef.current?.cancel()\n exitAnimRef.current = null\n }\n }\n }, [show, exitAnimation, duration, easing])\n\n // click / hover\n const handleClick = useCallback(\n (e: MouseEvent<HTMLElement>) => {\n onClick?.(e)\n if (hasTrigger('click')) requestRun('click')\n },\n [hasTrigger, onClick, requestRun],\n )\n\n const handleMouseEnter = useCallback(() => {\n onHoverStart?.()\n if (hasTrigger('hover')) requestRun('hover')\n }, [hasTrigger, onHoverStart, requestRun])\n\n const handleMouseLeave = useCallback(() => onHoverEnd?.(), [onHoverEnd])\n\n // Special scrollWordReveal on scroll\n useEffect(() => {\n if (animation !== 'scrollWordReveal' || !hasTrigger('scroll')) return\n if (!currentRun || currentRun.source !== 'scroll') return\n const el = ref.current\n if (!el) return\n const text = String(value ?? el.textContent ?? '')\n if (!text) return\n const removeObserver = setupScrollWordReveal(el, text, scrollThreshold, finishRun)\n return () => removeObserver?.()\n }, [animation, currentRun, finishRun, hasTrigger, scrollThreshold, value])\n\n // Track previous height for expandCollapse\n if (value !== prevValRef.current && ref.current) {\n prevHeightRef.current = ref.current.offsetHeight\n }\n prevValRef.current = value\n\n useLayoutEffect(() => {\n if (playCount <= 0 || !currentRun || !ref.current) return\n if (animation === 'scrollWordReveal' && currentRun.source === 'scroll') return\n\n cancelElementAnimations(ref.current)\n animRef.current = null\n propertyAnimRef.current = null\n cleanupRef.current?.()\n if (timerRef.current !== null) clearTimeout(timerRef.current)\n if (runFallbackRef.current !== null) {\n clearTimeout(runFallbackRef.current)\n runFallbackRef.current = null\n }\n if (ref.current.dataset.motifPrevWidth !== undefined) {\n ref.current.style.width = ref.current.dataset.motifPrevWidth\n delete ref.current.dataset.motifPrevWidth\n }\n if (ref.current.dataset.motifPrevMinHeight !== undefined) {\n ref.current.style.minHeight = ref.current.dataset.motifPrevMinHeight\n delete ref.current.dataset.motifPrevMinHeight\n }\n\n const el = ref.current\n const current = currentRun.source === 'change' ? (watchedCurrent as string) : (value as string) ?? el.textContent ?? ''\n const text = String(current)\n const reduced = prefersReducedMotion()\n const safeDuration = validDuration(duration, 300)\n const motionDuration = reduced ? safeDuration / 2 : safeDuration\n const effectivePrev = currentRun.source === 'change' ? capturedPrevRef.current : undefined\n const isChange = currentRun.source === 'change' && effectivePrev !== undefined\n\n const onFinish = isChange\n ? () => {\n if (el.dataset.motifPrevWidth !== undefined) {\n el.style.width = el.dataset.motifPrevWidth\n delete el.dataset.motifPrevWidth\n }\n if (el.dataset.motifPrevMinHeight !== undefined) {\n el.style.minHeight = el.dataset.motifPrevMinHeight\n delete el.dataset.motifPrevMinHeight\n }\n finishRun()\n }\n : finishRun\n\n runFallbackRef.current = setTimeout(() => {\n runFallbackRef.current = null\n onFinish()\n }, Math.max(900, motionDuration * 2 + 600))\n\n if (isChange) {\n reserveStableParagraphSize(el, String(effectivePrev), text)\n }\n propertyAnimRef.current = runPropertyAnimation(el, properties, {\n duration: motionDuration,\n easing,\n delay,\n })\n\n // Try registry\n const handler = customAnimations[animation as string]\n if (handler) {\n animRef.current = handler(el, effectivePrev !== undefined ? String(effectivePrev) : undefined, text, motionDuration, onFinish, highlightColorProp, highlightMode, highlightHold) ?? null\n return\n }\n\n // Fallback to runAnimation with presets\n const anim = runAnimation(\n el,\n animation as string,\n { duration: motionDuration, easing, delay },\n currentRun.source === 'change' ? 'change' : 'single',\n presetOptions,\n )\n animRef.current = anim\n anim.onfinish = onFinish\n }, [animation, currentRun, delay, duration, easing, finishRun, highlightColorProp, playCount, prev, properties, value, watchedCurrent])\n\n useEffect(() => () => {\n animRef.current?.cancel()\n propertyAnimRef.current?.cancel()\n exitAnimRef.current?.cancel()\n cleanupRef.current?.()\n if (timerRef.current !== null) clearTimeout(timerRef.current)\n if (runFallbackRef.current !== null) clearTimeout(runFallbackRef.current)\n queueRef.current = []\n }, [])\n\n if (phase === \"exited\" && unmountOnExit !== false) {\n return null\n }\n\n return createElement(\n as,\n {\n ref,\n className,\n style,\n onClick: hasTrigger('click') || onClick ? handleClick : undefined,\n onMouseEnter: hasTrigger('hover') || onHoverStart ? handleMouseEnter : undefined,\n onMouseLeave: onHoverEnd ? handleMouseLeave : undefined,\n },\n children,\n )\n})\n\nexport const Animate = { Paragraph: AnimateParagraph }\nexport default Animate\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { a as AnimateParagraphProps, A as AnimateParagraphHandle } from '../animations-DhYFMdig.mjs';
|
|
3
|
+
export { E as EASE_IN, b as EASE_IN_OUT, c as EASE_OUT, S as SMOOTH, d as SPRING, p as presets } from '../animations-DhYFMdig.mjs';
|
|
4
|
+
|
|
5
|
+
declare const AnimateParagraph: react.ForwardRefExoticComponent<AnimateParagraphProps & react.RefAttributes<AnimateParagraphHandle>>;
|
|
6
|
+
declare const Animate: {
|
|
7
|
+
Paragraph: react.ForwardRefExoticComponent<AnimateParagraphProps & react.RefAttributes<AnimateParagraphHandle>>;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export { Animate, AnimateParagraph, Animate as default };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { a as AnimateParagraphProps, A as AnimateParagraphHandle } from '../animations-DhYFMdig.js';
|
|
3
|
+
export { E as EASE_IN, b as EASE_IN_OUT, c as EASE_OUT, S as SMOOTH, d as SPRING, p as presets } from '../animations-DhYFMdig.js';
|
|
4
|
+
|
|
5
|
+
declare const AnimateParagraph: react.ForwardRefExoticComponent<AnimateParagraphProps & react.RefAttributes<AnimateParagraphHandle>>;
|
|
6
|
+
declare const Animate: {
|
|
7
|
+
Paragraph: react.ForwardRefExoticComponent<AnimateParagraphProps & react.RefAttributes<AnimateParagraphHandle>>;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export { Animate, AnimateParagraph, Animate as default };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {forwardRef,useRef,useState,useMemo,useCallback,useEffect,useLayoutEffect,createElement}from'react';function Ut(t){let r=useRef(void 0),i=r.current!==void 0&&r.current!==t,n=r.current;return r.current=t,{changed:i,prev:n,current:t}}var lt="cubic-bezier(0.0, 0.0, 0.2, 1)",ct="cubic-bezier(0.4, 0.0, 1, 1)",gt="cubic-bezier(0.4, 0.0, 0.2, 1)",Rt="cubic-bezier(0.34, 1.56, 0.64, 1)",F="cubic-bezier(0.22, 1, 0.36, 1)",tt=[{opacity:0,transform:"translateY(6px)",filter:"blur(3px)"},{opacity:1,transform:"translateY(0)",filter:"blur(0px)"}],E=[{opacity:1,transform:"translateY(0)",filter:"blur(0px)"},{opacity:0,transform:"translateY(-6px)",filter:"blur(3px)"}],xt={fadeIn:{out:[],in:tt},fadeOut:{out:E,in:[]},fadeSwap:{out:E,in:tt},fadeMask:{out:E,in:tt},morphText:{out:E,in:tt},slideUp:{out:[{opacity:1,transform:"translateY(0)",filter:"blur(0px)"},{opacity:0,transform:"translateY(-16px)",filter:"blur(2.5px)"}],in:[{opacity:0,transform:"translateY(16px)",filter:"blur(2.5px)"},{opacity:1,transform:"translateY(0)",filter:"blur(0px)"}]},slideDown:{out:[{opacity:1,transform:"translateY(0)",filter:"blur(0px)"},{opacity:0,transform:"translateY(16px)",filter:"blur(2.5px)"}],in:[{opacity:0,transform:"translateY(-16px)",filter:"blur(2.5px)"},{opacity:1,transform:"translateY(0)",filter:"blur(0px)"}]},slideLeft:{out:[{opacity:1,transform:"translateX(0)",filter:"blur(0px)"},{opacity:0,transform:"translateX(-18px)",filter:"blur(2.5px)"}],in:[{opacity:0,transform:"translateX(18px)",filter:"blur(2.5px)"},{opacity:1,transform:"translateX(0)",filter:"blur(0px)"}]},slideRight:{out:[{opacity:1,transform:"translateX(0)",filter:"blur(0px)"},{opacity:0,transform:"translateX(18px)",filter:"blur(2.5px)"}],in:[{opacity:0,transform:"translateX(-18px)",filter:"blur(2.5px)"},{opacity:1,transform:"translateX(0)",filter:"blur(0px)"}]},slideReplace:{out:[{opacity:1,transform:"translateX(0)",filter:"blur(0px)"},{opacity:0,transform:"translateX(-14px)",filter:"blur(2px)"}],in:[{opacity:0,transform:"translateX(14px)",filter:"blur(2px)"},{opacity:1,transform:"translateX(0)",filter:"blur(0px)"}]},popIn:{out:[{opacity:1,transform:"scale(1)",filter:"blur(0px)"},{opacity:0,transform:"scale(0.93)",filter:"blur(2px)"}],in:[{opacity:0,transform:"scale(0.9)",filter:"blur(2px)"},{opacity:1,transform:"scale(1.06)",filter:"blur(0px)",offset:.6},{opacity:1,transform:"scale(1)",filter:"blur(0px)"}]},popOut:{out:[{opacity:1,transform:"scale(1)",filter:"blur(0px)"},{opacity:0,transform:"scale(0.93)",filter:"blur(2px)"}],in:[]},expandIn:{out:[{opacity:1,transform:"scaleY(1)",filter:"blur(0px)"},{opacity:0,transform:"scaleY(0.9)",filter:"blur(2px)"}],in:[{opacity:0,transform:"scaleY(0.9)",filter:"blur(2px)"},{opacity:1,transform:"scaleY(1)",filter:"blur(0px)"}]},collapseOut:{out:[{opacity:1,transform:"scaleY(1)",filter:"blur(0px)"},{opacity:0,transform:"scaleY(0)",filter:"blur(2px)"}],in:[]},zoomIn:{out:[{opacity:1,transform:"scale(1)",filter:"blur(0px)"},{opacity:0,transform:"scale(0.94)",filter:"blur(2px)"}],in:[{opacity:0,transform:"scale(0.94)",filter:"blur(2px)"},{opacity:1,transform:"scale(1.03)",filter:"blur(0px)",offset:.6},{opacity:1,transform:"scale(1)",filter:"blur(0px)"}]},zoomOut:{out:[{opacity:1,transform:"scale(1)",filter:"blur(0px)"},{opacity:0,transform:"scale(0.94)",filter:"blur(2px)"}],in:[]},wordFadeIn:{out:[{opacity:1},{opacity:0}],in:[{opacity:0},{opacity:1}]},wordSlideUp:{out:E,in:[{opacity:0,transform:"translateY(12px)",filter:"blur(2px)"},{opacity:1,transform:"translateY(0)",filter:"blur(0px)"}]},wordPop:{out:[{opacity:1,transform:"scale(1)",filter:"blur(0px)"},{opacity:0,transform:"scale(0.94)",filter:"blur(2px)"}],in:[{opacity:0,transform:"scale(0.9)",filter:"blur(2px)"},{opacity:1,transform:"scale(1.06)",filter:"blur(0px)",offset:.6},{opacity:1,transform:"scale(1)",filter:"blur(0px)"}]},lineFadeIn:{out:[{opacity:1},{opacity:0}],in:[{opacity:0},{opacity:1}]},lineSlideUp:{out:E,in:[{opacity:0,transform:"translateY(14px)",filter:"blur(2px)"},{opacity:1,transform:"translateY(0)",filter:"blur(0px)"}]},streamIn:{out:[{opacity:1},{opacity:0}],in:[{opacity:0},{opacity:1}]},streamFade:{out:[{opacity:1},{opacity:0}],in:[{opacity:0},{opacity:1}]},streamSlide:{out:E,in:[{opacity:0,transform:"translateY(10px)",filter:"blur(2px)"},{opacity:1,transform:"translateY(0)",filter:"blur(0px)"}]},cursorBlink:{out:[{opacity:1},{opacity:0}],in:[{opacity:0},{opacity:1}]},expandCollapse:{out:E,in:tt},heightAuto:{out:E,in:tt},crossFade:{out:[{opacity:1},{opacity:0}],in:[{opacity:0},{opacity:1}]},pulse:{out:[{opacity:1,transform:"scale(1)"},{opacity:1,transform:"scale(0.98)"}],in:[{opacity:1,transform:"scale(1)"},{opacity:1,transform:"scale(1.03)",offset:.5},{opacity:1,transform:"scale(1)"}]},shake:{out:E,in:[{opacity:1,transform:"translateX(0)"},{opacity:1,transform:"translateX(-7px)",offset:.18},{opacity:1,transform:"translateX(7px)",offset:.36},{opacity:1,transform:"translateX(-5px)",offset:.56},{opacity:1,transform:"translateX(3px)",offset:.72},{opacity:1,transform:"translateX(0)"}]},highlight:{out:[{opacity:1},{opacity:1}],in:[]},flash:{out:[{filter:"brightness(1)",opacity:1},{filter:"brightness(1.8)",opacity:1,offset:.5},{filter:"brightness(1)",opacity:1}],in:[{filter:"brightness(1)",opacity:1},{filter:"brightness(1.8)",opacity:1,offset:.5},{filter:"brightness(1)",opacity:1}]},pushLeft:{out:[{opacity:1,transform:"translateX(0)",filter:"blur(0px)"},{opacity:0,transform:"translateX(-22px)",filter:"blur(2px)"}],in:[{opacity:0,transform:"translateX(22px)",filter:"blur(2px)"},{opacity:1,transform:"translateX(0)",filter:"blur(0px)"}]},pushRight:{out:[{opacity:1,transform:"translateX(0)",filter:"blur(0px)"},{opacity:0,transform:"translateX(22px)",filter:"blur(2px)"}],in:[{opacity:0,transform:"translateX(-22px)",filter:"blur(2px)"},{opacity:1,transform:"translateX(0)",filter:"blur(0px)"}]},flipPage:{out:[{opacity:1,transform:"perspective(800px) rotateY(0deg)"},{opacity:0,transform:"perspective(800px) rotateY(-32deg)"}],in:[{opacity:0,transform:"perspective(800px) rotateY(32deg)"},{opacity:1,transform:"perspective(800px) rotateY(0deg)"}]},morphBlur:{out:[{opacity:1,filter:"blur(0px)",transform:"translateY(0)"},{opacity:.2,filter:"blur(4px)",transform:"translateY(-4px)"}],in:[{opacity:.2,filter:"blur(4px)",transform:"translateY(4px)"},{opacity:1,filter:"blur(0px)",transform:"translateY(0)"}]},diffAnimate:{out:[],in:[]},scrollWordReveal:{out:[],in:[]},errorMessageIn:{out:[],in:[{transform:"translateX(-6px)",opacity:0,filter:"blur(2px)"},{transform:"translateX(5px)",opacity:1,filter:"blur(0px)",offset:.22},{transform:"translateX(-3px)",opacity:1,filter:"blur(0px)",offset:.48},{transform:"translateX(2px)",opacity:1,filter:"blur(0px)",offset:.72},{transform:"translateX(0)",opacity:1,filter:"blur(0px)"}]},paragraphFadeOut:{out:[{opacity:1,transform:"translateY(0)"},{opacity:0,transform:"translateY(0)"}],in:[{opacity:0,transform:"translateY(0)"},{opacity:1,transform:"translateY(0)"}]},slideOutUp:{out:[{opacity:1,transform:"translateY(0)",filter:"blur(0px)"},{opacity:0,transform:"translateY(-18px)",filter:"blur(2.5px)"}],in:[{opacity:0,transform:"translateY(-18px)",filter:"blur(2.5px)"},{opacity:1,transform:"translateY(0)",filter:"blur(0px)"}]},slideOutDown:{out:[{opacity:1,transform:"translateY(0)",filter:"blur(0px)"},{opacity:0,transform:"translateY(18px)",filter:"blur(2.5px)"}],in:[{opacity:0,transform:"translateY(18px)",filter:"blur(2.5px)"},{opacity:1,transform:"translateY(0)",filter:"blur(0px)"}]},slideOutLeft:{out:[{opacity:1,transform:"translateX(0)",filter:"blur(0px)"},{opacity:0,transform:"translateX(-22px)",filter:"blur(2.5px)"}],in:[{opacity:0,transform:"translateX(-22px)",filter:"blur(2.5px)"},{opacity:1,transform:"translateX(0)",filter:"blur(0px)"}]},slideOutRight:{out:[{opacity:1,transform:"translateX(0)",filter:"blur(0px)"},{opacity:0,transform:"translateX(22px)",filter:"blur(2.5px)"}],in:[{opacity:0,transform:"translateX(22px)",filter:"blur(2.5px)"},{opacity:1,transform:"translateX(0)",filter:"blur(0px)"}]},collapseHeight:{out:[{maxHeight:"1000px",opacity:1,overflow:"hidden"},{maxHeight:"0px",opacity:0,overflow:"hidden"}],in:[{maxHeight:"0px",opacity:0,overflow:"hidden"},{maxHeight:"1000px",opacity:1,overflow:"hidden"}]},wordFadeOut:{out:[{opacity:1},{opacity:0}],in:[{opacity:0},{opacity:1}]},wordSlideOut:{out:[{opacity:1,transform:"translateY(0)",filter:"blur(0px)"},{opacity:0,transform:"translateY(-12px)",filter:"blur(2px)"}],in:[{opacity:0,transform:"translateY(-12px)",filter:"blur(2px)"},{opacity:1,transform:"translateY(0)",filter:"blur(0px)"}]},lineFadeOut:{out:[{opacity:1},{opacity:0}],in:[{opacity:0},{opacity:1}]},lineSlideOut:{out:[{opacity:1,transform:"translateY(0)",filter:"blur(0px)"},{opacity:0,transform:"translateY(-14px)",filter:"blur(2px)"}],in:[{opacity:0,transform:"translateY(-14px)",filter:"blur(2px)"},{opacity:1,transform:"translateY(0)",filter:"blur(0px)"}]},fadeMaskOut:{out:[{opacity:1},{opacity:0}],in:[{opacity:0},{opacity:1}]}};function wt(t,r=300){let i=Number(t);return Number.isFinite(i)&&i>0?i:r}var qt=new Set,U=null;function oe(){return U||(U=document.createElement("div"),U.style.position="absolute",U.style.visibility="hidden",U.style.pointerEvents="none",U.style.whiteSpace="pre-wrap",U.style.width="max-content"),U}function Ct(t,r){let i=oe();i.textContent=r||"\xA0";let n=getComputedStyle(t);i.style.whiteSpace=n.whiteSpace||"pre-wrap";let e=t.clientWidth||t.getBoundingClientRect().width;e>0?(i.style.width=`${e}px`,i.style.maxWidth=`${e}px`):(i.style.width="max-content",i.style.maxWidth="none"),t.appendChild(i);let o=i.getBoundingClientRect();return i.remove(),{width:o.width,height:o.height}}function Mt(){var t,r;return typeof window=="undefined"?false:(r=(t=window.matchMedia)==null?void 0:t.call(window,"(prefers-reduced-motion: reduce)").matches)!=null?r:false}function le(t){t.getAnimations({subtree:true}).forEach(r=>r.cancel());}function ce(t){let r=t.parentElement;for(;r&&r!==document.body&&r!==document.documentElement;){let i=getComputedStyle(r);if(/(auto|scroll|overlay)/.test(`${i.overflowY}${i.overflow}`)&&r.scrollHeight>r.clientHeight)return r;r=r.parentElement;}return null}function bt(t,r){var s;let i=ce(t),n=(s=i==null?void 0:i.clientHeight)!=null?s:window.innerHeight,e=Math.min(.95,Math.max(.05,r)),o=Math.round(n*Math.min(.48,e/2));return {root:i,rootMargin:`-${o}px 0px -${o}px 0px`,threshold:0}}function fe(t,r,i){if(!r||Object.keys(r).length===0)return null;let n={},e={};for(let[s,a]of Object.entries(r))n[s]=a[0],e[s]=a[1];for(let[s,a]of Object.entries(n))t.style[s]=a;let o=t.animate([n,e],{...i,fill:"forwards"});return o.addEventListener("finish",()=>{for(let[s,a]of Object.entries(r))t.style[s]=String(a[1]);}),o.addEventListener("cancel",()=>{for(let[s,a]of Object.entries(n))t.style[s]=a;}),o}function Gt(t){let r=t.match(/\S+|\s+/g)||[],i=[];for(let n of r)if(/^\s+$/.test(n))i.push(document.createTextNode(n));else {let e=document.createElement("span");e.textContent=n,i.push(e);}return i}function kt(t,r){if(t.length<=1)return [t];let i=getComputedStyle(r),n=document.createElement("div");n.style.position="absolute",n.style.visibility="hidden",n.style.pointerEvents="none",n.style.left="0",n.style.top="0",n.style.width=`${r.clientWidth||r.getBoundingClientRect().width}px`,n.style.whiteSpace="pre-wrap",n.style.wordBreak="break-word",n.style.overflowWrap="break-word",n.style.font=i.font,n.style.lineHeight=i.lineHeight,n.style.letterSpacing=i.letterSpacing,n.style.wordSpacing=i.wordSpacing,n.style.padding="0",n.style.margin="0",n.textContent=t,r.appendChild(n);let e=n.firstChild;if(!e)return n.remove(),[t];let o=[],s=document.createRange(),a=0;for(;a<t.length;){if(s.setStart(e,a),s.setEnd(e,t.length),s.getClientRects().length<=1){o.push(t.slice(a));break}let p=a,h=t.length;for(;p<h-1;){let y=Math.ceil((p+h)/2);s.setStart(e,a),s.setEnd(e,y),s.getClientRects().length>1?h=y:p=y;}o.push(t.slice(a,p)),a=p;}return n.remove(),o}function ue(t,r){if(r&&t.length>15){let n=kt(t,r);if(n.length>1)return n.map(e=>{let o=document.createElement("div");return o.textContent=e||"\xA0",o})}return t.split(`
|
|
2
|
+
`).map(n=>{let e=document.createElement("div");return e.textContent=n||"\xA0",e})}function Jt(t,r,i,n,e){var W,w,S;let o=r!=null?r:"",s=(W=i!=null?i:t.textContent)!=null?W:"";if(!s)return;if(Mt()){let{oldEl:b,newEl:O,cleanup:M}=ft(t,o,s);b.animate([{opacity:1},{opacity:0}],{duration:n/2,easing:ct,fill:"forwards"});let $=O.animate([{opacity:0},{opacity:1}],{duration:n/2,easing:F,fill:"forwards"});return $.onfinish=()=>{M(),e==null||e();},$.oncancel=M,$}let a=kt(o||"",t),l=kt(s||"",t),p=Math.max(a.length,l.length);t.style.willChange="transform, opacity";let h=t.style.display,y=t.getBoundingClientRect();t.style.display="inline-block",t.style.width=`${Math.ceil(y.width)}px`,y.height>0&&(t.style.minHeight=`${Math.ceil(y.height)}px`),t.textContent="";let c=[];for(let b=0;b<p;b++){let O=(w=a[b])!=null?w:"",M=(S=l[b])!=null?S:"",$=O===M,H=document.createElement("span");if(H.style.display="block",H.style.lineHeight="inherit",t.appendChild(H),$&&M){H.textContent=M,c.push({oldEl:null,newEl:null,same:true});continue}if(O&&M){H.style.display="inline-grid",H.style.position="relative",H.style.width="100%";let N=document.createElement("span");N.textContent=O,N.style.gridArea="1 / 1",N.style.willChange="transform, opacity, filter",N.style.opacity="1",H.appendChild(N);let z=document.createElement("span");z.textContent=M,z.style.gridArea="1 / 1",z.style.willChange="transform, opacity, filter",z.style.opacity="0",H.appendChild(z),c.push({oldEl:N,newEl:z,same:false});}else O?(H.textContent=O,c.push({oldEl:null,newEl:null,same:true})):M?(H.style.opacity="0",H.textContent=M,c.push({oldEl:null,newEl:H,same:false})):c.push({oldEl:null,newEl:null,same:true});}let f=0,u=Math.max(120,Math.min(280,n*.43)),d=Math.min(20,Math.max(8,u*.12)),C=false,x=()=>{C||(C=true,t.textContent=s,t.style.willChange="auto",t.style.minHeight="",t.style.width="",t.style.display=h);},Y=()=>{f--,f<=0&&(x(),e==null||e());};if(c.forEach((b,O)=>{if(!b.same){if(b.oldEl){f++;let M=b.oldEl.animate([{opacity:1,transform:"translateY(0)",filter:"blur(0px)"},{opacity:0,transform:"translateY(-6px)",filter:"blur(1.5px)"}],{duration:u,delay:O*d,easing:ct,fill:"forwards"});M.onfinish=Y,M.oncancel=()=>{b.oldEl.style.willChange="auto";};}if(b.newEl){f++;let M=b.newEl.animate([{opacity:0,transform:"translateY(8px)",filter:"blur(2px)"},{opacity:1,transform:"translateY(0)",filter:"blur(0px)"}],{duration:u,delay:O*d+u*.3,easing:Rt,fill:"forwards"});M.onfinish=Y,M.oncancel=()=>{b.newEl.style.willChange="auto";};}}}),f<=0){x(),e==null||e();return}let P=t.animate([{opacity:1},{opacity:1}],{duration:u+p*d+u+120,fill:"forwards"});return P.oncancel=x,P}function pe(t,r,i,n,e){var y;let o=r!=null?r:"",s=(y=i!=null?i:t.textContent)!=null?y:"";if(!o&&!s)return;let{oldEl:a,newEl:l,cleanup:p}=ft(t,o,s);a.style.opacity="1",a.style.transform="translateY(0)",a.style.filter="blur(0px)",a.style.willChange="transform, opacity, filter",l.style.opacity="0",l.style.transform="translateY(0.16em)",l.style.filter="blur(1.8px)",l.style.willChange="transform, opacity, filter",a.animate([{opacity:1,transform:"translateY(0)",filter:"blur(0px)"},{opacity:.72,transform:"translateY(-0.04em)",filter:"blur(0.35px)",offset:.58},{opacity:0,transform:"translateY(-0.14em)",filter:"blur(1.5px)"}],{duration:Math.max(150,n*.42),easing:F,fill:"forwards"});let h=l.animate([{opacity:0,transform:"translateY(0.16em)",filter:"blur(1.8px)"},{opacity:.78,transform:"translateY(0.025em)",filter:"blur(0.35px)",offset:.55},{opacity:1,transform:"translateY(0)",filter:"blur(0px)"}],{duration:Math.max(220,n*.62),delay:Math.min(80,Math.max(30,n*.12)),easing:F,fill:"forwards"});return h.onfinish=()=>{p(),e==null||e();},h.oncancel=p,h}function me(t,r,i,n,e,o){var f;let s=r!=null?r:"",a=(f=i!=null?i:t.textContent)!=null?f:"";if(!s&&!a)return;let l=t.getBoundingClientRect().width,{oldEl:p,newEl:h,cleanup:y}=ft(t,s,a);h.style.transform=`translateX(${l*n}px)`,p.animate([{transform:"translateX(0)"},{transform:`translateX(${-l*n}px)`}],{duration:e*.4,easing:ct,fill:"forwards"});let c=h.animate([{transform:`translateX(${l*n}px)`},{transform:"translateX(0)"}],{duration:e*.6,easing:lt,fill:"forwards"});return c.onfinish=()=>{y(),o==null||o();},c.oncancel=y,c}function ye(t,r,i,n,e){var y;let o=r!=null?r:"",s=(y=i!=null?i:t.textContent)!=null?y:"";if(!o&&!s)return;let{oldEl:a,newEl:l,cleanup:p}=ft(t,o,s);a.style.opacity="1",l.style.opacity="0",a.animate([{opacity:1},{opacity:0}],{duration:n,easing:F,fill:"forwards"});let h=l.animate([{opacity:0},{opacity:1}],{duration:n,easing:F,fill:"forwards"});return h.onfinish=()=>{p(),e==null||e();},h.oncancel=p,h}function de(t,r,i){let n=getComputedStyle(t).color,e=document.createElement("div");e.style.position="absolute",e.style.inset="0",e.style.background=`linear-gradient(to bottom, ${n} 0%, transparent 100%)`,e.style.pointerEvents="none";let o=t.style.position,s=t.style.overflow;t.style.position="relative",t.style.overflow="hidden",t.appendChild(e);let a=e.animate([{transform:"translateY(0%)"},{transform:"translateY(-100%)"}],{duration:r,easing:gt,fill:"forwards"}),l=()=>{e.remove(),t.style.position=o,t.style.overflow=s;};return a.onfinish=()=>{l(),i==null||i();},a.oncancel=l,a}function he(t,r,i,n,e,o="persist",s=800){var W;let a=(W=Xt(t))!=null?W:t,l=r||a.textContent||"";if(!l){e==null||e();return}let p={minHeight:a.style.minHeight,overflow:a.style.overflow},h=a.getBoundingClientRect();h.height>0&&(a.style.minHeight=p.minHeight||`${Math.ceil(h.height)}px`),a.style.overflow="visible";let y=n!=null?n:we(getComputedStyle(a).color,.55);a.textContent="";let c=document.createElement("span");c.textContent=l,c.style.display="inline",c.style.willChange="background-size, background-position",c.style.background=`linear-gradient(120deg, ${y} 50%, transparent 50%)`,c.style.backgroundSize="200% 100%",c.style.backgroundRepeat="no-repeat",c.style.backgroundPosition="100% 0",c.style.borderRadius="0.18em",c.style.paddingInline="0.08em",c.style.marginInline="-0.08em",c.style.boxDecorationBreak="clone",c.style.webkitBoxDecorationBreak="clone",a.appendChild(c);let f=Math.max(260,wt(i,600)),u=false,d=false,C=()=>{u||(u=true,c.style.willChange="auto",a.style.minHeight=p.minHeight,a.style.overflow=p.overflow);},x=()=>{u||(u=true,c.style.willChange="auto",c.style.background="",c.style.backgroundSize="",c.style.backgroundRepeat="",c.style.backgroundPosition="",c.parentElement===a&&(a.textContent=l),a.style.minHeight=p.minHeight,a.style.overflow=p.overflow);},Y=c.animate([{backgroundPosition:"100% 0"},{backgroundPosition:"0% 0"}],{duration:f,fill:"forwards",easing:"cubic-bezier(0.22, 1, 0.36, 1)"});Y.onfinish=()=>{if(!d)if(e==null||e(),o==="pulse"){let w=c.animate([{backgroundPosition:"0% 0"},{backgroundPosition:"120% 0"}],{duration:Math.min(500,s*.5),easing:lt,fill:"forwards",delay:s});w.onfinish=()=>{x();},w.oncancel=()=>{x();};}else if(o==="erase"){let w=c.animate([{backgroundPosition:"0% 0"},{backgroundPosition:"120% 0"}],{duration:f*.6,easing:lt,fill:"forwards",delay:200});w.onfinish=()=>{x();},w.oncancel=()=>{x();};}else C();},Y.oncancel=()=>{d=true,x();};let P=a.animate([{opacity:1},{opacity:1}],{duration:f+100,fill:"forwards"});return P.oncancel=x,P}function ge(t,r,i,n,e){var P,W;let o=r!=null?r:"",s=(P=Xt(t))!=null?P:t,a=(W=i!=null?i:s.textContent)!=null?W:"";if(!a)return;let l=o.match(/\S+|\s+/g)||[],p=a.match(/\S+|\s+/g)||[],h={minHeight:s.style.minHeight,overflow:s.style.overflow},y=s.getBoundingClientRect();y.height>0&&(s.style.minHeight=h.minHeight||`${Math.ceil(y.height)}px`),s.style.overflow="visible",s.textContent="";let c=[];for(let w=0;w<p.length;w++){let S=p[w];if(/^\s+$/.test(S))s.appendChild(document.createTextNode(S));else {let b=document.createElement("span");b.textContent=S,b.style.willChange="transform, opacity, filter",b.style.display="inline-block",(w>=l.length||l[w]!==S)&&b.setAttribute("data-diff",""),s.appendChild(b),(w>=l.length||l[w]!==S)&&c.push(b);}}let f=false,u=()=>{f||(f=true,c.forEach(w=>{w.style.willChange="auto",w.style.transform="",w.style.filter="";}),(c.length===0||c.some(w=>w.parentElement===s))&&(s.textContent=a),s.style.minHeight=h.minHeight,s.style.overflow=h.overflow);};if(c.length===0){u(),e==null||e();return}let d=c.length,C=(c.length-1)*30,x=n+C;c.forEach((w,S)=>{let b=w.animate([{opacity:0,transform:"translateY(0.16em)",filter:"blur(1.5px)"},{opacity:1,transform:"translateY(0)",filter:"blur(0px)"}],{duration:n,delay:S*30,fill:"forwards",easing:F});b.onfinish=()=>{d--,d===0&&(u(),e==null||e());},b.oncancel=u;});let Y=s.animate([{opacity:1},{opacity:1}],{duration:x,fill:"forwards"});return Y.oncancel=u,Y}function xe(t,r,i,n,e){let o=r!=null?r:"",s=i!=null?i:"",a=o?Ct(t,o).height:0,l=s?Ct(t,s).height:t.scrollHeight;if(!a&&!l){e==null||e();return}if(a===l){e==null||e();return}let{cleanup:y}=ft(t,o,s);t.style.minHeight="",t.style.overflow="hidden",t.style.height=`${Math.ceil(a)}px`,t.offsetHeight;let c=t.animate([{height:`${Math.ceil(a)}px`},{height:`${Math.ceil(l)}px`}],{duration:n,easing:gt,fill:"forwards"});function f(){t.style.overflow="",t.style.height="",t.style.minHeight="";}return c.onfinish=()=>{f(),y(),e==null||e();},c.oncancel=()=>{f(),y();},c}function be(t,r,i,n,e){let o=document.createElement("span");o.textContent="|",o.style.display="inline-block",o.style.width="0.6em",o.style.fontWeight="300",o.style.opacity="1",t.appendChild(o);let s=wt(n,800),a=o.animate([{opacity:1},{opacity:.3}],{duration:s/2,iterations:1/0,direction:"alternate",easing:"steps(1)",fill:"forwards"}),l=false,p=()=>{l||(l=true,o.remove());};return a.oncancel=()=>{p(),e==null||e();},queueMicrotask(()=>e==null?void 0:e()),a}function we(t,r){let i=t.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)/);return i?`rgba(${i[1]}, ${i[2]}, ${i[3]}, ${r})`:`rgba(0, 0, 0, ${r})`}function Xt(t){var r,i;for(let n of t.children)if(n instanceof HTMLElement&&n.childElementCount===0&&((i=(r=n.textContent)==null?void 0:r.trim())!=null?i:"").length>0)return n;return null}function ft(t,r,i){var l;let n=t.getBoundingClientRect().height;t.style.minHeight=n+"px";(l=t.textContent)!=null?l:"";t.textContent="";let o=document.createElement("span");o.textContent=r||"\xA0",o.style.opacity="0",o.style.pointerEvents="none",t.appendChild(o),t.style.position="relative";let s=document.createElement("div"),a=document.createElement("div");return s.textContent=r||"\xA0",a.textContent=i||"\xA0",s.style.position="absolute",s.style.inset="0",a.style.position="absolute",a.style.inset="0",t.appendChild(s),t.appendChild(a),{oldEl:s,newEl:a,cleanup:()=>{t.style.position="",t.textContent=i;}}}function Ce(t,r,i){let n=Ct(t,r),e=Ct(t,i),o=Math.max(n.width,e.width);t.dataset.motifPrevWidth=t.style.width,t.dataset.motifPrevMinHeight=t.style.minHeight,t.style.width=`${Math.ceil(o)}px`,t.style.minHeight=`${Math.ceil(n.height)}px`;}var Me={morph:Jt,morphText:Jt,fadeSwap:pe,slideReplace:(t,r,i,n,e)=>me(t,r,i,1,n,e),crossFade:ye,fadeMask:(t,r,i,n,e)=>de(t,n,e),highlight:(t,r,i,n,e,o,s,a)=>he(t,i!=null?i:"",n,o,e,s,a),diffAnimate:ge,heightAuto:xe,cursorBlink:be};function ve(t,r){if(!r)return t;let{distance:i,scale:n,blur:e}=r;return t.map(o=>{let s=o.transform,a=o.filter;return i!==void 0&&s&&(s=s.replace(/translateY\((-?\d+(?:\.\d+)?)(px)?\)/g,(l,p)=>`translateY(${Math.round(Number(p)*(i/32))}px)`),s=s.replace(/translateX\((-?\d+(?:\.\d+)?)(px)?\)/g,(l,p)=>`translateX(${Math.round(Number(p)*(i/32))}px)`)),n!==void 0&&s&&(s=s.replace(/scale\((-?[\d.]+(?:,\s*-?[\d.]+)?)\)/g,`scale(${n})`)),e!==void 0&&a&&(a=a.replace(/blur\((\d+)px\)/g,`blur(${e}px)`)),{...o,transform:s,filter:a}})}function He(t,r,i,n="single",e){t.style.willChange="transform, opacity, filter";let o=xt[r];if(!o){qt.has(r)||(qt.add(r),console.warn(`[trigr] Unknown paragraph animation "${r}"`));let f=t.animate([],i);return f.addEventListener("finish",()=>{t.style.willChange="auto";}),f.addEventListener("cancel",()=>{t.style.willChange="auto";}),f}let s=n==="change"?[...o.out,...o.in]:o.in.length?[...o.in]:[...o.out],a=ve(s,e),l=Mt()?a.map(({opacity:f})=>({opacity:f!=null?f:1})):a,p=t.style.transformOrigin,h=a.some(f=>{var u;return (u=f.transform)==null?void 0:u.includes("scaleY")});h&&(t.style.transformOrigin="top");let y=l[0];y&&(y.opacity!==void 0&&(t.style.opacity=String(y.opacity)),y.transform!==void 0&&(t.style.transform=String(y.transform)),y.filter!==void 0&&(t.style.filter=String(y.filter)));let c=t.animate(l,{...i,fill:"forwards"});return c.addEventListener("finish",()=>{let f=l[0],u=l[l.length-1];if(u){let d=f.opacity!==void 0,C=f.filter!==void 0;u.opacity!==void 0?t.style.opacity=String(u.opacity):d&&(t.style.opacity="1"),u.transform!==void 0&&(t.style.transform=String(u.transform)),u.filter!==void 0?t.style.filter=String(u.filter):C&&(t.style.filter="blur(0px)");}h&&(t.style.transformOrigin=p),t.style.willChange="auto";}),c.addEventListener("cancel",()=>{var u;let f=l[l.length-1];f&&(f.opacity!==void 0&&(t.style.opacity=(u=String(f.opacity))!=null?u:1),f.transform!==void 0&&(t.style.transform=String(f.transform)),f.filter!==void 0&&(t.style.filter=String(f.filter))),h&&(t.style.transformOrigin=p),t.style.willChange="auto";}),c}function Te(t,r,i=.4,n){let e=Xt(t),o=r||(e==null?void 0:e.textContent)||t.textContent||"",s=o.length>20;if(e&&!s){let a=t.style.width,l=t.style.minHeight,p=t.style.overflow,h=Gt(o),y=h.filter(d=>d instanceof HTMLSpanElement);if(y.length===0){n==null||n();return}let c=t.getBoundingClientRect();t.style.width=a||`${Math.ceil(c.width)}px`,t.style.minHeight=l||`${Math.ceil(c.height)}px`,t.style.overflow="hidden";let f=e.innerHTML;e.textContent="";for(let d of h)e.appendChild(d),d instanceof HTMLSpanElement&&(d.style.opacity="0.18",d.style.transition="opacity 120ms linear",d.style.willChange="opacity");let u=new IntersectionObserver(d=>{for(let C of d)if(C.isIntersecting){let x=C.target;x.style.opacity="1",u.unobserve(x);}},bt(t,i));return y.forEach(d=>u.observe(d)),()=>{u.disconnect(),y.forEach(d=>d.style.willChange="auto"),e.innerHTML=f,t.style.width=a,t.style.minHeight=l,t.style.overflow=p,n==null||n();}}if(s){let a=e||t,l=ue(o,a);if(l.length>1){let p=t.style.width,h=t.style.minHeight,y=t.style.overflow,c=a.innerHTML,f=t.getBoundingClientRect();t.style.width=p||`${Math.ceil(f.width)}px`,t.style.minHeight=h||`${Math.ceil(f.height)}px`,t.style.overflow="hidden",a.textContent="";for(let d of l)d.style.opacity="0.18",d.style.transition="opacity 120ms linear",d.style.willChange="opacity",a.appendChild(d);let u=new IntersectionObserver(d=>{for(let C of d)if(C.isIntersecting){let x=C.target;x.style.opacity="1",u.unobserve(x);}},bt(t,i));return l.forEach(d=>u.observe(d)),()=>{u.disconnect(),l.forEach(d=>d.style.willChange="auto"),a.innerHTML=c,t.style.width=p,t.style.minHeight=h,t.style.overflow=y,n==null||n();}}}{let a=e||t,l=a===e,p=t.style.width,h=t.style.minHeight,y=t.style.overflow,c=Gt(o),f=c.filter(x=>x instanceof HTMLSpanElement);if(f.length===0)return n==null||n(),()=>{};let u=t.getBoundingClientRect();t.style.width=p||`${Math.ceil(u.width)}px`,t.style.minHeight=h||`${Math.ceil(u.height)}px`,t.style.overflow="hidden";let d=a.innerHTML;a.textContent="";for(let x of c)a.appendChild(x),x instanceof HTMLSpanElement&&(x.style.opacity="0.18",x.style.transition="opacity 120ms linear",x.style.willChange="opacity");let C=new IntersectionObserver(x=>{for(let Y of x)if(Y.isIntersecting){let P=Y.target;P.style.opacity="1",C.unobserve(P);}},bt(t,i));return f.forEach(x=>C.observe(x)),()=>{C.disconnect(),f.forEach(x=>x.style.willChange="auto"),l?a.innerHTML=d:t.textContent="",t.style.width=p,t.style.minHeight=h,t.style.overflow=y,n==null||n();}}}var Se=forwardRef(function({value:r,triggers:i,trigger:n="change",animation:e,scrollAnimation:o,properties:s,exitAnimation:a,show:l,unmountOnExit:p=true,highlightColor:h,highlightMode:y="persist",highlightHold:c=800,duration:f=300,easing:u=F,delay:d=0,threshold:C=.4,repeat:x=false,once:Y,as:P="div",className:W,style:w,onClick:S,onEnter:b,onExit:O,onHoverStart:M,onHoverEnd:$,onAnimationEnd:H,presetOptions:N,children:z},Ye){var _t,Ft,Nt,zt;let T=useRef(null),j=useRef(null),vt=useRef(null),G=useRef(null),ut=useRef(null),K=useRef(null),Qt=useRef(0),$t=useRef(r),rt=useRef(false),it=useRef([]),It=useRef(0),pt=useRef(false),_=useRef(null),Ht=useRef(0),[Dt,Wt]=useState(0),[k,Tt]=useState(null),[Zt,J]=useState(l!==false?"entered":"exited"),{changed:St,prev:Lt,current:Kt}=Ut(r),Bt=useRef(Lt);St&&(Bt.current=Lt);let Et=Y!=null?Y:!x,mt=useMemo(()=>i?i.map(g=>{var L;return {trigger:g.trigger,animation:g.animation,threshold:(L=g.threshold)!=null?L:C}}):(Array.isArray(n)?n.slice(0,2):[n]).map(g=>({trigger:g,animation:g==="scroll"&&o?o:e,threshold:C})),[i,n,e,o,C]),Yt=useMemo(()=>mt.map(m=>m.trigger),[mt]),R=useCallback(m=>Yt.includes(m),[Yt]),Vt=(Ft=(_t=k==null?void 0:k.source)!=null?_t:Yt[0])!=null?Ft:"change",Ot=mt.find(m=>m.trigger===Vt),Q=(Nt=Ot==null?void 0:Ot.animation)!=null?Nt:e,At=mt.find(m=>m.trigger==="scroll"),yt=(zt=At==null?void 0:At.threshold)!=null?zt:C,Z=useCallback(()=>{K.current!==null&&(clearTimeout(K.current),K.current=null),rt.current=false,j.current=null,H==null||H();let m=it.current.shift();m?(rt.current=true,Tt({id:++It.current,source:m}),Wt(g=>g+1)):Tt(null);},[H]),B=useCallback(m=>{if(rt.current){m!=="scroll"&&it.current.length<2&&it.current.push(m);return}rt.current=true,Tt({id:++It.current,source:m}),Wt(g=>g+1);},[]);useEffect(()=>{if(!R("scroll"))return;let m=T.current;if(!m)return;pt.current=false;let g=new IntersectionObserver(([L])=>{if(L.isIntersecting){if(pt.current)return;pt.current=true,b==null||b(),B("scroll"),Et&&g.disconnect();}else pt.current=false,x&&(O==null||O());},bt(m,yt));return g.observe(m),()=>g.disconnect()},[R,b,O,x,B,Et,yt]),useEffect(()=>{R("change")&&St&&B("change");},[St,R,B]),useEffect(()=>{R("mount")&&B("mount");},[R,B]),useEffect(()=>{var at,st;if(l===void 0)return;if(l){(at=_.current)==null||at.cancel(),_.current=null,J("entered");return}let m=++Ht.current;if(!a){J("exited");return}let g=T.current;if(!g){J("exited");return}(st=j.current)==null||st.cancel(),j.current=null,rt.current=false,it.current=[];let L=wt(f,300),X=xt[a];if(!X){J("exited");return}let dt=()=>{Ht.current===m&&(J("exited"),_.current=null);};J("exiting");let I=X.out.length?X.out:X.in.length?X.in:[{opacity:0}];g.style.willChange="transform, opacity, filter";let q=g.style.transformOrigin,V=I.some(v=>{var ot;return (ot=v.transform)==null?void 0:ot.includes("scaleY")});V&&(g.style.transformOrigin="top");let D=I[0];D&&(D.opacity!==void 0&&(g.style.opacity=String(D.opacity)),D.transform!==void 0&&(g.style.transform=String(D.transform)),D.filter!==void 0&&(g.style.filter=String(D.filter)));let ht=Mt()?I.map(({opacity:v})=>({opacity:v!=null?v:1})):I;return _.current=g.animate(ht,{duration:L,easing:u,fill:"forwards"}),_.current.addEventListener("finish",()=>{let v=I[I.length-1];v&&(v.opacity!==void 0&&(g.style.opacity=String(v.opacity)),v.transform!==void 0&&(g.style.transform=String(v.transform)),v.filter!==void 0&&(g.style.filter=String(v.filter))),V&&(g.style.transformOrigin=q),g.style.willChange="auto",dt();}),_.current.addEventListener("cancel",()=>{V&&(g.style.transformOrigin=q),g.style.willChange="auto";}),()=>{var v;Ht.current===m&&((v=_.current)==null||v.cancel(),_.current=null);}},[l,a,f,u]);let te=useCallback(m=>{S==null||S(m),R("click")&&B("click");},[R,S,B]),ee=useCallback(()=>{M==null||M(),R("hover")&&B("hover");},[R,M,B]),ne=useCallback(()=>$==null?void 0:$(),[$]);return useEffect(()=>{var X;if(Q!=="scrollWordReveal"||!R("scroll")||!k||k.source!=="scroll")return;let m=T.current;if(!m)return;let g=String((X=r!=null?r:m.textContent)!=null?X:"");if(!g)return;let L=Te(m,g,yt,Z);return ()=>L==null?void 0:L()},[Q,k,Z,R,yt,r]),r!==$t.current&&T.current&&(Qt.current=T.current.offsetHeight),$t.current=r,useLayoutEffect(()=>{var st,v,ot;if(Dt<=0||!k||!T.current||Q==="scrollWordReveal"&&k.source==="scroll")return;le(T.current),j.current=null,vt.current=null,(st=G.current)==null||st.call(G),ut.current!==null&&clearTimeout(ut.current),K.current!==null&&(clearTimeout(K.current),K.current=null),T.current.dataset.motifPrevWidth!==void 0&&(T.current.style.width=T.current.dataset.motifPrevWidth,delete T.current.dataset.motifPrevWidth),T.current.dataset.motifPrevMinHeight!==void 0&&(T.current.style.minHeight=T.current.dataset.motifPrevMinHeight,delete T.current.dataset.motifPrevMinHeight);let m=T.current,g=k.source==="change"?Kt:(v=r!=null?r:m.textContent)!=null?v:"",L=String(g),X=Mt(),dt=wt(f,300),I=X?dt/2:dt,q=k.source==="change"?Bt.current:void 0,V=k.source==="change"&&q!==void 0,D=V?()=>{m.dataset.motifPrevWidth!==void 0&&(m.style.width=m.dataset.motifPrevWidth,delete m.dataset.motifPrevWidth),m.dataset.motifPrevMinHeight!==void 0&&(m.style.minHeight=m.dataset.motifPrevMinHeight,delete m.dataset.motifPrevMinHeight),Z();}:Z;K.current=setTimeout(()=>{K.current=null,D();},Math.max(900,I*2+600)),V&&Ce(m,String(q),L),vt.current=fe(m,s,{duration:I,easing:u,delay:d});let ht=Me[Q];if(ht){j.current=(ot=ht(m,q!==void 0?String(q):void 0,L,I,D,h,y,c))!=null?ot:null;return}let at=He(m,Q,{duration:I,easing:u,delay:d},k.source==="change"?"change":"single",N);j.current=at,at.onfinish=D;},[Q,k,d,f,u,Z,h,Dt,Lt,s,r,Kt]),useEffect(()=>()=>{var m,g,L,X;(m=j.current)==null||m.cancel(),(g=vt.current)==null||g.cancel(),(L=_.current)==null||L.cancel(),(X=G.current)==null||X.call(G),ut.current!==null&&clearTimeout(ut.current),K.current!==null&&clearTimeout(K.current),it.current=[];},[]),Zt==="exited"&&p!==false?null:createElement(P,{ref:T,className:W,style:w,onClick:R("click")||S?te:void 0,onMouseEnter:R("hover")||M?ee:void 0,onMouseLeave:$?ne:void 0},z)}),Le={Paragraph:Se},De=Le;export{Le as Animate,Se as AnimateParagraph,lt as EASE_IN,gt as EASE_IN_OUT,ct as EASE_OUT,F as SMOOTH,Rt as SPRING,De as default,xt as presets};//# sourceMappingURL=index.js.map
|
|
3
|
+
//# sourceMappingURL=index.js.map
|