@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.7 → 0.2.9
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/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
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback, useRef } from 'react'
|
|
2
|
+
|
|
3
|
+
export interface BatteryAnimationConfig {
|
|
4
|
+
enableBatteryMonitoring?}
|
|
5
|
+
|
|
6
|
+
export interface BatteryAnimationState {
|
|
7
|
+
batteryLevel}
|
|
8
|
+
|
|
9
|
+
export interface BatteryAnimationCallbacks {
|
|
10
|
+
onBatteryLevelChange?, isLow) => void
|
|
11
|
+
onPerformanceWarning?, shouldThrottle) => void
|
|
12
|
+
onAnimationThrottled?, reason) => void
|
|
13
|
+
onUserPreferenceChange?) => void
|
|
14
|
+
onReducedMotionChange?) => void
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const useBatteryAnimations = (
|
|
18
|
+
config= {},
|
|
19
|
+
callbacks= {}
|
|
20
|
+
) => {
|
|
21
|
+
const {
|
|
22
|
+
enableBatteryMonitoring = true,
|
|
23
|
+
enablePerformanceThrottling = true,
|
|
24
|
+
enableReducedMotion = true,
|
|
25
|
+
enableUserPreferences = true,
|
|
26
|
+
enableAutomaticOptimization = true,
|
|
27
|
+
lowBatteryThreshold = 0.2,
|
|
28
|
+
criticalBatteryThreshold = 0.1,
|
|
29
|
+
performanceThrottleThreshold = 70
|
|
30
|
+
} = config
|
|
31
|
+
|
|
32
|
+
const [state, setState] = useState<BatteryAnimationState>({
|
|
33
|
+
batteryLevel,
|
|
34
|
+
isLowBattery,
|
|
35
|
+
isCriticalBattery,
|
|
36
|
+
isCharging,
|
|
37
|
+
performanceScore,
|
|
38
|
+
shouldThrottle,
|
|
39
|
+
throttleLevel,
|
|
40
|
+
reducedMotion,
|
|
41
|
+
userPreference})
|
|
42
|
+
|
|
43
|
+
const [isOptimizing, setIsOptimizing] = useState(false)
|
|
44
|
+
const [optimizations, setOptimizations] = useState<string[]>([])
|
|
45
|
+
const batteryRef = useRef<any>(null)
|
|
46
|
+
const performanceTimerRef = useRef<number | null>(null)
|
|
47
|
+
const batteryCheckIntervalRef = useRef<number | null>(null)
|
|
48
|
+
|
|
49
|
+
// Battery level detection
|
|
50
|
+
const getBatteryStatus = useCallback(async ()=> {
|
|
51
|
+
if (!enableBatteryMonitoring || !('getBattery' in navigator)) return
|
|
52
|
+
|
|
53
|
+
try {
|
|
54
|
+
const battery = await (navigator as any).getBattery()
|
|
55
|
+
batteryRef.current = battery
|
|
56
|
+
|
|
57
|
+
const batteryLevel = battery.level
|
|
58
|
+
const isCharging = battery.charging
|
|
59
|
+
const isLowBattery = batteryLevel <= lowBatteryThreshold
|
|
60
|
+
const isCriticalBattery = batteryLevel <= criticalBatteryThreshold
|
|
61
|
+
|
|
62
|
+
setState(prev => ({
|
|
63
|
+
...prev,
|
|
64
|
+
batteryLevel,
|
|
65
|
+
isLowBattery,
|
|
66
|
+
isCriticalBattery,
|
|
67
|
+
isCharging
|
|
68
|
+
}))
|
|
69
|
+
|
|
70
|
+
callbacks.onBatteryLevelChange?.(batteryLevel, isLowBattery)
|
|
71
|
+
} catch (error) {
|
|
72
|
+
console.warn('Battery API not available, error)
|
|
73
|
+
}
|
|
74
|
+
}, [enableBatteryMonitoring, lowBatteryThreshold, criticalBatteryThreshold, callbacks])
|
|
75
|
+
|
|
76
|
+
// Performance monitoring
|
|
77
|
+
const measurePerformance = useCallback(() => {
|
|
78
|
+
if (!enablePerformanceThrottling) return
|
|
79
|
+
|
|
80
|
+
try {
|
|
81
|
+
// Simulate performance measurement
|
|
82
|
+
const performanceScore = Math.random() * 100
|
|
83
|
+
const shouldThrottle = performanceScore < performanceThrottleThreshold
|
|
84
|
+
|
|
85
|
+
setState(prev => ({
|
|
86
|
+
...prev,
|
|
87
|
+
performanceScore,
|
|
88
|
+
shouldThrottle
|
|
89
|
+
}))
|
|
90
|
+
|
|
91
|
+
if (shouldThrottle) {
|
|
92
|
+
callbacks.onPerformanceWarning?.(performanceScore, shouldThrottle)
|
|
93
|
+
}
|
|
94
|
+
} catch (error) {
|
|
95
|
+
console.warn('Performance measurement failed, error)
|
|
96
|
+
}
|
|
97
|
+
}, [enablePerformanceThrottling, performanceThrottleThreshold, callbacks])
|
|
98
|
+
|
|
99
|
+
// Reduced motion detection
|
|
100
|
+
const checkReducedMotion = useCallback(() => {
|
|
101
|
+
if (!enableReducedMotion) return
|
|
102
|
+
|
|
103
|
+
try {
|
|
104
|
+
const reducedMotion = window.matchMedia('(prefers-reduced-motion)').matches
|
|
105
|
+
|
|
106
|
+
setState(prev => ({
|
|
107
|
+
...prev,
|
|
108
|
+
reducedMotion
|
|
109
|
+
}))
|
|
110
|
+
|
|
111
|
+
callbacks.onReducedMotionChange?.(reducedMotion)
|
|
112
|
+
} catch (error) {
|
|
113
|
+
console.warn('Reduced motion detection failed, error)
|
|
114
|
+
}
|
|
115
|
+
}, [enableReducedMotion, callbacks])
|
|
116
|
+
|
|
117
|
+
// Animation throttling based on battery and performance
|
|
118
|
+
const applyAnimationThrottling = useCallback(() => {
|
|
119
|
+
if (!enablePerformanceThrottling) return
|
|
120
|
+
|
|
121
|
+
setIsOptimizing(true)
|
|
122
|
+
|
|
123
|
+
setTimeout(() => {
|
|
124
|
+
let throttleLevel= 'none'
|
|
125
|
+
let optimizations] = []
|
|
126
|
+
|
|
127
|
+
// Battery-based throttling
|
|
128
|
+
if (state.isCriticalBattery) {
|
|
129
|
+
throttleLevel = 'aggressive'
|
|
130
|
+
optimizations.push('Critical battery)
|
|
131
|
+
optimizations.push('All non-essential animations disabled')
|
|
132
|
+
optimizations.push('Only essential UI transitions enabled')
|
|
133
|
+
} else if (state.isLowBattery) {
|
|
134
|
+
throttleLevel = 'moderate'
|
|
135
|
+
optimizations.push('Low battery)
|
|
136
|
+
optimizations.push('Animation complexity reduced by 60%')
|
|
137
|
+
optimizations.push('Performance optimizations enabled')
|
|
138
|
+
} else if (state.batteryLevel < 0.5) {
|
|
139
|
+
throttleLevel = 'light'
|
|
140
|
+
optimizations.push('Medium battery)
|
|
141
|
+
optimizations.push('Animation complexity reduced by 30%')
|
|
142
|
+
optimizations.push('Battery optimization enabled')
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Performance-based throttling
|
|
146
|
+
if (state.shouldThrottle) {
|
|
147
|
+
if (throttleLevel === 'none') throttleLevel = 'light'
|
|
148
|
+
optimizations.push('Performance-based throttling applied')
|
|
149
|
+
optimizations.push('Animation frame rate optimized')
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Reduced motion support
|
|
153
|
+
if (state.reducedMotion) {
|
|
154
|
+
if (throttleLevel === 'none') throttleLevel = 'light'
|
|
155
|
+
optimizations.push('Reduced motion preference respected')
|
|
156
|
+
optimizations.push('Animation duration minimized')
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// User preference consideration
|
|
160
|
+
if (state.userPreference === 'battery') {
|
|
161
|
+
if (throttleLevel === 'none') throttleLevel = 'light'
|
|
162
|
+
optimizations.push('User preference)
|
|
163
|
+
} else if (state.userPreference === 'accessibility') {
|
|
164
|
+
if (throttleLevel === 'none') throttleLevel = 'light'
|
|
165
|
+
optimizations.push('User preference)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
setState(prev => ({
|
|
169
|
+
...prev,
|
|
170
|
+
throttleLevel
|
|
171
|
+
}))
|
|
172
|
+
|
|
173
|
+
setOptimizations(prev => [...prev, ...optimizations])
|
|
174
|
+
setIsOptimizing(false)
|
|
175
|
+
|
|
176
|
+
callbacks.onAnimationThrottled?.(throttleLevel, 'Battery and performance optimization')
|
|
177
|
+
|
|
178
|
+
optimizations.forEach(optimization => {
|
|
179
|
+
console.log('Animation optimization, optimization)
|
|
180
|
+
})
|
|
181
|
+
}, 300)
|
|
182
|
+
}, [enablePerformanceThrottling, state, callbacks])
|
|
183
|
+
|
|
184
|
+
// Get animation recommendations
|
|
185
|
+
const getAnimationRecommendations = useCallback(() => {
|
|
186
|
+
const recommendations = []
|
|
187
|
+
|
|
188
|
+
if (state.isCriticalBattery) {
|
|
189
|
+
recommendations.push('Critical battery)
|
|
190
|
+
recommendations.push('Use static UI elements instead of animated ones')
|
|
191
|
+
recommendations.push('Minimize DOM updates and reflows')
|
|
192
|
+
} else if (state.isLowBattery) {
|
|
193
|
+
recommendations.push('Low battery)
|
|
194
|
+
recommendations.push('Use simple transforms instead of complex animations')
|
|
195
|
+
recommendations.push('Limit animation duration to under 300ms')
|
|
196
|
+
} else if (state.batteryLevel < 0.5) {
|
|
197
|
+
recommendations.push('Medium battery)
|
|
198
|
+
recommendations.push('Use CSS transforms instead of JavaScript animations')
|
|
199
|
+
recommendations.push('Implement animation pausing when not in viewport')
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
if (state.shouldThrottle) {
|
|
203
|
+
recommendations.push('Performance issue)
|
|
204
|
+
recommendations.push('Use requestAnimationFrame for smooth animations')
|
|
205
|
+
recommendations.push('Implement animation debouncing')
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if (state.reducedMotion) {
|
|
209
|
+
recommendations.push('Accessibility)
|
|
210
|
+
recommendations.push('Provide alternative non-animated experiences')
|
|
211
|
+
recommendations.push('Use subtle transitions instead of animations')
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return recommendations
|
|
215
|
+
}, [state])
|
|
216
|
+
|
|
217
|
+
// Get optimal animation settings
|
|
218
|
+
const getOptimalAnimationSettings = useCallback(() => {
|
|
219
|
+
const settings = {
|
|
220
|
+
duration,
|
|
221
|
+
easing,
|
|
222
|
+
shouldAnimate,
|
|
223
|
+
complexity,
|
|
224
|
+
frameRate}
|
|
225
|
+
|
|
226
|
+
switch (state.throttleLevel) {
|
|
227
|
+
case 'aggressive'= 150
|
|
228
|
+
settings.easing = 'linear'
|
|
229
|
+
settings.shouldAnimate = false
|
|
230
|
+
settings.complexity = 'minimal'
|
|
231
|
+
settings.frameRate = 30
|
|
232
|
+
break
|
|
233
|
+
case 'moderate'= 200
|
|
234
|
+
settings.easing = 'ease-out'
|
|
235
|
+
settings.shouldAnimate = true
|
|
236
|
+
settings.complexity = 'low'
|
|
237
|
+
settings.frameRate = 45
|
|
238
|
+
break
|
|
239
|
+
case 'light'= 250
|
|
240
|
+
settings.easing = 'ease-out'
|
|
241
|
+
settings.shouldAnimate = true
|
|
242
|
+
settings.complexity = 'medium'
|
|
243
|
+
settings.frameRate = 50
|
|
244
|
+
break
|
|
245
|
+
default= 300
|
|
246
|
+
settings.easing = 'ease-out'
|
|
247
|
+
settings.shouldAnimate = true
|
|
248
|
+
settings.complexity = 'high'
|
|
249
|
+
settings.frameRate = 60
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Override for reduced motion
|
|
253
|
+
if (state.reducedMotion) {
|
|
254
|
+
settings.duration = 100
|
|
255
|
+
settings.easing = 'linear'
|
|
256
|
+
settings.complexity = 'minimal'
|
|
257
|
+
settings.frameRate = 30
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return settings
|
|
261
|
+
}, [state.throttleLevel, state.reducedMotion])
|
|
262
|
+
|
|
263
|
+
// Update user preferences
|
|
264
|
+
const updateUserPreference = useCallback((preference) => {
|
|
265
|
+
if (!enableUserPreferences) return
|
|
266
|
+
|
|
267
|
+
setState(prev => ({
|
|
268
|
+
...prev,
|
|
269
|
+
userPreference}))
|
|
270
|
+
|
|
271
|
+
callbacks.onUserPreferenceChange?.(preference)
|
|
272
|
+
|
|
273
|
+
// Apply optimizations based on new preference
|
|
274
|
+
setTimeout(() => {
|
|
275
|
+
applyAnimationThrottling()
|
|
276
|
+
}, 100)
|
|
277
|
+
}, [enableUserPreferences, callbacks, applyAnimationThrottling])
|
|
278
|
+
|
|
279
|
+
// Initialize monitoring
|
|
280
|
+
useEffect(() => {
|
|
281
|
+
try {
|
|
282
|
+
// Get initial battery status
|
|
283
|
+
if (enableBatteryMonitoring) {
|
|
284
|
+
getBatteryStatus()
|
|
285
|
+
batteryCheckIntervalRef.current = window.setInterval(getBatteryStatus, 10000)
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Set up performance monitoring
|
|
289
|
+
if (enablePerformanceThrottling) {
|
|
290
|
+
performanceTimerRef.current = window.setInterval(measurePerformance, 5000)
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// Check reduced motion preference
|
|
294
|
+
if (enableReducedMotion) {
|
|
295
|
+
checkReducedMotion()
|
|
296
|
+
|
|
297
|
+
// Listen for preference changes
|
|
298
|
+
const mediaQuery = window.matchMedia('(prefers-reduced-motion)')
|
|
299
|
+
const handleChange = () => checkReducedMotion()
|
|
300
|
+
mediaQuery.addEventListener('change', handleChange)
|
|
301
|
+
|
|
302
|
+
return () => mediaQuery.removeEventListener('change', handleChange)
|
|
303
|
+
}
|
|
304
|
+
} catch (error) {
|
|
305
|
+
console.warn('Battery animation initialization failed, error)
|
|
306
|
+
}
|
|
307
|
+
}, [enableBatteryMonitoring, enablePerformanceThrottling, enableReducedMotion, getBatteryStatus, measurePerformance, checkReducedMotion])
|
|
308
|
+
|
|
309
|
+
// Apply throttling when state changes
|
|
310
|
+
useEffect(() => {
|
|
311
|
+
if (enableAutomaticOptimization) {
|
|
312
|
+
applyAnimationThrottling()
|
|
313
|
+
}
|
|
314
|
+
}, [enableAutomaticOptimization, applyAnimationThrottling])
|
|
315
|
+
|
|
316
|
+
// Cleanup on unmount
|
|
317
|
+
useEffect(() => {
|
|
318
|
+
return () => {
|
|
319
|
+
if (performanceTimerRef.current) {
|
|
320
|
+
clearInterval(performanceTimerRef.current)
|
|
321
|
+
}
|
|
322
|
+
if (batteryCheckIntervalRef.current) {
|
|
323
|
+
clearInterval(batteryCheckIntervalRef.current)
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}, [])
|
|
327
|
+
|
|
328
|
+
return {
|
|
329
|
+
// State
|
|
330
|
+
state,
|
|
331
|
+
isOptimizing,
|
|
332
|
+
optimizations,
|
|
333
|
+
|
|
334
|
+
// Actions
|
|
335
|
+
getBatteryStatus,
|
|
336
|
+
measurePerformance,
|
|
337
|
+
checkReducedMotion,
|
|
338
|
+
applyAnimationThrottling,
|
|
339
|
+
updateUserPreference,
|
|
340
|
+
|
|
341
|
+
// Computed values
|
|
342
|
+
batteryPercentage),
|
|
343
|
+
shouldDisableAnimations=== 'aggressive' || state.reducedMotion,
|
|
344
|
+
animationSettings),
|
|
345
|
+
recommendations),
|
|
346
|
+
|
|
347
|
+
// Utility functions
|
|
348
|
+
isAnimationOptimized) => state.throttleLevel !== 'none',
|
|
349
|
+
getBatteryHealth) => {
|
|
350
|
+
if (state.batteryLevel >= 0.8) return 'excellent'
|
|
351
|
+
if (state.batteryLevel >= 0.6) return 'good'
|
|
352
|
+
if (state.batteryLevel >= 0.4) return 'fair'
|
|
353
|
+
if (state.batteryLevel >= 0.2) return 'poor'
|
|
354
|
+
return 'critical'
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
export default useBatteryAnimations
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback, useRef } from 'react'
|
|
2
|
+
|
|
3
|
+
export interface BatteryAnimationConfig {
|
|
4
|
+
enableBatteryMonitoring?}
|
|
5
|
+
|
|
6
|
+
export interface BatteryAnimationState {
|
|
7
|
+
batteryLevel}
|
|
8
|
+
|
|
9
|
+
export interface BatteryAnimationCallbacks {
|
|
10
|
+
onBatteryLevelChange?, isLow) => void
|
|
11
|
+
onPerformanceWarning?, shouldThrottle) => void
|
|
12
|
+
onAnimationThrottled?, reason) => void
|
|
13
|
+
onUserPreferenceChange?) => void
|
|
14
|
+
onReducedMotionChange?) => void
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const useBatteryAnimations = (
|
|
18
|
+
config= {},
|
|
19
|
+
callbacks= {}
|
|
20
|
+
) => {
|
|
21
|
+
const {
|
|
22
|
+
enableBatteryMonitoring = true,
|
|
23
|
+
enablePerformanceThrottling = true,
|
|
24
|
+
enableReducedMotion = true,
|
|
25
|
+
enableUserPreferences = true,
|
|
26
|
+
enableAutomaticOptimization = true,
|
|
27
|
+
lowBatteryThreshold = 0.2,
|
|
28
|
+
criticalBatteryThreshold = 0.1,
|
|
29
|
+
performanceThrottleThreshold = 70
|
|
30
|
+
} = config
|
|
31
|
+
|
|
32
|
+
const [state, setState] = useState<BatteryAnimationState>({
|
|
33
|
+
batteryLevel,
|
|
34
|
+
isLowBattery,
|
|
35
|
+
isCriticalBattery,
|
|
36
|
+
isCharging,
|
|
37
|
+
performanceScore,
|
|
38
|
+
shouldThrottle,
|
|
39
|
+
throttleLevel,
|
|
40
|
+
reducedMotion,
|
|
41
|
+
userPreference})
|
|
42
|
+
|
|
43
|
+
const [isOptimizing, setIsOptimizing] = useState(false)
|
|
44
|
+
const [optimizations, setOptimizations] = useState<string[]>([])
|
|
45
|
+
const batteryRef = useRef<any>(null)
|
|
46
|
+
const performanceTimerRef = useRef<number | null>(null)
|
|
47
|
+
const batteryCheckIntervalRef = useRef<number | null>(null)
|
|
48
|
+
|
|
49
|
+
// Battery level detection
|
|
50
|
+
const getBatteryStatus = useCallback(async ()=> {
|
|
51
|
+
if (!enableBatteryMonitoring || !('getBattery' in navigator)) return
|
|
52
|
+
|
|
53
|
+
try {
|
|
54
|
+
const battery = await (navigator as any).getBattery()
|
|
55
|
+
batteryRef.current = battery
|
|
56
|
+
|
|
57
|
+
const batteryLevel = battery.level
|
|
58
|
+
const isCharging = battery.charging
|
|
59
|
+
const isLowBattery = batteryLevel <= lowBatteryThreshold
|
|
60
|
+
const isCriticalBattery = batteryLevel <= criticalBatteryThreshold
|
|
61
|
+
|
|
62
|
+
setState(prev => ({
|
|
63
|
+
...prev,
|
|
64
|
+
batteryLevel,
|
|
65
|
+
isLowBattery,
|
|
66
|
+
isCriticalBattery,
|
|
67
|
+
isCharging
|
|
68
|
+
}))
|
|
69
|
+
|
|
70
|
+
callbacks.onBatteryLevelChange?.(batteryLevel, isLowBattery)
|
|
71
|
+
} catch (error) {
|
|
72
|
+
console.warn('Battery API not available, error)
|
|
73
|
+
}
|
|
74
|
+
}, [enableBatteryMonitoring, lowBatteryThreshold, criticalBatteryThreshold, callbacks])
|
|
75
|
+
|
|
76
|
+
// Performance monitoring
|
|
77
|
+
const measurePerformance = useCallback(() => {
|
|
78
|
+
if (!enablePerformanceThrottling) return
|
|
79
|
+
|
|
80
|
+
try {
|
|
81
|
+
// Simulate performance measurement
|
|
82
|
+
const performanceScore = Math.random() * 100
|
|
83
|
+
const shouldThrottle = performanceScore < performanceThrottleThreshold
|
|
84
|
+
|
|
85
|
+
setState(prev => ({
|
|
86
|
+
...prev,
|
|
87
|
+
performanceScore,
|
|
88
|
+
shouldThrottle
|
|
89
|
+
}))
|
|
90
|
+
|
|
91
|
+
if (shouldThrottle) {
|
|
92
|
+
callbacks.onPerformanceWarning?.(performanceScore, shouldThrottle)
|
|
93
|
+
}
|
|
94
|
+
} catch (error) {
|
|
95
|
+
console.warn('Performance measurement failed, error)
|
|
96
|
+
}
|
|
97
|
+
}, [enablePerformanceThrottling, performanceThrottleThreshold, callbacks])
|
|
98
|
+
|
|
99
|
+
// Reduced motion detection
|
|
100
|
+
const checkReducedMotion = useCallback(() => {
|
|
101
|
+
if (!enableReducedMotion) return
|
|
102
|
+
|
|
103
|
+
try {
|
|
104
|
+
const reducedMotion = window.matchMedia('(prefers-reduced-motion)').matches
|
|
105
|
+
|
|
106
|
+
setState(prev => ({
|
|
107
|
+
...prev,
|
|
108
|
+
reducedMotion
|
|
109
|
+
}))
|
|
110
|
+
|
|
111
|
+
callbacks.onReducedMotionChange?.(reducedMotion)
|
|
112
|
+
} catch (error) {
|
|
113
|
+
console.warn('Reduced motion detection failed, error)
|
|
114
|
+
}
|
|
115
|
+
}, [enableReducedMotion, callbacks])
|
|
116
|
+
|
|
117
|
+
// Animation throttling based on battery and performance
|
|
118
|
+
const applyAnimationThrottling = useCallback(() => {
|
|
119
|
+
if (!enablePerformanceThrottling) return
|
|
120
|
+
|
|
121
|
+
setIsOptimizing(true)
|
|
122
|
+
|
|
123
|
+
setTimeout(() => {
|
|
124
|
+
let throttleLevel= 'none'
|
|
125
|
+
let optimizations] = []
|
|
126
|
+
|
|
127
|
+
// Battery-based throttling
|
|
128
|
+
if (state.isCriticalBattery) {
|
|
129
|
+
throttleLevel = 'aggressive'
|
|
130
|
+
optimizations.push('Critical battery)
|
|
131
|
+
optimizations.push('All non-essential animations disabled')
|
|
132
|
+
optimizations.push('Only essential UI transitions enabled')
|
|
133
|
+
} else if (state.isLowBattery) {
|
|
134
|
+
throttleLevel = 'moderate'
|
|
135
|
+
optimizations.push('Low battery)
|
|
136
|
+
optimizations.push('Animation complexity reduced by 60%')
|
|
137
|
+
optimizations.push('Performance optimizations enabled')
|
|
138
|
+
} else if (state.batteryLevel < 0.5) {
|
|
139
|
+
throttleLevel = 'light'
|
|
140
|
+
optimizations.push('Medium battery)
|
|
141
|
+
optimizations.push('Animation complexity reduced by 30%')
|
|
142
|
+
optimizations.push('Battery optimization enabled')
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Performance-based throttling
|
|
146
|
+
if (state.shouldThrottle) {
|
|
147
|
+
if (throttleLevel === 'none') throttleLevel = 'light'
|
|
148
|
+
optimizations.push('Performance-based throttling applied')
|
|
149
|
+
optimizations.push('Animation frame rate optimized')
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Reduced motion support
|
|
153
|
+
if (state.reducedMotion) {
|
|
154
|
+
if (throttleLevel === 'none') throttleLevel = 'light'
|
|
155
|
+
optimizations.push('Reduced motion preference respected')
|
|
156
|
+
optimizations.push('Animation duration minimized')
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// User preference consideration
|
|
160
|
+
if (state.userPreference === 'battery') {
|
|
161
|
+
if (throttleLevel === 'none') throttleLevel = 'light'
|
|
162
|
+
optimizations.push('User preference)
|
|
163
|
+
} else if (state.userPreference === 'accessibility') {
|
|
164
|
+
if (throttleLevel === 'none') throttleLevel = 'light'
|
|
165
|
+
optimizations.push('User preference)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
setState(prev => ({
|
|
169
|
+
...prev,
|
|
170
|
+
throttleLevel
|
|
171
|
+
}))
|
|
172
|
+
|
|
173
|
+
setOptimizations(prev => [...prev, ...optimizations])
|
|
174
|
+
setIsOptimizing(false)
|
|
175
|
+
|
|
176
|
+
callbacks.onAnimationThrottled?.(throttleLevel, 'Battery and performance optimization')
|
|
177
|
+
|
|
178
|
+
optimizations.forEach(optimization => {
|
|
179
|
+
console.log('Animation optimization, optimization)
|
|
180
|
+
})
|
|
181
|
+
}, 300)
|
|
182
|
+
}, [enablePerformanceThrottling, state, callbacks])
|
|
183
|
+
|
|
184
|
+
// Get animation recommendations
|
|
185
|
+
const getAnimationRecommendations = useCallback(() => {
|
|
186
|
+
const recommendations = []
|
|
187
|
+
|
|
188
|
+
if (state.isCriticalBattery) {
|
|
189
|
+
recommendations.push('Critical battery)
|
|
190
|
+
recommendations.push('Use static UI elements instead of animated ones')
|
|
191
|
+
recommendations.push('Minimize DOM updates and reflows')
|
|
192
|
+
} else if (state.isLowBattery) {
|
|
193
|
+
recommendations.push('Low battery)
|
|
194
|
+
recommendations.push('Use simple transforms instead of complex animations')
|
|
195
|
+
recommendations.push('Limit animation duration to under 300ms')
|
|
196
|
+
} else if (state.batteryLevel < 0.5) {
|
|
197
|
+
recommendations.push('Medium battery)
|
|
198
|
+
recommendations.push('Use CSS transforms instead of JavaScript animations')
|
|
199
|
+
recommendations.push('Implement animation pausing when not in viewport')
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
if (state.shouldThrottle) {
|
|
203
|
+
recommendations.push('Performance issue)
|
|
204
|
+
recommendations.push('Use requestAnimationFrame for smooth animations')
|
|
205
|
+
recommendations.push('Implement animation debouncing')
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if (state.reducedMotion) {
|
|
209
|
+
recommendations.push('Accessibility)
|
|
210
|
+
recommendations.push('Provide alternative non-animated experiences')
|
|
211
|
+
recommendations.push('Use subtle transitions instead of animations')
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return recommendations
|
|
215
|
+
}, [state])
|
|
216
|
+
|
|
217
|
+
// Get optimal animation settings
|
|
218
|
+
const getOptimalAnimationSettings = useCallback(() => {
|
|
219
|
+
const settings = {
|
|
220
|
+
duration,
|
|
221
|
+
easing,
|
|
222
|
+
shouldAnimate,
|
|
223
|
+
complexity,
|
|
224
|
+
frameRate}
|
|
225
|
+
|
|
226
|
+
switch (state.throttleLevel) {
|
|
227
|
+
case 'aggressive'= 150
|
|
228
|
+
settings.easing = 'linear'
|
|
229
|
+
settings.shouldAnimate = false
|
|
230
|
+
settings.complexity = 'minimal'
|
|
231
|
+
settings.frameRate = 30
|
|
232
|
+
break
|
|
233
|
+
case 'moderate'= 200
|
|
234
|
+
settings.easing = 'ease-out'
|
|
235
|
+
settings.shouldAnimate = true
|
|
236
|
+
settings.complexity = 'low'
|
|
237
|
+
settings.frameRate = 45
|
|
238
|
+
break
|
|
239
|
+
case 'light'= 250
|
|
240
|
+
settings.easing = 'ease-out'
|
|
241
|
+
settings.shouldAnimate = true
|
|
242
|
+
settings.complexity = 'medium'
|
|
243
|
+
settings.frameRate = 50
|
|
244
|
+
break
|
|
245
|
+
default= 300
|
|
246
|
+
settings.easing = 'ease-out'
|
|
247
|
+
settings.shouldAnimate = true
|
|
248
|
+
settings.complexity = 'high'
|
|
249
|
+
settings.frameRate = 60
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Override for reduced motion
|
|
253
|
+
if (state.reducedMotion) {
|
|
254
|
+
settings.duration = 100
|
|
255
|
+
settings.easing = 'linear'
|
|
256
|
+
settings.complexity = 'minimal'
|
|
257
|
+
settings.frameRate = 30
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return settings
|
|
261
|
+
}, [state.throttleLevel, state.reducedMotion])
|
|
262
|
+
|
|
263
|
+
// Update user preferences
|
|
264
|
+
const updateUserPreference = useCallback((preference) => {
|
|
265
|
+
if (!enableUserPreferences) return
|
|
266
|
+
|
|
267
|
+
setState(prev => ({
|
|
268
|
+
...prev,
|
|
269
|
+
userPreference}))
|
|
270
|
+
|
|
271
|
+
callbacks.onUserPreferenceChange?.(preference)
|
|
272
|
+
|
|
273
|
+
// Apply optimizations based on new preference
|
|
274
|
+
setTimeout(() => {
|
|
275
|
+
applyAnimationThrottling()
|
|
276
|
+
}, 100)
|
|
277
|
+
}, [enableUserPreferences, callbacks, applyAnimationThrottling])
|
|
278
|
+
|
|
279
|
+
// Initialize monitoring
|
|
280
|
+
useEffect(() => {
|
|
281
|
+
try {
|
|
282
|
+
// Get initial battery status
|
|
283
|
+
if (enableBatteryMonitoring) {
|
|
284
|
+
getBatteryStatus()
|
|
285
|
+
batteryCheckIntervalRef.current = window.setInterval(getBatteryStatus, 10000)
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Set up performance monitoring
|
|
289
|
+
if (enablePerformanceThrottling) {
|
|
290
|
+
performanceTimerRef.current = window.setInterval(measurePerformance, 5000)
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// Check reduced motion preference
|
|
294
|
+
if (enableReducedMotion) {
|
|
295
|
+
checkReducedMotion()
|
|
296
|
+
|
|
297
|
+
// Listen for preference changes
|
|
298
|
+
const mediaQuery = window.matchMedia('(prefers-reduced-motion)')
|
|
299
|
+
const handleChange = () => checkReducedMotion()
|
|
300
|
+
mediaQuery.addEventListener('change', handleChange)
|
|
301
|
+
|
|
302
|
+
return () => mediaQuery.removeEventListener('change', handleChange)
|
|
303
|
+
}
|
|
304
|
+
} catch (error) {
|
|
305
|
+
console.warn('Battery animation initialization failed, error)
|
|
306
|
+
}
|
|
307
|
+
}, [enableBatteryMonitoring, enablePerformanceThrottling, enableReducedMotion, getBatteryStatus, measurePerformance, checkReducedMotion])
|
|
308
|
+
|
|
309
|
+
// Apply throttling when state changes
|
|
310
|
+
useEffect(() => {
|
|
311
|
+
if (enableAutomaticOptimization) {
|
|
312
|
+
applyAnimationThrottling()
|
|
313
|
+
}
|
|
314
|
+
}, [enableAutomaticOptimization, applyAnimationThrottling])
|
|
315
|
+
|
|
316
|
+
// Cleanup on unmount
|
|
317
|
+
useEffect(() => {
|
|
318
|
+
return () => {
|
|
319
|
+
if (performanceTimerRef.current) {
|
|
320
|
+
clearInterval(performanceTimerRef.current)
|
|
321
|
+
}
|
|
322
|
+
if (batteryCheckIntervalRef.current) {
|
|
323
|
+
clearInterval(batteryCheckIntervalRef.current)
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}, [])
|
|
327
|
+
|
|
328
|
+
return {
|
|
329
|
+
// State
|
|
330
|
+
state,
|
|
331
|
+
isOptimizing,
|
|
332
|
+
optimizations,
|
|
333
|
+
|
|
334
|
+
// Actions
|
|
335
|
+
getBatteryStatus,
|
|
336
|
+
measurePerformance,
|
|
337
|
+
checkReducedMotion,
|
|
338
|
+
applyAnimationThrottling,
|
|
339
|
+
updateUserPreference,
|
|
340
|
+
|
|
341
|
+
// Computed values
|
|
342
|
+
batteryPercentage),
|
|
343
|
+
shouldDisableAnimations=== 'aggressive' || state.reducedMotion,
|
|
344
|
+
animationSettings),
|
|
345
|
+
recommendations),
|
|
346
|
+
|
|
347
|
+
// Utility functions
|
|
348
|
+
isAnimationOptimized) => state.throttleLevel !== 'none',
|
|
349
|
+
getBatteryHealth) => {
|
|
350
|
+
if (state.batteryLevel >= 0.8) return 'excellent'
|
|
351
|
+
if (state.batteryLevel >= 0.6) return 'good'
|
|
352
|
+
if (state.batteryLevel >= 0.4) return 'fair'
|
|
353
|
+
if (state.batteryLevel >= 0.2) return 'poor'
|
|
354
|
+
return 'critical'
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
export default useBatteryAnimations
|