@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.7 → 0.2.8

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 (462) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/components/ui/accessibility-demo.d.ts +259 -0
  3. package/dist/components/ui/accessibility-demo.esm.js +265 -0
  4. package/dist/components/ui/accessibility-demo.js +265 -0
  5. package/dist/components/ui/advanced-component-architecture-demo.d.ts +718 -0
  6. package/dist/components/ui/advanced-component-architecture-demo.esm.js +860 -0
  7. package/dist/components/ui/advanced-component-architecture-demo.js +860 -0
  8. package/dist/components/ui/advanced-transition-system-demo.d.ts +660 -0
  9. package/dist/components/ui/advanced-transition-system-demo.esm.js +624 -0
  10. package/dist/components/ui/advanced-transition-system-demo.js +624 -0
  11. package/dist/components/ui/advanced-transition-system.d.ts +391 -0
  12. package/dist/components/ui/advanced-transition-system.esm.js +351 -0
  13. package/dist/components/ui/advanced-transition-system.js +351 -0
  14. package/dist/components/ui/animation/animated-container.d.ts +162 -0
  15. package/dist/components/ui/animation/animated-container.esm.js +143 -0
  16. package/dist/components/ui/animation/animated-container.js +143 -0
  17. package/dist/components/ui/animation/index.d.ts +9 -0
  18. package/dist/components/ui/animation/index.esm.js +19 -0
  19. package/dist/components/ui/animation/index.js +19 -0
  20. package/dist/components/ui/animation/staggered-container.d.ts +64 -0
  21. package/dist/components/ui/animation/staggered-container.esm.js +59 -0
  22. package/dist/components/ui/animation/staggered-container.js +59 -0
  23. package/dist/components/ui/animation-demo.d.ts +238 -0
  24. package/dist/components/ui/animation-demo.esm.js +218 -0
  25. package/dist/components/ui/animation-demo.js +218 -0
  26. package/dist/components/ui/badge.d.ts +28 -0
  27. package/dist/components/ui/badge.esm.js +30 -0
  28. package/dist/components/ui/badge.js +30 -0
  29. package/dist/components/ui/battery-conscious-animation-demo.d.ts +561 -0
  30. package/dist/components/ui/battery-conscious-animation-demo.esm.js +533 -0
  31. package/dist/components/ui/battery-conscious-animation-demo.js +533 -0
  32. package/dist/components/ui/border-radius-shadow-demo.d.ts +183 -0
  33. package/dist/components/ui/border-radius-shadow-demo.esm.js +176 -0
  34. package/dist/components/ui/border-radius-shadow-demo.js +176 -0
  35. package/dist/components/ui/button.d.ts +33 -0
  36. package/dist/components/ui/button.esm.js +30 -0
  37. package/dist/components/ui/button.js +30 -0
  38. package/dist/components/ui/card.d.ts +205 -0
  39. package/dist/components/ui/card.esm.js +182 -0
  40. package/dist/components/ui/card.js +182 -0
  41. package/dist/components/ui/checkbox.d.ts +26 -0
  42. package/dist/components/ui/checkbox.esm.js +30 -0
  43. package/dist/components/ui/checkbox.js +30 -0
  44. package/dist/components/ui/color-preview.d.ts +402 -0
  45. package/dist/components/ui/color-preview.esm.js +388 -0
  46. package/dist/components/ui/color-preview.js +388 -0
  47. package/dist/components/ui/data-display/chart.d.ts +646 -0
  48. package/dist/components/ui/data-display/chart.esm.js +625 -0
  49. package/dist/components/ui/data-display/chart.js +625 -0
  50. package/dist/components/ui/data-display/data-grid-simple.d.ts +73 -0
  51. package/dist/components/ui/data-display/data-grid-simple.esm.js +76 -0
  52. package/dist/components/ui/data-display/data-grid-simple.js +76 -0
  53. package/dist/components/ui/data-display/data-grid.d.ts +670 -0
  54. package/dist/components/ui/data-display/data-grid.esm.js +667 -0
  55. package/dist/components/ui/data-display/data-grid.js +667 -0
  56. package/dist/components/ui/data-display/list.d.ts +448 -0
  57. package/dist/components/ui/data-display/list.esm.js +448 -0
  58. package/dist/components/ui/data-display/list.js +448 -0
  59. package/dist/components/ui/data-display/table.d.ts +472 -0
  60. package/dist/components/ui/data-display/table.esm.js +474 -0
  61. package/dist/components/ui/data-display/table.js +474 -0
  62. package/dist/components/ui/data-display/timeline.d.ts +433 -0
  63. package/dist/components/ui/data-display/timeline.esm.js +436 -0
  64. package/dist/components/ui/data-display/timeline.js +436 -0
  65. package/dist/components/ui/data-display/tree.d.ts +594 -0
  66. package/dist/components/ui/data-display/tree.esm.js +570 -0
  67. package/dist/components/ui/data-display/tree.js +570 -0
  68. package/dist/components/ui/data-display/types.d.ts +534 -0
  69. package/dist/components/ui/data-display/types.esm.js +511 -0
  70. package/dist/components/ui/data-display/types.js +511 -0
  71. package/dist/components/ui/enterprise-mobile-experience-demo.d.ts +735 -0
  72. package/dist/components/ui/enterprise-mobile-experience-demo.esm.js +699 -0
  73. package/dist/components/ui/enterprise-mobile-experience-demo.js +699 -0
  74. package/dist/components/ui/enterprise-mobile-experience.d.ts +461 -0
  75. package/dist/components/ui/enterprise-mobile-experience.esm.js +413 -0
  76. package/dist/components/ui/enterprise-mobile-experience.js +413 -0
  77. package/dist/components/ui/feedback/alert.d.ts +154 -0
  78. package/dist/components/ui/feedback/alert.esm.js +150 -0
  79. package/dist/components/ui/feedback/alert.js +150 -0
  80. package/dist/components/ui/feedback/progress.d.ts +288 -0
  81. package/dist/components/ui/feedback/progress.esm.js +269 -0
  82. package/dist/components/ui/feedback/progress.js +269 -0
  83. package/dist/components/ui/feedback/skeleton.d.ts +182 -0
  84. package/dist/components/ui/feedback/skeleton.esm.js +175 -0
  85. package/dist/components/ui/feedback/skeleton.js +175 -0
  86. package/dist/components/ui/feedback/toast.d.ts +277 -0
  87. package/dist/components/ui/feedback/toast.esm.js +256 -0
  88. package/dist/components/ui/feedback/toast.js +256 -0
  89. package/dist/components/ui/feedback/types.d.ts +123 -0
  90. package/dist/components/ui/feedback/types.esm.js +125 -0
  91. package/dist/components/ui/feedback/types.js +125 -0
  92. package/dist/components/ui/font-preview.d.ts +282 -0
  93. package/dist/components/ui/font-preview.esm.js +286 -0
  94. package/dist/components/ui/font-preview.js +286 -0
  95. package/dist/components/ui/form-demo.d.ts +544 -0
  96. package/dist/components/ui/form-demo.esm.js +516 -0
  97. package/dist/components/ui/form-demo.js +516 -0
  98. package/dist/components/ui/hardware-acceleration-demo.d.ts +540 -0
  99. package/dist/components/ui/hardware-acceleration-demo.esm.js +497 -0
  100. package/dist/components/ui/hardware-acceleration-demo.js +497 -0
  101. package/dist/components/ui/input.d.ts +33 -0
  102. package/dist/components/ui/input.esm.js +32 -0
  103. package/dist/components/ui/input.js +32 -0
  104. package/dist/components/ui/label.d.ts +13 -0
  105. package/dist/components/ui/label.esm.js +16 -0
  106. package/dist/components/ui/label.js +16 -0
  107. package/dist/components/ui/layout-demo.d.ts +352 -0
  108. package/dist/components/ui/layout-demo.esm.js +342 -0
  109. package/dist/components/ui/layout-demo.js +342 -0
  110. package/dist/components/ui/layouts/adaptive-layout.d.ts +132 -0
  111. package/dist/components/ui/layouts/adaptive-layout.esm.js +120 -0
  112. package/dist/components/ui/layouts/adaptive-layout.js +120 -0
  113. package/dist/components/ui/layouts/desktop-layout.d.ts +219 -0
  114. package/dist/components/ui/layouts/desktop-layout.esm.js +204 -0
  115. package/dist/components/ui/layouts/desktop-layout.js +204 -0
  116. package/dist/components/ui/layouts/index.d.ts +5 -0
  117. package/dist/components/ui/layouts/index.esm.js +10 -0
  118. package/dist/components/ui/layouts/index.js +10 -0
  119. package/dist/components/ui/layouts/mobile-layout.d.ts +158 -0
  120. package/dist/components/ui/layouts/mobile-layout.esm.js +152 -0
  121. package/dist/components/ui/layouts/mobile-layout.js +152 -0
  122. package/dist/components/ui/layouts/tablet-layout.d.ts +192 -0
  123. package/dist/components/ui/layouts/tablet-layout.esm.js +183 -0
  124. package/dist/components/ui/layouts/tablet-layout.js +183 -0
  125. package/dist/components/ui/mobile-form-validation.d.ts +439 -0
  126. package/dist/components/ui/mobile-form-validation.esm.js +418 -0
  127. package/dist/components/ui/mobile-form-validation.js +418 -0
  128. package/dist/components/ui/mobile-input-demo.d.ts +197 -0
  129. package/dist/components/ui/mobile-input-demo.esm.js +195 -0
  130. package/dist/components/ui/mobile-input-demo.js +195 -0
  131. package/dist/components/ui/mobile-input.d.ts +273 -0
  132. package/dist/components/ui/mobile-input.esm.js +216 -0
  133. package/dist/components/ui/mobile-input.js +216 -0
  134. package/dist/components/ui/mobile-skeleton-loading-demo.d.ts +628 -0
  135. package/dist/components/ui/mobile-skeleton-loading-demo.esm.js +621 -0
  136. package/dist/components/ui/mobile-skeleton-loading-demo.js +621 -0
  137. package/dist/components/ui/navigation/breadcrumb.d.ts +149 -0
  138. package/dist/components/ui/navigation/breadcrumb.esm.js +155 -0
  139. package/dist/components/ui/navigation/breadcrumb.js +155 -0
  140. package/dist/components/ui/navigation/index.d.ts +25 -0
  141. package/dist/components/ui/navigation/index.esm.js +14 -0
  142. package/dist/components/ui/navigation/index.js +14 -0
  143. package/dist/components/ui/navigation/menu.d.ts +366 -0
  144. package/dist/components/ui/navigation/menu.esm.js +360 -0
  145. package/dist/components/ui/navigation/menu.js +360 -0
  146. package/dist/components/ui/navigation/navigation-demo.d.ts +169 -0
  147. package/dist/components/ui/navigation/navigation-demo.esm.js +317 -0
  148. package/dist/components/ui/navigation/navigation-demo.js +317 -0
  149. package/dist/components/ui/navigation/pagination.d.ts +261 -0
  150. package/dist/components/ui/navigation/pagination.esm.js +260 -0
  151. package/dist/components/ui/navigation/pagination.js +260 -0
  152. package/dist/components/ui/navigation/sidebar.d.ts +375 -0
  153. package/dist/components/ui/navigation/sidebar.esm.js +369 -0
  154. package/dist/components/ui/navigation/sidebar.js +369 -0
  155. package/dist/components/ui/navigation/stepper.d.ts +294 -0
  156. package/dist/components/ui/navigation/stepper.esm.js +292 -0
  157. package/dist/components/ui/navigation/stepper.js +292 -0
  158. package/dist/components/ui/navigation/tabs.d.ts +196 -0
  159. package/dist/components/ui/navigation/tabs.esm.js +194 -0
  160. package/dist/components/ui/navigation/tabs.js +194 -0
  161. package/dist/components/ui/navigation/types.d.ts +293 -0
  162. package/dist/components/ui/navigation/types.esm.js +298 -0
  163. package/dist/components/ui/navigation/types.js +298 -0
  164. package/dist/components/ui/overlay/backdrop.d.ts +79 -0
  165. package/dist/components/ui/overlay/backdrop.esm.js +80 -0
  166. package/dist/components/ui/overlay/backdrop.js +80 -0
  167. package/dist/components/ui/overlay/focus-manager.d.ts +141 -0
  168. package/dist/components/ui/overlay/focus-manager.esm.js +141 -0
  169. package/dist/components/ui/overlay/focus-manager.js +141 -0
  170. package/dist/components/ui/overlay/index.d.ts +27 -0
  171. package/dist/components/ui/overlay/index.esm.js +16 -0
  172. package/dist/components/ui/overlay/index.js +16 -0
  173. package/dist/components/ui/overlay/modal.d.ts +262 -0
  174. package/dist/components/ui/overlay/modal.esm.js +266 -0
  175. package/dist/components/ui/overlay/modal.js +266 -0
  176. package/dist/components/ui/overlay/overlay-manager.d.ts +107 -0
  177. package/dist/components/ui/overlay/overlay-manager.esm.js +105 -0
  178. package/dist/components/ui/overlay/overlay-manager.js +105 -0
  179. package/dist/components/ui/overlay/popover.d.ts +450 -0
  180. package/dist/components/ui/overlay/popover.esm.js +446 -0
  181. package/dist/components/ui/overlay/popover.js +446 -0
  182. package/dist/components/ui/overlay/portal.d.ts +75 -0
  183. package/dist/components/ui/overlay/portal.esm.js +79 -0
  184. package/dist/components/ui/overlay/portal.js +79 -0
  185. package/dist/components/ui/overlay/tooltip.d.ts +298 -0
  186. package/dist/components/ui/overlay/tooltip.esm.js +288 -0
  187. package/dist/components/ui/overlay/tooltip.js +288 -0
  188. package/dist/components/ui/overlay/types.d.ts +194 -0
  189. package/dist/components/ui/overlay/types.esm.js +195 -0
  190. package/dist/components/ui/overlay/types.js +195 -0
  191. package/dist/components/ui/performance-demo.d.ts +583 -0
  192. package/dist/components/ui/performance-demo.esm.js +549 -0
  193. package/dist/components/ui/performance-demo.js +549 -0
  194. package/dist/components/ui/semantic-input-system-demo.d.ts +490 -0
  195. package/dist/components/ui/semantic-input-system-demo.esm.js +465 -0
  196. package/dist/components/ui/semantic-input-system-demo.js +465 -0
  197. package/dist/components/ui/theme-customizer.d.ts +378 -0
  198. package/dist/components/ui/theme-customizer.esm.js +354 -0
  199. package/dist/components/ui/theme-customizer.js +354 -0
  200. package/dist/components/ui/theme-preview.d.ts +305 -0
  201. package/dist/components/ui/theme-preview.esm.js +258 -0
  202. package/dist/components/ui/theme-preview.js +258 -0
  203. package/dist/components/ui/theme-switcher.d.ts +259 -0
  204. package/dist/components/ui/theme-switcher.esm.js +238 -0
  205. package/dist/components/ui/theme-switcher.js +238 -0
  206. package/dist/components/ui/theme-toggle.d.ts +34 -0
  207. package/dist/components/ui/theme-toggle.esm.js +38 -0
  208. package/dist/components/ui/theme-toggle.js +38 -0
  209. package/dist/components/ui/token-demo.d.ts +188 -0
  210. package/dist/components/ui/token-demo.esm.js +183 -0
  211. package/dist/components/ui/token-demo.js +183 -0
  212. package/dist/components/ui/touch-demo.d.ts +455 -0
  213. package/dist/components/ui/touch-demo.esm.js +433 -0
  214. package/dist/components/ui/touch-demo.js +433 -0
  215. package/dist/components/ui/touch-friendly-interface-demo.d.ts +512 -0
  216. package/dist/components/ui/touch-friendly-interface-demo.esm.js +481 -0
  217. package/dist/components/ui/touch-friendly-interface-demo.js +481 -0
  218. package/dist/components/ui/touch-friendly-interface.d.ts +292 -0
  219. package/dist/components/ui/touch-friendly-interface.esm.js +272 -0
  220. package/dist/components/ui/touch-friendly-interface.js +272 -0
  221. package/dist/hooks/index.d.ts +161 -0
  222. package/dist/hooks/index.esm.js +190 -0
  223. package/dist/hooks/index.js +190 -0
  224. package/dist/hooks/use-accessibility-support.d.ts +516 -0
  225. package/dist/hooks/use-accessibility-support.esm.js +488 -0
  226. package/dist/hooks/use-accessibility-support.js +488 -0
  227. package/dist/hooks/use-adaptive-layout.d.ts +287 -0
  228. package/dist/hooks/use-adaptive-layout.esm.js +266 -0
  229. package/dist/hooks/use-adaptive-layout.js +266 -0
  230. package/dist/hooks/use-advanced-patterns.d.ts +292 -0
  231. package/dist/hooks/use-advanced-patterns.esm.js +279 -0
  232. package/dist/hooks/use-advanced-patterns.js +279 -0
  233. package/dist/hooks/use-advanced-transition-system.d.ts +390 -0
  234. package/dist/hooks/use-advanced-transition-system.esm.js +352 -0
  235. package/dist/hooks/use-advanced-transition-system.js +352 -0
  236. package/dist/hooks/use-animation-profile.d.ts +285 -0
  237. package/dist/hooks/use-animation-profile.esm.js +259 -0
  238. package/dist/hooks/use-animation-profile.js +259 -0
  239. package/dist/hooks/use-battery-animations.d.ts +382 -0
  240. package/dist/hooks/use-battery-animations.esm.js +359 -0
  241. package/dist/hooks/use-battery-animations.js +359 -0
  242. package/dist/hooks/use-battery-conscious-loading.d.ts +473 -0
  243. package/dist/hooks/use-battery-conscious-loading.esm.js +432 -0
  244. package/dist/hooks/use-battery-conscious-loading.js +432 -0
  245. package/dist/hooks/use-battery-optimization.d.ts +328 -0
  246. package/dist/hooks/use-battery-optimization.esm.js +307 -0
  247. package/dist/hooks/use-battery-optimization.js +307 -0
  248. package/dist/hooks/use-battery-status.d.ts +297 -0
  249. package/dist/hooks/use-battery-status.esm.js +277 -0
  250. package/dist/hooks/use-battery-status.js +277 -0
  251. package/dist/hooks/use-component-performance.d.ts +342 -0
  252. package/dist/hooks/use-component-performance.esm.js +329 -0
  253. package/dist/hooks/use-component-performance.js +329 -0
  254. package/dist/hooks/use-device-loading-states.d.ts +456 -0
  255. package/dist/hooks/use-device-loading-states.esm.js +416 -0
  256. package/dist/hooks/use-device-loading-states.js +416 -0
  257. package/dist/hooks/use-device.d.ts +104 -0
  258. package/dist/hooks/use-device.esm.js +99 -0
  259. package/dist/hooks/use-device.js +99 -0
  260. package/dist/hooks/use-enterprise-mobile-experience.d.ts +486 -0
  261. package/dist/hooks/use-enterprise-mobile-experience.esm.js +439 -0
  262. package/dist/hooks/use-enterprise-mobile-experience.js +439 -0
  263. package/dist/hooks/use-form-feedback.d.ts +401 -0
  264. package/dist/hooks/use-form-feedback.esm.js +360 -0
  265. package/dist/hooks/use-form-feedback.js +360 -0
  266. package/dist/hooks/use-form-performance.d.ts +511 -0
  267. package/dist/hooks/use-form-performance.esm.js +478 -0
  268. package/dist/hooks/use-form-performance.js +478 -0
  269. package/dist/hooks/use-frame-rate.d.ts +249 -0
  270. package/dist/hooks/use-frame-rate.esm.js +232 -0
  271. package/dist/hooks/use-frame-rate.js +232 -0
  272. package/dist/hooks/use-gestures.d.ts +336 -0
  273. package/dist/hooks/use-gestures.esm.js +314 -0
  274. package/dist/hooks/use-gestures.js +314 -0
  275. package/dist/hooks/use-hardware-acceleration.d.ts +339 -0
  276. package/dist/hooks/use-hardware-acceleration.esm.js +313 -0
  277. package/dist/hooks/use-hardware-acceleration.js +313 -0
  278. package/dist/hooks/use-input-accessibility.d.ts +451 -0
  279. package/dist/hooks/use-input-accessibility.esm.js +417 -0
  280. package/dist/hooks/use-input-accessibility.js +417 -0
  281. package/dist/hooks/use-input-performance.d.ts +503 -0
  282. package/dist/hooks/use-input-performance.esm.js +471 -0
  283. package/dist/hooks/use-input-performance.js +471 -0
  284. package/dist/hooks/use-layout-performance.d.ts +317 -0
  285. package/dist/hooks/use-layout-performance.esm.js +298 -0
  286. package/dist/hooks/use-layout-performance.js +298 -0
  287. package/dist/hooks/use-loading-accessibility.d.ts +532 -0
  288. package/dist/hooks/use-loading-accessibility.esm.js +495 -0
  289. package/dist/hooks/use-loading-accessibility.js +495 -0
  290. package/dist/hooks/use-loading-performance.d.ts +471 -0
  291. package/dist/hooks/use-loading-performance.esm.js +449 -0
  292. package/dist/hooks/use-loading-performance.js +449 -0
  293. package/dist/hooks/use-memory-usage.d.ts +285 -0
  294. package/dist/hooks/use-memory-usage.esm.js +268 -0
  295. package/dist/hooks/use-memory-usage.js +268 -0
  296. package/dist/hooks/use-mobile-form-layout.d.ts +462 -0
  297. package/dist/hooks/use-mobile-form-layout.esm.js +427 -0
  298. package/dist/hooks/use-mobile-form-layout.js +427 -0
  299. package/dist/hooks/use-mobile-form-validation.d.ts +516 -0
  300. package/dist/hooks/use-mobile-form-validation.esm.js +451 -0
  301. package/dist/hooks/use-mobile-form-validation.js +451 -0
  302. package/dist/hooks/use-mobile-keyboard-optimization.d.ts +469 -0
  303. package/dist/hooks/use-mobile-keyboard-optimization.esm.js +431 -0
  304. package/dist/hooks/use-mobile-keyboard-optimization.js +431 -0
  305. package/dist/hooks/use-mobile-layout.d.ts +300 -0
  306. package/dist/hooks/use-mobile-layout.esm.js +280 -0
  307. package/dist/hooks/use-mobile-layout.js +280 -0
  308. package/dist/hooks/use-mobile-optimization.d.ts +404 -0
  309. package/dist/hooks/use-mobile-optimization.esm.js +378 -0
  310. package/dist/hooks/use-mobile-optimization.js +378 -0
  311. package/dist/hooks/use-mobile-skeleton.d.ts +399 -0
  312. package/dist/hooks/use-mobile-skeleton.esm.js +369 -0
  313. package/dist/hooks/use-mobile-skeleton.js +369 -0
  314. package/dist/hooks/use-mobile-touch.d.ts +412 -0
  315. package/dist/hooks/use-mobile-touch.esm.js +379 -0
  316. package/dist/hooks/use-mobile-touch.js +379 -0
  317. package/dist/hooks/use-performance-throttling.d.ts +346 -0
  318. package/dist/hooks/use-performance-throttling.esm.js +324 -0
  319. package/dist/hooks/use-performance-throttling.js +324 -0
  320. package/dist/hooks/use-performance.d.ts +314 -0
  321. package/dist/hooks/use-performance.esm.js +278 -0
  322. package/dist/hooks/use-performance.js +278 -0
  323. package/dist/hooks/use-reusable-architecture.d.ts +412 -0
  324. package/dist/hooks/use-reusable-architecture.esm.js +385 -0
  325. package/dist/hooks/use-reusable-architecture.js +385 -0
  326. package/dist/hooks/use-semantic-input-types.d.ts +354 -0
  327. package/dist/hooks/use-semantic-input-types.esm.js +315 -0
  328. package/dist/hooks/use-semantic-input-types.js +315 -0
  329. package/dist/hooks/use-semantic-input.d.ts +563 -0
  330. package/dist/hooks/use-semantic-input.esm.js +513 -0
  331. package/dist/hooks/use-semantic-input.js +513 -0
  332. package/dist/hooks/use-tablet-layout.d.ts +382 -0
  333. package/dist/hooks/use-tablet-layout.esm.js +355 -0
  334. package/dist/hooks/use-tablet-layout.js +355 -0
  335. package/dist/hooks/use-touch-friendly-input.d.ts +520 -0
  336. package/dist/hooks/use-touch-friendly-input.esm.js +480 -0
  337. package/dist/hooks/use-touch-friendly-input.js +480 -0
  338. package/dist/hooks/use-touch-friendly-interface.d.ts +329 -0
  339. package/dist/hooks/use-touch-friendly-interface.esm.js +299 -0
  340. package/dist/hooks/use-touch-friendly-interface.js +299 -0
  341. package/dist/hooks/use-touch-optimization.d.ts +373 -0
  342. package/dist/hooks/use-touch-optimization.esm.js +348 -0
  343. package/dist/hooks/use-touch-optimization.js +348 -0
  344. package/dist/lib/utils.d.ts +3 -0
  345. package/dist/lib/utils.esm.js +6 -0
  346. package/dist/lib/utils.js +6 -0
  347. package/dist/plugins/theme-css-generator.d.ts +345 -0
  348. package/dist/plugins/theme-css-generator.esm.js +305 -0
  349. package/dist/plugins/theme-css-generator.js +305 -0
  350. package/dist/styles.css +1 -1
  351. package/dist/themes/ThemeContext.d.ts +27 -0
  352. package/dist/themes/ThemeContext.esm.js +31 -0
  353. package/dist/themes/ThemeContext.js +31 -0
  354. package/dist/themes/ThemeProvider.d.ts +222 -0
  355. package/dist/themes/ThemeProvider.esm.js +229 -0
  356. package/dist/themes/ThemeProvider.js +229 -0
  357. package/dist/themes/accessibility/index.d.ts +7 -0
  358. package/dist/themes/accessibility/index.esm.js +27 -0
  359. package/dist/themes/accessibility/index.js +27 -0
  360. package/dist/themes/accessibility.d.ts +259 -0
  361. package/dist/themes/accessibility.esm.js +220 -0
  362. package/dist/themes/accessibility.js +220 -0
  363. package/dist/themes/aria-patterns.d.ts +418 -0
  364. package/dist/themes/aria-patterns.esm.js +384 -0
  365. package/dist/themes/aria-patterns.js +384 -0
  366. package/dist/themes/base-themes.d.ts +34 -0
  367. package/dist/themes/base-themes.esm.js +52 -0
  368. package/dist/themes/base-themes.js +52 -0
  369. package/dist/themes/colorManager.d.ts +327 -0
  370. package/dist/themes/colorManager.esm.js +362 -0
  371. package/dist/themes/colorManager.js +362 -0
  372. package/dist/themes/examples/dark-theme.d.ts +139 -0
  373. package/dist/themes/examples/dark-theme.esm.js +124 -0
  374. package/dist/themes/examples/dark-theme.js +124 -0
  375. package/dist/themes/examples/minimal-theme.d.ts +93 -0
  376. package/dist/themes/examples/minimal-theme.esm.js +86 -0
  377. package/dist/themes/examples/minimal-theme.js +86 -0
  378. package/dist/themes/focus-management.d.ts +699 -0
  379. package/dist/themes/focus-management.esm.js +642 -0
  380. package/dist/themes/focus-management.js +642 -0
  381. package/dist/themes/fontLoader.d.ts +163 -0
  382. package/dist/themes/fontLoader.esm.js +192 -0
  383. package/dist/themes/fontLoader.js +192 -0
  384. package/dist/themes/high-contrast.d.ts +619 -0
  385. package/dist/themes/high-contrast.esm.js +573 -0
  386. package/dist/themes/high-contrast.js +573 -0
  387. package/dist/themes/index.d.ts +11 -0
  388. package/dist/themes/index.esm.js +19 -0
  389. package/dist/themes/index.js +19 -0
  390. package/dist/themes/inheritance.d.ts +160 -0
  391. package/dist/themes/inheritance.esm.js +219 -0
  392. package/dist/themes/inheritance.js +219 -0
  393. package/dist/themes/keyboard-navigation.d.ts +550 -0
  394. package/dist/themes/keyboard-navigation.esm.js +521 -0
  395. package/dist/themes/keyboard-navigation.js +521 -0
  396. package/dist/themes/motion-reduction.d.ts +660 -0
  397. package/dist/themes/motion-reduction.esm.js +602 -0
  398. package/dist/themes/motion-reduction.js +602 -0
  399. package/dist/themes/navigation.d.ts +232 -0
  400. package/dist/themes/navigation.esm.js +238 -0
  401. package/dist/themes/navigation.js +238 -0
  402. package/dist/themes/screen-reader.d.ts +645 -0
  403. package/dist/themes/screen-reader.esm.js +580 -0
  404. package/dist/themes/screen-reader.js +580 -0
  405. package/dist/themes/systemThemeDetector.d.ts +148 -0
  406. package/dist/themes/systemThemeDetector.esm.js +174 -0
  407. package/dist/themes/systemThemeDetector.js +174 -0
  408. package/dist/themes/themeCSSUpdater.d.ts +229 -0
  409. package/dist/themes/themeCSSUpdater.esm.js +250 -0
  410. package/dist/themes/themeCSSUpdater.js +250 -0
  411. package/dist/themes/themePersistence.d.ts +192 -0
  412. package/dist/themes/themePersistence.esm.js +217 -0
  413. package/dist/themes/themePersistence.js +217 -0
  414. package/dist/themes/themes/stan-design.d.ts +678 -0
  415. package/dist/themes/themes/stan-design.esm.js +518 -0
  416. package/dist/themes/themes/stan-design.js +518 -0
  417. package/dist/themes/types.d.ts +454 -0
  418. package/dist/themes/types.esm.js +446 -0
  419. package/dist/themes/types.js +446 -0
  420. package/dist/themes/useSystemTheme.d.ts +43 -0
  421. package/dist/themes/useSystemTheme.esm.js +48 -0
  422. package/dist/themes/useSystemTheme.js +48 -0
  423. package/dist/themes/useTheme.d.ts +20 -0
  424. package/dist/themes/useTheme.esm.js +87 -0
  425. package/dist/themes/useTheme.js +87 -0
  426. package/dist/themes/validation.d.ts +406 -0
  427. package/dist/themes/validation.esm.js +411 -0
  428. package/dist/themes/validation.js +411 -0
  429. package/dist/tokens/index.d.ts +25 -0
  430. package/dist/tokens/index.esm.js +23 -0
  431. package/dist/tokens/index.js +23 -0
  432. package/dist/tokens/tokenExporter.d.ts +336 -0
  433. package/dist/tokens/tokenExporter.esm.js +371 -0
  434. package/dist/tokens/tokenExporter.js +371 -0
  435. package/dist/tokens/tokenGenerator.d.ts +250 -0
  436. package/dist/tokens/tokenGenerator.esm.js +267 -0
  437. package/dist/tokens/tokenGenerator.js +267 -0
  438. package/dist/tokens/tokenManager.d.ts +194 -0
  439. package/dist/tokens/tokenManager.esm.js +235 -0
  440. package/dist/tokens/tokenManager.js +235 -0
  441. package/dist/tokens/tokenValidator.d.ts +488 -0
  442. package/dist/tokens/tokenValidator.esm.js +497 -0
  443. package/dist/tokens/tokenValidator.js +497 -0
  444. package/dist/tokens/types.d.ts +78 -0
  445. package/dist/tokens/types.esm.js +64 -0
  446. package/dist/tokens/types.js +64 -0
  447. package/dist/utils/bundle-analyzer.d.ts +260 -0
  448. package/dist/utils/bundle-analyzer.esm.js +242 -0
  449. package/dist/utils/bundle-analyzer.js +242 -0
  450. package/dist/utils/bundle-splitting.d.ts +483 -0
  451. package/dist/utils/bundle-splitting.esm.js +458 -0
  452. package/dist/utils/bundle-splitting.js +458 -0
  453. package/dist/utils/lazy-loading.d.ts +437 -0
  454. package/dist/utils/lazy-loading.esm.js +415 -0
  455. package/dist/utils/lazy-loading.js +415 -0
  456. package/dist/utils/performance-monitor.d.ts +513 -0
  457. package/dist/utils/performance-monitor.esm.js +472 -0
  458. package/dist/utils/performance-monitor.js +472 -0
  459. package/dist/utils/tree-shaking.d.ts +274 -0
  460. package/dist/utils/tree-shaking.esm.js +266 -0
  461. package/dist/utils/tree-shaking.js +266 -0
  462. package/package.json +1 -1
