@hua-labs/motion-core 2.2.3 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/MotionEngine.ts","../src/core/TransitionEffects.ts","../src/presets/index.ts","../src/managers/MotionStateManager.ts","../src/profiles/neutral.ts","../src/profiles/hua.ts","../src/profiles/MotionProfileContext.ts","../src/profiles/index.ts","../src/utils/easing.ts","../src/utils/springPhysics.ts"],"names":["createContext","useMemo","createElement","useContext"],"mappings":"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","file":"chunk-LSIP7MB5.cjs","sourcesContent":["/**\n * HUA Motion Core - 의존성 제로 모션 엔진\n * \n * 순수 JavaScript로 구현된 고성능 모션 엔진\n * GPU 가속, 레이어 분리, 성능 최적화 포함\n */\n\nexport interface MotionFrame {\n progress: number // 0 ~ 1\n properties: {\n opacity?: number\n transform?: string\n scale?: number\n translateX?: number\n translateY?: number\n rotate?: number\n rotateX?: number\n rotateY?: number\n rotateZ?: number\n skewX?: number\n skewY?: number\n }\n}\n\nexport interface MotionOptions {\n duration: number\n easing: (t: number) => number\n delay?: number\n direction?: 'forward' | 'reverse' | 'alternate'\n iterations?: number\n fill?: 'none' | 'forwards' | 'backwards' | 'both'\n onStart?: () => void\n onUpdate?: (progress: number) => void\n onComplete?: () => void\n onCancel?: () => void\n}\n\nexport interface Motion {\n id: string\n element: HTMLElement\n isRunning: boolean\n isPaused: boolean\n currentProgress: number\n startTime: number\n pauseTime: number\n options: MotionOptions\n}\n\nexport class MotionEngine {\n private motions = new Map<string, Motion>()\n private isRunning = false\n private animationFrameId: number | null = null\n\n /**\n * 모션 시작\n */\n motion(\n element: HTMLElement, \n motionFrames: MotionFrame[], \n options: MotionOptions\n ): Promise<string> {\n return new Promise((resolve) => {\n const motionId = this.generateMotionId()\n \n // GPU 가속 활성화\n this.enableGPUAcceleration(element)\n \n // 레이어 분리\n this.createLayer(element)\n \n const motion: Motion = {\n id: motionId,\n element,\n isRunning: true,\n isPaused: false,\n currentProgress: 0,\n startTime: Date.now() + (options.delay || 0),\n pauseTime: 0,\n options: {\n ...options,\n onComplete: () => {\n options.onComplete?.()\n this.motions.delete(motionId)\n }\n }\n }\n\n this.motions.set(motionId, motion)\n \n if (!this.isRunning) {\n this.startAnimationLoop()\n }\n\n options.onStart?.()\n \n // motionId를 즉시 반환\n resolve(motionId)\n })\n }\n\n /**\n * 모션 중지\n */\n stop(motionId: string): void {\n const motion = this.motions.get(motionId)\n if (motion) {\n motion.isRunning = false\n motion.options.onCancel?.()\n this.motions.delete(motionId)\n }\n }\n\n /**\n * 모션 일시정지\n */\n pause(motionId: string): void {\n const motion = this.motions.get(motionId)\n if (motion && motion.isRunning && !motion.isPaused) {\n motion.isPaused = true\n motion.pauseTime = Date.now()\n }\n }\n\n /**\n * 모션 재개\n */\n resume(motionId: string): void {\n const motion = this.motions.get(motionId)\n if (motion && motion.isPaused) {\n motion.isPaused = false\n if (motion.pauseTime > 0) {\n motion.startTime += Date.now() - motion.pauseTime\n }\n }\n }\n\n /**\n * 모든 모션 중지\n */\n stopAll(): void {\n this.motions.forEach((motion) => {\n motion.isRunning = false\n motion.options.onCancel?.()\n })\n this.motions.clear()\n this.stopAnimationLoop()\n }\n\n /**\n * 모션 상태 확인\n */\n getMotion(motionId: string): Motion | undefined {\n return this.motions.get(motionId)\n }\n\n /**\n * 실행 중인 모션 수\n */\n getActiveMotionCount(): number {\n return this.motions.size\n }\n\n /**\n * 애니메이션 루프 시작\n */\n private startAnimationLoop(): void {\n if (this.isRunning) return\n \n this.isRunning = true\n this.animate()\n }\n\n /**\n * 애니메이션 루프 중지\n */\n private stopAnimationLoop(): void {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId)\n this.animationFrameId = null\n }\n this.isRunning = false\n }\n\n /**\n * 메인 애니메이션 루프\n */\n private animate(): void {\n if (!this.isRunning || this.motions.size === 0) {\n this.stopAnimationLoop()\n return\n }\n\n const currentTime = Date.now()\n const completedMotions: string[] = []\n\n this.motions.forEach((motion) => {\n if (!motion.isRunning || motion.isPaused) return\n\n const elapsed = currentTime - motion.startTime\n if (elapsed < 0) return // 아직 시작하지 않음\n\n const progress = Math.min(elapsed / motion.options.duration, 1)\n const easedProgress = motion.options.easing(progress)\n \n motion.currentProgress = easedProgress\n \n // 모션 프레임 적용\n this.applyMotionFrame(motion.element, easedProgress)\n \n // 콜백 호출\n motion.options.onUpdate?.(easedProgress)\n \n // 완료된 모션 체크\n if (progress >= 1) {\n completedMotions.push(motion.id)\n motion.isRunning = false\n motion.options.onComplete?.()\n }\n })\n\n // 완료된 모션 제거\n completedMotions.forEach(id => this.motions.delete(id))\n\n // 다음 프레임 요청\n this.animationFrameId = requestAnimationFrame(() => this.animate())\n }\n\n /**\n * 모션 프레임 적용\n */\n private applyMotionFrame(element: HTMLElement, progress: number): void {\n // GPU 가속을 위한 transform 사용\n const transforms: string[] = []\n \n // 기본 transform 속성들\n if (element.style.transform) {\n transforms.push(element.style.transform)\n }\n \n // progress에 따른 transform 계산\n // 여기서는 기본적인 예시만 구현\n // 실제로는 motionFrames를 받아서 처리해야 함\n \n element.style.transform = transforms.join(' ')\n }\n\n /**\n * GPU 가속 활성화\n */\n private enableGPUAcceleration(element: HTMLElement): void {\n // will-change 속성 설정으로 GPU 가속 활성화\n element.style.willChange = 'transform, opacity'\n \n // transform3d로 강제 GPU 가속\n element.style.transform = 'translateZ(0)'\n }\n\n /**\n * 레이어 분리\n */\n private createLayer(element: HTMLElement): void {\n // 새로운 레이어 생성으로 성능 향상\n element.style.transform = 'translateZ(0)'\n element.style.backfaceVisibility = 'hidden'\n }\n\n /**\n * 고유 모션 ID 생성\n */\n private generateMotionId(): string {\n return `motion_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\n }\n\n /**\n * 정리\n */\n destroy(): void {\n this.stopAll()\n this.stopAnimationLoop()\n }\n}\n\n// 싱글톤 인스턴스\nexport const motionEngine = new MotionEngine()\n","/**\n * HUA Motion Core - 전환 효과 시스템\n *\n * CSS Motion API를 활용한 고성능 전환 효과들\n * GPU 가속 및 레이어 분리 최적화 포함\n */\n\nimport { motionEngine, MotionOptions } from './MotionEngine'\n\nexport type TransitionType =\n | 'fade'\n | 'slide'\n | 'slide-up'\n | 'slide-down'\n | 'slide-left'\n | 'slide-right'\n | 'scale'\n | 'flip'\n | 'morph'\n | 'cube'\n | 'zoom'\n\nexport interface TransitionOptions extends Omit<MotionOptions, 'easing'> {\n type: TransitionType\n easing?: (t: number) => number // easing을 다시 추가\n distance?: number // slide 거리 (px)\n scale?: number // scale 시작/끝 값\n perspective?: number // 3D 효과를 위한 원근감\n onTransitionStart?: () => void\n onTransitionComplete?: () => void\n}\n\nexport class TransitionEffects {\n private static instance: TransitionEffects\n private activeTransitions = new Map<string, string>()\n\n static getInstance(): TransitionEffects {\n if (!TransitionEffects.instance) {\n TransitionEffects.instance = new TransitionEffects()\n }\n return TransitionEffects.instance\n }\n\n /**\n * 공통 전환 실행 헬퍼\n */\n private async executeTransition(\n element: HTMLElement,\n options: Omit<TransitionOptions, 'type'>,\n config: {\n setup: () => void\n keyframes: [Record<string, number>, Record<string, number>]\n onUpdate: (progress: number) => void\n onCleanup: () => void\n }\n ): Promise<void> {\n const transitionId = this.generateTransitionId()\n\n config.setup()\n this.enableGPUAcceleration(element)\n\n let resolveTransition!: () => void\n const completed = new Promise<void>((resolve) => {\n resolveTransition = resolve\n })\n\n const motionId = await motionEngine.motion(\n element,\n [\n { progress: 0, properties: config.keyframes[0] },\n { progress: 1, properties: config.keyframes[1] }\n ],\n {\n duration: options.duration,\n easing: options.easing || this.getDefaultEasing(),\n delay: options.delay,\n onStart: options.onTransitionStart,\n onUpdate: config.onUpdate,\n onComplete: () => {\n config.onCleanup()\n options.onTransitionComplete?.()\n this.activeTransitions.delete(transitionId)\n resolveTransition()\n }\n }\n )\n\n this.activeTransitions.set(transitionId, motionId)\n return completed\n }\n\n /**\n * 페이드 인/아웃 전환\n */\n async fade(\n element: HTMLElement,\n options: Omit<TransitionOptions, 'type'>\n ): Promise<void> {\n const initialOpacity = parseFloat(getComputedStyle(element).opacity) || 1\n const targetOpacity = options.direction === 'reverse' ? 0 : 1\n\n return this.executeTransition(element, options, {\n setup: () => {\n if (options.direction === 'reverse') {\n element.style.opacity = initialOpacity.toString()\n } else {\n element.style.opacity = '0'\n }\n },\n keyframes: [\n { opacity: options.direction === 'reverse' ? initialOpacity : 0 },\n { opacity: targetOpacity }\n ],\n onUpdate: (progress) => {\n const currentOpacity = options.direction === 'reverse'\n ? initialOpacity * (1 - progress)\n : targetOpacity * progress\n element.style.opacity = currentOpacity.toString()\n },\n onCleanup: () => {}\n })\n }\n\n /**\n * 슬라이드 전환\n */\n async slide(\n element: HTMLElement,\n options: Omit<TransitionOptions, 'type'>\n ): Promise<void> {\n const distance = options.distance || 100\n const initialTransform = getComputedStyle(element).transform\n const isReverse = options.direction === 'reverse'\n\n return this.executeTransition(element, options, {\n setup: () => {\n if (!isReverse) {\n element.style.transform = `translateX(${distance}px)`\n }\n },\n keyframes: [\n { translateX: isReverse ? 0 : distance },\n { translateX: isReverse ? distance : 0 }\n ],\n onUpdate: (progress) => {\n const currentTranslateX = isReverse\n ? distance * progress\n : distance * (1 - progress)\n element.style.transform = `translateX(${currentTranslateX}px)`\n },\n onCleanup: () => {\n element.style.transform = initialTransform\n }\n })\n }\n\n /**\n * 스케일 전환\n */\n async scale(\n element: HTMLElement,\n options: Omit<TransitionOptions, 'type'>\n ): Promise<void> {\n const scaleValue = options.scale || 0.8\n const initialTransform = getComputedStyle(element).transform\n const isReverse = options.direction === 'reverse'\n\n return this.executeTransition(element, options, {\n setup: () => {\n if (!isReverse) {\n element.style.transform = `scale(${scaleValue})`\n }\n },\n keyframes: [\n { scale: isReverse ? 1 : scaleValue },\n { scale: isReverse ? scaleValue : 1 }\n ],\n onUpdate: (progress) => {\n const currentScale = isReverse\n ? 1 - (1 - scaleValue) * progress\n : scaleValue + (1 - scaleValue) * progress\n element.style.transform = `scale(${currentScale})`\n },\n onCleanup: () => {\n element.style.transform = initialTransform\n }\n })\n }\n\n /**\n * 플립 전환 (3D 회전)\n */\n async flip(\n element: HTMLElement,\n options: Omit<TransitionOptions, 'type'>\n ): Promise<void> {\n const perspective = options.perspective || 1000\n const initialTransform = getComputedStyle(element).transform\n const isReverse = options.direction === 'reverse'\n\n return this.executeTransition(element, options, {\n setup: () => {\n element.style.perspective = `${perspective}px`\n element.style.transformStyle = 'preserve-3d'\n if (!isReverse) {\n element.style.transform = `rotateY(90deg)`\n }\n },\n keyframes: [\n { rotateY: isReverse ? 0 : 90 },\n { rotateY: isReverse ? 90 : 0 }\n ],\n onUpdate: (progress) => {\n const currentRotateY = isReverse\n ? 90 * progress\n : 90 * (1 - progress)\n element.style.transform = `rotateY(${currentRotateY}deg)`\n },\n onCleanup: () => {\n element.style.transform = initialTransform\n element.style.perspective = ''\n element.style.transformStyle = ''\n }\n })\n }\n\n /**\n * 큐브 전환 (3D 큐브 회전)\n */\n async cube(\n element: HTMLElement,\n options: Omit<TransitionOptions, 'type'>\n ): Promise<void> {\n const perspective = options.perspective || 1200\n const initialTransform = getComputedStyle(element).transform\n const isReverse = options.direction === 'reverse'\n\n return this.executeTransition(element, options, {\n setup: () => {\n element.style.perspective = `${perspective}px`\n element.style.transformStyle = 'preserve-3d'\n if (!isReverse) {\n element.style.transform = `rotateX(90deg) rotateY(45deg)`\n }\n },\n keyframes: [\n { rotateX: isReverse ? 0 : 90, rotateY: isReverse ? 0 : 45 },\n { rotateX: isReverse ? 90 : 0, rotateY: isReverse ? 45 : 0 }\n ],\n onUpdate: (progress) => {\n const currentRotateX = isReverse\n ? 90 * progress\n : 90 * (1 - progress)\n const currentRotateY = isReverse\n ? 45 * progress\n : 45 * (1 - progress)\n element.style.transform = `rotateX(${currentRotateX}deg) rotateY(${currentRotateY}deg)`\n },\n onCleanup: () => {\n element.style.transform = initialTransform\n element.style.perspective = ''\n element.style.transformStyle = ''\n }\n })\n }\n\n /**\n * 모프 전환 (복합 변형)\n */\n async morph(\n element: HTMLElement,\n options: Omit<TransitionOptions, 'type'>\n ): Promise<void> {\n const initialTransform = getComputedStyle(element).transform\n const isReverse = options.direction === 'reverse'\n\n return this.executeTransition(element, options, {\n setup: () => {\n if (!isReverse) {\n element.style.transform = `scale(0.9) rotate(5deg)`\n }\n },\n keyframes: [\n { scale: isReverse ? 1 : 0.9, rotate: isReverse ? 0 : 5 },\n { scale: isReverse ? 0.9 : 1, rotate: isReverse ? 5 : 0 }\n ],\n onUpdate: (progress) => {\n const currentScale = isReverse\n ? 1 - 0.1 * progress\n : 0.9 + 0.1 * progress\n const currentRotate = isReverse\n ? 5 * progress\n : 5 * (1 - progress)\n element.style.transform = `scale(${currentScale}) rotate(${currentRotate}deg)`\n },\n onCleanup: () => {\n element.style.transform = initialTransform\n }\n })\n }\n\n /**\n * 전환 중지\n */\n stopTransition(transitionId: string): void {\n const motionId = this.activeTransitions.get(transitionId)\n if (motionId) {\n motionEngine.stop(motionId)\n this.activeTransitions.delete(transitionId)\n }\n }\n\n /**\n * 모든 전환 중지\n */\n stopAllTransitions(): void {\n this.activeTransitions.forEach((motionId) => {\n motionEngine.stop(motionId)\n })\n this.activeTransitions.clear()\n }\n\n /**\n * 활성 전환 수 확인\n */\n getActiveTransitionCount(): number {\n return this.activeTransitions.size\n }\n\n /**\n * GPU 가속 활성화\n */\n private enableGPUAcceleration(element: HTMLElement): void {\n element.style.willChange = 'transform, opacity'\n // Preserve existing transform and append translateZ(0) for GPU acceleration\n const currentTransform = element.style.transform\n if (currentTransform && currentTransform !== 'none' && currentTransform !== '') {\n // Only append if translateZ is not already present\n if (!currentTransform.includes('translateZ')) {\n element.style.transform = `${currentTransform} translateZ(0)`\n }\n } else {\n element.style.transform = 'translateZ(0)'\n }\n }\n\n /**\n * 기본 이징 함수\n */\n private getDefaultEasing(): (t: number) => number {\n return (t: number) => t * t * (3 - 2 * t) // smooth easing\n }\n\n /**\n * 고유 전환 ID 생성\n */\n private generateTransitionId(): string {\n return `transition_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\n }\n\n /**\n * 정리\n */\n destroy(): void {\n this.stopAllTransitions()\n }\n}\n\n// 싱글톤 인스턴스\nexport const transitionEffects = TransitionEffects.getInstance()\n","// ========================================\n// HUA Motion SDK - Preset System\n// ========================================\n\nimport type { MotionPreset, PresetConfig, PageType, PageMotionsConfig } from '../types'\n\n// ========================================\n// 기본 모션 프리셋\n// ========================================\n\nexport const MOTION_PRESETS: PresetConfig = {\n hero: {\n entrance: 'fadeIn',\n delay: 200,\n duration: 800,\n hover: false,\n click: false\n },\n title: {\n entrance: 'slideUp',\n delay: 400,\n duration: 700,\n hover: false,\n click: false\n },\n button: {\n entrance: 'scaleIn',\n delay: 600,\n duration: 300,\n hover: true,\n click: true\n },\n card: {\n entrance: 'slideUp',\n delay: 800,\n duration: 500,\n hover: true,\n click: false\n },\n text: {\n entrance: 'fadeIn',\n delay: 200,\n duration: 600,\n hover: false,\n click: false\n },\n image: {\n entrance: 'scaleIn',\n delay: 400,\n duration: 600,\n hover: true,\n click: false\n }\n}\n\n// ========================================\n// 페이지별 프리셋 (1단계: useSimplePageMotion)\n// ========================================\n\nexport const PAGE_MOTIONS: Record<PageType, PageMotionsConfig> = {\n // 홈페이지\n home: {\n hero: { type: 'hero' },\n title: { type: 'title' },\n description: { type: 'text' },\n cta: { type: 'button' },\n feature1: { type: 'card' },\n feature2: { type: 'card' },\n feature3: { type: 'card' }\n },\n \n // 대시보드\n dashboard: {\n header: { type: 'hero' },\n sidebar: { type: 'card', entrance: 'slideLeft' },\n main: { type: 'text', entrance: 'fadeIn' },\n card1: { type: 'card' },\n card2: { type: 'card' },\n card3: { type: 'card' },\n chart: { type: 'image' }\n },\n \n // 제품 페이지\n product: {\n hero: { type: 'hero' },\n title: { type: 'title' },\n image: { type: 'image' },\n description: { type: 'text' },\n price: { type: 'text' },\n buyButton: { type: 'button' },\n features: { type: 'card' }\n },\n \n // 블로그\n blog: {\n header: { type: 'hero' },\n title: { type: 'title' },\n content: { type: 'text' },\n sidebar: { type: 'card', entrance: 'slideRight' },\n related1: { type: 'card' },\n related2: { type: 'card' },\n related3: { type: 'card' }\n }\n}\n\n// ========================================\n// 프리셋 유틸리티 함수\n// ========================================\n\n/**\n * 프리셋과 커스텀 설정을 병합\n */\nexport function mergeWithPreset(\n preset: MotionPreset,\n custom: Partial<MotionPreset> = {}\n): MotionPreset {\n return {\n ...preset,\n ...custom\n }\n}\n\n/**\n * 페이지 타입으로 프리셋 가져오기\n */\nexport function getPagePreset(pageType: PageType): PageMotionsConfig {\n return PAGE_MOTIONS[pageType]\n}\n\n/**\n * 모션 타입으로 기본 프리셋 가져오기\n */\nexport function getMotionPreset(type: string): MotionPreset {\n return MOTION_PRESETS[type] || MOTION_PRESETS.text\n} ","import { MotionState, MotionElement } from '../types'\n\n/**\n * MotionStateManager - 모션 상태 관리 클래스\n * \n * 상태 충돌 문제 해결을 위해 3가지 상태를 분리:\n * - internalVisibility: 내부 로직 (초기화, 리셋 등)\n * - triggeredVisibility: 외부 트리거 (Intersection Observer)\n * - finalVisibility: 최종 계산된 상태\n */\nexport class MotionStateManager {\n private states: Map<string, MotionState> = new Map()\n private listeners: Map<string, Set<(state: MotionState) => void>> = new Map()\n\n /**\n * 요소의 상태를 초기화\n */\n initializeElement(elementId: string, config: MotionElement): void {\n const initialState: MotionState = {\n internalVisibility: false, // 초기에 숨김 상태로 시작 (스크롤 리빌용)\n triggeredVisibility: false, // Intersection Observer가 아직 트리거되지 않음\n finalVisibility: false, // 초기에 숨김 상태로 시작\n opacity: 0, // 초기에 투명 상태로 시작\n translateY: 20, // 초기에 아래로 이동된 상태로 시작\n translateX: 0,\n scale: 0.95, // 초기에 약간 축소된 상태로 시작\n rotation: 0,\n isHovered: false,\n isClicked: false,\n isAnimating: false\n }\n\n this.states.set(elementId, initialState)\n this.computeFinalState(elementId)\n }\n\n /**\n * 내부 가시성 상태 업데이트 (초기화, 리셋 등)\n */\n setInternalVisibility(elementId: string, visible: boolean): void {\n const state = this.states.get(elementId)\n if (!state) return\n\n state.internalVisibility = visible\n this.computeFinalState(elementId)\n this.notifyListeners(elementId, state)\n }\n\n /**\n * 외부 트리거 가시성 상태 업데이트 (Intersection Observer)\n */\n setTriggeredVisibility(elementId: string, visible: boolean): void {\n const state = this.states.get(elementId)\n if (!state) return\n\n state.triggeredVisibility = visible\n this.computeFinalState(elementId)\n this.notifyListeners(elementId, state)\n }\n\n /**\n * 모션 값 업데이트\n */\n updateMotionValues(elementId: string, values: Partial<MotionState>): void {\n const state = this.states.get(elementId)\n if (!state) return\n\n Object.assign(state, values)\n this.notifyListeners(elementId, state)\n }\n\n /**\n * 최종 상태 계산\n */\n private computeFinalState(elementId: string): void {\n const state = this.states.get(elementId)\n if (!state) return\n\n // 내부 또는 외부 트리거 중 하나라도 true면 최종적으로 보임\n state.finalVisibility = state.internalVisibility || state.triggeredVisibility\n\n // 모션 중 상태 업데이트\n state.isAnimating = state.finalVisibility && (state.opacity < 1 || state.translateY > 0)\n }\n\n /**\n * 현재 상태 조회\n */\n getState(elementId: string): MotionState | undefined {\n return this.states.get(elementId)\n }\n\n /**\n * 모든 상태 조회\n */\n getAllStates(): Map<string, MotionState> {\n return new Map(this.states)\n }\n\n /**\n * 상태 변경 리스너 등록\n */\n subscribe(elementId: string, listener: (state: MotionState) => void): () => void {\n if (!this.listeners.has(elementId)) {\n this.listeners.set(elementId, new Set())\n }\n\n this.listeners.get(elementId)!.add(listener)\n\n // 구독 해제 함수 반환\n return () => {\n const listeners = this.listeners.get(elementId)\n if (listeners) {\n listeners.delete(listener)\n }\n }\n }\n\n /**\n * 리스너들에게 상태 변경 알림\n */\n notifyListeners(elementId: string, state: MotionState): void {\n const listeners = this.listeners.get(elementId)\n if (!listeners) return\n\n listeners.forEach(listener => {\n try {\n listener(state)\n } catch (error) {\n if (process.env.NODE_ENV === 'development') {\n console.error(`MotionStateManager listener error for ${elementId}:`, error)\n }\n }\n })\n }\n\n /**\n * 모든 상태 초기화\n */\n reset(): void {\n this.states.clear()\n this.listeners.clear()\n }\n\n /**\n * 특정 요소 상태 초기화\n */\n resetElement(elementId: string): void {\n this.states.delete(elementId)\n this.listeners.delete(elementId)\n }\n\n /**\n * 디버그용 상태 출력\n */\n debug(): void {\n if (process.env.NODE_ENV === 'development') {\n console.log('MotionStateManager Debug:')\n this.states.forEach((state, elementId) => {\n console.log(` ${elementId}:`, {\n internalVisibility: state.internalVisibility,\n triggeredVisibility: state.triggeredVisibility,\n finalVisibility: state.finalVisibility,\n opacity: state.opacity,\n translateY: state.translateY,\n isAnimating: state.isAnimating\n })\n })\n }\n }\n}\n\n// 싱글톤 인스턴스\nexport const motionStateManager = new MotionStateManager()\n","import type { MotionProfile } from './types'\n\n/**\n * neutral 프로필 — 기존 하드코딩 디폴트와 동일.\n * Provider 없을 때 fallback으로 사용되므로 하위 호환 100% 보장.\n */\nexport const neutral: MotionProfile = {\n name: 'neutral',\n\n base: {\n duration: 700,\n easing: 'ease-out',\n threshold: 0.1,\n triggerOnce: true,\n },\n\n entrance: {\n slide: {\n distance: 32,\n easing: 'ease-out',\n },\n fade: {\n initialOpacity: 0,\n },\n scale: {\n from: 0.95,\n },\n bounce: {\n intensity: 0.3,\n easing: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n },\n },\n\n stagger: {\n perItem: 100,\n baseDelay: 0,\n },\n\n interaction: {\n hover: {\n scale: 1.05,\n y: -2,\n duration: 200,\n easing: 'ease-out',\n },\n },\n\n spring: {\n mass: 1,\n stiffness: 100,\n damping: 10,\n restDelta: 0.01,\n restSpeed: 0.01,\n },\n\n reducedMotion: 'fade-only',\n}\n","import type { MotionProfile } from './types'\n\n/**\n * HUA 프로필 — 스르륵 쫀뜩한 브랜드 시그니처.\n *\n * 특징:\n * - CSS ease-out 기반이되 끝에 미세한 오버슈트 (1.04~1.06)\n * - 도착점을 살짝 지나쳤다가 돌아오는 탄성\n * - 바운스 없이 쫀뜩 (높은 감쇠 + 높은 강성)\n * - neutral보다 짧은 duration, 좁은 distance → 더 정교한 느낌\n */\nexport const hua: MotionProfile = {\n name: 'hua',\n\n base: {\n duration: 640,\n easing: 'cubic-bezier(0.22, 0.68, 0.35, 1.10)',\n threshold: 0.12,\n triggerOnce: true,\n },\n\n entrance: {\n slide: {\n distance: 28,\n easing: 'cubic-bezier(0.22, 0.68, 0.35, 1.14)',\n },\n fade: {\n initialOpacity: 0,\n },\n scale: {\n from: 0.97,\n },\n bounce: {\n intensity: 0.2,\n easing: 'cubic-bezier(0.22, 0.68, 0.35, 1.12)',\n },\n },\n\n stagger: {\n perItem: 80,\n baseDelay: 0,\n },\n\n interaction: {\n hover: {\n scale: 1.008,\n y: -1,\n duration: 180,\n easing: 'cubic-bezier(0.22, 0.68, 0.35, 1.10)',\n },\n },\n\n spring: {\n mass: 1,\n stiffness: 180,\n damping: 18,\n restDelta: 0.005,\n restSpeed: 0.005,\n },\n\n reducedMotion: 'fade-only',\n}\n","import { createContext, useContext, createElement, useMemo } from 'react'\nimport type { MotionProfile, BuiltInProfileName, DeepPartial } from './types'\nimport { neutral } from './neutral'\nimport { resolveProfile, mergeProfileOverrides } from './index'\n\n// ========================================\n// Context — neutral fallback (Provider 없어도 동작)\n// ========================================\n\nconst MotionProfileContext = createContext<MotionProfile>(neutral)\n\n// ========================================\n// Provider\n// ========================================\n\nexport interface MotionProfileProviderProps {\n /** 내장 프로필 이름 또는 커스텀 프로필 객체 */\n profile?: BuiltInProfileName | MotionProfile\n /** 선택한 프로필 위에 부분 오버라이드 */\n overrides?: DeepPartial<MotionProfile>\n children: React.ReactNode\n}\n\nexport function MotionProfileProvider({\n profile = 'neutral',\n overrides,\n children,\n}: MotionProfileProviderProps) {\n const resolved = useMemo(() => {\n const base = resolveProfile(profile)\n return overrides ? mergeProfileOverrides(base, overrides) : base\n }, [profile, overrides])\n\n return createElement(\n MotionProfileContext.Provider,\n { value: resolved },\n children\n )\n}\n\n// ========================================\n// Hook — 각 모션 훅에서 내부적으로 호출\n// ========================================\n\n/**\n * 현재 프로필을 가져옴.\n * Provider 밖에서 호출 시 neutral 프로필 반환 (하위 호환).\n */\nexport function useMotionProfile(): MotionProfile {\n return useContext(MotionProfileContext)\n}\n","// ========================================\n// Motion Profile System — 메인 export\n// ========================================\n\nexport type {\n MotionProfile,\n MotionProfileBase,\n MotionProfileEntrance,\n MotionProfileStagger,\n MotionProfileInteraction,\n MotionProfileSpring,\n ReducedMotionStrategy,\n BuiltInProfileName,\n DeepPartial,\n} from './types'\n\nexport { neutral } from './neutral'\nexport { hua } from './hua'\nexport {\n MotionProfileProvider,\n useMotionProfile,\n type MotionProfileProviderProps,\n} from './MotionProfileContext'\n\nimport { neutral } from './neutral'\nimport { hua } from './hua'\nimport type { MotionProfile, BuiltInProfileName, DeepPartial } from './types'\n\n/** 내장 프로필 레지스트리 */\nconst PROFILES: Record<BuiltInProfileName, MotionProfile> = {\n neutral,\n hua,\n}\n\n/** 이름 또는 객체에서 프로필 resolve */\nexport function resolveProfile(\n profile: BuiltInProfileName | MotionProfile\n): MotionProfile {\n if (typeof profile === 'string') {\n return PROFILES[profile] ?? neutral\n }\n return profile\n}\n\n/** 프로필에 오버라이드를 깊은 병합 */\nexport function mergeProfileOverrides(\n base: MotionProfile,\n overrides: DeepPartial<MotionProfile>\n): MotionProfile {\n return deepMerge(\n base as unknown as Record<string, unknown>,\n overrides as unknown as Record<string, unknown>\n ) as unknown as MotionProfile\n}\n\n/** 재귀적 deep merge (배열은 교체, 객체는 병합) */\nfunction deepMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>\n): Record<string, unknown> {\n const result = { ...target }\n\n for (const key of Object.keys(source)) {\n const sourceVal = source[key]\n const targetVal = result[key]\n\n if (\n sourceVal !== null &&\n sourceVal !== undefined &&\n typeof sourceVal === 'object' &&\n !Array.isArray(sourceVal) &&\n typeof targetVal === 'object' &&\n targetVal !== null &&\n !Array.isArray(targetVal)\n ) {\n result[key] = deepMerge(\n targetVal as Record<string, unknown>,\n sourceVal as Record<string, unknown>\n )\n } else if (sourceVal !== undefined) {\n result[key] = sourceVal\n }\n }\n\n return result\n}\n","// 고급 이징 함수들 - Framer Motion과 유사한 기능 제공\n\nexport type EasingFunction = (t: number) => number\n\n// 기본 이징 함수들\nexport const linear: EasingFunction = (t) => t\n\nexport const easeIn: EasingFunction = (t) => t * t\nexport const easeOut: EasingFunction = (t) => 1 - (1 - t) * (1 - t)\nexport const easeInOut: EasingFunction = (t) => t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2\n\n// 고급 이징 함수들\nexport const easeInQuad: EasingFunction = (t) => t * t\nexport const easeOutQuad: EasingFunction = (t) => 1 - (1 - t) * (1 - t)\nexport const easeInOutQuad: EasingFunction = (t) => t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2\n\nexport const easeInCubic: EasingFunction = (t) => t * t * t\nexport const easeOutCubic: EasingFunction = (t) => 1 - Math.pow(1 - t, 3)\nexport const easeInOutCubic: EasingFunction = (t) => t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2\n\nexport const easeInQuart: EasingFunction = (t) => t * t * t * t\nexport const easeOutQuart: EasingFunction = (t) => 1 - Math.pow(1 - t, 4)\nexport const easeInOutQuart: EasingFunction = (t) => t < 0.5 ? 8 * t * t * t * t : 1 - Math.pow(-2 * t + 2, 4) / 2\n\nexport const easeInQuint: EasingFunction = (t) => t * t * t * t * t\nexport const easeOutQuint: EasingFunction = (t) => 1 - Math.pow(1 - t, 5)\nexport const easeInOutQuint: EasingFunction = (t) => t < 0.5 ? 16 * t * t * t * t * t : 1 - Math.pow(-2 * t + 2, 5) / 2\n\nexport const easeInSine: EasingFunction = (t) => 1 - Math.cos((t * Math.PI) / 2)\nexport const easeOutSine: EasingFunction = (t) => Math.sin((t * Math.PI) / 2)\nexport const easeInOutSine: EasingFunction = (t) => -(Math.cos(Math.PI * t) - 1) / 2\n\nexport const easeInExpo: EasingFunction = (t) => t === 0 ? 0 : Math.pow(2, 10 * t - 10)\nexport const easeOutExpo: EasingFunction = (t) => t === 1 ? 1 : 1 - Math.pow(2, -10 * t)\nexport const easeInOutExpo: EasingFunction = (t) => {\n if (t === 0) return 0\n if (t === 1) return 1\n if (t < 0.5) return Math.pow(2, 20 * t - 10) / 2\n return (2 - Math.pow(2, -20 * t + 10)) / 2\n}\n\nexport const easeInCirc: EasingFunction = (t) => 1 - Math.sqrt(1 - Math.pow(t, 2))\nexport const easeOutCirc: EasingFunction = (t) => Math.sqrt(1 - Math.pow(t - 1, 2))\nexport const easeInOutCirc: EasingFunction = (t) => {\n if (t < 0.5) return (1 - Math.sqrt(1 - Math.pow(2 * t, 2))) / 2\n return (Math.sqrt(1 - Math.pow(-2 * t + 2, 2)) + 1) / 2\n}\n\nexport const easeInBounce: EasingFunction = (t) => 1 - easeOutBounce(1 - t)\nexport const easeOutBounce: EasingFunction = (t) => {\n const n1 = 7.5625\n const d1 = 2.75\n\n if (t < 1 / d1) {\n return n1 * t * t\n } else if (t < 2 / d1) {\n return n1 * (t -= 1.5 / d1) * t + 0.75\n } else if (t < 2.5 / d1) {\n return n1 * (t -= 2.25 / d1) * t + 0.9375\n } else {\n return n1 * (t -= 2.625 / d1) * t + 0.984375\n }\n}\nexport const easeInOutBounce: EasingFunction = (t) => {\n if (t < 0.5) return (1 - easeOutBounce(1 - 2 * t)) / 2\n return (1 + easeOutBounce(2 * t - 1)) / 2\n}\n\nexport const easeInBack: EasingFunction = (t) => {\n const c1 = 1.70158\n const c3 = c1 + 1\n return c3 * t * t * t - c1 * t * t\n}\nexport const easeOutBack: EasingFunction = (t) => {\n const c1 = 1.70158\n const c3 = c1 + 1\n return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2)\n}\nexport const easeInOutBack: EasingFunction = (t) => {\n const c1 = 1.70158\n const c2 = c1 * 1.525\n if (t < 0.5) {\n return (Math.pow(2 * t, 2) * ((c2 + 1) * 2 * t - c2)) / 2\n } else {\n return (Math.pow(2 * t - 2, 2) * ((c2 + 1) * (t * 2 - 2) + c2) + 2) / 2\n }\n}\n\nexport const easeInElastic: EasingFunction = (t) => {\n const c4 = (2 * Math.PI) / 3\n if (t === 0) return 0\n if (t === 1) return 1\n return -Math.pow(2, 10 * t - 10) * Math.sin((t * 10 - 0.75) * c4)\n}\nexport const easeOutElastic: EasingFunction = (t) => {\n const c4 = (2 * Math.PI) / 3\n if (t === 0) return 0\n if (t === 1) return 1\n return Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1\n}\nexport const easeInOutElastic: EasingFunction = (t) => {\n const c5 = (2 * Math.PI) / 4.5\n if (t === 0) return 0\n if (t === 1) return 1\n if (t < 0.5) {\n return -(Math.pow(2, 20 * t - 10) * Math.sin((20 * t - 11.125) * c5)) / 2\n } else {\n return (Math.pow(2, -20 * t + 10) * Math.sin((20 * t - 11.125) * c5)) / 2 + 1\n }\n}\n\n// 특수 효과 이징 함수들\nexport const pulse: EasingFunction = (t) => Math.sin(t * Math.PI) * 0.5 + 0.5\nexport const pulseSmooth: EasingFunction = (t) => Math.sin(t * Math.PI * 2) * 0.3 + 0.7\nexport const skeletonWave: EasingFunction = (t) => Math.sin((t - 0.5) * Math.PI * 2) * 0.5 + 0.5\nexport const blink: EasingFunction = (t) => t < 0.5 ? 1 : 0\n\n// 이징 타입 정의\nexport type EasingType = \n | 'linear'\n | 'easeIn' | 'easeOut' | 'easeInOut'\n | 'easeInQuad' | 'easeOutQuad' | 'easeInOutQuad'\n | 'easeInCubic' | 'easeOutCubic' | 'easeInOutCubic'\n | 'easeInQuart' | 'easeOutQuart' | 'easeInOutQuart'\n | 'easeInQuint' | 'easeOutQuint' | 'easeInOutQuint'\n | 'easeInSine' | 'easeOutSine' | 'easeInOutSine'\n | 'easeInExpo' | 'easeOutExpo' | 'easeInOutExpo'\n | 'easeInCirc' | 'easeOutCirc' | 'easeInOutCirc'\n | 'easeInBounce' | 'easeOutBounce' | 'easeInOutBounce'\n | 'easeInBack' | 'easeOutBack' | 'easeInOutBack'\n | 'easeInElastic' | 'easeOutElastic' | 'easeInOutElastic'\n | 'pulse' | 'pulseSmooth' | 'skeletonWave' | 'blink'\n\n// 이징 함수 객체 (기존 호환성을 위해)\nexport const easing = {\n linear,\n easeIn,\n easeOut,\n easeInOut,\n easeInQuad,\n easeOutQuad,\n easeInOutQuad,\n easeInCubic,\n easeOutCubic,\n easeInOutCubic,\n easeInQuart,\n easeOutQuart,\n easeInOutQuart,\n easeInQuint,\n easeOutQuint,\n easeInOutQuint,\n easeInSine,\n easeOutSine,\n easeInOutSine,\n easeInExpo,\n easeOutExpo,\n easeInOutExpo,\n easeInCirc,\n easeOutCirc,\n easeInOutCirc,\n easeInBounce,\n easeOutBounce,\n easeInOutBounce,\n easeInBack,\n easeOutBack,\n easeInOutBack,\n easeInElastic,\n easeOutElastic,\n easeInOutElastic,\n pulse,\n pulseSmooth,\n skeletonWave,\n blink\n} as const\n\n// 이징 함수 확인 함수\nexport function isValidEasing(easingName: string): boolean {\n return easingName in easing\n}\n\n// 이징 함수 가져오기 함수\nexport function getEasing(easingName: unknown): EasingFunction {\n if (typeof easingName === 'function') {\n // 타입이 Function이지만 EasingFunction 시그니처와 일치하는지 확인\n return (easingName as EasingFunction)\n }\n\n if (typeof easingName === 'string') {\n if (easingName in easing) {\n return easing[easingName as keyof typeof easing]\n }\n\n // 'bounce'는 easeOutBounce로 매핑 (별도 이름이므로)\n if (easingName === 'bounce') {\n return easing.easeOutBounce\n }\n\n if (process.env.NODE_ENV === 'development') {\n console.warn(`[HUA Motion] Unknown easing \"${easingName}\", using default \"easeOut\".`)\n }\n }\n\n return easeOut\n}\n\n// 이징 적용 함수\nexport function applyEasing(t: number, easingName: string | EasingFunction): number {\n const easingFn = getEasing(easingName)\n return easingFn(t)\n}\n\n// 안전한 이징 적용 함수 (에러 방지)\nexport function safeApplyEasing(t: number, easingName: unknown): number {\n try {\n const easingFn = getEasing(easingName)\n return easingFn(t)\n } catch (err) {\n if (process.env.NODE_ENV === 'development') {\n console.error(`[HUA Motion] Failed to apply easing \"${easingName}\":`, err)\n }\n return easeOut(t)\n }\n}\n\n// 사용 가능한 이징 함수 목록\nexport function getAvailableEasings(): string[] {\n return Object.keys(easing)\n}\n\n// 이징 함수 유효성 검사\nexport function isEasingFunction(value: any): value is EasingFunction {\n return typeof value === 'function'\n}\n\n// 이징 프리셋\nexport const easingPresets = {\n default: 'easeOut',\n smooth: 'easeInOutCubic',\n fast: 'easeOutQuad',\n slow: 'easeInOutSine',\n bouncy: 'easeOutBounce',\n elastic: 'easeOutElastic',\n fade: 'easeInOut',\n scale: 'easeOutBack'\n} as const\n\n// 프리셋에서 이징 함수 가져오기\nexport function getPresetEasing(preset: keyof typeof easingPresets): EasingFunction {\n const easingName = easingPresets[preset]\n return getEasing(easingName)\n} ","/**\n * Spring physics calculation (Hooke's Law + damping)\n *\n * Pure function — no side effects, fully testable.\n */\n\nexport interface SpringConfig {\n stiffness: number\n damping: number\n mass: number\n}\n\nexport interface SpringResult {\n value: number\n velocity: number\n}\n\n/**\n * Calculate one step of a damped spring simulation.\n *\n * @param currentValue Current position\n * @param currentVelocity Current velocity\n * @param targetValue Equilibrium (target) position\n * @param deltaTime Time step in seconds\n * @param config Spring parameters (stiffness, damping, mass)\n */\nexport function calculateSpring(\n currentValue: number,\n currentVelocity: number,\n targetValue: number,\n deltaTime: number,\n config: SpringConfig,\n): SpringResult {\n const { stiffness, damping, mass } = config\n\n // Hooke's Law: F_spring = -k * x\n const displacement = currentValue - targetValue\n const springForce = -stiffness * displacement\n\n // Damping force: F_damping = -c * v\n const dampingForce = -damping * currentVelocity\n\n // Newton's second law: a = F / m\n const acceleration = (springForce + dampingForce) / mass\n\n // Semi-implicit Euler integration\n const newVelocity = currentVelocity + acceleration * deltaTime\n const newValue = currentValue + newVelocity * deltaTime\n\n return { value: newValue, velocity: newVelocity }\n}\n"]}