@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.6 → 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 (468) 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/index.esm.js +2 -2
  345. package/dist/index.js +2 -2
  346. package/dist/lib/utils.d.ts +3 -0
  347. package/dist/lib/utils.esm.js +6 -0
  348. package/dist/lib/utils.js +6 -0
  349. package/dist/plugins/theme-css-generator.d.ts +345 -0
  350. package/dist/plugins/theme-css-generator.esm.js +305 -0
  351. package/dist/plugins/theme-css-generator.js +305 -0
  352. package/dist/styles.css +1 -1
  353. package/dist/themes/ThemeContext.d.ts +27 -0
  354. package/dist/themes/ThemeContext.esm.js +31 -0
  355. package/dist/themes/ThemeContext.js +31 -0
  356. package/dist/themes/ThemeProvider.d.ts +222 -0
  357. package/dist/themes/ThemeProvider.esm.js +229 -0
  358. package/dist/themes/ThemeProvider.js +229 -0
  359. package/dist/themes/accessibility/index.d.ts +7 -0
  360. package/dist/themes/accessibility/index.esm.js +27 -0
  361. package/dist/themes/accessibility/index.js +27 -0
  362. package/dist/themes/accessibility.d.ts +259 -0
  363. package/dist/themes/accessibility.esm.js +220 -0
  364. package/dist/themes/accessibility.js +220 -0
  365. package/dist/themes/aria-patterns.d.ts +418 -0
  366. package/dist/themes/aria-patterns.esm.js +384 -0
  367. package/dist/themes/aria-patterns.js +384 -0
  368. package/dist/themes/base-themes.d.ts +34 -0
  369. package/dist/themes/base-themes.esm.js +52 -0
  370. package/dist/themes/base-themes.js +52 -0
  371. package/dist/themes/colorManager.d.ts +327 -0
  372. package/dist/themes/colorManager.esm.js +362 -0
  373. package/dist/themes/colorManager.js +362 -0
  374. package/dist/themes/examples/dark-theme.d.ts +139 -0
  375. package/dist/themes/examples/dark-theme.esm.js +124 -0
  376. package/dist/themes/examples/dark-theme.js +124 -0
  377. package/dist/themes/examples/minimal-theme.d.ts +93 -0
  378. package/dist/themes/examples/minimal-theme.esm.js +86 -0
  379. package/dist/themes/examples/minimal-theme.js +86 -0
  380. package/dist/themes/focus-management.d.ts +699 -0
  381. package/dist/themes/focus-management.esm.js +642 -0
  382. package/dist/themes/focus-management.js +642 -0
  383. package/dist/themes/fontLoader.d.ts +163 -0
  384. package/dist/themes/fontLoader.esm.js +192 -0
  385. package/dist/themes/fontLoader.js +192 -0
  386. package/dist/themes/high-contrast.d.ts +619 -0
  387. package/dist/themes/high-contrast.esm.js +573 -0
  388. package/dist/themes/high-contrast.js +573 -0
  389. package/dist/themes/index.d.ts +11 -0
  390. package/dist/themes/index.esm.js +19 -0
  391. package/dist/themes/index.js +19 -0
  392. package/dist/themes/inheritance.d.ts +160 -0
  393. package/dist/themes/inheritance.esm.js +219 -0
  394. package/dist/themes/inheritance.js +219 -0
  395. package/dist/themes/keyboard-navigation.d.ts +550 -0
  396. package/dist/themes/keyboard-navigation.esm.js +521 -0
  397. package/dist/themes/keyboard-navigation.js +521 -0
  398. package/dist/themes/motion-reduction.d.ts +660 -0
  399. package/dist/themes/motion-reduction.esm.js +602 -0
  400. package/dist/themes/motion-reduction.js +602 -0
  401. package/dist/themes/navigation.d.ts +232 -0
  402. package/dist/themes/navigation.esm.js +238 -0
  403. package/dist/themes/navigation.js +238 -0
  404. package/dist/themes/screen-reader.d.ts +645 -0
  405. package/dist/themes/screen-reader.esm.js +580 -0
  406. package/dist/themes/screen-reader.js +580 -0
  407. package/dist/themes/systemThemeDetector.d.ts +148 -0
  408. package/dist/themes/systemThemeDetector.esm.js +174 -0
  409. package/dist/themes/systemThemeDetector.js +174 -0
  410. package/dist/themes/themeCSSUpdater.d.ts +229 -0
  411. package/dist/themes/themeCSSUpdater.esm.js +250 -0
  412. package/dist/themes/themeCSSUpdater.js +250 -0
  413. package/dist/themes/themePersistence.d.ts +192 -0
  414. package/dist/themes/themePersistence.esm.js +217 -0
  415. package/dist/themes/themePersistence.js +217 -0
  416. package/dist/themes/themes/stan-design.d.ts +678 -0
  417. package/dist/themes/themes/stan-design.esm.js +518 -0
  418. package/dist/themes/themes/stan-design.js +518 -0
  419. package/dist/themes/types.d.ts +454 -0
  420. package/dist/themes/types.esm.js +446 -0
  421. package/dist/themes/types.js +446 -0
  422. package/dist/themes/useSystemTheme.d.ts +43 -0
  423. package/dist/themes/useSystemTheme.esm.js +48 -0
  424. package/dist/themes/useSystemTheme.js +48 -0
  425. package/dist/themes/useTheme.d.ts +20 -0
  426. package/dist/themes/useTheme.esm.js +87 -0
  427. package/dist/themes/useTheme.js +87 -0
  428. package/dist/themes/validation.d.ts +406 -0
  429. package/dist/themes/validation.esm.js +411 -0
  430. package/dist/themes/validation.js +411 -0
  431. package/dist/tokens/index.d.ts +25 -0
  432. package/dist/tokens/index.esm.js +23 -0
  433. package/dist/tokens/index.js +23 -0
  434. package/dist/tokens/tokenExporter.d.ts +336 -0
  435. package/dist/tokens/tokenExporter.esm.js +371 -0
  436. package/dist/tokens/tokenExporter.js +371 -0
  437. package/dist/tokens/tokenGenerator.d.ts +250 -0
  438. package/dist/tokens/tokenGenerator.esm.js +267 -0
  439. package/dist/tokens/tokenGenerator.js +267 -0
  440. package/dist/tokens/tokenManager.d.ts +194 -0
  441. package/dist/tokens/tokenManager.esm.js +235 -0
  442. package/dist/tokens/tokenManager.js +235 -0
  443. package/dist/tokens/tokenValidator.d.ts +488 -0
  444. package/dist/tokens/tokenValidator.esm.js +497 -0
  445. package/dist/tokens/tokenValidator.js +497 -0
  446. package/dist/tokens/types.d.ts +78 -0
  447. package/dist/tokens/types.esm.js +64 -0
  448. package/dist/tokens/types.js +64 -0
  449. package/dist/utils/bundle-analyzer.d.ts +260 -0
  450. package/dist/utils/bundle-analyzer.esm.js +242 -0
  451. package/dist/utils/bundle-analyzer.js +242 -0
  452. package/dist/utils/bundle-splitting.d.ts +483 -0
  453. package/dist/utils/bundle-splitting.esm.js +458 -0
  454. package/dist/utils/bundle-splitting.js +458 -0
  455. package/dist/utils/lazy-loading.d.ts +437 -0
  456. package/dist/utils/lazy-loading.esm.js +415 -0
  457. package/dist/utils/lazy-loading.js +415 -0
  458. package/dist/utils/performance-monitor.d.ts +513 -0
  459. package/dist/utils/performance-monitor.esm.js +472 -0
  460. package/dist/utils/performance-monitor.js +472 -0
  461. package/dist/utils/tree-shaking.d.ts +274 -0
  462. package/dist/utils/tree-shaking.esm.js +266 -0
  463. package/dist/utils/tree-shaking.js +266 -0
  464. package/package.json +1 -1
  465. package/src/index.ts +2 -2
  466. package/src/themes/accessibility/index.ts +1 -1
  467. package/src/themes/focus-management.ts +3 -3
  468. package/src/themes/keyboard-navigation.ts +3 -3
