@hua-labs/motion-core 2.0.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.
Files changed (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +245 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/hooks/useBounceIn.d.ts +3 -0
  5. package/dist/hooks/useBounceIn.d.ts.map +1 -0
  6. package/dist/hooks/useBounceIn.js +141 -0
  7. package/dist/hooks/useBounceIn.js.map +1 -0
  8. package/dist/hooks/useButtonEffect.d.ts +48 -0
  9. package/dist/hooks/useButtonEffect.d.ts.map +1 -0
  10. package/dist/hooks/useButtonEffect.js +311 -0
  11. package/dist/hooks/useButtonEffect.js.map +1 -0
  12. package/dist/hooks/useCardList.d.ts +23 -0
  13. package/dist/hooks/useCardList.d.ts.map +1 -0
  14. package/dist/hooks/useCardList.js +119 -0
  15. package/dist/hooks/useCardList.js.map +1 -0
  16. package/dist/hooks/useClickToggle.d.ts +15 -0
  17. package/dist/hooks/useClickToggle.d.ts.map +1 -0
  18. package/dist/hooks/useClickToggle.js +102 -0
  19. package/dist/hooks/useClickToggle.js.map +1 -0
  20. package/dist/hooks/useFadeIn.d.ts +17 -0
  21. package/dist/hooks/useFadeIn.d.ts.map +1 -0
  22. package/dist/hooks/useFadeIn.js +133 -0
  23. package/dist/hooks/useFadeIn.js.map +1 -0
  24. package/dist/hooks/useFocusToggle.d.ts +15 -0
  25. package/dist/hooks/useFocusToggle.d.ts.map +1 -0
  26. package/dist/hooks/useFocusToggle.js +99 -0
  27. package/dist/hooks/useFocusToggle.js.map +1 -0
  28. package/dist/hooks/useGradient.d.ts +25 -0
  29. package/dist/hooks/useGradient.d.ts.map +1 -0
  30. package/dist/hooks/useGradient.js +144 -0
  31. package/dist/hooks/useGradient.js.map +1 -0
  32. package/dist/hooks/useHoverMotion.d.ts +15 -0
  33. package/dist/hooks/useHoverMotion.d.ts.map +1 -0
  34. package/dist/hooks/useHoverMotion.js +99 -0
  35. package/dist/hooks/useHoverMotion.js.map +1 -0
  36. package/dist/hooks/useLoadingSpinner.d.ts +30 -0
  37. package/dist/hooks/useLoadingSpinner.d.ts.map +1 -0
  38. package/dist/hooks/useLoadingSpinner.js +283 -0
  39. package/dist/hooks/useLoadingSpinner.js.map +1 -0
  40. package/dist/hooks/useMotion.d.ts +103 -0
  41. package/dist/hooks/useMotion.d.ts.map +1 -0
  42. package/dist/hooks/useMotion.js +266 -0
  43. package/dist/hooks/useMotion.js.map +1 -0
  44. package/dist/hooks/useMotionState.d.ts +26 -0
  45. package/dist/hooks/useMotionState.d.ts.map +1 -0
  46. package/dist/hooks/useMotionState.js +119 -0
  47. package/dist/hooks/useMotionState.js.map +1 -0
  48. package/dist/hooks/useNavigation.d.ts +40 -0
  49. package/dist/hooks/useNavigation.d.ts.map +1 -0
  50. package/dist/hooks/useNavigation.js +212 -0
  51. package/dist/hooks/useNavigation.js.map +1 -0
  52. package/dist/hooks/usePulse.d.ts +3 -0
  53. package/dist/hooks/usePulse.d.ts.map +1 -0
  54. package/dist/hooks/usePulse.js +134 -0
  55. package/dist/hooks/usePulse.js.map +1 -0
  56. package/dist/hooks/useRepeat.d.ts +26 -0
  57. package/dist/hooks/useRepeat.d.ts.map +1 -0
  58. package/dist/hooks/useRepeat.js +179 -0
  59. package/dist/hooks/useRepeat.js.map +1 -0
  60. package/dist/hooks/useScaleIn.d.ts +3 -0
  61. package/dist/hooks/useScaleIn.d.ts.map +1 -0
  62. package/dist/hooks/useScaleIn.js +111 -0
  63. package/dist/hooks/useScaleIn.js.map +1 -0
  64. package/dist/hooks/useScrollProgress.d.ts +21 -0
  65. package/dist/hooks/useScrollProgress.d.ts.map +1 -0
  66. package/dist/hooks/useScrollProgress.js +139 -0
  67. package/dist/hooks/useScrollProgress.js.map +1 -0
  68. package/dist/hooks/useScrollReveal.d.ts +17 -0
  69. package/dist/hooks/useScrollReveal.d.ts.map +1 -0
  70. package/dist/hooks/useScrollReveal.js +95 -0
  71. package/dist/hooks/useScrollReveal.js.map +1 -0
  72. package/dist/hooks/useScrollToggle.d.ts +17 -0
  73. package/dist/hooks/useScrollToggle.d.ts.map +1 -0
  74. package/dist/hooks/useScrollToggle.js +119 -0
  75. package/dist/hooks/useScrollToggle.js.map +1 -0
  76. package/dist/hooks/useSkeleton.d.ts +21 -0
  77. package/dist/hooks/useSkeleton.d.ts.map +1 -0
  78. package/dist/hooks/useSkeleton.js +139 -0
  79. package/dist/hooks/useSkeleton.js.map +1 -0
  80. package/dist/hooks/useSlideDown.d.ts +25 -0
  81. package/dist/hooks/useSlideDown.d.ts.map +1 -0
  82. package/dist/hooks/useSlideDown.js +263 -0
  83. package/dist/hooks/useSlideDown.js.map +1 -0
  84. package/dist/hooks/useSlideLeft.d.ts +3 -0
  85. package/dist/hooks/useSlideLeft.d.ts.map +1 -0
  86. package/dist/hooks/useSlideLeft.js +111 -0
  87. package/dist/hooks/useSlideLeft.js.map +1 -0
  88. package/dist/hooks/useSlideRight.d.ts +3 -0
  89. package/dist/hooks/useSlideRight.d.ts.map +1 -0
  90. package/dist/hooks/useSlideRight.js +111 -0
  91. package/dist/hooks/useSlideRight.js.map +1 -0
  92. package/dist/hooks/useSlideUp.d.ts +3 -0
  93. package/dist/hooks/useSlideUp.d.ts.map +1 -0
  94. package/dist/hooks/useSlideUp.js +111 -0
  95. package/dist/hooks/useSlideUp.js.map +1 -0
  96. package/dist/hooks/useSpringMotion.d.ts +32 -0
  97. package/dist/hooks/useSpringMotion.d.ts.map +1 -0
  98. package/dist/hooks/useSpringMotion.js +185 -0
  99. package/dist/hooks/useSpringMotion.js.map +1 -0
  100. package/dist/hooks/useVisibilityToggle.d.ts +15 -0
  101. package/dist/hooks/useVisibilityToggle.d.ts.map +1 -0
  102. package/dist/hooks/useVisibilityToggle.js +106 -0
  103. package/dist/hooks/useVisibilityToggle.js.map +1 -0
  104. package/dist/index.d.ts +29 -0
  105. package/dist/index.d.ts.map +1 -0
  106. package/dist/index.js +43 -0
  107. package/dist/index.js.map +1 -0
  108. package/dist/types/index.d.ts +109 -0
  109. package/dist/types/index.d.ts.map +1 -0
  110. package/dist/types/index.js +5 -0
  111. package/dist/types/index.js.map +1 -0
  112. package/dist/utils/easing.d.ts +44 -0
  113. package/dist/utils/easing.d.ts.map +1 -0
  114. package/dist/utils/easing.js +98 -0
  115. package/dist/utils/easing.js.map +1 -0
  116. package/package.json +69 -0
@@ -0,0 +1,106 @@
1
+ import { useRef, useState, useCallback } from 'react';
2
+ export function useVisibilityToggle(options = {}) {
3
+ const { duration = 300, easing = 'ease-out', showScale = 1, showOpacity = 1, showRotate = 0, showTranslateY = 0, showTranslateX = 0, hideScale = 0.8, hideOpacity = 0, hideRotate = 0, hideTranslateY = 20, hideTranslateX = 0, onComplete, onStart, onStop, onReset } = options;
4
+ const ref = useRef(null);
5
+ const [isVisible, setIsVisible] = useState(false);
6
+ const [isAnimating, setIsAnimating] = useState(false);
7
+ const [progress, setProgress] = useState(0);
8
+ // 가시성 토글 함수
9
+ const toggle = useCallback(() => {
10
+ setIsAnimating(true);
11
+ setProgress(0);
12
+ onStart?.();
13
+ const newVisibility = !isVisible;
14
+ setIsVisible(newVisibility);
15
+ // 애니메이션 완료 시
16
+ setTimeout(() => {
17
+ setIsAnimating(false);
18
+ setProgress(1);
19
+ onComplete?.();
20
+ }, duration);
21
+ }, [isVisible, duration, onStart, onComplete]);
22
+ // 표시 함수
23
+ const show = useCallback(() => {
24
+ if (!isVisible) {
25
+ setIsAnimating(true);
26
+ setProgress(0);
27
+ onStart?.();
28
+ setIsVisible(true);
29
+ setTimeout(() => {
30
+ setIsAnimating(false);
31
+ setProgress(1);
32
+ onComplete?.();
33
+ }, duration);
34
+ }
35
+ }, [isVisible, duration, onStart, onComplete]);
36
+ // 숨김 함수
37
+ const hide = useCallback(() => {
38
+ if (isVisible) {
39
+ setIsAnimating(true);
40
+ setProgress(1);
41
+ onStart?.();
42
+ setIsVisible(false);
43
+ setTimeout(() => {
44
+ setIsAnimating(false);
45
+ setProgress(0);
46
+ onComplete?.();
47
+ }, duration);
48
+ }
49
+ }, [isVisible, duration, onStart, onComplete]);
50
+ // 모션 시작 함수 (프로그래매틱 제어용)
51
+ const start = useCallback(() => {
52
+ if (!isVisible) {
53
+ toggle();
54
+ }
55
+ }, [isVisible, toggle]);
56
+ // 모션 중단 함수
57
+ const stop = useCallback(() => {
58
+ setIsAnimating(false);
59
+ onStop?.();
60
+ }, [onStop]);
61
+ // 모션 리셋 함수
62
+ const reset = useCallback(() => {
63
+ setIsVisible(false);
64
+ setIsAnimating(false);
65
+ setProgress(0);
66
+ onReset?.();
67
+ }, [onReset]);
68
+ // 모션 일시정지 함수
69
+ const pause = useCallback(() => {
70
+ setIsAnimating(false);
71
+ }, []);
72
+ // 모션 재개 함수
73
+ const resume = useCallback(() => {
74
+ if (isVisible) {
75
+ setIsAnimating(true);
76
+ }
77
+ }, [isVisible]);
78
+ // 스타일 계산
79
+ const style = {
80
+ transform: `
81
+ scale(${isVisible ? showScale : hideScale})
82
+ rotate(${isVisible ? showRotate : hideRotate}deg)
83
+ translate(${isVisible ? showTranslateX : hideTranslateX}px, ${isVisible ? showTranslateY : hideTranslateY}px)
84
+ `,
85
+ opacity: isVisible ? showOpacity : hideOpacity,
86
+ transition: `all ${duration}ms ${easing}`,
87
+ willChange: 'transform, opacity'
88
+ };
89
+ return {
90
+ ref,
91
+ isVisible,
92
+ isAnimating,
93
+ style,
94
+ progress,
95
+ start,
96
+ stop,
97
+ reset,
98
+ pause,
99
+ resume,
100
+ // 추가 메서드
101
+ toggle,
102
+ show,
103
+ hide
104
+ };
105
+ }
106
+ //# sourceMappingURL=useVisibilityToggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useVisibilityToggle.js","sourceRoot":"","sources":["../../src/hooks/useVisibilityToggle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export { useFadeIn } from './hooks/useFadeIn';
2
+ export { useSlideUp } from './hooks/useSlideUp';
3
+ export { useSlideLeft } from './hooks/useSlideLeft';
4
+ export { useSlideRight } from './hooks/useSlideRight';
5
+ export { useScaleIn } from './hooks/useScaleIn';
6
+ export { useBounceIn } from './hooks/useBounceIn';
7
+ export { usePulse } from './hooks/usePulse';
8
+ export { useSpringMotion } from './hooks/useSpringMotion';
9
+ export { useGradient } from './hooks/useGradient';
10
+ export { useMotion } from './hooks/useMotion';
11
+ export { useSlideDown } from './hooks/useSlideDown';
12
+ export { useSkeleton } from './hooks/useSkeleton';
13
+ export { useHoverMotion } from './hooks/useHoverMotion';
14
+ export { useClickToggle } from './hooks/useClickToggle';
15
+ export { useFocusToggle } from './hooks/useFocusToggle';
16
+ export { useVisibilityToggle } from './hooks/useVisibilityToggle';
17
+ export { useScrollReveal } from './hooks/useScrollReveal';
18
+ export { useScrollToggle } from './hooks/useScrollToggle';
19
+ export { useScrollProgress } from './hooks/useScrollProgress';
20
+ export { useCardList } from './hooks/useCardList';
21
+ export { useNavigation } from './hooks/useNavigation';
22
+ export { useLoadingSpinner } from './hooks/useLoadingSpinner';
23
+ export { useButtonEffect } from './hooks/useButtonEffect';
24
+ export { useMotionState } from './hooks/useMotionState';
25
+ export { useRepeat } from './hooks/useRepeat';
26
+ export { linear, easeIn, easeOut, easeInOut, easeInQuad, easeOutQuad, easeInOutQuad, type EasingFunction, type EasingType } from './utils/easing';
27
+ export { getEasing, applyEasing, safeApplyEasing, isValidEasing, getAvailableEasings, isEasingFunction, easingPresets, getPresetEasing } from './utils/easing';
28
+ export type { BaseMotionOptions, BaseMotionReturn, FadeInOptions, SlideOptions, ScaleOptions, BounceOptions, PulseOptions, MotionDirection, MotionEasing, MotionTrigger, MotionCallback, MotionProgressCallback, MotionStateCallback, MotionElement, MotionRef, MotionStyle } from './types';
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAGjD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAGjE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAG7D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAM7C,OAAO,EACL,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAClC,UAAU,EAAE,WAAW,EAAE,aAAa,EACtC,KAAK,cAAc,EAAE,KAAK,UAAU,EACrC,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EACL,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EACtD,mBAAmB,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EACtE,MAAM,gBAAgB,CAAA;AAMvB,YAAY,EAEV,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EAGZ,eAAe,EACf,YAAY,EACZ,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EAGnB,aAAa,EACb,SAAS,EACT,WAAW,EACZ,MAAM,SAAS,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,43 @@
1
+ // ========================================
2
+ // HUA Motion Core - 메인 export 파일
3
+ // ========================================
4
+ // ========================================
5
+ // 기본 모션 훅들 (12개)
6
+ // ========================================
7
+ // 기본 모션
8
+ export { useFadeIn } from './hooks/useFadeIn';
9
+ export { useSlideUp } from './hooks/useSlideUp';
10
+ export { useSlideLeft } from './hooks/useSlideLeft';
11
+ export { useSlideRight } from './hooks/useSlideRight';
12
+ export { useScaleIn } from './hooks/useScaleIn';
13
+ export { useBounceIn } from './hooks/useBounceIn';
14
+ export { usePulse } from './hooks/usePulse';
15
+ export { useSpringMotion } from './hooks/useSpringMotion';
16
+ export { useGradient } from './hooks/useGradient';
17
+ export { useMotion } from './hooks/useMotion';
18
+ export { useSlideDown } from './hooks/useSlideDown';
19
+ export { useSkeleton } from './hooks/useSkeleton';
20
+ // 기본 인터랙션
21
+ export { useHoverMotion } from './hooks/useHoverMotion';
22
+ export { useClickToggle } from './hooks/useClickToggle';
23
+ export { useFocusToggle } from './hooks/useFocusToggle';
24
+ export { useVisibilityToggle } from './hooks/useVisibilityToggle';
25
+ // 기본 스크롤
26
+ export { useScrollReveal } from './hooks/useScrollReveal';
27
+ export { useScrollToggle } from './hooks/useScrollToggle';
28
+ export { useScrollProgress } from './hooks/useScrollProgress';
29
+ // 🆕 한국 개발자들이 자주 사용하는 기능
30
+ export { useCardList } from './hooks/useCardList';
31
+ export { useNavigation } from './hooks/useNavigation';
32
+ export { useLoadingSpinner } from './hooks/useLoadingSpinner';
33
+ export { useButtonEffect } from './hooks/useButtonEffect';
34
+ // 기본 유틸리티
35
+ export { useMotionState } from './hooks/useMotionState';
36
+ export { useRepeat } from './hooks/useRepeat';
37
+ // ========================================
38
+ // 기본 이징 함수들 (8개)
39
+ // ========================================
40
+ export { linear, easeIn, easeOut, easeInOut, easeInQuad, easeOutQuad, easeInOutQuad } from './utils/easing';
41
+ // 이징 유틸리티
42
+ export { getEasing, applyEasing, safeApplyEasing, isValidEasing, getAvailableEasings, isEasingFunction, easingPresets, getPresetEasing } from './utils/easing';
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,iCAAiC;AACjC,2CAA2C;AAE3C,2CAA2C;AAC3C,iBAAiB;AACjB,2CAA2C;AAE3C,QAAQ;AACR,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD,UAAU;AACV,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,SAAS;AACT,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAE7D,yBAAyB;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,UAAU;AACV,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE7C,2CAA2C;AAC3C,iBAAiB;AACjB,2CAA2C;AAE3C,OAAO,EACL,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAClC,UAAU,EAAE,WAAW,EAAE,aAAa,EAEvC,MAAM,gBAAgB,CAAA;AAEvB,UAAU;AACV,OAAO,EACL,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EACtD,mBAAmB,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EACtE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,109 @@
1
+ import { RefObject, CSSProperties } from 'react';
2
+ export type MotionElement = HTMLDivElement | HTMLSpanElement | HTMLButtonElement | HTMLHeadingElement | HTMLParagraphElement | HTMLImageElement;
3
+ export type MotionRef<T extends MotionElement = HTMLDivElement> = RefObject<T | null>;
4
+ export type MotionStyle = CSSProperties & {
5
+ '--motion-delay'?: string;
6
+ '--motion-duration'?: string;
7
+ '--motion-easing'?: string;
8
+ '--motion-progress'?: string;
9
+ };
10
+ export interface BaseMotionOptions {
11
+ /** 모션 시작 지연 시간 (ms) */
12
+ delay?: number;
13
+ /** 모션 지속 시간 (ms) */
14
+ duration?: number;
15
+ /** Intersection Observer 임계값 (0-1) */
16
+ threshold?: number;
17
+ /** 한 번만 트리거할지 여부 */
18
+ triggerOnce?: boolean;
19
+ /** 이징 함수명 */
20
+ easing?: string;
21
+ /** 자동 시작 여부 */
22
+ autoStart?: boolean;
23
+ /** 모션 완료 시 콜백 */
24
+ onComplete?: () => void;
25
+ /** 모션 시작 시 콜백 */
26
+ onStart?: () => void;
27
+ /** 모션 중단 시 콜백 */
28
+ onStop?: () => void;
29
+ /** 모션 리셋 시 콜백 */
30
+ onReset?: () => void;
31
+ }
32
+ export interface BaseMotionReturn<T extends MotionElement = HTMLDivElement> {
33
+ /** DOM 요소 참조 */
34
+ ref: MotionRef<T>;
35
+ /** 요소가 화면에 보이는지 여부 */
36
+ isVisible: boolean;
37
+ /** 모션이 진행 중인지 여부 */
38
+ isAnimating: boolean;
39
+ /** 적용할 CSS 스타일 */
40
+ style?: MotionStyle;
41
+ /** 적용할 CSS 클래스명 */
42
+ className?: string;
43
+ /** 모션 진행률 (0-1) */
44
+ progress?: number;
45
+ /** 모션 시작 함수 */
46
+ start?: () => void;
47
+ /** 모션 리셋 함수 */
48
+ reset?: () => void;
49
+ /** 모션 중단 함수 */
50
+ stop?: () => void;
51
+ /** 모션 일시정지 함수 */
52
+ pause?: () => void;
53
+ /** 모션 재개 함수 */
54
+ resume?: () => void;
55
+ /** 모션 토글 함수 (선택적) */
56
+ toggle?: () => void;
57
+ }
58
+ export interface InteractionReturn<T extends MotionElement = HTMLDivElement> extends BaseMotionReturn<T> {
59
+ start: () => void;
60
+ isVisible: boolean;
61
+ focus?: () => void;
62
+ blur?: () => void;
63
+ hover?: () => void;
64
+ leave?: () => void;
65
+ click?: () => void;
66
+ release?: () => void;
67
+ show?: () => void;
68
+ hide?: () => void;
69
+ isFocused?: boolean;
70
+ isHovered?: boolean;
71
+ isClicked?: boolean;
72
+ }
73
+ export interface FadeInOptions extends BaseMotionOptions {
74
+ /** 초기 투명도 */
75
+ initialOpacity?: number;
76
+ /** 목표 투명도 */
77
+ targetOpacity?: number;
78
+ }
79
+ export interface SlideOptions extends BaseMotionOptions {
80
+ /** 슬라이드 방향 */
81
+ direction?: 'up' | 'down' | 'left' | 'right';
82
+ /** 슬라이드 거리 (px) */
83
+ distance?: number;
84
+ }
85
+ export interface ScaleOptions extends BaseMotionOptions {
86
+ /** 초기 스케일 */
87
+ initialScale?: number;
88
+ /** 목표 스케일 */
89
+ targetScale?: number;
90
+ }
91
+ export interface BounceOptions extends BaseMotionOptions {
92
+ /** 바운스 높이 (px) */
93
+ bounceHeight?: number;
94
+ /** 바운스 횟수 */
95
+ bounceCount?: number;
96
+ }
97
+ export interface PulseOptions extends BaseMotionOptions {
98
+ /** 펄스 스케일 */
99
+ pulseScale?: number;
100
+ /** 반복 횟수 */
101
+ pulseCount?: number;
102
+ }
103
+ export type MotionDirection = 'up' | 'down' | 'left' | 'right';
104
+ export type MotionEasing = 'linear' | 'ease-in' | 'ease-out' | 'ease-in-out';
105
+ export type MotionTrigger = 'scroll' | 'click' | 'hover' | 'focus' | 'auto';
106
+ export type MotionCallback = () => void;
107
+ export type MotionProgressCallback = (progress: number) => void;
108
+ export type MotionStateCallback<T extends MotionElement = HTMLDivElement> = (state: BaseMotionReturn<T>) => void;
109
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ // ========================================
2
+ // HUA Motion Core - 기본 타입 정의
3
+ // ========================================
4
+ export {};
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,6BAA6B;AAC7B,2CAA2C"}
@@ -0,0 +1,44 @@
1
+ export type EasingFunction = (t: number) => number;
2
+ export declare const linear: EasingFunction;
3
+ export declare const easeIn: EasingFunction;
4
+ export declare const easeOut: EasingFunction;
5
+ export declare const easeInOut: EasingFunction;
6
+ export declare const easeInQuad: EasingFunction;
7
+ export declare const easeOutQuad: EasingFunction;
8
+ export declare const easeInOutQuad: EasingFunction;
9
+ export type EasingType = 'linear' | 'easeIn' | 'easeOut' | 'easeInOut' | 'easeInQuad' | 'easeOutQuad' | 'easeInOutQuad';
10
+ /**
11
+ * 이징 함수가 유효한지 확인
12
+ */
13
+ export declare function isValidEasing(easingName: string): boolean;
14
+ /**
15
+ * 이징 함수명으로 이징 함수 가져오기
16
+ */
17
+ export declare function getEasing(easingName: unknown): EasingFunction;
18
+ /**
19
+ * 이징 함수 적용
20
+ */
21
+ export declare function applyEasing(t: number, easingName: string | EasingFunction): number;
22
+ /**
23
+ * 안전한 이징 함수 적용 (에러 처리)
24
+ */
25
+ export declare function safeApplyEasing(t: number, easingName: unknown): number;
26
+ /**
27
+ * 사용 가능한 이징 함수 목록 가져오기
28
+ */
29
+ export declare function getAvailableEasings(): string[];
30
+ /**
31
+ * 값이 이징 함수인지 확인
32
+ */
33
+ export declare function isEasingFunction(value: any): value is EasingFunction;
34
+ export declare const easingPresets: {
35
+ smooth: EasingFunction;
36
+ fast: EasingFunction;
37
+ slow: EasingFunction;
38
+ natural: EasingFunction;
39
+ };
40
+ /**
41
+ * 프리셋 이징 함수 가져오기
42
+ */
43
+ export declare function getPresetEasing(preset: keyof typeof easingPresets): EasingFunction;
44
+ //# sourceMappingURL=easing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easing.d.ts","sourceRoot":"","sources":["../../src/utils/easing.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;AAMlD,eAAO,MAAM,MAAM,EAAE,cAAyB,CAAA;AAE9C,eAAO,MAAM,MAAM,EAAE,cAA6B,CAAA;AAClD,eAAO,MAAM,OAAO,EAAE,cAA6C,CAAA;AACnE,eAAO,MAAM,SAAS,EAAE,cAA6E,CAAA;AAGrG,eAAO,MAAM,UAAU,EAAE,cAAuB,CAAA;AAChD,eAAO,MAAM,WAAW,EAAE,cAAwB,CAAA;AAClD,eAAO,MAAM,aAAa,EAAE,cAA0B,CAAA;AAMtD,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,QAAQ,GAAG,SAAS,GAAG,WAAW,GAClC,YAAY,GAAG,aAAa,GAAG,eAAe,CAAA;AAMlD;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,OAAO,GAAG,cAAc,CAoB7D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,MAAM,CAGlF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,CAOtE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,cAAc,CAEpE;AAaD,eAAO,MAAM,aAAa;;;;;CAKzB,CAAA;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,OAAO,aAAa,GAAG,cAAc,CAElF"}
@@ -0,0 +1,98 @@
1
+ // ========================================
2
+ // HUA Motion Core - 기본 이징 함수들
3
+ // ========================================
4
+ // ========================================
5
+ // 기본 이징 함수들 (8개)
6
+ // ========================================
7
+ export const linear = (t) => t;
8
+ export const easeIn = (t) => t * t;
9
+ export const easeOut = (t) => 1 - (1 - t) * (1 - t);
10
+ export const easeInOut = (t) => t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2;
11
+ // Quad는 In/Out과 동일하므로 별칭으로 제공
12
+ export const easeInQuad = easeIn;
13
+ export const easeOutQuad = easeOut;
14
+ export const easeInOutQuad = easeInOut;
15
+ // ========================================
16
+ // 이징 유틸리티 함수들
17
+ // ========================================
18
+ /**
19
+ * 이징 함수가 유효한지 확인
20
+ */
21
+ export function isValidEasing(easingName) {
22
+ const validEasings = ['linear', 'easeIn', 'easeOut', 'easeInOut', 'easeInQuad', 'easeOutQuad', 'easeInOutQuad'];
23
+ return validEasings.includes(easingName);
24
+ }
25
+ /**
26
+ * 이징 함수명으로 이징 함수 가져오기
27
+ */
28
+ export function getEasing(easingName) {
29
+ if (typeof easingName === 'function') {
30
+ // 타입 안전성을 위해 EasingFunction으로 캐스팅
31
+ return easingName;
32
+ }
33
+ if (typeof easingName === 'string') {
34
+ switch (easingName) {
35
+ case 'linear': return linear;
36
+ case 'easeIn': return easeIn;
37
+ case 'easeOut': return easeOut;
38
+ case 'easeInOut': return easeInOut;
39
+ case 'easeInQuad': return easeInQuad;
40
+ case 'easeOutQuad': return easeOutQuad;
41
+ case 'easeInOutQuad': return easeInOutQuad;
42
+ default: return linear;
43
+ }
44
+ }
45
+ return linear; // 기본값
46
+ }
47
+ /**
48
+ * 이징 함수 적용
49
+ */
50
+ export function applyEasing(t, easingName) {
51
+ const easing = getEasing(easingName);
52
+ return easing(t);
53
+ }
54
+ /**
55
+ * 안전한 이징 함수 적용 (에러 처리)
56
+ */
57
+ export function safeApplyEasing(t, easingName) {
58
+ try {
59
+ return applyEasing(t, easingName);
60
+ }
61
+ catch (error) {
62
+ console.warn('Easing function error, using linear:', error);
63
+ return linear(t);
64
+ }
65
+ }
66
+ /**
67
+ * 사용 가능한 이징 함수 목록 가져오기
68
+ */
69
+ export function getAvailableEasings() {
70
+ return ['linear', 'easeIn', 'easeOut', 'easeInOut', 'easeInQuad', 'easeOutQuad', 'easeInOutQuad'];
71
+ }
72
+ /**
73
+ * 값이 이징 함수인지 확인
74
+ */
75
+ export function isEasingFunction(value) {
76
+ return typeof value === 'function';
77
+ }
78
+ // ========================================
79
+ // 이징 함수 맵
80
+ // ========================================
81
+ // 기존 패키지와 동일한 방식으로 개별 함수 export
82
+ // easingFunctions 객체는 제거하여 React 19 타입 호환성 문제 해결
83
+ // ========================================
84
+ // 기본 이징 프리셋
85
+ // ========================================
86
+ export const easingPresets = {
87
+ smooth: easeInOut,
88
+ fast: easeIn,
89
+ slow: easeOut,
90
+ natural: easeInOut
91
+ };
92
+ /**
93
+ * 프리셋 이징 함수 가져오기
94
+ */
95
+ export function getPresetEasing(preset) {
96
+ return easingPresets[preset] || linear;
97
+ }
98
+ //# sourceMappingURL=easing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easing.js","sourceRoot":"","sources":["../../src/utils/easing.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "@hua-labs/motion-core",
3
+ "version": "2.0.0",
4
+ "description": "HUA Motion Core - Essential animation hooks for React developers",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "require": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "dependencies": {},
18
+ "devDependencies": {
19
+ "@testing-library/jest-dom": "^6.0.0",
20
+ "@testing-library/react": "^16.3.0",
21
+ "@types/jest": "^29.0.0",
22
+ "@types/node": "^20.0.0",
23
+ "@types/react": "^19.0.0",
24
+ "@types/react-dom": "^19.0.0",
25
+ "eslint": "^8.0.0",
26
+ "jest": "^29.0.0",
27
+ "ts-jest": "^29.4.1",
28
+ "typescript": "^5.8.3"
29
+ },
30
+ "peerDependencies": {
31
+ "react": ">=16.8.0",
32
+ "react-dom": ">=16.8.0"
33
+ },
34
+ "keywords": [
35
+ "motion",
36
+ "animation",
37
+ "hooks",
38
+ "react",
39
+ "typescript",
40
+ "fade",
41
+ "slide",
42
+ "scale",
43
+ "bounce",
44
+ "pulse",
45
+ "scroll",
46
+ "hover",
47
+ "click",
48
+ "korean",
49
+ "english"
50
+ ],
51
+ "author": "HUA Labs",
52
+ "license": "MIT",
53
+ "repository": {
54
+ "type": "git",
55
+ "url": "https://github.com/HUA-Labs/HUA-Labs-public.git"
56
+ },
57
+ "bugs": {
58
+ "url": "https://github.com/HUA-Labs/HUA-Labs-public/issues"
59
+ },
60
+ "homepage": "https://github.com/HUA-Labs/HUA-Labs-public#readme",
61
+ "scripts": {
62
+ "build": "tsc",
63
+ "dev": "tsc --watch",
64
+ "clean": "rm -rf dist",
65
+ "test": "jest",
66
+ "lint": "eslint src --ext .ts,.tsx",
67
+ "type-check": "tsc --noEmit"
68
+ }
69
+ }