@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.
Files changed (130) hide show
  1. package/README.md +16 -19
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/core/MotionEngine.d.ts +111 -0
  4. package/dist/core/MotionEngine.d.ts.map +1 -0
  5. package/dist/core/MotionEngine.js +206 -0
  6. package/dist/core/MotionEngine.js.map +1 -0
  7. package/dist/core/PerformanceOptimizer.d.ts +124 -0
  8. package/dist/core/PerformanceOptimizer.d.ts.map +1 -0
  9. package/dist/core/PerformanceOptimizer.js +334 -0
  10. package/dist/core/PerformanceOptimizer.js.map +1 -0
  11. package/dist/core/TransitionEffects.d.ts +76 -0
  12. package/dist/core/TransitionEffects.d.ts.map +1 -0
  13. package/dist/core/TransitionEffects.js +321 -0
  14. package/dist/core/TransitionEffects.js.map +1 -0
  15. package/dist/hooks/useBounceIn.d.ts +11 -2
  16. package/dist/hooks/useBounceIn.d.ts.map +1 -1
  17. package/dist/hooks/useBounceIn.js +48 -114
  18. package/dist/hooks/useBounceIn.js.map +1 -1
  19. package/dist/hooks/useClickToggle.d.ts +28 -13
  20. package/dist/hooks/useClickToggle.d.ts.map +1 -1
  21. package/dist/hooks/useClickToggle.js +125 -90
  22. package/dist/hooks/useClickToggle.js.map +1 -1
  23. package/dist/hooks/useFadeIn.d.ts +0 -14
  24. package/dist/hooks/useFadeIn.d.ts.map +1 -1
  25. package/dist/hooks/useFadeIn.js +17 -43
  26. package/dist/hooks/useFadeIn.js.map +1 -1
  27. package/dist/hooks/useFocusToggle.d.ts +28 -13
  28. package/dist/hooks/useFocusToggle.d.ts.map +1 -1
  29. package/dist/hooks/useFocusToggle.js +125 -87
  30. package/dist/hooks/useFocusToggle.js.map +1 -1
  31. package/dist/hooks/useGesture.d.ts +45 -0
  32. package/dist/hooks/useGesture.d.ts.map +1 -0
  33. package/dist/hooks/useGesture.js +274 -0
  34. package/dist/hooks/useGesture.js.map +1 -0
  35. package/dist/hooks/useGestureMotion.d.ts +26 -0
  36. package/dist/hooks/useGestureMotion.d.ts.map +1 -0
  37. package/dist/hooks/useGestureMotion.js +167 -0
  38. package/dist/hooks/useGestureMotion.js.map +1 -0
  39. package/dist/hooks/useGradient.d.ts +10 -21
  40. package/dist/hooks/useGradient.d.ts.map +1 -1
  41. package/dist/hooks/useGradient.js +70 -127
  42. package/dist/hooks/useGradient.js.map +1 -1
  43. package/dist/hooks/useHoverMotion.d.ts +4 -14
  44. package/dist/hooks/useHoverMotion.d.ts.map +1 -1
  45. package/dist/hooks/useHoverMotion.js +31 -82
  46. package/dist/hooks/useHoverMotion.js.map +1 -1
  47. package/dist/hooks/useMotionState.d.ts +27 -24
  48. package/dist/hooks/useMotionState.d.ts.map +1 -1
  49. package/dist/hooks/useMotionState.js +186 -103
  50. package/dist/hooks/useMotionState.js.map +1 -1
  51. package/dist/hooks/usePageMotions.d.ts +17 -0
  52. package/dist/hooks/usePageMotions.d.ts.map +1 -0
  53. package/dist/hooks/usePageMotions.js +352 -0
  54. package/dist/hooks/usePageMotions.js.map +1 -0
  55. package/dist/hooks/usePulse.d.ts +8 -1
  56. package/dist/hooks/usePulse.d.ts.map +1 -1
  57. package/dist/hooks/usePulse.js +75 -101
  58. package/dist/hooks/usePulse.js.map +1 -1
  59. package/dist/hooks/useRepeat.d.ts +17 -22
  60. package/dist/hooks/useRepeat.d.ts.map +1 -1
  61. package/dist/hooks/useRepeat.js +48 -162
  62. package/dist/hooks/useRepeat.js.map +1 -1
  63. package/dist/hooks/useScaleIn.d.ts +12 -2
  64. package/dist/hooks/useScaleIn.d.ts.map +1 -1
  65. package/dist/hooks/useScaleIn.js +46 -85
  66. package/dist/hooks/useScaleIn.js.map +1 -1
  67. package/dist/hooks/useScrollProgress.d.ts +8 -18
  68. package/dist/hooks/useScrollProgress.d.ts.map +1 -1
  69. package/dist/hooks/useScrollProgress.js +28 -130
  70. package/dist/hooks/useScrollProgress.js.map +1 -1
  71. package/dist/hooks/useScrollReveal.d.ts +12 -15
  72. package/dist/hooks/useScrollReveal.d.ts.map +1 -1
  73. package/dist/hooks/useScrollReveal.js +93 -72
  74. package/dist/hooks/useScrollReveal.js.map +1 -1
  75. package/dist/hooks/useSimplePageMotion.d.ts +29 -0
  76. package/dist/hooks/useSimplePageMotion.d.ts.map +1 -0
  77. package/dist/hooks/useSimplePageMotion.js +145 -0
  78. package/dist/hooks/useSimplePageMotion.js.map +1 -0
  79. package/dist/hooks/useSlideLeft.d.ts +12 -2
  80. package/dist/hooks/useSlideLeft.d.ts.map +1 -1
  81. package/dist/hooks/useSlideLeft.js +46 -85
  82. package/dist/hooks/useSlideLeft.js.map +1 -1
  83. package/dist/hooks/useSlideRight.d.ts +12 -2
  84. package/dist/hooks/useSlideRight.d.ts.map +1 -1
  85. package/dist/hooks/useSlideRight.js +46 -85
  86. package/dist/hooks/useSlideRight.js.map +1 -1
  87. package/dist/hooks/useSlideUp.d.ts.map +1 -1
  88. package/dist/hooks/useSlideUp.js +40 -29
  89. package/dist/hooks/useSlideUp.js.map +1 -1
  90. package/dist/hooks/useSmartMotion.d.ts +31 -0
  91. package/dist/hooks/useSmartMotion.d.ts.map +1 -0
  92. package/dist/hooks/useSmartMotion.js +257 -0
  93. package/dist/hooks/useSmartMotion.js.map +1 -0
  94. package/dist/hooks/useSpringMotion.d.ts +14 -24
  95. package/dist/hooks/useSpringMotion.d.ts.map +1 -1
  96. package/dist/hooks/useSpringMotion.js +109 -161
  97. package/dist/hooks/useSpringMotion.js.map +1 -1
  98. package/dist/hooks/useToggleMotion.d.ts +16 -0
  99. package/dist/hooks/useToggleMotion.d.ts.map +1 -0
  100. package/dist/hooks/useToggleMotion.js +53 -0
  101. package/dist/hooks/useToggleMotion.js.map +1 -0
  102. package/dist/hooks/useUnifiedMotion.d.ts +51 -0
  103. package/dist/hooks/useUnifiedMotion.d.ts.map +1 -0
  104. package/dist/hooks/useUnifiedMotion.js +106 -0
  105. package/dist/hooks/useUnifiedMotion.js.map +1 -0
  106. package/dist/index.d.ts +14 -10
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +37 -17
  109. package/dist/index.js.map +1 -1
  110. package/dist/managers/MotionStateManager.d.ts +63 -0
  111. package/dist/managers/MotionStateManager.d.ts.map +1 -0
  112. package/dist/managers/MotionStateManager.js +159 -0
  113. package/dist/managers/MotionStateManager.js.map +1 -0
  114. package/dist/presets/index.d.ts +16 -0
  115. package/dist/presets/index.d.ts.map +1 -0
  116. package/dist/presets/index.js +120 -0
  117. package/dist/presets/index.js.map +1 -0
  118. package/dist/types/common.d.ts +155 -0
  119. package/dist/types/common.d.ts.map +1 -0
  120. package/dist/types/common.js +5 -0
  121. package/dist/types/common.js.map +1 -0
  122. package/dist/types/index.d.ts +63 -95
  123. package/dist/types/index.d.ts.map +1 -1
  124. package/dist/types/index.js +2 -2
  125. package/dist/types/index.js.map +1 -1
  126. package/dist/utils/easing.d.ts +80 -26
  127. package/dist/utils/easing.d.ts.map +1 -1
  128. package/dist/utils/easing.js +202 -67
  129. package/dist/utils/easing.js.map +1 -1
  130. package/package.json +15 -15
