@hua-labs/motion-core 2.0.0 → 2.0.1
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/README.md +16 -19
- package/dist/.tsbuildinfo +1 -1
- package/dist/core/MotionEngine.d.ts +111 -0
- package/dist/core/MotionEngine.d.ts.map +1 -0
- package/dist/core/MotionEngine.js +206 -0
- package/dist/core/MotionEngine.js.map +1 -0
- package/dist/core/PerformanceOptimizer.d.ts +124 -0
- package/dist/core/PerformanceOptimizer.d.ts.map +1 -0
- package/dist/core/PerformanceOptimizer.js +334 -0
- package/dist/core/PerformanceOptimizer.js.map +1 -0
- package/dist/core/TransitionEffects.d.ts +76 -0
- package/dist/core/TransitionEffects.d.ts.map +1 -0
- package/dist/core/TransitionEffects.js +321 -0
- package/dist/core/TransitionEffects.js.map +1 -0
- package/dist/hooks/useBounceIn.d.ts +11 -2
- package/dist/hooks/useBounceIn.d.ts.map +1 -1
- package/dist/hooks/useBounceIn.js +48 -114
- package/dist/hooks/useBounceIn.js.map +1 -1
- package/dist/hooks/useClickToggle.d.ts +28 -13
- package/dist/hooks/useClickToggle.d.ts.map +1 -1
- package/dist/hooks/useClickToggle.js +125 -90
- package/dist/hooks/useClickToggle.js.map +1 -1
- package/dist/hooks/useFadeIn.d.ts +0 -14
- package/dist/hooks/useFadeIn.d.ts.map +1 -1
- package/dist/hooks/useFadeIn.js +17 -43
- package/dist/hooks/useFadeIn.js.map +1 -1
- package/dist/hooks/useFocusToggle.d.ts +28 -13
- package/dist/hooks/useFocusToggle.d.ts.map +1 -1
- package/dist/hooks/useFocusToggle.js +125 -87
- package/dist/hooks/useFocusToggle.js.map +1 -1
- package/dist/hooks/useGesture.d.ts +45 -0
- package/dist/hooks/useGesture.d.ts.map +1 -0
- package/dist/hooks/useGesture.js +274 -0
- package/dist/hooks/useGesture.js.map +1 -0
- package/dist/hooks/useGestureMotion.d.ts +26 -0
- package/dist/hooks/useGestureMotion.d.ts.map +1 -0
- package/dist/hooks/useGestureMotion.js +167 -0
- package/dist/hooks/useGestureMotion.js.map +1 -0
- package/dist/hooks/useGradient.d.ts +10 -21
- package/dist/hooks/useGradient.d.ts.map +1 -1
- package/dist/hooks/useGradient.js +70 -127
- package/dist/hooks/useGradient.js.map +1 -1
- package/dist/hooks/useHoverMotion.d.ts +4 -14
- package/dist/hooks/useHoverMotion.d.ts.map +1 -1
- package/dist/hooks/useHoverMotion.js +31 -82
- package/dist/hooks/useHoverMotion.js.map +1 -1
- package/dist/hooks/useMotionState.d.ts +27 -24
- package/dist/hooks/useMotionState.d.ts.map +1 -1
- package/dist/hooks/useMotionState.js +186 -103
- package/dist/hooks/useMotionState.js.map +1 -1
- package/dist/hooks/usePageMotions.d.ts +17 -0
- package/dist/hooks/usePageMotions.d.ts.map +1 -0
- package/dist/hooks/usePageMotions.js +352 -0
- package/dist/hooks/usePageMotions.js.map +1 -0
- package/dist/hooks/usePulse.d.ts +8 -1
- package/dist/hooks/usePulse.d.ts.map +1 -1
- package/dist/hooks/usePulse.js +75 -101
- package/dist/hooks/usePulse.js.map +1 -1
- package/dist/hooks/useRepeat.d.ts +17 -22
- package/dist/hooks/useRepeat.d.ts.map +1 -1
- package/dist/hooks/useRepeat.js +48 -162
- package/dist/hooks/useRepeat.js.map +1 -1
- package/dist/hooks/useScaleIn.d.ts +12 -2
- package/dist/hooks/useScaleIn.d.ts.map +1 -1
- package/dist/hooks/useScaleIn.js +46 -85
- package/dist/hooks/useScaleIn.js.map +1 -1
- package/dist/hooks/useScrollProgress.d.ts +8 -18
- package/dist/hooks/useScrollProgress.d.ts.map +1 -1
- package/dist/hooks/useScrollProgress.js +28 -130
- package/dist/hooks/useScrollProgress.js.map +1 -1
- package/dist/hooks/useScrollReveal.d.ts +12 -15
- package/dist/hooks/useScrollReveal.d.ts.map +1 -1
- package/dist/hooks/useScrollReveal.js +93 -72
- package/dist/hooks/useScrollReveal.js.map +1 -1
- package/dist/hooks/useSimplePageMotion.d.ts +29 -0
- package/dist/hooks/useSimplePageMotion.d.ts.map +1 -0
- package/dist/hooks/useSimplePageMotion.js +145 -0
- package/dist/hooks/useSimplePageMotion.js.map +1 -0
- package/dist/hooks/useSlideLeft.d.ts +12 -2
- package/dist/hooks/useSlideLeft.d.ts.map +1 -1
- package/dist/hooks/useSlideLeft.js +46 -85
- package/dist/hooks/useSlideLeft.js.map +1 -1
- package/dist/hooks/useSlideRight.d.ts +12 -2
- package/dist/hooks/useSlideRight.d.ts.map +1 -1
- package/dist/hooks/useSlideRight.js +46 -85
- package/dist/hooks/useSlideRight.js.map +1 -1
- package/dist/hooks/useSlideUp.d.ts.map +1 -1
- package/dist/hooks/useSlideUp.js +40 -29
- package/dist/hooks/useSlideUp.js.map +1 -1
- package/dist/hooks/useSmartMotion.d.ts +31 -0
- package/dist/hooks/useSmartMotion.d.ts.map +1 -0
- package/dist/hooks/useSmartMotion.js +257 -0
- package/dist/hooks/useSmartMotion.js.map +1 -0
- package/dist/hooks/useSpringMotion.d.ts +14 -24
- package/dist/hooks/useSpringMotion.d.ts.map +1 -1
- package/dist/hooks/useSpringMotion.js +109 -161
- package/dist/hooks/useSpringMotion.js.map +1 -1
- package/dist/hooks/useToggleMotion.d.ts +16 -0
- package/dist/hooks/useToggleMotion.d.ts.map +1 -0
- package/dist/hooks/useToggleMotion.js +53 -0
- package/dist/hooks/useToggleMotion.js.map +1 -0
- package/dist/hooks/useUnifiedMotion.d.ts +51 -0
- package/dist/hooks/useUnifiedMotion.d.ts.map +1 -0
- package/dist/hooks/useUnifiedMotion.js +106 -0
- package/dist/hooks/useUnifiedMotion.js.map +1 -0
- package/dist/index.d.ts +14 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -17
- package/dist/index.js.map +1 -1
- package/dist/managers/MotionStateManager.d.ts +63 -0
- package/dist/managers/MotionStateManager.d.ts.map +1 -0
- package/dist/managers/MotionStateManager.js +159 -0
- package/dist/managers/MotionStateManager.js.map +1 -0
- package/dist/presets/index.d.ts +16 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +120 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/types/common.d.ts +155 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +5 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/index.d.ts +63 -95
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -2
- package/dist/types/index.js.map +1 -1
- package/dist/utils/easing.d.ts +80 -26
- package/dist/utils/easing.d.ts.map +1 -1
- package/dist/utils/easing.js +202 -67
- package/dist/utils/easing.js.map +1 -1
- package/package.json +15 -15
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MotionStateManager - 모션 상태 관리 클래스
|
|
3
|
+
*
|
|
4
|
+
* 상태 충돌 문제 해결을 위해 3가지 상태를 분리:
|
|
5
|
+
* - internalVisibility: 내부 로직 (초기화, 리셋 등)
|
|
6
|
+
* - triggeredVisibility: 외부 트리거 (Intersection Observer)
|
|
7
|
+
* - finalVisibility: 최종 계산된 상태
|
|
8
|
+
*/
|
|
9
|
+
export class MotionStateManager {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.states = new Map();
|
|
12
|
+
this.listeners = new Map();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 요소의 상태를 초기화
|
|
16
|
+
*/
|
|
17
|
+
initializeElement(elementId, config) {
|
|
18
|
+
const initialState = {
|
|
19
|
+
internalVisibility: false, // 초기에 숨김 상태로 시작 (스크롤 리빌용)
|
|
20
|
+
triggeredVisibility: false, // Intersection Observer가 아직 트리거되지 않음
|
|
21
|
+
finalVisibility: false, // 초기에 숨김 상태로 시작
|
|
22
|
+
opacity: 0, // 초기에 투명 상태로 시작
|
|
23
|
+
translateY: 20, // 초기에 아래로 이동된 상태로 시작
|
|
24
|
+
translateX: 0,
|
|
25
|
+
scale: 0.95, // 초기에 약간 축소된 상태로 시작
|
|
26
|
+
rotation: 0,
|
|
27
|
+
isHovered: false,
|
|
28
|
+
isClicked: false,
|
|
29
|
+
isAnimating: false
|
|
30
|
+
};
|
|
31
|
+
this.states.set(elementId, initialState);
|
|
32
|
+
this.computeFinalState(elementId);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 내부 가시성 상태 업데이트 (초기화, 리셋 등)
|
|
36
|
+
*/
|
|
37
|
+
setInternalVisibility(elementId, visible) {
|
|
38
|
+
const state = this.states.get(elementId);
|
|
39
|
+
if (!state)
|
|
40
|
+
return;
|
|
41
|
+
state.internalVisibility = visible;
|
|
42
|
+
this.computeFinalState(elementId);
|
|
43
|
+
this.notifyListeners(elementId, state);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 외부 트리거 가시성 상태 업데이트 (Intersection Observer)
|
|
47
|
+
*/
|
|
48
|
+
setTriggeredVisibility(elementId, visible) {
|
|
49
|
+
const state = this.states.get(elementId);
|
|
50
|
+
if (!state)
|
|
51
|
+
return;
|
|
52
|
+
state.triggeredVisibility = visible;
|
|
53
|
+
this.computeFinalState(elementId);
|
|
54
|
+
this.notifyListeners(elementId, state);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 모션 값 업데이트
|
|
58
|
+
*/
|
|
59
|
+
updateMotionValues(elementId, values) {
|
|
60
|
+
const state = this.states.get(elementId);
|
|
61
|
+
if (!state)
|
|
62
|
+
return;
|
|
63
|
+
Object.assign(state, values);
|
|
64
|
+
this.notifyListeners(elementId, state);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 최종 상태 계산
|
|
68
|
+
*/
|
|
69
|
+
computeFinalState(elementId) {
|
|
70
|
+
const state = this.states.get(elementId);
|
|
71
|
+
if (!state)
|
|
72
|
+
return;
|
|
73
|
+
// 내부 또는 외부 트리거 중 하나라도 true면 최종적으로 보임
|
|
74
|
+
state.finalVisibility = state.internalVisibility || state.triggeredVisibility;
|
|
75
|
+
// 모션 중 상태 업데이트
|
|
76
|
+
state.isAnimating = state.finalVisibility && (state.opacity < 1 || state.translateY > 0);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 현재 상태 조회
|
|
80
|
+
*/
|
|
81
|
+
getState(elementId) {
|
|
82
|
+
return this.states.get(elementId);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 모든 상태 조회
|
|
86
|
+
*/
|
|
87
|
+
getAllStates() {
|
|
88
|
+
return new Map(this.states);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 상태 변경 리스너 등록
|
|
92
|
+
*/
|
|
93
|
+
subscribe(elementId, listener) {
|
|
94
|
+
if (!this.listeners.has(elementId)) {
|
|
95
|
+
this.listeners.set(elementId, new Set());
|
|
96
|
+
}
|
|
97
|
+
this.listeners.get(elementId).add(listener);
|
|
98
|
+
// 구독 해제 함수 반환
|
|
99
|
+
return () => {
|
|
100
|
+
const listeners = this.listeners.get(elementId);
|
|
101
|
+
if (listeners) {
|
|
102
|
+
listeners.delete(listener);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* 리스너들에게 상태 변경 알림
|
|
108
|
+
*/
|
|
109
|
+
notifyListeners(elementId, state) {
|
|
110
|
+
const listeners = this.listeners.get(elementId);
|
|
111
|
+
if (!listeners)
|
|
112
|
+
return;
|
|
113
|
+
listeners.forEach(listener => {
|
|
114
|
+
try {
|
|
115
|
+
listener(state);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
if (process.env.NODE_ENV === 'development') {
|
|
119
|
+
console.error(`MotionStateManager listener error for ${elementId}:`, error);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* 모든 상태 초기화
|
|
126
|
+
*/
|
|
127
|
+
reset() {
|
|
128
|
+
this.states.clear();
|
|
129
|
+
this.listeners.clear();
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* 특정 요소 상태 초기화
|
|
133
|
+
*/
|
|
134
|
+
resetElement(elementId) {
|
|
135
|
+
this.states.delete(elementId);
|
|
136
|
+
this.listeners.delete(elementId);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* 디버그용 상태 출력
|
|
140
|
+
*/
|
|
141
|
+
debug() {
|
|
142
|
+
if (process.env.NODE_ENV === 'development') {
|
|
143
|
+
console.log('MotionStateManager Debug:');
|
|
144
|
+
this.states.forEach((state, elementId) => {
|
|
145
|
+
console.log(` ${elementId}:`, {
|
|
146
|
+
internalVisibility: state.internalVisibility,
|
|
147
|
+
triggeredVisibility: state.triggeredVisibility,
|
|
148
|
+
finalVisibility: state.finalVisibility,
|
|
149
|
+
opacity: state.opacity,
|
|
150
|
+
translateY: state.translateY,
|
|
151
|
+
isAnimating: state.isAnimating
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// 싱글톤 인스턴스
|
|
158
|
+
export const motionStateManager = new MotionStateManager();
|
|
159
|
+
//# sourceMappingURL=MotionStateManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MotionStateManager.js","sourceRoot":"","sources":["../../src/managers/MotionStateManager.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAkB;IAA/B;QACU,WAAM,GAA6B,IAAI,GAAG,EAAE,CAAA;QAC5C,cAAS,GAAmD,IAAI,GAAG,EAAE,CAAA;IA8J/E,CAAC;IA5JC;;OAEG;IACH,iBAAiB,CAAC,SAAiB,EAAE,MAAqB;QACxD,MAAM,YAAY,GAAgB;YAChC,kBAAkB,EAAE,KAAK,EAAE,0BAA0B;YACrD,mBAAmB,EAAE,KAAK,EAAE,qCAAqC;YACjE,eAAe,EAAE,KAAK,EAAE,gBAAgB;YACxC,OAAO,EAAE,CAAC,EAAE,gBAAgB;YAC5B,UAAU,EAAE,EAAE,EAAE,qBAAqB;YACrC,UAAU,EAAE,CAAC;YACb,KAAK,EAAE,IAAI,EAAE,oBAAoB;YACjC,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,KAAK;SACnB,CAAA;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QACxC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;IACnC,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,SAAiB,EAAE,OAAgB;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACxC,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,KAAK,CAAC,kBAAkB,GAAG,OAAO,CAAA;QAClC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;QACjC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IACxC,CAAC;IAED;;OAEG;IACH,sBAAsB,CAAC,SAAiB,EAAE,OAAgB;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACxC,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,KAAK,CAAC,mBAAmB,GAAG,OAAO,CAAA;QACnC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;QACjC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IACxC,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,SAAiB,EAAE,MAA4B;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACxC,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAC5B,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IACxC,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,SAAiB;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACxC,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,qCAAqC;QACrC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,mBAAmB,CAAA;QAE7E,eAAe;QACf,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;IAC1F,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,SAAiB;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IACnC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,SAAiB,EAAE,QAAsC;QACjE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;QAC1C,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAE5C,cAAc;QACd,OAAO,GAAG,EAAE;YACV,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAC/C,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC,CAAA;IACH,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,SAAiB,EAAE,KAAkB;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC/C,IAAI,CAAC,SAAS;YAAE,OAAM;QAEtB,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC3B,IAAI,CAAC;gBACH,QAAQ,CAAC,KAAK,CAAC,CAAA;YACjB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;oBAC3C,OAAO,CAAC,KAAK,CAAC,yCAAyC,SAAS,GAAG,EAAE,KAAK,CAAC,CAAA;gBAC7E,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QACnB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,SAAiB;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC7B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAClC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;YACxC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;gBACvC,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,GAAG,EAAE;oBAC7B,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;oBAC5C,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;oBAC9C,eAAe,EAAE,KAAK,CAAC,eAAe;oBACtC,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;iBAC/B,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;CACF;AAED,WAAW;AACX,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { MotionPreset, PresetConfig, PageType, PageMotionsConfig } from '../types';
|
|
2
|
+
export declare const MOTION_PRESETS: PresetConfig;
|
|
3
|
+
export declare const PAGE_MOTIONS: Record<PageType, PageMotionsConfig>;
|
|
4
|
+
/**
|
|
5
|
+
* 프리셋과 커스텀 설정을 병합
|
|
6
|
+
*/
|
|
7
|
+
export declare function mergeWithPreset(preset: MotionPreset, custom?: Partial<MotionPreset>): MotionPreset;
|
|
8
|
+
/**
|
|
9
|
+
* 페이지 타입으로 프리셋 가져오기
|
|
10
|
+
*/
|
|
11
|
+
export declare function getPagePreset(pageType: PageType): PageMotionsConfig;
|
|
12
|
+
/**
|
|
13
|
+
* 모션 타입으로 기본 프리셋 가져오기
|
|
14
|
+
*/
|
|
15
|
+
export declare function getMotionPreset(type: string): MotionPreset;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/presets/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAMvF,eAAO,MAAM,cAAc,EAAE,YA2C5B,CAAA;AAMD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CA4C5D,CAAA;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,YAAY,EACpB,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,GACjC,YAAY,CAKd;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,iBAAiB,CAEnE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAE1D"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
// ========================================
|
|
2
|
+
// HUA Motion SDK - Preset System
|
|
3
|
+
// ========================================
|
|
4
|
+
// ========================================
|
|
5
|
+
// 기본 모션 프리셋
|
|
6
|
+
// ========================================
|
|
7
|
+
export const MOTION_PRESETS = {
|
|
8
|
+
hero: {
|
|
9
|
+
entrance: 'fadeIn',
|
|
10
|
+
delay: 200,
|
|
11
|
+
duration: 800,
|
|
12
|
+
hover: false,
|
|
13
|
+
click: false
|
|
14
|
+
},
|
|
15
|
+
title: {
|
|
16
|
+
entrance: 'slideUp',
|
|
17
|
+
delay: 400,
|
|
18
|
+
duration: 700,
|
|
19
|
+
hover: false,
|
|
20
|
+
click: false
|
|
21
|
+
},
|
|
22
|
+
button: {
|
|
23
|
+
entrance: 'scaleIn',
|
|
24
|
+
delay: 600,
|
|
25
|
+
duration: 300,
|
|
26
|
+
hover: true,
|
|
27
|
+
click: true
|
|
28
|
+
},
|
|
29
|
+
card: {
|
|
30
|
+
entrance: 'slideUp',
|
|
31
|
+
delay: 800,
|
|
32
|
+
duration: 500,
|
|
33
|
+
hover: true,
|
|
34
|
+
click: false
|
|
35
|
+
},
|
|
36
|
+
text: {
|
|
37
|
+
entrance: 'fadeIn',
|
|
38
|
+
delay: 200,
|
|
39
|
+
duration: 600,
|
|
40
|
+
hover: false,
|
|
41
|
+
click: false
|
|
42
|
+
},
|
|
43
|
+
image: {
|
|
44
|
+
entrance: 'scaleIn',
|
|
45
|
+
delay: 400,
|
|
46
|
+
duration: 600,
|
|
47
|
+
hover: true,
|
|
48
|
+
click: false
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
// ========================================
|
|
52
|
+
// 페이지별 프리셋 (1단계: useSimplePageMotion)
|
|
53
|
+
// ========================================
|
|
54
|
+
export const PAGE_MOTIONS = {
|
|
55
|
+
// 홈페이지
|
|
56
|
+
home: {
|
|
57
|
+
hero: { type: 'hero' },
|
|
58
|
+
title: { type: 'title' },
|
|
59
|
+
description: { type: 'text' },
|
|
60
|
+
cta: { type: 'button' },
|
|
61
|
+
feature1: { type: 'card' },
|
|
62
|
+
feature2: { type: 'card' },
|
|
63
|
+
feature3: { type: 'card' }
|
|
64
|
+
},
|
|
65
|
+
// 대시보드
|
|
66
|
+
dashboard: {
|
|
67
|
+
header: { type: 'hero' },
|
|
68
|
+
sidebar: { type: 'card', entrance: 'slideLeft' },
|
|
69
|
+
main: { type: 'text', entrance: 'fadeIn' },
|
|
70
|
+
card1: { type: 'card' },
|
|
71
|
+
card2: { type: 'card' },
|
|
72
|
+
card3: { type: 'card' },
|
|
73
|
+
chart: { type: 'image' }
|
|
74
|
+
},
|
|
75
|
+
// 제품 페이지
|
|
76
|
+
product: {
|
|
77
|
+
hero: { type: 'hero' },
|
|
78
|
+
title: { type: 'title' },
|
|
79
|
+
image: { type: 'image' },
|
|
80
|
+
description: { type: 'text' },
|
|
81
|
+
price: { type: 'text' },
|
|
82
|
+
buyButton: { type: 'button' },
|
|
83
|
+
features: { type: 'card' }
|
|
84
|
+
},
|
|
85
|
+
// 블로그
|
|
86
|
+
blog: {
|
|
87
|
+
header: { type: 'hero' },
|
|
88
|
+
title: { type: 'title' },
|
|
89
|
+
content: { type: 'text' },
|
|
90
|
+
sidebar: { type: 'card', entrance: 'slideRight' },
|
|
91
|
+
related1: { type: 'card' },
|
|
92
|
+
related2: { type: 'card' },
|
|
93
|
+
related3: { type: 'card' }
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
// ========================================
|
|
97
|
+
// 프리셋 유틸리티 함수
|
|
98
|
+
// ========================================
|
|
99
|
+
/**
|
|
100
|
+
* 프리셋과 커스텀 설정을 병합
|
|
101
|
+
*/
|
|
102
|
+
export function mergeWithPreset(preset, custom = {}) {
|
|
103
|
+
return {
|
|
104
|
+
...preset,
|
|
105
|
+
...custom
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* 페이지 타입으로 프리셋 가져오기
|
|
110
|
+
*/
|
|
111
|
+
export function getPagePreset(pageType) {
|
|
112
|
+
return PAGE_MOTIONS[pageType];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 모션 타입으로 기본 프리셋 가져오기
|
|
116
|
+
*/
|
|
117
|
+
export function getMotionPreset(type) {
|
|
118
|
+
return MOTION_PRESETS[type] || MOTION_PRESETS.text;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/presets/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
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 요소 참조 (React 19 호환) */
|
|
34
|
+
ref: React.RefObject<T | null>;
|
|
35
|
+
/** 요소가 화면에 보이는지 여부 */
|
|
36
|
+
isVisible: boolean;
|
|
37
|
+
/** 모션이 진행 중인지 여부 */
|
|
38
|
+
isAnimating: boolean;
|
|
39
|
+
/** 적용할 CSS 스타일 (React 19 호환) - useFadeIn 등에서는 항상 반환됨 */
|
|
40
|
+
style: MotionStyle;
|
|
41
|
+
/** 적용할 CSS 클래스명 */
|
|
42
|
+
className?: string;
|
|
43
|
+
/** 모션 진행률 (0-1) - useFadeIn 등에서는 항상 반환됨 */
|
|
44
|
+
progress: number;
|
|
45
|
+
/** 모션 시작 함수 - useFadeIn 등에서는 항상 반환됨 */
|
|
46
|
+
start: () => void;
|
|
47
|
+
/** 모션 리셋 함수 - useFadeIn 등에서는 항상 반환됨 */
|
|
48
|
+
reset: () => void;
|
|
49
|
+
/** 모션 중단 함수 - useFadeIn 등에서는 항상 반환됨 */
|
|
50
|
+
stop: () => void;
|
|
51
|
+
/** 모션 일시정지 함수 - 일부 훅에서만 제공 */
|
|
52
|
+
pause?: () => void;
|
|
53
|
+
/** 모션 재개 함수 - 일부 훅에서만 제공 */
|
|
54
|
+
resume?: () => void;
|
|
55
|
+
}
|
|
56
|
+
export interface InteractionReturn<T extends MotionElement = HTMLDivElement> extends BaseMotionReturn<T> {
|
|
57
|
+
/** 가시성 토글 함수 */
|
|
58
|
+
toggle?: () => void;
|
|
59
|
+
/** 표시 함수 */
|
|
60
|
+
show?: () => void;
|
|
61
|
+
/** 숨김 함수 */
|
|
62
|
+
hide?: () => void;
|
|
63
|
+
}
|
|
64
|
+
export interface FadeInOptions extends BaseMotionOptions {
|
|
65
|
+
/** 초기 투명도 */
|
|
66
|
+
initialOpacity?: number;
|
|
67
|
+
/** 목표 투명도 */
|
|
68
|
+
targetOpacity?: number;
|
|
69
|
+
}
|
|
70
|
+
export interface SlideOptions extends BaseMotionOptions {
|
|
71
|
+
/** 슬라이드 방향 */
|
|
72
|
+
direction?: 'up' | 'down' | 'left' | 'right';
|
|
73
|
+
/** 슬라이드 거리 (px) */
|
|
74
|
+
distance?: number;
|
|
75
|
+
}
|
|
76
|
+
export interface ScaleOptions extends BaseMotionOptions {
|
|
77
|
+
/** 초기 스케일 */
|
|
78
|
+
initialScale?: number;
|
|
79
|
+
/** 목표 스케일 */
|
|
80
|
+
targetScale?: number;
|
|
81
|
+
}
|
|
82
|
+
export interface BounceOptions extends BaseMotionOptions {
|
|
83
|
+
/** 바운스 강도 */
|
|
84
|
+
intensity?: number;
|
|
85
|
+
/** 바운스 횟수 */
|
|
86
|
+
bounces?: number;
|
|
87
|
+
}
|
|
88
|
+
export interface PulseOptions extends BaseMotionOptions {
|
|
89
|
+
/** 펄스 강도 */
|
|
90
|
+
intensity?: number;
|
|
91
|
+
/** 반복 횟수 (-1 = 무한) */
|
|
92
|
+
repeatCount?: number;
|
|
93
|
+
/** 반복 간격 (ms) */
|
|
94
|
+
repeatDelay?: number;
|
|
95
|
+
}
|
|
96
|
+
export interface SpringOptions extends BaseMotionOptions {
|
|
97
|
+
/** 스프링 질량 */
|
|
98
|
+
mass?: number;
|
|
99
|
+
/** 스프링 강성 */
|
|
100
|
+
stiffness?: number;
|
|
101
|
+
/** 스프링 감쇠 */
|
|
102
|
+
damping?: number;
|
|
103
|
+
/** 정지 임계값 */
|
|
104
|
+
restDelta?: number;
|
|
105
|
+
/** 정지 속도 */
|
|
106
|
+
restSpeed?: number;
|
|
107
|
+
}
|
|
108
|
+
export interface GestureOptions extends BaseMotionOptions {
|
|
109
|
+
/** 호버 제스처 활성화 */
|
|
110
|
+
hover?: boolean;
|
|
111
|
+
/** 드래그 제스처 활성화 */
|
|
112
|
+
drag?: boolean;
|
|
113
|
+
/** 핀치 제스처 활성화 */
|
|
114
|
+
pinch?: boolean;
|
|
115
|
+
/** 스와이프 제스처 활성화 */
|
|
116
|
+
swipe?: boolean;
|
|
117
|
+
/** 틸트 제스처 활성화 */
|
|
118
|
+
tilt?: boolean;
|
|
119
|
+
}
|
|
120
|
+
export interface OrchestrationOptions extends BaseMotionOptions {
|
|
121
|
+
/** 모션 시퀀스 타입 */
|
|
122
|
+
sequence?: 'sequential' | 'parallel' | 'stagger';
|
|
123
|
+
/** 스태거 지연 시간 */
|
|
124
|
+
staggerDelay?: number;
|
|
125
|
+
/** 스태거 지속 시간 */
|
|
126
|
+
staggerDuration?: number;
|
|
127
|
+
}
|
|
128
|
+
export type MotionDirection = 'up' | 'down' | 'left' | 'right';
|
|
129
|
+
export type MotionEasing = 'linear' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'bounce' | 'elastic';
|
|
130
|
+
export type MotionSequence = 'sequential' | 'parallel' | 'stagger';
|
|
131
|
+
export type MotionTrigger = 'scroll' | 'click' | 'hover' | 'focus' | 'auto';
|
|
132
|
+
export type MotionCallback = () => void;
|
|
133
|
+
export type MotionProgressCallback = (progress: number) => void;
|
|
134
|
+
export type MotionStateCallback<T extends MotionElement = HTMLDivElement> = (state: BaseMotionReturn<T>) => void;
|
|
135
|
+
export interface PerformanceMetrics {
|
|
136
|
+
/** 모션 시작 시간 */
|
|
137
|
+
startTime: number;
|
|
138
|
+
/** 모션 종료 시간 */
|
|
139
|
+
endTime?: number;
|
|
140
|
+
/** 총 지속 시간 */
|
|
141
|
+
duration: number;
|
|
142
|
+
/** FPS */
|
|
143
|
+
fps: number;
|
|
144
|
+
/** 메모리 사용량 */
|
|
145
|
+
memoryUsage?: number;
|
|
146
|
+
}
|
|
147
|
+
export interface MotionConfig {
|
|
148
|
+
/** 성능 모니터링 활성화 */
|
|
149
|
+
enablePerformanceMonitoring?: boolean;
|
|
150
|
+
/** 디버그 모드 활성화 */
|
|
151
|
+
debug?: boolean;
|
|
152
|
+
/** 로그 레벨 */
|
|
153
|
+
logLevel?: 'none' | 'error' | 'warn' | 'info' | 'debug';
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,0CAA0C;AAC1C,2CAA2C"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,109 +1,77 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
3
|
-
export type
|
|
4
|
-
export type
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/** 모션 시작 지연 시간 (ms) */
|
|
1
|
+
import { BaseMotionOptions, BaseMotionReturn } from './common';
|
|
2
|
+
export * from './common';
|
|
3
|
+
export type PageType = 'home' | 'dashboard' | 'product' | 'blog';
|
|
4
|
+
export type MotionType = 'hero' | 'title' | 'button' | 'card' | 'text' | 'image';
|
|
5
|
+
export type EntranceType = 'fadeIn' | 'slideUp' | 'slideLeft' | 'slideRight' | 'scaleIn' | 'bounceIn';
|
|
6
|
+
export interface PageMotionElement {
|
|
7
|
+
type: MotionType;
|
|
8
|
+
entrance?: EntranceType;
|
|
9
|
+
hover?: boolean;
|
|
10
|
+
click?: boolean;
|
|
12
11
|
delay?: number;
|
|
13
|
-
/** 모션 지속 시간 (ms) */
|
|
14
12
|
duration?: number;
|
|
15
|
-
/** Intersection Observer 임계값 (0-1) */
|
|
16
13
|
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
14
|
}
|
|
32
|
-
export interface
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
15
|
+
export interface PageMotionsConfig {
|
|
16
|
+
[elementId: string]: PageMotionElement;
|
|
17
|
+
}
|
|
18
|
+
export interface MotionState {
|
|
19
|
+
internalVisibility: boolean;
|
|
20
|
+
triggeredVisibility: boolean;
|
|
21
|
+
finalVisibility: boolean;
|
|
22
|
+
opacity: number;
|
|
23
|
+
translateY: number;
|
|
24
|
+
translateX: number;
|
|
25
|
+
scale: number;
|
|
26
|
+
rotation: number;
|
|
27
|
+
isHovered: boolean;
|
|
28
|
+
isClicked: boolean;
|
|
38
29
|
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
30
|
}
|
|
58
|
-
export interface
|
|
59
|
-
|
|
31
|
+
export interface MotionRef<T extends HTMLElement = HTMLElement> {
|
|
32
|
+
ref: React.RefObject<T | null>;
|
|
33
|
+
style: React.CSSProperties;
|
|
60
34
|
isVisible: boolean;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
35
|
+
isHovered: boolean;
|
|
36
|
+
isClicked: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface SmartMotionOptions<T extends HTMLElement = HTMLElement> extends BaseMotionOptions {
|
|
39
|
+
type?: MotionType;
|
|
40
|
+
entrance?: EntranceType;
|
|
41
|
+
hover?: boolean;
|
|
42
|
+
click?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export interface SmartMotionReturn<T extends HTMLElement = HTMLElement> extends BaseMotionReturn<T> {
|
|
45
|
+
isHovered: boolean;
|
|
46
|
+
isClicked: boolean;
|
|
72
47
|
}
|
|
73
|
-
export interface
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
48
|
+
export interface MotionPreset {
|
|
49
|
+
entrance: EntranceType;
|
|
50
|
+
delay: number;
|
|
51
|
+
duration: number;
|
|
52
|
+
hover: boolean;
|
|
53
|
+
click: boolean;
|
|
78
54
|
}
|
|
79
|
-
export interface
|
|
80
|
-
|
|
81
|
-
direction?: 'up' | 'down' | 'left' | 'right';
|
|
82
|
-
/** 슬라이드 거리 (px) */
|
|
83
|
-
distance?: number;
|
|
55
|
+
export interface PresetConfig {
|
|
56
|
+
[key: string]: MotionPreset;
|
|
84
57
|
}
|
|
85
|
-
export interface
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
58
|
+
export interface SpringConfig {
|
|
59
|
+
mass?: number;
|
|
60
|
+
stiffness?: number;
|
|
61
|
+
damping?: number;
|
|
62
|
+
restDelta?: number;
|
|
63
|
+
restSpeed?: number;
|
|
90
64
|
}
|
|
91
|
-
export interface
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
65
|
+
export interface GestureConfig {
|
|
66
|
+
hover?: boolean;
|
|
67
|
+
drag?: boolean;
|
|
68
|
+
pinch?: boolean;
|
|
69
|
+
swipe?: boolean;
|
|
70
|
+
tilt?: boolean;
|
|
96
71
|
}
|
|
97
|
-
export interface
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
pulseCount?: number;
|
|
72
|
+
export interface OrchestrationConfig {
|
|
73
|
+
sequence?: 'sequential' | 'parallel' | 'stagger';
|
|
74
|
+
staggerDelay?: number;
|
|
75
|
+
staggerDuration?: number;
|
|
102
76
|
}
|
|
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
77
|
//# sourceMappingURL=index.d.ts.map
|