blacktrigram 0.7.44 → 0.7.45

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 (746) hide show
  1. package/lib/audio/AudioManager.d.ts +26 -0
  2. package/lib/audio/AudioManager.d.ts.map +1 -1
  3. package/lib/audio/AudioManager.js +26 -0
  4. package/lib/audio/AudioManager.js.map +1 -1
  5. package/lib/audio/index.d.ts.map +1 -1
  6. package/lib/audio/index.js.map +1 -1
  7. package/lib/audio/types.d.ts +18 -2
  8. package/lib/audio/types.d.ts.map +1 -1
  9. package/lib/audio/types.js +1 -0
  10. package/lib/audio/types.js.map +1 -1
  11. package/lib/components/effects/WindParticles3D.d.ts.map +1 -1
  12. package/lib/components/index.d.ts.map +1 -1
  13. package/lib/components/index.js.map +1 -1
  14. package/lib/components/screens/combat/CombatScreen3D.d.ts.map +1 -1
  15. package/lib/components/screens/combat/CombatScreen3D.js.map +1 -1
  16. package/lib/components/screens/combat/components/controls/KeyboardHints.d.ts +0 -1
  17. package/lib/components/screens/combat/components/controls/KeyboardHints.d.ts.map +1 -1
  18. package/lib/components/screens/combat/components/controls/KeyboardHints.js +0 -1
  19. package/lib/components/screens/combat/components/controls/KeyboardHints.js.map +1 -1
  20. package/lib/components/screens/combat/components/controls/PauseMenu.d.ts.map +1 -1
  21. package/lib/components/screens/combat/components/controls/PauseMenu.js.map +1 -1
  22. package/lib/components/screens/combat/components/effects/ArterialSpray3D.d.ts.map +1 -1
  23. package/lib/components/screens/combat/components/effects/BloodDecals3D.d.ts.map +1 -1
  24. package/lib/components/screens/combat/components/effects/BloodDecals3D.js.map +1 -1
  25. package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.d.ts.map +1 -1
  26. package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.js.map +1 -1
  27. package/lib/components/screens/combat/components/effects/BloodParticles3D.d.ts.map +1 -1
  28. package/lib/components/screens/combat/components/effects/BloodParticles3D.js.map +1 -1
  29. package/lib/components/screens/combat/components/effects/BloodViscosity3D.d.ts.map +1 -1
  30. package/lib/components/screens/combat/components/effects/BloodViscosity3D.js.map +1 -1
  31. package/lib/components/screens/combat/components/effects/BoneCrackParticles3D.d.ts.map +1 -1
  32. package/lib/components/screens/combat/components/effects/CombatParticleEffects3D.d.ts.map +1 -1
  33. package/lib/components/screens/combat/components/effects/CombatParticleEffects3D.js.map +1 -1
  34. package/lib/components/screens/combat/components/effects/ConsciousnessBlur.d.ts.map +1 -1
  35. package/lib/components/screens/combat/components/effects/ConsciousnessBlur.js.map +1 -1
  36. package/lib/components/screens/combat/components/effects/DustClouds3D.d.ts.map +1 -1
  37. package/lib/components/screens/combat/components/effects/EarthCrackEffect3D.d.ts.map +1 -1
  38. package/lib/components/screens/combat/components/effects/EarthHealingEffect3D.d.ts.map +1 -1
  39. package/lib/components/screens/combat/components/effects/ImpactSparks3D.d.ts.map +1 -1
  40. package/lib/components/screens/combat/components/effects/InternalDamage3D.d.ts.map +1 -1
  41. package/lib/components/screens/combat/components/effects/InternalDamage3D.js.map +1 -1
  42. package/lib/components/screens/combat/components/effects/LiPrecisionTargetingOverlay.d.ts.map +1 -1
  43. package/lib/components/screens/combat/components/effects/NerveStrikeParticles3D.d.ts.map +1 -1
  44. package/lib/components/screens/combat/components/effects/PainVignette.d.ts.map +1 -1
  45. package/lib/components/screens/combat/components/effects/PainVignette.js.map +1 -1
  46. package/lib/components/screens/combat/components/effects/ParticleAudio3D.d.ts.map +1 -1
  47. package/lib/components/screens/combat/components/effects/ParticleAudio3D.js.map +1 -1
  48. package/lib/components/screens/combat/components/effects/TraumaOverlay3D.d.ts.map +1 -1
  49. package/lib/components/screens/combat/components/effects/TraumaOverlay3D.js.map +1 -1
  50. package/lib/components/screens/combat/components/effects/WaterRipple3D.d.ts.map +1 -1
  51. package/lib/components/screens/combat/components/effects/WaterWave3D.d.ts.map +1 -1
  52. package/lib/components/screens/combat/components/effects/index.d.ts.map +1 -1
  53. package/lib/components/screens/combat/components/feedback/MatchCountdown.d.ts.map +1 -1
  54. package/lib/components/screens/combat/components/feedback/MatchCountdown.js.map +1 -1
  55. package/lib/components/screens/combat/components/feedback/RoundAnnouncementOverlayHtml.d.ts.map +1 -1
  56. package/lib/components/screens/combat/components/feedback/RoundAnnouncementOverlayHtml.js.map +1 -1
  57. package/lib/components/screens/combat/components/feedback/RoundStartAnnouncementOverlayHtml.d.ts.map +1 -1
  58. package/lib/components/screens/combat/components/feedback/RoundStartAnnouncementOverlayHtml.js.map +1 -1
  59. package/lib/components/screens/combat/components/hud/CombatBottomHUD.d.ts.map +1 -1
  60. package/lib/components/screens/combat/components/hud/CombatBottomHUD.js.map +1 -1
  61. package/lib/components/screens/combat/components/hud/CombatLeftHUD.d.ts.map +1 -1
  62. package/lib/components/screens/combat/components/hud/CombatLeftHUD.js.map +1 -1
  63. package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.d.ts.map +1 -1
  64. package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.js.map +1 -1
  65. package/lib/components/screens/combat/components/hud/CombatRightHUD.d.ts.map +1 -1
  66. package/lib/components/screens/combat/components/hud/CombatRightHUD.js.map +1 -1
  67. package/lib/components/screens/combat/components/hud/CombatTopHUD.d.ts.map +1 -1
  68. package/lib/components/screens/combat/components/hud/CombatTopHUD.js.map +1 -1
  69. package/lib/components/screens/combat/components/hud/DifficultyIndicator.d.ts.map +1 -1
  70. package/lib/components/screens/combat/components/hud/DifficultyIndicator.js.map +1 -1
  71. package/lib/components/screens/combat/components/hud/FPSMonitor.d.ts.map +1 -1
  72. package/lib/components/screens/combat/components/hud/FPSMonitor.js.map +1 -1
  73. package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.d.ts.map +1 -1
  74. package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.js.map +1 -1
  75. package/lib/components/screens/combat/components/indicators/BalanceIndicator.d.ts.map +1 -1
  76. package/lib/components/screens/combat/components/indicators/BalanceIndicator.js.map +1 -1
  77. package/lib/components/screens/combat/components/indicators/InputBufferDisplay.d.ts +0 -1
  78. package/lib/components/screens/combat/components/indicators/InputBufferDisplay.d.ts.map +1 -1
  79. package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js +0 -1
  80. package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js.map +1 -1
  81. package/lib/components/screens/combat/components/indicators/StaminaWarning.d.ts.map +1 -1
  82. package/lib/components/screens/combat/components/indicators/StaminaWarning.js.map +1 -1
  83. package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.d.ts +0 -2
  84. package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.d.ts.map +1 -1
  85. package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.js +0 -1
  86. package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.js.map +1 -1
  87. package/lib/components/screens/combat/helpers/AnimationUpdater.d.ts.map +1 -1
  88. package/lib/components/screens/combat/helpers/AnimationUpdater.js.map +1 -1
  89. package/lib/components/screens/combat/helpers/combatHelpers.d.ts.map +1 -1
  90. package/lib/components/screens/combat/helpers/combatHelpers.js.map +1 -1
  91. package/lib/components/screens/combat/hooks/useAICombat.d.ts.map +1 -1
  92. package/lib/components/screens/combat/hooks/useAICombat.js.map +1 -1
  93. package/lib/components/screens/combat/hooks/useCombatActions.d.ts.map +1 -1
  94. package/lib/components/screens/combat/hooks/useCombatActions.js.map +1 -1
  95. package/lib/components/screens/combat/hooks/useCombatAttackMovement.d.ts.map +1 -1
  96. package/lib/components/screens/combat/hooks/useCombatAttackMovement.js.map +1 -1
  97. package/lib/components/screens/combat/hooks/useCombatAudio.d.ts.map +1 -1
  98. package/lib/components/screens/combat/hooks/useCombatAudio.js.map +1 -1
  99. package/lib/components/screens/combat/hooks/useCombatLayout.d.ts.map +1 -1
  100. package/lib/components/screens/combat/hooks/useCombatLayout.js.map +1 -1
  101. package/lib/components/screens/combat/hooks/useCombatState.d.ts.map +1 -1
  102. package/lib/components/screens/combat/hooks/useCombatState.js.map +1 -1
  103. package/lib/components/screens/combat/hooks/useGrapplingAudio.d.ts.map +1 -1
  104. package/lib/components/screens/combat/hooks/usePreloadCombatAudio.d.ts.map +1 -1
  105. package/lib/components/screens/controls/ControlsScreen3D.d.ts.map +1 -1
  106. package/lib/components/screens/controls/ControlsScreen3D.js.map +1 -1
  107. package/lib/components/screens/controls/components/ControlBindingsOverlayHtml.d.ts.map +1 -1
  108. package/lib/components/screens/controls/components/ControlBindingsOverlayHtml.js.map +1 -1
  109. package/lib/components/screens/controls/components/GamepadVisualization3D.d.ts.map +1 -1
  110. package/lib/components/screens/controls/components/GamepadVisualization3D.js.map +1 -1
  111. package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.d.ts.map +1 -1
  112. package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.js.map +1 -1
  113. package/lib/components/screens/controls/components/Key3D.d.ts.map +1 -1
  114. package/lib/components/screens/controls/components/Key3D.js.map +1 -1
  115. package/lib/components/screens/controls/components/VisualKeyboard3D.d.ts.map +1 -1
  116. package/lib/components/screens/controls/components/VisualKeyboard3D.js.map +1 -1
  117. package/lib/components/screens/controls/constants/ControlsConstants.d.ts.map +1 -1
  118. package/lib/components/screens/controls/constants/ControlsConstants.js.map +1 -1
  119. package/lib/components/screens/controls/hooks/useControlsState.d.ts.map +1 -1
  120. package/lib/components/screens/controls/hooks/useControlsState.js.map +1 -1
  121. package/lib/components/screens/endscreen/EndScreen3D.d.ts.map +1 -1
  122. package/lib/components/screens/endscreen/EndScreen3D.js.map +1 -1
  123. package/lib/components/screens/endscreen/components/DefeatAnimation3D.d.ts.map +1 -1
  124. package/lib/components/screens/endscreen/components/DefeatAnimation3D.js.map +1 -1
  125. package/lib/components/screens/endscreen/components/NavigationButtonsOverlayHtml.d.ts.map +1 -1
  126. package/lib/components/screens/endscreen/components/NavigationButtonsOverlayHtml.js.map +1 -1
  127. package/lib/components/screens/endscreen/components/PerformanceBreakdownOverlayHtml.d.ts.map +1 -1
  128. package/lib/components/screens/endscreen/components/PerformanceBreakdownOverlayHtml.js.map +1 -1
  129. package/lib/components/screens/endscreen/components/PerformanceRatingOverlayHtml.d.ts.map +1 -1
  130. package/lib/components/screens/endscreen/components/PerformanceRatingOverlayHtml.js.map +1 -1
  131. package/lib/components/screens/endscreen/components/VictoryAnimation3D.d.ts.map +1 -1
  132. package/lib/components/screens/endscreen/components/VictoryAnimation3D.js.map +1 -1
  133. package/lib/components/screens/endscreen/components/WinnerDisplayOverlayHtml.d.ts.map +1 -1
  134. package/lib/components/screens/endscreen/components/WinnerDisplayOverlayHtml.js.map +1 -1
  135. package/lib/components/screens/endscreen/components/index.d.ts.map +1 -1
  136. package/lib/components/screens/endscreen/index.d.ts.map +1 -1
  137. package/lib/components/screens/intro/IntroScreen3D.d.ts.map +1 -1
  138. package/lib/components/screens/intro/IntroScreen3D.js +1 -1
  139. package/lib/components/screens/intro/IntroScreen3D.js.map +1 -1
  140. package/lib/components/screens/intro/components/AbilityListOverlayHtml.d.ts.map +1 -1
  141. package/lib/components/screens/intro/components/AbilityListOverlayHtml.js.map +1 -1
  142. package/lib/components/screens/intro/components/ArchetypeCardGridOverlayHtml.d.ts.map +1 -1
  143. package/lib/components/screens/intro/components/ArchetypeCardGridOverlayHtml.js.map +1 -1
  144. package/lib/components/screens/intro/components/ArchetypeCardOverlayHtml.d.ts.map +1 -1
  145. package/lib/components/screens/intro/components/ArchetypeCardOverlayHtml.js.map +1 -1
  146. package/lib/components/screens/intro/components/ArchetypeDisplayOverlayHtml.d.ts.map +1 -1
  147. package/lib/components/screens/intro/components/ArchetypeDisplayOverlayHtml.js.map +1 -1
  148. package/lib/components/screens/intro/components/EnhancedArchetypeDisplayOverlayHtml.d.ts.map +1 -1
  149. package/lib/components/screens/intro/components/EnhancedArchetypeDisplayOverlayHtml.js.map +1 -1
  150. package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.d.ts.map +1 -1
  151. package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.js.map +1 -1
  152. package/lib/components/screens/intro/components/MenuSectionOverlayHtml.d.ts.map +1 -1
  153. package/lib/components/screens/intro/components/MenuSectionOverlayHtml.js.map +1 -1
  154. package/lib/components/screens/intro/components/StatBarOverlayHtml.d.ts.map +1 -1
  155. package/lib/components/screens/intro/components/StatBarOverlayHtml.js.map +1 -1
  156. package/lib/components/screens/philosophy/PhilosophyScreen3D.d.ts.map +1 -1
  157. package/lib/components/screens/philosophy/PhilosophyScreen3D.js.map +1 -1
  158. package/lib/components/screens/philosophy/components/InteractiveTrigramGridOverlayHtml.d.ts +0 -1
  159. package/lib/components/screens/philosophy/components/InteractiveTrigramGridOverlayHtml.d.ts.map +1 -1
  160. package/lib/components/screens/philosophy/components/PhilosophyNavigationOverlayHtml.d.ts +0 -1
  161. package/lib/components/screens/philosophy/components/PhilosophyNavigationOverlayHtml.d.ts.map +1 -1
  162. package/lib/components/screens/philosophy/components/PhilosophySectionOverlayHtml.d.ts +0 -1
  163. package/lib/components/screens/philosophy/components/PhilosophySectionOverlayHtml.d.ts.map +1 -1
  164. package/lib/components/screens/philosophy/components/PhilosophyTextOverlayHtml.d.ts +0 -1
  165. package/lib/components/screens/philosophy/components/PhilosophyTextOverlayHtml.d.ts.map +1 -1
  166. package/lib/components/screens/philosophy/components/TrigramSymbol3D.d.ts +0 -1
  167. package/lib/components/screens/philosophy/components/TrigramSymbol3D.d.ts.map +1 -1
  168. package/lib/components/screens/philosophy/components/TrigramVisualization3D.d.ts +0 -1
  169. package/lib/components/screens/philosophy/components/TrigramVisualization3D.d.ts.map +1 -1
  170. package/lib/components/screens/philosophy/hooks/usePhilosophyState.d.ts +0 -1
  171. package/lib/components/screens/philosophy/hooks/usePhilosophyState.d.ts.map +1 -1
  172. package/lib/components/screens/training/TrainingScreen3D.d.ts.map +1 -1
  173. package/lib/components/screens/training/TrainingScreen3D.js.map +1 -1
  174. package/lib/components/screens/training/components/AnatomyControlsOverlayHtml.d.ts.map +1 -1
  175. package/lib/components/screens/training/components/AnatomyControlsOverlayHtml.js.map +1 -1
  176. package/lib/components/screens/training/components/AnatomyOverlay3D.d.ts.map +1 -1
  177. package/lib/components/screens/training/components/AnatomyOverlay3D.js.map +1 -1
  178. package/lib/components/screens/training/components/DamageNumber3D.d.ts.map +1 -1
  179. package/lib/components/screens/training/components/FootPlacementMarkers3D.d.ts.map +1 -1
  180. package/lib/components/screens/training/components/FootPlacementMarkers3D.js.map +1 -1
  181. package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.d.ts.map +1 -1
  182. package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.js.map +1 -1
  183. package/lib/components/screens/training/components/HitFeedbackEffect3D.d.ts.map +1 -1
  184. package/lib/components/screens/training/components/HitFeedbackEffect3D.js.map +1 -1
  185. package/lib/components/screens/training/components/TrainingAICharacter3D.d.ts.map +1 -1
  186. package/lib/components/screens/training/components/TrainingArena3D.d.ts.map +1 -1
  187. package/lib/components/screens/training/components/TrainingControlsOverlayHtml.d.ts.map +1 -1
  188. package/lib/components/screens/training/components/TrainingControlsOverlayHtml.js.map +1 -1
  189. package/lib/components/screens/training/components/TrainingDummy3D.d.ts.map +1 -1
  190. package/lib/components/screens/training/components/TrainingDummy3D.js.map +1 -1
  191. package/lib/components/screens/training/components/TrainingFeedbackOverlayHtml.d.ts.map +1 -1
  192. package/lib/components/screens/training/components/TrainingFeedbackOverlayHtml.js.map +1 -1
  193. package/lib/components/screens/training/components/TrainingHitEffects3D.d.ts.map +1 -1
  194. package/lib/components/screens/training/components/TrainingModeSelectorOverlayHtml.d.ts.map +1 -1
  195. package/lib/components/screens/training/components/TrainingModeSelectorOverlayHtml.js.map +1 -1
  196. package/lib/components/screens/training/components/TrainingStatsOverlayHtml.d.ts.map +1 -1
  197. package/lib/components/screens/training/components/TrainingStatsOverlayHtml.js.map +1 -1
  198. package/lib/components/screens/training/components/VitalPointMarker3D.d.ts.map +1 -1
  199. package/lib/components/screens/training/components/VitalPointMarker3D.js.map +1 -1
  200. package/lib/components/screens/training/components/VitalPointTrainingOverlayHtml.d.ts.map +1 -1
  201. package/lib/components/screens/training/components/VitalPointTrainingOverlayHtml.js.map +1 -1
  202. package/lib/components/screens/training/components/hud/TrainingBottomHUD.d.ts.map +1 -1
  203. package/lib/components/screens/training/components/hud/TrainingBottomHUD.js.map +1 -1
  204. package/lib/components/screens/training/components/hud/TrainingLeftHUD.d.ts.map +1 -1
  205. package/lib/components/screens/training/components/hud/TrainingLeftHUD.js.map +1 -1
  206. package/lib/components/screens/training/components/hud/TrainingRightHUD.d.ts.map +1 -1
  207. package/lib/components/screens/training/components/hud/TrainingRightHUD.js.map +1 -1
  208. package/lib/components/screens/training/components/hud/TrainingTopHUD.d.ts.map +1 -1
  209. package/lib/components/screens/training/components/hud/TrainingTopHUD.js.map +1 -1
  210. package/lib/components/screens/training/components/index.d.ts.map +1 -1
  211. package/lib/components/screens/training/hooks/useAttackMovement.d.ts.map +1 -1
  212. package/lib/components/screens/training/hooks/useAttackMovement.js.map +1 -1
  213. package/lib/components/screens/training/hooks/useTrainingActions.d.ts.map +1 -1
  214. package/lib/components/screens/training/hooks/useTrainingActions.js.map +1 -1
  215. package/lib/components/screens/training/hooks/useTrainingLayout.d.ts.map +1 -1
  216. package/lib/components/screens/training/hooks/useTrainingLayout.js.map +1 -1
  217. package/lib/components/screens/training/hooks/useTrainingState.d.ts.map +1 -1
  218. package/lib/components/screens/training/hooks/useTrainingState.js.map +1 -1
  219. package/lib/components/shared/base/AccessibilityProvider.d.ts.map +1 -1
  220. package/lib/components/shared/base/BaseButton.d.ts.map +1 -1
  221. package/lib/components/shared/base/BaseButton.js.map +1 -1
  222. package/lib/components/shared/base/BaseButtonOverlayHtml.d.ts.map +1 -1
  223. package/lib/components/shared/base/BaseButtonOverlayHtml.js.map +1 -1
  224. package/lib/components/shared/base/BasePanel.d.ts.map +1 -1
  225. package/lib/components/shared/base/BasePanel.js.map +1 -1
  226. package/lib/components/shared/base/BaseText.d.ts.map +1 -1
  227. package/lib/components/shared/base/BaseText.js.map +1 -1
  228. package/lib/components/shared/base/ResponsiveContainer.d.ts.map +1 -1
  229. package/lib/components/shared/base/index.d.ts.map +1 -1
  230. package/lib/components/shared/base/useKoreanTheme.d.ts.map +1 -1
  231. package/lib/components/shared/base/useKoreanTheme.js.map +1 -1
  232. package/lib/components/shared/debug/PerformanceDebugOverlayHtml.d.ts.map +1 -1
  233. package/lib/components/shared/debug/PerformanceDebugOverlayHtml.js.map +1 -1
  234. package/lib/components/shared/effects/ScreenFlash.d.ts.map +1 -1
  235. package/lib/components/shared/mobile/ActionButtons.d.ts.map +1 -1
  236. package/lib/components/shared/mobile/ActionButtons.js +0 -1
  237. package/lib/components/shared/mobile/ActionButtons.js.map +1 -1
  238. package/lib/components/shared/mobile/GestureRecognizerPure.d.ts +0 -1
  239. package/lib/components/shared/mobile/GestureRecognizerPure.d.ts.map +1 -1
  240. package/lib/components/shared/mobile/GestureRecognizerPure.js +0 -1
  241. package/lib/components/shared/mobile/GestureRecognizerPure.js.map +1 -1
  242. package/lib/components/shared/mobile/HapticController.d.ts +0 -13
  243. package/lib/components/shared/mobile/HapticController.d.ts.map +1 -1
  244. package/lib/components/shared/mobile/HapticController.js +0 -10
  245. package/lib/components/shared/mobile/HapticController.js.map +1 -1
  246. package/lib/components/shared/mobile/MobileControlsPure.d.ts.map +1 -1
  247. package/lib/components/shared/mobile/MobileControlsPure.js.map +1 -1
  248. package/lib/components/shared/mobile/PerformanceMonitor.d.ts +0 -15
  249. package/lib/components/shared/mobile/PerformanceMonitor.d.ts.map +1 -1
  250. package/lib/components/shared/mobile/StanceWheelPure.d.ts +0 -1
  251. package/lib/components/shared/mobile/StanceWheelPure.d.ts.map +1 -1
  252. package/lib/components/shared/mobile/StanceWheelPure.js +0 -1
  253. package/lib/components/shared/mobile/StanceWheelPure.js.map +1 -1
  254. package/lib/components/shared/mobile/TouchOptimizer.d.ts +0 -4
  255. package/lib/components/shared/mobile/TouchOptimizer.d.ts.map +1 -1
  256. package/lib/components/shared/mobile/TouchOptimizer.js +0 -3
  257. package/lib/components/shared/mobile/TouchOptimizer.js.map +1 -1
  258. package/lib/components/shared/mobile/VirtualDPad.d.ts.map +1 -1
  259. package/lib/components/shared/mobile/VirtualDPad.js +0 -1
  260. package/lib/components/shared/mobile/VirtualDPad.js.map +1 -1
  261. package/lib/components/shared/mobile/index.d.ts.map +1 -1
  262. package/lib/components/shared/three/anatomy/BodySurface.d.ts.map +1 -1
  263. package/lib/components/shared/three/anatomy/BodySurface.js.map +1 -1
  264. package/lib/components/shared/three/anatomy/BoneAttachedMuscles.d.ts.map +1 -1
  265. package/lib/components/shared/three/anatomy/BoneAttachedMuscles.js.map +1 -1
  266. package/lib/components/shared/three/anatomy/BoneClothing.d.ts.map +1 -1
  267. package/lib/components/shared/three/anatomy/BoneClothing.js.map +1 -1
  268. package/lib/components/shared/three/anatomy/BoneRenderer.d.ts +0 -1
  269. package/lib/components/shared/three/anatomy/BoneRenderer.d.ts.map +1 -1
  270. package/lib/components/shared/three/anatomy/BoneRenderer.js.map +1 -1
  271. package/lib/components/shared/three/anatomy/Face3D.d.ts.map +1 -1
  272. package/lib/components/shared/three/anatomy/Face3D.js.map +1 -1
  273. package/lib/components/shared/three/anatomy/Foot3D.d.ts +0 -1
  274. package/lib/components/shared/three/anatomy/Foot3D.d.ts.map +1 -1
  275. package/lib/components/shared/three/anatomy/Foot3D.js.map +1 -1
  276. package/lib/components/shared/three/anatomy/Hand3D.d.ts +0 -1
  277. package/lib/components/shared/three/anatomy/Hand3D.d.ts.map +1 -1
  278. package/lib/components/shared/three/anatomy/Hand3D.js.map +1 -1
  279. package/lib/components/shared/three/effects/ActionFeedback.d.ts.map +1 -1
  280. package/lib/components/shared/three/effects/ActionFeedback.js.map +1 -1
  281. package/lib/components/shared/three/effects/DamageNumbers.d.ts.map +1 -1
  282. package/lib/components/shared/three/effects/DamageNumbers.js.map +1 -1
  283. package/lib/components/shared/three/effects/ExplosiveBurstEffect3D.d.ts.map +1 -1
  284. package/lib/components/shared/three/effects/GrapplingIndicator3D.d.ts.map +1 -1
  285. package/lib/components/shared/three/effects/HitEffects3D.d.ts.map +1 -1
  286. package/lib/components/shared/three/effects/HitEffects3D.js.map +1 -1
  287. package/lib/components/shared/three/effects/LimbExposureIndicator3D.d.ts.map +1 -1
  288. package/lib/components/shared/three/effects/NerveDisruptionEffect3D.d.ts.map +1 -1
  289. package/lib/components/shared/three/effects/PlayerStateIndicators.d.ts.map +1 -1
  290. package/lib/components/shared/three/effects/PlayerStateIndicators.js.map +1 -1
  291. package/lib/components/shared/three/effects/StanceSymbol3D.d.ts.map +1 -1
  292. package/lib/components/shared/three/effects/StanceSymbol3D.js.map +1 -1
  293. package/lib/components/shared/three/effects/StanceTransitionEffect.d.ts.map +1 -1
  294. package/lib/components/shared/three/effects/StanceTransitionEffect.js.map +1 -1
  295. package/lib/components/shared/three/effects/ThunderEffect3D.d.ts.map +1 -1
  296. package/lib/components/shared/three/effects/VitalPointMarkers3D.d.ts.map +1 -1
  297. package/lib/components/shared/three/effects/VitalPointMarkers3D.js.map +1 -1
  298. package/lib/components/shared/three/index.d.ts.map +1 -1
  299. package/lib/components/shared/three/indicators/ElementalColorSystem.d.ts +0 -6
  300. package/lib/components/shared/three/indicators/ElementalColorSystem.d.ts.map +1 -1
  301. package/lib/components/shared/three/indicators/ElementalColorSystem.js +0 -4
  302. package/lib/components/shared/three/indicators/ElementalColorSystem.js.map +1 -1
  303. package/lib/components/shared/three/indicators/GuardIndicator.d.ts +0 -1
  304. package/lib/components/shared/three/indicators/GuardIndicator.d.ts.map +1 -1
  305. package/lib/components/shared/three/indicators/GuardIndicator.js +0 -1
  306. package/lib/components/shared/three/indicators/GuardIndicator.js.map +1 -1
  307. package/lib/components/shared/three/indicators/HapticFeedback.d.ts +0 -7
  308. package/lib/components/shared/three/indicators/HapticFeedback.d.ts.map +1 -1
  309. package/lib/components/shared/three/indicators/HapticFeedback.js +0 -2
  310. package/lib/components/shared/three/indicators/HapticFeedback.js.map +1 -1
  311. package/lib/components/shared/three/indicators/StanceChangeIndicator.d.ts +0 -1
  312. package/lib/components/shared/three/indicators/StanceChangeIndicator.d.ts.map +1 -1
  313. package/lib/components/shared/three/indicators/StanceChangeIndicator.js +0 -1
  314. package/lib/components/shared/three/indicators/StanceChangeIndicator.js.map +1 -1
  315. package/lib/components/shared/three/indicators/TrigramSymbol3D.d.ts +0 -1
  316. package/lib/components/shared/three/indicators/TrigramSymbol3D.d.ts.map +1 -1
  317. package/lib/components/shared/three/models/Player3DWithTransitions.d.ts.map +1 -1
  318. package/lib/components/shared/three/models/Player3DWithTransitions.js.map +1 -1
  319. package/lib/components/shared/three/models/SkeletalPlayer3D.d.ts.map +1 -1
  320. package/lib/components/shared/three/models/SkeletalPlayer3D.js.map +1 -1
  321. package/lib/components/shared/three/optimization/AdaptiveQuality.d.ts.map +1 -1
  322. package/lib/components/shared/three/optimization/AdaptiveQuality.js.map +1 -1
  323. package/lib/components/shared/three/optimization/InstancedGeometry.d.ts.map +1 -1
  324. package/lib/components/shared/three/optimization/LODSystem.d.ts.map +1 -1
  325. package/lib/components/shared/three/scene/AtmosphericParticles3D.d.ts.map +1 -1
  326. package/lib/components/shared/three/scene/AtmosphericParticles3D.js.map +1 -1
  327. package/lib/components/shared/three/scene/BackgroundScene3D.d.ts.map +1 -1
  328. package/lib/components/shared/three/scene/BackgroundScene3D.js.map +1 -1
  329. package/lib/components/shared/three/scene/CombatArena3D.d.ts.map +1 -1
  330. package/lib/components/shared/three/scene/CombatArena3D.js.map +1 -1
  331. package/lib/components/shared/three/scene/DebugCollision.d.ts +0 -2
  332. package/lib/components/shared/three/scene/DebugCollision.d.ts.map +1 -1
  333. package/lib/components/shared/three/scene/KoreanSignage3D.d.ts.map +1 -1
  334. package/lib/components/shared/three/scene/KoreanSignage3D.js.map +1 -1
  335. package/lib/components/shared/three/ui/ArchetypeCard.d.ts.map +1 -1
  336. package/lib/components/shared/three/ui/ArchetypeCard.js.map +1 -1
  337. package/lib/components/shared/three/ui/BodyPartHealthDisplay.d.ts.map +1 -1
  338. package/lib/components/shared/three/ui/BodyPartHealthDisplay.js.map +1 -1
  339. package/lib/components/shared/three/ui/BreathingIndicator.d.ts.map +1 -1
  340. package/lib/components/shared/three/ui/BreathingIndicator2.js.map +1 -1
  341. package/lib/components/shared/three/ui/CombatReadinessBar.d.ts.map +1 -1
  342. package/lib/components/shared/three/ui/CombatReadinessBar.js.map +1 -1
  343. package/lib/components/shared/three/ui/ComboCounter.d.ts.map +1 -1
  344. package/lib/components/shared/three/ui/ComboCounter.js.map +1 -1
  345. package/lib/components/shared/three/ui/HealthBar.d.ts.map +1 -1
  346. package/lib/components/shared/three/ui/HealthBar.js.map +1 -1
  347. package/lib/components/shared/three/ui/KoreanButton.d.ts.map +1 -1
  348. package/lib/components/shared/three/ui/KoreanButton.js.map +1 -1
  349. package/lib/components/shared/three/ui/KoreanPanel.d.ts.map +1 -1
  350. package/lib/components/shared/three/ui/KoreanPanel.js.map +1 -1
  351. package/lib/components/shared/three/ui/KoreanText.d.ts.map +1 -1
  352. package/lib/components/shared/three/ui/KoreanText.js.map +1 -1
  353. package/lib/components/shared/three/ui/MenuList.d.ts.map +1 -1
  354. package/lib/components/shared/three/ui/MenuList.js.map +1 -1
  355. package/lib/components/shared/three/ui/PlayerHUD.d.ts.map +1 -1
  356. package/lib/components/shared/three/ui/PlayerHUD.js.map +1 -1
  357. package/lib/components/shared/three/ui/ProgressBar.d.ts.map +1 -1
  358. package/lib/components/shared/three/ui/ProgressBar.js.map +1 -1
  359. package/lib/components/shared/three/ui/SpeedIndicatorHUD.d.ts +0 -1
  360. package/lib/components/shared/three/ui/SpeedIndicatorHUD.d.ts.map +1 -1
  361. package/lib/components/shared/three/ui/SpeedIndicatorHUD.js +0 -1
  362. package/lib/components/shared/three/ui/SpeedIndicatorHUD.js.map +1 -1
  363. package/lib/components/shared/three/ui/StaminaBar.d.ts.map +1 -1
  364. package/lib/components/shared/three/ui/StaminaBar.js.map +1 -1
  365. package/lib/components/shared/three/ui/TechniqueBar.d.ts.map +1 -1
  366. package/lib/components/shared/three/ui/TechniqueBar.js.map +1 -1
  367. package/lib/components/shared/three/ui/TechniqueBarContainer.d.ts.map +1 -1
  368. package/lib/components/shared/three/ui/TechniqueCard.d.ts.map +1 -1
  369. package/lib/components/shared/three/ui/TechniqueCard.js.map +1 -1
  370. package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.d.ts.map +1 -1
  371. package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.js.map +1 -1
  372. package/lib/components/shared/three/ui/VulnerabilityWindowHUD.d.ts.map +1 -1
  373. package/lib/components/shared/ui/BaseHUDContainer.d.ts.map +1 -1
  374. package/lib/components/shared/ui/BaseHUDContainer.js.map +1 -1
  375. package/lib/components/shared/ui/CombatTimer.d.ts.map +1 -1
  376. package/lib/components/shared/ui/CombatTimer.js.map +1 -1
  377. package/lib/components/shared/ui/ErrorBoundary.d.ts.map +1 -1
  378. package/lib/components/shared/ui/ErrorModal.d.ts.map +1 -1
  379. package/lib/components/shared/ui/ErrorModal.js.map +1 -1
  380. package/lib/components/shared/ui/HUDSection.d.ts.map +1 -1
  381. package/lib/components/shared/ui/LoadingState.d.ts.map +1 -1
  382. package/lib/components/shared/ui/LoadingState.js.map +1 -1
  383. package/lib/components/shared/ui/MobileHUDLayout.d.ts +0 -1
  384. package/lib/components/shared/ui/MobileHUDLayout.d.ts.map +1 -1
  385. package/lib/components/shared/ui/ResponsiveContainer.d.ts +0 -1
  386. package/lib/components/shared/ui/ResponsiveContainer.d.ts.map +1 -1
  387. package/lib/components/shared/ui/SplashScreen.d.ts.map +1 -1
  388. package/lib/components/shared/ui/SplashScreen.js +2 -2
  389. package/lib/components/shared/ui/SplashScreen.js.map +1 -1
  390. package/lib/components/shared/ui/StyledHUDPanel.d.ts.map +1 -1
  391. package/lib/components/shared/ui/VitalPointOverlayControlsPure.d.ts.map +1 -1
  392. package/lib/components/shared/ui/VitalPointOverlayControlsPure.js.map +1 -1
  393. package/lib/components/shared/ui/VolumeControl.d.ts.map +1 -1
  394. package/lib/components/shared/ui/VolumeControl.js.map +1 -1
  395. package/lib/components/shared/ui/shared/ConfirmDialog.d.ts.map +1 -1
  396. package/lib/components/shared/ui/shared/ConfirmDialog.js.map +1 -1
  397. package/lib/components/test/Hello3D.d.ts.map +1 -1
  398. package/lib/components/ui/combat/BalanceIndicatorOverlayHtml.d.ts.map +1 -1
  399. package/lib/components/ui/combat/BalanceIndicatorOverlayHtml.js.map +1 -1
  400. package/lib/components/ui/combat/ComboCounter.d.ts.map +1 -1
  401. package/lib/components/ui/combat/PressureMeter.d.ts.map +1 -1
  402. package/lib/systems/CombatSystem.d.ts +0 -6
  403. package/lib/systems/CombatSystem.d.ts.map +1 -1
  404. package/lib/systems/CombatSystem.js +0 -6
  405. package/lib/systems/CombatSystem.js.map +1 -1
  406. package/lib/systems/EffectCalculator.d.ts +0 -7
  407. package/lib/systems/EffectCalculator.d.ts.map +1 -1
  408. package/lib/systems/EffectCalculator.js +0 -4
  409. package/lib/systems/EffectCalculator.js.map +1 -1
  410. package/lib/systems/LayoutSystem.d.ts +0 -1
  411. package/lib/systems/LayoutSystem.d.ts.map +1 -1
  412. package/lib/systems/LayoutSystem.js +0 -1
  413. package/lib/systems/LayoutSystem.js.map +1 -1
  414. package/lib/systems/PlayerEffectManager.d.ts +0 -10
  415. package/lib/systems/PlayerEffectManager.d.ts.map +1 -1
  416. package/lib/systems/PlayerEffectManager.js +0 -3
  417. package/lib/systems/PlayerEffectManager.js.map +1 -1
  418. package/lib/systems/ResponsiveScaling.d.ts +0 -12
  419. package/lib/systems/ResponsiveScaling.d.ts.map +1 -1
  420. package/lib/systems/ResponsiveScaling.js +0 -12
  421. package/lib/systems/ResponsiveScaling.js.map +1 -1
  422. package/lib/systems/TrigramSystem.d.ts +0 -13
  423. package/lib/systems/TrigramSystem.d.ts.map +1 -1
  424. package/lib/systems/TrigramSystem.js +0 -13
  425. package/lib/systems/TrigramSystem.js.map +1 -1
  426. package/lib/systems/VitalPointSystem.d.ts +0 -10
  427. package/lib/systems/VitalPointSystem.d.ts.map +1 -1
  428. package/lib/systems/VitalPointSystem.js +0 -10
  429. package/lib/systems/VitalPointSystem.js.map +1 -1
  430. package/lib/systems/animation/builders/KeyframeInterpolation.d.ts +0 -4
  431. package/lib/systems/animation/builders/KeyframeInterpolation.d.ts.map +1 -1
  432. package/lib/systems/animation/builders/KeyframeInterpolation.js +0 -1
  433. package/lib/systems/animation/builders/KeyframeInterpolation.js.map +1 -1
  434. package/lib/systems/animation/builders/SkeletonRig.d.ts +0 -4
  435. package/lib/systems/animation/builders/SkeletonRig.d.ts.map +1 -1
  436. package/lib/systems/animation/builders/SkeletonRig.js +0 -3
  437. package/lib/systems/animation/builders/SkeletonRig.js.map +1 -1
  438. package/lib/systems/animation/catalogs/RecoveryAnimations.d.ts +0 -5
  439. package/lib/systems/animation/catalogs/RecoveryAnimations.d.ts.map +1 -1
  440. package/lib/systems/animation/catalogs/RecoveryAnimations.js +0 -5
  441. package/lib/systems/animation/catalogs/RecoveryAnimations.js.map +1 -1
  442. package/lib/systems/animation/core/AnimationHitTiming.d.ts +0 -6
  443. package/lib/systems/animation/core/AnimationHitTiming.d.ts.map +1 -1
  444. package/lib/systems/animation/core/AnimationHitTiming.js +0 -4
  445. package/lib/systems/animation/core/AnimationHitTiming.js.map +1 -1
  446. package/lib/systems/animation/core/AnimationTransitions.d.ts +0 -3
  447. package/lib/systems/animation/core/AnimationTransitions.d.ts.map +1 -1
  448. package/lib/systems/animation/core/AnimationTransitions.js.map +1 -1
  449. package/lib/systems/animation/core/LateralityTransform.d.ts +0 -3
  450. package/lib/systems/animation/core/LateralityTransform.d.ts.map +1 -1
  451. package/lib/systems/animation/core/LateralityTransform.js +0 -1
  452. package/lib/systems/animation/core/LateralityTransform.js.map +1 -1
  453. package/lib/systems/animation/core/RecoveryPhaseEnhancer.d.ts +0 -1
  454. package/lib/systems/animation/core/RecoveryPhaseEnhancer.d.ts.map +1 -1
  455. package/lib/systems/animation/core/RecoveryPhaseEnhancer.js.map +1 -1
  456. package/lib/systems/animation/core/TechniqueAnimationMapper.d.ts +0 -10
  457. package/lib/systems/animation/core/TechniqueAnimationMapper.d.ts.map +1 -1
  458. package/lib/systems/animation/core/TechniqueAnimationMapper.js +0 -8
  459. package/lib/systems/animation/core/TechniqueAnimationMapper.js.map +1 -1
  460. package/lib/systems/animation/core/TrigramAnimationMapping.d.ts +0 -10
  461. package/lib/systems/animation/core/TrigramAnimationMapping.d.ts.map +1 -1
  462. package/lib/systems/animation/core/TrigramStanceTransitions.d.ts +0 -2
  463. package/lib/systems/animation/core/TrigramStanceTransitions.d.ts.map +1 -1
  464. package/lib/systems/animation/core/types.d.ts +0 -39
  465. package/lib/systems/animation/core/types.d.ts.map +1 -1
  466. package/lib/systems/animation/core/types.js +0 -9
  467. package/lib/systems/animation/core/types.js.map +1 -1
  468. package/lib/systems/animation/systems/AdvancedJointMovements.d.ts +0 -27
  469. package/lib/systems/animation/systems/AdvancedJointMovements.d.ts.map +1 -1
  470. package/lib/systems/animation/systems/AdvancedJointMovements.js +0 -1
  471. package/lib/systems/animation/systems/AdvancedJointMovements.js.map +1 -1
  472. package/lib/systems/animation/systems/BodyFacingSystem.d.ts +0 -19
  473. package/lib/systems/animation/systems/BodyFacingSystem.d.ts.map +1 -1
  474. package/lib/systems/animation/systems/BodyFacingSystem.js +0 -14
  475. package/lib/systems/animation/systems/BodyFacingSystem.js.map +1 -1
  476. package/lib/systems/animation/systems/FacialExpressions.d.ts +0 -10
  477. package/lib/systems/animation/systems/FacialExpressions.d.ts.map +1 -1
  478. package/lib/systems/animation/systems/FacialExpressions.js +0 -2
  479. package/lib/systems/animation/systems/FacialExpressions.js.map +1 -1
  480. package/lib/systems/animation/systems/FallAnimations.d.ts +0 -4
  481. package/lib/systems/animation/systems/FallAnimations.d.ts.map +1 -1
  482. package/lib/systems/animation/systems/FallAnimations.js +0 -2
  483. package/lib/systems/animation/systems/FallAnimations.js.map +1 -1
  484. package/lib/systems/animation/systems/HeadMovements.d.ts +0 -10
  485. package/lib/systems/animation/systems/HeadMovements.d.ts.map +1 -1
  486. package/lib/systems/bodypart/BodyPartDamageIntegration.d.ts +0 -7
  487. package/lib/systems/bodypart/BodyPartDamageIntegration.d.ts.map +1 -1
  488. package/lib/systems/bodypart/BodyPartDamageIntegration.js +0 -7
  489. package/lib/systems/bodypart/BodyPartDamageIntegration.js.map +1 -1
  490. package/lib/systems/bodypart/BodyPartHealthSystem.d.ts +0 -13
  491. package/lib/systems/bodypart/BodyPartHealthSystem.d.ts.map +1 -1
  492. package/lib/systems/bodypart/BodyPartHealthSystem.js +0 -13
  493. package/lib/systems/bodypart/BodyPartHealthSystem.js.map +1 -1
  494. package/lib/systems/bodypart/BodyPartPositionMapping.d.ts +0 -6
  495. package/lib/systems/bodypart/BodyPartPositionMapping.d.ts.map +1 -1
  496. package/lib/systems/bodypart/BodyPartPositionMapping.js +0 -6
  497. package/lib/systems/bodypart/BodyPartPositionMapping.js.map +1 -1
  498. package/lib/systems/bodypart/CombatInjuryIntegration.d.ts +0 -10
  499. package/lib/systems/bodypart/CombatInjuryIntegration.d.ts.map +1 -1
  500. package/lib/systems/bodypart/CombatInjuryIntegration.js +0 -8
  501. package/lib/systems/bodypart/CombatInjuryIntegration.js.map +1 -1
  502. package/lib/systems/bodypart/InjuryIntegration.d.ts +0 -2
  503. package/lib/systems/bodypart/InjuryIntegration.d.ts.map +1 -1
  504. package/lib/systems/bodypart/InjuryIntegration.js +0 -2
  505. package/lib/systems/bodypart/InjuryIntegration.js.map +1 -1
  506. package/lib/systems/bodypart/InjuryTracker.d.ts +0 -14
  507. package/lib/systems/bodypart/InjuryTracker.d.ts.map +1 -1
  508. package/lib/systems/bodypart/InjuryTracker.js +0 -12
  509. package/lib/systems/bodypart/InjuryTracker.js.map +1 -1
  510. package/lib/systems/bodypart/MovementPenaltySystem.d.ts +0 -8
  511. package/lib/systems/bodypart/MovementPenaltySystem.d.ts.map +1 -1
  512. package/lib/systems/bodypart/MovementPenaltySystem.js +0 -8
  513. package/lib/systems/bodypart/MovementPenaltySystem.js.map +1 -1
  514. package/lib/systems/bodypart/PlayerInjuryTrackingManager.d.ts +0 -8
  515. package/lib/systems/bodypart/PlayerInjuryTrackingManager.d.ts.map +1 -1
  516. package/lib/systems/bodypart/PlayerInjuryTrackingManager.js +0 -8
  517. package/lib/systems/bodypart/PlayerInjuryTrackingManager.js.map +1 -1
  518. package/lib/systems/bodypart/types.d.ts +0 -13
  519. package/lib/systems/bodypart/types.d.ts.map +1 -1
  520. package/lib/systems/bodypart/types.js +0 -5
  521. package/lib/systems/bodypart/types.js.map +1 -1
  522. package/lib/systems/breathing/BreathingDisruptionSystem.d.ts +0 -3
  523. package/lib/systems/breathing/BreathingDisruptionSystem.d.ts.map +1 -1
  524. package/lib/systems/breathing/BreathingDisruptionSystem.js +0 -2
  525. package/lib/systems/breathing/BreathingDisruptionSystem.js.map +1 -1
  526. package/lib/systems/combat/BalanceSystem.d.ts +0 -25
  527. package/lib/systems/combat/BalanceSystem.d.ts.map +1 -1
  528. package/lib/systems/combat/BalanceSystem.js +0 -25
  529. package/lib/systems/combat/BalanceSystem.js.map +1 -1
  530. package/lib/systems/combat/BreakingStatusEffects.d.ts +0 -4
  531. package/lib/systems/combat/BreakingStatusEffects.d.ts.map +1 -1
  532. package/lib/systems/combat/BreakingStatusEffects.js +0 -3
  533. package/lib/systems/combat/BreakingStatusEffects.js.map +1 -1
  534. package/lib/systems/combat/CombatStateSystem.d.ts +0 -9
  535. package/lib/systems/combat/CombatStateSystem.d.ts.map +1 -1
  536. package/lib/systems/combat/CombatStateSystem.js +0 -9
  537. package/lib/systems/combat/CombatStateSystem.js.map +1 -1
  538. package/lib/systems/combat/ConsciousnessSystem.d.ts +0 -16
  539. package/lib/systems/combat/ConsciousnessSystem.d.ts.map +1 -1
  540. package/lib/systems/combat/ConsciousnessSystem.js +0 -16
  541. package/lib/systems/combat/ConsciousnessSystem.js.map +1 -1
  542. package/lib/systems/combat/FallIntegration.d.ts +0 -3
  543. package/lib/systems/combat/FallIntegration.d.ts.map +1 -1
  544. package/lib/systems/combat/FallIntegration.js +0 -3
  545. package/lib/systems/combat/FallIntegration.js.map +1 -1
  546. package/lib/systems/combat/GrappleSystem.d.ts +0 -2
  547. package/lib/systems/combat/GrappleSystem.d.ts.map +1 -1
  548. package/lib/systems/combat/GrappleSystem.js +0 -2
  549. package/lib/systems/combat/GrappleSystem.js.map +1 -1
  550. package/lib/systems/combat/LimbExposureSystem.d.ts +0 -7
  551. package/lib/systems/combat/LimbExposureSystem.d.ts.map +1 -1
  552. package/lib/systems/combat/LimbExposureSystem.js +0 -7
  553. package/lib/systems/combat/LimbExposureSystem.js.map +1 -1
  554. package/lib/systems/combat/PainResponseSystem.d.ts +0 -11
  555. package/lib/systems/combat/PainResponseSystem.d.ts.map +1 -1
  556. package/lib/systems/combat/PainResponseSystem.js +0 -11
  557. package/lib/systems/combat/PainResponseSystem.js.map +1 -1
  558. package/lib/systems/combat/painConsciousnessUtils.d.ts +0 -7
  559. package/lib/systems/combat/painConsciousnessUtils.d.ts.map +1 -1
  560. package/lib/systems/combat/painConsciousnessUtils.js +0 -7
  561. package/lib/systems/combat/painConsciousnessUtils.js.map +1 -1
  562. package/lib/systems/effects.d.ts +11 -0
  563. package/lib/systems/effects.d.ts.map +1 -1
  564. package/lib/systems/effects.js +10 -0
  565. package/lib/systems/effects.js.map +1 -1
  566. package/lib/systems/game.d.ts +16 -0
  567. package/lib/systems/game.d.ts.map +1 -1
  568. package/lib/systems/game.js +1 -0
  569. package/lib/systems/game.js.map +1 -1
  570. package/lib/systems/index.d.ts +5 -1
  571. package/lib/systems/index.d.ts.map +1 -1
  572. package/lib/systems/index.js.map +1 -1
  573. package/lib/systems/movement/InjuryMovementModifier.d.ts +0 -10
  574. package/lib/systems/movement/InjuryMovementModifier.d.ts.map +1 -1
  575. package/lib/systems/movement/InjuryMovementModifier.js +0 -7
  576. package/lib/systems/movement/InjuryMovementModifier.js.map +1 -1
  577. package/lib/systems/movement/integration.d.ts +0 -3
  578. package/lib/systems/movement/integration.d.ts.map +1 -1
  579. package/lib/systems/movement/integration.js +0 -3
  580. package/lib/systems/movement/integration.js.map +1 -1
  581. package/lib/systems/physics/AttackMovementPhysics.d.ts +0 -9
  582. package/lib/systems/physics/AttackMovementPhysics.d.ts.map +1 -1
  583. package/lib/systems/physics/AttackMovementPhysics.js +0 -7
  584. package/lib/systems/physics/AttackMovementPhysics.js.map +1 -1
  585. package/lib/systems/physics/CollisionDetection.d.ts +0 -6
  586. package/lib/systems/physics/CollisionDetection.d.ts.map +1 -1
  587. package/lib/systems/physics/CollisionDetection.js +0 -6
  588. package/lib/systems/physics/CollisionDetection.js.map +1 -1
  589. package/lib/systems/physics/CoordinateMapper.d.ts +0 -1
  590. package/lib/systems/physics/CoordinateMapper.d.ts.map +1 -1
  591. package/lib/systems/physics/CoordinateMapper.js +0 -1
  592. package/lib/systems/physics/CoordinateMapper.js.map +1 -1
  593. package/lib/systems/physics/KnockbackPhysics.d.ts +0 -11
  594. package/lib/systems/physics/KnockbackPhysics.d.ts.map +1 -1
  595. package/lib/systems/physics/KnockbackPhysics.js +0 -8
  596. package/lib/systems/physics/KnockbackPhysics.js.map +1 -1
  597. package/lib/systems/physics/MovementPhysics.d.ts +0 -10
  598. package/lib/systems/physics/MovementPhysics.d.ts.map +1 -1
  599. package/lib/systems/physics/MovementPhysics.js +0 -8
  600. package/lib/systems/physics/MovementPhysics.js.map +1 -1
  601. package/lib/systems/physics/PhysicalReachCalculator.d.ts +0 -6
  602. package/lib/systems/physics/PhysicalReachCalculator.d.ts.map +1 -1
  603. package/lib/systems/physics/PhysicalReachCalculator.js +0 -5
  604. package/lib/systems/physics/PhysicalReachCalculator.js.map +1 -1
  605. package/lib/systems/physics/SpeedModifierSystem.d.ts +0 -5
  606. package/lib/systems/physics/SpeedModifierSystem.d.ts.map +1 -1
  607. package/lib/systems/physics/SpeedModifierSystem.js +0 -4
  608. package/lib/systems/physics/SpeedModifierSystem.js.map +1 -1
  609. package/lib/systems/player.d.ts +0 -5
  610. package/lib/systems/player.d.ts.map +1 -1
  611. package/lib/systems/trigram/TrigramCalculator.d.ts +0 -1
  612. package/lib/systems/trigram/TrigramCalculator.d.ts.map +1 -1
  613. package/lib/systems/trigram/TrigramCalculator.js +0 -1
  614. package/lib/systems/trigram/TrigramCalculator.js.map +1 -1
  615. package/lib/systems/trigram/types.d.ts +0 -4
  616. package/lib/systems/trigram/types.d.ts.map +1 -1
  617. package/lib/systems/trigram/types.js +0 -2
  618. package/lib/systems/trigram/types.js.map +1 -1
  619. package/lib/systems/types.d.ts +7 -2
  620. package/lib/systems/types.d.ts.map +1 -1
  621. package/lib/systems/types.js.map +1 -1
  622. package/lib/systems/vitalpoint/DamageCalculator.d.ts +0 -3
  623. package/lib/systems/vitalpoint/DamageCalculator.d.ts.map +1 -1
  624. package/lib/systems/vitalpoint/DamageCalculator.js +0 -3
  625. package/lib/systems/vitalpoint/DamageCalculator.js.map +1 -1
  626. package/lib/systems/vitalpoint/KoreanVitalPoints.d.ts +0 -8
  627. package/lib/systems/vitalpoint/KoreanVitalPoints.d.ts.map +1 -1
  628. package/lib/systems/vitalpoint/KoreanVitalPoints.js +0 -8
  629. package/lib/systems/vitalpoint/KoreanVitalPoints.js.map +1 -1
  630. package/lib/systems/vitalpoint/VitalPointsData.d.ts +0 -3
  631. package/lib/systems/vitalpoint/VitalPointsData.d.ts.map +1 -1
  632. package/lib/systems/vitalpoint/VitalPointsData.js +0 -1
  633. package/lib/systems/vitalpoint/VitalPointsData.js.map +1 -1
  634. package/lib/types/PhysicsTypes.d.ts +21 -78
  635. package/lib/types/PhysicsTypes.d.ts.map +1 -1
  636. package/lib/types/PhysicsTypes.js +17 -63
  637. package/lib/types/PhysicsTypes.js.map +1 -1
  638. package/lib/types/clothing.d.ts +0 -9
  639. package/lib/types/clothing.d.ts.map +1 -1
  640. package/lib/types/constants/animations.d.ts +35 -1
  641. package/lib/types/constants/animations.d.ts.map +1 -1
  642. package/lib/types/constants/animations.js +12 -1
  643. package/lib/types/constants/animations.js.map +1 -1
  644. package/lib/types/constants/colors.d.ts +28 -2
  645. package/lib/types/constants/colors.d.ts.map +1 -1
  646. package/lib/types/constants/colors.js +30 -4
  647. package/lib/types/constants/colors.js.map +1 -1
  648. package/lib/types/constants/index.d.ts +5 -1
  649. package/lib/types/constants/index.d.ts.map +1 -1
  650. package/lib/types/constants/index.js.map +1 -1
  651. package/lib/types/constants/performance.d.ts +0 -2
  652. package/lib/types/constants/performance.d.ts.map +1 -1
  653. package/lib/types/constants/performance.js +0 -2
  654. package/lib/types/constants/performance.js.map +1 -1
  655. package/lib/types/constants/typography.d.ts +40 -2
  656. package/lib/types/constants/typography.d.ts.map +1 -1
  657. package/lib/types/constants/typography.js +40 -2
  658. package/lib/types/constants/typography.js.map +1 -1
  659. package/lib/types/constants/ui.d.ts +89 -1
  660. package/lib/types/constants/ui.d.ts.map +1 -1
  661. package/lib/types/constants/ui.js +33 -1
  662. package/lib/types/constants/ui.js.map +1 -1
  663. package/lib/types/facial.d.ts +0 -15
  664. package/lib/types/facial.d.ts.map +1 -1
  665. package/lib/types/facial.js +0 -8
  666. package/lib/types/facial.js.map +1 -1
  667. package/lib/types/hand-animation.d.ts +34 -147
  668. package/lib/types/hand-animation.d.ts.map +1 -1
  669. package/lib/types/hand-animation.js +0 -2
  670. package/lib/types/hand-animation.js.map +1 -1
  671. package/lib/types/injury.d.ts +0 -2
  672. package/lib/types/injury.d.ts.map +1 -1
  673. package/lib/types/injury.js +0 -1
  674. package/lib/types/injury.js.map +1 -1
  675. package/lib/types/physics.d.ts +0 -21
  676. package/lib/types/physics.d.ts.map +1 -1
  677. package/lib/types/physics.js +0 -6
  678. package/lib/types/physics.js.map +1 -1
  679. package/lib/types/physicsConstants.d.ts +0 -12
  680. package/lib/types/physicsConstants.d.ts.map +1 -1
  681. package/lib/types/physicsConstants.js +0 -12
  682. package/lib/types/physicsConstants.js.map +1 -1
  683. package/lib/types/player-visual.d.ts +45 -189
  684. package/lib/types/player-visual.d.ts.map +1 -1
  685. package/lib/types/technique.d.ts +1 -5
  686. package/lib/types/technique.d.ts.map +1 -1
  687. package/lib/types/techniqueId.d.ts +0 -1
  688. package/lib/types/techniqueId.d.ts.map +1 -1
  689. package/lib/types/techniqueId.js +0 -1
  690. package/lib/types/techniqueId.js.map +1 -1
  691. package/lib/utils/arenaWorldDimensions.d.ts +0 -11
  692. package/lib/utils/arenaWorldDimensions.d.ts.map +1 -1
  693. package/lib/utils/arenaWorldDimensions.js +0 -6
  694. package/lib/utils/arenaWorldDimensions.js.map +1 -1
  695. package/lib/utils/controlMapping.d.ts +3 -4
  696. package/lib/utils/controlMapping.d.ts.map +1 -1
  697. package/lib/utils/controlMapping.js +1 -2
  698. package/lib/utils/controlMapping.js.map +1 -1
  699. package/lib/utils/deviceDetection.d.ts +0 -5
  700. package/lib/utils/deviceDetection.d.ts.map +1 -1
  701. package/lib/utils/deviceDetection.js +0 -5
  702. package/lib/utils/deviceDetection.js.map +1 -1
  703. package/lib/utils/hapticFeedback.d.ts +23 -95
  704. package/lib/utils/hapticFeedback.d.ts.map +1 -1
  705. package/lib/utils/hapticFeedback.js +9 -39
  706. package/lib/utils/hapticFeedback.js.map +1 -1
  707. package/lib/utils/haptics.d.ts +0 -3
  708. package/lib/utils/haptics.d.ts.map +1 -1
  709. package/lib/utils/haptics.js +0 -1
  710. package/lib/utils/haptics.js.map +1 -1
  711. package/lib/utils/math.d.ts +0 -3
  712. package/lib/utils/math.d.ts.map +1 -1
  713. package/lib/utils/math.js +0 -2
  714. package/lib/utils/math.js.map +1 -1
  715. package/lib/utils/mobileLayoutHelpers.d.ts +0 -3
  716. package/lib/utils/mobileLayoutHelpers.d.ts.map +1 -1
  717. package/lib/utils/mobileLayoutHelpers.js +0 -1
  718. package/lib/utils/mobileLayoutHelpers.js.map +1 -1
  719. package/lib/utils/mobileUIUtils.d.ts +5 -100
  720. package/lib/utils/mobileUIUtils.d.ts.map +1 -1
  721. package/lib/utils/mobileUIUtils.js +0 -9
  722. package/lib/utils/mobileUIUtils.js.map +1 -1
  723. package/lib/utils/physicalAttributeValidation.d.ts.map +1 -1
  724. package/lib/utils/player3DHelpers.d.ts.map +1 -1
  725. package/lib/utils/player3DHelpers.js.map +1 -1
  726. package/lib/utils/responsiveLayoutHelpers.d.ts +0 -65
  727. package/lib/utils/responsiveLayoutHelpers.d.ts.map +1 -1
  728. package/lib/utils/responsiveLayoutHelpers.js +0 -65
  729. package/lib/utils/responsiveLayoutHelpers.js.map +1 -1
  730. package/lib/utils/responsiveOrientationConstants.d.ts +0 -7
  731. package/lib/utils/responsiveOrientationConstants.d.ts.map +1 -1
  732. package/lib/utils/responsiveOrientationConstants.js +0 -7
  733. package/lib/utils/responsiveOrientationConstants.js.map +1 -1
  734. package/lib/utils/safeAreaUtils.d.ts +0 -6
  735. package/lib/utils/safeAreaUtils.d.ts.map +1 -1
  736. package/lib/utils/safeAreaUtils.js +0 -2
  737. package/lib/utils/safeAreaUtils.js.map +1 -1
  738. package/lib/utils/sharedPhysicsConfig.d.ts +0 -4
  739. package/lib/utils/sharedPhysicsConfig.d.ts.map +1 -1
  740. package/lib/utils/sharedPhysicsConfig.js +0 -2
  741. package/lib/utils/sharedPhysicsConfig.js.map +1 -1
  742. package/lib/utils/skeletonScaling.d.ts +0 -9
  743. package/lib/utils/skeletonScaling.d.ts.map +1 -1
  744. package/lib/utils/skeletonScaling.js +0 -1
  745. package/lib/utils/skeletonScaling.js.map +1 -1
  746. package/package.json +7 -7