@@ -0,0 +1,348 @@
1
+ import { useState, useEffect, useCallback, useRef } from 'react'
2
+
3
+ export interface TouchOptimizationConfig {
4
+ enablePassiveListeners}
5
+
6
+ export interface TouchPerformanceMetrics {
7
+ touchEventCount}
8
+
9
+ export interface TouchOptimizationCallbacks {
10
+ onTouchPerformanceWarning?) => void
11
+ onBatteryOptimization?) => void
12
+ onTouchEventThrottling?) => void
13
+ }
14
+
15
+ export interface TouchOptimizationState {
16
+ isOptimized}
17
+
18
+ export const useTouchOptimization = (
19
+ elementRef,
20
+ callbacks= {},
21
+ config= {}
22
+ ) => {
23
+ const defaultConfig= {
24
+ enablePassiveListeners,
25
+ enableTouchActionOptimization,
26
+ enableBatteryOptimization,
27
+ enablePerformanceMonitoring,
28
+ touchActionMode,
29
+ maxTouchPoints,
30
+ touchEventThrottling, // ~60fps
31
+ ...config
32
+ }
33
+
34
+ const [optimizationState, setOptimizationState] = useState<TouchOptimizationState>({
35
+ isOptimized,
36
+ currentTouchAction,
37
+ passiveListenersEnabled,
38
+ batteryOptimizationEnabled,
39
+ throttlingEnabled,
40
+ lastOptimization})
41
+
42
+ const [performanceMetrics, setPerformanceMetrics] = useState<TouchPerformanceMetrics>({
43
+ touchEventCount,
44
+ averageTouchDuration,
45
+ touchEventLatency,
46
+ batteryImpact,
47
+ performanceScore})
48
+
49
+ const touchEventTimesRef = useRef<number[]>([])
50
+ const lastTouchEventRef = useRef<number>(0)
51
+ const touchEventThrottleTimerRef = useRef<NodeJS.Timeout | null>(null)
52
+ const batteryLevelRef = useRef<number | null>(null)
53
+ const isLowPowerModeRef = useRef<boolean>(false)
54
+
55
+ // Check battery status for optimization
56
+ useEffect(() => {
57
+ const checkBatteryStatus = async () => {
58
+ if ('getBattery' in navigator) {
59
+ try {
60
+ const battery = await (navigator as any).getBattery()
61
+ batteryLevelRef.current = battery.level
62
+ isLowPowerModeRef.current = battery.level < 0.2
63
+
64
+ if (defaultConfig.enableBatteryOptimization && isLowPowerModeRef.current) {
65
+ setOptimizationState(prev => ({ ...prev, batteryOptimizationEnabled}))
66
+ callbacks.onBatteryOptimization?.(true)
67
+ }
68
+ } catch (error) {
69
+ console.warn('Battery API not supported, error)
70
+ }
71
+ }
72
+ }
73
+
74
+ checkBatteryStatus()
75
+ }, [defaultConfig.enableBatteryOptimization, callbacks])
76
+
77
+ // Calculate performance score
78
+ const calculatePerformanceScore = useCallback((metrics)=> {
79
+ if (metrics.touchEventLatency < 16 && metrics.averageTouchDuration < 50) return 'excellent'
80
+ if (metrics.touchEventLatency < 32 && metrics.averageTouchDuration < 100) return 'good'
81
+ if (metrics.touchEventLatency < 64 && metrics.averageTouchDuration < 200) return 'fair'
82
+ return 'poor'
83
+ }, [])
84
+
85
+ // Update performance metrics
86
+ const updatePerformanceMetrics = useCallback((touchDuration, latency) => {
87
+ const currentTime = Date.now()
88
+ touchEventTimesRef.current.push(currentTime)
89
+
90
+ // Keep only last 100 touch events for averaging
91
+ if (touchEventTimesRef.current.length > 100) {
92
+ touchEventTimesRef.current.shift()
93
+ }
94
+
95
+ setPerformanceMetrics(prev => {
96
+ const newCount = prev.touchEventCount + 1
97
+ const newAverageDuration = (prev.averageTouchDuration * prev.touchEventCount + touchDuration) / newCount
98
+ const newAverageLatency = (prev.touchEventLatency * prev.touchEventCount + latency) / newCount
99
+
100
+ const batteryImpact= isLowPowerModeRef.current ? 'high' = {
101
+ touchEventCount,
102
+ averageTouchDuration,
103
+ touchEventLatency,
104
+ batteryImpact,
105
+ performanceScore}
106
+
107
+ newMetrics.performanceScore = calculatePerformanceScore(newMetrics)
108
+
109
+ // Check for performance warnings
110
+ if (newMetrics.performanceScore === 'poor' || newMetrics.touchEventLatency > 100) {
111
+ callbacks.onTouchPerformanceWarning?.(newMetrics)
112
+ }
113
+
114
+ return newMetrics
115
+ })
116
+ }, [callbacks, calculatePerformanceScore])
117
+
118
+ // Optimize touch action CSS
119
+ const optimizeTouchAction = useCallback(() => {
120
+ const element = elementRef.current
121
+ if (!element || !defaultConfig.enableTouchActionOptimization) return
122
+
123
+ const currentTouchAction = getComputedStyle(element).touchAction
124
+
125
+ if (currentTouchAction !== defaultConfig.touchActionMode) {
126
+ element.style.touchAction = defaultConfig.touchActionMode
127
+ setOptimizationState(prev => ({
128
+ ...prev,
129
+ currentTouchAction,
130
+ lastOptimization)
131
+ }))
132
+ }
133
+ }, [elementRef, defaultConfig.enableTouchActionOptimization, defaultConfig.touchActionMode])
134
+
135
+ // Enable passive listeners for better performance
136
+ const enablePassiveListeners = useCallback(() => {
137
+ const element = elementRef.current
138
+ if (!element || !defaultConfig.enablePassiveListeners) return
139
+
140
+ // Check if passive listeners are supported
141
+ let supportsPassive = false
142
+ try {
143
+ const opts = Object.defineProperty({}, 'passive', {
144
+ get) => { supportsPassive = true; return true; }
145
+ })
146
+ // Use a dummy event listener to test passive support
147
+ const testListener = () => {}
148
+ window.addEventListener('test', testListener, opts)
149
+ window.removeEventListener('test', testListener, opts)
150
+ } catch (e) {
151
+ // Passive listeners not supported
152
+ }
153
+
154
+ if (supportsPassive) {
155
+ setOptimizationState(prev => ({ ...prev, passiveListenersEnabled}))
156
+ }
157
+ }, [elementRef, defaultConfig.enablePassiveListeners])
158
+
159
+ // Touch event throttling for performance
160
+ const enableTouchEventThrottling = useCallback(() => {
161
+ if (!defaultConfig.enablePerformanceMonitoring) return
162
+
163
+ setOptimizationState(prev => ({ ...prev, throttlingEnabled}))
164
+ callbacks.onTouchEventThrottling?.(true)
165
+ }, [defaultConfig.enablePerformanceMonitoring, callbacks])
166
+
167
+ // Optimize touch event handling
168
+ const optimizeTouchEventHandling = useCallback((event) => {
169
+ const currentTime = Date.now()
170
+ const touchDuration = currentTime - lastTouchEventRef.current
171
+ const latency = performance.now() - event.timeStamp
172
+
173
+ // Update performance metrics
174
+ updatePerformanceMetrics(touchDuration, latency)
175
+
176
+ // Apply throttling if enabled
177
+ if (optimizationState.throttlingEnabled && touchEventThrottleTimerRef.current) {
178
+ return // Skip this event due to throttling
179
+ }
180
+
181
+ // Set up throttling for next event
182
+ if (optimizationState.throttlingEnabled) {
183
+ touchEventThrottleTimerRef.current = setTimeout(() => {
184
+ touchEventThrottleTimerRef.current = null
185
+ }, defaultConfig.touchEventThrottling)
186
+ }
187
+
188
+ lastTouchEventRef.current = currentTime
189
+ }, [optimizationState.throttlingEnabled, updatePerformanceMetrics, defaultConfig.touchEventThrottling])
190
+
191
+ // Apply all optimizations
192
+ const applyOptimizations = useCallback(() => {
193
+ optimizeTouchAction()
194
+ enablePassiveListeners()
195
+
196
+ if (defaultConfig.enableBatteryOptimization && isLowPowerModeRef.current) {
197
+ enableTouchEventThrottling()
198
+ }
199
+
200
+ setOptimizationState(prev => ({
201
+ ...prev,
202
+ isOptimized,
203
+ lastOptimization)
204
+ }))
205
+ }, [
206
+ optimizeTouchAction,
207
+ enablePassiveListeners,
208
+ enableTouchEventThrottling,
209
+ defaultConfig.enableBatteryOptimization
210
+ ])
211
+
212
+ // Reset optimizations
213
+ const resetOptimizations = useCallback(() => {
214
+ const element = elementRef.current
215
+ if (element) {
216
+ element.style.touchAction = 'auto'
217
+ }
218
+
219
+ setOptimizationState({
220
+ isOptimized,
221
+ currentTouchAction,
222
+ passiveListenersEnabled,
223
+ batteryOptimizationEnabled,
224
+ throttlingEnabled,
225
+ lastOptimization})
226
+
227
+ setPerformanceMetrics({
228
+ touchEventCount,
229
+ averageTouchDuration,
230
+ touchEventLatency,
231
+ batteryImpact,
232
+ performanceScore})
233
+
234
+ if (touchEventThrottleTimerRef.current) {
235
+ clearTimeout(touchEventThrottleTimerRef.current)
236
+ touchEventThrottleTimerRef.current = null
237
+ }
238
+ }, [elementRef])
239
+
240
+ // Set up touch event listeners with optimization
241
+ useEffect(() => {
242
+ const element = elementRef.current
243
+ if (!element) return
244
+
245
+ // Apply initial optimizations
246
+ applyOptimizations()
247
+
248
+ // Add touch event listener
249
+ const handleTouchEvent = (event) => {
250
+ if (defaultConfig.enablePerformanceMonitoring) {
251
+ optimizeTouchEventHandling(event)
252
+ }
253
+ }
254
+
255
+ const eventOptions = optimizationState.passiveListenersEnabled ? { passive} }
256
+ element.addEventListener('touchstart', handleTouchEvent, eventOptions)
257
+ element.addEventListener('touchmove', handleTouchEvent, eventOptions)
258
+ element.addEventListener('touchend', handleTouchEvent, eventOptions)
259
+
260
+ return () => {
261
+ element.removeEventListener('touchstart', handleTouchEvent)
262
+ element.removeEventListener('touchmove', handleTouchEvent)
263
+ element.removeEventListener('touchend', handleTouchEvent)
264
+
265
+ if (touchEventThrottleTimerRef.current) {
266
+ clearTimeout(touchEventThrottleTimerRef.current)
267
+ }
268
+ }
269
+ }, [
270
+ elementRef,
271
+ applyOptimizations,
272
+ optimizationState.passiveListenersEnabled,
273
+ defaultConfig.enablePerformanceMonitoring,
274
+ optimizeTouchEventHandling
275
+ ])
276
+
277
+ // Monitor battery changes
278
+ useEffect(() => {
279
+ const handleBatteryChange = () => {
280
+ if (defaultConfig.enableBatteryOptimization) {
281
+ applyOptimizations()
282
+ }
283
+ }
284
+
285
+ if ('getBattery' in navigator) {
286
+ // Battery change events are not widely supported, so we'll check periodically
287
+ const batteryCheckInterval = setInterval(handleBatteryChange, 30000) // Check every 30 seconds
288
+
289
+ return () => clearInterval(batteryCheckInterval)
290
+ }
291
+ }, [defaultConfig.enableBatteryOptimization, applyOptimizations])
292
+
293
+ // Utility functions
294
+ const getOptimizationReport = useCallback(() => {
295
+ return {
296
+ state,
297
+ metrics,
298
+ recommendations)
299
+ }
300
+ }, [optimizationState, performanceMetrics])
301
+
302
+ const getOptimizationRecommendations = useCallback(() => {
303
+ const recommendations] = []
304
+
305
+ if (performanceMetrics.performanceScore === 'poor') {
306
+ recommendations.push('Consider enabling touch event throttling')
307
+ recommendations.push('Reduce touch event complexity')
308
+ }
309
+
310
+ if (performanceMetrics.batteryImpact === 'high') {
311
+ recommendations.push('Enable battery optimization mode')
312
+ recommendations.push('Reduce touch event frequency')
313
+ }
314
+
315
+ if (!optimizationState.passiveListenersEnabled) {
316
+ recommendations.push('Enable passive event listeners for better performance')
317
+ }
318
+
319
+ return recommendations
320
+ }, [performanceMetrics, optimizationState])
321
+
322
+ return {
323
+ optimizationState,
324
+ performanceMetrics,
325
+ applyOptimizations,
326
+ resetOptimizations,
327
+ getOptimizationReport,
328
+ getOptimizationRecommendations
329
+ }
330
+ }
331
+
332
+ // Convenience hook for basic touch optimization
333
+ export const useBasicTouchOptimization = (elementRef) => {
334
+ return useTouchOptimization(elementRef, {}, {
335
+ enablePassiveListeners,
336
+ enableTouchActionOptimization,
337
+ enableBatteryOptimization,
338
+ enablePerformanceMonitoring})
339
+ }
340
+
341
+ // Convenience hook for battery-aware touch optimization
342
+ export const useBatteryAwareTouchOptimization = (elementRef) => {
343
+ return useTouchOptimization(elementRef, {}, {
344
+ enablePassiveListeners,
345
+ enableTouchActionOptimization,
346
+ enableBatteryOptimization,
347
+ enablePerformanceMonitoring})
348
+ }
@@ -0,0 +1,348 @@
1
+ import { useState, useEffect, useCallback, useRef } from 'react'
2
+
3
+ export interface TouchOptimizationConfig {
4
+ enablePassiveListeners}
5
+
6
+ export interface TouchPerformanceMetrics {
7
+ touchEventCount}
8
+
9
+ export interface TouchOptimizationCallbacks {
10
+ onTouchPerformanceWarning?) => void
11
+ onBatteryOptimization?) => void
12
+ onTouchEventThrottling?) => void
13
+ }
14
+
15
+ export interface TouchOptimizationState {
16
+ isOptimized}
17
+
18
+ export const useTouchOptimization = (
19
+ elementRef,
20
+ callbacks= {},
21
+ config= {}
22
+ ) => {
23
+ const defaultConfig= {
24
+ enablePassiveListeners,
25
+ enableTouchActionOptimization,
26
+ enableBatteryOptimization,
27
+ enablePerformanceMonitoring,
28
+ touchActionMode,
29
+ maxTouchPoints,
30
+ touchEventThrottling, // ~60fps
31
+ ...config
32
+ }
33
+
34
+ const [optimizationState, setOptimizationState] = useState<TouchOptimizationState>({
35
+ isOptimized,
36
+ currentTouchAction,
37
+ passiveListenersEnabled,
38
+ batteryOptimizationEnabled,
39
+ throttlingEnabled,
40
+ lastOptimization})
41
+
42
+ const [performanceMetrics, setPerformanceMetrics] = useState<TouchPerformanceMetrics>({
43
+ touchEventCount,
44
+ averageTouchDuration,
45
+ touchEventLatency,
46
+ batteryImpact,
47
+ performanceScore})
48
+
49
+ const touchEventTimesRef = useRef<number[]>([])
50
+ const lastTouchEventRef = useRef<number>(0)
51
+ const touchEventThrottleTimerRef = useRef<NodeJS.Timeout | null>(null)
52
+ const batteryLevelRef = useRef<number | null>(null)
53
+ const isLowPowerModeRef = useRef<boolean>(false)
54
+
55
+ // Check battery status for optimization
56
+ useEffect(() => {
57
+ const checkBatteryStatus = async () => {
58
+ if ('getBattery' in navigator) {
59
+ try {
60
+ const battery = await (navigator as any).getBattery()
61
+ batteryLevelRef.current = battery.level
62
+ isLowPowerModeRef.current = battery.level < 0.2
63
+
64
+ if (defaultConfig.enableBatteryOptimization && isLowPowerModeRef.current) {
65
+ setOptimizationState(prev => ({ ...prev, batteryOptimizationEnabled}))
66
+ callbacks.onBatteryOptimization?.(true)
67
+ }
68
+ } catch (error) {
69
+ console.warn('Battery API not supported, error)
70
+ }
71
+ }
72
+ }
73
+
74
+ checkBatteryStatus()
75
+ }, [defaultConfig.enableBatteryOptimization, callbacks])
76
+
77
+ // Calculate performance score
78
+ const calculatePerformanceScore = useCallback((metrics)=> {
79
+ if (metrics.touchEventLatency < 16 && metrics.averageTouchDuration < 50) return 'excellent'
80
+ if (metrics.touchEventLatency < 32 && metrics.averageTouchDuration < 100) return 'good'
81
+ if (metrics.touchEventLatency < 64 && metrics.averageTouchDuration < 200) return 'fair'
82
+ return 'poor'
83
+ }, [])
84
+
85
+ // Update performance metrics
86
+ const updatePerformanceMetrics = useCallback((touchDuration, latency) => {
87
+ const currentTime = Date.now()
88
+ touchEventTimesRef.current.push(currentTime)
89
+
90
+ // Keep only last 100 touch events for averaging
91
+ if (touchEventTimesRef.current.length > 100) {
92
+ touchEventTimesRef.current.shift()
93
+ }
94
+
95
+ setPerformanceMetrics(prev => {
96
+ const newCount = prev.touchEventCount + 1
97
+ const newAverageDuration = (prev.averageTouchDuration * prev.touchEventCount + touchDuration) / newCount
98
+ const newAverageLatency = (prev.touchEventLatency * prev.touchEventCount + latency) / newCount
99
+
100
+ const batteryImpact= isLowPowerModeRef.current ? 'high' = {
101
+ touchEventCount,
102
+ averageTouchDuration,
103
+ touchEventLatency,
104
+ batteryImpact,
105
+ performanceScore}
106
+
107
+ newMetrics.performanceScore = calculatePerformanceScore(newMetrics)
108
+
109
+ // Check for performance warnings
110
+ if (newMetrics.performanceScore === 'poor' || newMetrics.touchEventLatency > 100) {
111
+ callbacks.onTouchPerformanceWarning?.(newMetrics)
112
+ }
113
+
114
+ return newMetrics
115
+ })
116
+ }, [callbacks, calculatePerformanceScore])
117
+
118
+ // Optimize touch action CSS
119
+ const optimizeTouchAction = useCallback(() => {
120
+ const element = elementRef.current
121
+ if (!element || !defaultConfig.enableTouchActionOptimization) return
122
+
123
+ const currentTouchAction = getComputedStyle(element).touchAction
124
+
125
+ if (currentTouchAction !== defaultConfig.touchActionMode) {
126
+ element.style.touchAction = defaultConfig.touchActionMode
127
+ setOptimizationState(prev => ({
128
+ ...prev,
129
+ currentTouchAction,
130
+ lastOptimization)
131
+ }))
132
+ }
133
+ }, [elementRef, defaultConfig.enableTouchActionOptimization, defaultConfig.touchActionMode])
134
+
135
+ // Enable passive listeners for better performance
136
+ const enablePassiveListeners = useCallback(() => {
137
+ const element = elementRef.current
138
+ if (!element || !defaultConfig.enablePassiveListeners) return
139
+
140
+ // Check if passive listeners are supported
141
+ let supportsPassive = false
142
+ try {
143
+ const opts = Object.defineProperty({}, 'passive', {
144
+ get) => { supportsPassive = true; return true; }
145
+ })
146
+ // Use a dummy event listener to test passive support
147
+ const testListener = () => {}
148
+ window.addEventListener('test', testListener, opts)
149
+ window.removeEventListener('test', testListener, opts)
150
+ } catch (e) {
151
+ // Passive listeners not supported
152
+ }
153
+
154
+ if (supportsPassive) {
155
+ setOptimizationState(prev => ({ ...prev, passiveListenersEnabled}))
156
+ }
157
+ }, [elementRef, defaultConfig.enablePassiveListeners])
158
+
159
+ // Touch event throttling for performance
160
+ const enableTouchEventThrottling = useCallback(() => {
161
+ if (!defaultConfig.enablePerformanceMonitoring) return
162
+
163
+ setOptimizationState(prev => ({ ...prev, throttlingEnabled}))
164
+ callbacks.onTouchEventThrottling?.(true)
165
+ }, [defaultConfig.enablePerformanceMonitoring, callbacks])
166
+
167
+ // Optimize touch event handling
168
+ const optimizeTouchEventHandling = useCallback((event) => {
169
+ const currentTime = Date.now()
170
+ const touchDuration = currentTime - lastTouchEventRef.current
171
+ const latency = performance.now() - event.timeStamp
172
+
173
+ // Update performance metrics
174
+ updatePerformanceMetrics(touchDuration, latency)
175
+
176
+ // Apply throttling if enabled
177
+ if (optimizationState.throttlingEnabled && touchEventThrottleTimerRef.current) {
178
+ return // Skip this event due to throttling
179
+ }
180
+
181
+ // Set up throttling for next event
182
+ if (optimizationState.throttlingEnabled) {
183
+ touchEventThrottleTimerRef.current = setTimeout(() => {
184
+ touchEventThrottleTimerRef.current = null
185
+ }, defaultConfig.touchEventThrottling)
186
+ }
187
+
188
+ lastTouchEventRef.current = currentTime
189
+ }, [optimizationState.throttlingEnabled, updatePerformanceMetrics, defaultConfig.touchEventThrottling])
190
+
191
+ // Apply all optimizations
192
+ const applyOptimizations = useCallback(() => {
193
+ optimizeTouchAction()
194
+ enablePassiveListeners()
195
+
196
+ if (defaultConfig.enableBatteryOptimization && isLowPowerModeRef.current) {
197
+ enableTouchEventThrottling()
198
+ }
199
+
200
+ setOptimizationState(prev => ({
201
+ ...prev,
202
+ isOptimized,
203
+ lastOptimization)
204
+ }))
205
+ }, [
206
+ optimizeTouchAction,
207
+ enablePassiveListeners,
208
+ enableTouchEventThrottling,
209
+ defaultConfig.enableBatteryOptimization
210
+ ])
211
+
212
+ // Reset optimizations
213
+ const resetOptimizations = useCallback(() => {
214
+ const element = elementRef.current
215
+ if (element) {
216
+ element.style.touchAction = 'auto'
217
+ }
218
+
219
+ setOptimizationState({
220
+ isOptimized,
221
+ currentTouchAction,
222
+ passiveListenersEnabled,
223
+ batteryOptimizationEnabled,
224
+ throttlingEnabled,
225
+ lastOptimization})
226
+
227
+ setPerformanceMetrics({
228
+ touchEventCount,
229
+ averageTouchDuration,
230
+ touchEventLatency,
231
+ batteryImpact,
232
+ performanceScore})
233
+
234
+ if (touchEventThrottleTimerRef.current) {
235
+ clearTimeout(touchEventThrottleTimerRef.current)
236
+ touchEventThrottleTimerRef.current = null
237
+ }
238
+ }, [elementRef])
239
+
240
+ // Set up touch event listeners with optimization
241
+ useEffect(() => {
242
+ const element = elementRef.current
243
+ if (!element) return
244
+
245
+ // Apply initial optimizations
246
+ applyOptimizations()
247
+
248
+ // Add touch event listener
249
+ const handleTouchEvent = (event) => {
250
+ if (defaultConfig.enablePerformanceMonitoring) {
251
+ optimizeTouchEventHandling(event)
252
+ }
253
+ }
254
+
255
+ const eventOptions = optimizationState.passiveListenersEnabled ? { passive} }
256
+ element.addEventListener('touchstart', handleTouchEvent, eventOptions)
257
+ element.addEventListener('touchmove', handleTouchEvent, eventOptions)
258
+ element.addEventListener('touchend', handleTouchEvent, eventOptions)
259
+
260
+ return () => {
261
+ element.removeEventListener('touchstart', handleTouchEvent)
262
+ element.removeEventListener('touchmove', handleTouchEvent)
263
+ element.removeEventListener('touchend', handleTouchEvent)
264
+
265
+ if (touchEventThrottleTimerRef.current) {
266
+ clearTimeout(touchEventThrottleTimerRef.current)
267
+ }
268
+ }
269
+ }, [
270
+ elementRef,
271
+ applyOptimizations,
272
+ optimizationState.passiveListenersEnabled,
273
+ defaultConfig.enablePerformanceMonitoring,
274
+ optimizeTouchEventHandling
275
+ ])
276
+
277
+ // Monitor battery changes
278
+ useEffect(() => {
279
+ const handleBatteryChange = () => {
280
+ if (defaultConfig.enableBatteryOptimization) {
281
+ applyOptimizations()
282
+ }
283
+ }
284
+
285
+ if ('getBattery' in navigator) {
286
+ // Battery change events are not widely supported, so we'll check periodically
287
+ const batteryCheckInterval = setInterval(handleBatteryChange, 30000) // Check every 30 seconds
288
+
289
+ return () => clearInterval(batteryCheckInterval)
290
+ }
291
+ }, [defaultConfig.enableBatteryOptimization, applyOptimizations])
292
+
293
+ // Utility functions
294
+ const getOptimizationReport = useCallback(() => {
295
+ return {
296
+ state,
297
+ metrics,
298
+ recommendations)
299
+ }
300
+ }, [optimizationState, performanceMetrics])
301
+
302
+ const getOptimizationRecommendations = useCallback(() => {
303
+ const recommendations] = []
304
+
305
+ if (performanceMetrics.performanceScore === 'poor') {
306
+ recommendations.push('Consider enabling touch event throttling')
307
+ recommendations.push('Reduce touch event complexity')
308
+ }
309
+
310
+ if (performanceMetrics.batteryImpact === 'high') {
311
+ recommendations.push('Enable battery optimization mode')
312
+ recommendations.push('Reduce touch event frequency')
313
+ }
314
+
315
+ if (!optimizationState.passiveListenersEnabled) {
316
+ recommendations.push('Enable passive event listeners for better performance')
317
+ }
318
+
319
+ return recommendations
320
+ }, [performanceMetrics, optimizationState])
321
+
322
+ return {
323
+ optimizationState,
324
+ performanceMetrics,
325
+ applyOptimizations,
326
+ resetOptimizations,
327
+ getOptimizationReport,
328
+ getOptimizationRecommendations
329
+ }
330
+ }
331
+
332
+ // Convenience hook for basic touch optimization
333
+ export const useBasicTouchOptimization = (elementRef) => {
334
+ return useTouchOptimization(elementRef, {}, {
335
+ enablePassiveListeners,
336
+ enableTouchActionOptimization,
337
+ enableBatteryOptimization,
338
+ enablePerformanceMonitoring})
339
+ }
340
+
341
+ // Convenience hook for battery-aware touch optimization
342
+ export const useBatteryAwareTouchOptimization = (elementRef) => {
343
+ return useTouchOptimization(elementRef, {}, {
344
+ enablePassiveListeners,
345
+ enableTouchActionOptimization,
346
+ enableBatteryOptimization,
347
+ enablePerformanceMonitoring})
348
+ }