@@ -0,0 +1,206 @@
1
+ /**
2
+ * HUA Motion Core - 의존성 제로 모션 엔진
3
+ *
4
+ * 순수 JavaScript로 구현된 고성능 모션 엔진
5
+ * GPU 가속, 레이어 분리, 성능 최적화 포함
6
+ */
7
+ export class MotionEngine {
8
+ constructor() {
9
+ this.motions = new Map();
10
+ this.isRunning = false;
11
+ this.animationFrameId = null;
12
+ }
13
+ /**
14
+ * 모션 시작
15
+ */
16
+ motion(element, motionFrames, options) {
17
+ return new Promise((resolve) => {
18
+ const motionId = this.generateMotionId();
19
+ // GPU 가속 활성화
20
+ this.enableGPUAcceleration(element);
21
+ // 레이어 분리
22
+ this.createLayer(element);
23
+ const motion = {
24
+ id: motionId,
25
+ element,
26
+ isRunning: true,
27
+ isPaused: false,
28
+ currentProgress: 0,
29
+ startTime: Date.now() + (options.delay || 0),
30
+ pauseTime: 0,
31
+ options: {
32
+ ...options,
33
+ onComplete: () => {
34
+ options.onComplete?.();
35
+ this.motions.delete(motionId);
36
+ }
37
+ }
38
+ };
39
+ this.motions.set(motionId, motion);
40
+ if (!this.isRunning) {
41
+ this.startAnimationLoop();
42
+ }
43
+ options.onStart?.();
44
+ // motionId를 즉시 반환
45
+ resolve(motionId);
46
+ });
47
+ }
48
+ /**
49
+ * 모션 중지
50
+ */
51
+ stop(motionId) {
52
+ const motion = this.motions.get(motionId);
53
+ if (motion) {
54
+ motion.isRunning = false;
55
+ motion.options.onCancel?.();
56
+ this.motions.delete(motionId);
57
+ }
58
+ }
59
+ /**
60
+ * 모션 일시정지
61
+ */
62
+ pause(motionId) {
63
+ const motion = this.motions.get(motionId);
64
+ if (motion && motion.isRunning && !motion.isPaused) {
65
+ motion.isPaused = true;
66
+ motion.pauseTime = Date.now();
67
+ }
68
+ }
69
+ /**
70
+ * 모션 재개
71
+ */
72
+ resume(motionId) {
73
+ const motion = this.motions.get(motionId);
74
+ if (motion && motion.isPaused) {
75
+ motion.isPaused = false;
76
+ if (motion.pauseTime > 0) {
77
+ motion.startTime += Date.now() - motion.pauseTime;
78
+ }
79
+ }
80
+ }
81
+ /**
82
+ * 모든 모션 중지
83
+ */
84
+ stopAll() {
85
+ this.motions.forEach((motion) => {
86
+ motion.isRunning = false;
87
+ motion.options.onCancel?.();
88
+ });
89
+ this.motions.clear();
90
+ this.stopAnimationLoop();
91
+ }
92
+ /**
93
+ * 모션 상태 확인
94
+ */
95
+ getMotion(motionId) {
96
+ return this.motions.get(motionId);
97
+ }
98
+ /**
99
+ * 실행 중인 모션 수
100
+ */
101
+ getActiveMotionCount() {
102
+ return this.motions.size;
103
+ }
104
+ /**
105
+ * 애니메이션 루프 시작
106
+ */
107
+ startAnimationLoop() {
108
+ if (this.isRunning)
109
+ return;
110
+ this.isRunning = true;
111
+ this.animate();
112
+ }
113
+ /**
114
+ * 애니메이션 루프 중지
115
+ */
116
+ stopAnimationLoop() {
117
+ if (this.animationFrameId) {
118
+ cancelAnimationFrame(this.animationFrameId);
119
+ this.animationFrameId = null;
120
+ }
121
+ this.isRunning = false;
122
+ }
123
+ /**
124
+ * 메인 애니메이션 루프
125
+ */
126
+ animate() {
127
+ if (!this.isRunning || this.motions.size === 0) {
128
+ this.stopAnimationLoop();
129
+ return;
130
+ }
131
+ const currentTime = Date.now();
132
+ const completedMotions = [];
133
+ this.motions.forEach((motion) => {
134
+ if (!motion.isRunning || motion.isPaused)
135
+ return;
136
+ const elapsed = currentTime - motion.startTime;
137
+ if (elapsed < 0)
138
+ return; // 아직 시작하지 않음
139
+ const progress = Math.min(elapsed / motion.options.duration, 1);
140
+ const easedProgress = motion.options.easing(progress);
141
+ motion.currentProgress = easedProgress;
142
+ // 모션 프레임 적용
143
+ this.applyMotionFrame(motion.element, easedProgress);
144
+ // 콜백 호출
145
+ motion.options.onUpdate?.(easedProgress);
146
+ // 완료된 모션 체크
147
+ if (progress >= 1) {
148
+ completedMotions.push(motion.id);
149
+ motion.isRunning = false;
150
+ motion.options.onComplete?.();
151
+ }
152
+ });
153
+ // 완료된 모션 제거
154
+ completedMotions.forEach(id => this.motions.delete(id));
155
+ // 다음 프레임 요청
156
+ this.animationFrameId = requestAnimationFrame(() => this.animate());
157
+ }
158
+ /**
159
+ * 모션 프레임 적용
160
+ */
161
+ applyMotionFrame(element, progress) {
162
+ // GPU 가속을 위한 transform 사용
163
+ const transforms = [];
164
+ // 기본 transform 속성들
165
+ if (element.style.transform) {
166
+ transforms.push(element.style.transform);
167
+ }
168
+ // progress에 따른 transform 계산
169
+ // 여기서는 기본적인 예시만 구현
170
+ // 실제로는 motionFrames를 받아서 처리해야 함
171
+ element.style.transform = transforms.join(' ');
172
+ }
173
+ /**
174
+ * GPU 가속 활성화
175
+ */
176
+ enableGPUAcceleration(element) {
177
+ // will-change 속성 설정으로 GPU 가속 활성화
178
+ element.style.willChange = 'transform, opacity';
179
+ // transform3d로 강제 GPU 가속
180
+ element.style.transform = 'translateZ(0)';
181
+ }
182
+ /**
183
+ * 레이어 분리
184
+ */
185
+ createLayer(element) {
186
+ // 새로운 레이어 생성으로 성능 향상
187
+ element.style.transform = 'translateZ(0)';
188
+ element.style.backfaceVisibility = 'hidden';
189
+ }
190
+ /**
191
+ * 고유 모션 ID 생성
192
+ */
193
+ generateMotionId() {
194
+ return `motion_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
195
+ }
196
+ /**
197
+ * 정리
198
+ */
199
+ destroy() {
200
+ this.stopAll();
201
+ this.stopAnimationLoop();
202
+ }
203
+ }
204
+ // 싱글톤 인스턴스
205
+ export const motionEngine = new MotionEngine();
206
+ //# sourceMappingURL=MotionEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MotionEngine.js","sourceRoot":"","sources":["../../src/core/MotionEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * HUA Motion Core - 성능 최적화 시스템
3
+ *
4
+ * GPU 가속, 레이어 관리, 메모리 최적화를 위한 유틸리티들
5
+ * 브라우저별 최적화 전략 포함
6
+ */
7
+ export interface PerformanceMetrics {
8
+ fps: number;
9
+ memoryUsage?: number;
10
+ gpuTime?: number;
11
+ cpuTime?: number;
12
+ layerCount: number;
13
+ activeMotions: number;
14
+ }
15
+ export interface OptimizationConfig {
16
+ enableGPUAcceleration: boolean;
17
+ enableLayerSeparation: boolean;
18
+ enableMemoryOptimization: boolean;
19
+ targetFPS: number;
20
+ maxLayerCount: number;
21
+ memoryThreshold: number;
22
+ }
23
+ export declare class PerformanceOptimizer {
24
+ private static instance;
25
+ private config;
26
+ private performanceObserver;
27
+ private metrics;
28
+ private layerRegistry;
29
+ private isMonitoring;
30
+ constructor();
31
+ static getInstance(): PerformanceOptimizer;
32
+ /**
33
+ * 성능 모니터링 초기화
34
+ */
35
+ private initializePerformanceMonitoring;
36
+ /**
37
+ * 성능 메트릭 업데이트
38
+ */
39
+ private updatePerformanceMetrics;
40
+ /**
41
+ * FPS 계산
42
+ */
43
+ private calculateFPS;
44
+ /**
45
+ * GPU 가속 활성화
46
+ */
47
+ enableGPUAcceleration(element: HTMLElement): void;
48
+ /**
49
+ * 레이어 분리 및 최적화
50
+ */
51
+ createOptimizedLayer(element: HTMLElement): void;
52
+ /**
53
+ * 레이어 등록
54
+ */
55
+ private registerLayer;
56
+ /**
57
+ * 레이어 제거
58
+ */
59
+ removeLayer(element: HTMLElement): void;
60
+ /**
61
+ * 레이어 수 제한 체크
62
+ */
63
+ private checkLayerLimit;
64
+ /**
65
+ * 오래된 레이어 정리
66
+ */
67
+ private cleanupOldLayers;
68
+ /**
69
+ * 메모리 사용량 체크
70
+ */
71
+ private checkMemoryUsage;
72
+ /**
73
+ * 메모리 정리
74
+ */
75
+ private cleanupMemory;
76
+ /**
77
+ * 성능 최적화 설정 업데이트
78
+ */
79
+ updateConfig(newConfig: Partial<OptimizationConfig>): void;
80
+ /**
81
+ * 모든 GPU 가속 비활성화
82
+ */
83
+ private disableAllGPUAcceleration;
84
+ /**
85
+ * 모든 레이어 비활성화
86
+ */
87
+ private disableAllLayers;
88
+ /**
89
+ * 성능 메트릭 가져오기
90
+ */
91
+ getMetrics(): PerformanceMetrics;
92
+ /**
93
+ * 성능 모니터링 시작
94
+ */
95
+ startMonitoring(): void;
96
+ /**
97
+ * 성능 모니터링 중지
98
+ */
99
+ stopMonitoring(): void;
100
+ /**
101
+ * 메트릭 업데이트
102
+ */
103
+ private updateMetrics;
104
+ /**
105
+ * 성능 리포트 생성
106
+ */
107
+ generateReport(): string;
108
+ /**
109
+ * 바이트 단위 포맷팅
110
+ */
111
+ private formatBytes;
112
+ /**
113
+ * 성능 최적화 권장사항
114
+ */
115
+ getOptimizationRecommendations(): string[];
116
+ /**
117
+ * 정리
118
+ */
119
+ destroy(): void;
120
+ private lastFrameTime?;
121
+ private monitoringInterval?;
122
+ }
123
+ export declare const performanceOptimizer: PerformanceOptimizer;
124
+ //# sourceMappingURL=PerformanceOptimizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PerformanceOptimizer.d.ts","sourceRoot":"","sources":["../../src/core/PerformanceOptimizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,qBAAqB,EAAE,OAAO,CAAA;IAC9B,qBAAqB,EAAE,OAAO,CAAA;IAC9B,wBAAwB,EAAE,OAAO,CAAA;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;IAC7C,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,mBAAmB,CAAmC;IAC9D,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,YAAY,CAAQ;;IAqB5B,MAAM,CAAC,WAAW,IAAI,oBAAoB;IAO1C;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAiBvC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAShC;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAwBjD;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAsBhD;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAcvC;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAa1D;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAOjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,UAAU,IAAI,kBAAkB;IAIhC;;OAEG;IACH,eAAe,IAAI,IAAI;IASvB;;OAEG;IACH,cAAc,IAAI,IAAI;IAUtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,cAAc,IAAI,MAAM;IAgBxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;OAEG;IACH,8BAA8B,IAAI,MAAM,EAAE;IAmB1C;;OAEG;IACH,OAAO,IAAI,IAAI;IAgBf,OAAO,CAAC,aAAa,CAAC,CAAQ;IAC9B,OAAO,CAAC,kBAAkB,CAAC,CAAgB;CAC5C;AAGD,eAAO,MAAM,oBAAoB,sBAAqC,CAAA"}
@@ -0,0 +1,334 @@
1
+ /**
2
+ * HUA Motion Core - 성능 최적화 시스템
3
+ *
4
+ * GPU 가속, 레이어 관리, 메모리 최적화를 위한 유틸리티들
5
+ * 브라우저별 최적화 전략 포함
6
+ */
7
+ export class PerformanceOptimizer {
8
+ constructor() {
9
+ this.performanceObserver = null;
10
+ this.layerRegistry = new Set();
11
+ this.isMonitoring = false;
12
+ this.config = {
13
+ enableGPUAcceleration: true,
14
+ enableLayerSeparation: true,
15
+ enableMemoryOptimization: true,
16
+ targetFPS: 60,
17
+ maxLayerCount: 100,
18
+ memoryThreshold: 50 * 1024 * 1024 // 50MB
19
+ };
20
+ this.metrics = {
21
+ fps: 0,
22
+ layerCount: 0,
23
+ activeMotions: 0
24
+ };
25
+ this.initializePerformanceMonitoring();
26
+ }
27
+ static getInstance() {
28
+ if (!PerformanceOptimizer.instance) {
29
+ PerformanceOptimizer.instance = new PerformanceOptimizer();
30
+ }
31
+ return PerformanceOptimizer.instance;
32
+ }
33
+ /**
34
+ * 성능 모니터링 초기화
35
+ */
36
+ initializePerformanceMonitoring() {
37
+ if (typeof PerformanceObserver !== 'undefined') {
38
+ try {
39
+ this.performanceObserver = new PerformanceObserver((list) => {
40
+ const entries = list.getEntries();
41
+ this.updatePerformanceMetrics(entries);
42
+ });
43
+ this.performanceObserver.observe({ entryTypes: ['measure', 'navigation'] });
44
+ }
45
+ catch (error) {
46
+ if (process.env.NODE_ENV === 'development') {
47
+ console.warn('Performance monitoring not supported:', error);
48
+ }
49
+ }
50
+ }
51
+ }
52
+ /**
53
+ * 성능 메트릭 업데이트
54
+ */
55
+ updatePerformanceMetrics(entries) {
56
+ entries.forEach(entry => {
57
+ if (entry.entryType === 'measure') {
58
+ // FPS 계산
59
+ this.calculateFPS();
60
+ }
61
+ });
62
+ }
63
+ /**
64
+ * FPS 계산
65
+ */
66
+ calculateFPS() {
67
+ const now = performance.now();
68
+ const deltaTime = now - (this.lastFrameTime || now);
69
+ this.lastFrameTime = now;
70
+ if (deltaTime > 0) {
71
+ this.metrics.fps = Math.round(1000 / deltaTime);
72
+ }
73
+ }
74
+ /**
75
+ * GPU 가속 활성화
76
+ */
77
+ enableGPUAcceleration(element) {
78
+ if (!this.config.enableGPUAcceleration)
79
+ return;
80
+ try {
81
+ // will-change 속성으로 GPU 가속 힌트 제공
82
+ element.style.willChange = 'transform, opacity';
83
+ // transform3d로 강제 GPU 가속
84
+ element.style.transform = 'translateZ(0)';
85
+ // 하드웨어 가속을 위한 추가 속성들
86
+ element.style.backfaceVisibility = 'hidden';
87
+ element.style.transformStyle = 'preserve-3d';
88
+ // 레이어 등록
89
+ this.registerLayer(element);
90
+ }
91
+ catch (error) {
92
+ if (process.env.NODE_ENV === 'development') {
93
+ console.warn('GPU acceleration failed:', error);
94
+ }
95
+ }
96
+ }
97
+ /**
98
+ * 레이어 분리 및 최적화
99
+ */
100
+ createOptimizedLayer(element) {
101
+ if (!this.config.enableLayerSeparation)
102
+ return;
103
+ try {
104
+ // 새로운 레이어 생성
105
+ element.style.transform = 'translateZ(0)';
106
+ element.style.backfaceVisibility = 'hidden';
107
+ element.style.perspective = '1000px';
108
+ // 레이어 등록
109
+ this.registerLayer(element);
110
+ // 레이어 수 제한 체크
111
+ this.checkLayerLimit();
112
+ }
113
+ catch (error) {
114
+ if (process.env.NODE_ENV === 'development') {
115
+ console.warn('Layer optimization failed:', error);
116
+ }
117
+ }
118
+ }
119
+ /**
120
+ * 레이어 등록
121
+ */
122
+ registerLayer(element) {
123
+ if (this.layerRegistry.has(element))
124
+ return;
125
+ this.layerRegistry.add(element);
126
+ this.metrics.layerCount = this.layerRegistry.size;
127
+ // 메모리 사용량 체크
128
+ this.checkMemoryUsage();
129
+ }
130
+ /**
131
+ * 레이어 제거
132
+ */
133
+ removeLayer(element) {
134
+ if (this.layerRegistry.has(element)) {
135
+ this.layerRegistry.delete(element);
136
+ this.metrics.layerCount = this.layerRegistry.size;
137
+ // GPU 가속 비활성화
138
+ element.style.willChange = 'auto';
139
+ element.style.transform = '';
140
+ element.style.backfaceVisibility = '';
141
+ element.style.transformStyle = '';
142
+ element.style.perspective = '';
143
+ }
144
+ }
145
+ /**
146
+ * 레이어 수 제한 체크
147
+ */
148
+ checkLayerLimit() {
149
+ if (this.metrics.layerCount > this.config.maxLayerCount) {
150
+ if (process.env.NODE_ENV === 'development') {
151
+ console.warn(`Layer count (${this.metrics.layerCount}) exceeds limit (${this.config.maxLayerCount})`);
152
+ }
153
+ // 오래된 레이어들 정리
154
+ this.cleanupOldLayers();
155
+ }
156
+ }
157
+ /**
158
+ * 오래된 레이어 정리
159
+ */
160
+ cleanupOldLayers() {
161
+ const layersToRemove = Array.from(this.layerRegistry).slice(0, 10);
162
+ layersToRemove.forEach(layer => {
163
+ this.removeLayer(layer);
164
+ });
165
+ }
166
+ /**
167
+ * 메모리 사용량 체크
168
+ */
169
+ checkMemoryUsage() {
170
+ if (!this.config.enableMemoryOptimization)
171
+ return;
172
+ // Memory API 지원 여부 체크
173
+ if ('memory' in performance) {
174
+ const memory = performance.memory;
175
+ this.metrics.memoryUsage = memory.usedJSHeapSize;
176
+ if (memory.usedJSHeapSize > this.config.memoryThreshold) {
177
+ if (process.env.NODE_ENV === 'development') {
178
+ console.warn('Memory usage high, cleaning up...');
179
+ }
180
+ this.cleanupMemory();
181
+ }
182
+ }
183
+ }
184
+ /**
185
+ * 메모리 정리
186
+ */
187
+ cleanupMemory() {
188
+ // 가비지 컬렉션 힌트
189
+ if ('gc' in window) {
190
+ try {
191
+ window.gc();
192
+ }
193
+ catch (error) {
194
+ // gc() 호출 실패 시 무시
195
+ }
196
+ }
197
+ // 불필요한 레이어 정리
198
+ this.cleanupOldLayers();
199
+ }
200
+ /**
201
+ * 성능 최적화 설정 업데이트
202
+ */
203
+ updateConfig(newConfig) {
204
+ this.config = { ...this.config, ...newConfig };
205
+ // 설정 변경에 따른 즉시 적용
206
+ if (!this.config.enableGPUAcceleration) {
207
+ this.disableAllGPUAcceleration();
208
+ }
209
+ if (!this.config.enableLayerSeparation) {
210
+ this.disableAllLayers();
211
+ }
212
+ }
213
+ /**
214
+ * 모든 GPU 가속 비활성화
215
+ */
216
+ disableAllGPUAcceleration() {
217
+ this.layerRegistry.forEach(element => {
218
+ element.style.willChange = 'auto';
219
+ element.style.transform = '';
220
+ });
221
+ }
222
+ /**
223
+ * 모든 레이어 비활성화
224
+ */
225
+ disableAllLayers() {
226
+ this.layerRegistry.forEach(element => {
227
+ this.removeLayer(element);
228
+ });
229
+ }
230
+ /**
231
+ * 성능 메트릭 가져오기
232
+ */
233
+ getMetrics() {
234
+ return { ...this.metrics };
235
+ }
236
+ /**
237
+ * 성능 모니터링 시작
238
+ */
239
+ startMonitoring() {
240
+ if (this.isMonitoring)
241
+ return;
242
+ this.isMonitoring = true;
243
+ this.monitoringInterval = setInterval(() => {
244
+ this.updateMetrics();
245
+ }, 1000); // 1초마다 업데이트
246
+ }
247
+ /**
248
+ * 성능 모니터링 중지
249
+ */
250
+ stopMonitoring() {
251
+ if (!this.isMonitoring)
252
+ return;
253
+ this.isMonitoring = false;
254
+ if (this.monitoringInterval) {
255
+ clearInterval(this.monitoringInterval);
256
+ this.monitoringInterval = undefined;
257
+ }
258
+ }
259
+ /**
260
+ * 메트릭 업데이트
261
+ */
262
+ updateMetrics() {
263
+ // 메모리 사용량 업데이트
264
+ if ('memory' in performance) {
265
+ const memory = performance.memory;
266
+ this.metrics.memoryUsage = memory.usedJSHeapSize;
267
+ }
268
+ // 레이어 수 업데이트
269
+ this.metrics.layerCount = this.layerRegistry.size;
270
+ }
271
+ /**
272
+ * 성능 리포트 생성
273
+ */
274
+ generateReport() {
275
+ const metrics = this.getMetrics();
276
+ return `
277
+ === HUA Motion Performance Report ===
278
+ FPS: ${metrics.fps}
279
+ Active Layers: ${metrics.layerCount}
280
+ Memory Usage: ${this.formatBytes(metrics.memoryUsage || 0)}
281
+ Active Motions: ${metrics.activeMotions}
282
+ GPU Acceleration: ${this.config.enableGPUAcceleration ? 'Enabled' : 'Disabled'}
283
+ Layer Separation: ${this.config.enableLayerSeparation ? 'Enabled' : 'Disabled'}
284
+ Memory Optimization: ${this.config.enableMemoryOptimization ? 'Enabled' : 'Disabled'}
285
+ =====================================
286
+ `.trim();
287
+ }
288
+ /**
289
+ * 바이트 단위 포맷팅
290
+ */
291
+ formatBytes(bytes) {
292
+ if (bytes === 0)
293
+ return '0 B';
294
+ const k = 1024;
295
+ const sizes = ['B', 'KB', 'MB', 'GB'];
296
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
297
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
298
+ }
299
+ /**
300
+ * 성능 최적화 권장사항
301
+ */
302
+ getOptimizationRecommendations() {
303
+ const recommendations = [];
304
+ const metrics = this.getMetrics();
305
+ if (metrics.fps < this.config.targetFPS) {
306
+ recommendations.push('FPS가 낮습니다. GPU 가속을 활성화하거나 레이어 수를 줄이세요.');
307
+ }
308
+ if (metrics.layerCount > this.config.maxLayerCount * 0.8) {
309
+ recommendations.push('레이어 수가 많습니다. 불필요한 레이어를 정리하세요.');
310
+ }
311
+ if (metrics.memoryUsage && metrics.memoryUsage > this.config.memoryThreshold * 0.8) {
312
+ recommendations.push('메모리 사용량이 높습니다. 메모리 정리를 고려하세요.');
313
+ }
314
+ return recommendations;
315
+ }
316
+ /**
317
+ * 정리
318
+ */
319
+ destroy() {
320
+ this.stopMonitoring();
321
+ if (this.performanceObserver) {
322
+ this.performanceObserver.disconnect();
323
+ this.performanceObserver = null;
324
+ }
325
+ // 모든 레이어 정리
326
+ this.layerRegistry.forEach(element => {
327
+ this.removeLayer(element);
328
+ });
329
+ this.layerRegistry.clear();
330
+ }
331
+ }
332
+ // 싱글톤 인스턴스
333
+ export const performanceOptimizer = PerformanceOptimizer.getInstance();
334
+ //# sourceMappingURL=PerformanceOptimizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PerformanceOptimizer.js","sourceRoot":"","sources":["../../src/core/PerformanceOptimizer.ts"],"names":[],"mappings":"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"}