@drivexstudio/animations 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +18 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/index.js","../packages/animations/ScrambleText.jsx","../libs/vendor.js","../packages/animations/ScrambleGroup.jsx","../libs/hooks/useIdleGSAP.js","../libs/hooks/usePageTransition.js","../packages/providers/PageTransitionProvider.jsx","../packages/providers/LenisProvider.jsx","../libs/constants/chars.js","../packages/animations/AnimatedHeadline.jsx","../packages/animations/AnimatedButton.jsx","../libs/hooks/useDualLayerScramble.js","../packages/animations/AnimatedLink.jsx","../packages/animations/AnimatedProse.jsx","../libs/utils/easings.js","../packages/animations/AnimatedSubtext.jsx","../packages/animations/AnimatedText.jsx","../packages/animations/ScrollAnimatedHeadline.jsx","../packages/animations/Preloader.jsx","../packages/providers/PreloaderProvider.jsx","../packages/providers/PageEnterProvider.jsx","../libs/hooks/usePageEnter.js","../libs/hooks/useBreakpoint.js","../libs/constants/timing.js","../libs/hooks/useAsciiDelay.js"],"sourcesContent":["/* ---------------------------------------------------------------------- *\n * @drivexstudio/animations — public entry point\n * ---------------------------------------------------------------------- */\n\n// Animation components\nexport { default as ScrambleText } from './animations/ScrambleText.jsx';\nexport { default as ScrambleGroup, useScrambleGroup } from './animations/ScrambleGroup.jsx';\nexport { default as AnimatedHeadline } from './animations/AnimatedHeadline.jsx';\nexport { default as AnimatedButton } from './animations/AnimatedButton.jsx';\nexport { default as AnimatedLink } from './animations/AnimatedLink.jsx';\nexport { AnimatedProse, AnimatedProseContext, stagger } from './animations/AnimatedProse.jsx';\nexport { default as AnimatedSubtext } from './animations/AnimatedSubtext.jsx';\nexport { default as AnimatedText } from './animations/AnimatedText.jsx';\nexport { default as ScrollAnimatedHeadline } from './animations/ScrollAnimatedHeadline.jsx';\nexport { default as Preloader } from './animations/Preloader.jsx';\n\n// Providers — several components (Preloader, page-transition-aware\n// components) need these ancestors mounted somewhere above them in the\n// consumer's app tree to function correctly.\nexport { default as PreloaderProvider, usePreloader } from './providers/PreloaderProvider.jsx';\nexport { PageEnterProvider, usePageEnterContext } from './providers/PageEnterProvider.jsx';\nexport { PageTransitionProvider, usePageTransitionContext } from './providers/PageTransitionProvider.jsx';\nexport {\n LenisProvider,\n useLenis,\n getLenis,\n scrollToTop,\n setCssScrollLocked,\n getCssScrollLocked\n} from './providers/LenisProvider.jsx';\n\n// Hooks\nexport { usePageEnter } from '../libs/hooks/usePageEnter.js';\nexport { usePageTransition } from '../libs/hooks/usePageTransition.js';\nexport { useIdleGSAP } from '../libs/hooks/useIdleGSAP.js';\nexport { useAsciiDelay } from '../libs/hooks/useAsciiDelay.js';\nexport { default as useDualLayerScramble } from '../libs/hooks/useDualLayerScramble.js';\n\n// Low-level utilities, exposed for advanced consumers who want to\n// customize easing/GSAP plugin wiring without pulling in a component.\nexport { gsap, useGSAP, ScrollTrigger, SplitText, ScrambleTextPlugin, cx, cva } from '../libs/vendor.js';\nexport { easingDefinitionToFunction } from '../libs/utils/easings.js';\nexport { DEFAULT_CHARS } from '../libs/constants/chars.js';\n","\"use client\";\n\nimport React, { useEffect, useRef } from 'react';\nimport { gsap, ScrambleTextPlugin } from '../../libs/vendor.js';\nimport { useScrambleGroup } from './ScrambleGroup.jsx';\nimport { DEFAULT_CHARS } from '../../libs/constants/chars.js';\n\nexport default function ScrambleText({\n children,\n className,\n duration = 0.6,\n chars = DEFAULT_CHARS,\n dualLayer = true,\n triggerOnHover = false,\n revealMode = false,\n theme = \"dark\",\n firstColorClass,\n secondColorClass,\n onComplete,\n onReady,\n multiLine = false\n}) {\n const containerRef = useRef(null);\n const textElementRef = useRef(null);\n const timelineRef = useRef(null);\n const internalTextRef = useRef(\"\");\n const isCompleteRef = useRef(false);\n\n const instanceIdRef = useRef(`scramble-${Math.random().toString(36).slice(2, 9)}`);\n\n const themeColors = theme === \"brand\" \n ? { firstColorClass: \"scramble-white\", secondColorClass: \"scramble-foreground\" } \n : { firstColorClass: \"scramble-brand\", secondColorClass: \"scramble-foreground\" };\n\n const color1 = firstColorClass ?? themeColors.firstColorClass;\n const color2 = secondColorClass ?? themeColors.secondColorClass;\n\n const scrambleGroup = useScrambleGroup();\n\n let childText;\n if (typeof children === \"string\") {\n childText = children;\n } else if (typeof children === \"number\") {\n childText = String(children);\n } else {\n childText = \"\";\n }\n\n useEffect(() => {\n internalTextRef.current = childText;\n }, [childText]);\n\n const killTimeline = () => {\n if (timelineRef.current) {\n timelineRef.current.kill();\n timelineRef.current = null;\n }\n };\n\n const triggerAnimation = () => {\n if (!textElementRef.current) return null;\n \n const targetEl = textElementRef.current;\n const textToScramble = internalTextRef.current || childText;\n\n if (!textToScramble || textToScramble.length === 0) return null;\n\n // Respect reduced motion preference\n if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) {\n targetEl.textContent = textToScramble;\n targetEl.className = targetEl.className.replace(/\\bscramble-\\w+\\b/g, \"\");\n isCompleteRef.current = true;\n onComplete?.();\n return null;\n }\n\n killTimeline();\n\n timelineRef.current = gsap.timeline({\n onComplete: () => {\n timelineRef.current = null;\n isCompleteRef.current = true;\n onComplete?.();\n }\n });\n\n if (dualLayer) {\n const generateScrambledString = (targetString, charset = DEFAULT_CHARS) => {\n let result = \"\";\n for (let t = 0; t < targetString.length; t++) {\n let char = targetString[t];\n if (char === \" \" || char === \"\\n\" || char === \"\\r\") {\n result += char;\n } else {\n result += charset[Math.floor(Math.random() * charset.length)];\n }\n }\n return result;\n };\n\n const scrambledText = generateScrambledString(textToScramble, chars);\n const nonWhitespaceLength = textToScramble.replace(/\\s/g, \"\").length;\n const stepDuration = nonWhitespaceLength > 0 ? duration / nonWhitespaceLength : 0;\n\n if (revealMode && !isCompleteRef.current) {\n targetEl.textContent = textToScramble.replace(/[^\\s\\n\\r]/g, \" \");\n timelineRef.current.to(targetEl, {\n duration: duration,\n scrambleText: {\n text: scrambledText,\n chars: chars,\n speed: 1,\n revealDelay: 0.1,\n oldClass: color1,\n newClass: color1\n },\n ease: \"none\"\n });\n } else {\n timelineRef.current.to(targetEl, {\n duration: duration,\n scrambleText: {\n text: scrambledText,\n chars: chars,\n speed: 1,\n revealDelay: 0.1,\n oldClass: color2,\n newClass: color1\n },\n ease: \"none\"\n });\n }\n\n timelineRef.current.to(targetEl, {\n duration: duration,\n scrambleText: {\n text: textToScramble,\n chars: chars,\n speed: 1,\n revealDelay: 0.1,\n oldClass: color1,\n newClass: color2\n },\n ease: \"none\"\n }, stepDuration);\n\n } else {\n timelineRef.current.to(targetEl, {\n duration: duration,\n scrambleText: {\n text: textToScramble,\n chars: chars,\n speed: 1,\n revealDelay: 0.2\n },\n ease: \"none\"\n });\n }\n\n return timelineRef.current;\n };\n\n\n useEffect(() => {\n if (scrambleGroup) {\n scrambleGroup.register(instanceIdRef.current, triggerAnimation);\n return () => {\n scrambleGroup.unregister(instanceIdRef.current);\n };\n }\n }, [scrambleGroup, triggerAnimation]);\n\n useEffect(() => {\n onReady?.(triggerAnimation);\n }, [onReady, triggerAnimation]);\n\n const handleMouseEnter = () => {\n if (triggerOnHover) {\n triggerAnimation();\n }\n };\n\n useEffect(() => {\n return () => {\n killTimeline();\n };\n }, []);\n\n const initialDisplayText = revealMode ? childText.replace(/[^\\s\\n\\r]/g, \" \") : childText;\n const whiteSpaceValue = multiLine ? \"normal\" : \"nowrap\";\n const displayValue = multiLine ? \"inline\" : \"inline-block\";\n\n const containerStyle = {\n position: \"relative\",\n display: displayValue,\n whiteSpace: whiteSpaceValue\n };\n\n const hiddenSpanStyle = {\n visibility: \"hidden\",\n whiteSpace: whiteSpaceValue\n };\n\n const animatedSpanStyle = {\n position: \"absolute\",\n top: 0,\n left: 0,\n whiteSpace: whiteSpaceValue,\n ...(multiLine ? { width: \"100%\" } : {})\n };\n\n return (\n <span\n ref={containerRef}\n className={className}\n style={containerStyle}\n onMouseEnter={triggerOnHover ? handleMouseEnter : undefined}\n >\n <span className=\"sr-only\">{childText}</span>\n <span aria-hidden=\"true\" style={hiddenSpanStyle}>\n {childText}\n </span>\n <span ref={textElementRef} aria-hidden=\"true\" style={animatedSpanStyle}>\n {initialDisplayText}\n </span>\n </span>\n );\n}","import gsap from 'gsap';\nimport { useGSAP } from '@gsap/react';\nimport { ScrollTrigger } from 'gsap/ScrollTrigger';\nimport { Flip } from 'gsap/Flip';\nimport { SplitText } from 'gsap/SplitText';\nimport { ScrambleTextPlugin } from 'gsap/ScrambleTextPlugin';\nimport { InertiaPlugin } from 'gsap/InertiaPlugin';\nimport { Draggable } from 'gsap/Draggable';\nimport { cx as classVarianceCx } from \"class-variance-authority\";\n\ngsap.registerPlugin(\n ScrollTrigger, \n ScrambleTextPlugin, \n SplitText, \n Flip,\n Draggable,\n InertiaPlugin\n );\n\nexport { \n gsap, \n useGSAP, \n ScrollTrigger, \n SplitText, \n ScrambleTextPlugin, \n Flip,\n Draggable,\n InertiaPlugin\n };\n\n\nexport const cx = classVarianceCx;\nexport { cva } from \"class-variance-authority\";\n","import React, { createContext, useContext, useRef, useState, useCallback, useMemo } from 'react';\nimport { gsap, ScrollTrigger } from '../../libs/vendor.js';\nimport { useIdleGSAP } from '../../libs/hooks/useIdleGSAP.js';\n\nconst ScrambleContext = createContext(null);\n\nexport default function ScrambleGroup({\n children,\n stagger = 0.1,\n start = \"top 80%\",\n markers = false,\n manual = false,\n className\n}) {\n const childrenMapRef = useRef(new Map());\n \n const [hasTriggered, setHasTriggered] = useState(false);\n const isTriggering = useRef(false);\n const scrollTriggerRef = useRef(null);\n const containerRef = useRef(null); \n\n const register = useCallback((id, callback) => {\n childrenMapRef.current.set(id, callback);\n }, []);\n\n const unregister = useCallback((id) => {\n childrenMapRef.current.delete(id);\n }, []);\n\n const triggerAll = useCallback((customStagger) => {\n if (isTriggering.current) return;\n \n isTriggering.current = true;\n \n const callbacks = Array.from(childrenMapRef.current.values());\n const staggerValue = customStagger ?? stagger;\n\n callbacks.forEach((callbackFn, index) => {\n gsap.delayedCall(index * staggerValue, () => {\n callbackFn();\n });\n });\n\n setHasTriggered(true);\n }, [stagger]);\n\n const setupScrollTrigger = useCallback(() => {\n if (manual || !containerRef.current) return;\n isTriggering.current = false;\n const tween = gsap.to(containerRef.current, {\n scrollTrigger: {\n trigger: containerRef.current,\n start: start,\n markers: markers,\n toggleActions: \"play none none none\"\n },\n onStart: () => {\n triggerAll();\n },\n duration: 0.001\n });\n\n scrollTriggerRef.current = tween.scrollTrigger ?? null;\n\n return () => {\n tween.kill();\n scrollTriggerRef.current?.kill();\n };\n }, [manual, start, markers, triggerAll]);\n\n useIdleGSAP(setupScrollTrigger, {\n dependencies: [manual, start, markers, triggerAll]\n });\n\n const contextValue = useMemo(() => ({\n register,\n unregister,\n triggerAll,\n hasTriggered\n }), [register, unregister, triggerAll, hasTriggered]);\n\n return (\n <ScrambleContext.Provider value={contextValue}>\n <div ref={containerRef} className={className}>\n {children}\n </div>\n </ScrambleContext.Provider>\n );\n}\n\nexport function useScrambleGroup() {\n return useContext(ScrambleContext);\n}\n","\"use client\";\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useGSAP } from '@gsap/react';\nimport { usePageTransition } from './usePageTransition.js';\n\nexport function useIdleGSAP(callback, config) {\n const { phase } = usePageTransition();\n const [isIdle, setIsIdle] = useState(phase === \"idle\");\n\n useEffect(() => {\n if (phase === \"idle\") {\n setIsIdle(true);\n } else if (phase === \"holding\") {\n setIsIdle(false);\n }\n }, [phase]);\n\n const wrappedCallback = useCallback((context, contextSafe) => {\n if (isIdle) {\n return callback(context, contextSafe);\n }\n }, [callback, isIdle]);\n\n const gsapConfig = useMemo(() => {\n const configDependencies = config?.dependencies ?? [];\n const combinedDependencies = [...configDependencies, isIdle];\n\n return {\n ...config,\n dependencies: combinedDependencies\n };\n }, [config, isIdle]);\n\n return useGSAP(wrappedCallback, gsapConfig);\n}\n","\"use client\";\n\nimport { useMemo } from 'react';\nimport { usePageTransitionContext } from '../../packages/providers/PageTransitionProvider.jsx';\n\nexport function usePageTransition() {\n const {\n startTransition,\n phase,\n isPending\n } = usePageTransitionContext();\n\n const isTransitioning = phase !== \"idle\";\n\n const transitionState = useMemo(() => ({\n startTransition,\n isTransitioning,\n phase,\n isPending\n }), [isPending, phase, startTransition, isTransitioning]);\n\n return transitionState;\n}\n","\"use client\";\n\nimport React, { \n createContext, \n useState, \n useTransition, \n useRef, \n useCallback, \n useEffect, \n useMemo, \n useContext \n} from 'react';\n\nimport { scrollToTop } from './LenisProvider.jsx';\n\nconst PageTransitionContext = createContext(null);\nlet scrollTriggerModulePromise = null;\n\nfunction getScrollTriggerModule() {\n if (!scrollTriggerModulePromise) {\n \n scrollTriggerModulePromise = import('gsap/ScrollTrigger'); \n }\n return scrollTriggerModulePromise;\n}\n\nfunction clearScrollMemory() {\n const modulePromise = getScrollTriggerModule();\n if (modulePromise) {\n modulePromise.then(({ ScrollTrigger }) => {\n ScrollTrigger.clearScrollMemory();\n });\n }\n}\n\nfunction refreshScrollTrigger() {\n const modulePromise = getScrollTriggerModule();\n if (modulePromise) {\n modulePromise.then(({ ScrollTrigger }) => {\n ScrollTrigger.refresh(true);\n });\n }\n}\n\n\nfunction prefersReducedMotion() {\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\nexport function PageTransitionProvider({ children }) {\n const [phase, setPhase] = useState(\"idle\");\n const [isPending, startTransitionReact] = useTransition();\n const timerRef = useRef(null);\n const pendingCallbackRef = useRef(null);\n const startTimeRef = useRef(0);\n\n const clearTimer = useCallback(() => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n }, []);\n\n const handlePopState = useCallback(() => {\n clearTimer();\n if (!window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) {\n startTimeRef.current = 0;\n pendingCallbackRef.current = null;\n setPhase(\"holding\");\n clearScrollMemory();\n \n timerRef.current = window.setTimeout(() => {\n setPhase(\"exiting\");\n timerRef.current = window.setTimeout(() => {\n setPhase(\"idle\");\n refreshScrollTrigger();\n }, 1200);\n }, 100);\n }\n }, [clearTimer]);\n\n const startTransition = useCallback((callback) => {\n clearTimer();\n pendingCallbackRef.current = callback;\n \n if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) {\n callback();\n } else {\n setPhase(\"entering\");\n timerRef.current = window.setTimeout(() => {\n startTimeRef.current = Date.now();\n setPhase(\"holding\");\n clearScrollMemory();\n scrollToTop();\n \n startTransitionReact(() => {\n pendingCallbackRef.current?.();\n });\n }, 1300);\n }\n }, [clearTimer, startTransitionReact]);\n\n \n useEffect(() => {\n if (phase === \"holding\" && !isPending && startTimeRef.current > 0) {\n const elapsed = Date.now() - startTimeRef.current;\n const remainingDelay = Math.max(0, 100 - elapsed);\n \n timerRef.current = window.setTimeout(() => {\n setPhase(\"exiting\");\n startTimeRef.current = 0;\n \n timerRef.current = window.setTimeout(() => {\n setPhase(\"idle\");\n refreshScrollTrigger();\n }, 1200);\n }, remainingDelay);\n }\n }, [phase, isPending]);\n\n \n useEffect(() => {\n const onPopState = () => {\n handlePopState();\n };\n \n window.addEventListener(\"popstate\", onPopState);\n return () => {\n window.removeEventListener(\"popstate\", onPopState);\n };\n }, [handlePopState]);\n\n \n useEffect(() => {\n return () => {\n clearTimer();\n };\n }, [clearTimer]);\n\n const contextValue = useMemo(() => ({\n phase,\n startTransition,\n isPending\n }), [phase, startTransition, isPending]);\n\n return (\n <PageTransitionContext.Provider value={contextValue}>\n {children}\n </PageTransitionContext.Provider>\n );\n}\n\nconst defaultContextValue = {\n phase: \"idle\",\n startTransition: (t) => t(),\n isPending: false\n};\n\nexport function usePageTransitionContext() {\n return useContext(PageTransitionContext) ?? defaultContextValue;\n}\n","\"use client\";\n\nimport React, { useEffect } from 'react';\nimport { ReactLenis, useLenis } from 'lenis/react';\n\nexport { useLenis };\n\nlet globalLenisInstance = null;\nlet isCssScrollLocked = false;\n\nexport function getLenis() {\n return globalLenisInstance;\n}\n\nexport function setCssScrollLocked(isLocked) {\n if (isLocked !== isCssScrollLocked) {\n isCssScrollLocked = isLocked;\n if (isLocked) {\n document.documentElement.classList.add(\"scroll-locked\");\n } else {\n document.documentElement.classList.remove(\"scroll-locked\");\n }\n }\n}\n\nexport function getCssScrollLocked() {\n return isCssScrollLocked;\n}\n\nexport function scrollToTop(immediate = true) {\n const lenis = globalLenisInstance;\n if (lenis) {\n lenis.scrollTo(0, { immediate });\n } else {\n window.scrollTo(0, 0);\n }\n}\n\n\nfunction LenisTracker() {\n const lenis = useLenis();\n\n useEffect(() => {\n globalLenisInstance = lenis ?? null;\n \n return () => {\n globalLenisInstance = null;\n };\n }, [lenis]);\n\n return null;\n}\n\nfunction customEasing(t) {\n return t < 0.5 ? 4 * t * t * t : 1 - ((-2 * t + 2) ** 3) / 2;\n}\n\nexport function Lenis(props) {\n return (\n <ReactLenis\n root={true}\n options={{\n anchors: {\n duration: 1.2,\n easing: customEasing\n }\n }}\n {...props}\n >\n <LenisTracker />\n {props.children}\n </ReactLenis>\n );\n}\n\nexport { Lenis as LenisProvider };\n","export const DEFAULT_CHARS = \" .'`^\\\",:;Il!i><~+_-?][}{1)(|\\\\/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$\";","\"use client\";\n\nimport React, { forwardRef, useRef, useState, useLayoutEffect, useCallback, useImperativeHandle, Fragment } from 'react';\n\nimport { gsap, useGSAP, ScrollTrigger } from '../../libs/vendor.js';\nimport { useIdleGSAP } from '../../libs/hooks/useIdleGSAP.js';\nimport { cx } from '../../libs/vendor.js';\n\nconst typographyClasses = {\n display: \"text-display\",\n h1: \"text-h1\",\n h2: \"text-h2\",\n h3: \"text-h3\",\n h4: \"text-h4\",\n h5: \"text-h5\",\n h6: \"text-h6\"\n};\n\nconst AnimatedHeadline = forwardRef(({\n children,\n as: Component = \"h1\",\n displayAs,\n className,\n skip,\n trigger = \"manual\",\n wrapperClassName\n}, ref) => {\n const containerRef = useRef(null);\n const wrapperRef = useRef(null);\n const hasRevealedRef = useRef(false);\n const [lines, setLines] = useState(null);\n \n const shouldSkip = skip ?? window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n useLayoutEffect(() => {\n if (!containerRef.current) return;\n const wordNodes = containerRef.current.querySelectorAll(\"[data-word]\");\n if (wordNodes.length === 0) return;\n\n const computedLines = [];\n let currentLine = [];\n let lastY = -Infinity;\n let lastExplicitLine = -1;\n\n for (const node of wordNodes) {\n const top = node.getBoundingClientRect().top;\n const explicitLine = Number(node.dataset.explicitLine ?? -1);\n const isNewExplicit = explicitLine !== lastExplicitLine && lastExplicitLine !== -1;\n\n if ((lastY > -Infinity && top - lastY > 2) || isNewExplicit) {\n computedLines.push(currentLine.join(\" \"));\n currentLine = [];\n }\n currentLine.push(node.textContent || \"\");\n lastY = top;\n lastExplicitLine = explicitLine;\n }\n\n if (currentLine.length > 0) {\n computedLines.push(currentLine.join(\" \"));\n }\n setLines(computedLines);\n }, []);\n\n useGSAP(() => {\n if (shouldSkip || !containerRef.current || !lines) return;\n const container = containerRef.current;\n \n gsap.set(container.querySelectorAll(\"[data-line-inner]\"), { opacity: 0 });\n gsap.set(container.querySelectorAll(\"[data-brand-rect], [data-fg-rect]\"), { scaleX: 0, transformOrigin: \"left\" });\n }, { dependencies: [shouldSkip, lines] });\n\n useIdleGSAP(() => {\n if (trigger !== \"scroll\" || shouldSkip || !lines) return;\n const triggerEl = wrapperRef.current || containerRef.current;\n \n if (triggerEl) {\n ScrollTrigger.create({\n trigger: triggerEl,\n start: \"top bottom\",\n once: true,\n onEnter: () => reveal()\n });\n }\n }, { dependencies: [trigger, shouldSkip, lines] });\n\n const reveal = useCallback((delayOffset = 0) => {\n if (hasRevealedRef.current || shouldSkip || !containerRef.current) return;\n hasRevealedRef.current = true;\n \n const lineNodes = containerRef.current.querySelectorAll(\"[data-line]\");\n\n for (let r = 0; r < lineNodes.length; r++) {\n const lineNode = lineNodes[r];\n if (!lineNode) continue;\n\n const delay = delayOffset + 0.15 * r;\n const lineInner = lineNode.querySelector(\"[data-line-inner]\");\n const brandRect = lineNode.querySelector(\"[data-brand-rect]\");\n const fgRect = lineNode.querySelector(\"[data-fg-rect]\");\n\n if (!lineInner || !brandRect || !fgRect) continue;\n\n const rects = [brandRect, fgRect];\n const tl = gsap.timeline({ delay });\n\n tl.to(brandRect, { scaleX: 1, duration: 0.45, ease: \"power3.inOut\" }, 0);\n tl.to(fgRect, { scaleX: 1, duration: 0.45, ease: \"power3.inOut\" }, 0.1);\n tl.set(lineInner, { opacity: 1 }, 0.5);\n tl.set(rects, { transformOrigin: \"right\" }, 0.5);\n tl.to(fgRect, { scaleX: 0, duration: 0.45, ease: \"power3.inOut\" }, 0.5);\n tl.to(brandRect, { scaleX: 0, duration: 0.45, ease: \"power3.inOut\" }, 0.6);\n }\n }, [shouldSkip]);\n\n const reset = useCallback(() => {\n hasRevealedRef.current = false;\n if (!containerRef.current) return;\n \n const container = containerRef.current;\n gsap.set(container.querySelectorAll(\"[data-line-inner]\"), { opacity: 0 });\n gsap.set(container.querySelectorAll(\"[data-brand-rect], [data-fg-rect]\"), { scaleX: 0, transformOrigin: \"left\" });\n }, []);\n\n useImperativeHandle(ref, () => ({ reveal, reset }), [reveal, reset]);\n\n const resolvedClassName = cx(typographyClasses[displayAs ?? Component], className);\n\n if (!lines) {\n const manualLines = children.split(\"\\n\");\n const preRenderedContent = (\n <Component ref={containerRef} className={resolvedClassName}>\n {manualLines.map((lineStr, lineIndex) => (\n <Fragment key={lineIndex}>\n {lineIndex > 0 && <br />}\n {lineStr.split(/\\s+/).filter(Boolean).map((word, wordIndex) => (\n <Fragment key={wordIndex}>\n {wordIndex > 0 && \" \"}\n <span data-word data-explicit-line={lineIndex}>\n {word}\n </span>\n </Fragment>\n ))}\n </Fragment>\n ))}\n </Component>\n );\n\n return trigger === \"scroll\" ? (\n <div ref={wrapperRef} className={wrapperClassName}>\n {preRenderedContent}\n </div>\n ) : (\n preRenderedContent\n );\n }\n\n const animatedContent = (\n <Component ref={containerRef} className={resolvedClassName}>\n {lines.map((lineStr, lineIndex) => (\n <Fragment key={lineIndex}>\n {lineIndex > 0 && <br />}\n <div data-line className=\"relative inline-block\">\n <span data-line-inner className=\"block whitespace-nowrap\">\n {lineStr}\n </span>\n {!shouldSkip && (\n <Fragment>\n <div data-brand-rect className=\"absolute -inset-x-[0.1em] -inset-y-[0.1em] bg-brand\" />\n <div data-fg-rect className=\"absolute -inset-x-[0.1em] -inset-y-[0.1em] bg-foreground\" />\n </Fragment>\n )}\n </div>\n </Fragment>\n ))}\n </Component>\n );\n\n return trigger === \"scroll\" ? (\n <div ref={wrapperRef} className={wrapperClassName}>\n {animatedContent}\n </div>\n ) : (\n animatedContent\n );\n});\n\nexport default AnimatedHeadline;","\"use client\";\n\nimport React, { useRef } from 'react';\nimport { Slot, Slottable } from '@radix-ui/react-slot';\nimport { cva, cx } from '../../libs/vendor.js';\nimport useDualLayerScramble from '../../libs/hooks/useDualLayerScramble.js';\n\nconst buttonVariants = cva(\n [\n \"group inline-flex min-w-0 shrink-0 cursor-pointer items-center justify-center whitespace-nowrap\",\n \"font-medium font-mono uppercase\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-brand/50 focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n \"disabled:pointer-events-none disabled:opacity-50\"\n ],\n {\n variants: {\n variant: {\n primary: []\n },\n size: {\n xs: \"text-body-sm\",\n sm: \"text-body-sm\",\n default: \"text-body-sm lg:text-body\",\n lg: \"text-body lg:text-body-lg\"\n }\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"default\"\n }\n }\n);\n\nconst iconVariants = cva(\n [\n \"flex items-center justify-center\",\n \"transition-transform duration-700 [transition-timing-function:var(--ease-power4-in-out)]\"\n ],\n {\n variants: {\n size: {\n xs: \"size-32\",\n sm: \"size-32 lg:size-40\",\n default: \"size-40 lg:size-48\",\n lg: \"size-48 lg:size-56\"\n },\n position: {\n left: \"origin-left -rotate-45 scale-0\",\n right: \"absolute right-0 z-10 origin-right rotate-0 scale-100\"\n },\n theme: {\n light: \"bg-foreground text-background\",\n dark: \"bg-foreground text-background\",\n brand: \"bg-brand text-black\"\n }\n },\n defaultVariants: {\n size: \"default\",\n theme: \"light\"\n }\n }\n);\n\nconst textWrapperVariants = cva(\n [\n \"flex w-full flex-1 items-center justify-center\",\n \"transition-transform duration-700 [transition-timing-function:var(--ease-power4-in-out)]\"\n ],\n {\n variants: {\n size: {\n xs: \"h-32 -translate-x-[calc(32px+6px)] px-8\",\n sm: \"h-32 -translate-x-[calc(32px+6px)] px-8 lg:h-40 lg:-translate-x-[calc(40px+6px)] lg:px-12\",\n default: \"h-40 -translate-x-[calc(40px+6px)] px-12 lg:h-48 lg:-translate-x-[calc(48px+6px)] lg:px-16\",\n lg: \"h-48 -translate-x-[calc(48px+6px)] px-16 lg:h-56 lg:-translate-x-[calc(56px+6px)] lg:px-24\"\n },\n theme: {\n light: \"bg-foreground text-background\",\n dark: \"bg-foreground text-background\",\n brand: \"bg-brand text-black\"\n }\n },\n defaultVariants: {\n size: \"default\",\n theme: \"light\"\n }\n }\n);\n\nfunction PlusIcon({ className }) {\n return (\n <svg\n className={cx(\"size-[0.75em]\", className)}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 1v10M1 6h10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"square\"\n />\n </svg>\n );\n}\n\nexport default function AnimatedButton(props) {\n const {\n children,\n className,\n asChild,\n variant,\n size,\n theme,\n type,\n ...rest\n } = props;\n\n const resolvedType = type === undefined ? (asChild ? undefined : \"button\") : type;\n const Comp = asChild ? Slot : \"button\";\n\n const themeColors = theme === \"brand\" \n ? { firstColorClass: \"scramble-white\", secondColorClass: \"scramble-inherit\" } \n : { firstColorClass: \"scramble-brand\", secondColorClass: \"scramble-inherit\" };\n\n const scrambleConfig = {\n duration: 0.5,\n initiallyVisible: true,\n firstColorClass: themeColors.firstColorClass,\n secondColorClass: themeColors.secondColorClass\n };\n\n const scrambleResult = useDualLayerScramble(scrambleConfig);\n const isScramblingRef = useRef(false);\n\n const handleMouseEnter = () => {\n if (!isScramblingRef.current) {\n isScramblingRef.current = true;\n scrambleResult.scramble();\n }\n };\n\n const handleMouseLeave = () => {\n isScramblingRef.current = false;\n };\n\n const buttonClasses = buttonVariants({ variant, size, className });\n\n const renderContent = (content) => (\n <span className=\"relative flex w-full items-center gap-6\">\n <span\n className={cx(\n iconVariants({ size, theme, position: \"left\" }),\n \"group-hover:rotate-0 group-hover:scale-100\"\n )}\n >\n <PlusIcon />\n </span>\n \n <span\n className={cx(\n textWrapperVariants({ size, theme }),\n \"group-hover:translate-x-0\"\n )}\n >\n <span ref={scrambleResult.ref}>{content}</span>\n </span>\n \n <span\n className={cx(\n iconVariants({ size, theme, position: \"right\" }),\n \"group-hover:-rotate-45 group-hover:scale-0\"\n )}\n >\n <PlusIcon />\n </span>\n </span>\n );\n\n return (\n <Comp\n type={resolvedType}\n className={buttonClasses}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...rest}\n >\n <Slottable asChild={asChild} child={children}>\n {renderContent}\n </Slottable>\n </Comp>\n );\n}\n","\"use client\";\nimport { useRef, useEffect, useCallback } from 'react';\nimport { gsap, ScrambleTextPlugin, ScrollTrigger } from '../vendor.js';\nconst DEFAULT_CHARS = \" .'`^\\\",:;Il!i><~+_-?][}{1)(|\\\\/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$\";\n\nexport default function useDualLayerScramble(options) {\n const elementRef = useRef(null);\n const timelineRef = useRef(null);\n const originalTextRef = useRef(\"\");\n const originalHTMLRef = useRef(\"\");\n const dimensionsRef = useRef(null);\n const linesDataRef = useRef([]);\n const spansRef = useRef([]);\n const isAnimatingRef = useRef(false);\n const isPreparedRef = useRef(false);\n\n useEffect(() => {\n if (!elementRef.current) return;\n \n const el = elementRef.current;\n const innerText = el.innerText ?? \"\";\n \n if (innerText.trim().length > 0) {\n originalTextRef.current = innerText;\n originalHTMLRef.current = el.innerHTML;\n dimensionsRef.current = { width: el.offsetWidth, height: el.offsetHeight };\n }\n }, []);\n\n const killTimeline = useCallback(() => {\n if (timelineRef.current) {\n timelineRef.current.kill();\n timelineRef.current = null;\n isAnimatingRef.current = false;\n }\n }, []);\n\n const prepareDOM = useCallback(() => {\n if (!elementRef.current || isPreparedRef.current) return;\n \n const el = elementRef.current;\n if ((originalTextRef.current || el.innerText || \"\").trim().length === 0) return;\n \n if (!dimensionsRef.current) {\n dimensionsRef.current = { width: el.offsetWidth, height: el.offsetHeight };\n }\n\n const splitTextIntoLines = (element) => {\n const text = element.innerText || \"\";\n if (text.trim().length === 0) return [];\n if (text.includes(\"\\n\")) return text.split(\"\\n\").filter(line => line.length > 0);\n \n const firstChild = element.firstChild;\n if (!firstChild || firstChild.nodeType !== Node.TEXT_NODE) return [text];\n \n const range = document.createRange();\n const lines = [];\n let currentLine = \"\";\n let lastTop = null;\n const length = firstChild.length;\n \n for (let i = 0; i < text.length && i < length; i++) {\n range.setStart(firstChild, i);\n range.setEnd(firstChild, i + 1);\n const rect = range.getBoundingClientRect();\n \n if (lastTop !== null && Math.abs(rect.top - lastTop) > 2) {\n if (currentLine.length > 0) lines.push(currentLine);\n currentLine = \"\";\n }\n currentLine += text[i];\n lastTop = rect.top;\n }\n \n if (currentLine.length > 0) lines.push(currentLine);\n return lines.length > 0 ? lines : [text];\n };\n\n const lines = splitTextIntoLines(el);\n const testDiv = document.createElement(\"div\");\n testDiv.style.cssText = `\n\t\t\tposition: absolute;\n\t\t\tvisibility: hidden;\n\t\t\tpointer-events: none;\n\t\t\twhite-space: nowrap;\n\t\t`;\n \n const computedStyle = window.getComputedStyle(el);\n testDiv.style.font = computedStyle.font;\n testDiv.style.fontSize = computedStyle.fontSize;\n testDiv.style.fontFamily = computedStyle.fontFamily;\n testDiv.style.fontWeight = computedStyle.fontWeight;\n testDiv.style.letterSpacing = computedStyle.letterSpacing;\n testDiv.style.textTransform = computedStyle.textTransform;\n \n document.body.appendChild(testDiv);\n \n linesDataRef.current = lines.map(line => {\n testDiv.textContent = line;\n return { text: line, width: testDiv.offsetWidth, height: testDiv.offsetHeight };\n });\n \n document.body.removeChild(testDiv);\n \n const maxWidth = Math.max(...linesDataRef.current.map(lineData => lineData.width));\n const totalHeight = linesDataRef.current.reduce((sum, lineData) => sum + lineData.height, 0);\n \n const finalWidth = Math.max(dimensionsRef.current?.width ?? 0, maxWidth);\n const finalHeight = Math.max(dimensionsRef.current?.height ?? 0, totalHeight);\n \n isPreparedRef.current = true;\n \n gsap.set(el, { width: finalWidth, height: finalHeight, display: \"inline-block\", overflow: \"hidden\" });\n el.innerHTML = \"\";\n spansRef.current = [];\n \n linesDataRef.current.forEach(lineData => {\n const span = document.createElement(\"span\");\n span.style.cssText = `\n\t\t\t\tdisplay: block;\n\t\t\t\topacity: 0;\n\t\t\t\twidth: ${lineData.width}px;\n\t\t\t\theight: ${lineData.height}px;\n\t\t\t\toverflow: hidden;\n\t\t\t\twhite-space: nowrap;\n\t\t\t`;\n span.innerText = lineData.text;\n el.appendChild(span);\n spansRef.current.push(span);\n });\n \n gsap.set(el, { opacity: 1 });\n }, []);\n\n const playScramble = useCallback((overrides) => {\n if (!elementRef.current) return null;\n if (isAnimatingRef.current) return timelineRef.current;\n \n prepareDOM();\n \n const config = { ...options, ...overrides };\n const duration = config.duration ?? 1;\n const speed = config.speed ?? 1;\n const chars = config.chars ?? DEFAULT_CHARS;\n const firstColorClass = config.firstColorClass ?? \"scramble-brand\";\n const secondColorClass = config.secondColorClass ?? \"scramble-foreground\";\n const stagger = config.stagger ?? 0.08;\n \n const linesData = linesDataRef.current;\n const spans = spansRef.current;\n \n if (linesData.length === 0 || spans.length === 0) return null;\n \n if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) {\n spans.forEach((span, index) => {\n const lineData = linesData[index];\n if (lineData) {\n span.innerText = lineData.text;\n }\n span.style.opacity = \"1\";\n span.className = span.className.replace(/\\bscramble-\\w+\\b/g, \"\");\n });\n config.onComplete?.();\n return null;\n }\n \n killTimeline();\n isAnimatingRef.current = true;\n \n timelineRef.current = gsap.timeline({\n onComplete: () => {\n isAnimatingRef.current = false;\n timelineRef.current = null;\n config.onComplete?.();\n }\n });\n \n spans.forEach((span, index) => {\n const lineData = linesData[index];\n if (!lineData) return;\n \n const originalText = lineData.text;\n const delay = index * stagger;\n \n const generateScrambled = (text, charSet = DEFAULT_CHARS) => {\n let scrambled = \"\";\n for (let i = 0; i < text.length; i++) {\n const char = text[i];\n if (char === \" \") {\n scrambled += char;\n } else {\n scrambled += charSet[Math.floor(Math.random() * charSet.length)];\n }\n }\n return scrambled;\n };\n \n const initialScrambledText = generateScrambled(originalText, chars);\n const nonSpaceCount = originalText.replace(/\\s/g, \"\").length;\n const spacesOnly = originalText.replace(/[^\\s]/g, \" \");\n \n timelineRef.current?.add(() => {\n gsap.set(span, { opacity: 1 });\n span.innerText = spacesOnly;\n }, delay);\n \n timelineRef.current?.to(span, {\n duration: duration,\n scrambleText: {\n text: initialScrambledText,\n chars: chars,\n speed: speed,\n revealDelay: 0.1,\n oldClass: firstColorClass,\n newClass: firstColorClass\n },\n ease: \"none\"\n }, delay);\n \n timelineRef.current?.to(span, {\n duration: duration,\n scrambleText: {\n text: originalText,\n chars: chars,\n speed: speed,\n revealDelay: 0.1,\n oldClass: firstColorClass,\n newClass: secondColorClass\n },\n ease: \"none\"\n }, delay + (nonSpaceCount > 0 ? duration / nonSpaceCount : 0));\n });\n \n return timelineRef.current;\n }, [options, killTimeline, prepareDOM]);\n\n const resetDOM = useCallback(() => {\n killTimeline();\n if (elementRef.current && isPreparedRef.current) {\n elementRef.current.innerHTML = originalHTMLRef.current || originalTextRef.current;\n gsap.set(elementRef.current, {\n opacity: 0,\n width: \"auto\",\n height: \"auto\",\n overflow: \"visible\"\n });\n spansRef.current = [];\n linesDataRef.current = [];\n isPreparedRef.current = false;\n }\n }, [killTimeline]);\n\n \n useEffect(() => {\n return () => {\n killTimeline();\n spansRef.current = [];\n linesDataRef.current = [];\n isPreparedRef.current = false;\n };\n }, [killTimeline]);\n\n return {\n ref: elementRef,\n scramble: playScramble,\n kill: resetDOM,\n isAnimating: isAnimatingRef.current\n };\n}\n","import React, { forwardRef } from 'react';\nimport { Slot, Slottable } from '@radix-ui/react-slot';\nimport { cx } from '../../libs/vendor.js';\n\nexport const AnimatedLink = forwardRef(function AnimatedLink(props, ref) {\n const {\n children,\n className,\n asChild,\n indicator,\n ...restProps\n } = props;\n\n \n const Component = asChild ? Slot : \"a\";\n const displayClass = indicator ? \"inline-flex items-center\" : \"inline-block\";\n\n \n const combinedClassName = cx(\n \"group relative w-fit cursor-pointer\",\n displayClass,\n \"outline-none focus-visible:ring-2 focus-visible:ring-brand/50 focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n className\n );\n \n const renderChildren = (childContent) => (\n <>\n {indicator && (\n <span\n className={cx(\n \"absolute left-0 size-8 bg-brand lg:size-12\",\n \"-rotate-90 scale-0\",\n \"transition-transform duration-500 [transition-timing-function:cubic-bezier(0.34,1.56,0.64,1)]\",\n \"group-hover:rotate-0 group-hover:scale-100\",\n \"group-focus-visible:rotate-0 group-focus-visible:scale-100\"\n )}\n aria-hidden=\"true\"\n />\n )}\n\n {indicator ? (\n <span\n className={cx(\n \"transition-transform duration-500 [transition-timing-function:cubic-bezier(0.33,1,0.68,1)]\",\n \"group-hover:translate-x-24\",\n \"group-focus-visible:translate-x-24\"\n )}\n >\n {childContent}\n </span>\n ) : (\n childContent\n )}\n\n <span\n className={cx(\n \"pointer-events-none absolute inset-x-0 -bottom-1\",\n indicator && [\n \"transition-transform duration-500 [transition-timing-function:cubic-bezier(0.33,1,0.68,1)]\",\n \"group-hover:translate-x-24 group-focus-visible:translate-x-24\"\n ]\n )}\n aria-hidden=\"true\"\n >\n <span\n className={cx(\n \"absolute inset-x-0 top-0 h-px bg-current\",\n \"origin-left scale-x-100\",\n \"transition-transform duration-700 [transition-timing-function:cubic-bezier(0.625,0.05,0,1)]\",\n \"delay-300 group-hover:origin-right group-hover:scale-x-0 group-hover:delay-0\",\n \"group-focus-visible:origin-right group-focus-visible:scale-x-0 group-focus-visible:delay-0\"\n )}\n />\n <span\n className={cx(\n \"absolute inset-x-0 top-0 h-px bg-current\",\n \"origin-right scale-x-0\",\n \"transition-transform duration-700 [transition-timing-function:cubic-bezier(0.625,0.05,0,1)]\",\n \"delay-0 group-hover:origin-left group-hover:scale-x-100 group-hover:delay-300\",\n \"group-focus-visible:origin-left group-focus-visible:scale-x-100 group-focus-visible:delay-300\"\n )}\n />\n </span>\n </>\n );\n\n return (\n <Component ref={ref} className={combinedClassName} {...restProps}>\n <Slottable asChild={asChild} child={children}>\n {renderChildren}\n </Slottable>\n </Component>\n );\n});\n\nexport default AnimatedLink;","\"use client\";\n\nimport React, { createContext, useState, useRef, useEffect } from 'react';\nimport { motion, animate } from 'framer-motion';\nimport { easingDefinitionToFunction } from '../../libs/utils/easings.js';\nimport { cx } from '../../libs/vendor.js';\n\nexport function stagger(amount = 0.1, { startDelay = 0, from = 0, ease } = {}) {\n return (index, totalElements) => {\n let fromVal = typeof from === \"number\" ? from : (function(fromStr, total) {\n if (fromStr === \"first\") return 0;\n let lastIndex = total - 1;\n return fromStr === \"last\" ? lastIndex : lastIndex / 2;\n })(from, totalElements);\n\n let distance = amount * Math.abs(fromVal - index);\n\n if (ease) {\n let maxStagger = totalElements * amount;\n distance = easingDefinitionToFunction(ease)(distance / maxStagger) * maxStagger;\n }\n \n return startDelay + distance;\n };\n}\n\nexport const AnimatedProseContext = createContext(false);\n\nexport function AnimatedProse({\n children,\n className,\n staggerDelay = 0.03,\n duration = 0.5,\n delay = 0,\n margin = \"0px 0px -10% 0px\"\n}) {\n const [isInView, setIsInView] = useState(false);\n const [hasSplitLines, setHasSplitLines] = useState(false);\n const containerRef = useRef(null);\n const hasAnimatedRef = useRef(false);\n\n useEffect(() => {\n if (!containerRef.current) return;\n\n const checkSplitLines = () => {\n const lines = containerRef.current?.querySelectorAll(\".split-line\");\n if (lines && lines.length > 0) {\n setHasSplitLines(true);\n return true;\n }\n return false;\n };\n\n if (checkSplitLines()) return;\n\n const intervalId = setInterval(() => {\n if (checkSplitLines()) {\n clearInterval(intervalId);\n }\n }, 50);\n\n const timeoutId = setTimeout(() => {\n clearInterval(intervalId);\n setHasSplitLines(true);\n }, 500);\n\n return () => {\n clearInterval(intervalId);\n clearTimeout(timeoutId);\n };\n }, []);\n\n useEffect(() => {\n if (!isInView || !hasSplitLines || !containerRef.current || hasAnimatedRef.current) return;\n\n const lines = containerRef.current.querySelectorAll(\".split-line\");\n if (lines.length === 0) return;\n\n hasAnimatedRef.current = true;\n containerRef.current.querySelectorAll(\".invisible\").forEach(makeVisible);\n\n // TODO: no exact match in easings.js — kept as raw literal\n const animation = animate(\n Array.from(lines),\n { y: [\"100%\", \"0%\"] },\n {\n delay: stagger(staggerDelay, { startDelay: delay }),\n duration: duration,\n ease: [0.33, 1, 0.68, 1]\n }\n );\n\n return () => {\n animation?.cancel();\n };\n }, [isInView, hasSplitLines, staggerDelay, duration, delay]);\n\n const handleViewportEnter = () => setIsInView(true);\n\n return (\n <AnimatedProseContext.Provider value={true}>\n <motion.div\n ref={containerRef}\n onViewportEnter={handleViewportEnter}\n viewport={{ once: true, margin: margin }}\n className={cx(className)}\n >\n {children}\n </motion.div>\n </AnimatedProseContext.Provider>\n );\n}\n\nfunction makeVisible(el) {\n el.style.visibility = \"visible\";\n}\n\n","/**\n * easings.js\n * -----------------------------------------------------------------------\n * Standalone replacement for the monorepo's `@shared/utils/easings` import.\n * Converts an \"easing definition\" (a named preset or a cubic-bezier array)\n * into a plain `(t: number) => number` function, where `t` is a progress\n * value between 0 and 1.\n *\n * This mirrors the shape of Framer Motion's internal easing helper so that\n * existing call sites (e.g. AnimatedProse.jsx) keep working unmodified,\n * without depending on framer-motion's private/internal module paths.\n * -----------------------------------------------------------------------\n */\n\n/**\n * Cubic bezier solver.\n * Given the two control points (x1, y1) and (x2, y2) of a cubic bezier\n * curve anchored at (0,0) and (1,1), returns a function that maps\n * progress `t` -> eased value, using Newton-Raphson iteration to solve\n * for the bezier parameter that matches `t` on the X axis.\n */\nfunction cubicBezier(x1, y1, x2, y2) {\n // Precompute polynomial coefficients for X and Y.\n const cx = 3 * x1;\n const bx = 3 * (x2 - x1) - cx;\n const ax = 1 - cx - bx;\n\n const cy = 3 * y1;\n const by = 3 * (y2 - y1) - cy;\n const ay = 1 - cy - by;\n\n function sampleCurveX(t) {\n return ((ax * t + bx) * t + cx) * t;\n }\n\n function sampleCurveY(t) {\n return ((ay * t + by) * t + cy) * t;\n }\n\n function sampleCurveDerivativeX(t) {\n return (3 * ax * t + 2 * bx) * t + cx;\n }\n\n function solveCurveX(x, epsilon = 1e-6) {\n let t = x;\n\n // Newton-Raphson iteration (fast path).\n for (let i = 0; i < 8; i++) {\n const currentX = sampleCurveX(t) - x;\n if (Math.abs(currentX) < epsilon) return t;\n\n const currentSlope = sampleCurveDerivativeX(t);\n if (Math.abs(currentSlope) < epsilon) break;\n\n t -= currentX / currentSlope;\n }\n\n // Fallback: bisection, in case Newton-Raphson didn't converge.\n let lower = 0;\n let upper = 1;\n t = x;\n\n if (t < lower) return lower;\n if (t > upper) return upper;\n\n while (lower < upper) {\n const currentX = sampleCurveX(t);\n if (Math.abs(currentX - x) < epsilon) return t;\n\n if (x > currentX) {\n lower = t;\n } else {\n upper = t;\n }\n t = (upper - lower) / 2 + lower;\n }\n\n return t;\n }\n\n return function bezierEase(t) {\n if (t <= 0) return 0;\n if (t >= 1) return 1;\n return sampleCurveY(solveCurveX(t));\n };\n}\n\n// Named presets, expressed as their standard cubic-bezier control points.\nconst NAMED_EASINGS = {\n linear: (t) => t,\n easeIn: cubicBezier(0.42, 0, 1, 1),\n easeOut: cubicBezier(0, 0, 0.58, 1),\n easeInOut: cubicBezier(0.42, 0, 0.58, 1),\n circIn: cubicBezier(0.55, 0, 1, 0.45),\n circOut: cubicBezier(0, 0.55, 0.45, 1),\n circInOut: cubicBezier(0.85, 0, 0.15, 1),\n backIn: cubicBezier(0.36, 0, 0.66, -0.56),\n backOut: cubicBezier(0.34, 1.56, 0.64, 1),\n backInOut: cubicBezier(0.68, -0.6, 0.32, 1.6),\n anticipate: cubicBezier(0.36, 0, 0.66, -0.56)\n};\n\n/**\n * @param {string | number[] | ((t: number) => number)} definition\n * - a named preset string (see NAMED_EASINGS)\n * - a 4-number cubic-bezier array: [x1, y1, x2, y2]\n * - an already-resolved easing function (passed through as-is)\n * @returns {(t: number) => number}\n */\nexport function easingDefinitionToFunction(definition) {\n if (typeof definition === 'function') {\n return definition;\n }\n\n if (Array.isArray(definition) && definition.length === 4) {\n const [x1, y1, x2, y2] = definition;\n return cubicBezier(x1, y1, x2, y2);\n }\n\n if (typeof definition === 'string' && NAMED_EASINGS[definition]) {\n return NAMED_EASINGS[definition];\n }\n\n // Unknown definition — fall back to linear rather than throwing,\n // so a bad `ease` prop degrades gracefully instead of crashing.\n return NAMED_EASINGS.linear;\n}\n\nexport default easingDefinitionToFunction;\n","import React, { forwardRef, useRef, useState, useLayoutEffect, useImperativeHandle } from 'react';\nimport { gsap, SplitText } from '../../libs/vendor.js';\nimport { cx } from '../../libs/vendor.js';\n\nconst AnimatedSubtext = forwardRef(({\n children,\n className,\n skip = false,\n staggerDelay = 0.05,\n duration = 0.8\n}, ref) => {\n const elementRef = useRef(null);\n const splitTextRef = useRef(null);\n const [isSplit, setIsSplit] = useState(false);\n\n useLayoutEffect(() => {\n if (elementRef.current && !skip) {\n setIsSplit(false);\n splitTextRef.current = new SplitText(elementRef.current, {\n type: \"lines\",\n autoSplit: true,\n aria: false,\n deepSlice: true,\n reduceWhiteSpace: false,\n mask: \"lines\",\n linesClass: \"split-line\",\n onSplit: () => setIsSplit(true)\n });\n\n return () => {\n splitTextRef.current?.revert();\n splitTextRef.current = null;\n };\n }\n }, [skip]);\n\n useImperativeHandle(ref, () => ({\n reveal: (delay = 0) => {\n if (!elementRef.current || !splitTextRef.current || skip) return;\n \n const lines = splitTextRef.current.lines ?? [];\n \n if (lines.length !== 0) {\n elementRef.current.style.visibility = \"visible\";\n gsap.fromTo(\n lines,\n { y: \"100%\" },\n {\n y: \"0%\",\n duration: duration,\n ease: \"power3.out\",\n stagger: staggerDelay,\n delay: delay\n }\n );\n }\n }\n }), [skip, duration, staggerDelay]);\n\n const renderWithLineBreaks = (text) => {\n const lines = text.split(\"\\n\");\n return lines.map((line, index) => (\n <span key={index}>\n {line}\n {index < lines.length - 1 && <br />}\n </span>\n ));\n };\n\n return skip ? (\n <p className={className}>\n {renderWithLineBreaks(children)}\n </p>\n ) : (\n <p ref={elementRef} className={cx(\"invisible\", className)}>\n {renderWithLineBreaks(children)}\n </p>\n );\n});\n\nexport default AnimatedSubtext;\n","\"use client\";\n\nimport React, { useState, useRef, useContext, useLayoutEffect, useEffect } from 'react';\nimport { motion, animate } from 'framer-motion';\nimport { AnimatedProseContext, stagger } from './AnimatedProse.jsx'; \nimport { SplitText } from '../../libs/vendor.js';\nimport { cx } from '../../libs/vendor.js';\n\nexport default function AnimatedText({\n children,\n className,\n staggerDelay = 0.03,\n duration = 0.5,\n delay = 0,\n margin = \"0px 0px -10% 0px\",\n revert = false\n}) {\n const [isInView, setIsInView] = useState(false);\n const [isSplit, setIsSplit] = useState(false);\n \n const containerRef = useRef(null);\n const splitTextRef = useRef(null);\n const inAnimatedProse = useContext(AnimatedProseContext);\n\n useLayoutEffect(() => {\n if (containerRef.current) {\n setIsSplit(false);\n splitTextRef.current = new SplitText(containerRef.current, {\n type: \"lines\",\n autoSplit: true,\n aria: false,\n deepSlice: true,\n reduceWhiteSpace: false,\n mask: \"lines\",\n linesClass: \"split-line\",\n onSplit: () => setIsSplit(true)\n });\n }\n \n return () => {\n splitTextRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (inAnimatedProse || !isInView || !isSplit || !containerRef.current || !splitTextRef.current) {\n return;\n }\n\n const lines = splitTextRef.current.lines ?? [];\n if (lines.length === 0) return;\n\n containerRef.current.style.visibility = \"visible\";\n const animation = animate(\n lines,\n { y: [\"100%\", \"0%\"] },\n {\n delay: stagger(staggerDelay, { startDelay: delay }),\n duration: duration,\n ease: [0.33, 1, 0.68, 1]\n }\n );\n\n const handleRevert = async () => {\n try {\n await animation;\n if (revert) {\n splitTextRef.current?.revert();\n }\n } catch (err) {\n }\n };\n\n handleRevert();\n\n return () => {\n animation?.cancel();\n };\n }, [isInView, isSplit, inAnimatedProse, staggerDelay, duration, delay, revert]);\n\n const handleViewportEnter = () => setIsInView(true);\n\n return (\n <motion.span\n ref={containerRef}\n onViewportEnter={handleViewportEnter}\n viewport={{ once: true, margin: margin }}\n className={cx(\"invisible\", className)}\n >\n {children}\n </motion.span>\n );\n}\n\n","import AnimatedHeadline from \"./AnimatedHeadline.jsx\";\nimport { cx } from '../../libs/vendor.js';\n\nexport default function ScrollAnimatedHeadline({\n headline,\n displayAs,\n className,\n headlineClassName,\n}) {\n if (!headline?.text || !headline?.level) return null;\n\n return (\n <AnimatedHeadline\n trigger=\"scroll\"\n as={headline.level}\n displayAs={displayAs}\n className={cx(headlineClassName)}\n wrapperClassName={className}\n >\n {headline.text}\n </AnimatedHeadline>\n );\n}\n","\"use client\";\n\nimport React, { useRef, useState, useEffect } from 'react';\nimport { gsap, useGSAP, cx } from '../../libs/vendor.js';\nimport { usePreloader } from '../providers/PreloaderProvider.jsx';\nimport ScrambleText from './ScrambleText.jsx';\n\nexport default function Preloader() {\n const { phase, setPhase, isInitialLoad } = usePreloader();\n\n const containerRef = useRef(null);\n const contentRef = useRef(null);\n const squaresContainerRef = useRef(null);\n\n const squaresRefs = useRef([]);\n const onReadyRef = useRef(null);\n const timelineRef = useRef(null);\n\n const hasStartedRef = useRef(false);\n\n const [isReducedMotion, setIsReducedMotion] = useState(false);\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n setIsReducedMotion(mediaQuery.matches);\n\n const handleChange = (e) => setIsReducedMotion(e.matches);\n mediaQuery.addEventListener(\"change\", handleChange);\n\n return () => mediaQuery.removeEventListener(\"change\", handleChange);\n }, []);\n\n const handleReady = (readyFn) => {\n onReadyRef.current = readyFn;\n };\n\n useGSAP(() => {\n if (!isInitialLoad || phase !== \"loading\" || hasStartedRef.current) return;\n\n if (isReducedMotion) {\n setPhase(\"complete\");\n return;\n }\n\n const squares = squaresRefs.current.filter(Boolean);\n if (squares.length === 0) return;\n\n hasStartedRef.current = true;\n\n let timeoutId;\n\n const runAnimation = () => {\n if (!onReadyRef.current) {\n requestAnimationFrame(runAnimation);\n return;\n }\n\n timelineRef.current = gsap.timeline();\n onReadyRef.current();\n\n squares.forEach((square, index) => {\n timelineRef.current?.fromTo(\n square,\n {\n x: index === 0 ? -16 : (index - 1) * 18,\n rotate: 0\n },\n {\n x: index * 18 - 16,\n rotate: 90,\n duration: 0.7,\n ease: \"expo.inOut\",\n immediateRender: false\n },\n index === 0 ? 0 : \">-25%\"\n );\n });\n\n const timeOffset = 2.2749999999999995;\n\n timelineRef.current?.to(\n contentRef.current,\n { opacity: 0, duration: 0.4, ease: \"power3.out\" },\n timeOffset + 0.2\n );\n\n const clipState = { value: 0 };\n const eventState = { value: false };\n\n timelineRef.current?.to(\n clipState,\n {\n value: 1,\n duration: 1.5,\n ease: \"expo.inOut\",\n onUpdate: () => {\n if (containerRef.current) {\n const val = clipState.value;\n containerRef.current.style.clipPath =\n val <= 0 ? \"polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)\" :\n val >= 1 ? \"polygon(0% 100%, 0% 100%, 0% 100%)\" :\n val <= 0.5 ? `polygon(0% 100%, ${2 * val * 100}% 0%, 100% 0%, 100% 100%)` :\n `polygon(0% 100%, 100% ${(val - 0.5) * 200}%, 100% 100%)`;\n }\n if (!eventState.value && clipState.value >= 0.9) {\n eventState.value = true;\n setPhase(\"revealing\");\n }\n }\n },\n timeOffset\n );\n };\n\n timeoutId = setTimeout(runAnimation, 100);\n\n return () => {\n clearTimeout(timeoutId);\n timelineRef.current?.kill();\n };\n \n }, { dependencies: [isInitialLoad, isReducedMotion, setPhase] });\n\n if (!isInitialLoad || phase === \"hidden\") return null;\n\n const pointerEventsClass = phase === \"complete\" ? \"pointer-events-none\" : \"\";\n const containerClasses = cx(\"fixed inset-0 z-[10000] flex items-center justify-center bg-background\", pointerEventsClass);\n\n return (\n <div ref={containerRef} data-theme=\"brand\" className={containerClasses}>\n <div ref={contentRef} className=\"flex flex-col items-center gap-4\">\n \n <div> \n <div \n ref={squaresContainerRef}\n className=\"relative overflow-x-clip overflow-y-visible\"\n style={{ width: 70, height: 16 }}\n >\n {[0, 1, 2, 3].map((index) => (\n <div\n key={index}\n ref={(el) => { squaresRefs.current[index] = el; }}\n className=\"absolute top-0 left-0 bg-foreground\"\n style={{\n width: 16,\n height: 16,\n transform: \"translateX(-16px)\",\n transformOrigin: \"bottom right\"\n }}\n />\n ))}\n </div>\n </div> \n <div>\n <div className=\"overflow-hidden\">\n <ScrambleText revealMode={true} duration={1} onReady={handleReady}>\n LOADING\n </ScrambleText>\n </div>\n </div> \n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { createContext, useState, useEffect, useContext, useMemo } from 'react';\n\nconst PreloaderContext = createContext(null);\n\nconst defaultContextValue = {\n phase: \"hidden\",\n setPhase: () => {},\n isInitialLoad: false\n};\n\nexport default function PreloaderProvider({ children }) {\n const [phase, setPhase] = useState(\"loading\");\n const [isInitialLoad, setIsInitialLoad] = useState(true);\n\n useEffect(() => {\n if (phase === \"revealing\") {\n const timer = setTimeout(() => {\n setPhase(\"hidden\");\n setIsInitialLoad(false);\n }, 200);\n \n return () => clearTimeout(timer);\n }\n }, [phase]);\n\n const contextValue = useMemo(() => ({\n phase,\n setPhase,\n isInitialLoad\n }), [phase, isInitialLoad]);\n\n return (\n <PreloaderContext.Provider value={contextValue}>\n {children}\n </PreloaderContext.Provider>\n );\n}\n\nexport function usePreloader() {\n return useContext(PreloaderContext) ?? defaultContextValue;\n}\n","\"use client\";\n\nimport React, { \n createContext, \n useState, \n useRef, \n useEffect, \n useCallback, \n useMemo, \n useContext \n} from 'react';\n\nimport { usePageTransition } from '../../libs/hooks/usePageTransition.js';\nimport { usePreloader } from './PreloaderProvider.jsx';\n\nconst PageEnterContext = createContext(null);\n\nfunction sortByPriority(a, b) {\n return a.priority - b.priority;\n}\n\nexport function PageEnterProvider({ children }) {\n const { phase: pageTransitionPhase } = usePageTransition();\n const { phase: preloaderPhase } = usePreloader();\n \n const [phase, setPhase] = useState(\"waiting\");\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(false);\n \n const callbacksMapRef = useRef(new Map());\n const isTriggeringRef = useRef(false);\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n setPrefersReducedMotion(mediaQuery.matches);\n \n const handleMediaQueryChange = (e) => setPrefersReducedMotion(e.matches);\n mediaQuery.addEventListener(\"change\", handleMediaQueryChange);\n \n return () => {\n mediaQuery.removeEventListener(\"change\", handleMediaQueryChange);\n };\n }, []);\n\n const register = useCallback((id, trigger, priority = 0) => {\n callbacksMapRef.current.set(id, { id, trigger, priority });\n }, []);\n\n const unregister = useCallback((id) => {\n callbacksMapRef.current.delete(id);\n }, []);\n\n const triggerEnter = useCallback(() => {\n if (isTriggeringRef.current) {\n return;\n }\n \n isTriggeringRef.current = true;\n setPhase(\"entering\");\n \n const callbacks = Array.from(callbacksMapRef.current.values());\n callbacks.sort(sortByPriority);\n \n let lastPriority = null;\n let staggerIndex = 0;\n\n for (const item of callbacks) {\n if (lastPriority !== null && item.priority >\n lastPriority) {\n staggerIndex += 0.08;\n }\n lastPriority = item.priority;\n item.trigger(staggerIndex);\n }\n \n setTimeout(() => {\n setPhase(\"complete\");\n }, 1000 * (staggerIndex + 1));\n }, []);\n\n useEffect(() => {\n const isPreloaderReady = preloaderPhase === \"revealing\" || preloaderPhase === \"hidden\";\n \n if (\n (pageTransitionPhase === \"exiting\" || pageTransitionPhase === \"idle\") && \n phase === \"waiting\" && \n isPreloaderReady\n ) {\n const timerId = setTimeout(() => {\n triggerEnter();\n }, 250);\n \n return () => clearTimeout(timerId);\n }\n }, [pageTransitionPhase, preloaderPhase, phase, triggerEnter]);\n\n useEffect(() => {\n if (pageTransitionPhase === \"entering\" || pageTransitionPhase === \"holding\") {\n setPhase(\"waiting\");\n isTriggeringRef.current = false;\n }\n }, [pageTransitionPhase]);\n\n const contextValue = useMemo(() => ({\n phase,\n register,\n unregister,\n prefersReducedMotion\n }), [phase, register, unregister, prefersReducedMotion]);\n\n return (\n <PageEnterContext.Provider value={contextValue}>\n {children}\n </PageEnterContext.Provider>\n );\n}\n\nconst defaultContextValue = {\n phase: \"complete\",\n register: () => {},\n unregister: () => {},\n prefersReducedMotion: false\n};\n\nexport function usePageEnterContext() {\n return useContext(PageEnterContext) ?? defaultContextValue;\n}\n\n","\"use client\";\n\nimport { useRef, useEffect, useMemo } from 'react';\nimport { usePageEnterContext } from '../../packages/providers/PageEnterProvider.jsx';\n\nexport function usePageEnter(callback, options = {}) {\n const { priority = 0, skip = false } = options;\n\n const {\n register,\n unregister,\n phase,\n prefersReducedMotion\n } = usePageEnterContext();\n\n \n \n const uuid = useMemo(() => crypto.randomUUID(), []);\n const idRef = useRef(uuid);\n\n useEffect(() => {\n if (skip) {\n return;\n }\n\n const currentId = idRef.current;\n \n register(currentId, callback, priority);\n \n return () => {\n unregister(currentId);\n };\n }, [register, unregister, callback, priority, skip]);\n\n const isEntering = phase === \"entering\";\n const isComplete = phase === \"complete\";\n\n const returnedState = useMemo(() => ({\n phase,\n prefersReducedMotion,\n isEntering,\n isComplete\n }), [phase, prefersReducedMotion, isEntering, isComplete]);\n\n return returnedState;\n}\n\n","\"use client\";\n\nimport { useEffect, useState } from 'react';\n\n/**\n * Standalone replacement for the monorepo's `@shared/hooks/useIsTouchDevice`\n * import (only the `useBreakpoint` named export was actually used here).\n *\n * Tracks whether the viewport currently matches or exceeds a named\n * breakpoint, using standard Tailwind CSS breakpoint widths so behavior\n * matches what most consuming apps already expect.\n */\nconst BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536\n};\n\nexport function useBreakpoint(breakpoint = 'md') {\n const minWidth = BREAKPOINTS[breakpoint] ?? BREAKPOINTS.md;\n\n const [matches, setMatches] = useState(() => {\n if (typeof window === 'undefined') return false;\n return window.matchMedia(`(min-width: ${minWidth}px)`).matches;\n });\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(`(min-width: ${minWidth}px)`);\n const handleChange = (event) => setMatches(event.matches);\n\n setMatches(mediaQuery.matches);\n mediaQuery.addEventListener('change', handleChange);\n\n return () => {\n mediaQuery.removeEventListener('change', handleChange);\n };\n }, [minWidth]);\n\n return matches;\n}\n\nexport default useBreakpoint;\n","/**\n * Standalone replacement for the monorepo's `@shared/constants/constants`\n * import — only the single value actually used by this package\n * (`ASCII_REVEAL_DURATION`, consumed by `useAsciiDelay`) is reproduced here.\n *\n * Value chosen to match the pacing of this package's other reveal timings\n * (e.g. ScrambleText's default `duration = 0.6`, Preloader's ~1s phases).\n */\nexport const ASCII_REVEAL_DURATION = 1.2;\n","import { useBreakpoint } from \"./useBreakpoint.js\";\nimport { ASCII_REVEAL_DURATION } from \"../constants/timing.js\";\n\nconst asciiDelayBase = 0.1 * ASCII_REVEAL_DURATION;\n\nexport function useAsciiDelay() {\n const md = useBreakpoint(\"md\");\n return md ? asciiDelayBase : 0;\n}\n"],"mappings":"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","names":["gsap","import_react","import_class_variance_authority","gsap","classVarianceCx","import_react","import_react","import_react","import_react","import_react","import_jsx_runtime","ScrollTrigger","import_jsx_runtime","stagger","gsap","import_jsx_runtime","gsap","import_react","import_jsx_runtime","gsap","import_react","import_react","DEFAULT_CHARS","lines","gsap","stagger","_a","import_jsx_runtime","import_react","import_react_slot","import_jsx_runtime","AnimatedLink","import_react","cx","import_jsx_runtime","import_react","import_jsx_runtime","gsap","import_react","import_framer_motion","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","defaultContextValue","import_jsx_runtime","gsap","_a","import_react","import_jsx_runtime","defaultContextValue","import_react","import_react"]}
|
|
1
|
+
{"version":3,"sources":["../packages/index.js","../packages/animations/ScrambleText.jsx","../libs/vendor.js","../packages/animations/ScrambleGroup.jsx","../libs/hooks/useIdleGSAP.js","../libs/hooks/usePageTransition.js","../packages/providers/PageTransitionProvider.jsx","../packages/providers/LenisProvider.jsx","../libs/constants/chars.js","../packages/animations/AnimatedHeadline.jsx","../packages/animations/AnimatedButton.jsx","../libs/hooks/useDualLayerScramble.js","../packages/animations/AnimatedLink.jsx","../packages/animations/AnimatedProse.jsx","../libs/utils/easings.js","../packages/animations/AnimatedSubtext.jsx","../packages/animations/AnimatedText.jsx","../packages/animations/ScrollAnimatedHeadline.jsx","../packages/animations/Preloader.jsx","../packages/providers/PreloaderProvider.jsx","../packages/providers/PageEnterProvider.jsx","../libs/hooks/usePageEnter.js","../libs/hooks/useBreakpoint.js","../libs/constants/timing.js","../libs/hooks/useAsciiDelay.js"],"sourcesContent":["/* ---------------------------------------------------------------------- *\n * @drivexstudio/animations — public entry point\n * ---------------------------------------------------------------------- */\n\n// Animation components\nexport { default as ScrambleText } from './animations/ScrambleText.jsx';\nexport { default as ScrambleGroup, useScrambleGroup } from './animations/ScrambleGroup.jsx';\nexport { default as AnimatedHeadline } from './animations/AnimatedHeadline.jsx';\nexport { default as AnimatedButton } from './animations/AnimatedButton.jsx';\nexport { default as AnimatedLink } from './animations/AnimatedLink.jsx';\nexport { AnimatedProse, AnimatedProseContext, stagger } from './animations/AnimatedProse.jsx';\nexport { default as AnimatedSubtext } from './animations/AnimatedSubtext.jsx';\nexport { default as AnimatedText } from './animations/AnimatedText.jsx';\nexport { default as ScrollAnimatedHeadline } from './animations/ScrollAnimatedHeadline.jsx';\nexport { default as Preloader } from './animations/Preloader.jsx';\n\n// Providers — several components (Preloader, page-transition-aware\n// components) need these ancestors mounted somewhere above them in the\n// consumer's app tree to function correctly.\nexport { default as PreloaderProvider, usePreloader } from './providers/PreloaderProvider.jsx';\nexport { PageEnterProvider, usePageEnterContext } from './providers/PageEnterProvider.jsx';\nexport { PageTransitionProvider, usePageTransitionContext } from './providers/PageTransitionProvider.jsx';\nexport {\n LenisProvider,\n useLenis,\n getLenis,\n scrollToTop,\n setCssScrollLocked,\n getCssScrollLocked\n} from './providers/LenisProvider.jsx';\n\n// Hooks\nexport { usePageEnter } from '../libs/hooks/usePageEnter.js';\nexport { usePageTransition } from '../libs/hooks/usePageTransition.js';\nexport { useIdleGSAP } from '../libs/hooks/useIdleGSAP.js';\nexport { useAsciiDelay } from '../libs/hooks/useAsciiDelay.js';\nexport { default as useDualLayerScramble } from '../libs/hooks/useDualLayerScramble.js';\n\n// Low-level utilities, exposed for advanced consumers who want to\n// customize easing/GSAP plugin wiring without pulling in a component.\nexport { gsap, useGSAP, ScrollTrigger, SplitText, ScrambleTextPlugin, cx, cva } from '../libs/vendor.js';\nexport { easingDefinitionToFunction } from '../libs/utils/easings.js';\nexport { DEFAULT_CHARS } from '../libs/constants/chars.js';\n","\"use client\";\n\nimport React, { useEffect, useRef } from 'react';\nimport { gsap, ScrambleTextPlugin } from '../../libs/vendor.js';\nimport { useScrambleGroup } from './ScrambleGroup.jsx';\nimport { DEFAULT_CHARS } from '../../libs/constants/chars.js';\n\nexport default function ScrambleText({\n children,\n className,\n duration = 0.6,\n chars = DEFAULT_CHARS,\n dualLayer = true,\n triggerOnHover = false,\n revealMode = false,\n theme = \"dark\",\n firstColorClass,\n secondColorClass,\n onComplete,\n onReady,\n multiLine = false\n}) {\n const containerRef = useRef(null);\n const textElementRef = useRef(null);\n const timelineRef = useRef(null);\n const internalTextRef = useRef(\"\");\n const isCompleteRef = useRef(false);\n\n const instanceIdRef = useRef(`scramble-${Math.random().toString(36).slice(2, 9)}`);\n\n const themeColors = theme === \"brand\" \n ? { firstColorClass: \"scramble-white\", secondColorClass: \"scramble-foreground\" } \n : { firstColorClass: \"scramble-brand\", secondColorClass: \"scramble-foreground\" };\n\n const color1 = firstColorClass ?? themeColors.firstColorClass;\n const color2 = secondColorClass ?? themeColors.secondColorClass;\n\n const scrambleGroup = useScrambleGroup();\n\n let childText;\n if (typeof children === \"string\") {\n childText = children;\n } else if (typeof children === \"number\") {\n childText = String(children);\n } else {\n childText = \"\";\n }\n\n useEffect(() => {\n internalTextRef.current = childText;\n }, [childText]);\n\n const killTimeline = () => {\n if (timelineRef.current) {\n timelineRef.current.kill();\n timelineRef.current = null;\n }\n };\n\n const triggerAnimation = () => {\n if (!textElementRef.current) return null;\n \n const targetEl = textElementRef.current;\n const textToScramble = internalTextRef.current || childText;\n\n if (!textToScramble || textToScramble.length === 0) return null;\n\n // Respect reduced motion preference\n if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) {\n targetEl.textContent = textToScramble;\n targetEl.className = targetEl.className.replace(/\\bscramble-\\w+\\b/g, \"\");\n isCompleteRef.current = true;\n onComplete?.();\n return null;\n }\n\n killTimeline();\n\n timelineRef.current = gsap.timeline({\n onComplete: () => {\n timelineRef.current = null;\n isCompleteRef.current = true;\n onComplete?.();\n }\n });\n\n if (dualLayer) {\n const generateScrambledString = (targetString, charset = DEFAULT_CHARS) => {\n let result = \"\";\n for (let t = 0; t < targetString.length; t++) {\n let char = targetString[t];\n if (char === \" \" || char === \"\\n\" || char === \"\\r\") {\n result += char;\n } else {\n result += charset[Math.floor(Math.random() * charset.length)];\n }\n }\n return result;\n };\n\n const scrambledText = generateScrambledString(textToScramble, chars);\n const nonWhitespaceLength = textToScramble.replace(/\\s/g, \"\").length;\n const stepDuration = nonWhitespaceLength > 0 ? duration / nonWhitespaceLength : 0;\n\n if (revealMode && !isCompleteRef.current) {\n targetEl.textContent = textToScramble.replace(/[^\\s\\n\\r]/g, \" \");\n timelineRef.current.to(targetEl, {\n duration: duration,\n scrambleText: {\n text: scrambledText,\n chars: chars,\n speed: 1,\n revealDelay: 0.1,\n oldClass: color1,\n newClass: color1\n },\n ease: \"none\"\n });\n } else {\n timelineRef.current.to(targetEl, {\n duration: duration,\n scrambleText: {\n text: scrambledText,\n chars: chars,\n speed: 1,\n revealDelay: 0.1,\n oldClass: color2,\n newClass: color1\n },\n ease: \"none\"\n });\n }\n\n timelineRef.current.to(targetEl, {\n duration: duration,\n scrambleText: {\n text: textToScramble,\n chars: chars,\n speed: 1,\n revealDelay: 0.1,\n oldClass: color1,\n newClass: color2\n },\n ease: \"none\"\n }, stepDuration);\n\n } else {\n timelineRef.current.to(targetEl, {\n duration: duration,\n scrambleText: {\n text: textToScramble,\n chars: chars,\n speed: 1,\n revealDelay: 0.2\n },\n ease: \"none\"\n });\n }\n\n return timelineRef.current;\n };\n\n\n useEffect(() => {\n if (scrambleGroup) {\n scrambleGroup.register(instanceIdRef.current, triggerAnimation);\n return () => {\n scrambleGroup.unregister(instanceIdRef.current);\n };\n }\n }, [scrambleGroup, triggerAnimation]);\n\n useEffect(() => {\n onReady?.(triggerAnimation);\n }, [onReady, triggerAnimation]);\n\n const handleMouseEnter = () => {\n if (triggerOnHover) {\n triggerAnimation();\n }\n };\n\n useEffect(() => {\n return () => {\n killTimeline();\n };\n }, []);\n\n const initialDisplayText = revealMode ? childText.replace(/[^\\s\\n\\r]/g, \" \") : childText;\n const whiteSpaceValue = multiLine ? \"normal\" : \"nowrap\";\n const displayValue = multiLine ? \"inline\" : \"inline-block\";\n\n const containerStyle = {\n position: \"relative\",\n display: displayValue,\n whiteSpace: whiteSpaceValue\n };\n\n const hiddenSpanStyle = {\n visibility: \"hidden\",\n whiteSpace: whiteSpaceValue\n };\n\n const animatedSpanStyle = {\n position: \"absolute\",\n top: 0,\n left: 0,\n whiteSpace: whiteSpaceValue,\n ...(multiLine ? { width: \"100%\" } : {})\n };\n\n return (\n <span\n ref={containerRef}\n className={className}\n style={containerStyle}\n onMouseEnter={triggerOnHover ? handleMouseEnter : undefined}\n >\n <span className=\"sr-only\">{childText}</span>\n <span aria-hidden=\"true\" style={hiddenSpanStyle}>\n {childText}\n </span>\n <span ref={textElementRef} aria-hidden=\"true\" style={animatedSpanStyle}>\n {initialDisplayText}\n </span>\n </span>\n );\n}","import { gsap } from 'gsap';\nimport { useGSAP } from '@gsap/react';\nimport { ScrollTrigger } from 'gsap/ScrollTrigger';\nimport { Flip } from 'gsap/Flip';\nimport { SplitText } from 'gsap/SplitText';\nimport { ScrambleTextPlugin } from 'gsap/ScrambleTextPlugin';\nimport { InertiaPlugin } from 'gsap/InertiaPlugin';\nimport { Draggable } from 'gsap/Draggable';\nimport { cx as classVarianceCx } from \"class-variance-authority\";\n\ngsap.registerPlugin(\n ScrollTrigger, \n ScrambleTextPlugin, \n SplitText, \n Flip,\n Draggable,\n InertiaPlugin\n );\n\nexport { \n gsap, \n useGSAP, \n ScrollTrigger, \n SplitText, \n ScrambleTextPlugin, \n Flip,\n Draggable,\n InertiaPlugin\n };\n\n\nexport const cx = classVarianceCx;\nexport { cva } from \"class-variance-authority\";\n","import React, { createContext, useContext, useRef, useState, useCallback, useMemo } from 'react';\nimport { gsap, ScrollTrigger } from '../../libs/vendor.js';\nimport { useIdleGSAP } from '../../libs/hooks/useIdleGSAP.js';\n\nconst ScrambleContext = createContext(null);\n\nexport default function ScrambleGroup({\n children,\n stagger = 0.1,\n start = \"top 80%\",\n markers = false,\n manual = false,\n className\n}) {\n const childrenMapRef = useRef(new Map());\n \n const [hasTriggered, setHasTriggered] = useState(false);\n const isTriggering = useRef(false);\n const scrollTriggerRef = useRef(null);\n const containerRef = useRef(null); \n\n const register = useCallback((id, callback) => {\n childrenMapRef.current.set(id, callback);\n }, []);\n\n const unregister = useCallback((id) => {\n childrenMapRef.current.delete(id);\n }, []);\n\n const triggerAll = useCallback((customStagger) => {\n if (isTriggering.current) return;\n \n isTriggering.current = true;\n \n const callbacks = Array.from(childrenMapRef.current.values());\n const staggerValue = customStagger ?? stagger;\n\n callbacks.forEach((callbackFn, index) => {\n gsap.delayedCall(index * staggerValue, () => {\n callbackFn();\n });\n });\n\n setHasTriggered(true);\n }, [stagger]);\n\n const setupScrollTrigger = useCallback(() => {\n if (manual || !containerRef.current) return;\n isTriggering.current = false;\n const tween = gsap.to(containerRef.current, {\n scrollTrigger: {\n trigger: containerRef.current,\n start: start,\n markers: markers,\n toggleActions: \"play none none none\"\n },\n onStart: () => {\n triggerAll();\n },\n duration: 0.001\n });\n\n scrollTriggerRef.current = tween.scrollTrigger ?? null;\n\n return () => {\n tween.kill();\n scrollTriggerRef.current?.kill();\n };\n }, [manual, start, markers, triggerAll]);\n\n useIdleGSAP(setupScrollTrigger, {\n dependencies: [manual, start, markers, triggerAll]\n });\n\n const contextValue = useMemo(() => ({\n register,\n unregister,\n triggerAll,\n hasTriggered\n }), [register, unregister, triggerAll, hasTriggered]);\n\n return (\n <ScrambleContext.Provider value={contextValue}>\n <div ref={containerRef} className={className}>\n {children}\n </div>\n </ScrambleContext.Provider>\n );\n}\n\nexport function useScrambleGroup() {\n return useContext(ScrambleContext);\n}\n","\"use client\";\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useGSAP } from '@gsap/react';\nimport { usePageTransition } from './usePageTransition.js';\n\nexport function useIdleGSAP(callback, config) {\n const { phase } = usePageTransition();\n const [isIdle, setIsIdle] = useState(phase === \"idle\");\n\n useEffect(() => {\n if (phase === \"idle\") {\n setIsIdle(true);\n } else if (phase === \"holding\") {\n setIsIdle(false);\n }\n }, [phase]);\n\n const wrappedCallback = useCallback((context, contextSafe) => {\n if (isIdle) {\n return callback(context, contextSafe);\n }\n }, [callback, isIdle]);\n\n const gsapConfig = useMemo(() => {\n const configDependencies = config?.dependencies ?? [];\n const combinedDependencies = [...configDependencies, isIdle];\n\n return {\n ...config,\n dependencies: combinedDependencies\n };\n }, [config, isIdle]);\n\n return useGSAP(wrappedCallback, gsapConfig);\n}\n","\"use client\";\n\nimport { useMemo } from 'react';\nimport { usePageTransitionContext } from '../../packages/providers/PageTransitionProvider.jsx';\n\nexport function usePageTransition() {\n const {\n startTransition,\n phase,\n isPending\n } = usePageTransitionContext();\n\n const isTransitioning = phase !== \"idle\";\n\n const transitionState = useMemo(() => ({\n startTransition,\n isTransitioning,\n phase,\n isPending\n }), [isPending, phase, startTransition, isTransitioning]);\n\n return transitionState;\n}\n","\"use client\";\n\nimport React, { \n createContext, \n useState, \n useTransition, \n useRef, \n useCallback, \n useEffect, \n useMemo, \n useContext \n} from 'react';\n\nimport { scrollToTop } from './LenisProvider.jsx';\n\nconst PageTransitionContext = createContext(null);\nlet scrollTriggerModulePromise = null;\n\nfunction getScrollTriggerModule() {\n if (!scrollTriggerModulePromise) {\n \n scrollTriggerModulePromise = import('gsap/ScrollTrigger'); \n }\n return scrollTriggerModulePromise;\n}\n\nfunction clearScrollMemory() {\n const modulePromise = getScrollTriggerModule();\n if (modulePromise) {\n modulePromise.then(({ ScrollTrigger }) => {\n ScrollTrigger.clearScrollMemory();\n });\n }\n}\n\nfunction refreshScrollTrigger() {\n const modulePromise = getScrollTriggerModule();\n if (modulePromise) {\n modulePromise.then(({ ScrollTrigger }) => {\n ScrollTrigger.refresh(true);\n });\n }\n}\n\n\nfunction prefersReducedMotion() {\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\nexport function PageTransitionProvider({ children }) {\n const [phase, setPhase] = useState(\"idle\");\n const [isPending, startTransitionReact] = useTransition();\n const timerRef = useRef(null);\n const pendingCallbackRef = useRef(null);\n const startTimeRef = useRef(0);\n\n const clearTimer = useCallback(() => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n }, []);\n\n const handlePopState = useCallback(() => {\n clearTimer();\n if (!window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) {\n startTimeRef.current = 0;\n pendingCallbackRef.current = null;\n setPhase(\"holding\");\n clearScrollMemory();\n \n timerRef.current = window.setTimeout(() => {\n setPhase(\"exiting\");\n timerRef.current = window.setTimeout(() => {\n setPhase(\"idle\");\n refreshScrollTrigger();\n }, 1200);\n }, 100);\n }\n }, [clearTimer]);\n\n const startTransition = useCallback((callback) => {\n clearTimer();\n pendingCallbackRef.current = callback;\n \n if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) {\n callback();\n } else {\n setPhase(\"entering\");\n timerRef.current = window.setTimeout(() => {\n startTimeRef.current = Date.now();\n setPhase(\"holding\");\n clearScrollMemory();\n scrollToTop();\n \n startTransitionReact(() => {\n pendingCallbackRef.current?.();\n });\n }, 1300);\n }\n }, [clearTimer, startTransitionReact]);\n\n \n useEffect(() => {\n if (phase === \"holding\" && !isPending && startTimeRef.current > 0) {\n const elapsed = Date.now() - startTimeRef.current;\n const remainingDelay = Math.max(0, 100 - elapsed);\n \n timerRef.current = window.setTimeout(() => {\n setPhase(\"exiting\");\n startTimeRef.current = 0;\n \n timerRef.current = window.setTimeout(() => {\n setPhase(\"idle\");\n refreshScrollTrigger();\n }, 1200);\n }, remainingDelay);\n }\n }, [phase, isPending]);\n\n \n useEffect(() => {\n const onPopState = () => {\n handlePopState();\n };\n \n window.addEventListener(\"popstate\", onPopState);\n return () => {\n window.removeEventListener(\"popstate\", onPopState);\n };\n }, [handlePopState]);\n\n \n useEffect(() => {\n return () => {\n clearTimer();\n };\n }, [clearTimer]);\n\n const contextValue = useMemo(() => ({\n phase,\n startTransition,\n isPending\n }), [phase, startTransition, isPending]);\n\n return (\n <PageTransitionContext.Provider value={contextValue}>\n {children}\n </PageTransitionContext.Provider>\n );\n}\n\nconst defaultContextValue = {\n phase: \"idle\",\n startTransition: (t) => t(),\n isPending: false\n};\n\nexport function usePageTransitionContext() {\n return useContext(PageTransitionContext) ?? defaultContextValue;\n}\n","\"use client\";\n\nimport React, { useEffect } from 'react';\nimport { ReactLenis, useLenis } from 'lenis/react';\n\nexport { useLenis };\n\nlet globalLenisInstance = null;\nlet isCssScrollLocked = false;\n\nexport function getLenis() {\n return globalLenisInstance;\n}\n\nexport function setCssScrollLocked(isLocked) {\n if (isLocked !== isCssScrollLocked) {\n isCssScrollLocked = isLocked;\n if (isLocked) {\n document.documentElement.classList.add(\"scroll-locked\");\n } else {\n document.documentElement.classList.remove(\"scroll-locked\");\n }\n }\n}\n\nexport function getCssScrollLocked() {\n return isCssScrollLocked;\n}\n\nexport function scrollToTop(immediate = true) {\n const lenis = globalLenisInstance;\n if (lenis) {\n lenis.scrollTo(0, { immediate });\n } else {\n window.scrollTo(0, 0);\n }\n}\n\n\nfunction LenisTracker() {\n const lenis = useLenis();\n\n useEffect(() => {\n globalLenisInstance = lenis ?? null;\n \n return () => {\n globalLenisInstance = null;\n };\n }, [lenis]);\n\n return null;\n}\n\nfunction customEasing(t) {\n return t < 0.5 ? 4 * t * t * t : 1 - ((-2 * t + 2) ** 3) / 2;\n}\n\nexport function Lenis(props) {\n return (\n <ReactLenis\n root={true}\n options={{\n anchors: {\n duration: 1.2,\n easing: customEasing\n }\n }}\n {...props}\n >\n <LenisTracker />\n {props.children}\n </ReactLenis>\n );\n}\n\nexport { Lenis as LenisProvider };\n","export const DEFAULT_CHARS = \" .'`^\\\",:;Il!i><~+_-?][}{1)(|\\\\/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$\";","\"use client\";\n\nimport React, { forwardRef, useRef, useState, useLayoutEffect, useCallback, useImperativeHandle, Fragment } from 'react';\n\nimport { gsap, useGSAP, ScrollTrigger } from '../../libs/vendor.js';\nimport { useIdleGSAP } from '../../libs/hooks/useIdleGSAP.js';\nimport { cx } from '../../libs/vendor.js';\n\nconst typographyClasses = {\n display: \"text-display\",\n h1: \"text-h1\",\n h2: \"text-h2\",\n h3: \"text-h3\",\n h4: \"text-h4\",\n h5: \"text-h5\",\n h6: \"text-h6\"\n};\n\nconst AnimatedHeadline = forwardRef(({\n children,\n as: Component = \"h1\",\n displayAs,\n className,\n skip,\n trigger = \"manual\",\n wrapperClassName\n}, ref) => {\n const containerRef = useRef(null);\n const wrapperRef = useRef(null);\n const hasRevealedRef = useRef(false);\n const [lines, setLines] = useState(null);\n \n const shouldSkip = skip ?? window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n useLayoutEffect(() => {\n if (!containerRef.current) return;\n const wordNodes = containerRef.current.querySelectorAll(\"[data-word]\");\n if (wordNodes.length === 0) return;\n\n const computedLines = [];\n let currentLine = [];\n let lastY = -Infinity;\n let lastExplicitLine = -1;\n\n for (const node of wordNodes) {\n const top = node.getBoundingClientRect().top;\n const explicitLine = Number(node.dataset.explicitLine ?? -1);\n const isNewExplicit = explicitLine !== lastExplicitLine && lastExplicitLine !== -1;\n\n if ((lastY > -Infinity && top - lastY > 2) || isNewExplicit) {\n computedLines.push(currentLine.join(\" \"));\n currentLine = [];\n }\n currentLine.push(node.textContent || \"\");\n lastY = top;\n lastExplicitLine = explicitLine;\n }\n\n if (currentLine.length > 0) {\n computedLines.push(currentLine.join(\" \"));\n }\n setLines(computedLines);\n }, []);\n\n useGSAP(() => {\n if (shouldSkip || !containerRef.current || !lines) return;\n const container = containerRef.current;\n \n gsap.set(container.querySelectorAll(\"[data-line-inner]\"), { opacity: 0 });\n gsap.set(container.querySelectorAll(\"[data-brand-rect], [data-fg-rect]\"), { scaleX: 0, transformOrigin: \"left\" });\n }, { dependencies: [shouldSkip, lines] });\n\n useIdleGSAP(() => {\n if (trigger !== \"scroll\" || shouldSkip || !lines) return;\n const triggerEl = wrapperRef.current || containerRef.current;\n \n if (triggerEl) {\n ScrollTrigger.create({\n trigger: triggerEl,\n start: \"top bottom\",\n once: true,\n onEnter: () => reveal()\n });\n }\n }, { dependencies: [trigger, shouldSkip, lines] });\n\n const reveal = useCallback((delayOffset = 0) => {\n if (hasRevealedRef.current || shouldSkip || !containerRef.current) return;\n hasRevealedRef.current = true;\n \n const lineNodes = containerRef.current.querySelectorAll(\"[data-line]\");\n\n for (let r = 0; r < lineNodes.length; r++) {\n const lineNode = lineNodes[r];\n if (!lineNode) continue;\n\n const delay = delayOffset + 0.15 * r;\n const lineInner = lineNode.querySelector(\"[data-line-inner]\");\n const brandRect = lineNode.querySelector(\"[data-brand-rect]\");\n const fgRect = lineNode.querySelector(\"[data-fg-rect]\");\n\n if (!lineInner || !brandRect || !fgRect) continue;\n\n const rects = [brandRect, fgRect];\n const tl = gsap.timeline({ delay });\n\n tl.to(brandRect, { scaleX: 1, duration: 0.45, ease: \"power3.inOut\" }, 0);\n tl.to(fgRect, { scaleX: 1, duration: 0.45, ease: \"power3.inOut\" }, 0.1);\n tl.set(lineInner, { opacity: 1 }, 0.5);\n tl.set(rects, { transformOrigin: \"right\" }, 0.5);\n tl.to(fgRect, { scaleX: 0, duration: 0.45, ease: \"power3.inOut\" }, 0.5);\n tl.to(brandRect, { scaleX: 0, duration: 0.45, ease: \"power3.inOut\" }, 0.6);\n }\n }, [shouldSkip]);\n\n const reset = useCallback(() => {\n hasRevealedRef.current = false;\n if (!containerRef.current) return;\n \n const container = containerRef.current;\n gsap.set(container.querySelectorAll(\"[data-line-inner]\"), { opacity: 0 });\n gsap.set(container.querySelectorAll(\"[data-brand-rect], [data-fg-rect]\"), { scaleX: 0, transformOrigin: \"left\" });\n }, []);\n\n useImperativeHandle(ref, () => ({ reveal, reset }), [reveal, reset]);\n\n const resolvedClassName = cx(typographyClasses[displayAs ?? Component], className);\n\n if (!lines) {\n const manualLines = children.split(\"\\n\");\n const preRenderedContent = (\n <Component ref={containerRef} className={resolvedClassName}>\n {manualLines.map((lineStr, lineIndex) => (\n <Fragment key={lineIndex}>\n {lineIndex > 0 && <br />}\n {lineStr.split(/\\s+/).filter(Boolean).map((word, wordIndex) => (\n <Fragment key={wordIndex}>\n {wordIndex > 0 && \" \"}\n <span data-word data-explicit-line={lineIndex}>\n {word}\n </span>\n </Fragment>\n ))}\n </Fragment>\n ))}\n </Component>\n );\n\n return trigger === \"scroll\" ? (\n <div ref={wrapperRef} className={wrapperClassName}>\n {preRenderedContent}\n </div>\n ) : (\n preRenderedContent\n );\n }\n\n const animatedContent = (\n <Component ref={containerRef} className={resolvedClassName}>\n {lines.map((lineStr, lineIndex) => (\n <Fragment key={lineIndex}>\n {lineIndex > 0 && <br />}\n <div data-line className=\"relative inline-block\">\n <span data-line-inner className=\"block whitespace-nowrap\">\n {lineStr}\n </span>\n {!shouldSkip && (\n <Fragment>\n <div data-brand-rect className=\"absolute -inset-x-[0.1em] -inset-y-[0.1em] bg-brand\" />\n <div data-fg-rect className=\"absolute -inset-x-[0.1em] -inset-y-[0.1em] bg-foreground\" />\n </Fragment>\n )}\n </div>\n </Fragment>\n ))}\n </Component>\n );\n\n return trigger === \"scroll\" ? (\n <div ref={wrapperRef} className={wrapperClassName}>\n {animatedContent}\n </div>\n ) : (\n animatedContent\n );\n});\n\nexport default AnimatedHeadline;","\"use client\";\n\nimport React, { useRef } from 'react';\nimport { Slot, Slottable } from '@radix-ui/react-slot';\nimport { cva, cx } from '../../libs/vendor.js';\nimport useDualLayerScramble from '../../libs/hooks/useDualLayerScramble.js';\n\nconst buttonVariants = cva(\n [\n \"group inline-flex min-w-0 shrink-0 cursor-pointer items-center justify-center whitespace-nowrap\",\n \"font-medium font-mono uppercase\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-brand/50 focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n \"disabled:pointer-events-none disabled:opacity-50\"\n ],\n {\n variants: {\n variant: {\n primary: []\n },\n size: {\n xs: \"text-body-sm\",\n sm: \"text-body-sm\",\n default: \"text-body-sm lg:text-body\",\n lg: \"text-body lg:text-body-lg\"\n }\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"default\"\n }\n }\n);\n\nconst iconVariants = cva(\n [\n \"flex items-center justify-center\",\n \"transition-transform duration-700 [transition-timing-function:var(--ease-power4-in-out)]\"\n ],\n {\n variants: {\n size: {\n xs: \"size-32\",\n sm: \"size-32 lg:size-40\",\n default: \"size-40 lg:size-48\",\n lg: \"size-48 lg:size-56\"\n },\n position: {\n left: \"origin-left -rotate-45 scale-0\",\n right: \"absolute right-0 z-10 origin-right rotate-0 scale-100\"\n },\n theme: {\n light: \"bg-foreground text-background\",\n dark: \"bg-foreground text-background\",\n brand: \"bg-brand text-black\"\n }\n },\n defaultVariants: {\n size: \"default\",\n theme: \"light\"\n }\n }\n);\n\nconst textWrapperVariants = cva(\n [\n \"flex w-full flex-1 items-center justify-center\",\n \"transition-transform duration-700 [transition-timing-function:var(--ease-power4-in-out)]\"\n ],\n {\n variants: {\n size: {\n xs: \"h-32 -translate-x-[calc(32px+6px)] px-8\",\n sm: \"h-32 -translate-x-[calc(32px+6px)] px-8 lg:h-40 lg:-translate-x-[calc(40px+6px)] lg:px-12\",\n default: \"h-40 -translate-x-[calc(40px+6px)] px-12 lg:h-48 lg:-translate-x-[calc(48px+6px)] lg:px-16\",\n lg: \"h-48 -translate-x-[calc(48px+6px)] px-16 lg:h-56 lg:-translate-x-[calc(56px+6px)] lg:px-24\"\n },\n theme: {\n light: \"bg-foreground text-background\",\n dark: \"bg-foreground text-background\",\n brand: \"bg-brand text-black\"\n }\n },\n defaultVariants: {\n size: \"default\",\n theme: \"light\"\n }\n }\n);\n\nfunction PlusIcon({ className }) {\n return (\n <svg\n className={cx(\"size-[0.75em]\", className)}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 1v10M1 6h10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"square\"\n />\n </svg>\n );\n}\n\nexport default function AnimatedButton(props) {\n const {\n children,\n className,\n asChild,\n variant,\n size,\n theme,\n type,\n ...rest\n } = props;\n\n const resolvedType = type === undefined ? (asChild ? undefined : \"button\") : type;\n const Comp = asChild ? Slot : \"button\";\n\n const themeColors = theme === \"brand\" \n ? { firstColorClass: \"scramble-white\", secondColorClass: \"scramble-inherit\" } \n : { firstColorClass: \"scramble-brand\", secondColorClass: \"scramble-inherit\" };\n\n const scrambleConfig = {\n duration: 0.5,\n initiallyVisible: true,\n firstColorClass: themeColors.firstColorClass,\n secondColorClass: themeColors.secondColorClass\n };\n\n const scrambleResult = useDualLayerScramble(scrambleConfig);\n const isScramblingRef = useRef(false);\n\n const handleMouseEnter = () => {\n if (!isScramblingRef.current) {\n isScramblingRef.current = true;\n scrambleResult.scramble();\n }\n };\n\n const handleMouseLeave = () => {\n isScramblingRef.current = false;\n };\n\n const buttonClasses = buttonVariants({ variant, size, className });\n\n const renderContent = (content) => (\n <span className=\"relative flex w-full items-center gap-6\">\n <span\n className={cx(\n iconVariants({ size, theme, position: \"left\" }),\n \"group-hover:rotate-0 group-hover:scale-100\"\n )}\n >\n <PlusIcon />\n </span>\n \n <span\n className={cx(\n textWrapperVariants({ size, theme }),\n \"group-hover:translate-x-0\"\n )}\n >\n <span ref={scrambleResult.ref}>{content}</span>\n </span>\n \n <span\n className={cx(\n iconVariants({ size, theme, position: \"right\" }),\n \"group-hover:-rotate-45 group-hover:scale-0\"\n )}\n >\n <PlusIcon />\n </span>\n </span>\n );\n\n return (\n <Comp\n type={resolvedType}\n className={buttonClasses}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...rest}\n >\n <Slottable asChild={asChild} child={children}>\n {renderContent}\n </Slottable>\n </Comp>\n );\n}\n","\"use client\";\nimport { useRef, useEffect, useCallback } from 'react';\nimport { gsap, ScrambleTextPlugin, ScrollTrigger } from '../vendor.js';\nconst DEFAULT_CHARS = \" .'`^\\\",:;Il!i><~+_-?][}{1)(|\\\\/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$\";\n\nexport default function useDualLayerScramble(options) {\n const elementRef = useRef(null);\n const timelineRef = useRef(null);\n const originalTextRef = useRef(\"\");\n const originalHTMLRef = useRef(\"\");\n const dimensionsRef = useRef(null);\n const linesDataRef = useRef([]);\n const spansRef = useRef([]);\n const isAnimatingRef = useRef(false);\n const isPreparedRef = useRef(false);\n\n useEffect(() => {\n if (!elementRef.current) return;\n \n const el = elementRef.current;\n const innerText = el.innerText ?? \"\";\n \n if (innerText.trim().length > 0) {\n originalTextRef.current = innerText;\n originalHTMLRef.current = el.innerHTML;\n dimensionsRef.current = { width: el.offsetWidth, height: el.offsetHeight };\n }\n }, []);\n\n const killTimeline = useCallback(() => {\n if (timelineRef.current) {\n timelineRef.current.kill();\n timelineRef.current = null;\n isAnimatingRef.current = false;\n }\n }, []);\n\n const prepareDOM = useCallback(() => {\n if (!elementRef.current || isPreparedRef.current) return;\n \n const el = elementRef.current;\n if ((originalTextRef.current || el.innerText || \"\").trim().length === 0) return;\n \n if (!dimensionsRef.current) {\n dimensionsRef.current = { width: el.offsetWidth, height: el.offsetHeight };\n }\n\n const splitTextIntoLines = (element) => {\n const text = element.innerText || \"\";\n if (text.trim().length === 0) return [];\n if (text.includes(\"\\n\")) return text.split(\"\\n\").filter(line => line.length > 0);\n \n const firstChild = element.firstChild;\n if (!firstChild || firstChild.nodeType !== Node.TEXT_NODE) return [text];\n \n const range = document.createRange();\n const lines = [];\n let currentLine = \"\";\n let lastTop = null;\n const length = firstChild.length;\n \n for (let i = 0; i < text.length && i < length; i++) {\n range.setStart(firstChild, i);\n range.setEnd(firstChild, i + 1);\n const rect = range.getBoundingClientRect();\n \n if (lastTop !== null && Math.abs(rect.top - lastTop) > 2) {\n if (currentLine.length > 0) lines.push(currentLine);\n currentLine = \"\";\n }\n currentLine += text[i];\n lastTop = rect.top;\n }\n \n if (currentLine.length > 0) lines.push(currentLine);\n return lines.length > 0 ? lines : [text];\n };\n\n const lines = splitTextIntoLines(el);\n const testDiv = document.createElement(\"div\");\n testDiv.style.cssText = `\n\t\t\tposition: absolute;\n\t\t\tvisibility: hidden;\n\t\t\tpointer-events: none;\n\t\t\twhite-space: nowrap;\n\t\t`;\n \n const computedStyle = window.getComputedStyle(el);\n testDiv.style.font = computedStyle.font;\n testDiv.style.fontSize = computedStyle.fontSize;\n testDiv.style.fontFamily = computedStyle.fontFamily;\n testDiv.style.fontWeight = computedStyle.fontWeight;\n testDiv.style.letterSpacing = computedStyle.letterSpacing;\n testDiv.style.textTransform = computedStyle.textTransform;\n \n document.body.appendChild(testDiv);\n \n linesDataRef.current = lines.map(line => {\n testDiv.textContent = line;\n return { text: line, width: testDiv.offsetWidth, height: testDiv.offsetHeight };\n });\n \n document.body.removeChild(testDiv);\n \n const maxWidth = Math.max(...linesDataRef.current.map(lineData => lineData.width));\n const totalHeight = linesDataRef.current.reduce((sum, lineData) => sum + lineData.height, 0);\n \n const finalWidth = Math.max(dimensionsRef.current?.width ?? 0, maxWidth);\n const finalHeight = Math.max(dimensionsRef.current?.height ?? 0, totalHeight);\n \n isPreparedRef.current = true;\n \n gsap.set(el, { width: finalWidth, height: finalHeight, display: \"inline-block\", overflow: \"hidden\" });\n el.innerHTML = \"\";\n spansRef.current = [];\n \n linesDataRef.current.forEach(lineData => {\n const span = document.createElement(\"span\");\n span.style.cssText = `\n\t\t\t\tdisplay: block;\n\t\t\t\topacity: 0;\n\t\t\t\twidth: ${lineData.width}px;\n\t\t\t\theight: ${lineData.height}px;\n\t\t\t\toverflow: hidden;\n\t\t\t\twhite-space: nowrap;\n\t\t\t`;\n span.innerText = lineData.text;\n el.appendChild(span);\n spansRef.current.push(span);\n });\n \n gsap.set(el, { opacity: 1 });\n }, []);\n\n const playScramble = useCallback((overrides) => {\n if (!elementRef.current) return null;\n if (isAnimatingRef.current) return timelineRef.current;\n \n prepareDOM();\n \n const config = { ...options, ...overrides };\n const duration = config.duration ?? 1;\n const speed = config.speed ?? 1;\n const chars = config.chars ?? DEFAULT_CHARS;\n const firstColorClass = config.firstColorClass ?? \"scramble-brand\";\n const secondColorClass = config.secondColorClass ?? \"scramble-foreground\";\n const stagger = config.stagger ?? 0.08;\n \n const linesData = linesDataRef.current;\n const spans = spansRef.current;\n \n if (linesData.length === 0 || spans.length === 0) return null;\n \n if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) {\n spans.forEach((span, index) => {\n const lineData = linesData[index];\n if (lineData) {\n span.innerText = lineData.text;\n }\n span.style.opacity = \"1\";\n span.className = span.className.replace(/\\bscramble-\\w+\\b/g, \"\");\n });\n config.onComplete?.();\n return null;\n }\n \n killTimeline();\n isAnimatingRef.current = true;\n \n timelineRef.current = gsap.timeline({\n onComplete: () => {\n isAnimatingRef.current = false;\n timelineRef.current = null;\n config.onComplete?.();\n }\n });\n \n spans.forEach((span, index) => {\n const lineData = linesData[index];\n if (!lineData) return;\n \n const originalText = lineData.text;\n const delay = index * stagger;\n \n const generateScrambled = (text, charSet = DEFAULT_CHARS) => {\n let scrambled = \"\";\n for (let i = 0; i < text.length; i++) {\n const char = text[i];\n if (char === \" \") {\n scrambled += char;\n } else {\n scrambled += charSet[Math.floor(Math.random() * charSet.length)];\n }\n }\n return scrambled;\n };\n \n const initialScrambledText = generateScrambled(originalText, chars);\n const nonSpaceCount = originalText.replace(/\\s/g, \"\").length;\n const spacesOnly = originalText.replace(/[^\\s]/g, \" \");\n \n timelineRef.current?.add(() => {\n gsap.set(span, { opacity: 1 });\n span.innerText = spacesOnly;\n }, delay);\n \n timelineRef.current?.to(span, {\n duration: duration,\n scrambleText: {\n text: initialScrambledText,\n chars: chars,\n speed: speed,\n revealDelay: 0.1,\n oldClass: firstColorClass,\n newClass: firstColorClass\n },\n ease: \"none\"\n }, delay);\n \n timelineRef.current?.to(span, {\n duration: duration,\n scrambleText: {\n text: originalText,\n chars: chars,\n speed: speed,\n revealDelay: 0.1,\n oldClass: firstColorClass,\n newClass: secondColorClass\n },\n ease: \"none\"\n }, delay + (nonSpaceCount > 0 ? duration / nonSpaceCount : 0));\n });\n \n return timelineRef.current;\n }, [options, killTimeline, prepareDOM]);\n\n const resetDOM = useCallback(() => {\n killTimeline();\n if (elementRef.current && isPreparedRef.current) {\n elementRef.current.innerHTML = originalHTMLRef.current || originalTextRef.current;\n gsap.set(elementRef.current, {\n opacity: 0,\n width: \"auto\",\n height: \"auto\",\n overflow: \"visible\"\n });\n spansRef.current = [];\n linesDataRef.current = [];\n isPreparedRef.current = false;\n }\n }, [killTimeline]);\n\n \n useEffect(() => {\n return () => {\n killTimeline();\n spansRef.current = [];\n linesDataRef.current = [];\n isPreparedRef.current = false;\n };\n }, [killTimeline]);\n\n return {\n ref: elementRef,\n scramble: playScramble,\n kill: resetDOM,\n isAnimating: isAnimatingRef.current\n };\n}\n","import React, { forwardRef } from 'react';\nimport { Slot, Slottable } from '@radix-ui/react-slot';\nimport { cx } from '../../libs/vendor.js';\n\nexport const AnimatedLink = forwardRef(function AnimatedLink(props, ref) {\n const {\n children,\n className,\n asChild,\n indicator,\n ...restProps\n } = props;\n\n \n const Component = asChild ? Slot : \"a\";\n const displayClass = indicator ? \"inline-flex items-center\" : \"inline-block\";\n\n \n const combinedClassName = cx(\n \"group relative w-fit cursor-pointer\",\n displayClass,\n \"outline-none focus-visible:ring-2 focus-visible:ring-brand/50 focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n className\n );\n \n const renderChildren = (childContent) => (\n <>\n {indicator && (\n <span\n className={cx(\n \"absolute left-0 size-8 bg-brand lg:size-12\",\n \"-rotate-90 scale-0\",\n \"transition-transform duration-500 [transition-timing-function:cubic-bezier(0.34,1.56,0.64,1)]\",\n \"group-hover:rotate-0 group-hover:scale-100\",\n \"group-focus-visible:rotate-0 group-focus-visible:scale-100\"\n )}\n aria-hidden=\"true\"\n />\n )}\n\n {indicator ? (\n <span\n className={cx(\n \"transition-transform duration-500 [transition-timing-function:cubic-bezier(0.33,1,0.68,1)]\",\n \"group-hover:translate-x-24\",\n \"group-focus-visible:translate-x-24\"\n )}\n >\n {childContent}\n </span>\n ) : (\n childContent\n )}\n\n <span\n className={cx(\n \"pointer-events-none absolute inset-x-0 -bottom-1\",\n indicator && [\n \"transition-transform duration-500 [transition-timing-function:cubic-bezier(0.33,1,0.68,1)]\",\n \"group-hover:translate-x-24 group-focus-visible:translate-x-24\"\n ]\n )}\n aria-hidden=\"true\"\n >\n <span\n className={cx(\n \"absolute inset-x-0 top-0 h-px bg-current\",\n \"origin-left scale-x-100\",\n \"transition-transform duration-700 [transition-timing-function:cubic-bezier(0.625,0.05,0,1)]\",\n \"delay-300 group-hover:origin-right group-hover:scale-x-0 group-hover:delay-0\",\n \"group-focus-visible:origin-right group-focus-visible:scale-x-0 group-focus-visible:delay-0\"\n )}\n />\n <span\n className={cx(\n \"absolute inset-x-0 top-0 h-px bg-current\",\n \"origin-right scale-x-0\",\n \"transition-transform duration-700 [transition-timing-function:cubic-bezier(0.625,0.05,0,1)]\",\n \"delay-0 group-hover:origin-left group-hover:scale-x-100 group-hover:delay-300\",\n \"group-focus-visible:origin-left group-focus-visible:scale-x-100 group-focus-visible:delay-300\"\n )}\n />\n </span>\n </>\n );\n\n return (\n <Component ref={ref} className={combinedClassName} {...restProps}>\n <Slottable asChild={asChild} child={children}>\n {renderChildren}\n </Slottable>\n </Component>\n );\n});\n\nexport default AnimatedLink;","\"use client\";\n\nimport React, { createContext, useState, useRef, useEffect } from 'react';\nimport { motion, animate } from 'framer-motion';\nimport { easingDefinitionToFunction } from '../../libs/utils/easings.js';\nimport { cx } from '../../libs/vendor.js';\n\nexport function stagger(amount = 0.1, { startDelay = 0, from = 0, ease } = {}) {\n return (index, totalElements) => {\n let fromVal = typeof from === \"number\" ? from : (function(fromStr, total) {\n if (fromStr === \"first\") return 0;\n let lastIndex = total - 1;\n return fromStr === \"last\" ? lastIndex : lastIndex / 2;\n })(from, totalElements);\n\n let distance = amount * Math.abs(fromVal - index);\n\n if (ease) {\n let maxStagger = totalElements * amount;\n distance = easingDefinitionToFunction(ease)(distance / maxStagger) * maxStagger;\n }\n \n return startDelay + distance;\n };\n}\n\nexport const AnimatedProseContext = createContext(false);\n\nexport function AnimatedProse({\n children,\n className,\n staggerDelay = 0.03,\n duration = 0.5,\n delay = 0,\n margin = \"0px 0px -10% 0px\"\n}) {\n const [isInView, setIsInView] = useState(false);\n const [hasSplitLines, setHasSplitLines] = useState(false);\n const containerRef = useRef(null);\n const hasAnimatedRef = useRef(false);\n\n useEffect(() => {\n if (!containerRef.current) return;\n\n const checkSplitLines = () => {\n const lines = containerRef.current?.querySelectorAll(\".split-line\");\n if (lines && lines.length > 0) {\n setHasSplitLines(true);\n return true;\n }\n return false;\n };\n\n if (checkSplitLines()) return;\n\n const intervalId = setInterval(() => {\n if (checkSplitLines()) {\n clearInterval(intervalId);\n }\n }, 50);\n\n const timeoutId = setTimeout(() => {\n clearInterval(intervalId);\n setHasSplitLines(true);\n }, 500);\n\n return () => {\n clearInterval(intervalId);\n clearTimeout(timeoutId);\n };\n }, []);\n\n useEffect(() => {\n if (!isInView || !hasSplitLines || !containerRef.current || hasAnimatedRef.current) return;\n\n const lines = containerRef.current.querySelectorAll(\".split-line\");\n if (lines.length === 0) return;\n\n hasAnimatedRef.current = true;\n containerRef.current.querySelectorAll(\".invisible\").forEach(makeVisible);\n\n // TODO: no exact match in easings.js — kept as raw literal\n const animation = animate(\n Array.from(lines),\n { y: [\"100%\", \"0%\"] },\n {\n delay: stagger(staggerDelay, { startDelay: delay }),\n duration: duration,\n ease: [0.33, 1, 0.68, 1]\n }\n );\n\n return () => {\n animation?.cancel();\n };\n }, [isInView, hasSplitLines, staggerDelay, duration, delay]);\n\n const handleViewportEnter = () => setIsInView(true);\n\n return (\n <AnimatedProseContext.Provider value={true}>\n <motion.div\n ref={containerRef}\n onViewportEnter={handleViewportEnter}\n viewport={{ once: true, margin: margin }}\n className={cx(className)}\n >\n {children}\n </motion.div>\n </AnimatedProseContext.Provider>\n );\n}\n\nfunction makeVisible(el) {\n el.style.visibility = \"visible\";\n}\n\n","/**\n * easings.js\n * -----------------------------------------------------------------------\n * Standalone replacement for the monorepo's `@shared/utils/easings` import.\n * Converts an \"easing definition\" (a named preset or a cubic-bezier array)\n * into a plain `(t: number) => number` function, where `t` is a progress\n * value between 0 and 1.\n *\n * This mirrors the shape of Framer Motion's internal easing helper so that\n * existing call sites (e.g. AnimatedProse.jsx) keep working unmodified,\n * without depending on framer-motion's private/internal module paths.\n * -----------------------------------------------------------------------\n */\n\n/**\n * Cubic bezier solver.\n * Given the two control points (x1, y1) and (x2, y2) of a cubic bezier\n * curve anchored at (0,0) and (1,1), returns a function that maps\n * progress `t` -> eased value, using Newton-Raphson iteration to solve\n * for the bezier parameter that matches `t` on the X axis.\n */\nfunction cubicBezier(x1, y1, x2, y2) {\n // Precompute polynomial coefficients for X and Y.\n const cx = 3 * x1;\n const bx = 3 * (x2 - x1) - cx;\n const ax = 1 - cx - bx;\n\n const cy = 3 * y1;\n const by = 3 * (y2 - y1) - cy;\n const ay = 1 - cy - by;\n\n function sampleCurveX(t) {\n return ((ax * t + bx) * t + cx) * t;\n }\n\n function sampleCurveY(t) {\n return ((ay * t + by) * t + cy) * t;\n }\n\n function sampleCurveDerivativeX(t) {\n return (3 * ax * t + 2 * bx) * t + cx;\n }\n\n function solveCurveX(x, epsilon = 1e-6) {\n let t = x;\n\n // Newton-Raphson iteration (fast path).\n for (let i = 0; i < 8; i++) {\n const currentX = sampleCurveX(t) - x;\n if (Math.abs(currentX) < epsilon) return t;\n\n const currentSlope = sampleCurveDerivativeX(t);\n if (Math.abs(currentSlope) < epsilon) break;\n\n t -= currentX / currentSlope;\n }\n\n // Fallback: bisection, in case Newton-Raphson didn't converge.\n let lower = 0;\n let upper = 1;\n t = x;\n\n if (t < lower) return lower;\n if (t > upper) return upper;\n\n while (lower < upper) {\n const currentX = sampleCurveX(t);\n if (Math.abs(currentX - x) < epsilon) return t;\n\n if (x > currentX) {\n lower = t;\n } else {\n upper = t;\n }\n t = (upper - lower) / 2 + lower;\n }\n\n return t;\n }\n\n return function bezierEase(t) {\n if (t <= 0) return 0;\n if (t >= 1) return 1;\n return sampleCurveY(solveCurveX(t));\n };\n}\n\n// Named presets, expressed as their standard cubic-bezier control points.\nconst NAMED_EASINGS = {\n linear: (t) => t,\n easeIn: cubicBezier(0.42, 0, 1, 1),\n easeOut: cubicBezier(0, 0, 0.58, 1),\n easeInOut: cubicBezier(0.42, 0, 0.58, 1),\n circIn: cubicBezier(0.55, 0, 1, 0.45),\n circOut: cubicBezier(0, 0.55, 0.45, 1),\n circInOut: cubicBezier(0.85, 0, 0.15, 1),\n backIn: cubicBezier(0.36, 0, 0.66, -0.56),\n backOut: cubicBezier(0.34, 1.56, 0.64, 1),\n backInOut: cubicBezier(0.68, -0.6, 0.32, 1.6),\n anticipate: cubicBezier(0.36, 0, 0.66, -0.56)\n};\n\n/**\n * @param {string | number[] | ((t: number) => number)} definition\n * - a named preset string (see NAMED_EASINGS)\n * - a 4-number cubic-bezier array: [x1, y1, x2, y2]\n * - an already-resolved easing function (passed through as-is)\n * @returns {(t: number) => number}\n */\nexport function easingDefinitionToFunction(definition) {\n if (typeof definition === 'function') {\n return definition;\n }\n\n if (Array.isArray(definition) && definition.length === 4) {\n const [x1, y1, x2, y2] = definition;\n return cubicBezier(x1, y1, x2, y2);\n }\n\n if (typeof definition === 'string' && NAMED_EASINGS[definition]) {\n return NAMED_EASINGS[definition];\n }\n\n // Unknown definition — fall back to linear rather than throwing,\n // so a bad `ease` prop degrades gracefully instead of crashing.\n return NAMED_EASINGS.linear;\n}\n\nexport default easingDefinitionToFunction;\n","import React, { forwardRef, useRef, useState, useLayoutEffect, useImperativeHandle } from 'react';\nimport { gsap, SplitText } from '../../libs/vendor.js';\nimport { cx } from '../../libs/vendor.js';\n\nconst AnimatedSubtext = forwardRef(({\n children,\n className,\n skip = false,\n staggerDelay = 0.05,\n duration = 0.8\n}, ref) => {\n const elementRef = useRef(null);\n const splitTextRef = useRef(null);\n const [isSplit, setIsSplit] = useState(false);\n\n useLayoutEffect(() => {\n if (elementRef.current && !skip) {\n setIsSplit(false);\n splitTextRef.current = new SplitText(elementRef.current, {\n type: \"lines\",\n autoSplit: true,\n aria: false,\n deepSlice: true,\n reduceWhiteSpace: false,\n mask: \"lines\",\n linesClass: \"split-line\",\n onSplit: () => setIsSplit(true)\n });\n\n return () => {\n splitTextRef.current?.revert();\n splitTextRef.current = null;\n };\n }\n }, [skip]);\n\n useImperativeHandle(ref, () => ({\n reveal: (delay = 0) => {\n if (!elementRef.current || !splitTextRef.current || skip) return;\n \n const lines = splitTextRef.current.lines ?? [];\n \n if (lines.length !== 0) {\n elementRef.current.style.visibility = \"visible\";\n gsap.fromTo(\n lines,\n { y: \"100%\" },\n {\n y: \"0%\",\n duration: duration,\n ease: \"power3.out\",\n stagger: staggerDelay,\n delay: delay\n }\n );\n }\n }\n }), [skip, duration, staggerDelay]);\n\n const renderWithLineBreaks = (text) => {\n const lines = text.split(\"\\n\");\n return lines.map((line, index) => (\n <span key={index}>\n {line}\n {index < lines.length - 1 && <br />}\n </span>\n ));\n };\n\n return skip ? (\n <p className={className}>\n {renderWithLineBreaks(children)}\n </p>\n ) : (\n <p ref={elementRef} className={cx(\"invisible\", className)}>\n {renderWithLineBreaks(children)}\n </p>\n );\n});\n\nexport default AnimatedSubtext;\n","\"use client\";\n\nimport React, { useState, useRef, useContext, useLayoutEffect, useEffect } from 'react';\nimport { motion, animate } from 'framer-motion';\nimport { AnimatedProseContext, stagger } from './AnimatedProse.jsx'; \nimport { SplitText } from '../../libs/vendor.js';\nimport { cx } from '../../libs/vendor.js';\n\nexport default function AnimatedText({\n children,\n className,\n staggerDelay = 0.03,\n duration = 0.5,\n delay = 0,\n margin = \"0px 0px -10% 0px\",\n revert = false\n}) {\n const [isInView, setIsInView] = useState(false);\n const [isSplit, setIsSplit] = useState(false);\n \n const containerRef = useRef(null);\n const splitTextRef = useRef(null);\n const inAnimatedProse = useContext(AnimatedProseContext);\n\n useLayoutEffect(() => {\n if (containerRef.current) {\n setIsSplit(false);\n splitTextRef.current = new SplitText(containerRef.current, {\n type: \"lines\",\n autoSplit: true,\n aria: false,\n deepSlice: true,\n reduceWhiteSpace: false,\n mask: \"lines\",\n linesClass: \"split-line\",\n onSplit: () => setIsSplit(true)\n });\n }\n \n return () => {\n splitTextRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (inAnimatedProse || !isInView || !isSplit || !containerRef.current || !splitTextRef.current) {\n return;\n }\n\n const lines = splitTextRef.current.lines ?? [];\n if (lines.length === 0) return;\n\n containerRef.current.style.visibility = \"visible\";\n const animation = animate(\n lines,\n { y: [\"100%\", \"0%\"] },\n {\n delay: stagger(staggerDelay, { startDelay: delay }),\n duration: duration,\n ease: [0.33, 1, 0.68, 1]\n }\n );\n\n const handleRevert = async () => {\n try {\n await animation;\n if (revert) {\n splitTextRef.current?.revert();\n }\n } catch (err) {\n }\n };\n\n handleRevert();\n\n return () => {\n animation?.cancel();\n };\n }, [isInView, isSplit, inAnimatedProse, staggerDelay, duration, delay, revert]);\n\n const handleViewportEnter = () => setIsInView(true);\n\n return (\n <motion.span\n ref={containerRef}\n onViewportEnter={handleViewportEnter}\n viewport={{ once: true, margin: margin }}\n className={cx(\"invisible\", className)}\n >\n {children}\n </motion.span>\n );\n}\n\n","import AnimatedHeadline from \"./AnimatedHeadline.jsx\";\nimport { cx } from '../../libs/vendor.js';\n\nexport default function ScrollAnimatedHeadline({\n headline,\n displayAs,\n className,\n headlineClassName,\n}) {\n if (!headline?.text || !headline?.level) return null;\n\n return (\n <AnimatedHeadline\n trigger=\"scroll\"\n as={headline.level}\n displayAs={displayAs}\n className={cx(headlineClassName)}\n wrapperClassName={className}\n >\n {headline.text}\n </AnimatedHeadline>\n );\n}\n","\"use client\";\n\nimport React, { useRef, useState, useEffect } from 'react';\nimport { gsap, useGSAP, cx } from '../../libs/vendor.js';\nimport { usePreloader } from '../providers/PreloaderProvider.jsx';\nimport ScrambleText from './ScrambleText.jsx';\n\nexport default function Preloader() {\n const { phase, setPhase, isInitialLoad } = usePreloader();\n\n const containerRef = useRef(null);\n const contentRef = useRef(null);\n const squaresContainerRef = useRef(null);\n\n const squaresRefs = useRef([]);\n const onReadyRef = useRef(null);\n const timelineRef = useRef(null);\n\n const hasStartedRef = useRef(false);\n\n const [isReducedMotion, setIsReducedMotion] = useState(false);\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n setIsReducedMotion(mediaQuery.matches);\n\n const handleChange = (e) => setIsReducedMotion(e.matches);\n mediaQuery.addEventListener(\"change\", handleChange);\n\n return () => mediaQuery.removeEventListener(\"change\", handleChange);\n }, []);\n\n const handleReady = (readyFn) => {\n onReadyRef.current = readyFn;\n };\n\n useGSAP(() => {\n if (!isInitialLoad || phase !== \"loading\" || hasStartedRef.current) return;\n\n if (isReducedMotion) {\n setPhase(\"complete\");\n return;\n }\n\n const squares = squaresRefs.current.filter(Boolean);\n if (squares.length === 0) return;\n\n hasStartedRef.current = true;\n\n let timeoutId;\n\n const runAnimation = () => {\n if (!onReadyRef.current) {\n requestAnimationFrame(runAnimation);\n return;\n }\n\n timelineRef.current = gsap.timeline();\n onReadyRef.current();\n\n squares.forEach((square, index) => {\n timelineRef.current?.fromTo(\n square,\n {\n x: index === 0 ? -16 : (index - 1) * 18,\n rotate: 0\n },\n {\n x: index * 18 - 16,\n rotate: 90,\n duration: 0.7,\n ease: \"expo.inOut\",\n immediateRender: false\n },\n index === 0 ? 0 : \">-25%\"\n );\n });\n\n const timeOffset = 2.2749999999999995;\n\n timelineRef.current?.to(\n contentRef.current,\n { opacity: 0, duration: 0.4, ease: \"power3.out\" },\n timeOffset + 0.2\n );\n\n const clipState = { value: 0 };\n const eventState = { value: false };\n\n timelineRef.current?.to(\n clipState,\n {\n value: 1,\n duration: 1.5,\n ease: \"expo.inOut\",\n onUpdate: () => {\n if (containerRef.current) {\n const val = clipState.value;\n containerRef.current.style.clipPath =\n val <= 0 ? \"polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)\" :\n val >= 1 ? \"polygon(0% 100%, 0% 100%, 0% 100%)\" :\n val <= 0.5 ? `polygon(0% 100%, ${2 * val * 100}% 0%, 100% 0%, 100% 100%)` :\n `polygon(0% 100%, 100% ${(val - 0.5) * 200}%, 100% 100%)`;\n }\n if (!eventState.value && clipState.value >= 0.9) {\n eventState.value = true;\n setPhase(\"revealing\");\n }\n }\n },\n timeOffset\n );\n };\n\n timeoutId = setTimeout(runAnimation, 100);\n\n return () => {\n clearTimeout(timeoutId);\n timelineRef.current?.kill();\n };\n \n }, { dependencies: [isInitialLoad, isReducedMotion, setPhase] });\n\n if (!isInitialLoad || phase === \"hidden\") return null;\n\n const pointerEventsClass = phase === \"complete\" ? \"pointer-events-none\" : \"\";\n const containerClasses = cx(\"fixed inset-0 z-[10000] flex items-center justify-center bg-background\", pointerEventsClass);\n\n return (\n <div ref={containerRef} data-theme=\"brand\" className={containerClasses}>\n <div ref={contentRef} className=\"flex flex-col items-center gap-4\">\n \n <div> \n <div \n ref={squaresContainerRef}\n className=\"relative overflow-x-clip overflow-y-visible\"\n style={{ width: 70, height: 16 }}\n >\n {[0, 1, 2, 3].map((index) => (\n <div\n key={index}\n ref={(el) => { squaresRefs.current[index] = el; }}\n className=\"absolute top-0 left-0 bg-foreground\"\n style={{\n width: 16,\n height: 16,\n transform: \"translateX(-16px)\",\n transformOrigin: \"bottom right\"\n }}\n />\n ))}\n </div>\n </div> \n <div>\n <div className=\"overflow-hidden\">\n <ScrambleText revealMode={true} duration={1} onReady={handleReady}>\n LOADING\n </ScrambleText>\n </div>\n </div> \n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { createContext, useState, useEffect, useContext, useMemo } from 'react';\n\nconst PreloaderContext = createContext(null);\n\nconst defaultContextValue = {\n phase: \"hidden\",\n setPhase: () => {},\n isInitialLoad: false\n};\n\nexport default function PreloaderProvider({ children }) {\n const [phase, setPhase] = useState(\"loading\");\n const [isInitialLoad, setIsInitialLoad] = useState(true);\n\n useEffect(() => {\n if (phase === \"revealing\") {\n const timer = setTimeout(() => {\n setPhase(\"hidden\");\n setIsInitialLoad(false);\n }, 200);\n \n return () => clearTimeout(timer);\n }\n }, [phase]);\n\n const contextValue = useMemo(() => ({\n phase,\n setPhase,\n isInitialLoad\n }), [phase, isInitialLoad]);\n\n return (\n <PreloaderContext.Provider value={contextValue}>\n {children}\n </PreloaderContext.Provider>\n );\n}\n\nexport function usePreloader() {\n return useContext(PreloaderContext) ?? defaultContextValue;\n}\n","\"use client\";\n\nimport React, { \n createContext, \n useState, \n useRef, \n useEffect, \n useCallback, \n useMemo, \n useContext \n} from 'react';\n\nimport { usePageTransition } from '../../libs/hooks/usePageTransition.js';\nimport { usePreloader } from './PreloaderProvider.jsx';\n\nconst PageEnterContext = createContext(null);\n\nfunction sortByPriority(a, b) {\n return a.priority - b.priority;\n}\n\nexport function PageEnterProvider({ children }) {\n const { phase: pageTransitionPhase } = usePageTransition();\n const { phase: preloaderPhase } = usePreloader();\n \n const [phase, setPhase] = useState(\"waiting\");\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(false);\n \n const callbacksMapRef = useRef(new Map());\n const isTriggeringRef = useRef(false);\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n setPrefersReducedMotion(mediaQuery.matches);\n \n const handleMediaQueryChange = (e) => setPrefersReducedMotion(e.matches);\n mediaQuery.addEventListener(\"change\", handleMediaQueryChange);\n \n return () => {\n mediaQuery.removeEventListener(\"change\", handleMediaQueryChange);\n };\n }, []);\n\n const register = useCallback((id, trigger, priority = 0) => {\n callbacksMapRef.current.set(id, { id, trigger, priority });\n }, []);\n\n const unregister = useCallback((id) => {\n callbacksMapRef.current.delete(id);\n }, []);\n\n const triggerEnter = useCallback(() => {\n if (isTriggeringRef.current) {\n return;\n }\n \n isTriggeringRef.current = true;\n setPhase(\"entering\");\n \n const callbacks = Array.from(callbacksMapRef.current.values());\n callbacks.sort(sortByPriority);\n \n let lastPriority = null;\n let staggerIndex = 0;\n\n for (const item of callbacks) {\n if (lastPriority !== null && item.priority >\n lastPriority) {\n staggerIndex += 0.08;\n }\n lastPriority = item.priority;\n item.trigger(staggerIndex);\n }\n \n setTimeout(() => {\n setPhase(\"complete\");\n }, 1000 * (staggerIndex + 1));\n }, []);\n\n useEffect(() => {\n const isPreloaderReady = preloaderPhase === \"revealing\" || preloaderPhase === \"hidden\";\n \n if (\n (pageTransitionPhase === \"exiting\" || pageTransitionPhase === \"idle\") && \n phase === \"waiting\" && \n isPreloaderReady\n ) {\n const timerId = setTimeout(() => {\n triggerEnter();\n }, 250);\n \n return () => clearTimeout(timerId);\n }\n }, [pageTransitionPhase, preloaderPhase, phase, triggerEnter]);\n\n useEffect(() => {\n if (pageTransitionPhase === \"entering\" || pageTransitionPhase === \"holding\") {\n setPhase(\"waiting\");\n isTriggeringRef.current = false;\n }\n }, [pageTransitionPhase]);\n\n const contextValue = useMemo(() => ({\n phase,\n register,\n unregister,\n prefersReducedMotion\n }), [phase, register, unregister, prefersReducedMotion]);\n\n return (\n <PageEnterContext.Provider value={contextValue}>\n {children}\n </PageEnterContext.Provider>\n );\n}\n\nconst defaultContextValue = {\n phase: \"complete\",\n register: () => {},\n unregister: () => {},\n prefersReducedMotion: false\n};\n\nexport function usePageEnterContext() {\n return useContext(PageEnterContext) ?? defaultContextValue;\n}\n\n","\"use client\";\n\nimport { useRef, useEffect, useMemo } from 'react';\nimport { usePageEnterContext } from '../../packages/providers/PageEnterProvider.jsx';\n\nexport function usePageEnter(callback, options = {}) {\n const { priority = 0, skip = false } = options;\n\n const {\n register,\n unregister,\n phase,\n prefersReducedMotion\n } = usePageEnterContext();\n\n \n \n const uuid = useMemo(() => crypto.randomUUID(), []);\n const idRef = useRef(uuid);\n\n useEffect(() => {\n if (skip) {\n return;\n }\n\n const currentId = idRef.current;\n \n register(currentId, callback, priority);\n \n return () => {\n unregister(currentId);\n };\n }, [register, unregister, callback, priority, skip]);\n\n const isEntering = phase === \"entering\";\n const isComplete = phase === \"complete\";\n\n const returnedState = useMemo(() => ({\n phase,\n prefersReducedMotion,\n isEntering,\n isComplete\n }), [phase, prefersReducedMotion, isEntering, isComplete]);\n\n return returnedState;\n}\n\n","\"use client\";\n\nimport { useEffect, useState } from 'react';\n\n/**\n * Standalone replacement for the monorepo's `@shared/hooks/useIsTouchDevice`\n * import (only the `useBreakpoint` named export was actually used here).\n *\n * Tracks whether the viewport currently matches or exceeds a named\n * breakpoint, using standard Tailwind CSS breakpoint widths so behavior\n * matches what most consuming apps already expect.\n */\nconst BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536\n};\n\nexport function useBreakpoint(breakpoint = 'md') {\n const minWidth = BREAKPOINTS[breakpoint] ?? BREAKPOINTS.md;\n\n const [matches, setMatches] = useState(() => {\n if (typeof window === 'undefined') return false;\n return window.matchMedia(`(min-width: ${minWidth}px)`).matches;\n });\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(`(min-width: ${minWidth}px)`);\n const handleChange = (event) => setMatches(event.matches);\n\n setMatches(mediaQuery.matches);\n mediaQuery.addEventListener('change', handleChange);\n\n return () => {\n mediaQuery.removeEventListener('change', handleChange);\n };\n }, [minWidth]);\n\n return matches;\n}\n\nexport default useBreakpoint;\n","/**\n * Standalone replacement for the monorepo's `@shared/constants/constants`\n * import — only the single value actually used by this package\n * (`ASCII_REVEAL_DURATION`, consumed by `useAsciiDelay`) is reproduced here.\n *\n * Value chosen to match the pacing of this package's other reveal timings\n * (e.g. ScrambleText's default `duration = 0.6`, Preloader's ~1s phases).\n */\nexport const ASCII_REVEAL_DURATION = 1.2;\n","import { useBreakpoint } from \"./useBreakpoint.js\";\nimport { ASCII_REVEAL_DURATION } from \"../constants/timing.js\";\n\nconst asciiDelayBase = 0.1 * ASCII_REVEAL_DURATION;\n\nexport function useAsciiDelay() {\n const md = useBreakpoint(\"md\");\n return md ? asciiDelayBase : 0;\n}\n"],"mappings":"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","names":["import_react","import_class_variance_authority","classVarianceCx","import_react","import_react","import_react","import_react","import_react","import_jsx_runtime","ScrollTrigger","import_jsx_runtime","stagger","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react","DEFAULT_CHARS","lines","stagger","_a","import_jsx_runtime","import_react","import_react_slot","import_jsx_runtime","AnimatedLink","import_react","cx","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_framer_motion","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","defaultContextValue","import_jsx_runtime","_a","import_react","import_jsx_runtime","defaultContextValue","import_react","import_react"]}
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import React4, { useEffect as useEffect4, useRef as useRef3 } from "react";
|
|
5
5
|
|
|
6
6
|
// libs/vendor.js
|
|
7
|
-
import gsap from "gsap";
|
|
7
|
+
import { gsap } from "gsap";
|
|
8
8
|
import { useGSAP } from "@gsap/react";
|
|
9
9
|
import { ScrollTrigger } from "gsap/ScrollTrigger";
|
|
10
10
|
import { Flip } from "gsap/Flip";
|