@@ -0,0 +1,336 @@
1
+ export interface GestureConfig {
2
+ minSwipeDistance: number
3
+ maxSwipeTime: number
4
+ minPinchDistance: number
5
+ enableHapticFeedback: boolean
6
+ enableSoundFeedback: boolean
7
+ }
8
+
9
+ export interface SwipeGesture {
10
+ direction: 'up' | 'down' | 'left' | 'right'
11
+ distance: number
12
+ velocity: number
13
+ duration: number
14
+ }
15
+
16
+ export interface PinchGesture {
17
+ scale: number
18
+ center: { x: number; y: number }
19
+ distance: number
20
+ }
21
+
22
+ export interface GestureCallbacks {
23
+ onSwipe?: (gesture: SwipeGesture) => void
24
+ onPinch?: (gesture: PinchGesture) => void
25
+ onTap?: (position: { x: number; y: number }) => void
26
+ onLongPress?: (position: { x: number; y: number }) => void
27
+ onTouchStart?: (position: { x: number; y: number }) => void
28
+ onTouchEnd?: (position: { x: number; y: number }) => void
29
+ }
30
+
31
+ export interface GestureState {
32
+ isTracking: boolean
33
+ currentGesture: 'none' | 'swipe' | 'pinch' | 'tap' | 'longPress'
34
+ lastGesture: SwipeGesture | PinchGesture | null
35
+ touchCount: number
36
+ }
37
+
38
+ export declare const useGestures: (
39
+ elementRef: React.RefObject<HTMLElement>,
40
+ callbacks: GestureCallbacks = {},
41
+ config: Partial<GestureConfig> = {}
42
+ ) => {
43
+ const defaultConfig: GestureConfig = {
44
+ minSwipeDistance: 50,
45
+ maxSwipeTime: 300,
46
+ minPinchDistance: 20,
47
+ enableHapticFeedback: true,
48
+ enableSoundFeedback: false,
49
+ ...config
50
+ }
51
+
52
+ const [gestureState, setGestureState] = useState<GestureState>({
53
+ isTracking: false,
54
+ currentGesture: 'none',
55
+ lastGesture: null,
56
+ touchCount: 0
57
+ })
58
+
59
+ const touchStartRef = useRef<{ x: number; y: number; time: number } | null>(null)
60
+ const touchStartDistanceRef = useRef<number>(0)
61
+ const touchStartCenterRef = useRef<{ x: number; y: number } | null>(null)
62
+ const longPressTimerRef = useRef<NodeJS.Timeout | null>(null)
63
+ const lastTapTimeRef = useRef<number>(0)
64
+
65
+ // Haptic feedback function
66
+ const triggerHapticFeedback = useCallback(() => {
67
+ if (defaultConfig.enableHapticFeedback && 'vibrate' in navigator) {
68
+ try {
69
+ navigator.vibrate(50)
70
+ } catch (error) {
71
+ // Fallback for older browsers
72
+ console.warn('Haptic feedback not supported')
73
+ }
74
+ }
75
+ }, [defaultConfig.enableHapticFeedback])
76
+
77
+ // Sound feedback function
78
+ const triggerSoundFeedback = useCallback(() => {
79
+ if (defaultConfig.enableSoundFeedback) {
80
+ // Create a simple beep sound
81
+ const audioContext = new (window.AudioContext || (window as any).webkitAudioContext)()
82
+ const oscillator = audioContext.createOscillator()
83
+ const gainNode = audioContext.createGain()
84
+
85
+ oscillator.connect(gainNode)
86
+ gainNode.connect(audioContext.destination)
87
+
88
+ oscillator.frequency.setValueAtTime(800, audioContext.currentTime)
89
+ gainNode.gain.setValueAtTime(0.1, audioContext.currentTime)
90
+
91
+ oscillator.start(audioContext.currentTime)
92
+ oscillator.stop(audioContext.currentTime + 0.1)
93
+ }
94
+ }, [defaultConfig.enableSoundFeedback])
95
+
96
+ // Calculate distance between two points
97
+ const calculateDistance = useCallback((p1: { x: number; y: number }, p2: { x: number; y: number }) => {
98
+ const dx = p2.x - p1.x
99
+ const dy = p2.y - p1.y
100
+ return Math.sqrt(dx * dx + dy * dy)
101
+ }, [])
102
+
103
+ // Calculate center point between two touches
104
+ const calculateCenter = useCallback((touches: TouchList) => {
105
+ let x = 0
106
+ let y = 0
107
+ for (let i = 0; i < touches.length; i++) {
108
+ x += touches[i].clientX
109
+ y += touches[i].clientY
110
+ }
111
+ return { x: x / touches.length, y: y / touches.length }
112
+ }, [])
113
+
114
+ // Handle touch start
115
+ const handleTouchStart = useCallback((event: TouchEvent) => {
116
+ event.preventDefault()
117
+
118
+ const touches = event.touches
119
+ const touchCount = touches.length
120
+
121
+ if (touchCount === 1) {
122
+ const touch = touches[0]
123
+ touchStartRef.current = {
124
+ x: touch.clientX,
125
+ y: touch.clientY,
126
+ time: Date.now()
127
+ }
128
+
129
+ // Start long press timer
130
+ longPressTimerRef.current = setTimeout(() => {
131
+ if (touchStartRef.current) {
132
+ const position = { x: touch.clientX, y: touch.clientY }
133
+ setGestureState(prev => ({ ...prev, currentGesture: 'longPress' }))
134
+ callbacks.onLongPress?.(position)
135
+ triggerHapticFeedback()
136
+ }
137
+ }, 500)
138
+
139
+ callbacks.onTouchStart?.({ x: touch.clientX, y: touch.clientY })
140
+ } else if (touchCount === 2) {
141
+ // Pinch gesture start
142
+ const center = calculateCenter(touches)
143
+ const distance = calculateDistance(
144
+ { x: touches[0].clientX, y: touches[0].clientY },
145
+ { x: touches[1].clientX, y: touches[1].clientY }
146
+ )
147
+
148
+ touchStartCenterRef.current = center
149
+ touchStartDistanceRef.current = distance
150
+ }
151
+
152
+ setGestureState(prev => ({ ...prev, isTracking: true, touchCount }))
153
+ }, [callbacks, calculateCenter, calculateDistance, triggerHapticFeedback])
154
+
155
+ // Handle touch move
156
+ const handleTouchMove = useCallback((event: TouchEvent) => {
157
+ event.preventDefault()
158
+
159
+ const touches = event.touches
160
+ const touchCount = touches.length
161
+
162
+ if (touchCount === 1 && touchStartRef.current) {
163
+ // Cancel long press timer on movement
164
+ if (longPressTimerRef.current) {
165
+ clearTimeout(longPressTimerRef.current)
166
+ longPressTimerRef.current = null
167
+ }
168
+ } else if (touchCount === 2 && touchStartCenterRef.current && touchStartDistanceRef.current) {
169
+ // Handle pinch gesture
170
+ const center = calculateCenter(touches)
171
+ const distance = calculateDistance(
172
+ { x: touches[0].clientX, y: touches[0].clientY },
173
+ { x: touches[1].clientX, y: touches[1].clientY }
174
+ )
175
+
176
+ const scale = distance / touchStartDistanceRef.current
177
+
178
+ if (Math.abs(scale - 1) * 100 > defaultConfig.minPinchDistance) {
179
+ const pinchGesture: PinchGesture = {
180
+ scale,
181
+ center,
182
+ distance
183
+ }
184
+
185
+ setGestureState(prev => ({ ...prev, currentGesture: 'pinch', lastGesture: pinchGesture }))
186
+ callbacks.onPinch?.(pinchGesture)
187
+ }
188
+ }
189
+ }, [callbacks, calculateCenter, calculateDistance, defaultConfig.minPinchDistance])
190
+
191
+ // Handle touch end
192
+ const handleTouchEnd = useCallback((event: TouchEvent) => {
193
+ event.preventDefault()
194
+
195
+ const touches = event.changedTouches
196
+ const touchCount = touches.length
197
+
198
+ if (touchCount === 1 && touchStartRef.current) {
199
+ const touch = touches[0]
200
+ const endTime = Date.now()
201
+ const duration = endTime - touchStartRef.current.time
202
+
203
+ // Calculate swipe gesture
204
+ const dx = touch.clientX - touchStartRef.current.x
205
+ const dy = touch.clientY - touchStartRef.current.y
206
+ const distance = Math.sqrt(dx * dx + dy * dy)
207
+
208
+ if (distance >= defaultConfig.minSwipeDistance && duration <= defaultConfig.maxSwipeTime) {
209
+ // Determine swipe direction
210
+ let direction: 'up' | 'down' | 'left' | 'right'
211
+ if (Math.abs(dx) > Math.abs(dy)) {
212
+ direction = dx > 0 ? 'right' : 'left'
213
+ } else {
214
+ direction = dy > 0 ? 'down' : 'up'
215
+ }
216
+
217
+ const velocity = distance / duration
218
+ const swipeGesture: SwipeGesture = {
219
+ direction,
220
+ distance,
221
+ velocity,
222
+ duration
223
+ }
224
+
225
+ setGestureState(prev => ({ ...prev, currentGesture: 'swipe', lastGesture: swipeGesture }))
226
+ callbacks.onSwipe?.(swipeGesture)
227
+ triggerHapticFeedback()
228
+ triggerSoundFeedback()
229
+ } else if (distance < 10 && duration < 200) {
230
+ // Handle tap gesture
231
+ const currentTime = Date.now()
232
+ const timeSinceLastTap = currentTime - lastTapTimeRef.current
233
+
234
+ if (timeSinceLastTap < 300) {
235
+ // Double tap detected
236
+ const position = { x: touch.clientX, y: touch.clientY }
237
+ callbacks.onTap?.(position)
238
+ triggerHapticFeedback()
239
+ }
240
+
241
+ lastTapTimeRef.current = currentTime
242
+ }
243
+
244
+ // Clear long press timer
245
+ if (longPressTimerRef.current) {
246
+ clearTimeout(longPressTimerRef.current)
247
+ longPressTimerRef.current = null
248
+ }
249
+
250
+ touchStartRef.current = null
251
+ callbacks.onTouchEnd?.({ x: touch.clientX, y: touch.clientY })
252
+ } else if (touchCount === 0) {
253
+ // All touches ended
254
+ touchStartCenterRef.current = null
255
+ touchStartDistanceRef.current = 0
256
+ }
257
+
258
+ setGestureState(prev => ({ ...prev, isTracking: false, currentGesture: 'none' }))
259
+ }, [callbacks, defaultConfig.minSwipeDistance, defaultConfig.maxSwipeTime, triggerHapticFeedback, triggerSoundFeedback])
260
+
261
+ // Set up event listeners
262
+ useEffect(() => {
263
+ const element = elementRef.current
264
+ if (!element) return
265
+
266
+ element.addEventListener('touchstart', handleTouchStart, { passive: false })
267
+ element.addEventListener('touchmove', handleTouchMove, { passive: false })
268
+ element.addEventListener('touchend', handleTouchEnd, { passive: false })
269
+
270
+ return () => {
271
+ element.removeEventListener('touchstart', handleTouchStart)
272
+ element.removeEventListener('touchmove', handleTouchMove)
273
+ element.removeEventListener('touchend', handleTouchEnd)
274
+
275
+ // Clean up timers
276
+ if (longPressTimerRef.current) {
277
+ clearTimeout(longPressTimerRef.current)
278
+ }
279
+ }
280
+ }, [elementRef, handleTouchStart, handleTouchMove, handleTouchEnd])
281
+
282
+ // Utility functions
283
+ const resetGestureState = useCallback(() => {
284
+ setGestureState({
285
+ isTracking: false,
286
+ currentGesture: 'none',
287
+ lastGesture: null,
288
+ touchCount: 0
289
+ })
290
+ }, [])
291
+
292
+ const isGestureActive = useMemo(() => gestureState.isTracking, [gestureState.isTracking])
293
+ const currentGestureType = useMemo(() => gestureState.currentGesture, [gestureState.currentGesture])
294
+
295
+ return {
296
+ gestureState,
297
+ isGestureActive,
298
+ currentGestureType,
299
+ resetGestureState,
300
+ triggerHapticFeedback,
301
+ triggerSoundFeedback
302
+ }
303
+ }
304
+
305
+ // Convenience hooks for specific gestures
306
+ export declare const useSwipeGesture: (
307
+ elementRef: React.RefObject<HTMLElement>,
308
+ onSwipe: (gesture: SwipeGesture) => void,
309
+ config?: Partial<GestureConfig>
310
+ ) => {
311
+ return useGestures(elementRef, { onSwipe }, config)
312
+ }
313
+
314
+ export declare const usePinchGesture: (
315
+ elementRef: React.RefObject<HTMLElement>,
316
+ onPinch: (gesture: PinchGesture) => void,
317
+ config?: Partial<GestureConfig>
318
+ ) => {
319
+ return useGestures(elementRef, { onPinch }, config)
320
+ }
321
+
322
+ export declare const useTapGesture: (
323
+ elementRef: React.RefObject<HTMLElement>,
324
+ onTap: (position: { x: number; y: number }) => void,
325
+ config?: Partial<GestureConfig>
326
+ ) => {
327
+ return useGestures(elementRef, { onTap }, config)
328
+ }
329
+
330
+ export declare const useLongPressGesture: (
331
+ elementRef: React.RefObject<HTMLElement>,
332
+ onLongPress: (position: { x: number; y: number }) => void,
333
+ config?: Partial<GestureConfig>
334
+ ) => {
335
+ return useGestures(elementRef, { onLongPress }, config)
336
+ }
@@ -0,0 +1,314 @@
1
+ import { useState, useEffect, useCallback, useRef, useMemo } from 'react'
2
+
3
+ export interface GestureConfig {
4
+ minSwipeDistance}
5
+
6
+ export interface SwipeGesture {
7
+ direction}
8
+
9
+ export interface PinchGesture {
10
+ scale; y}
11
+ distance}
12
+
13
+ export interface GestureCallbacks {
14
+ onSwipe?) => void
15
+ onPinch?) => void
16
+ onTap?; y}) => void
17
+ onLongPress?; y}) => void
18
+ onTouchStart?; y}) => void
19
+ onTouchEnd?; y}) => void
20
+ }
21
+
22
+ export interface GestureState {
23
+ isTracking}
24
+
25
+ export const useGestures = (
26
+ elementRef,
27
+ callbacks= {},
28
+ config= {}
29
+ ) => {
30
+ const defaultConfig= {
31
+ minSwipeDistance,
32
+ maxSwipeTime,
33
+ minPinchDistance,
34
+ enableHapticFeedback,
35
+ enableSoundFeedback,
36
+ ...config
37
+ }
38
+
39
+ const [gestureState, setGestureState] = useState<GestureState>({
40
+ isTracking,
41
+ currentGesture,
42
+ lastGesture,
43
+ touchCount})
44
+
45
+ const touchStartRef = useRef<{ x; y; time} | null>(null)
46
+ const touchStartDistanceRef = useRef<number>(0)
47
+ const touchStartCenterRef = useRef<{ x; y} | null>(null)
48
+ const longPressTimerRef = useRef<NodeJS.Timeout | null>(null)
49
+ const lastTapTimeRef = useRef<number>(0)
50
+
51
+ // Haptic feedback function
52
+ const triggerHapticFeedback = useCallback(() => {
53
+ if (defaultConfig.enableHapticFeedback && 'vibrate' in navigator) {
54
+ try {
55
+ navigator.vibrate(50)
56
+ } catch (error) {
57
+ // Fallback for older browsers
58
+ console.warn('Haptic feedback not supported')
59
+ }
60
+ }
61
+ }, [defaultConfig.enableHapticFeedback])
62
+
63
+ // Sound feedback function
64
+ const triggerSoundFeedback = useCallback(() => {
65
+ if (defaultConfig.enableSoundFeedback) {
66
+ // Create a simple beep sound
67
+ const audioContext = new (window.AudioContext || (window as any).webkitAudioContext)()
68
+ const oscillator = audioContext.createOscillator()
69
+ const gainNode = audioContext.createGain()
70
+
71
+ oscillator.connect(gainNode)
72
+ gainNode.connect(audioContext.destination)
73
+
74
+ oscillator.frequency.setValueAtTime(800, audioContext.currentTime)
75
+ gainNode.gain.setValueAtTime(0.1, audioContext.currentTime)
76
+
77
+ oscillator.start(audioContext.currentTime)
78
+ oscillator.stop(audioContext.currentTime + 0.1)
79
+ }
80
+ }, [defaultConfig.enableSoundFeedback])
81
+
82
+ // Calculate distance between two points
83
+ const calculateDistance = useCallback((p1; y}, p2; y}) => {
84
+ const dx = p2.x - p1.x
85
+ const dy = p2.y - p1.y
86
+ return Math.sqrt(dx * dx + dy * dy)
87
+ }, [])
88
+
89
+ // Calculate center point between two touches
90
+ const calculateCenter = useCallback((touches) => {
91
+ let x = 0
92
+ let y = 0
93
+ for (let i = 0; i < touches.length; i++) {
94
+ x += touches[i].clientX
95
+ y += touches[i].clientY
96
+ }
97
+ return { x, y}
98
+ }, [])
99
+
100
+ // Handle touch start
101
+ const handleTouchStart = useCallback((event) => {
102
+ event.preventDefault()
103
+
104
+ const touches = event.touches
105
+ const touchCount = touches.length
106
+
107
+ if (touchCount === 1) {
108
+ const touch = touches[0]
109
+ touchStartRef.current = {
110
+ x,
111
+ y,
112
+ time)
113
+ }
114
+
115
+ // Start long press timer
116
+ longPressTimerRef.current = setTimeout(() => {
117
+ if (touchStartRef.current) {
118
+ const position = { x, y}
119
+ setGestureState(prev => ({ ...prev, currentGesture}))
120
+ callbacks.onLongPress?.(position)
121
+ triggerHapticFeedback()
122
+ }
123
+ }, 500)
124
+
125
+ callbacks.onTouchStart?.({ x, y})
126
+ } else if (touchCount === 2) {
127
+ // Pinch gesture start
128
+ const center = calculateCenter(touches)
129
+ const distance = calculateDistance(
130
+ { x].clientX, y].clientY },
131
+ { x].clientX, y].clientY }
132
+ )
133
+
134
+ touchStartCenterRef.current = center
135
+ touchStartDistanceRef.current = distance
136
+ }
137
+
138
+ setGestureState(prev => ({ ...prev, isTracking, touchCount }))
139
+ }, [callbacks, calculateCenter, calculateDistance, triggerHapticFeedback])
140
+
141
+ // Handle touch move
142
+ const handleTouchMove = useCallback((event) => {
143
+ event.preventDefault()
144
+
145
+ const touches = event.touches
146
+ const touchCount = touches.length
147
+
148
+ if (touchCount === 1 && touchStartRef.current) {
149
+ // Cancel long press timer on movement
150
+ if (longPressTimerRef.current) {
151
+ clearTimeout(longPressTimerRef.current)
152
+ longPressTimerRef.current = null
153
+ }
154
+ } else if (touchCount === 2 && touchStartCenterRef.current && touchStartDistanceRef.current) {
155
+ // Handle pinch gesture
156
+ const center = calculateCenter(touches)
157
+ const distance = calculateDistance(
158
+ { x].clientX, y].clientY },
159
+ { x].clientX, y].clientY }
160
+ )
161
+
162
+ const scale = distance / touchStartDistanceRef.current
163
+
164
+ if (Math.abs(scale - 1) * 100 > defaultConfig.minPinchDistance) {
165
+ const pinchGesture= {
166
+ scale,
167
+ center,
168
+ distance
169
+ }
170
+
171
+ setGestureState(prev => ({ ...prev, currentGesture, lastGesture}))
172
+ callbacks.onPinch?.(pinchGesture)
173
+ }
174
+ }
175
+ }, [callbacks, calculateCenter, calculateDistance, defaultConfig.minPinchDistance])
176
+
177
+ // Handle touch end
178
+ const handleTouchEnd = useCallback((event) => {
179
+ event.preventDefault()
180
+
181
+ const touches = event.changedTouches
182
+ const touchCount = touches.length
183
+
184
+ if (touchCount === 1 && touchStartRef.current) {
185
+ const touch = touches[0]
186
+ const endTime = Date.now()
187
+ const duration = endTime - touchStartRef.current.time
188
+
189
+ // Calculate swipe gesture
190
+ const dx = touch.clientX - touchStartRef.current.x
191
+ const dy = touch.clientY - touchStartRef.current.y
192
+ const distance = Math.sqrt(dx * dx + dy * dy)
193
+
194
+ if (distance >= defaultConfig.minSwipeDistance && duration <= defaultConfig.maxSwipeTime) {
195
+ // Determine swipe direction
196
+ let direction) > Math.abs(dy)) {
197
+ direction = dx > 0 ? 'right' } else {
198
+ direction = dy > 0 ? 'down' }
199
+
200
+ const velocity = distance / duration
201
+ const swipeGesture= {
202
+ direction,
203
+ distance,
204
+ velocity,
205
+ duration
206
+ }
207
+
208
+ setGestureState(prev => ({ ...prev, currentGesture, lastGesture}))
209
+ callbacks.onSwipe?.(swipeGesture)
210
+ triggerHapticFeedback()
211
+ triggerSoundFeedback()
212
+ } else if (distance < 10 && duration < 200) {
213
+ // Handle tap gesture
214
+ const currentTime = Date.now()
215
+ const timeSinceLastTap = currentTime - lastTapTimeRef.current
216
+
217
+ if (timeSinceLastTap < 300) {
218
+ // Double tap detected
219
+ const position = { x, y}
220
+ callbacks.onTap?.(position)
221
+ triggerHapticFeedback()
222
+ }
223
+
224
+ lastTapTimeRef.current = currentTime
225
+ }
226
+
227
+ // Clear long press timer
228
+ if (longPressTimerRef.current) {
229
+ clearTimeout(longPressTimerRef.current)
230
+ longPressTimerRef.current = null
231
+ }
232
+
233
+ touchStartRef.current = null
234
+ callbacks.onTouchEnd?.({ x, y})
235
+ } else if (touchCount === 0) {
236
+ // All touches ended
237
+ touchStartCenterRef.current = null
238
+ touchStartDistanceRef.current = 0
239
+ }
240
+
241
+ setGestureState(prev => ({ ...prev, isTracking, currentGesture}))
242
+ }, [callbacks, defaultConfig.minSwipeDistance, defaultConfig.maxSwipeTime, triggerHapticFeedback, triggerSoundFeedback])
243
+
244
+ // Set up event listeners
245
+ useEffect(() => {
246
+ const element = elementRef.current
247
+ if (!element) return
248
+
249
+ element.addEventListener('touchstart', handleTouchStart, { passive})
250
+ element.addEventListener('touchmove', handleTouchMove, { passive})
251
+ element.addEventListener('touchend', handleTouchEnd, { passive})
252
+
253
+ return () => {
254
+ element.removeEventListener('touchstart', handleTouchStart)
255
+ element.removeEventListener('touchmove', handleTouchMove)
256
+ element.removeEventListener('touchend', handleTouchEnd)
257
+
258
+ // Clean up timers
259
+ if (longPressTimerRef.current) {
260
+ clearTimeout(longPressTimerRef.current)
261
+ }
262
+ }
263
+ }, [elementRef, handleTouchStart, handleTouchMove, handleTouchEnd])
264
+
265
+ // Utility functions
266
+ const resetGestureState = useCallback(() => {
267
+ setGestureState({
268
+ isTracking,
269
+ currentGesture,
270
+ lastGesture,
271
+ touchCount})
272
+ }, [])
273
+
274
+ const isGestureActive = useMemo(() => gestureState.isTracking, [gestureState.isTracking])
275
+ const currentGestureType = useMemo(() => gestureState.currentGesture, [gestureState.currentGesture])
276
+
277
+ return {
278
+ gestureState,
279
+ isGestureActive,
280
+ currentGestureType,
281
+ resetGestureState,
282
+ triggerHapticFeedback,
283
+ triggerSoundFeedback
284
+ }
285
+ }
286
+
287
+ // Convenience hooks for specific gestures
288
+ export const useSwipeGesture = (
289
+ elementRef,
290
+ onSwipe) => void,
291
+ config?) => {
292
+ return useGestures(elementRef, { onSwipe }, config)
293
+ }
294
+
295
+ export const usePinchGesture = (
296
+ elementRef,
297
+ onPinch) => void,
298
+ config?) => {
299
+ return useGestures(elementRef, { onPinch }, config)
300
+ }
301
+
302
+ export const useTapGesture = (
303
+ elementRef,
304
+ onTap; y}) => void,
305
+ config?) => {
306
+ return useGestures(elementRef, { onTap }, config)
307
+ }
308
+
309
+ export const useLongPressGesture = (
310
+ elementRef,
311
+ onLongPress; y}) => void,
312
+ config?) => {
313
+ return useGestures(elementRef, { onLongPress }, config)
314
+ }