@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,249 @@
1
+ export interface FrameRateMetrics {
2
+ fps: number
3
+ frameTime: number
4
+ frameCount: number
5
+ averageFPS: number
6
+ minFPS: number
7
+ maxFPS: number
8
+ droppedFrames: number
9
+ performanceScore: 'excellent' | 'good' | 'fair' | 'poor'
10
+ }
11
+
12
+ export interface FrameRateThresholds {
13
+ warning: number
14
+ critical: number
15
+ excellent: number
16
+ }
17
+
18
+ export interface FrameRateCallbacks {
19
+ onFPSWarning?: (fps: number) => void
20
+ onFPSDrop?: (fps: number, previousFPS: number) => void
21
+ onPerformanceScoreChange?: (score: FrameRateMetrics['performanceScore']) => void
22
+ }
23
+
24
+ export interface FrameRateOptions {
25
+ updateInterval?: number
26
+ sampleSize?: number
27
+ thresholds?: Partial<FrameRateThresholds>
28
+ callbacks?: FrameRateCallbacks
29
+ }
30
+
31
+ const DEFAULT_THRESHOLDS: FrameRateThresholds = {
32
+ warning: 45,
33
+ critical: 30,
34
+ excellent: 55
35
+ }
36
+
37
+ const DEFAULT_SAMPLE_SIZE = 60 // 1 second at 60fps
38
+
39
+ export declare const useFrameRate: (options: FrameRateOptions = {}) => {
40
+ const {
41
+ updateInterval = 1000,
42
+ sampleSize = DEFAULT_SAMPLE_SIZE,
43
+ thresholds = {},
44
+ callbacks = {}
45
+ } = options
46
+
47
+ const [metrics, setMetrics] = useState<FrameRateMetrics>({
48
+ fps: 60,
49
+ frameTime: 16.67,
50
+ frameCount: 0,
51
+ averageFPS: 60,
52
+ minFPS: 60,
53
+ maxFPS: 60,
54
+ droppedFrames: 0,
55
+ performanceScore: 'excellent'
56
+ })
57
+
58
+ const [isMonitoring, setIsMonitoring] = useState(false)
59
+ const frameCountRef = useRef(0)
60
+ const lastTimeRef = useRef(performance.now())
61
+ const animationIdRef = useRef<number>()
62
+ const intervalIdRef = useRef<NodeJS.Timeout>()
63
+ const fpsHistoryRef = useRef<number[]>([])
64
+ const previousFPSRef = useRef(60)
65
+
66
+ // Merge default thresholds with custom ones
67
+ const finalThresholds = useMemo(() => ({
68
+ ...DEFAULT_THRESHOLDS,
69
+ ...thresholds
70
+ }), [thresholds])
71
+
72
+ // Calculate performance score based on FPS
73
+ const calculatePerformanceScore = useCallback((fps: number): FrameRateMetrics['performanceScore'] => {
74
+ if (fps >= finalThresholds.excellent) return 'excellent'
75
+ if (fps >= finalThresholds.warning) return 'good'
76
+ if (fps >= finalThresholds.critical) return 'fair'
77
+ return 'poor'
78
+ }, [finalThresholds])
79
+
80
+ // Update FPS history and calculate statistics
81
+ const updateFPSHistory = useCallback((fps: number) => {
82
+ fpsHistoryRef.current.push(fps)
83
+
84
+ // Keep only the last sampleSize frames
85
+ if (fpsHistoryRef.current.length > sampleSize) {
86
+ fpsHistoryRef.current.shift()
87
+ }
88
+
89
+ // Calculate statistics
90
+ const averageFPS = Math.round(
91
+ fpsHistoryRef.current.reduce((sum, f) => sum + f, 0) / fpsHistoryRef.current.length
92
+ )
93
+ const minFPS = Math.min(...fpsHistoryRef.current)
94
+ const maxFPS = Math.max(...fpsHistoryRef.current)
95
+
96
+ return { averageFPS, minFPS, maxFPS }
97
+ }, [sampleSize])
98
+
99
+ // Detect dropped frames
100
+ const detectDroppedFrames = useCallback((fps: number, previousFPS: number) => {
101
+ if (fps < previousFPS && previousFPS >= finalThresholds.warning) {
102
+ const drop = previousFPS - fps
103
+ if (drop > 10) { // Significant drop
104
+ return drop
105
+ }
106
+ }
107
+ return 0
108
+ }, [finalThresholds.warning])
109
+
110
+ // Frame rate monitoring
111
+ const measureFrameRate = useCallback(() => {
112
+ frameCountRef.current++
113
+ const currentTime = performance.now()
114
+
115
+ if (currentTime - lastTimeRef.current >= updateInterval) {
116
+ const fps = Math.round((frameCountRef.current * 1000) / (currentTime - lastTimeRef.current))
117
+ const frameTime = 1000 / fps
118
+
119
+ // Update FPS history and get statistics
120
+ const { averageFPS, minFPS, maxFPS } = updateFPSHistory(fps)
121
+
122
+ // Detect dropped frames
123
+ const droppedFrames = detectDroppedFrames(fps, previousFPSRef.current)
124
+
125
+ // Calculate performance score
126
+ const performanceScore = calculatePerformanceScore(fps)
127
+
128
+ const newMetrics: FrameRateMetrics = {
129
+ fps,
130
+ frameTime,
131
+ frameCount: frameCountRef.current,
132
+ averageFPS,
133
+ minFPS,
134
+ maxFPS,
135
+ droppedFrames,
136
+ performanceScore
137
+ }
138
+
139
+ setMetrics(newMetrics)
140
+
141
+ // Check thresholds and call callbacks
142
+ if (fps <= finalThresholds.critical && callbacks.onFPSWarning) {
143
+ callbacks.onFPSWarning(fps)
144
+ }
145
+
146
+ if (droppedFrames > 0 && callbacks.onFPSDrop) {
147
+ callbacks.onFPSDrop(fps, previousFPSRef.current)
148
+ }
149
+
150
+ // Check if performance score changed
151
+ if (performanceScore !== metrics.performanceScore && callbacks.onPerformanceScoreChange) {
152
+ callbacks.onPerformanceScoreChange(performanceScore)
153
+ }
154
+
155
+ // Reset counters
156
+ frameCountRef.current = 0
157
+ lastTimeRef.current = currentTime
158
+ previousFPSRef.current = fps
159
+ }
160
+
161
+ animationIdRef.current = requestAnimationFrame(measureFrameRate)
162
+ }, [updateInterval, finalThresholds.critical, callbacks, metrics.performanceScore, updateFPSHistory, detectDroppedFrames, calculatePerformanceScore])
163
+
164
+ // Start monitoring
165
+ const startMonitoring = useCallback(() => {
166
+ if (isMonitoring) return
167
+
168
+ setIsMonitoring(true)
169
+ measureFrameRate()
170
+ }, [isMonitoring, measureFrameRate])
171
+
172
+ // Stop monitoring
173
+ const stopMonitoring = useCallback(() => {
174
+ setIsMonitoring(false)
175
+
176
+ if (animationIdRef.current) {
177
+ cancelAnimationFrame(animationIdRef.current)
178
+ }
179
+
180
+ if (intervalIdRef.current) {
181
+ clearInterval(intervalIdRef.current)
182
+ }
183
+ }, [])
184
+
185
+ // Reset statistics
186
+ const resetStats = useCallback(() => {
187
+ fpsHistoryRef.current = []
188
+ setMetrics(prev => ({
189
+ ...prev,
190
+ averageFPS: 60,
191
+ minFPS: 60,
192
+ maxFPS: 60,
193
+ droppedFrames: 0
194
+ }))
195
+ }, [])
196
+
197
+ // Auto-start monitoring on mount
198
+ useEffect(() => {
199
+ startMonitoring()
200
+ return () => stopMonitoring()
201
+ }, [startMonitoring, stopMonitoring])
202
+
203
+ // Performance insights
204
+ const getPerformanceInsights = useCallback(() => {
205
+ const insights: string[] = []
206
+
207
+ if (metrics.fps < finalThresholds.critical) {
208
+ insights.push('Critical FPS drop detected - consider reducing animation complexity')
209
+ } else if (metrics.fps < finalThresholds.warning) {
210
+ insights.push('FPS below optimal range - monitor for performance issues')
211
+ }
212
+
213
+ if (metrics.droppedFrames > 0) {
214
+ insights.push(`${metrics.droppedFrames} frames dropped - check for heavy operations`)
215
+ }
216
+
217
+ if (metrics.averageFPS < 50) {
218
+ insights.push('Average FPS is low - consider performance optimizations')
219
+ }
220
+
221
+ return insights
222
+ }, [metrics, finalThresholds])
223
+
224
+ return {
225
+ // Metrics
226
+ metrics,
227
+
228
+ // Controls
229
+ startMonitoring,
230
+ stopMonitoring,
231
+ isMonitoring,
232
+ resetStats,
233
+
234
+ // Performance analysis
235
+ performanceScore: metrics.performanceScore,
236
+ getPerformanceInsights,
237
+
238
+ // Raw values
239
+ fps: metrics.fps,
240
+ frameTime: metrics.frameTime,
241
+ averageFPS: metrics.averageFPS,
242
+ minFPS: metrics.minFPS,
243
+ maxFPS: metrics.maxFPS,
244
+ droppedFrames: metrics.droppedFrames,
245
+
246
+ // Thresholds
247
+ thresholds: finalThresholds
248
+ }
249
+ }
@@ -0,0 +1,232 @@
1
+ import { useState, useEffect, useCallback, useRef, useMemo } from 'react'
2
+
3
+ export interface FrameRateMetrics {
4
+ fps}
5
+
6
+ export interface FrameRateThresholds {
7
+ warning}
8
+
9
+ export interface FrameRateCallbacks {
10
+ onFPSWarning?) => void
11
+ onFPSDrop?, previousFPS) => void
12
+ onPerformanceScoreChange?]) => void
13
+ }
14
+
15
+ export interface FrameRateOptions {
16
+ updateInterval?}
17
+
18
+ const DEFAULT_THRESHOLDS= {
19
+ warning,
20
+ critical,
21
+ excellent}
22
+
23
+ const DEFAULT_SAMPLE_SIZE = 60 // 1 second at 60fps
24
+
25
+ export const useFrameRate = (options= {}) => {
26
+ const {
27
+ updateInterval = 1000,
28
+ sampleSize = DEFAULT_SAMPLE_SIZE,
29
+ thresholds = {},
30
+ callbacks = {}
31
+ } = options
32
+
33
+ const [metrics, setMetrics] = useState<FrameRateMetrics>({
34
+ fps,
35
+ frameTime,
36
+ frameCount,
37
+ averageFPS,
38
+ minFPS,
39
+ maxFPS,
40
+ droppedFrames,
41
+ performanceScore})
42
+
43
+ const [isMonitoring, setIsMonitoring] = useState(false)
44
+ const frameCountRef = useRef(0)
45
+ const lastTimeRef = useRef(performance.now())
46
+ const animationIdRef = useRef<number>()
47
+ const intervalIdRef = useRef<NodeJS.Timeout>()
48
+ const fpsHistoryRef = useRef<number[]>([])
49
+ const previousFPSRef = useRef(60)
50
+
51
+ // Merge default thresholds with custom ones
52
+ const finalThresholds = useMemo(() => ({
53
+ ...DEFAULT_THRESHOLDS,
54
+ ...thresholds
55
+ }), [thresholds])
56
+
57
+ // Calculate performance score based on FPS
58
+ const calculatePerformanceScore = useCallback((fps)] => {
59
+ if (fps >= finalThresholds.excellent) return 'excellent'
60
+ if (fps >= finalThresholds.warning) return 'good'
61
+ if (fps >= finalThresholds.critical) return 'fair'
62
+ return 'poor'
63
+ }, [finalThresholds])
64
+
65
+ // Update FPS history and calculate statistics
66
+ const updateFPSHistory = useCallback((fps) => {
67
+ fpsHistoryRef.current.push(fps)
68
+
69
+ // Keep only the last sampleSize frames
70
+ if (fpsHistoryRef.current.length > sampleSize) {
71
+ fpsHistoryRef.current.shift()
72
+ }
73
+
74
+ // Calculate statistics
75
+ const averageFPS = Math.round(
76
+ fpsHistoryRef.current.reduce((sum, f) => sum + f, 0) / fpsHistoryRef.current.length
77
+ )
78
+ const minFPS = Math.min(...fpsHistoryRef.current)
79
+ const maxFPS = Math.max(...fpsHistoryRef.current)
80
+
81
+ return { averageFPS, minFPS, maxFPS }
82
+ }, [sampleSize])
83
+
84
+ // Detect dropped frames
85
+ const detectDroppedFrames = useCallback((fps, previousFPS) => {
86
+ if (fps < previousFPS && previousFPS >= finalThresholds.warning) {
87
+ const drop = previousFPS - fps
88
+ if (drop > 10) { // Significant drop
89
+ return drop
90
+ }
91
+ }
92
+ return 0
93
+ }, [finalThresholds.warning])
94
+
95
+ // Frame rate monitoring
96
+ const measureFrameRate = useCallback(() => {
97
+ frameCountRef.current++
98
+ const currentTime = performance.now()
99
+
100
+ if (currentTime - lastTimeRef.current >= updateInterval) {
101
+ const fps = Math.round((frameCountRef.current * 1000) / (currentTime - lastTimeRef.current))
102
+ const frameTime = 1000 / fps
103
+
104
+ // Update FPS history and get statistics
105
+ const { averageFPS, minFPS, maxFPS } = updateFPSHistory(fps)
106
+
107
+ // Detect dropped frames
108
+ const droppedFrames = detectDroppedFrames(fps, previousFPSRef.current)
109
+
110
+ // Calculate performance score
111
+ const performanceScore = calculatePerformanceScore(fps)
112
+
113
+ const newMetrics= {
114
+ fps,
115
+ frameTime,
116
+ frameCount,
117
+ averageFPS,
118
+ minFPS,
119
+ maxFPS,
120
+ droppedFrames,
121
+ performanceScore
122
+ }
123
+
124
+ setMetrics(newMetrics)
125
+
126
+ // Check thresholds and call callbacks
127
+ if (fps <= finalThresholds.critical && callbacks.onFPSWarning) {
128
+ callbacks.onFPSWarning(fps)
129
+ }
130
+
131
+ if (droppedFrames > 0 && callbacks.onFPSDrop) {
132
+ callbacks.onFPSDrop(fps, previousFPSRef.current)
133
+ }
134
+
135
+ // Check if performance score changed
136
+ if (performanceScore !== metrics.performanceScore && callbacks.onPerformanceScoreChange) {
137
+ callbacks.onPerformanceScoreChange(performanceScore)
138
+ }
139
+
140
+ // Reset counters
141
+ frameCountRef.current = 0
142
+ lastTimeRef.current = currentTime
143
+ previousFPSRef.current = fps
144
+ }
145
+
146
+ animationIdRef.current = requestAnimationFrame(measureFrameRate)
147
+ }, [updateInterval, finalThresholds.critical, callbacks, metrics.performanceScore, updateFPSHistory, detectDroppedFrames, calculatePerformanceScore])
148
+
149
+ // Start monitoring
150
+ const startMonitoring = useCallback(() => {
151
+ if (isMonitoring) return
152
+
153
+ setIsMonitoring(true)
154
+ measureFrameRate()
155
+ }, [isMonitoring, measureFrameRate])
156
+
157
+ // Stop monitoring
158
+ const stopMonitoring = useCallback(() => {
159
+ setIsMonitoring(false)
160
+
161
+ if (animationIdRef.current) {
162
+ cancelAnimationFrame(animationIdRef.current)
163
+ }
164
+
165
+ if (intervalIdRef.current) {
166
+ clearInterval(intervalIdRef.current)
167
+ }
168
+ }, [])
169
+
170
+ // Reset statistics
171
+ const resetStats = useCallback(() => {
172
+ fpsHistoryRef.current = []
173
+ setMetrics(prev => ({
174
+ ...prev,
175
+ averageFPS,
176
+ minFPS,
177
+ maxFPS,
178
+ droppedFrames}))
179
+ }, [])
180
+
181
+ // Auto-start monitoring on mount
182
+ useEffect(() => {
183
+ startMonitoring()
184
+ return () => stopMonitoring()
185
+ }, [startMonitoring, stopMonitoring])
186
+
187
+ // Performance insights
188
+ const getPerformanceInsights = useCallback(() => {
189
+ const insights] = []
190
+
191
+ if (metrics.fps < finalThresholds.critical) {
192
+ insights.push('Critical FPS drop detected - consider reducing animation complexity')
193
+ } else if (metrics.fps < finalThresholds.warning) {
194
+ insights.push('FPS below optimal range - monitor for performance issues')
195
+ }
196
+
197
+ if (metrics.droppedFrames > 0) {
198
+ insights.push(`${metrics.droppedFrames} frames dropped - check for heavy operations`)
199
+ }
200
+
201
+ if (metrics.averageFPS < 50) {
202
+ insights.push('Average FPS is low - consider performance optimizations')
203
+ }
204
+
205
+ return insights
206
+ }, [metrics, finalThresholds])
207
+
208
+ return {
209
+ // Metrics
210
+ metrics,
211
+
212
+ // Controls
213
+ startMonitoring,
214
+ stopMonitoring,
215
+ isMonitoring,
216
+ resetStats,
217
+
218
+ // Performance analysis
219
+ performanceScore,
220
+ getPerformanceInsights,
221
+
222
+ // Raw values
223
+ fps,
224
+ frameTime,
225
+ averageFPS,
226
+ minFPS,
227
+ maxFPS,
228
+ droppedFrames,
229
+
230
+ // Thresholds
231
+ thresholds}
232
+ }
@@ -0,0 +1,232 @@
1
+ import { useState, useEffect, useCallback, useRef, useMemo } from 'react'
2
+
3
+ export interface FrameRateMetrics {
4
+ fps}
5
+
6
+ export interface FrameRateThresholds {
7
+ warning}
8
+
9
+ export interface FrameRateCallbacks {
10
+ onFPSWarning?) => void
11
+ onFPSDrop?, previousFPS) => void
12
+ onPerformanceScoreChange?]) => void
13
+ }
14
+
15
+ export interface FrameRateOptions {
16
+ updateInterval?}
17
+
18
+ const DEFAULT_THRESHOLDS= {
19
+ warning,
20
+ critical,
21
+ excellent}
22
+
23
+ const DEFAULT_SAMPLE_SIZE = 60 // 1 second at 60fps
24
+
25
+ export const useFrameRate = (options= {}) => {
26
+ const {
27
+ updateInterval = 1000,
28
+ sampleSize = DEFAULT_SAMPLE_SIZE,
29
+ thresholds = {},
30
+ callbacks = {}
31
+ } = options
32
+
33
+ const [metrics, setMetrics] = useState<FrameRateMetrics>({
34
+ fps,
35
+ frameTime,
36
+ frameCount,
37
+ averageFPS,
38
+ minFPS,
39
+ maxFPS,
40
+ droppedFrames,
41
+ performanceScore})
42
+
43
+ const [isMonitoring, setIsMonitoring] = useState(false)
44
+ const frameCountRef = useRef(0)
45
+ const lastTimeRef = useRef(performance.now())
46
+ const animationIdRef = useRef<number>()
47
+ const intervalIdRef = useRef<NodeJS.Timeout>()
48
+ const fpsHistoryRef = useRef<number[]>([])
49
+ const previousFPSRef = useRef(60)
50
+
51
+ // Merge default thresholds with custom ones
52
+ const finalThresholds = useMemo(() => ({
53
+ ...DEFAULT_THRESHOLDS,
54
+ ...thresholds
55
+ }), [thresholds])
56
+
57
+ // Calculate performance score based on FPS
58
+ const calculatePerformanceScore = useCallback((fps)] => {
59
+ if (fps >= finalThresholds.excellent) return 'excellent'
60
+ if (fps >= finalThresholds.warning) return 'good'
61
+ if (fps >= finalThresholds.critical) return 'fair'
62
+ return 'poor'
63
+ }, [finalThresholds])
64
+
65
+ // Update FPS history and calculate statistics
66
+ const updateFPSHistory = useCallback((fps) => {
67
+ fpsHistoryRef.current.push(fps)
68
+
69
+ // Keep only the last sampleSize frames
70
+ if (fpsHistoryRef.current.length > sampleSize) {
71
+ fpsHistoryRef.current.shift()
72
+ }
73
+
74
+ // Calculate statistics
75
+ const averageFPS = Math.round(
76
+ fpsHistoryRef.current.reduce((sum, f) => sum + f, 0) / fpsHistoryRef.current.length
77
+ )
78
+ const minFPS = Math.min(...fpsHistoryRef.current)
79
+ const maxFPS = Math.max(...fpsHistoryRef.current)
80
+
81
+ return { averageFPS, minFPS, maxFPS }
82
+ }, [sampleSize])
83
+
84
+ // Detect dropped frames
85
+ const detectDroppedFrames = useCallback((fps, previousFPS) => {
86
+ if (fps < previousFPS && previousFPS >= finalThresholds.warning) {
87
+ const drop = previousFPS - fps
88
+ if (drop > 10) { // Significant drop
89
+ return drop
90
+ }
91
+ }
92
+ return 0
93
+ }, [finalThresholds.warning])
94
+
95
+ // Frame rate monitoring
96
+ const measureFrameRate = useCallback(() => {
97
+ frameCountRef.current++
98
+ const currentTime = performance.now()
99
+
100
+ if (currentTime - lastTimeRef.current >= updateInterval) {
101
+ const fps = Math.round((frameCountRef.current * 1000) / (currentTime - lastTimeRef.current))
102
+ const frameTime = 1000 / fps
103
+
104
+ // Update FPS history and get statistics
105
+ const { averageFPS, minFPS, maxFPS } = updateFPSHistory(fps)
106
+
107
+ // Detect dropped frames
108
+ const droppedFrames = detectDroppedFrames(fps, previousFPSRef.current)
109
+
110
+ // Calculate performance score
111
+ const performanceScore = calculatePerformanceScore(fps)
112
+
113
+ const newMetrics= {
114
+ fps,
115
+ frameTime,
116
+ frameCount,
117
+ averageFPS,
118
+ minFPS,
119
+ maxFPS,
120
+ droppedFrames,
121
+ performanceScore
122
+ }
123
+
124
+ setMetrics(newMetrics)
125
+
126
+ // Check thresholds and call callbacks
127
+ if (fps <= finalThresholds.critical && callbacks.onFPSWarning) {
128
+ callbacks.onFPSWarning(fps)
129
+ }
130
+
131
+ if (droppedFrames > 0 && callbacks.onFPSDrop) {
132
+ callbacks.onFPSDrop(fps, previousFPSRef.current)
133
+ }
134
+
135
+ // Check if performance score changed
136
+ if (performanceScore !== metrics.performanceScore && callbacks.onPerformanceScoreChange) {
137
+ callbacks.onPerformanceScoreChange(performanceScore)
138
+ }
139
+
140
+ // Reset counters
141
+ frameCountRef.current = 0
142
+ lastTimeRef.current = currentTime
143
+ previousFPSRef.current = fps
144
+ }
145
+
146
+ animationIdRef.current = requestAnimationFrame(measureFrameRate)
147
+ }, [updateInterval, finalThresholds.critical, callbacks, metrics.performanceScore, updateFPSHistory, detectDroppedFrames, calculatePerformanceScore])
148
+
149
+ // Start monitoring
150
+ const startMonitoring = useCallback(() => {
151
+ if (isMonitoring) return
152
+
153
+ setIsMonitoring(true)
154
+ measureFrameRate()
155
+ }, [isMonitoring, measureFrameRate])
156
+
157
+ // Stop monitoring
158
+ const stopMonitoring = useCallback(() => {
159
+ setIsMonitoring(false)
160
+
161
+ if (animationIdRef.current) {
162
+ cancelAnimationFrame(animationIdRef.current)
163
+ }
164
+
165
+ if (intervalIdRef.current) {
166
+ clearInterval(intervalIdRef.current)
167
+ }
168
+ }, [])
169
+
170
+ // Reset statistics
171
+ const resetStats = useCallback(() => {
172
+ fpsHistoryRef.current = []
173
+ setMetrics(prev => ({
174
+ ...prev,
175
+ averageFPS,
176
+ minFPS,
177
+ maxFPS,
178
+ droppedFrames}))
179
+ }, [])
180
+
181
+ // Auto-start monitoring on mount
182
+ useEffect(() => {
183
+ startMonitoring()
184
+ return () => stopMonitoring()
185
+ }, [startMonitoring, stopMonitoring])
186
+
187
+ // Performance insights
188
+ const getPerformanceInsights = useCallback(() => {
189
+ const insights] = []
190
+
191
+ if (metrics.fps < finalThresholds.critical) {
192
+ insights.push('Critical FPS drop detected - consider reducing animation complexity')
193
+ } else if (metrics.fps < finalThresholds.warning) {
194
+ insights.push('FPS below optimal range - monitor for performance issues')
195
+ }
196
+
197
+ if (metrics.droppedFrames > 0) {
198
+ insights.push(`${metrics.droppedFrames} frames dropped - check for heavy operations`)
199
+ }
200
+
201
+ if (metrics.averageFPS < 50) {
202
+ insights.push('Average FPS is low - consider performance optimizations')
203
+ }
204
+
205
+ return insights
206
+ }, [metrics, finalThresholds])
207
+
208
+ return {
209
+ // Metrics
210
+ metrics,
211
+
212
+ // Controls
213
+ startMonitoring,
214
+ stopMonitoring,
215
+ isMonitoring,
216
+ resetStats,
217
+
218
+ // Performance analysis
219
+ performanceScore,
220
+ getPerformanceInsights,
221
+
222
+ // Raw values
223
+ fps,
224
+ frameTime,
225
+ averageFPS,
226
+ minFPS,
227
+ maxFPS,
228
+ droppedFrames,
229
+
230
+ // Thresholds
231
+ thresholds}
232
+ }