@@ -51,7 +51,6 @@ export declare function isHapticSupported(): boolean;
51
51
  * triggerHaptic('heavy');
52
52
  * ```
53
53
  *
54
- * @public
55
54
  */
56
55
  export declare function triggerHaptic(intensity: HapticIntensity): void;
57
56
  /**
@@ -70,7 +69,6 @@ export declare function triggerHaptic(intensity: HapticIntensity): void;
70
69
  * triggerCustomHaptic([200]);
71
70
  * ```
72
71
  *
73
- * @public
74
72
  */
75
73
  export declare function triggerCustomHaptic(pattern: number[]): void;
76
74
  /**
@@ -85,7 +83,6 @@ export declare function triggerCustomHaptic(pattern: number[]): void;
85
83
  * stopHaptic();
86
84
  * ```
87
85
  *
88
- * @public
89
86
  */
90
87
  export declare function stopHaptic(): void;
91
88
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"haptics.d.ts","sourceRoot":"","sources":["../../src/utils/haptics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAgB3D;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI,CAO9D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAM3D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAMjC;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa;IACxB;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;CAEK,CAAC"}
1
+ {"version":3,"file":"haptics.d.ts","sourceRoot":"","sources":["../../src/utils/haptics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAgB3D;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI,CAO9D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAM3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAMjC;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa;IACxB;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;CAEK,CAAC"}
@@ -53,7 +53,6 @@ function isHapticSupported() {
53
53
  * triggerHaptic('heavy');
54
54
  * ```
55
55
  *
56
- * @public
57
56
  */
58
57
  function triggerHaptic(intensity) {
59
58
  if (!isHapticSupported()) return;
@@ -1 +1 @@
1
- {"version":3,"file":"haptics.js","names":[],"sources":["../../src/utils/haptics.ts"],"sourcesContent":["/**\n * Haptic Feedback Utility\n * \n * Provides tactile feedback for mobile touch interactions\n * Uses Vibration API for physical response on button presses and combat hits\n * \n * @module utils/haptics\n * @category Mobile Controls\n * @korean 햅틱 피드백 유틸리티\n */\n\n/**\n * Haptic intensity levels for different interactions\n */\nexport type HapticIntensity = 'light' | 'medium' | 'heavy';\n\n/**\n * Vibration patterns for different haptic intensities\n * - light: Quick tap (10ms) - UI interactions\n * - medium: Moderate pulse (50ms) - Combat actions\n * - heavy: Strong pulse (100ms) - Critical hits\n * \n * @korean 햅틱 강도 패턴\n */\nconst HAPTIC_PATTERNS: Record<HapticIntensity, number[]> = {\n light: [10],\n medium: [50],\n heavy: [100],\n} as const;\n\n/**\n * Check if haptic feedback is supported by the device\n * \n * @returns True if Vibration API is available\n * @korean 햅틱 지원 확인\n * \n * @example\n * ```typescript\n * if (isHapticSupported()) {\n * triggerHaptic('medium');\n * }\n * ```\n */\nexport function isHapticSupported(): boolean {\n return typeof navigator !== 'undefined' && 'vibrate' in navigator;\n}\n\n/**\n * Trigger haptic feedback with specified intensity\n * \n * Provides tactile response for:\n * - Light: Menu selections, button taps\n * - Medium: Attack actions, stance changes\n * - Heavy: Critical hits, successful vital point strikes\n * \n * Falls back gracefully if Vibration API is not supported\n * \n * @param intensity - Haptic intensity level\n * @korean 햅틱 피드백 실행\n * \n * @example\n * ```typescript\n * // Light feedback for UI interaction\n * triggerHaptic('light');\n * \n * // Medium feedback for combat action\n * triggerHaptic('medium');\n * \n * // Heavy feedback for critical hit\n * triggerHaptic('heavy');\n * ```\n * \n * @public\n */\nexport function triggerHaptic(intensity: HapticIntensity): void {\n if (!isHapticSupported()) {\n return;\n }\n\n const pattern = HAPTIC_PATTERNS[intensity];\n navigator.vibrate(pattern);\n}\n\n/**\n * Custom haptic pattern for specific game events\n * Allows creating complex vibration sequences\n * \n * @param pattern - Array of vibration durations in milliseconds\n * @korean 커스텀 햅틱 패턴\n * \n * @example\n * ```typescript\n * // Combo hit feedback: buzz, pause, buzz\n * triggerCustomHaptic([30, 20, 30]);\n * \n * // Critical vital point strike: long buzz\n * triggerCustomHaptic([200]);\n * ```\n * \n * @public\n */\nexport function triggerCustomHaptic(pattern: number[]): void {\n if (!isHapticSupported()) {\n return;\n }\n\n navigator.vibrate(pattern);\n}\n\n/**\n * Stop any ongoing haptic feedback\n * Useful for interrupting long vibrations\n * \n * @korean 햅틱 피드백 중지\n * \n * @example\n * ```typescript\n * // Cancel ongoing vibration\n * stopHaptic();\n * ```\n * \n * @public\n */\nexport function stopHaptic(): void {\n if (!isHapticSupported()) {\n return;\n }\n\n navigator.vibrate(0);\n}\n\n/**\n * Combat-specific haptic feedback patterns\n * Pre-configured patterns for common combat scenarios\n * \n * @korean 전투 햅틱 패턴\n */\nexport const CombatHaptics = {\n /**\n * Standard attack hit feedback\n * @korean 일반 공격\n */\n attack: () => triggerHaptic('medium'),\n\n /**\n * Block successful feedback\n * @korean 방어 성공\n */\n block: () => triggerHaptic('light'),\n\n /**\n * Critical hit feedback with double pulse\n * @korean 크리티컬 히트\n */\n criticalHit: () => triggerCustomHaptic([50, 30, 100]),\n\n /**\n * Vital point strike feedback\n * @korean 급소 타격\n */\n vitalPointStrike: () => triggerHaptic('heavy'),\n\n /**\n * Stance change feedback\n * @korean 자세 변경\n */\n stanceChange: () => triggerHaptic('light'),\n\n /**\n * Combo counter increment\n * @korean 콤보 카운터\n */\n comboIncrement: () => triggerHaptic('light'),\n\n /**\n * Player KO feedback with extended pattern\n * @korean 플레이어 KO\n */\n knockout: () => triggerCustomHaptic([100, 50, 100, 50, 200]),\n\n /**\n * Error or invalid action feedback\n * @korean 오류 피드백\n */\n error: () => triggerCustomHaptic([20, 10, 20]),\n} as const;\n"],"mappings":";;;;;;;;;AAwBA,IAAM,kBAAqD;CACzD,OAAO,CAAC,GAAG;CACX,QAAQ,CAAC,GAAG;CACZ,OAAO,CAAC,IAAI;CACb;;;;;;;;;;;;;;AAeD,SAAgB,oBAA6B;CAC3C,OAAO,OAAO,cAAc,eAAe,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8B1D,SAAgB,cAAc,WAAkC;CAC9D,IAAI,CAAC,mBAAmB,EACtB;CAGF,MAAM,UAAU,gBAAgB;CAChC,UAAU,QAAQ,QAAQ"}
1
+ {"version":3,"file":"haptics.js","names":[],"sources":["../../src/utils/haptics.ts"],"sourcesContent":["/**\n * Haptic Feedback Utility\n * \n * Provides tactile feedback for mobile touch interactions\n * Uses Vibration API for physical response on button presses and combat hits\n * \n * @module utils/haptics\n * @category Mobile Controls\n * @korean 햅틱 피드백 유틸리티\n */\n\n/**\n * Haptic intensity levels for different interactions\n */\nexport type HapticIntensity = 'light' | 'medium' | 'heavy';\n\n/**\n * Vibration patterns for different haptic intensities\n * - light: Quick tap (10ms) - UI interactions\n * - medium: Moderate pulse (50ms) - Combat actions\n * - heavy: Strong pulse (100ms) - Critical hits\n * \n * @korean 햅틱 강도 패턴\n */\nconst HAPTIC_PATTERNS: Record<HapticIntensity, number[]> = {\n light: [10],\n medium: [50],\n heavy: [100],\n} as const;\n\n/**\n * Check if haptic feedback is supported by the device\n * \n * @returns True if Vibration API is available\n * @korean 햅틱 지원 확인\n * \n * @example\n * ```typescript\n * if (isHapticSupported()) {\n * triggerHaptic('medium');\n * }\n * ```\n */\nexport function isHapticSupported(): boolean {\n return typeof navigator !== 'undefined' && 'vibrate' in navigator;\n}\n\n/**\n * Trigger haptic feedback with specified intensity\n * \n * Provides tactile response for:\n * - Light: Menu selections, button taps\n * - Medium: Attack actions, stance changes\n * - Heavy: Critical hits, successful vital point strikes\n * \n * Falls back gracefully if Vibration API is not supported\n * \n * @param intensity - Haptic intensity level\n * @korean 햅틱 피드백 실행\n * \n * @example\n * ```typescript\n * // Light feedback for UI interaction\n * triggerHaptic('light');\n * \n * // Medium feedback for combat action\n * triggerHaptic('medium');\n * \n * // Heavy feedback for critical hit\n * triggerHaptic('heavy');\n * ```\n * \n */\nexport function triggerHaptic(intensity: HapticIntensity): void {\n if (!isHapticSupported()) {\n return;\n }\n\n const pattern = HAPTIC_PATTERNS[intensity];\n navigator.vibrate(pattern);\n}\n\n/**\n * Custom haptic pattern for specific game events\n * Allows creating complex vibration sequences\n * \n * @param pattern - Array of vibration durations in milliseconds\n * @korean 커스텀 햅틱 패턴\n * \n * @example\n * ```typescript\n * // Combo hit feedback: buzz, pause, buzz\n * triggerCustomHaptic([30, 20, 30]);\n * \n * // Critical vital point strike: long buzz\n * triggerCustomHaptic([200]);\n * ```\n * \n */\nexport function triggerCustomHaptic(pattern: number[]): void {\n if (!isHapticSupported()) {\n return;\n }\n\n navigator.vibrate(pattern);\n}\n\n/**\n * Stop any ongoing haptic feedback\n * Useful for interrupting long vibrations\n * \n * @korean 햅틱 피드백 중지\n * \n * @example\n * ```typescript\n * // Cancel ongoing vibration\n * stopHaptic();\n * ```\n * \n */\nexport function stopHaptic(): void {\n if (!isHapticSupported()) {\n return;\n }\n\n navigator.vibrate(0);\n}\n\n/**\n * Combat-specific haptic feedback patterns\n * Pre-configured patterns for common combat scenarios\n * \n * @korean 전투 햅틱 패턴\n */\nexport const CombatHaptics = {\n /**\n * Standard attack hit feedback\n * @korean 일반 공격\n */\n attack: () => triggerHaptic('medium'),\n\n /**\n * Block successful feedback\n * @korean 방어 성공\n */\n block: () => triggerHaptic('light'),\n\n /**\n * Critical hit feedback with double pulse\n * @korean 크리티컬 히트\n */\n criticalHit: () => triggerCustomHaptic([50, 30, 100]),\n\n /**\n * Vital point strike feedback\n * @korean 급소 타격\n */\n vitalPointStrike: () => triggerHaptic('heavy'),\n\n /**\n * Stance change feedback\n * @korean 자세 변경\n */\n stanceChange: () => triggerHaptic('light'),\n\n /**\n * Combo counter increment\n * @korean 콤보 카운터\n */\n comboIncrement: () => triggerHaptic('light'),\n\n /**\n * Player KO feedback with extended pattern\n * @korean 플레이어 KO\n */\n knockout: () => triggerCustomHaptic([100, 50, 100, 50, 200]),\n\n /**\n * Error or invalid action feedback\n * @korean 오류 피드백\n */\n error: () => triggerCustomHaptic([20, 10, 20]),\n} as const;\n"],"mappings":";;;;;;;;;AAwBA,IAAM,kBAAqD;CACzD,OAAO,CAAC,GAAG;CACX,QAAQ,CAAC,GAAG;CACZ,OAAO,CAAC,IAAI;CACb;;;;;;;;;;;;;;AAeD,SAAgB,oBAA6B;CAC3C,OAAO,OAAO,cAAc,eAAe,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6B1D,SAAgB,cAAc,WAAkC;CAC9D,IAAI,CAAC,mBAAmB,EACtB;CAGF,MAAM,UAAU,gBAAgB;CAChC,UAAU,QAAQ,QAAQ"}
@@ -26,7 +26,6 @@
26
26
  * const distance = calculateDistance3D([0, 0, 0], [3, 4, 0]);
27
27
  * // Returns: 5.0 (3-4-5 triangle)
28
28
  *
29
- * @public
30
29
  * @category Math Utilities
31
30
  * @korean 3D거리계산
32
31
  */
@@ -47,7 +46,6 @@ export declare function calculateDistance3D(pos1: [number, number, number], pos2
47
46
  * const distSq = calculateDistance3DSquared([0, 0, 0], [3, 4, 0]);
48
47
  * // Returns: 25.0
49
48
  *
50
- * @public
51
49
  * @category Math Utilities
52
50
  * @korean 3D거리제곱계산
53
51
  */
@@ -72,7 +70,6 @@ export declare function calculateDistance3DSquared(pos1: [number, number, number
72
70
  * const straightAngle = toRadians(180);
73
71
  * // Returns: approximately 3.1416 (π)
74
72
  *
75
- * @public
76
73
  * @category Math Utilities
77
74
  * @korean 각도변환
78
75
  */
@@ -1 +1 @@
1
- {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC9B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAKR;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC9B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAKR;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD"}
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC9B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAKR;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC9B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAKR;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD"}
package/lib/utils/math.js CHANGED
@@ -27,7 +27,6 @@
27
27
  * const distance = calculateDistance3D([0, 0, 0], [3, 4, 0]);
28
28
  * // Returns: 5.0 (3-4-5 triangle)
29
29
  *
30
- * @public
31
30
  * @category Math Utilities
32
31
  * @korean 3D거리계산
33
32
  */
@@ -57,7 +56,6 @@ function calculateDistance3D(pos1, pos2) {
57
56
  * const straightAngle = toRadians(180);
58
57
  * // Returns: approximately 3.1416 (π)
59
58
  *
60
- * @public
61
59
  * @category Math Utilities
62
60
  * @korean 각도변환
63
61
  */
@@ -1 +1 @@
1
- {"version":3,"file":"math.js","names":[],"sources":["../../src/utils/math.ts"],"sourcesContent":["/**\n * Mathematical utility functions for Black Trigram\n * \n * Provides shared mathematical operations used across combat, training,\n * and physics systems to ensure consistency and follow DRY principles.\n * \n * **Korean**: 수학 유틸리티 함수\n * \n * @module utils/math\n * @korean 수학유틸리티\n */\n\n/**\n * Calculate 3D Euclidean distance between two positions\n * \n * Uses the standard 3D distance formula: √(dx² + dy² + dz²)\n * This is used throughout the combat and training systems to calculate\n * distance between combatants, ensuring consistent distance calculations.\n * \n * **Korean**: 3D 유클리드 거리 계산\n * \n * @param pos1 - First position as [x, y, z] tuple\n * @param pos2 - Second position as [x, y, z] tuple\n * @returns The 3D Euclidean distance in meters\n * \n * @example\n * const distance = calculateDistance3D([0, 0, 0], [3, 4, 0]);\n * // Returns: 5.0 (3-4-5 triangle)\n * \n * @public\n * @category Math Utilities\n * @korean 3D거리계산\n */\nexport function calculateDistance3D(\n pos1: [number, number, number],\n pos2: [number, number, number]\n): number {\n const dx = pos1[0] - pos2[0];\n const dy = pos1[1] - pos2[1];\n const dz = pos1[2] - pos2[2];\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\n\n/**\n * Calculate squared 3D distance between two positions\n * \n * Optimized version that avoids the expensive square root operation.\n * Useful when comparing distances (A > B) where the square root is unnecessary.\n * \n * **Korean**: 3D 거리 제곱 계산\n * \n * @param pos1 - First position as [x, y, z] tuple\n * @param pos2 - Second position as [x, y, z] tuple\n * @returns The squared 3D distance in meters²\n * \n * @example\n * const distSq = calculateDistance3DSquared([0, 0, 0], [3, 4, 0]);\n * // Returns: 25.0\n * \n * @public\n * @category Math Utilities\n * @korean 3D거리제곱계산\n */\nexport function calculateDistance3DSquared(\n pos1: [number, number, number],\n pos2: [number, number, number]\n): number {\n const dx = pos1[0] - pos2[0];\n const dy = pos1[1] - pos2[1];\n const dz = pos1[2] - pos2[2];\n return dx * dx + dy * dy + dz * dz;\n}\n\n/**\n * Convert degrees to radians\n * \n * Used throughout animation systems for bone rotations where angles are\n * specified in degrees for readability but need to be converted to radians\n * for Three.js rendering.\n * \n * **Korean**: 각도를 라디안으로 변환\n * \n * @param degrees - Angle in degrees (0-360)\n * @returns Angle in radians (0-2π)\n * \n * @example\n * const rightAngle = toRadians(90);\n * // Returns: approximately 1.5708 (π/2)\n * \n * @example\n * const straightAngle = toRadians(180);\n * // Returns: approximately 3.1416 (π)\n * \n * @public\n * @category Math Utilities\n * @korean 각도변환\n */\nexport function toRadians(degrees: number): number {\n return degrees * (Math.PI / 180);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,SAAgB,oBACd,MACA,MACQ;CACR,MAAM,KAAK,KAAK,KAAK,KAAK;CAC1B,MAAM,KAAK,KAAK,KAAK,KAAK;CAC1B,MAAM,KAAK,KAAK,KAAK,KAAK;CAC1B,OAAO,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;AAyD/C,SAAgB,UAAU,SAAyB;CACjD,OAAO,WAAW,KAAK,KAAK"}
1
+ {"version":3,"file":"math.js","names":[],"sources":["../../src/utils/math.ts"],"sourcesContent":["/**\n * Mathematical utility functions for Black Trigram\n * \n * Provides shared mathematical operations used across combat, training,\n * and physics systems to ensure consistency and follow DRY principles.\n * \n * **Korean**: 수학 유틸리티 함수\n * \n * @module utils/math\n * @korean 수학유틸리티\n */\n\n/**\n * Calculate 3D Euclidean distance between two positions\n * \n * Uses the standard 3D distance formula: √(dx² + dy² + dz²)\n * This is used throughout the combat and training systems to calculate\n * distance between combatants, ensuring consistent distance calculations.\n * \n * **Korean**: 3D 유클리드 거리 계산\n * \n * @param pos1 - First position as [x, y, z] tuple\n * @param pos2 - Second position as [x, y, z] tuple\n * @returns The 3D Euclidean distance in meters\n * \n * @example\n * const distance = calculateDistance3D([0, 0, 0], [3, 4, 0]);\n * // Returns: 5.0 (3-4-5 triangle)\n * \n * @category Math Utilities\n * @korean 3D거리계산\n */\nexport function calculateDistance3D(\n pos1: [number, number, number],\n pos2: [number, number, number]\n): number {\n const dx = pos1[0] - pos2[0];\n const dy = pos1[1] - pos2[1];\n const dz = pos1[2] - pos2[2];\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\n\n/**\n * Calculate squared 3D distance between two positions\n * \n * Optimized version that avoids the expensive square root operation.\n * Useful when comparing distances (A > B) where the square root is unnecessary.\n * \n * **Korean**: 3D 거리 제곱 계산\n * \n * @param pos1 - First position as [x, y, z] tuple\n * @param pos2 - Second position as [x, y, z] tuple\n * @returns The squared 3D distance in meters²\n * \n * @example\n * const distSq = calculateDistance3DSquared([0, 0, 0], [3, 4, 0]);\n * // Returns: 25.0\n * \n * @category Math Utilities\n * @korean 3D거리제곱계산\n */\nexport function calculateDistance3DSquared(\n pos1: [number, number, number],\n pos2: [number, number, number]\n): number {\n const dx = pos1[0] - pos2[0];\n const dy = pos1[1] - pos2[1];\n const dz = pos1[2] - pos2[2];\n return dx * dx + dy * dy + dz * dz;\n}\n\n/**\n * Convert degrees to radians\n * \n * Used throughout animation systems for bone rotations where angles are\n * specified in degrees for readability but need to be converted to radians\n * for Three.js rendering.\n * \n * **Korean**: 각도를 라디안으로 변환\n * \n * @param degrees - Angle in degrees (0-360)\n * @returns Angle in radians (0-2π)\n * \n * @example\n * const rightAngle = toRadians(90);\n * // Returns: approximately 1.5708 (π/2)\n * \n * @example\n * const straightAngle = toRadians(180);\n * // Returns: approximately 3.1416 (π)\n * \n * @category Math Utilities\n * @korean 각도변환\n */\nexport function toRadians(degrees: number): number {\n return degrees * (Math.PI / 180);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,SAAgB,oBACd,MACA,MACQ;CACR,MAAM,KAAK,KAAK,KAAK,KAAK;CAC1B,MAAM,KAAK,KAAK,KAAK,KAAK;CAC1B,MAAM,KAAK,KAAK,KAAK,KAAK;CAC1B,OAAO,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;AAuD/C,SAAgB,UAAU,SAAyB;CACjD,OAAO,WAAW,KAAK,KAAK"}
@@ -11,7 +11,6 @@
11
11
  /**
12
12
  * Mobile area bounds with world dimensions.
13
13
  *
14
- * @public
15
14
  */
16
15
  export interface MobileAreaBounds {
17
16
  readonly x: number;
@@ -31,7 +30,6 @@ export interface MobileAreaBounds {
31
30
  * so both fighters plus the horizontal breathing-room between them fit
32
31
  * inside a narrow viewport without being occluded by the bottom HUD.
33
32
  *
34
- * @public
35
33
  */
36
34
  export type MobileOrientation = "portrait" | "landscape";
37
35
  /**
@@ -63,7 +61,6 @@ export type MobileOrientation = "portrait" | "landscape";
63
61
  * const portrait = calculateMobileAreaBounds(375, 667, 80, 220, 90, "portrait");
64
62
  * ```
65
63
  *
66
- * @public
67
64
  * @korean 모바일영역경계계산
68
65
  */
69
66
  export declare function calculateMobileAreaBounds(width: number, height: number, topClearance: number, bottomClearance: number, yOffset: number, orientation?: MobileOrientation): MobileAreaBounds;
@@ -1 +1 @@
1
- {"version":3,"file":"mobileLayoutHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/mobileLayoutHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,WAAW,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,iBAA+B,GAC3C,gBAAgB,CAgGlB"}
1
+ {"version":3,"file":"mobileLayoutHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/mobileLayoutHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,WAAW,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,iBAA+B,GAC3C,gBAAgB,CAgGlB"}
@@ -39,7 +39,6 @@ import { calculateArenaWorldDimensions } from "./arenaWorldDimensions.js";
39
39
  * const portrait = calculateMobileAreaBounds(375, 667, 80, 220, 90, "portrait");
40
40
  * ```
41
41
  *
42
- * @public
43
42
  * @korean 모바일영역경계계산
44
43
  */
45
44
  function calculateMobileAreaBounds(width, height, topClearance, bottomClearance, yOffset, orientation = "landscape") {
@@ -1 +1 @@
1
- {"version":3,"file":"mobileLayoutHelpers.js","names":[],"sources":["../../src/utils/mobileLayoutHelpers.ts"],"sourcesContent":["/**\n * Mobile Layout Helpers\n *\n * Shared utilities for calculating mobile area bounds with consistent aspect ratios\n * and device-specific sizing. Used by both combat and training layout hooks.\n *\n * @module utils/mobileLayoutHelpers\n * @category Layout\n * @korean 모바일레이아웃도우미\n */\n\nimport { calculateArenaWorldDimensions } from \"./arenaWorldDimensions\";\n\n/**\n * Mobile area bounds with world dimensions.\n *\n * @public\n */\nexport interface MobileAreaBounds {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n readonly scale: number;\n readonly worldWidthMeters: number;\n readonly worldDepthMeters: number;\n}\n\n/**\n * Device orientation for mobile area calculation.\n *\n * - `landscape`: width > height, the arena is rendered in 4:3 (wider than tall)\n * so both fighters remain visible from a side view.\n * - `portrait`: height ≥ width, the arena is rendered in 3:4 (taller than wide)\n * so both fighters plus the horizontal breathing-room between them fit\n * inside a narrow viewport without being occluded by the bottom HUD.\n *\n * @public\n */\nexport type MobileOrientation = \"portrait\" | \"landscape\";\n\n/**\n * Calculate mobile area bounds, orientation-aware.\n *\n * Implements consistent mobile area sizing logic shared between combat and training screens.\n * Adapts to different device resolutions while maintaining an orientation-appropriate\n * aspect ratio (4:3 in landscape, 3:4 in portrait).\n *\n * The caller is responsible for passing `bottomClearance` that already includes\n * the bottom HUD (technique bar), the mobile controls (D-Pad / action buttons)\n * and any safe-area insets. This function will never let the arena overflow\n * `height - topClearance - bottomClearance`.\n *\n * @param width - Screen width in pixels\n * @param height - Screen height in pixels\n * @param topClearance - Minimum space to reserve at top (for HUD/header + safe area)\n * @param bottomClearance - Minimum space to reserve at bottom (controls + footer + safe area)\n * @param yOffset - Y position offset (typically header height + padding)\n * @param orientation - `\"portrait\"` for tall-narrow viewports, otherwise `\"landscape\"` (default)\n * @returns Mobile area bounds with position, dimensions, scale, and world dimensions\n *\n * @example\n * ```typescript\n * // Landscape phone: 4:3 arena\n * const landscape = calculateMobileAreaBounds(667, 375, 60, 120, 70, \"landscape\");\n *\n * // Portrait phone: 3:4 arena (taller than wide)\n * const portrait = calculateMobileAreaBounds(375, 667, 80, 220, 90, \"portrait\");\n * ```\n *\n * @public\n * @korean 모바일영역경계계산\n */\nexport function calculateMobileAreaBounds(\n width: number,\n height: number,\n topClearance: number,\n bottomClearance: number,\n yOffset: number,\n orientation: MobileOrientation = \"landscape\",\n): MobileAreaBounds {\n const isPortrait = orientation === \"portrait\";\n\n // Calculate available space for the area.\n // Extra-small devices (<380px) use tighter margins for more screen real estate.\n //\n // Height reservation: the arena starts at `yOffset`, so the available\n // vertical space is bounded by `height - yOffset - bottomClearance`.\n // Falling back to `height - topClearance - bottomClearance` when a caller\n // passes `yOffset < topClearance` keeps the legacy behaviour, but we must\n // never let the arena overflow when `yOffset > topClearance` (which is the\n // case for the updated combat/training layout hooks).\n const horizontalMargin = width < 380 ? 30 : 40; // 15px vs 20px per side\n const effectiveTopReservation = Math.max(topClearance, yOffset);\n const availableHeight = Math.max(\n 0,\n height - effectiveTopReservation - bottomClearance,\n );\n const availableWidth = Math.max(0, width - horizontalMargin);\n\n // Determine max width based on device resolution\n // Device-specific sizing with extra-small support:\n // - 4K mobile landscape (≥2160px): up to 1100px\n // - QHD+/4K portrait (≥1440px): up to 960px\n // - 2K (1200-1439px): up to 760px\n // - Large phones/tablets (768-1199px): up to 560px\n // - Standard phones (380-767px): up to 400px\n // - Extra-small phones (<380px): up to 320px\n let maxMobileWidth: number;\n if (width >= 2160) {\n maxMobileWidth = Math.min(availableWidth, 1100);\n } else if (width >= 1440) {\n maxMobileWidth = Math.min(availableWidth, 960);\n } else if (width >= 1200) {\n maxMobileWidth = Math.min(availableWidth, 760);\n } else if (width >= 768) {\n maxMobileWidth = Math.min(availableWidth, 560);\n } else if (width >= 380) {\n maxMobileWidth = Math.min(availableWidth, 400);\n } else {\n // Extra-small devices (iPhone SE, old Android, budget phones)\n maxMobileWidth = Math.min(availableWidth, 320);\n }\n\n // In portrait we want the arena to consume more vertical real estate,\n // so the per-device max-height cap only applies in landscape.\n const maxMobileHeight = isPortrait\n ? availableHeight\n : Math.min(availableHeight, width < 380 ? 240 : 800);\n\n // Aspect ratio depends on orientation:\n // landscape → 4:3 (height = width × 3/4)\n // portrait → 3:4 (height = width × 4/3)\n // In portrait, width is constrained by height × 3/4 (not height × 4/3).\n const widthFromHeight = isPortrait\n ? maxMobileHeight * (3 / 4)\n : maxMobileHeight * (4 / 3);\n\n // Minimum arena width so the 3D scene stays legible, but never above\n // what the viewport can actually host:\n // - `availableWidth` caps absolute width of the arena element\n // - in portrait, `availableHeight × 3/4` caps arena width so the arena\n // height never exceeds `availableHeight` (preventing the arena from\n // being drawn behind the bottom HUD / D-Pad).\n // - in landscape, `availableHeight × 4/3` caps arena width so the 4:3\n // arena height never exceeds `availableHeight` on short mobile screens.\n const hardWidthCap = isPortrait\n ? Math.min(availableWidth, availableHeight * (3 / 4))\n : Math.min(availableWidth, availableHeight * (4 / 3));\n const minArenaWidth = Math.min(280, hardWidthCap);\n\n const areaWidth = Math.max(\n Math.min(maxMobileWidth, widthFromHeight, hardWidthCap),\n Math.max(0, minArenaWidth),\n );\n const areaHeight = isPortrait ? areaWidth * (4 / 3) : areaWidth * (3 / 4);\n\n // Calculate world dimensions based on RENDERED arena width (not screen width)\n // This ensures correct pixels-per-meter ratio for the actual visible arena\n const worldDimensions = calculateArenaWorldDimensions(areaWidth);\n\n // Calculate 3D scale factor based on reference arena\n // Reference: 10m arena at 1000px = 100 px/m\n const pixelsPerMeter = areaWidth / worldDimensions.widthMeters;\n const referencePixelsPerMeter = 100;\n const scale = pixelsPerMeter / referencePixelsPerMeter;\n\n return {\n x: (width - areaWidth) / 2, // Centered horizontally\n y: yOffset,\n width: areaWidth,\n height: areaHeight,\n scale,\n worldWidthMeters: worldDimensions.widthMeters,\n worldDepthMeters: worldDimensions.depthMeters,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyEA,SAAgB,0BACd,OACA,QACA,cACA,iBACA,SACA,cAAiC,aACf;CAClB,MAAM,aAAa,gBAAgB;CAWnC,MAAM,mBAAmB,QAAQ,MAAM,KAAK;CAE5C,MAAM,kBAAkB,KAAK,IAC3B,GACA,SAH8B,KAAK,IAAI,cAAc,QAG5C,GAA0B,gBACpC;CACD,MAAM,iBAAiB,KAAK,IAAI,GAAG,QAAQ,iBAAiB;CAU5D,IAAI;CACJ,IAAI,SAAS,MACX,iBAAiB,KAAK,IAAI,gBAAgB,KAAK;MAC1C,IAAI,SAAS,MAClB,iBAAiB,KAAK,IAAI,gBAAgB,IAAI;MACzC,IAAI,SAAS,MAClB,iBAAiB,KAAK,IAAI,gBAAgB,IAAI;MACzC,IAAI,SAAS,KAClB,iBAAiB,KAAK,IAAI,gBAAgB,IAAI;MACzC,IAAI,SAAS,KAClB,iBAAiB,KAAK,IAAI,gBAAgB,IAAI;MAG9C,iBAAiB,KAAK,IAAI,gBAAgB,IAAI;CAKhD,MAAM,kBAAkB,aACpB,kBACA,KAAK,IAAI,iBAAiB,QAAQ,MAAM,MAAM,IAAI;CAMtD,MAAM,kBAAkB,aACpB,mBAAmB,IAAI,KACvB,mBAAmB,IAAI;CAU3B,MAAM,eAAe,aACjB,KAAK,IAAI,gBAAgB,mBAAmB,IAAI,GAAG,GACnD,KAAK,IAAI,gBAAgB,mBAAmB,IAAI,GAAG;CAGvD,MAAM,YAAY,KAAK,IACrB,KAAK,IAAI,gBAAgB,iBAAiB,aAAa,EACvD,KAAK,IAAI,GAJW,KAAK,IAAI,KAAK,aAItB,CAAc,CAC3B;CACD,MAAM,aAAa,aAAa,aAAa,IAAI,KAAK,aAAa,IAAI;CAIvE,MAAM,kBAAkB,8BAA8B,UAAU;CAMhE,MAAM,QAFiB,YAAY,gBAAgB,cAEpB;CAE/B,OAAO;EACL,IAAI,QAAQ,aAAa;EACzB,GAAG;EACH,OAAO;EACP,QAAQ;EACR;EACA,kBAAkB,gBAAgB;EAClC,kBAAkB,gBAAgB;EACnC"}
1
+ {"version":3,"file":"mobileLayoutHelpers.js","names":[],"sources":["../../src/utils/mobileLayoutHelpers.ts"],"sourcesContent":["/**\n * Mobile Layout Helpers\n *\n * Shared utilities for calculating mobile area bounds with consistent aspect ratios\n * and device-specific sizing. Used by both combat and training layout hooks.\n *\n * @module utils/mobileLayoutHelpers\n * @category Layout\n * @korean 모바일레이아웃도우미\n */\n\nimport { calculateArenaWorldDimensions } from \"./arenaWorldDimensions\";\n\n/**\n * Mobile area bounds with world dimensions.\n *\n */\nexport interface MobileAreaBounds {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n readonly scale: number;\n readonly worldWidthMeters: number;\n readonly worldDepthMeters: number;\n}\n\n/**\n * Device orientation for mobile area calculation.\n *\n * - `landscape`: width > height, the arena is rendered in 4:3 (wider than tall)\n * so both fighters remain visible from a side view.\n * - `portrait`: height ≥ width, the arena is rendered in 3:4 (taller than wide)\n * so both fighters plus the horizontal breathing-room between them fit\n * inside a narrow viewport without being occluded by the bottom HUD.\n *\n */\nexport type MobileOrientation = \"portrait\" | \"landscape\";\n\n/**\n * Calculate mobile area bounds, orientation-aware.\n *\n * Implements consistent mobile area sizing logic shared between combat and training screens.\n * Adapts to different device resolutions while maintaining an orientation-appropriate\n * aspect ratio (4:3 in landscape, 3:4 in portrait).\n *\n * The caller is responsible for passing `bottomClearance` that already includes\n * the bottom HUD (technique bar), the mobile controls (D-Pad / action buttons)\n * and any safe-area insets. This function will never let the arena overflow\n * `height - topClearance - bottomClearance`.\n *\n * @param width - Screen width in pixels\n * @param height - Screen height in pixels\n * @param topClearance - Minimum space to reserve at top (for HUD/header + safe area)\n * @param bottomClearance - Minimum space to reserve at bottom (controls + footer + safe area)\n * @param yOffset - Y position offset (typically header height + padding)\n * @param orientation - `\"portrait\"` for tall-narrow viewports, otherwise `\"landscape\"` (default)\n * @returns Mobile area bounds with position, dimensions, scale, and world dimensions\n *\n * @example\n * ```typescript\n * // Landscape phone: 4:3 arena\n * const landscape = calculateMobileAreaBounds(667, 375, 60, 120, 70, \"landscape\");\n *\n * // Portrait phone: 3:4 arena (taller than wide)\n * const portrait = calculateMobileAreaBounds(375, 667, 80, 220, 90, \"portrait\");\n * ```\n *\n * @korean 모바일영역경계계산\n */\nexport function calculateMobileAreaBounds(\n width: number,\n height: number,\n topClearance: number,\n bottomClearance: number,\n yOffset: number,\n orientation: MobileOrientation = \"landscape\",\n): MobileAreaBounds {\n const isPortrait = orientation === \"portrait\";\n\n // Calculate available space for the area.\n // Extra-small devices (<380px) use tighter margins for more screen real estate.\n //\n // Height reservation: the arena starts at `yOffset`, so the available\n // vertical space is bounded by `height - yOffset - bottomClearance`.\n // Falling back to `height - topClearance - bottomClearance` when a caller\n // passes `yOffset < topClearance` keeps the legacy behaviour, but we must\n // never let the arena overflow when `yOffset > topClearance` (which is the\n // case for the updated combat/training layout hooks).\n const horizontalMargin = width < 380 ? 30 : 40; // 15px vs 20px per side\n const effectiveTopReservation = Math.max(topClearance, yOffset);\n const availableHeight = Math.max(\n 0,\n height - effectiveTopReservation - bottomClearance,\n );\n const availableWidth = Math.max(0, width - horizontalMargin);\n\n // Determine max width based on device resolution\n // Device-specific sizing with extra-small support:\n // - 4K mobile landscape (≥2160px): up to 1100px\n // - QHD+/4K portrait (≥1440px): up to 960px\n // - 2K (1200-1439px): up to 760px\n // - Large phones/tablets (768-1199px): up to 560px\n // - Standard phones (380-767px): up to 400px\n // - Extra-small phones (<380px): up to 320px\n let maxMobileWidth: number;\n if (width >= 2160) {\n maxMobileWidth = Math.min(availableWidth, 1100);\n } else if (width >= 1440) {\n maxMobileWidth = Math.min(availableWidth, 960);\n } else if (width >= 1200) {\n maxMobileWidth = Math.min(availableWidth, 760);\n } else if (width >= 768) {\n maxMobileWidth = Math.min(availableWidth, 560);\n } else if (width >= 380) {\n maxMobileWidth = Math.min(availableWidth, 400);\n } else {\n // Extra-small devices (iPhone SE, old Android, budget phones)\n maxMobileWidth = Math.min(availableWidth, 320);\n }\n\n // In portrait we want the arena to consume more vertical real estate,\n // so the per-device max-height cap only applies in landscape.\n const maxMobileHeight = isPortrait\n ? availableHeight\n : Math.min(availableHeight, width < 380 ? 240 : 800);\n\n // Aspect ratio depends on orientation:\n // landscape → 4:3 (height = width × 3/4)\n // portrait → 3:4 (height = width × 4/3)\n // In portrait, width is constrained by height × 3/4 (not height × 4/3).\n const widthFromHeight = isPortrait\n ? maxMobileHeight * (3 / 4)\n : maxMobileHeight * (4 / 3);\n\n // Minimum arena width so the 3D scene stays legible, but never above\n // what the viewport can actually host:\n // - `availableWidth` caps absolute width of the arena element\n // - in portrait, `availableHeight × 3/4` caps arena width so the arena\n // height never exceeds `availableHeight` (preventing the arena from\n // being drawn behind the bottom HUD / D-Pad).\n // - in landscape, `availableHeight × 4/3` caps arena width so the 4:3\n // arena height never exceeds `availableHeight` on short mobile screens.\n const hardWidthCap = isPortrait\n ? Math.min(availableWidth, availableHeight * (3 / 4))\n : Math.min(availableWidth, availableHeight * (4 / 3));\n const minArenaWidth = Math.min(280, hardWidthCap);\n\n const areaWidth = Math.max(\n Math.min(maxMobileWidth, widthFromHeight, hardWidthCap),\n Math.max(0, minArenaWidth),\n );\n const areaHeight = isPortrait ? areaWidth * (4 / 3) : areaWidth * (3 / 4);\n\n // Calculate world dimensions based on RENDERED arena width (not screen width)\n // This ensures correct pixels-per-meter ratio for the actual visible arena\n const worldDimensions = calculateArenaWorldDimensions(areaWidth);\n\n // Calculate 3D scale factor based on reference arena\n // Reference: 10m arena at 1000px = 100 px/m\n const pixelsPerMeter = areaWidth / worldDimensions.widthMeters;\n const referencePixelsPerMeter = 100;\n const scale = pixelsPerMeter / referencePixelsPerMeter;\n\n return {\n x: (width - areaWidth) / 2, // Centered horizontally\n y: yOffset,\n width: areaWidth,\n height: areaHeight,\n scale,\n worldWidthMeters: worldDimensions.widthMeters,\n worldDepthMeters: worldDimensions.depthMeters,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEA,SAAgB,0BACd,OACA,QACA,cACA,iBACA,SACA,cAAiC,aACf;CAClB,MAAM,aAAa,gBAAgB;CAWnC,MAAM,mBAAmB,QAAQ,MAAM,KAAK;CAE5C,MAAM,kBAAkB,KAAK,IAC3B,GACA,SAH8B,KAAK,IAAI,cAAc,QAG5C,GAA0B,gBACpC;CACD,MAAM,iBAAiB,KAAK,IAAI,GAAG,QAAQ,iBAAiB;CAU5D,IAAI;CACJ,IAAI,SAAS,MACX,iBAAiB,KAAK,IAAI,gBAAgB,KAAK;MAC1C,IAAI,SAAS,MAClB,iBAAiB,KAAK,IAAI,gBAAgB,IAAI;MACzC,IAAI,SAAS,MAClB,iBAAiB,KAAK,IAAI,gBAAgB,IAAI;MACzC,IAAI,SAAS,KAClB,iBAAiB,KAAK,IAAI,gBAAgB,IAAI;MACzC,IAAI,SAAS,KAClB,iBAAiB,KAAK,IAAI,gBAAgB,IAAI;MAG9C,iBAAiB,KAAK,IAAI,gBAAgB,IAAI;CAKhD,MAAM,kBAAkB,aACpB,kBACA,KAAK,IAAI,iBAAiB,QAAQ,MAAM,MAAM,IAAI;CAMtD,MAAM,kBAAkB,aACpB,mBAAmB,IAAI,KACvB,mBAAmB,IAAI;CAU3B,MAAM,eAAe,aACjB,KAAK,IAAI,gBAAgB,mBAAmB,IAAI,GAAG,GACnD,KAAK,IAAI,gBAAgB,mBAAmB,IAAI,GAAG;CAGvD,MAAM,YAAY,KAAK,IACrB,KAAK,IAAI,gBAAgB,iBAAiB,aAAa,EACvD,KAAK,IAAI,GAJW,KAAK,IAAI,KAAK,aAItB,CAAc,CAC3B;CACD,MAAM,aAAa,aAAa,aAAa,IAAI,KAAK,aAAa,IAAI;CAIvE,MAAM,kBAAkB,8BAA8B,UAAU;CAMhE,MAAM,QAFiB,YAAY,gBAAgB,cAEpB;CAE/B,OAAO;EACL,IAAI,QAAQ,aAAa;EACzB,GAAG;EACH,OAAO;EACP,QAAQ;EACR;EACA,kBAAkB,gBAAgB;EAClC,kBAAkB,gBAAgB;EACnC"}
@@ -47,15 +47,6 @@ export interface TouchTargetSize {
47
47
  * @param width - Viewport width in pixels
48
48
  * @returns Viewport size category
49
49
  *
50
- * @example
51
- * ```typescript
52
- * getViewportSize(375); // 'xs' (iPhone SE)
53
- * getViewportSize(768); // 'sm' (Standard phones, high-end mobiles start here)
54
- * getViewportSize(2712); // 'md' (Motorola Edge 60 Pro Super HD)
55
- * getViewportSize(1200); // 'lg' (Desktop)
56
- * ```
57
- *
58
- * @public
59
50
  * @korean 뷰포트크기얻기
60
51
  */
61
52
  export declare function getViewportSize(width: number): ViewportSize;
@@ -70,16 +61,6 @@ export declare function getViewportSize(width: number): ViewportSize;
70
61
  * @param viewportWidth - Optional viewport width for fine-tuning
71
62
  * @returns Touch target size configuration
72
63
  *
73
- * @example
74
- * ```typescript
75
- * const buttonSize = getTouchTargetSize(true, 375);
76
- * // { minWidth: 48, minHeight: 48, padding: 12, spacing: 8 }
77
- *
78
- * const superHDButtonSize = getTouchTargetSize(true, 2712);
79
- * // { minWidth: 56, minHeight: 56, padding: 16, spacing: 12 }
80
- * ```
81
- *
82
- * @public
83
64
  * @korean 터치타겟크기얻기
84
65
  */
85
66
  export declare function getTouchTargetSize(isMobile: boolean, viewportWidth?: number): TouchTargetSize;
@@ -93,15 +74,6 @@ export declare function getTouchTargetSize(isMobile: boolean, viewportWidth?: nu
93
74
  * @param viewportWidth - Viewport width in pixels
94
75
  * @returns Font size in pixels
95
76
  *
96
- * @example
97
- * ```typescript
98
- * getMobileKoreanFontSize('SMALL', 375); // 16
99
- * getMobileKoreanFontSize('MEDIUM', 410); // 18
100
- * getMobileKoreanFontSize('MEDIUM', 2712); // 20 (Super HD enhanced)
101
- * getMobileKoreanFontSize('LARGE', 768); // 24
102
- * ```
103
- *
104
- * @public
105
77
  * @korean 모바일한글글꼴크기얻기
106
78
  */
107
79
  export declare function getMobileKoreanFontSize(size: keyof typeof KOREAN_MOBILE_FONT_SIZES, viewportWidth: number): number;
@@ -113,13 +85,6 @@ export declare function getMobileKoreanFontSize(size: keyof typeof KOREAN_MOBILE
113
85
  * @param isMobile - Whether on mobile device
114
86
  * @returns Scaled spacing in pixels
115
87
  *
116
- * @example
117
- * ```typescript
118
- * getResponsiveSpacing(SPACING.MD, true); // 12 (COMPACT on mobile)
119
- * getResponsiveSpacing(SPACING.MD, false); // 16 (original)
120
- * ```
121
- *
122
- * @public
123
88
  * @korean 반응형간격얻기
124
89
  */
125
90
  export declare function getResponsiveSpacing(baseSpacing: number, isMobile: boolean): number;
@@ -132,13 +97,6 @@ export declare function getResponsiveSpacing(baseSpacing: number, isMobile: bool
132
97
  * @param minMargin - Minimum margin on each side (default: 20px)
133
98
  * @returns Panel width in pixels
134
99
  *
135
- * @example
136
- * ```typescript
137
- * getResponsivePanelWidth(375, true); // ~335px (375 - 40 margin)
138
- * getResponsivePanelWidth(1200, false); // ~400px (max width applied)
139
- * ```
140
- *
141
- * @public
142
100
  * @korean 반응형패널폭얻기
143
101
  */
144
102
  export declare function getResponsivePanelWidth(viewportWidth: number, isMobile: boolean, minMargin?: number): number;
@@ -149,13 +107,6 @@ export declare function getResponsivePanelWidth(viewportWidth: number, isMobile:
149
107
  * @param viewportHeight - Viewport height in pixels
150
108
  * @returns Whether in landscape orientation
151
109
  *
152
- * @example
153
- * ```typescript
154
- * isLandscape(812, 375); // true (iPhone X landscape)
155
- * isLandscape(375, 812); // false (iPhone X portrait)
156
- * ```
157
- *
158
- * @public
159
110
  * @korean 가로모드여부
160
111
  */
161
112
  export declare function isLandscape(viewportWidth: number, viewportHeight: number): boolean;
@@ -166,19 +117,6 @@ export declare function isLandscape(viewportWidth: number, viewportHeight: numbe
166
117
  * @param viewportWidth - Optional viewport width
167
118
  * @returns CSS properties for button
168
119
  *
169
- * @example
170
- * ```typescript
171
- * const buttonStyles = getResponsiveButtonStyles(true, 375);
172
- * // {
173
- * // minWidth: '48px',
174
- * // minHeight: '48px',
175
- * // padding: '12px',
176
- * // fontSize: '16px',
177
- * // ...
178
- * // }
179
- * ```
180
- *
181
- * @public
182
120
  * @korean 반응형버튼스타일얻기
183
121
  */
184
122
  export declare function getResponsiveButtonStyles(isMobile: boolean, viewportWidth?: number): React.CSSProperties;
@@ -190,17 +128,6 @@ export declare function getResponsiveButtonStyles(isMobile: boolean, viewportWid
190
128
  * @param viewportWidth - Viewport width in pixels
191
129
  * @returns CSS properties for text
192
130
  *
193
- * @example
194
- * ```typescript
195
- * const textStyles = getResponsiveTextStyles('MEDIUM', true, 375);
196
- * // {
197
- * // fontSize: '18px',
198
- * // lineHeight: '1.5',
199
- * // letterSpacing: '0.02em',
200
- * // }
201
- * ```
202
- *
203
- * @public
204
131
  * @korean 반응형텍스트스타일얻기
205
132
  */
206
133
  export declare function getResponsiveTextStyles(size: keyof typeof KOREAN_MOBILE_FONT_SIZES, isMobile: boolean, viewportWidth: number): React.CSSProperties;
@@ -211,13 +138,6 @@ export declare function getResponsiveTextStyles(size: keyof typeof KOREAN_MOBILE
211
138
  * @param isMobile - Whether on mobile device
212
139
  * @returns Minimum spacing in pixels
213
140
  *
214
- * @example
215
- * ```typescript
216
- * getMinimumInteractiveSpacing(true); // 8px (mobile)
217
- * getMinimumInteractiveSpacing(false); // 12px (desktop)
218
- * ```
219
- *
220
- * @public
221
141
  * @korean 최소상호작용간격얻기
222
142
  */
223
143
  export declare function getMinimumInteractiveSpacing(isMobile: boolean): number;
@@ -230,15 +150,9 @@ export declare function getMinimumInteractiveSpacing(isMobile: boolean): number;
230
150
  * @korean 뷰포트감지
231
151
  */
232
152
  export declare const ViewportDetection: {
233
- /**
234
- * Check if iPhone SE or similar small device
235
- * @korean iPhone SE여부
236
- */
153
+ /** Check if iPhone SE or similar small device @korean iPhone SE여부 */
237
154
  readonly isSmallMobile: (width: number) => boolean;
238
- /**
239
- * Check if standard mobile device (excluding high-end)
240
- * @korean 표준모바일여부
241
- */
155
+ /** Check if standard mobile device (excluding high-end) @korean 표준모바일여부 */
242
156
  readonly isMobile: (width: number) => boolean;
243
157
  /**
244
158
  * Check if high-end mobile device (Super HD, 2K+)
@@ -247,20 +161,11 @@ export declare const ViewportDetection: {
247
161
  * @korean 고급모바일여부
248
162
  */
249
163
  readonly isSuperHDMobile: (width: number, height?: number) => boolean;
250
- /**
251
- * Check if tablet device
252
- * @korean 태블릿여부
253
- */
164
+ /** Check if tablet device @korean 태블릿여부 */
254
165
  readonly isTablet: (width: number) => boolean;
255
- /**
256
- * Check if desktop device
257
- * @korean 데스크톱여부
258
- */
166
+ /** Check if desktop device @korean 데스크톱여부 */
259
167
  readonly isDesktop: (width: number) => boolean;
260
- /**
261
- * Check if device has notch (iPhone X+)
262
- * @korean 노치여부
263
- */
168
+ /** Check if device has notch (iPhone X+) @korean 노치여부 */
264
169
  readonly hasNotch: (width: number, height: number) => boolean;
265
170
  };
266
171
  //# sourceMappingURL=mobileUIUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mobileUIUtils.d.ts","sourceRoot":"","sources":["../../src/utils/mobileUIUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EACL,wBAAwB,EAEzB,MAAM,+BAA+B,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAM3D;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,OAAO,EACjB,aAAa,CAAC,EAAE,MAAM,GACrB,eAAe,CA8BjB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,OAAO,wBAAwB,EAC3C,aAAa,EAAE,MAAM,GACpB,MAAM,CAUR;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,OAAO,GAChB,MAAM,CAER;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,OAAO,EACjB,SAAS,SAAK,GACb,MAAM,CAOR;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CACzB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,OAAO,CAET;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,OAAO,EACjB,aAAa,CAAC,EAAE,MAAM,GACrB,KAAK,CAAC,aAAa,CAgBrB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,OAAO,wBAAwB,EAC3C,QAAQ,EAAE,OAAO,EACjB,aAAa,EAAE,MAAM,GACpB,KAAK,CAAC,aAAa,CAUrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAItE;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB;IAC5B;;;OAGG;oCACoB,MAAM;IAE7B;;;OAGG;+BACe,MAAM;IAExB;;;;;OAKG;sCACsB,MAAM,WAAU,MAAM;IAO/C;;;OAGG;+BACe,MAAM;IAExB;;;OAGG;gCACgB,MAAM;IAEzB;;;OAGG;+BACe,MAAM,UAAU,MAAM;CAMhC,CAAC"}
1
+ {"version":3,"file":"mobileUIUtils.d.ts","sourceRoot":"","sources":["../../src/utils/mobileUIUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EACL,wBAAwB,EAEzB,MAAM,+BAA+B,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAM3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,OAAO,EACjB,aAAa,CAAC,EAAE,MAAM,GACrB,eAAe,CA8BjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,OAAO,wBAAwB,EAC3C,aAAa,EAAE,MAAM,GACpB,MAAM,CAUR;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,OAAO,GAChB,MAAM,CAER;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,OAAO,EACjB,SAAS,SAAK,GACb,MAAM,CAOR;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,OAAO,CAET;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,OAAO,EACjB,aAAa,CAAC,EAAE,MAAM,GACrB,KAAK,CAAC,aAAa,CAgBrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,OAAO,wBAAwB,EAC3C,QAAQ,EAAE,OAAO,EACjB,aAAa,EAAE,MAAM,GACpB,KAAK,CAAC,aAAa,CAUrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAItE;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB;IAC5B,qEAAqE;oCAC9C,MAAM;IAE7B,2EAA2E;+BACzD,MAAM;IAExB;;;;;OAKG;sCACsB,MAAM,WAAU,MAAM;IAO/C,2CAA2C;+BACzB,MAAM;IAExB,6CAA6C;gCAC1B,MAAM;IAEzB,yDAAyD;+BACvC,MAAM,UAAU,MAAM;CAMhC,CAAC"}
@@ -10,15 +10,6 @@ import { getKoreanFontSize } from "../types/constants/typography.js";
10
10
  * @param viewportWidth - Viewport width in pixels
11
11
  * @returns Font size in pixels
12
12
  *
13
- * @example
14
- * ```typescript
15
- * getMobileKoreanFontSize('SMALL', 375); // 16
16
- * getMobileKoreanFontSize('MEDIUM', 410); // 18
17
- * getMobileKoreanFontSize('MEDIUM', 2712); // 20 (Super HD enhanced)
18
- * getMobileKoreanFontSize('LARGE', 768); // 24
19
- * ```
20
- *
21
- * @public
22
13
  * @korean 모바일한글글꼴크기얻기
23
14
  */
24
15
  function getMobileKoreanFontSize(size, viewportWidth) {
@@ -1 +1 @@
1
- {"version":3,"file":"mobileUIUtils.js","names":[],"sources":["../../src/utils/mobileUIUtils.ts"],"sourcesContent":["/**\n * Mobile UI utilities for responsive touch-optimized interfaces\n * \n * Provides helpers for touch target sizing, responsive font scaling,\n * and mobile-specific layout calculations following iOS/Android guidelines.\n * \n * PRIORITY: High-end mobile devices (Super HD, 2K+) are top priority and get:\n * - Enhanced touch targets (56px vs 48px)\n * - Larger Korean fonts (+10% for better readability)\n * - Optimized spacing and layout\n * - Full feature parity with desktop\n * \n * Supported Devices (Priority Order):\n * 1. Super HD Mobile (≥768px): Motorola Edge 60 Pro, Galaxy S-series\n * 2. Standard Mobile (375-767px): iPhone 12/13/14, standard Android\n * 3. Small Mobile (<375px): iPhone SE, budget devices\n * \n * @module utils/mobileUIUtils\n * @category Mobile Utilities\n * @korean 모바일UI유틸리티\n */\n\nimport { UI_DIMENSIONS, SPACING } from \"../types/constants/ui\";\nimport {\n KOREAN_MOBILE_FONT_SIZES,\n getKoreanFontSize,\n} from \"../types/constants/typography\";\n\n/**\n * Viewport size category for responsive design\n * \n * @category Mobile UI\n * @korean 뷰포트크기범주\n */\nexport type ViewportSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\n/**\n * Touch target size configuration\n * \n * @category Mobile UI\n * @korean 터치타겟크기설정\n */\nexport interface TouchTargetSize {\n readonly minWidth: number;\n readonly minHeight: number;\n readonly padding: number;\n readonly spacing: number;\n}\n\n/**\n * Get viewport size category from width\n * \n * PRIORITY: High-end mobile devices (Super HD, 2K+) are treated as 'md' for optimal layout\n * \n * @param width - Viewport width in pixels\n * @returns Viewport size category\n * \n * @example\n * ```typescript\n * getViewportSize(375); // 'xs' (iPhone SE)\n * getViewportSize(768); // 'sm' (Standard phones, high-end mobiles start here)\n * getViewportSize(2712); // 'md' (Motorola Edge 60 Pro Super HD)\n * getViewportSize(1200); // 'lg' (Desktop)\n * ```\n * \n * @public\n * @korean 뷰포트크기얻기\n */\nexport function getViewportSize(width: number): ViewportSize {\n if (width < 375) return \"xs\"; // Extra small phones\n if (width < 768) return \"sm\"; // Standard phones\n if (width < 1024) return \"md\"; // High-end mobile (Super HD), tablets\n if (width < 1440) return \"lg\"; // Small desktop\n return \"xl\"; // Large desktop\n}\n\n/**\n * Get touch-optimized button size configuration\n * Ensures minimum 48px touch targets per iOS/Android guidelines\n * \n * PRIORITY: High-end mobile devices (Super HD, 2K+) get enhanced touch targets (56px)\n * for better precision on high-resolution displays\n * \n * @param isMobile - Whether on mobile device\n * @param viewportWidth - Optional viewport width for fine-tuning\n * @returns Touch target size configuration\n * \n * @example\n * ```typescript\n * const buttonSize = getTouchTargetSize(true, 375);\n * // { minWidth: 48, minHeight: 48, padding: 12, spacing: 8 }\n * \n * const superHDButtonSize = getTouchTargetSize(true, 2712);\n * // { minWidth: 56, minHeight: 56, padding: 16, spacing: 12 }\n * ```\n * \n * @public\n * @korean 터치타겟크기얻기\n */\nexport function getTouchTargetSize(\n isMobile: boolean,\n viewportWidth?: number\n): TouchTargetSize {\n if (!isMobile) {\n return {\n minWidth: 120,\n minHeight: 44,\n padding: SPACING.MD,\n spacing: SPACING.MD,\n };\n }\n\n const width = viewportWidth ?? 375;\n const isExtraSmall = width < 360;\n const isSuperHD = width >= 768; // High-end mobile (Motorola Edge 60 Pro, etc.)\n\n // Super HD devices get enhanced touch targets for better precision\n if (isSuperHD) {\n return {\n minWidth: UI_DIMENSIONS.TOUCH_TARGET_COMFORTABLE,\n minHeight: UI_DIMENSIONS.TOUCH_TARGET_COMFORTABLE,\n padding: SPACING.MD,\n spacing: SPACING.COMPACT,\n };\n }\n\n return {\n minWidth: UI_DIMENSIONS.TOUCH_TARGET_MIN,\n minHeight: UI_DIMENSIONS.TOUCH_TARGET_MIN,\n padding: isExtraSmall ? SPACING.SM : SPACING.COMPACT,\n spacing: UI_DIMENSIONS.TOUCH_TARGET_SPACING,\n };\n}\n\n/**\n * Get responsive Korean font size for mobile\n * Ensures minimum 16px for body text on mobile\n * \n * PRIORITY: High-end mobile (Super HD, 2K+) get enhanced font sizes for better readability\n * \n * @param size - Size category ('SMALL', 'MEDIUM', 'LARGE')\n * @param viewportWidth - Viewport width in pixels\n * @returns Font size in pixels\n * \n * @example\n * ```typescript\n * getMobileKoreanFontSize('SMALL', 375); // 16\n * getMobileKoreanFontSize('MEDIUM', 410); // 18\n * getMobileKoreanFontSize('MEDIUM', 2712); // 20 (Super HD enhanced)\n * getMobileKoreanFontSize('LARGE', 768); // 24\n * ```\n * \n * @public\n * @korean 모바일한글글꼴크기얻기\n */\nexport function getMobileKoreanFontSize(\n size: keyof typeof KOREAN_MOBILE_FONT_SIZES,\n viewportWidth: number\n): number {\n const fontSize = getKoreanFontSize(size, viewportWidth);\n \n // Super HD mobile devices (≥768px) get enhanced font sizes\n // for better readability on high-resolution displays\n if (viewportWidth >= 768) {\n return Math.ceil(fontSize * 1.1); // 10% larger for Super HD\n }\n \n return fontSize;\n}\n\n/**\n * Get responsive spacing value\n * Scales spacing based on viewport size\n * \n * @param baseSpacing - Base spacing value from SPACING constant\n * @param isMobile - Whether on mobile device\n * @returns Scaled spacing in pixels\n * \n * @example\n * ```typescript\n * getResponsiveSpacing(SPACING.MD, true); // 12 (COMPACT on mobile)\n * getResponsiveSpacing(SPACING.MD, false); // 16 (original)\n * ```\n * \n * @public\n * @korean 반응형간격얻기\n */\nexport function getResponsiveSpacing(\n baseSpacing: number,\n isMobile: boolean\n): number {\n return isMobile ? Math.max(SPACING.SM, baseSpacing * 0.75) : baseSpacing;\n}\n\n/**\n * Calculate responsive panel width\n * Ensures panels fit within viewport with proper margins\n * \n * @param viewportWidth - Viewport width in pixels\n * @param isMobile - Whether on mobile device\n * @param minMargin - Minimum margin on each side (default: 20px)\n * @returns Panel width in pixels\n * \n * @example\n * ```typescript\n * getResponsivePanelWidth(375, true); // ~335px (375 - 40 margin)\n * getResponsivePanelWidth(1200, false); // ~400px (max width applied)\n * ```\n * \n * @public\n * @korean 반응형패널폭얻기\n */\nexport function getResponsivePanelWidth(\n viewportWidth: number,\n isMobile: boolean,\n minMargin = 20\n): number {\n if (!isMobile) {\n return Math.min(400, viewportWidth - minMargin * 2);\n }\n\n // Mobile: use most of screen width\n return Math.min(viewportWidth - minMargin * 2, 360);\n}\n\n/**\n * Check if viewport is in landscape orientation\n * \n * @param viewportWidth - Viewport width in pixels\n * @param viewportHeight - Viewport height in pixels\n * @returns Whether in landscape orientation\n * \n * @example\n * ```typescript\n * isLandscape(812, 375); // true (iPhone X landscape)\n * isLandscape(375, 812); // false (iPhone X portrait)\n * ```\n * \n * @public\n * @korean 가로모드여부\n */\nexport function isLandscape(\n viewportWidth: number,\n viewportHeight: number\n): boolean {\n return viewportWidth > viewportHeight;\n}\n\n/**\n * Get responsive button styles for touch optimization\n * \n * @param isMobile - Whether on mobile device\n * @param viewportWidth - Optional viewport width\n * @returns CSS properties for button\n * \n * @example\n * ```typescript\n * const buttonStyles = getResponsiveButtonStyles(true, 375);\n * // {\n * // minWidth: '48px',\n * // minHeight: '48px',\n * // padding: '12px',\n * // fontSize: '16px',\n * // ...\n * // }\n * ```\n * \n * @public\n * @korean 반응형버튼스타일얻기\n */\nexport function getResponsiveButtonStyles(\n isMobile: boolean,\n viewportWidth?: number\n): React.CSSProperties {\n const touchTarget = getTouchTargetSize(isMobile, viewportWidth);\n const fontSize = isMobile\n ? getMobileKoreanFontSize(\"SMALL\", viewportWidth ?? 375)\n : 16;\n\n return {\n minWidth: `${touchTarget.minWidth}px`,\n minHeight: `${touchTarget.minHeight}px`,\n padding: `${touchTarget.padding}px`,\n fontSize: `${fontSize}px`,\n lineHeight: \"1.4\",\n cursor: \"pointer\",\n userSelect: \"none\",\n WebkitTapHighlightColor: \"transparent\",\n };\n}\n\n/**\n * Get responsive text styles with proper Korean font sizing\n * \n * @param size - Font size category\n * @param isMobile - Whether on mobile device\n * @param viewportWidth - Viewport width in pixels\n * @returns CSS properties for text\n * \n * @example\n * ```typescript\n * const textStyles = getResponsiveTextStyles('MEDIUM', true, 375);\n * // {\n * // fontSize: '18px',\n * // lineHeight: '1.5',\n * // letterSpacing: '0.02em',\n * // }\n * ```\n * \n * @public\n * @korean 반응형텍스트스타일얻기\n */\nexport function getResponsiveTextStyles(\n size: keyof typeof KOREAN_MOBILE_FONT_SIZES,\n isMobile: boolean,\n viewportWidth: number\n): React.CSSProperties {\n const fontSize = isMobile\n ? getMobileKoreanFontSize(size, viewportWidth)\n : KOREAN_MOBILE_FONT_SIZES[size].regular;\n\n return {\n fontSize: `${fontSize}px`,\n lineHeight: isMobile ? \"1.5\" : \"1.4\",\n letterSpacing: \"0.02em\",\n };\n}\n\n/**\n * Calculate minimum spacing between interactive elements\n * Ensures adequate spacing for touch accuracy\n * \n * @param isMobile - Whether on mobile device\n * @returns Minimum spacing in pixels\n * \n * @example\n * ```typescript\n * getMinimumInteractiveSpacing(true); // 8px (mobile)\n * getMinimumInteractiveSpacing(false); // 12px (desktop)\n * ```\n * \n * @public\n * @korean 최소상호작용간격얻기\n */\nexport function getMinimumInteractiveSpacing(isMobile: boolean): number {\n return isMobile\n ? UI_DIMENSIONS.TOUCH_TARGET_SPACING\n : SPACING.COMPACT;\n}\n\n/**\n * Viewport detection utilities\n * \n * PRIORITY: High-end mobile devices (Super HD, 2K+) are explicitly supported\n * \n * @category Mobile UI\n * @korean 뷰포트감지\n */\nexport const ViewportDetection = {\n /**\n * Check if iPhone SE or similar small device\n * @korean iPhone SE여부\n */\n isSmallMobile: (width: number) => width <= 375,\n\n /**\n * Check if standard mobile device (excluding high-end)\n * @korean 표준모바일여부\n */\n isMobile: (width: number) => width < 768,\n\n /**\n * Check if high-end mobile device (Super HD, 2K+)\n * Uses height + DPR to distinguish phones from tablets\n * High-end phones: short side 400-600px, long side >=800px, DPR >=2\n * @korean 고급모바일여부\n */\n isSuperHDMobile: (width: number, height: number = window.innerHeight) => {\n const shortSide = Math.min(width, height);\n const longSide = Math.max(width, height);\n const dpr = window.devicePixelRatio || 1;\n return shortSide >= 400 && shortSide <= 600 && longSide >= 800 && dpr >= 2;\n },\n\n /**\n * Check if tablet device\n * @korean 태블릿여부\n */\n isTablet: (width: number) => width >= 768 && width < 1024,\n\n /**\n * Check if desktop device\n * @korean 데스크톱여부\n */\n isDesktop: (width: number) => width >= 1024,\n\n /**\n * Check if device has notch (iPhone X+)\n * @korean 노치여부\n */\n hasNotch: (width: number, height: number) =>\n (width === 375 && height === 812) || // iPhone X, XS, 11 Pro\n (width === 414 && height === 896) || // iPhone XR, XS Max, 11, 11 Pro Max\n (width === 390 && height === 844) || // iPhone 12, 12 Pro, 13, 13 Pro, 14\n (width === 393 && height === 852) || // iPhone 14 Pro\n (width === 428 && height === 926), // iPhone 12/13/14 Pro Max\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA2JA,SAAgB,wBACd,MACA,eACQ;CACR,MAAM,WAAW,kBAAkB,MAAM,cAAc;CAIvD,IAAI,iBAAiB,KACnB,OAAO,KAAK,KAAK,WAAW,IAAI;CAGlC,OAAO"}
1
+ {"version":3,"file":"mobileUIUtils.js","names":[],"sources":["../../src/utils/mobileUIUtils.ts"],"sourcesContent":["/**\n * Mobile UI utilities for responsive touch-optimized interfaces\n * \n * Provides helpers for touch target sizing, responsive font scaling,\n * and mobile-specific layout calculations following iOS/Android guidelines.\n * \n * PRIORITY: High-end mobile devices (Super HD, 2K+) are top priority and get:\n * - Enhanced touch targets (56px vs 48px)\n * - Larger Korean fonts (+10% for better readability)\n * - Optimized spacing and layout\n * - Full feature parity with desktop\n * \n * Supported Devices (Priority Order):\n * 1. Super HD Mobile (≥768px): Motorola Edge 60 Pro, Galaxy S-series\n * 2. Standard Mobile (375-767px): iPhone 12/13/14, standard Android\n * 3. Small Mobile (<375px): iPhone SE, budget devices\n * \n * @module utils/mobileUIUtils\n * @category Mobile Utilities\n * @korean 모바일UI유틸리티\n */\n\nimport { UI_DIMENSIONS, SPACING } from \"../types/constants/ui\";\nimport {\n KOREAN_MOBILE_FONT_SIZES,\n getKoreanFontSize,\n} from \"../types/constants/typography\";\n\n/**\n * Viewport size category for responsive design\n * \n * @category Mobile UI\n * @korean 뷰포트크기범주\n */\nexport type ViewportSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\n/**\n * Touch target size configuration\n * \n * @category Mobile UI\n * @korean 터치타겟크기설정\n */\nexport interface TouchTargetSize {\n readonly minWidth: number;\n readonly minHeight: number;\n readonly padding: number;\n readonly spacing: number;\n}\n\n/**\n * Get viewport size category from width\n * \n * PRIORITY: High-end mobile devices (Super HD, 2K+) are treated as 'md' for optimal layout\n * \n * @param width - Viewport width in pixels\n * @returns Viewport size category\n * \n * @korean 뷰포트크기얻기\n */\nexport function getViewportSize(width: number): ViewportSize {\n if (width < 375) return \"xs\"; // Extra small phones\n if (width < 768) return \"sm\"; // Standard phones\n if (width < 1024) return \"md\"; // High-end mobile (Super HD), tablets\n if (width < 1440) return \"lg\"; // Small desktop\n return \"xl\"; // Large desktop\n}\n\n/**\n * Get touch-optimized button size configuration\n * Ensures minimum 48px touch targets per iOS/Android guidelines\n * \n * PRIORITY: High-end mobile devices (Super HD, 2K+) get enhanced touch targets (56px)\n * for better precision on high-resolution displays\n * \n * @param isMobile - Whether on mobile device\n * @param viewportWidth - Optional viewport width for fine-tuning\n * @returns Touch target size configuration\n * \n * @korean 터치타겟크기얻기\n */\nexport function getTouchTargetSize(\n isMobile: boolean,\n viewportWidth?: number\n): TouchTargetSize {\n if (!isMobile) {\n return {\n minWidth: 120,\n minHeight: 44,\n padding: SPACING.MD,\n spacing: SPACING.MD,\n };\n }\n\n const width = viewportWidth ?? 375;\n const isExtraSmall = width < 360;\n const isSuperHD = width >= 768; // High-end mobile (Motorola Edge 60 Pro, etc.)\n\n // Super HD devices get enhanced touch targets for better precision\n if (isSuperHD) {\n return {\n minWidth: UI_DIMENSIONS.TOUCH_TARGET_COMFORTABLE,\n minHeight: UI_DIMENSIONS.TOUCH_TARGET_COMFORTABLE,\n padding: SPACING.MD,\n spacing: SPACING.COMPACT,\n };\n }\n\n return {\n minWidth: UI_DIMENSIONS.TOUCH_TARGET_MIN,\n minHeight: UI_DIMENSIONS.TOUCH_TARGET_MIN,\n padding: isExtraSmall ? SPACING.SM : SPACING.COMPACT,\n spacing: UI_DIMENSIONS.TOUCH_TARGET_SPACING,\n };\n}\n\n/**\n * Get responsive Korean font size for mobile\n * Ensures minimum 16px for body text on mobile\n * \n * PRIORITY: High-end mobile (Super HD, 2K+) get enhanced font sizes for better readability\n * \n * @param size - Size category ('SMALL', 'MEDIUM', 'LARGE')\n * @param viewportWidth - Viewport width in pixels\n * @returns Font size in pixels\n * \n * @korean 모바일한글글꼴크기얻기\n */\nexport function getMobileKoreanFontSize(\n size: keyof typeof KOREAN_MOBILE_FONT_SIZES,\n viewportWidth: number\n): number {\n const fontSize = getKoreanFontSize(size, viewportWidth);\n \n // Super HD mobile devices (≥768px) get enhanced font sizes\n // for better readability on high-resolution displays\n if (viewportWidth >= 768) {\n return Math.ceil(fontSize * 1.1); // 10% larger for Super HD\n }\n \n return fontSize;\n}\n\n/**\n * Get responsive spacing value\n * Scales spacing based on viewport size\n * \n * @param baseSpacing - Base spacing value from SPACING constant\n * @param isMobile - Whether on mobile device\n * @returns Scaled spacing in pixels\n * \n * @korean 반응형간격얻기\n */\nexport function getResponsiveSpacing(\n baseSpacing: number,\n isMobile: boolean\n): number {\n return isMobile ? Math.max(SPACING.SM, baseSpacing * 0.75) : baseSpacing;\n}\n\n/**\n * Calculate responsive panel width\n * Ensures panels fit within viewport with proper margins\n * \n * @param viewportWidth - Viewport width in pixels\n * @param isMobile - Whether on mobile device\n * @param minMargin - Minimum margin on each side (default: 20px)\n * @returns Panel width in pixels\n * \n * @korean 반응형패널폭얻기\n */\nexport function getResponsivePanelWidth(\n viewportWidth: number,\n isMobile: boolean,\n minMargin = 20\n): number {\n if (!isMobile) {\n return Math.min(400, viewportWidth - minMargin * 2);\n }\n\n // Mobile: use most of screen width\n return Math.min(viewportWidth - minMargin * 2, 360);\n}\n\n/**\n * Check if viewport is in landscape orientation\n * \n * @param viewportWidth - Viewport width in pixels\n * @param viewportHeight - Viewport height in pixels\n * @returns Whether in landscape orientation\n * \n * @korean 가로모드여부\n */\nexport function isLandscape(\n viewportWidth: number,\n viewportHeight: number\n): boolean {\n return viewportWidth > viewportHeight;\n}\n\n/**\n * Get responsive button styles for touch optimization\n * \n * @param isMobile - Whether on mobile device\n * @param viewportWidth - Optional viewport width\n * @returns CSS properties for button\n * \n * @korean 반응형버튼스타일얻기\n */\nexport function getResponsiveButtonStyles(\n isMobile: boolean,\n viewportWidth?: number\n): React.CSSProperties {\n const touchTarget = getTouchTargetSize(isMobile, viewportWidth);\n const fontSize = isMobile\n ? getMobileKoreanFontSize(\"SMALL\", viewportWidth ?? 375)\n : 16;\n\n return {\n minWidth: `${touchTarget.minWidth}px`,\n minHeight: `${touchTarget.minHeight}px`,\n padding: `${touchTarget.padding}px`,\n fontSize: `${fontSize}px`,\n lineHeight: \"1.4\",\n cursor: \"pointer\",\n userSelect: \"none\",\n WebkitTapHighlightColor: \"transparent\",\n };\n}\n\n/**\n * Get responsive text styles with proper Korean font sizing\n * \n * @param size - Font size category\n * @param isMobile - Whether on mobile device\n * @param viewportWidth - Viewport width in pixels\n * @returns CSS properties for text\n * \n * @korean 반응형텍스트스타일얻기\n */\nexport function getResponsiveTextStyles(\n size: keyof typeof KOREAN_MOBILE_FONT_SIZES,\n isMobile: boolean,\n viewportWidth: number\n): React.CSSProperties {\n const fontSize = isMobile\n ? getMobileKoreanFontSize(size, viewportWidth)\n : KOREAN_MOBILE_FONT_SIZES[size].regular;\n\n return {\n fontSize: `${fontSize}px`,\n lineHeight: isMobile ? \"1.5\" : \"1.4\",\n letterSpacing: \"0.02em\",\n };\n}\n\n/**\n * Calculate minimum spacing between interactive elements\n * Ensures adequate spacing for touch accuracy\n * \n * @param isMobile - Whether on mobile device\n * @returns Minimum spacing in pixels\n * \n * @korean 최소상호작용간격얻기\n */\nexport function getMinimumInteractiveSpacing(isMobile: boolean): number {\n return isMobile\n ? UI_DIMENSIONS.TOUCH_TARGET_SPACING\n : SPACING.COMPACT;\n}\n\n/**\n * Viewport detection utilities\n * \n * PRIORITY: High-end mobile devices (Super HD, 2K+) are explicitly supported\n * \n * @category Mobile UI\n * @korean 뷰포트감지\n */\nexport const ViewportDetection = {\n /** Check if iPhone SE or similar small device @korean iPhone SE여부 */\n isSmallMobile: (width: number) => width <= 375,\n\n /** Check if standard mobile device (excluding high-end) @korean 표준모바일여부 */\n isMobile: (width: number) => width < 768,\n\n /**\n * Check if high-end mobile device (Super HD, 2K+)\n * Uses height + DPR to distinguish phones from tablets\n * High-end phones: short side 400-600px, long side >=800px, DPR >=2\n * @korean 고급모바일여부\n */\n isSuperHDMobile: (width: number, height: number = window.innerHeight) => {\n const shortSide = Math.min(width, height);\n const longSide = Math.max(width, height);\n const dpr = window.devicePixelRatio || 1;\n return shortSide >= 400 && shortSide <= 600 && longSide >= 800 && dpr >= 2;\n },\n\n /** Check if tablet device @korean 태블릿여부 */\n isTablet: (width: number) => width >= 768 && width < 1024,\n\n /** Check if desktop device @korean 데스크톱여부 */\n isDesktop: (width: number) => width >= 1024,\n\n /** Check if device has notch (iPhone X+) @korean 노치여부 */\n hasNotch: (width: number, height: number) =>\n (width === 375 && height === 812) || // iPhone X, XS, 11 Pro\n (width === 414 && height === 896) || // iPhone XR, XS Max, 11, 11 Pro Max\n (width === 390 && height === 844) || // iPhone 12, 12 Pro, 13, 13 Pro, 14\n (width === 393 && height === 852) || // iPhone 14 Pro\n (width === 428 && height === 926), // iPhone 12/13/14 Pro Max\n} as const;\n"],"mappings":";;;;;;;;;;;;;;AA+HA,SAAgB,wBACd,MACA,eACQ;CACR,MAAM,WAAW,kBAAkB,MAAM,cAAc;CAIvD,IAAI,iBAAiB,KACnB,OAAO,KAAK,KAAK,WAAW,IAAI;CAGlC,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"physicalAttributeValidation.d.ts","sourceRoot":"","sources":["../../src/utils/physicalAttributeValidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBpB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGnE;AAoCD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,kBAAkB,GACxB,gBAAgB,CAwIlB;AAUD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,kBAAkB,CAAC,CA+B7B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,kBAAkB,GACxB,IAAI,CA2BN"}
1
+ {"version":3,"file":"physicalAttributeValidation.d.ts","sourceRoot":"","sources":["../../src/utils/physicalAttributeValidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBpB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGnE;AAoCD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,kBAAkB,GACxB,gBAAgB,CA8HlB;AAUD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,kBAAkB,CAAC,CA4B7B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,kBAAkB,GACxB,IAAI,CA2BN"}
@@ -1 +1 @@
1
- {"version":3,"file":"player3DHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/player3DHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAgFhC;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,cAAc,GACxB,eAAe,CAEjB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAK7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,CAoBvE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACP,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IAE1C,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACjD,GACL,oBAAoB,CA0CtB"}
1
+ {"version":3,"file":"player3DHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/player3DHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAgFhC;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,cAAc,GACxB,eAAe,CAEjB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAK7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,CAiBvE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACP,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IAE1C,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACjD,GACL,oBAAoB,CAoCtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"player3DHelpers.js","names":[],"sources":["../../src/utils/player3DHelpers.ts"],"sourcesContent":["/**\n * Utility functions for Player3D component integration\n *\n * Converts PlayerState from combat system to Player3DUnifiedProps for rendering\n * with SkeletalPlayer3D (28-bone articulated body model).\n *\n * @module utils/player3DHelpers\n * @category Utilities\n * @korean 플레이어3D도우미\n */\n\nimport type { PlayerState } from \"../systems\";\nimport type { AnimationState } from \"../systems/animation/core/types\";\nimport type {\n BalanceState,\n Player3DUnifiedProps,\n PlayerAnimation,\n} from \"../types/player-visual\";\n\n/**\n * Static mapping from AnimationState to PlayerAnimation\n *\n * Stance guard animations map to \"idle\" since SkeletalPlayer3D\n * will handle the stance-specific guard rendering.\n * Tactical steps now use dedicated step animations with guard maintenance.\n *\n * @korean 애니메이션상태맵\n */\nconst ANIMATION_STATE_MAP: Record<AnimationState, PlayerAnimation> = {\n idle: \"idle\",\n walk: \"walk\",\n run: \"run\", // Now uses dedicated RUN_ANIMATION from BasicAnimations\n attack: \"attack\",\n defend: \"defend\",\n // Defensive animations (방어 애니메이션) - map to defend with variations handled by skeletal system\n defend_block_success: \"defend\",\n defend_parry: \"defend\",\n defend_guard_break: \"defend\",\n defend_recovery: \"defend\",\n hit: \"hit\",\n stance_change: \"stance_change\",\n stance_side_switch: \"stance_change\", // Map to stance_change animation (mirroring guard)\n ko: \"death\", // Map ko to death\n // Stance guard animations map to stance-specific idle animations with proper biomechanics\n stance_guard_geon: \"stance_geon\",\n stance_guard_tae: \"stance_tae\",\n stance_guard_li: \"stance_li\",\n stance_guard_jin: \"stance_jin\",\n stance_guard_son: \"stance_son\",\n stance_guard_gam: \"stance_gam\",\n stance_guard_gan: \"stance_gan\",\n stance_guard_gon: \"stance_gon\",\n // Tactical step animations now map to dedicated step animations\n step_forward: \"step_forward\",\n step_back: \"step_back\",\n step_left: \"step_left\",\n step_right: \"step_right\",\n step_forward_left: \"step_forward_left\",\n step_forward_right: \"step_forward_right\",\n step_back_left: \"step_back_left\",\n step_back_right: \"step_back_right\",\n // Fall animations: Now using dedicated FALL_*_ANIMATION from BasicAnimations\n fall_forward: \"fall_forward\",\n fall_backward: \"fall_backward\",\n fall_side_left: \"fall_side_left\",\n fall_side_right: \"fall_side_right\",\n // Ground states map to idle with minimal movement\n ground_prone: \"idle\",\n ground_supine: \"idle\",\n ground_side_left: \"idle\",\n ground_side_right: \"idle\",\n // 180-degree turn animations map to stance_change (body pivot animation)\n turn_left: \"stance_change\",\n turn_right: \"stance_change\",\n // Footwork patterns (보법) - Korean martial arts specialized footwork\n footwork_circular_left: \"walk\", // Lateral movement\n footwork_circular_right: \"walk\",\n footwork_pivot_left: \"walk\", // Rotation movement\n footwork_pivot_right: \"walk\",\n footwork_slide_forward: \"walk\", // Sliding movement\n footwork_slide_back: \"walk\",\n footwork_slide_left: \"walk\",\n footwork_slide_right: \"walk\",\n footwork_shuffle: \"walk\", // Quick adjustment\n // Recovery animations (기상 애니메이션) - Getting up from ground states\n // Map to idle for now, custom 3D recovery animations will be added in future\n recovery_prone_standup: \"idle\",\n recovery_supine_standup: \"idle\",\n recovery_roll: \"walk\", // Rolling motion approximated by walk\n recovery_defensive: \"defend\", // Guarded getup approximated by defend\n // Grappling animations (잡기 애니메이션) - map to attack/defend based on action\n grapple_entry: \"attack\", // Initiating grab uses attack animation\n grapple_control: \"defend\", // Maintaining control uses defensive stance\n grapple_struggle: \"hit\", // Struggling escape uses hit reaction\n grapple_escape: \"attack\", // Successful escape uses attack burst\n};\n\n/**\n * Convert AnimationState to PlayerAnimation\n *\n * Maps the animation system's state types to SkeletalPlayer3D's animation types.\n *\n * @param animState - Animation state from the animation system\n * @returns Corresponding PlayerAnimation type\n * @korean 애니메이션상태변환\n */\nexport function animationStateToPlayerAnimation(\n animState: AnimationState\n): PlayerAnimation {\n return ANIMATION_STATE_MAP[animState];\n}\n\n/**\n * Convert balance number (0-100) to BalanceState enum\n *\n * @param balance - Balance value from PlayerState (0-100)\n * @returns BalanceState enum value\n * @korean 균형상태변환\n */\nexport function getBalanceState(balance: number): BalanceState {\n if (balance >= 80) return \"READY\";\n if (balance >= 50) return \"SHAKEN\";\n if (balance >= 20) return \"VULNERABLE\";\n return \"HELPLESS\";\n}\n\n/**\n * Get current animation state from PlayerState\n *\n * Returns stance-specific idle animations when player is in idle/recovering state.\n * This ensures each trigram stance displays the correct guard pose with proper\n * leg positioning and breathing animation.\n *\n * @param player - Current player state\n * @returns PlayerAnimation enum value (stance-specific for idle states)\n * @korean 애니메이션상태가져오기\n */\nexport function getPlayerAnimation(player: PlayerState): PlayerAnimation {\n if (player.isStunned) return \"hit\";\n if (player.isBlocking) return \"defend\";\n if (player.isCountering) return \"counter\";\n\n // Check combat state (CombatState enum values are lowercase strings)\n switch (player.combatState) {\n case \"attacking\":\n return \"attack\";\n case \"defending\":\n return \"defend\";\n case \"stunned\":\n return \"hit\";\n case \"recovering\":\n case \"idle\":\n default:\n // Use stance-specific idle animation for proper guard pose\n // This ensures correct leg positioning for each trigram stance\n return `stance_${player.currentStance}` as PlayerAnimation;\n }\n}\n\n/**\n * Converts PlayerState to Player3DUnifiedProps for visual rendering.\n *\n * Note: This function converts base PlayerState properties used in combat.\n * Training-specific stats (misses, accuracy, comboCount) are optional in PlayerState\n * and handled separately in training contexts.\n *\n * @param player - The player state to convert\n * @param position - 3D position [x, y, z]\n * @param rotation - Rotation in radians\n * @param options - Display and behavior options\n * @returns Props for SkeletalPlayer3D component (28-bone articulated body model)\n * @korean 플레이어상태변환\n *\n * @example\n * ```tsx\n * const playerProps = convertPlayerStateToProps(\n * playerState,\n * [-3, 0, 0],\n * 0,\n * { isMobile: false, showVitalPoints: false }\n * );\n *\n * <SkeletalPlayer3D {...playerProps} />\n * ```\n */\nexport function convertPlayerStateToProps(\n player: PlayerState,\n position: [number, number, number],\n rotation: number,\n options: {\n readonly isMobile?: boolean;\n readonly facing?: \"left\" | \"right\";\n readonly scale?: number;\n readonly showDetails?: boolean;\n readonly showHealthBar?: boolean;\n readonly showStanceIndicator?: boolean;\n readonly onAnimationComplete?: () => void;\n // Facial expression options - 얼굴 표정 옵션\n readonly enableFacialExpressions?: boolean;\n readonly enableEyeTracking?: boolean;\n readonly opponentPosition?: [number, number, number];\n } = {}\n): Player3DUnifiedProps {\n return {\n playerId: player.id,\n archetype: player.archetype,\n stance: player.currentStance,\n position,\n rotation,\n\n // Health and resources\n health: player.health,\n maxHealth: player.maxHealth,\n stamina: player.stamina,\n ki: player.ki,\n\n // Combat states\n pain: player.pain,\n balance: getBalanceState(player.balance),\n consciousness: player.consciousness,\n\n // Combat flags\n isBlocking: player.isBlocking,\n isStunned: player.isStunned,\n isCountering: player.isCountering,\n\n // Animation (derived from combat state)\n currentAnimation: getPlayerAnimation(player),\n\n // Display options\n name: player.name,\n isMobile: options.isMobile ?? false,\n facing: options.facing ?? \"right\",\n scale: options.scale ?? 1,\n showDetails: options.showDetails,\n showHealthBar: options.showHealthBar,\n showStanceIndicator: options.showStanceIndicator,\n onAnimationComplete: options.onAnimationComplete,\n\n // Facial expression options - 얼굴 표정 옵션\n enableFacialExpressions: options.enableFacialExpressions ?? false,\n enableEyeTracking: options.enableEyeTracking ?? true,\n opponentPosition: options.opponentPosition,\n };\n}\n"],"mappings":";;;;;;;;;;AA4BA,IAAM,sBAA+D;CACnE,MAAM;CACN,MAAM;CACN,KAAK;CACL,QAAQ;CACR,QAAQ;CAER,sBAAsB;CACtB,cAAc;CACd,oBAAoB;CACpB,iBAAiB;CACjB,KAAK;CACL,eAAe;CACf,oBAAoB;CACpB,IAAI;CAEJ,mBAAmB;CACnB,kBAAkB;CAClB,iBAAiB;CACjB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAElB,cAAc;CACd,WAAW;CACX,WAAW;CACX,YAAY;CACZ,mBAAmB;CACnB,oBAAoB;CACpB,gBAAgB;CAChB,iBAAiB;CAEjB,cAAc;CACd,eAAe;CACf,gBAAgB;CAChB,iBAAiB;CAEjB,cAAc;CACd,eAAe;CACf,kBAAkB;CAClB,mBAAmB;CAEnB,WAAW;CACX,YAAY;CAEZ,wBAAwB;CACxB,yBAAyB;CACzB,qBAAqB;CACrB,sBAAsB;CACtB,wBAAwB;CACxB,qBAAqB;CACrB,qBAAqB;CACrB,sBAAsB;CACtB,kBAAkB;CAGlB,wBAAwB;CACxB,yBAAyB;CACzB,eAAe;CACf,oBAAoB;CAEpB,eAAe;CACf,iBAAiB;CACjB,kBAAkB;CAClB,gBAAgB;CACjB;;;;;;;;;;AAWD,SAAgB,gCACd,WACiB;CACjB,OAAO,oBAAoB;;;;;;;;;AAU7B,SAAgB,gBAAgB,SAA+B;CAC7D,IAAI,WAAW,IAAI,OAAO;CAC1B,IAAI,WAAW,IAAI,OAAO;CAC1B,IAAI,WAAW,IAAI,OAAO;CAC1B,OAAO;;;;;;;;;;;;;AAcT,SAAgB,mBAAmB,QAAsC;CACvE,IAAI,OAAO,WAAW,OAAO;CAC7B,IAAI,OAAO,YAAY,OAAO;CAC9B,IAAI,OAAO,cAAc,OAAO;CAGhC,QAAQ,OAAO,aAAf;EACE,KAAK,aACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,WACH,OAAO;EAGT,SAGE,OAAO,UAAU,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8B9B,SAAgB,0BACd,QACA,UACA,UACA,UAYI,EAAE,EACgB;CACtB,OAAO;EACL,UAAU,OAAO;EACjB,WAAW,OAAO;EAClB,QAAQ,OAAO;EACf;EACA;EAGA,QAAQ,OAAO;EACf,WAAW,OAAO;EAClB,SAAS,OAAO;EAChB,IAAI,OAAO;EAGX,MAAM,OAAO;EACb,SAAS,gBAAgB,OAAO,QAAQ;EACxC,eAAe,OAAO;EAGtB,YAAY,OAAO;EACnB,WAAW,OAAO;EAClB,cAAc,OAAO;EAGrB,kBAAkB,mBAAmB,OAAO;EAG5C,MAAM,OAAO;EACb,UAAU,QAAQ,YAAY;EAC9B,QAAQ,QAAQ,UAAU;EAC1B,OAAO,QAAQ,SAAS;EACxB,aAAa,QAAQ;EACrB,eAAe,QAAQ;EACvB,qBAAqB,QAAQ;EAC7B,qBAAqB,QAAQ;EAG7B,yBAAyB,QAAQ,2BAA2B;EAC5D,mBAAmB,QAAQ,qBAAqB;EAChD,kBAAkB,QAAQ;EAC3B"}
1
+ {"version":3,"file":"player3DHelpers.js","names":[],"sources":["../../src/utils/player3DHelpers.ts"],"sourcesContent":["/**\n * Utility functions for Player3D component integration\n *\n * Converts PlayerState from combat system to Player3DUnifiedProps for rendering\n * with SkeletalPlayer3D (28-bone articulated body model).\n *\n * @module utils/player3DHelpers\n * @category Utilities\n * @korean 플레이어3D도우미\n */\n\nimport type { PlayerState } from \"../systems\";\nimport type { AnimationState } from \"../systems/animation/core/types\";\nimport type {\n BalanceState,\n Player3DUnifiedProps,\n PlayerAnimation,\n} from \"../types/player-visual\";\n\n/**\n * Static mapping from AnimationState to PlayerAnimation\n *\n * Stance guard animations map to \"idle\" since SkeletalPlayer3D\n * will handle the stance-specific guard rendering.\n * Tactical steps now use dedicated step animations with guard maintenance.\n *\n * @korean 애니메이션상태맵\n */\nconst ANIMATION_STATE_MAP: Record<AnimationState, PlayerAnimation> = {\n idle: \"idle\",\n walk: \"walk\",\n run: \"run\", // Now uses dedicated RUN_ANIMATION from BasicAnimations\n attack: \"attack\",\n defend: \"defend\",\n // Defensive animations (방어 애니메이션) - map to defend with variations handled by skeletal system\n defend_block_success: \"defend\",\n defend_parry: \"defend\",\n defend_guard_break: \"defend\",\n defend_recovery: \"defend\",\n hit: \"hit\",\n stance_change: \"stance_change\",\n stance_side_switch: \"stance_change\", // Map to stance_change animation (mirroring guard)\n ko: \"death\", // Map ko to death\n // Stance guard animations map to stance-specific idle animations with proper biomechanics\n stance_guard_geon: \"stance_geon\",\n stance_guard_tae: \"stance_tae\",\n stance_guard_li: \"stance_li\",\n stance_guard_jin: \"stance_jin\",\n stance_guard_son: \"stance_son\",\n stance_guard_gam: \"stance_gam\",\n stance_guard_gan: \"stance_gan\",\n stance_guard_gon: \"stance_gon\",\n // Tactical step animations now map to dedicated step animations\n step_forward: \"step_forward\",\n step_back: \"step_back\",\n step_left: \"step_left\",\n step_right: \"step_right\",\n step_forward_left: \"step_forward_left\",\n step_forward_right: \"step_forward_right\",\n step_back_left: \"step_back_left\",\n step_back_right: \"step_back_right\",\n // Fall animations: Now using dedicated FALL_*_ANIMATION from BasicAnimations\n fall_forward: \"fall_forward\",\n fall_backward: \"fall_backward\",\n fall_side_left: \"fall_side_left\",\n fall_side_right: \"fall_side_right\",\n // Ground states map to idle with minimal movement\n ground_prone: \"idle\",\n ground_supine: \"idle\",\n ground_side_left: \"idle\",\n ground_side_right: \"idle\",\n // 180-degree turn animations map to stance_change (body pivot animation)\n turn_left: \"stance_change\",\n turn_right: \"stance_change\",\n // Footwork patterns (보법) - Korean martial arts specialized footwork\n footwork_circular_left: \"walk\", // Lateral movement\n footwork_circular_right: \"walk\",\n footwork_pivot_left: \"walk\", // Rotation movement\n footwork_pivot_right: \"walk\",\n footwork_slide_forward: \"walk\", // Sliding movement\n footwork_slide_back: \"walk\",\n footwork_slide_left: \"walk\",\n footwork_slide_right: \"walk\",\n footwork_shuffle: \"walk\", // Quick adjustment\n // Recovery animations (기상 애니메이션) - Getting up from ground states\n // Map to idle for now, custom 3D recovery animations will be added in future\n recovery_prone_standup: \"idle\",\n recovery_supine_standup: \"idle\",\n recovery_roll: \"walk\", // Rolling motion approximated by walk\n recovery_defensive: \"defend\", // Guarded getup approximated by defend\n // Grappling animations (잡기 애니메이션) - map to attack/defend based on action\n grapple_entry: \"attack\", // Initiating grab uses attack animation\n grapple_control: \"defend\", // Maintaining control uses defensive stance\n grapple_struggle: \"hit\", // Struggling escape uses hit reaction\n grapple_escape: \"attack\", // Successful escape uses attack burst\n};\n\n/**\n * Convert AnimationState to PlayerAnimation\n *\n * Maps the animation system's state types to SkeletalPlayer3D's animation types.\n *\n * @param animState - Animation state from the animation system\n * @returns Corresponding PlayerAnimation type\n * @korean 애니메이션상태변환\n */\nexport function animationStateToPlayerAnimation(\n animState: AnimationState\n): PlayerAnimation {\n return ANIMATION_STATE_MAP[animState];\n}\n\n/**\n * Convert balance number (0-100) to BalanceState enum\n *\n * @param balance - Balance value from PlayerState (0-100)\n * @returns BalanceState enum value\n * @korean 균형상태변환\n */\nexport function getBalanceState(balance: number): BalanceState {\n if (balance >= 80) return \"READY\";\n if (balance >= 50) return \"SHAKEN\";\n if (balance >= 20) return \"VULNERABLE\";\n return \"HELPLESS\";\n}\n\n/**\n * Get current animation state from PlayerState\n *\n * Returns stance-specific idle animations when player is in idle/recovering state.\n * This ensures each trigram stance displays the correct guard pose with proper\n * leg positioning and breathing animation.\n *\n * @param player - Current player state\n * @returns PlayerAnimation enum value (stance-specific for idle states)\n * @korean 애니메이션상태가져오기\n */\nexport function getPlayerAnimation(player: PlayerState): PlayerAnimation {\n if (player.isStunned) return \"hit\";\n if (player.isBlocking) return \"defend\";\n if (player.isCountering) return \"counter\";\n\n switch (player.combatState) {\n case \"attacking\":\n return \"attack\";\n case \"defending\":\n return \"defend\";\n case \"stunned\":\n return \"hit\";\n case \"recovering\":\n case \"idle\":\n default:\n return `stance_${player.currentStance}` as PlayerAnimation;\n }\n}\n\n/**\n * Converts PlayerState to Player3DUnifiedProps for visual rendering.\n *\n * Note: This function converts base PlayerState properties used in combat.\n * Training-specific stats (misses, accuracy, comboCount) are optional in PlayerState\n * and handled separately in training contexts.\n *\n * @param player - The player state to convert\n * @param position - 3D position [x, y, z]\n * @param rotation - Rotation in radians\n * @param options - Display and behavior options\n * @returns Props for SkeletalPlayer3D component (28-bone articulated body model)\n * @korean 플레이어상태변환\n *\n * @example\n * ```tsx\n * const playerProps = convertPlayerStateToProps(\n * playerState,\n * [-3, 0, 0],\n * 0,\n * { isMobile: false, showVitalPoints: false }\n * );\n *\n * <SkeletalPlayer3D {...playerProps} />\n * ```\n */\nexport function convertPlayerStateToProps(\n player: PlayerState,\n position: [number, number, number],\n rotation: number,\n options: {\n readonly isMobile?: boolean;\n readonly facing?: \"left\" | \"right\";\n readonly scale?: number;\n readonly showDetails?: boolean;\n readonly showHealthBar?: boolean;\n readonly showStanceIndicator?: boolean;\n readonly onAnimationComplete?: () => void;\n // Facial expression options - 얼굴 표정 옵션\n readonly enableFacialExpressions?: boolean;\n readonly enableEyeTracking?: boolean;\n readonly opponentPosition?: [number, number, number];\n } = {}\n): Player3DUnifiedProps {\n return {\n playerId: player.id,\n archetype: player.archetype,\n stance: player.currentStance,\n position,\n rotation,\n\n health: player.health,\n maxHealth: player.maxHealth,\n stamina: player.stamina,\n ki: player.ki,\n\n pain: player.pain,\n balance: getBalanceState(player.balance),\n consciousness: player.consciousness,\n\n isBlocking: player.isBlocking,\n isStunned: player.isStunned,\n isCountering: player.isCountering,\n\n currentAnimation: getPlayerAnimation(player),\n\n name: player.name,\n isMobile: options.isMobile ?? false,\n facing: options.facing ?? \"right\",\n scale: options.scale ?? 1,\n showDetails: options.showDetails,\n showHealthBar: options.showHealthBar,\n showStanceIndicator: options.showStanceIndicator,\n onAnimationComplete: options.onAnimationComplete,\n\n enableFacialExpressions: options.enableFacialExpressions ?? false,\n enableEyeTracking: options.enableEyeTracking ?? true,\n opponentPosition: options.opponentPosition,\n };\n}\n"],"mappings":";;;;;;;;;;AA4BA,IAAM,sBAA+D;CACnE,MAAM;CACN,MAAM;CACN,KAAK;CACL,QAAQ;CACR,QAAQ;CAER,sBAAsB;CACtB,cAAc;CACd,oBAAoB;CACpB,iBAAiB;CACjB,KAAK;CACL,eAAe;CACf,oBAAoB;CACpB,IAAI;CAEJ,mBAAmB;CACnB,kBAAkB;CAClB,iBAAiB;CACjB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAElB,cAAc;CACd,WAAW;CACX,WAAW;CACX,YAAY;CACZ,mBAAmB;CACnB,oBAAoB;CACpB,gBAAgB;CAChB,iBAAiB;CAEjB,cAAc;CACd,eAAe;CACf,gBAAgB;CAChB,iBAAiB;CAEjB,cAAc;CACd,eAAe;CACf,kBAAkB;CAClB,mBAAmB;CAEnB,WAAW;CACX,YAAY;CAEZ,wBAAwB;CACxB,yBAAyB;CACzB,qBAAqB;CACrB,sBAAsB;CACtB,wBAAwB;CACxB,qBAAqB;CACrB,qBAAqB;CACrB,sBAAsB;CACtB,kBAAkB;CAGlB,wBAAwB;CACxB,yBAAyB;CACzB,eAAe;CACf,oBAAoB;CAEpB,eAAe;CACf,iBAAiB;CACjB,kBAAkB;CAClB,gBAAgB;CACjB;;;;;;;;;;AAWD,SAAgB,gCACd,WACiB;CACjB,OAAO,oBAAoB;;;;;;;;;AAU7B,SAAgB,gBAAgB,SAA+B;CAC7D,IAAI,WAAW,IAAI,OAAO;CAC1B,IAAI,WAAW,IAAI,OAAO;CAC1B,IAAI,WAAW,IAAI,OAAO;CAC1B,OAAO;;;;;;;;;;;;;AAcT,SAAgB,mBAAmB,QAAsC;CACvE,IAAI,OAAO,WAAW,OAAO;CAC7B,IAAI,OAAO,YAAY,OAAO;CAC9B,IAAI,OAAO,cAAc,OAAO;CAEhC,QAAQ,OAAO,aAAf;EACE,KAAK,aACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,WACH,OAAO;EAGT,SACE,OAAO,UAAU,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8B9B,SAAgB,0BACd,QACA,UACA,UACA,UAYI,EAAE,EACgB;CACtB,OAAO;EACL,UAAU,OAAO;EACjB,WAAW,OAAO;EAClB,QAAQ,OAAO;EACf;EACA;EAEA,QAAQ,OAAO;EACf,WAAW,OAAO;EAClB,SAAS,OAAO;EAChB,IAAI,OAAO;EAEX,MAAM,OAAO;EACb,SAAS,gBAAgB,OAAO,QAAQ;EACxC,eAAe,OAAO;EAEtB,YAAY,OAAO;EACnB,WAAW,OAAO;EAClB,cAAc,OAAO;EAErB,kBAAkB,mBAAmB,OAAO;EAE5C,MAAM,OAAO;EACb,UAAU,QAAQ,YAAY;EAC9B,QAAQ,QAAQ,UAAU;EAC1B,OAAO,QAAQ,SAAS;EACxB,aAAa,QAAQ;EACrB,eAAe,QAAQ;EACvB,qBAAqB,QAAQ;EAC7B,qBAAqB,QAAQ;EAE7B,yBAAyB,QAAQ,2BAA2B;EAC5D,mBAAmB,QAAQ,qBAAqB;EAChD,kBAAkB,QAAQ;EAC3B"}