@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.
- package/CHANGELOG.md +1 -1
- package/dist/components/ui/accessibility-demo.d.ts +259 -0
- package/dist/components/ui/accessibility-demo.esm.js +265 -0
- package/dist/components/ui/accessibility-demo.js +265 -0
- package/dist/components/ui/advanced-component-architecture-demo.d.ts +718 -0
- package/dist/components/ui/advanced-component-architecture-demo.esm.js +860 -0
- package/dist/components/ui/advanced-component-architecture-demo.js +860 -0
- package/dist/components/ui/advanced-transition-system-demo.d.ts +660 -0
- package/dist/components/ui/advanced-transition-system-demo.esm.js +624 -0
- package/dist/components/ui/advanced-transition-system-demo.js +624 -0
- package/dist/components/ui/advanced-transition-system.d.ts +391 -0
- package/dist/components/ui/advanced-transition-system.esm.js +351 -0
- package/dist/components/ui/advanced-transition-system.js +351 -0
- package/dist/components/ui/animation/animated-container.d.ts +162 -0
- package/dist/components/ui/animation/animated-container.esm.js +143 -0
- package/dist/components/ui/animation/animated-container.js +143 -0
- package/dist/components/ui/animation/index.d.ts +9 -0
- package/dist/components/ui/animation/index.esm.js +19 -0
- package/dist/components/ui/animation/index.js +19 -0
- package/dist/components/ui/animation/staggered-container.d.ts +64 -0
- package/dist/components/ui/animation/staggered-container.esm.js +59 -0
- package/dist/components/ui/animation/staggered-container.js +59 -0
- package/dist/components/ui/animation-demo.d.ts +238 -0
- package/dist/components/ui/animation-demo.esm.js +218 -0
- package/dist/components/ui/animation-demo.js +218 -0
- package/dist/components/ui/badge.d.ts +28 -0
- package/dist/components/ui/badge.esm.js +30 -0
- package/dist/components/ui/badge.js +30 -0
- package/dist/components/ui/battery-conscious-animation-demo.d.ts +561 -0
- package/dist/components/ui/battery-conscious-animation-demo.esm.js +533 -0
- package/dist/components/ui/battery-conscious-animation-demo.js +533 -0
- package/dist/components/ui/border-radius-shadow-demo.d.ts +183 -0
- package/dist/components/ui/border-radius-shadow-demo.esm.js +176 -0
- package/dist/components/ui/border-radius-shadow-demo.js +176 -0
- package/dist/components/ui/button.d.ts +33 -0
- package/dist/components/ui/button.esm.js +30 -0
- package/dist/components/ui/button.js +30 -0
- package/dist/components/ui/card.d.ts +205 -0
- package/dist/components/ui/card.esm.js +182 -0
- package/dist/components/ui/card.js +182 -0
- package/dist/components/ui/checkbox.d.ts +26 -0
- package/dist/components/ui/checkbox.esm.js +30 -0
- package/dist/components/ui/checkbox.js +30 -0
- package/dist/components/ui/color-preview.d.ts +402 -0
- package/dist/components/ui/color-preview.esm.js +388 -0
- package/dist/components/ui/color-preview.js +388 -0
- package/dist/components/ui/data-display/chart.d.ts +646 -0
- package/dist/components/ui/data-display/chart.esm.js +625 -0
- package/dist/components/ui/data-display/chart.js +625 -0
- package/dist/components/ui/data-display/data-grid-simple.d.ts +73 -0
- package/dist/components/ui/data-display/data-grid-simple.esm.js +76 -0
- package/dist/components/ui/data-display/data-grid-simple.js +76 -0
- package/dist/components/ui/data-display/data-grid.d.ts +670 -0
- package/dist/components/ui/data-display/data-grid.esm.js +667 -0
- package/dist/components/ui/data-display/data-grid.js +667 -0
- package/dist/components/ui/data-display/list.d.ts +448 -0
- package/dist/components/ui/data-display/list.esm.js +448 -0
- package/dist/components/ui/data-display/list.js +448 -0
- package/dist/components/ui/data-display/table.d.ts +472 -0
- package/dist/components/ui/data-display/table.esm.js +474 -0
- package/dist/components/ui/data-display/table.js +474 -0
- package/dist/components/ui/data-display/timeline.d.ts +433 -0
- package/dist/components/ui/data-display/timeline.esm.js +436 -0
- package/dist/components/ui/data-display/timeline.js +436 -0
- package/dist/components/ui/data-display/tree.d.ts +594 -0
- package/dist/components/ui/data-display/tree.esm.js +570 -0
- package/dist/components/ui/data-display/tree.js +570 -0
- package/dist/components/ui/data-display/types.d.ts +534 -0
- package/dist/components/ui/data-display/types.esm.js +511 -0
- package/dist/components/ui/data-display/types.js +511 -0
- package/dist/components/ui/enterprise-mobile-experience-demo.d.ts +735 -0
- package/dist/components/ui/enterprise-mobile-experience-demo.esm.js +699 -0
- package/dist/components/ui/enterprise-mobile-experience-demo.js +699 -0
- package/dist/components/ui/enterprise-mobile-experience.d.ts +461 -0
- package/dist/components/ui/enterprise-mobile-experience.esm.js +413 -0
- package/dist/components/ui/enterprise-mobile-experience.js +413 -0
- package/dist/components/ui/feedback/alert.d.ts +154 -0
- package/dist/components/ui/feedback/alert.esm.js +150 -0
- package/dist/components/ui/feedback/alert.js +150 -0
- package/dist/components/ui/feedback/progress.d.ts +288 -0
- package/dist/components/ui/feedback/progress.esm.js +269 -0
- package/dist/components/ui/feedback/progress.js +269 -0
- package/dist/components/ui/feedback/skeleton.d.ts +182 -0
- package/dist/components/ui/feedback/skeleton.esm.js +175 -0
- package/dist/components/ui/feedback/skeleton.js +175 -0
- package/dist/components/ui/feedback/toast.d.ts +277 -0
- package/dist/components/ui/feedback/toast.esm.js +256 -0
- package/dist/components/ui/feedback/toast.js +256 -0
- package/dist/components/ui/feedback/types.d.ts +123 -0
- package/dist/components/ui/feedback/types.esm.js +125 -0
- package/dist/components/ui/feedback/types.js +125 -0
- package/dist/components/ui/font-preview.d.ts +282 -0
- package/dist/components/ui/font-preview.esm.js +286 -0
- package/dist/components/ui/font-preview.js +286 -0
- package/dist/components/ui/form-demo.d.ts +544 -0
- package/dist/components/ui/form-demo.esm.js +516 -0
- package/dist/components/ui/form-demo.js +516 -0
- package/dist/components/ui/hardware-acceleration-demo.d.ts +540 -0
- package/dist/components/ui/hardware-acceleration-demo.esm.js +497 -0
- package/dist/components/ui/hardware-acceleration-demo.js +497 -0
- package/dist/components/ui/input.d.ts +33 -0
- package/dist/components/ui/input.esm.js +32 -0
- package/dist/components/ui/input.js +32 -0
- package/dist/components/ui/label.d.ts +13 -0
- package/dist/components/ui/label.esm.js +16 -0
- package/dist/components/ui/label.js +16 -0
- package/dist/components/ui/layout-demo.d.ts +352 -0
- package/dist/components/ui/layout-demo.esm.js +342 -0
- package/dist/components/ui/layout-demo.js +342 -0
- package/dist/components/ui/layouts/adaptive-layout.d.ts +132 -0
- package/dist/components/ui/layouts/adaptive-layout.esm.js +120 -0
- package/dist/components/ui/layouts/adaptive-layout.js +120 -0
- package/dist/components/ui/layouts/desktop-layout.d.ts +219 -0
- package/dist/components/ui/layouts/desktop-layout.esm.js +204 -0
- package/dist/components/ui/layouts/desktop-layout.js +204 -0
- package/dist/components/ui/layouts/index.d.ts +5 -0
- package/dist/components/ui/layouts/index.esm.js +10 -0
- package/dist/components/ui/layouts/index.js +10 -0
- package/dist/components/ui/layouts/mobile-layout.d.ts +158 -0
- package/dist/components/ui/layouts/mobile-layout.esm.js +152 -0
- package/dist/components/ui/layouts/mobile-layout.js +152 -0
- package/dist/components/ui/layouts/tablet-layout.d.ts +192 -0
- package/dist/components/ui/layouts/tablet-layout.esm.js +183 -0
- package/dist/components/ui/layouts/tablet-layout.js +183 -0
- package/dist/components/ui/mobile-form-validation.d.ts +439 -0
- package/dist/components/ui/mobile-form-validation.esm.js +418 -0
- package/dist/components/ui/mobile-form-validation.js +418 -0
- package/dist/components/ui/mobile-input-demo.d.ts +197 -0
- package/dist/components/ui/mobile-input-demo.esm.js +195 -0
- package/dist/components/ui/mobile-input-demo.js +195 -0
- package/dist/components/ui/mobile-input.d.ts +273 -0
- package/dist/components/ui/mobile-input.esm.js +216 -0
- package/dist/components/ui/mobile-input.js +216 -0
- package/dist/components/ui/mobile-skeleton-loading-demo.d.ts +628 -0
- package/dist/components/ui/mobile-skeleton-loading-demo.esm.js +621 -0
- package/dist/components/ui/mobile-skeleton-loading-demo.js +621 -0
- package/dist/components/ui/navigation/breadcrumb.d.ts +149 -0
- package/dist/components/ui/navigation/breadcrumb.esm.js +155 -0
- package/dist/components/ui/navigation/breadcrumb.js +155 -0
- package/dist/components/ui/navigation/index.d.ts +25 -0
- package/dist/components/ui/navigation/index.esm.js +14 -0
- package/dist/components/ui/navigation/index.js +14 -0
- package/dist/components/ui/navigation/menu.d.ts +366 -0
- package/dist/components/ui/navigation/menu.esm.js +360 -0
- package/dist/components/ui/navigation/menu.js +360 -0
- package/dist/components/ui/navigation/navigation-demo.d.ts +169 -0
- package/dist/components/ui/navigation/navigation-demo.esm.js +317 -0
- package/dist/components/ui/navigation/navigation-demo.js +317 -0
- package/dist/components/ui/navigation/pagination.d.ts +261 -0
- package/dist/components/ui/navigation/pagination.esm.js +260 -0
- package/dist/components/ui/navigation/pagination.js +260 -0
- package/dist/components/ui/navigation/sidebar.d.ts +375 -0
- package/dist/components/ui/navigation/sidebar.esm.js +369 -0
- package/dist/components/ui/navigation/sidebar.js +369 -0
- package/dist/components/ui/navigation/stepper.d.ts +294 -0
- package/dist/components/ui/navigation/stepper.esm.js +292 -0
- package/dist/components/ui/navigation/stepper.js +292 -0
- package/dist/components/ui/navigation/tabs.d.ts +196 -0
- package/dist/components/ui/navigation/tabs.esm.js +194 -0
- package/dist/components/ui/navigation/tabs.js +194 -0
- package/dist/components/ui/navigation/types.d.ts +293 -0
- package/dist/components/ui/navigation/types.esm.js +298 -0
- package/dist/components/ui/navigation/types.js +298 -0
- package/dist/components/ui/overlay/backdrop.d.ts +79 -0
- package/dist/components/ui/overlay/backdrop.esm.js +80 -0
- package/dist/components/ui/overlay/backdrop.js +80 -0
- package/dist/components/ui/overlay/focus-manager.d.ts +141 -0
- package/dist/components/ui/overlay/focus-manager.esm.js +141 -0
- package/dist/components/ui/overlay/focus-manager.js +141 -0
- package/dist/components/ui/overlay/index.d.ts +27 -0
- package/dist/components/ui/overlay/index.esm.js +16 -0
- package/dist/components/ui/overlay/index.js +16 -0
- package/dist/components/ui/overlay/modal.d.ts +262 -0
- package/dist/components/ui/overlay/modal.esm.js +266 -0
- package/dist/components/ui/overlay/modal.js +266 -0
- package/dist/components/ui/overlay/overlay-manager.d.ts +107 -0
- package/dist/components/ui/overlay/overlay-manager.esm.js +105 -0
- package/dist/components/ui/overlay/overlay-manager.js +105 -0
- package/dist/components/ui/overlay/popover.d.ts +450 -0
- package/dist/components/ui/overlay/popover.esm.js +446 -0
- package/dist/components/ui/overlay/popover.js +446 -0
- package/dist/components/ui/overlay/portal.d.ts +75 -0
- package/dist/components/ui/overlay/portal.esm.js +79 -0
- package/dist/components/ui/overlay/portal.js +79 -0
- package/dist/components/ui/overlay/tooltip.d.ts +298 -0
- package/dist/components/ui/overlay/tooltip.esm.js +288 -0
- package/dist/components/ui/overlay/tooltip.js +288 -0
- package/dist/components/ui/overlay/types.d.ts +194 -0
- package/dist/components/ui/overlay/types.esm.js +195 -0
- package/dist/components/ui/overlay/types.js +195 -0
- package/dist/components/ui/performance-demo.d.ts +583 -0
- package/dist/components/ui/performance-demo.esm.js +549 -0
- package/dist/components/ui/performance-demo.js +549 -0
- package/dist/components/ui/semantic-input-system-demo.d.ts +490 -0
- package/dist/components/ui/semantic-input-system-demo.esm.js +465 -0
- package/dist/components/ui/semantic-input-system-demo.js +465 -0
- package/dist/components/ui/theme-customizer.d.ts +378 -0
- package/dist/components/ui/theme-customizer.esm.js +354 -0
- package/dist/components/ui/theme-customizer.js +354 -0
- package/dist/components/ui/theme-preview.d.ts +305 -0
- package/dist/components/ui/theme-preview.esm.js +258 -0
- package/dist/components/ui/theme-preview.js +258 -0
- package/dist/components/ui/theme-switcher.d.ts +259 -0
- package/dist/components/ui/theme-switcher.esm.js +238 -0
- package/dist/components/ui/theme-switcher.js +238 -0
- package/dist/components/ui/theme-toggle.d.ts +34 -0
- package/dist/components/ui/theme-toggle.esm.js +38 -0
- package/dist/components/ui/theme-toggle.js +38 -0
- package/dist/components/ui/token-demo.d.ts +188 -0
- package/dist/components/ui/token-demo.esm.js +183 -0
- package/dist/components/ui/token-demo.js +183 -0
- package/dist/components/ui/touch-demo.d.ts +455 -0
- package/dist/components/ui/touch-demo.esm.js +433 -0
- package/dist/components/ui/touch-demo.js +433 -0
- package/dist/components/ui/touch-friendly-interface-demo.d.ts +512 -0
- package/dist/components/ui/touch-friendly-interface-demo.esm.js +481 -0
- package/dist/components/ui/touch-friendly-interface-demo.js +481 -0
- package/dist/components/ui/touch-friendly-interface.d.ts +292 -0
- package/dist/components/ui/touch-friendly-interface.esm.js +272 -0
- package/dist/components/ui/touch-friendly-interface.js +272 -0
- package/dist/hooks/index.d.ts +161 -0
- package/dist/hooks/index.esm.js +190 -0
- package/dist/hooks/index.js +190 -0
- package/dist/hooks/use-accessibility-support.d.ts +516 -0
- package/dist/hooks/use-accessibility-support.esm.js +488 -0
- package/dist/hooks/use-accessibility-support.js +488 -0
- package/dist/hooks/use-adaptive-layout.d.ts +287 -0
- package/dist/hooks/use-adaptive-layout.esm.js +266 -0
- package/dist/hooks/use-adaptive-layout.js +266 -0
- package/dist/hooks/use-advanced-patterns.d.ts +292 -0
- package/dist/hooks/use-advanced-patterns.esm.js +279 -0
- package/dist/hooks/use-advanced-patterns.js +279 -0
- package/dist/hooks/use-advanced-transition-system.d.ts +390 -0
- package/dist/hooks/use-advanced-transition-system.esm.js +352 -0
- package/dist/hooks/use-advanced-transition-system.js +352 -0
- package/dist/hooks/use-animation-profile.d.ts +285 -0
- package/dist/hooks/use-animation-profile.esm.js +259 -0
- package/dist/hooks/use-animation-profile.js +259 -0
- package/dist/hooks/use-battery-animations.d.ts +382 -0
- package/dist/hooks/use-battery-animations.esm.js +359 -0
- package/dist/hooks/use-battery-animations.js +359 -0
- package/dist/hooks/use-battery-conscious-loading.d.ts +473 -0
- package/dist/hooks/use-battery-conscious-loading.esm.js +432 -0
- package/dist/hooks/use-battery-conscious-loading.js +432 -0
- package/dist/hooks/use-battery-optimization.d.ts +328 -0
- package/dist/hooks/use-battery-optimization.esm.js +307 -0
- package/dist/hooks/use-battery-optimization.js +307 -0
- package/dist/hooks/use-battery-status.d.ts +297 -0
- package/dist/hooks/use-battery-status.esm.js +277 -0
- package/dist/hooks/use-battery-status.js +277 -0
- package/dist/hooks/use-component-performance.d.ts +342 -0
- package/dist/hooks/use-component-performance.esm.js +329 -0
- package/dist/hooks/use-component-performance.js +329 -0
- package/dist/hooks/use-device-loading-states.d.ts +456 -0
- package/dist/hooks/use-device-loading-states.esm.js +416 -0
- package/dist/hooks/use-device-loading-states.js +416 -0
- package/dist/hooks/use-device.d.ts +104 -0
- package/dist/hooks/use-device.esm.js +99 -0
- package/dist/hooks/use-device.js +99 -0
- package/dist/hooks/use-enterprise-mobile-experience.d.ts +486 -0
- package/dist/hooks/use-enterprise-mobile-experience.esm.js +439 -0
- package/dist/hooks/use-enterprise-mobile-experience.js +439 -0
- package/dist/hooks/use-form-feedback.d.ts +401 -0
- package/dist/hooks/use-form-feedback.esm.js +360 -0
- package/dist/hooks/use-form-feedback.js +360 -0
- package/dist/hooks/use-form-performance.d.ts +511 -0
- package/dist/hooks/use-form-performance.esm.js +478 -0
- package/dist/hooks/use-form-performance.js +478 -0
- package/dist/hooks/use-frame-rate.d.ts +249 -0
- package/dist/hooks/use-frame-rate.esm.js +232 -0
- package/dist/hooks/use-frame-rate.js +232 -0
- package/dist/hooks/use-gestures.d.ts +336 -0
- package/dist/hooks/use-gestures.esm.js +314 -0
- package/dist/hooks/use-gestures.js +314 -0
- package/dist/hooks/use-hardware-acceleration.d.ts +339 -0
- package/dist/hooks/use-hardware-acceleration.esm.js +313 -0
- package/dist/hooks/use-hardware-acceleration.js +313 -0
- package/dist/hooks/use-input-accessibility.d.ts +451 -0
- package/dist/hooks/use-input-accessibility.esm.js +417 -0
- package/dist/hooks/use-input-accessibility.js +417 -0
- package/dist/hooks/use-input-performance.d.ts +503 -0
- package/dist/hooks/use-input-performance.esm.js +471 -0
- package/dist/hooks/use-input-performance.js +471 -0
- package/dist/hooks/use-layout-performance.d.ts +317 -0
- package/dist/hooks/use-layout-performance.esm.js +298 -0
- package/dist/hooks/use-layout-performance.js +298 -0
- package/dist/hooks/use-loading-accessibility.d.ts +532 -0
- package/dist/hooks/use-loading-accessibility.esm.js +495 -0
- package/dist/hooks/use-loading-accessibility.js +495 -0
- package/dist/hooks/use-loading-performance.d.ts +471 -0
- package/dist/hooks/use-loading-performance.esm.js +449 -0
- package/dist/hooks/use-loading-performance.js +449 -0
- package/dist/hooks/use-memory-usage.d.ts +285 -0
- package/dist/hooks/use-memory-usage.esm.js +268 -0
- package/dist/hooks/use-memory-usage.js +268 -0
- package/dist/hooks/use-mobile-form-layout.d.ts +462 -0
- package/dist/hooks/use-mobile-form-layout.esm.js +427 -0
- package/dist/hooks/use-mobile-form-layout.js +427 -0
- package/dist/hooks/use-mobile-form-validation.d.ts +516 -0
- package/dist/hooks/use-mobile-form-validation.esm.js +451 -0
- package/dist/hooks/use-mobile-form-validation.js +451 -0
- package/dist/hooks/use-mobile-keyboard-optimization.d.ts +469 -0
- package/dist/hooks/use-mobile-keyboard-optimization.esm.js +431 -0
- package/dist/hooks/use-mobile-keyboard-optimization.js +431 -0
- package/dist/hooks/use-mobile-layout.d.ts +300 -0
- package/dist/hooks/use-mobile-layout.esm.js +280 -0
- package/dist/hooks/use-mobile-layout.js +280 -0
- package/dist/hooks/use-mobile-optimization.d.ts +404 -0
- package/dist/hooks/use-mobile-optimization.esm.js +378 -0
- package/dist/hooks/use-mobile-optimization.js +378 -0
- package/dist/hooks/use-mobile-skeleton.d.ts +399 -0
- package/dist/hooks/use-mobile-skeleton.esm.js +369 -0
- package/dist/hooks/use-mobile-skeleton.js +369 -0
- package/dist/hooks/use-mobile-touch.d.ts +412 -0
- package/dist/hooks/use-mobile-touch.esm.js +379 -0
- package/dist/hooks/use-mobile-touch.js +379 -0
- package/dist/hooks/use-performance-throttling.d.ts +346 -0
- package/dist/hooks/use-performance-throttling.esm.js +324 -0
- package/dist/hooks/use-performance-throttling.js +324 -0
- package/dist/hooks/use-performance.d.ts +314 -0
- package/dist/hooks/use-performance.esm.js +278 -0
- package/dist/hooks/use-performance.js +278 -0
- package/dist/hooks/use-reusable-architecture.d.ts +412 -0
- package/dist/hooks/use-reusable-architecture.esm.js +385 -0
- package/dist/hooks/use-reusable-architecture.js +385 -0
- package/dist/hooks/use-semantic-input-types.d.ts +354 -0
- package/dist/hooks/use-semantic-input-types.esm.js +315 -0
- package/dist/hooks/use-semantic-input-types.js +315 -0
- package/dist/hooks/use-semantic-input.d.ts +563 -0
- package/dist/hooks/use-semantic-input.esm.js +513 -0
- package/dist/hooks/use-semantic-input.js +513 -0
- package/dist/hooks/use-tablet-layout.d.ts +382 -0
- package/dist/hooks/use-tablet-layout.esm.js +355 -0
- package/dist/hooks/use-tablet-layout.js +355 -0
- package/dist/hooks/use-touch-friendly-input.d.ts +520 -0
- package/dist/hooks/use-touch-friendly-input.esm.js +480 -0
- package/dist/hooks/use-touch-friendly-input.js +480 -0
- package/dist/hooks/use-touch-friendly-interface.d.ts +329 -0
- package/dist/hooks/use-touch-friendly-interface.esm.js +299 -0
- package/dist/hooks/use-touch-friendly-interface.js +299 -0
- package/dist/hooks/use-touch-optimization.d.ts +373 -0
- package/dist/hooks/use-touch-optimization.esm.js +348 -0
- package/dist/hooks/use-touch-optimization.js +348 -0
- package/dist/index.esm.js +2 -2
- package/dist/index.js +2 -2
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.esm.js +6 -0
- package/dist/lib/utils.js +6 -0
- package/dist/plugins/theme-css-generator.d.ts +345 -0
- package/dist/plugins/theme-css-generator.esm.js +305 -0
- package/dist/plugins/theme-css-generator.js +305 -0
- package/dist/styles.css +1 -1
- package/dist/themes/ThemeContext.d.ts +27 -0
- package/dist/themes/ThemeContext.esm.js +31 -0
- package/dist/themes/ThemeContext.js +31 -0
- package/dist/themes/ThemeProvider.d.ts +222 -0
- package/dist/themes/ThemeProvider.esm.js +229 -0
- package/dist/themes/ThemeProvider.js +229 -0
- package/dist/themes/accessibility/index.d.ts +7 -0
- package/dist/themes/accessibility/index.esm.js +27 -0
- package/dist/themes/accessibility/index.js +27 -0
- package/dist/themes/accessibility.d.ts +259 -0
- package/dist/themes/accessibility.esm.js +220 -0
- package/dist/themes/accessibility.js +220 -0
- package/dist/themes/aria-patterns.d.ts +418 -0
- package/dist/themes/aria-patterns.esm.js +384 -0
- package/dist/themes/aria-patterns.js +384 -0
- package/dist/themes/base-themes.d.ts +34 -0
- package/dist/themes/base-themes.esm.js +52 -0
- package/dist/themes/base-themes.js +52 -0
- package/dist/themes/colorManager.d.ts +327 -0
- package/dist/themes/colorManager.esm.js +362 -0
- package/dist/themes/colorManager.js +362 -0
- package/dist/themes/examples/dark-theme.d.ts +139 -0
- package/dist/themes/examples/dark-theme.esm.js +124 -0
- package/dist/themes/examples/dark-theme.js +124 -0
- package/dist/themes/examples/minimal-theme.d.ts +93 -0
- package/dist/themes/examples/minimal-theme.esm.js +86 -0
- package/dist/themes/examples/minimal-theme.js +86 -0
- package/dist/themes/focus-management.d.ts +699 -0
- package/dist/themes/focus-management.esm.js +642 -0
- package/dist/themes/focus-management.js +642 -0
- package/dist/themes/fontLoader.d.ts +163 -0
- package/dist/themes/fontLoader.esm.js +192 -0
- package/dist/themes/fontLoader.js +192 -0
- package/dist/themes/high-contrast.d.ts +619 -0
- package/dist/themes/high-contrast.esm.js +573 -0
- package/dist/themes/high-contrast.js +573 -0
- package/dist/themes/index.d.ts +11 -0
- package/dist/themes/index.esm.js +19 -0
- package/dist/themes/index.js +19 -0
- package/dist/themes/inheritance.d.ts +160 -0
- package/dist/themes/inheritance.esm.js +219 -0
- package/dist/themes/inheritance.js +219 -0
- package/dist/themes/keyboard-navigation.d.ts +550 -0
- package/dist/themes/keyboard-navigation.esm.js +521 -0
- package/dist/themes/keyboard-navigation.js +521 -0
- package/dist/themes/motion-reduction.d.ts +660 -0
- package/dist/themes/motion-reduction.esm.js +602 -0
- package/dist/themes/motion-reduction.js +602 -0
- package/dist/themes/navigation.d.ts +232 -0
- package/dist/themes/navigation.esm.js +238 -0
- package/dist/themes/navigation.js +238 -0
- package/dist/themes/screen-reader.d.ts +645 -0
- package/dist/themes/screen-reader.esm.js +580 -0
- package/dist/themes/screen-reader.js +580 -0
- package/dist/themes/systemThemeDetector.d.ts +148 -0
- package/dist/themes/systemThemeDetector.esm.js +174 -0
- package/dist/themes/systemThemeDetector.js +174 -0
- package/dist/themes/themeCSSUpdater.d.ts +229 -0
- package/dist/themes/themeCSSUpdater.esm.js +250 -0
- package/dist/themes/themeCSSUpdater.js +250 -0
- package/dist/themes/themePersistence.d.ts +192 -0
- package/dist/themes/themePersistence.esm.js +217 -0
- package/dist/themes/themePersistence.js +217 -0
- package/dist/themes/themes/stan-design.d.ts +678 -0
- package/dist/themes/themes/stan-design.esm.js +518 -0
- package/dist/themes/themes/stan-design.js +518 -0
- package/dist/themes/types.d.ts +454 -0
- package/dist/themes/types.esm.js +446 -0
- package/dist/themes/types.js +446 -0
- package/dist/themes/useSystemTheme.d.ts +43 -0
- package/dist/themes/useSystemTheme.esm.js +48 -0
- package/dist/themes/useSystemTheme.js +48 -0
- package/dist/themes/useTheme.d.ts +20 -0
- package/dist/themes/useTheme.esm.js +87 -0
- package/dist/themes/useTheme.js +87 -0
- package/dist/themes/validation.d.ts +406 -0
- package/dist/themes/validation.esm.js +411 -0
- package/dist/themes/validation.js +411 -0
- package/dist/tokens/index.d.ts +25 -0
- package/dist/tokens/index.esm.js +23 -0
- package/dist/tokens/index.js +23 -0
- package/dist/tokens/tokenExporter.d.ts +336 -0
- package/dist/tokens/tokenExporter.esm.js +371 -0
- package/dist/tokens/tokenExporter.js +371 -0
- package/dist/tokens/tokenGenerator.d.ts +250 -0
- package/dist/tokens/tokenGenerator.esm.js +267 -0
- package/dist/tokens/tokenGenerator.js +267 -0
- package/dist/tokens/tokenManager.d.ts +194 -0
- package/dist/tokens/tokenManager.esm.js +235 -0
- package/dist/tokens/tokenManager.js +235 -0
- package/dist/tokens/tokenValidator.d.ts +488 -0
- package/dist/tokens/tokenValidator.esm.js +497 -0
- package/dist/tokens/tokenValidator.js +497 -0
- package/dist/tokens/types.d.ts +78 -0
- package/dist/tokens/types.esm.js +64 -0
- package/dist/tokens/types.js +64 -0
- package/dist/utils/bundle-analyzer.d.ts +260 -0
- package/dist/utils/bundle-analyzer.esm.js +242 -0
- package/dist/utils/bundle-analyzer.js +242 -0
- package/dist/utils/bundle-splitting.d.ts +483 -0
- package/dist/utils/bundle-splitting.esm.js +458 -0
- package/dist/utils/bundle-splitting.js +458 -0
- package/dist/utils/lazy-loading.d.ts +437 -0
- package/dist/utils/lazy-loading.esm.js +415 -0
- package/dist/utils/lazy-loading.js +415 -0
- package/dist/utils/performance-monitor.d.ts +513 -0
- package/dist/utils/performance-monitor.esm.js +472 -0
- package/dist/utils/performance-monitor.js +472 -0
- package/dist/utils/tree-shaking.d.ts +274 -0
- package/dist/utils/tree-shaking.esm.js +266 -0
- package/dist/utils/tree-shaking.js +266 -0
- package/package.json +1 -1
- package/src/index.ts +2 -2
- package/src/themes/accessibility/index.ts +1 -1
- package/src/themes/focus-management.ts +3 -3
- package/src/themes/keyboard-navigation.ts +3 -3
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
export interface PerformanceThrottlingConfig {
|
|
2
|
+
enablePerformanceMonitoring?: boolean
|
|
3
|
+
enableAutomaticThrottling?: boolean
|
|
4
|
+
enableUserExperienceOptimization?: boolean
|
|
5
|
+
enableBatteryPreservation?: boolean
|
|
6
|
+
performanceThreshold?: number
|
|
7
|
+
frameRateTarget?: number
|
|
8
|
+
memoryThreshold?: number
|
|
9
|
+
cpuThreshold?: number
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface PerformanceMetrics {
|
|
13
|
+
fps: number
|
|
14
|
+
frameTime: number
|
|
15
|
+
memoryUsage: number
|
|
16
|
+
cpuUsage: number
|
|
17
|
+
performanceScore: number
|
|
18
|
+
isThrottling: boolean
|
|
19
|
+
throttleReason: string
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface PerformanceThrottlingCallbacks {
|
|
23
|
+
onPerformanceWarning?: (metrics: PerformanceMetrics) => void
|
|
24
|
+
onThrottlingApplied?: (level: string, reason: string) => void
|
|
25
|
+
onPerformanceRecovery?: (metrics: PerformanceMetrics) => void
|
|
26
|
+
onUserExperienceOptimized?: (optimization: string) => void
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export declare const usePerformanceThrottling: (
|
|
30
|
+
config: PerformanceThrottlingConfig = {},
|
|
31
|
+
callbacks: PerformanceThrottlingCallbacks = {}
|
|
32
|
+
) => {
|
|
33
|
+
const {
|
|
34
|
+
enablePerformanceMonitoring = true,
|
|
35
|
+
enableAutomaticThrottling = true,
|
|
36
|
+
enableUserExperienceOptimization = true,
|
|
37
|
+
enableBatteryPreservation = true,
|
|
38
|
+
performanceThreshold = 70,
|
|
39
|
+
frameRateTarget = 60,
|
|
40
|
+
memoryThreshold = 80,
|
|
41
|
+
cpuThreshold = 80
|
|
42
|
+
} = config
|
|
43
|
+
|
|
44
|
+
const [metrics, setMetrics] = useState<PerformanceMetrics>({
|
|
45
|
+
fps: 60,
|
|
46
|
+
frameTime: 16.67,
|
|
47
|
+
memoryUsage: 0,
|
|
48
|
+
cpuUsage: 0,
|
|
49
|
+
performanceScore: 100,
|
|
50
|
+
isThrottling: false,
|
|
51
|
+
throttleReason: 'none'
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
const [isOptimizing, setIsOptimizing] = useState(false)
|
|
55
|
+
const [optimizations, setOptimizations] = useState<string[]>([])
|
|
56
|
+
const [throttleLevel, setThrottleLevel] = useState<'none' | 'light' | 'moderate' | 'aggressive'>('none')
|
|
57
|
+
|
|
58
|
+
const frameCountRef = useRef(0)
|
|
59
|
+
const lastFrameTimeRef = useRef(performance.now())
|
|
60
|
+
const performanceTimerRef = useRef<number | null>(null)
|
|
61
|
+
const throttlingTimerRef = useRef<number | null>(null)
|
|
62
|
+
|
|
63
|
+
// Performance monitoring
|
|
64
|
+
const measurePerformance = useCallback(() => {
|
|
65
|
+
if (!enablePerformanceMonitoring) return
|
|
66
|
+
|
|
67
|
+
try {
|
|
68
|
+
const now = performance.now()
|
|
69
|
+
frameCountRef.current++
|
|
70
|
+
|
|
71
|
+
if (now - lastFrameTimeRef.current >= 1000) {
|
|
72
|
+
const fps = Math.round((frameCountRef.current * 1000) / (now - lastFrameTimeRef.current))
|
|
73
|
+
const frameTime = 1000 / fps
|
|
74
|
+
|
|
75
|
+
// Simulate memory and CPU usage
|
|
76
|
+
const memoryUsage = Math.random() * 100
|
|
77
|
+
const cpuUsage = Math.random() * 100
|
|
78
|
+
|
|
79
|
+
// Calculate performance score
|
|
80
|
+
const fpsScore = Math.min((fps / frameRateTarget) * 100, 100)
|
|
81
|
+
const timeScore = Math.max(100 - (frameTime - 16.67) * 10, 0)
|
|
82
|
+
const memoryScore = Math.max(100 - memoryUsage, 0)
|
|
83
|
+
const cpuScore = Math.max(100 - cpuUsage, 0)
|
|
84
|
+
|
|
85
|
+
const performanceScore = Math.round((fpsScore + timeScore + memoryScore + cpuScore) / 4)
|
|
86
|
+
|
|
87
|
+
// Determine if throttling is needed
|
|
88
|
+
const isThrottling = performanceScore < performanceThreshold ||
|
|
89
|
+
fps < frameRateTarget * 0.8 ||
|
|
90
|
+
memoryUsage > memoryThreshold ||
|
|
91
|
+
cpuUsage > cpuThreshold
|
|
92
|
+
|
|
93
|
+
let throttleReason = 'none'
|
|
94
|
+
if (performanceScore < performanceThreshold) throttleReason = 'low_performance'
|
|
95
|
+
else if (fps < frameRateTarget * 0.8) throttleReason = 'low_fps'
|
|
96
|
+
else if (memoryUsage > memoryThreshold) throttleReason = 'high_memory'
|
|
97
|
+
else if (cpuUsage > cpuThreshold) throttleReason = 'high_cpu'
|
|
98
|
+
|
|
99
|
+
const newMetrics: PerformanceMetrics = {
|
|
100
|
+
fps,
|
|
101
|
+
frameTime,
|
|
102
|
+
memoryUsage,
|
|
103
|
+
cpuUsage,
|
|
104
|
+
performanceScore,
|
|
105
|
+
isThrottling,
|
|
106
|
+
throttleReason
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
setMetrics(newMetrics)
|
|
110
|
+
|
|
111
|
+
// Trigger callbacks
|
|
112
|
+
if (isThrottling) {
|
|
113
|
+
callbacks.onPerformanceWarning?.(newMetrics)
|
|
114
|
+
} else if (metrics.isThrottling) {
|
|
115
|
+
callbacks.onPerformanceRecovery?.(newMetrics)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
frameCountRef.current = 0
|
|
119
|
+
lastFrameTimeRef.current = now
|
|
120
|
+
}
|
|
121
|
+
} catch (error) {
|
|
122
|
+
console.warn('Performance measurement failed:', error)
|
|
123
|
+
}
|
|
124
|
+
}, [enablePerformanceMonitoring, performanceThreshold, frameRateTarget, memoryThreshold, cpuThreshold, callbacks, metrics.isThrottling])
|
|
125
|
+
|
|
126
|
+
// Automatic throttling
|
|
127
|
+
const applyPerformanceThrottling = useCallback(() => {
|
|
128
|
+
if (!enableAutomaticThrottling) return
|
|
129
|
+
|
|
130
|
+
setIsOptimizing(true)
|
|
131
|
+
|
|
132
|
+
setTimeout(() => {
|
|
133
|
+
let newThrottleLevel: 'none' | 'light' | 'moderate' | 'aggressive' = 'none'
|
|
134
|
+
let optimizations: string[] = []
|
|
135
|
+
|
|
136
|
+
// Determine throttle level based on performance metrics
|
|
137
|
+
if (metrics.performanceScore < 50 || metrics.fps < 30) {
|
|
138
|
+
newThrottleLevel = 'aggressive'
|
|
139
|
+
optimizations.push('Critical performance: Maximum throttling applied')
|
|
140
|
+
optimizations.push('All non-essential animations disabled')
|
|
141
|
+
optimizations.push('Frame rate limited to 30fps')
|
|
142
|
+
optimizations.push('Memory usage optimized')
|
|
143
|
+
} else if (metrics.performanceScore < 70 || metrics.fps < 45) {
|
|
144
|
+
newThrottleLevel = 'moderate'
|
|
145
|
+
optimizations.push('Performance issue: Moderate throttling applied')
|
|
146
|
+
optimizations.push('Animation complexity reduced by 50%')
|
|
147
|
+
optimizations.push('Frame rate limited to 45fps')
|
|
148
|
+
optimizations.push('Memory optimization enabled')
|
|
149
|
+
} else if (metrics.performanceScore < 85 || metrics.fps < 55) {
|
|
150
|
+
newThrottleLevel = 'light'
|
|
151
|
+
optimizations.push('Performance warning: Light throttling applied')
|
|
152
|
+
optimizations.push('Animation complexity reduced by 25%')
|
|
153
|
+
optimizations.push('Frame rate limited to 55fps')
|
|
154
|
+
optimizations.push('Performance monitoring enhanced')
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Battery preservation considerations
|
|
158
|
+
if (enableBatteryPreservation && newThrottleLevel !== 'none') {
|
|
159
|
+
optimizations.push('Battery preservation: Animation efficiency optimized')
|
|
160
|
+
optimizations.push('GPU usage minimized for power efficiency')
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// User experience optimization
|
|
164
|
+
if (enableUserExperienceOptimization && newThrottleLevel !== 'none') {
|
|
165
|
+
optimizations.push('User experience: Smooth performance prioritized')
|
|
166
|
+
optimizations.push('Animation quality balanced with performance')
|
|
167
|
+
optimizations.push('Responsive interactions maintained')
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
setThrottleLevel(newThrottleLevel)
|
|
171
|
+
setOptimizations(prev => [...prev, ...optimizations])
|
|
172
|
+
setIsOptimizing(false)
|
|
173
|
+
|
|
174
|
+
callbacks.onThrottlingApplied?.(newThrottleLevel, metrics.throttleReason)
|
|
175
|
+
|
|
176
|
+
optimizations.forEach(optimization => {
|
|
177
|
+
callbacks.onUserExperienceOptimized?.(optimization)
|
|
178
|
+
})
|
|
179
|
+
}, 200)
|
|
180
|
+
}, [enableAutomaticThrottling, enableBatteryPreservation, enableUserExperienceOptimization, metrics, callbacks])
|
|
181
|
+
|
|
182
|
+
// Get throttling recommendations
|
|
183
|
+
const getThrottlingRecommendations = useCallback(() => {
|
|
184
|
+
const recommendations = []
|
|
185
|
+
|
|
186
|
+
if (metrics.performanceScore < 50) {
|
|
187
|
+
recommendations.push('Critical: Disable all animations and complex UI operations')
|
|
188
|
+
recommendations.push('Use static UI elements and minimal interactions')
|
|
189
|
+
recommendations.push('Implement aggressive memory cleanup')
|
|
190
|
+
} else if (metrics.performanceScore < 70) {
|
|
191
|
+
recommendations.push('High: Significantly reduce animation complexity')
|
|
192
|
+
recommendations.push('Limit concurrent animations to 2-3 maximum')
|
|
193
|
+
recommendations.push('Use CSS transforms instead of JavaScript animations')
|
|
194
|
+
} else if (metrics.performanceScore < 85) {
|
|
195
|
+
recommendations.push('Medium: Consider light performance optimization')
|
|
196
|
+
recommendations.push('Monitor animation frame rates closely')
|
|
197
|
+
recommendations.push('Implement animation debouncing')
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if (metrics.fps < frameRateTarget * 0.8) {
|
|
201
|
+
recommendations.push('Low FPS: Reduce animation frame rate')
|
|
202
|
+
recommendations.push('Use requestAnimationFrame for smooth animations')
|
|
203
|
+
recommendations.push('Implement frame skipping for complex animations')
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
if (metrics.memoryUsage > memoryThreshold) {
|
|
207
|
+
recommendations.push('High Memory: Optimize memory usage')
|
|
208
|
+
recommendations.push('Clean up animation references')
|
|
209
|
+
recommendations.push('Use object pooling for repeated animations')
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
if (metrics.cpuUsage > cpuThreshold) {
|
|
213
|
+
recommendations.push('High CPU: Reduce computational complexity')
|
|
214
|
+
recommendations.push('Use CSS animations instead of JavaScript')
|
|
215
|
+
recommendations.push('Implement animation pausing when not visible')
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
return recommendations
|
|
219
|
+
}, [metrics, frameRateTarget, memoryThreshold, cpuThreshold])
|
|
220
|
+
|
|
221
|
+
// Get optimal performance settings
|
|
222
|
+
const getOptimalPerformanceSettings = useCallback(() => {
|
|
223
|
+
const settings = {
|
|
224
|
+
maxConcurrentAnimations: 5,
|
|
225
|
+
frameRateLimit: 60,
|
|
226
|
+
animationQuality: 'high',
|
|
227
|
+
memoryOptimization: false,
|
|
228
|
+
cpuOptimization: false
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
switch (throttleLevel) {
|
|
232
|
+
case 'aggressive':
|
|
233
|
+
settings.maxConcurrentAnimations = 1
|
|
234
|
+
settings.frameRateLimit = 30
|
|
235
|
+
settings.animationQuality = 'minimal'
|
|
236
|
+
settings.memoryOptimization = true
|
|
237
|
+
settings.cpuOptimization = true
|
|
238
|
+
break
|
|
239
|
+
case 'moderate':
|
|
240
|
+
settings.maxConcurrentAnimations = 2
|
|
241
|
+
settings.frameRateLimit = 45
|
|
242
|
+
settings.animationQuality = 'medium'
|
|
243
|
+
settings.memoryOptimization = true
|
|
244
|
+
settings.cpuOptimization = true
|
|
245
|
+
break
|
|
246
|
+
case 'light':
|
|
247
|
+
settings.maxConcurrentAnimations = 3
|
|
248
|
+
settings.frameRateLimit = 55
|
|
249
|
+
settings.animationQuality = 'high'
|
|
250
|
+
settings.memoryOptimization = true
|
|
251
|
+
settings.cpuOptimization = false
|
|
252
|
+
break
|
|
253
|
+
default:
|
|
254
|
+
settings.maxConcurrentAnimations = 5
|
|
255
|
+
settings.frameRateLimit = 60
|
|
256
|
+
settings.animationQuality = 'high'
|
|
257
|
+
settings.memoryOptimization = false
|
|
258
|
+
settings.cpuOptimization = false
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
return settings
|
|
262
|
+
}, [throttleLevel])
|
|
263
|
+
|
|
264
|
+
// Reset throttling
|
|
265
|
+
const resetThrottling = useCallback(() => {
|
|
266
|
+
setThrottleLevel('none')
|
|
267
|
+
setOptimizations([])
|
|
268
|
+
setMetrics(prev => ({
|
|
269
|
+
...prev,
|
|
270
|
+
isThrottling: false,
|
|
271
|
+
throttleReason: 'none'
|
|
272
|
+
}))
|
|
273
|
+
}, [])
|
|
274
|
+
|
|
275
|
+
// Initialize performance monitoring
|
|
276
|
+
useEffect(() => {
|
|
277
|
+
if (!enablePerformanceMonitoring) return
|
|
278
|
+
|
|
279
|
+
try {
|
|
280
|
+
performanceTimerRef.current = window.setInterval(measurePerformance, 1000)
|
|
281
|
+
|
|
282
|
+
return () => {
|
|
283
|
+
if (performanceTimerRef.current) {
|
|
284
|
+
clearInterval(performanceTimerRef.current)
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
} catch (error) {
|
|
288
|
+
console.warn('Performance monitoring initialization failed:', error)
|
|
289
|
+
}
|
|
290
|
+
}, [enablePerformanceMonitoring, measurePerformance])
|
|
291
|
+
|
|
292
|
+
// Apply throttling when performance degrades
|
|
293
|
+
useEffect(() => {
|
|
294
|
+
if (enableAutomaticThrottling && metrics.isThrottling) {
|
|
295
|
+
throttlingTimerRef.current = window.setTimeout(applyPerformanceThrottling, 1000)
|
|
296
|
+
|
|
297
|
+
return () => {
|
|
298
|
+
if (throttlingTimerRef.current) {
|
|
299
|
+
clearTimeout(throttlingTimerRef.current)
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}, [enableAutomaticThrottling, metrics.isThrottling, applyPerformanceThrottling])
|
|
304
|
+
|
|
305
|
+
// Cleanup on unmount
|
|
306
|
+
useEffect(() => {
|
|
307
|
+
return () => {
|
|
308
|
+
if (throttlingTimerRef.current) {
|
|
309
|
+
clearTimeout(throttlingTimerRef.current)
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}, [])
|
|
313
|
+
|
|
314
|
+
return {
|
|
315
|
+
// State
|
|
316
|
+
metrics,
|
|
317
|
+
isOptimizing,
|
|
318
|
+
optimizations,
|
|
319
|
+
throttleLevel,
|
|
320
|
+
|
|
321
|
+
// Actions
|
|
322
|
+
measurePerformance,
|
|
323
|
+
applyPerformanceThrottling,
|
|
324
|
+
resetThrottling,
|
|
325
|
+
|
|
326
|
+
// Computed values
|
|
327
|
+
isThrottling: throttleLevel !== 'none',
|
|
328
|
+
performanceLevel: metrics.performanceScore >= 90 ? 'excellent' :
|
|
329
|
+
metrics.performanceScore >= 80 ? 'good' :
|
|
330
|
+
metrics.performanceScore >= 70 ? 'fair' : 'poor',
|
|
331
|
+
needsOptimization: metrics.performanceScore < 70,
|
|
332
|
+
recommendations: getThrottlingRecommendations(),
|
|
333
|
+
performanceSettings: getOptimalPerformanceSettings(),
|
|
334
|
+
|
|
335
|
+
// Utility functions
|
|
336
|
+
getPerformanceHealth: () => {
|
|
337
|
+
if (metrics.performanceScore >= 90) return 'excellent'
|
|
338
|
+
if (metrics.performanceScore >= 80) return 'good'
|
|
339
|
+
if (metrics.performanceScore >= 70) return 'fair'
|
|
340
|
+
if (metrics.performanceScore >= 50) return 'poor'
|
|
341
|
+
return 'critical'
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
export default usePerformanceThrottling
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback, useRef } from 'react'
|
|
2
|
+
|
|
3
|
+
export interface PerformanceThrottlingConfig {
|
|
4
|
+
enablePerformanceMonitoring?}
|
|
5
|
+
|
|
6
|
+
export interface PerformanceMetrics {
|
|
7
|
+
fps}
|
|
8
|
+
|
|
9
|
+
export interface PerformanceThrottlingCallbacks {
|
|
10
|
+
onPerformanceWarning?) => void
|
|
11
|
+
onThrottlingApplied?, reason) => void
|
|
12
|
+
onPerformanceRecovery?) => void
|
|
13
|
+
onUserExperienceOptimized?) => void
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const usePerformanceThrottling = (
|
|
17
|
+
config= {},
|
|
18
|
+
callbacks= {}
|
|
19
|
+
) => {
|
|
20
|
+
const {
|
|
21
|
+
enablePerformanceMonitoring = true,
|
|
22
|
+
enableAutomaticThrottling = true,
|
|
23
|
+
enableUserExperienceOptimization = true,
|
|
24
|
+
enableBatteryPreservation = true,
|
|
25
|
+
performanceThreshold = 70,
|
|
26
|
+
frameRateTarget = 60,
|
|
27
|
+
memoryThreshold = 80,
|
|
28
|
+
cpuThreshold = 80
|
|
29
|
+
} = config
|
|
30
|
+
|
|
31
|
+
const [metrics, setMetrics] = useState<PerformanceMetrics>({
|
|
32
|
+
fps,
|
|
33
|
+
frameTime,
|
|
34
|
+
memoryUsage,
|
|
35
|
+
cpuUsage,
|
|
36
|
+
performanceScore,
|
|
37
|
+
isThrottling,
|
|
38
|
+
throttleReason})
|
|
39
|
+
|
|
40
|
+
const [isOptimizing, setIsOptimizing] = useState(false)
|
|
41
|
+
const [optimizations, setOptimizations] = useState<string[]>([])
|
|
42
|
+
const [throttleLevel, setThrottleLevel] = useState<'none' | 'light' | 'moderate' | 'aggressive'>('none')
|
|
43
|
+
|
|
44
|
+
const frameCountRef = useRef(0)
|
|
45
|
+
const lastFrameTimeRef = useRef(performance.now())
|
|
46
|
+
const performanceTimerRef = useRef<number | null>(null)
|
|
47
|
+
const throttlingTimerRef = useRef<number | null>(null)
|
|
48
|
+
|
|
49
|
+
// Performance monitoring
|
|
50
|
+
const measurePerformance = useCallback(() => {
|
|
51
|
+
if (!enablePerformanceMonitoring) return
|
|
52
|
+
|
|
53
|
+
try {
|
|
54
|
+
const now = performance.now()
|
|
55
|
+
frameCountRef.current++
|
|
56
|
+
|
|
57
|
+
if (now - lastFrameTimeRef.current >= 1000) {
|
|
58
|
+
const fps = Math.round((frameCountRef.current * 1000) / (now - lastFrameTimeRef.current))
|
|
59
|
+
const frameTime = 1000 / fps
|
|
60
|
+
|
|
61
|
+
// Simulate memory and CPU usage
|
|
62
|
+
const memoryUsage = Math.random() * 100
|
|
63
|
+
const cpuUsage = Math.random() * 100
|
|
64
|
+
|
|
65
|
+
// Calculate performance score
|
|
66
|
+
const fpsScore = Math.min((fps / frameRateTarget) * 100, 100)
|
|
67
|
+
const timeScore = Math.max(100 - (frameTime - 16.67) * 10, 0)
|
|
68
|
+
const memoryScore = Math.max(100 - memoryUsage, 0)
|
|
69
|
+
const cpuScore = Math.max(100 - cpuUsage, 0)
|
|
70
|
+
|
|
71
|
+
const performanceScore = Math.round((fpsScore + timeScore + memoryScore + cpuScore) / 4)
|
|
72
|
+
|
|
73
|
+
// Determine if throttling is needed
|
|
74
|
+
const isThrottling = performanceScore < performanceThreshold ||
|
|
75
|
+
fps < frameRateTarget * 0.8 ||
|
|
76
|
+
memoryUsage > memoryThreshold ||
|
|
77
|
+
cpuUsage > cpuThreshold
|
|
78
|
+
|
|
79
|
+
let throttleReason = 'none'
|
|
80
|
+
if (performanceScore < performanceThreshold) throttleReason = 'low_performance'
|
|
81
|
+
else if (fps < frameRateTarget * 0.8) throttleReason = 'low_fps'
|
|
82
|
+
else if (memoryUsage > memoryThreshold) throttleReason = 'high_memory'
|
|
83
|
+
else if (cpuUsage > cpuThreshold) throttleReason = 'high_cpu'
|
|
84
|
+
|
|
85
|
+
const newMetrics= {
|
|
86
|
+
fps,
|
|
87
|
+
frameTime,
|
|
88
|
+
memoryUsage,
|
|
89
|
+
cpuUsage,
|
|
90
|
+
performanceScore,
|
|
91
|
+
isThrottling,
|
|
92
|
+
throttleReason
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
setMetrics(newMetrics)
|
|
96
|
+
|
|
97
|
+
// Trigger callbacks
|
|
98
|
+
if (isThrottling) {
|
|
99
|
+
callbacks.onPerformanceWarning?.(newMetrics)
|
|
100
|
+
} else if (metrics.isThrottling) {
|
|
101
|
+
callbacks.onPerformanceRecovery?.(newMetrics)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
frameCountRef.current = 0
|
|
105
|
+
lastFrameTimeRef.current = now
|
|
106
|
+
}
|
|
107
|
+
} catch (error) {
|
|
108
|
+
console.warn('Performance measurement failed, error)
|
|
109
|
+
}
|
|
110
|
+
}, [enablePerformanceMonitoring, performanceThreshold, frameRateTarget, memoryThreshold, cpuThreshold, callbacks, metrics.isThrottling])
|
|
111
|
+
|
|
112
|
+
// Automatic throttling
|
|
113
|
+
const applyPerformanceThrottling = useCallback(() => {
|
|
114
|
+
if (!enableAutomaticThrottling) return
|
|
115
|
+
|
|
116
|
+
setIsOptimizing(true)
|
|
117
|
+
|
|
118
|
+
setTimeout(() => {
|
|
119
|
+
let newThrottleLevel= 'none'
|
|
120
|
+
let optimizations] = []
|
|
121
|
+
|
|
122
|
+
// Determine throttle level based on performance metrics
|
|
123
|
+
if (metrics.performanceScore < 50 || metrics.fps < 30) {
|
|
124
|
+
newThrottleLevel = 'aggressive'
|
|
125
|
+
optimizations.push('Critical performance)
|
|
126
|
+
optimizations.push('All non-essential animations disabled')
|
|
127
|
+
optimizations.push('Frame rate limited to 30fps')
|
|
128
|
+
optimizations.push('Memory usage optimized')
|
|
129
|
+
} else if (metrics.performanceScore < 70 || metrics.fps < 45) {
|
|
130
|
+
newThrottleLevel = 'moderate'
|
|
131
|
+
optimizations.push('Performance issue)
|
|
132
|
+
optimizations.push('Animation complexity reduced by 50%')
|
|
133
|
+
optimizations.push('Frame rate limited to 45fps')
|
|
134
|
+
optimizations.push('Memory optimization enabled')
|
|
135
|
+
} else if (metrics.performanceScore < 85 || metrics.fps < 55) {
|
|
136
|
+
newThrottleLevel = 'light'
|
|
137
|
+
optimizations.push('Performance warning)
|
|
138
|
+
optimizations.push('Animation complexity reduced by 25%')
|
|
139
|
+
optimizations.push('Frame rate limited to 55fps')
|
|
140
|
+
optimizations.push('Performance monitoring enhanced')
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Battery preservation considerations
|
|
144
|
+
if (enableBatteryPreservation && newThrottleLevel !== 'none') {
|
|
145
|
+
optimizations.push('Battery preservation)
|
|
146
|
+
optimizations.push('GPU usage minimized for power efficiency')
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// User experience optimization
|
|
150
|
+
if (enableUserExperienceOptimization && newThrottleLevel !== 'none') {
|
|
151
|
+
optimizations.push('User experience)
|
|
152
|
+
optimizations.push('Animation quality balanced with performance')
|
|
153
|
+
optimizations.push('Responsive interactions maintained')
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
setThrottleLevel(newThrottleLevel)
|
|
157
|
+
setOptimizations(prev => [...prev, ...optimizations])
|
|
158
|
+
setIsOptimizing(false)
|
|
159
|
+
|
|
160
|
+
callbacks.onThrottlingApplied?.(newThrottleLevel, metrics.throttleReason)
|
|
161
|
+
|
|
162
|
+
optimizations.forEach(optimization => {
|
|
163
|
+
callbacks.onUserExperienceOptimized?.(optimization)
|
|
164
|
+
})
|
|
165
|
+
}, 200)
|
|
166
|
+
}, [enableAutomaticThrottling, enableBatteryPreservation, enableUserExperienceOptimization, metrics, callbacks])
|
|
167
|
+
|
|
168
|
+
// Get throttling recommendations
|
|
169
|
+
const getThrottlingRecommendations = useCallback(() => {
|
|
170
|
+
const recommendations = []
|
|
171
|
+
|
|
172
|
+
if (metrics.performanceScore < 50) {
|
|
173
|
+
recommendations.push('Critical)
|
|
174
|
+
recommendations.push('Use static UI elements and minimal interactions')
|
|
175
|
+
recommendations.push('Implement aggressive memory cleanup')
|
|
176
|
+
} else if (metrics.performanceScore < 70) {
|
|
177
|
+
recommendations.push('High)
|
|
178
|
+
recommendations.push('Limit concurrent animations to 2-3 maximum')
|
|
179
|
+
recommendations.push('Use CSS transforms instead of JavaScript animations')
|
|
180
|
+
} else if (metrics.performanceScore < 85) {
|
|
181
|
+
recommendations.push('Medium)
|
|
182
|
+
recommendations.push('Monitor animation frame rates closely')
|
|
183
|
+
recommendations.push('Implement animation debouncing')
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (metrics.fps < frameRateTarget * 0.8) {
|
|
187
|
+
recommendations.push('Low FPS)
|
|
188
|
+
recommendations.push('Use requestAnimationFrame for smooth animations')
|
|
189
|
+
recommendations.push('Implement frame skipping for complex animations')
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (metrics.memoryUsage > memoryThreshold) {
|
|
193
|
+
recommendations.push('High Memory)
|
|
194
|
+
recommendations.push('Clean up animation references')
|
|
195
|
+
recommendations.push('Use object pooling for repeated animations')
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
if (metrics.cpuUsage > cpuThreshold) {
|
|
199
|
+
recommendations.push('High CPU)
|
|
200
|
+
recommendations.push('Use CSS animations instead of JavaScript')
|
|
201
|
+
recommendations.push('Implement animation pausing when not visible')
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
return recommendations
|
|
205
|
+
}, [metrics, frameRateTarget, memoryThreshold, cpuThreshold])
|
|
206
|
+
|
|
207
|
+
// Get optimal performance settings
|
|
208
|
+
const getOptimalPerformanceSettings = useCallback(() => {
|
|
209
|
+
const settings = {
|
|
210
|
+
maxConcurrentAnimations,
|
|
211
|
+
frameRateLimit,
|
|
212
|
+
animationQuality,
|
|
213
|
+
memoryOptimization,
|
|
214
|
+
cpuOptimization}
|
|
215
|
+
|
|
216
|
+
switch (throttleLevel) {
|
|
217
|
+
case 'aggressive'= 1
|
|
218
|
+
settings.frameRateLimit = 30
|
|
219
|
+
settings.animationQuality = 'minimal'
|
|
220
|
+
settings.memoryOptimization = true
|
|
221
|
+
settings.cpuOptimization = true
|
|
222
|
+
break
|
|
223
|
+
case 'moderate'= 2
|
|
224
|
+
settings.frameRateLimit = 45
|
|
225
|
+
settings.animationQuality = 'medium'
|
|
226
|
+
settings.memoryOptimization = true
|
|
227
|
+
settings.cpuOptimization = true
|
|
228
|
+
break
|
|
229
|
+
case 'light'= 3
|
|
230
|
+
settings.frameRateLimit = 55
|
|
231
|
+
settings.animationQuality = 'high'
|
|
232
|
+
settings.memoryOptimization = true
|
|
233
|
+
settings.cpuOptimization = false
|
|
234
|
+
break
|
|
235
|
+
default= 5
|
|
236
|
+
settings.frameRateLimit = 60
|
|
237
|
+
settings.animationQuality = 'high'
|
|
238
|
+
settings.memoryOptimization = false
|
|
239
|
+
settings.cpuOptimization = false
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return settings
|
|
243
|
+
}, [throttleLevel])
|
|
244
|
+
|
|
245
|
+
// Reset throttling
|
|
246
|
+
const resetThrottling = useCallback(() => {
|
|
247
|
+
setThrottleLevel('none')
|
|
248
|
+
setOptimizations([])
|
|
249
|
+
setMetrics(prev => ({
|
|
250
|
+
...prev,
|
|
251
|
+
isThrottling,
|
|
252
|
+
throttleReason}))
|
|
253
|
+
}, [])
|
|
254
|
+
|
|
255
|
+
// Initialize performance monitoring
|
|
256
|
+
useEffect(() => {
|
|
257
|
+
if (!enablePerformanceMonitoring) return
|
|
258
|
+
|
|
259
|
+
try {
|
|
260
|
+
performanceTimerRef.current = window.setInterval(measurePerformance, 1000)
|
|
261
|
+
|
|
262
|
+
return () => {
|
|
263
|
+
if (performanceTimerRef.current) {
|
|
264
|
+
clearInterval(performanceTimerRef.current)
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
} catch (error) {
|
|
268
|
+
console.warn('Performance monitoring initialization failed, error)
|
|
269
|
+
}
|
|
270
|
+
}, [enablePerformanceMonitoring, measurePerformance])
|
|
271
|
+
|
|
272
|
+
// Apply throttling when performance degrades
|
|
273
|
+
useEffect(() => {
|
|
274
|
+
if (enableAutomaticThrottling && metrics.isThrottling) {
|
|
275
|
+
throttlingTimerRef.current = window.setTimeout(applyPerformanceThrottling, 1000)
|
|
276
|
+
|
|
277
|
+
return () => {
|
|
278
|
+
if (throttlingTimerRef.current) {
|
|
279
|
+
clearTimeout(throttlingTimerRef.current)
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}, [enableAutomaticThrottling, metrics.isThrottling, applyPerformanceThrottling])
|
|
284
|
+
|
|
285
|
+
// Cleanup on unmount
|
|
286
|
+
useEffect(() => {
|
|
287
|
+
return () => {
|
|
288
|
+
if (throttlingTimerRef.current) {
|
|
289
|
+
clearTimeout(throttlingTimerRef.current)
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}, [])
|
|
293
|
+
|
|
294
|
+
return {
|
|
295
|
+
// State
|
|
296
|
+
metrics,
|
|
297
|
+
isOptimizing,
|
|
298
|
+
optimizations,
|
|
299
|
+
throttleLevel,
|
|
300
|
+
|
|
301
|
+
// Actions
|
|
302
|
+
measurePerformance,
|
|
303
|
+
applyPerformanceThrottling,
|
|
304
|
+
resetThrottling,
|
|
305
|
+
|
|
306
|
+
// Computed values
|
|
307
|
+
isThrottling== 'none',
|
|
308
|
+
performanceLevel= 90 ? 'excellent' = 80 ? 'good' = 70 ? 'fair' ,
|
|
309
|
+
needsOptimization,
|
|
310
|
+
recommendations),
|
|
311
|
+
performanceSettings),
|
|
312
|
+
|
|
313
|
+
// Utility functions
|
|
314
|
+
getPerformanceHealth) => {
|
|
315
|
+
if (metrics.performanceScore >= 90) return 'excellent'
|
|
316
|
+
if (metrics.performanceScore >= 80) return 'good'
|
|
317
|
+
if (metrics.performanceScore >= 70) return 'fair'
|
|
318
|
+
if (metrics.performanceScore >= 50) return 'poor'
|
|
319
|
+
return 'critical'
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
export default usePerformanceThrottling
|