@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.7 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,222 @@
|
|
|
1
|
+
export const ThemeProvider: React.FC<ThemeProviderProps> = ({
|
|
2
|
+
children,
|
|
3
|
+
defaultTheme = 'stan-design',
|
|
4
|
+
themes = defaultThemes,
|
|
5
|
+
persistTheme = true,
|
|
6
|
+
storageKey = 'stan-design-theme'
|
|
7
|
+
}) => {
|
|
8
|
+
// State management
|
|
9
|
+
const [currentTheme, setCurrentThemeState] = useState<string>(defaultTheme);
|
|
10
|
+
const [currentThemeConfig, setCurrentThemeConfig] = useState<CompleteThemeConfig | null>(null);
|
|
11
|
+
const [availableThemes, setAvailableThemes] = useState<string[]>([]);
|
|
12
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
13
|
+
const [error, setError] = useState<string | null>(null);
|
|
14
|
+
|
|
15
|
+
// Enhance theme colors using ColorManager
|
|
16
|
+
const enhanceThemeColors = useCallback((themeConfig: CompleteThemeConfig): CompleteThemeConfig => {
|
|
17
|
+
try {
|
|
18
|
+
const enhanced = { ...themeConfig };
|
|
19
|
+
|
|
20
|
+
// Enhance primary colors if they exist
|
|
21
|
+
if (enhanced.colors?.primary?.[500]) {
|
|
22
|
+
const baseColor = enhanced.colors.primary[500];
|
|
23
|
+
|
|
24
|
+
// Generate additional color variations if they don't exist
|
|
25
|
+
if (!enhanced.colors.primary.light || !enhanced.colors.primary.dark || !enhanced.colors.primary.contrast) {
|
|
26
|
+
const enhancedScale = ColorManager.generateColorScale({
|
|
27
|
+
baseColor,
|
|
28
|
+
generateShades: true,
|
|
29
|
+
generateContrast: true
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
enhanced.colors.primary = {
|
|
33
|
+
...enhanced.colors.primary,
|
|
34
|
+
light: enhancedScale.light,
|
|
35
|
+
dark: enhancedScale.dark,
|
|
36
|
+
contrast: enhancedScale.contrast
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Enhance semantic colors if they don't exist
|
|
42
|
+
if (enhanced.colors?.primary?.[500] && !enhanced.colors.semantic?.success) {
|
|
43
|
+
const semanticColors = ColorManager.generateSemanticColors(enhanced.colors.primary[500]);
|
|
44
|
+
enhanced.colors.semantic = {
|
|
45
|
+
...enhanced.colors.semantic,
|
|
46
|
+
...semanticColors
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Enhance neutral colors if they don't exist
|
|
51
|
+
if (!enhanced.colors?.neutral?.[500]) {
|
|
52
|
+
enhanced.colors.neutral = ColorManager.generateNeutralColors('#6b7280');
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return enhanced;
|
|
56
|
+
} catch (err) {
|
|
57
|
+
console.warn('Failed to enhance theme colors:', err);
|
|
58
|
+
return themeConfig;
|
|
59
|
+
}
|
|
60
|
+
}, []);
|
|
61
|
+
|
|
62
|
+
// Initialize themes in the inheritance manager
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
try {
|
|
65
|
+
// Register all provided themes
|
|
66
|
+
Object.entries(themes).forEach(([name, theme]) => {
|
|
67
|
+
try {
|
|
68
|
+
themeInheritanceManager.registerTheme(name, theme);
|
|
69
|
+
} catch (err) {
|
|
70
|
+
console.warn(`Failed to register theme '${name}':`, err);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// Set available themes
|
|
75
|
+
setAvailableThemes(Object.keys(themes));
|
|
76
|
+
|
|
77
|
+
// Load persisted theme or use default
|
|
78
|
+
if (persistTheme) {
|
|
79
|
+
const persistence = createThemePersistence({
|
|
80
|
+
storageKey,
|
|
81
|
+
defaultTheme,
|
|
82
|
+
enableSystemPreference: true
|
|
83
|
+
});
|
|
84
|
+
const persistedTheme = persistence.getStoredTheme();
|
|
85
|
+
if (persistedTheme && themes[persistedTheme]) {
|
|
86
|
+
setCurrentThemeState(persistedTheme);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
} catch (err) {
|
|
90
|
+
setError(`Failed to initialize themes: ${err instanceof Error ? err.message : 'Unknown error'}`);
|
|
91
|
+
} finally {
|
|
92
|
+
setIsLoading(false);
|
|
93
|
+
}
|
|
94
|
+
}, [themes, persistTheme, storageKey, defaultTheme]);
|
|
95
|
+
|
|
96
|
+
// Update current theme config when theme changes
|
|
97
|
+
useEffect(() => {
|
|
98
|
+
try {
|
|
99
|
+
const themeConfig = themeInheritanceManager.getCompleteTheme(currentTheme);
|
|
100
|
+
|
|
101
|
+
if (themeConfig) {
|
|
102
|
+
// Enhance theme colors using ColorManager
|
|
103
|
+
const enhancedThemeConfig = enhanceThemeColors(toCompleteThemeConfig(themeConfig));
|
|
104
|
+
setCurrentThemeConfig(enhancedThemeConfig);
|
|
105
|
+
|
|
106
|
+
// Apply the enhanced theme to CSS variables and load fonts
|
|
107
|
+
themeCSSUpdater.applyTheme(enhancedThemeConfig);
|
|
108
|
+
fontLoader.loadThemeFonts(enhancedThemeConfig.fonts).catch(err => {
|
|
109
|
+
console.warn(`Failed to load fonts for theme '${currentTheme}':`, err);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
setError(null);
|
|
114
|
+
} catch (err) {
|
|
115
|
+
const errorMessage = `Failed to load theme '${currentTheme}': ${err instanceof Error ? err.message : 'Unknown error'}`;
|
|
116
|
+
setError(errorMessage);
|
|
117
|
+
setCurrentThemeConfig(null);
|
|
118
|
+
console.error(errorMessage, err);
|
|
119
|
+
}
|
|
120
|
+
}, [currentTheme, enhanceThemeColors]);
|
|
121
|
+
|
|
122
|
+
// Theme switching function
|
|
123
|
+
const setTheme = useCallback(async (themeName: string) => {
|
|
124
|
+
if (!themes[themeName]) {
|
|
125
|
+
setError(`Theme '${themeName}' not found`);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
try {
|
|
130
|
+
// Get the complete theme configuration
|
|
131
|
+
const themeConfig = themeInheritanceManager.getCompleteTheme(themeName);
|
|
132
|
+
|
|
133
|
+
if (!themeConfig) {
|
|
134
|
+
throw new Error(`Theme configuration not found for '${themeName}'`);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Enhance theme colors using ColorManager
|
|
138
|
+
const enhancedThemeConfig = enhanceThemeColors(toCompleteThemeConfig(themeConfig));
|
|
139
|
+
|
|
140
|
+
// Apply enhanced CSS variables to the document
|
|
141
|
+
themeCSSUpdater.applyTheme(enhancedThemeConfig);
|
|
142
|
+
|
|
143
|
+
// Load fonts for the theme
|
|
144
|
+
await fontLoader.loadThemeFonts(enhancedThemeConfig.fonts);
|
|
145
|
+
|
|
146
|
+
// Update state
|
|
147
|
+
setCurrentThemeState(themeName);
|
|
148
|
+
setCurrentThemeConfig(enhancedThemeConfig);
|
|
149
|
+
|
|
150
|
+
// Persist theme preference
|
|
151
|
+
if (persistTheme) {
|
|
152
|
+
const persistence = createThemePersistence({ storageKey });
|
|
153
|
+
persistence.setStoredTheme(themeName);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
setError(null);
|
|
157
|
+
} catch (err) {
|
|
158
|
+
const errorMessage = `Failed to switch to theme '${themeName}': ${err instanceof Error ? err.message : 'Unknown error'}`;
|
|
159
|
+
setError(errorMessage);
|
|
160
|
+
console.error(errorMessage, err);
|
|
161
|
+
}
|
|
162
|
+
}, [themes, persistTheme, storageKey]);
|
|
163
|
+
|
|
164
|
+
// Add new theme
|
|
165
|
+
const addTheme = useCallback((name: string, theme: MultiThemeConfig) => {
|
|
166
|
+
try {
|
|
167
|
+
themeInheritanceManager.registerTheme(name, theme);
|
|
168
|
+
setAvailableThemes(prev => [...prev, name]);
|
|
169
|
+
setError(null);
|
|
170
|
+
} catch (err) {
|
|
171
|
+
setError(`Failed to add theme '${name}': ${err instanceof Error ? err.message : 'Unknown error'}`);
|
|
172
|
+
}
|
|
173
|
+
}, []);
|
|
174
|
+
|
|
175
|
+
// Remove theme
|
|
176
|
+
const removeTheme = useCallback((name: string) => {
|
|
177
|
+
try {
|
|
178
|
+
// Don't allow removing the current theme
|
|
179
|
+
if (name === currentTheme) {
|
|
180
|
+
setError('Cannot remove the currently active theme');
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Remove from inheritance manager (we'll need to add this method)
|
|
185
|
+
// themeInheritanceManager.removeTheme(name);
|
|
186
|
+
|
|
187
|
+
setAvailableThemes(prev => prev.filter(t => t !== name));
|
|
188
|
+
setError(null);
|
|
189
|
+
} catch (err) {
|
|
190
|
+
setError(`Failed to remove theme '${name}': ${err instanceof Error ? err.message : 'Unknown error'}`);
|
|
191
|
+
}
|
|
192
|
+
}, [currentTheme]);
|
|
193
|
+
|
|
194
|
+
// Get theme by name
|
|
195
|
+
const getTheme = useCallback((name: string): CompleteThemeConfig | null => {
|
|
196
|
+
try {
|
|
197
|
+
return themeInheritanceManager.getCompleteTheme(name);
|
|
198
|
+
} catch (err) {
|
|
199
|
+
setError(`Failed to get theme '${name}': ${err instanceof Error ? err.message : 'Unknown error'}`);
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
}, []);
|
|
203
|
+
|
|
204
|
+
// Context value
|
|
205
|
+
const contextValue: ThemeContextType = {
|
|
206
|
+
currentTheme,
|
|
207
|
+
currentThemeConfig,
|
|
208
|
+
availableThemes,
|
|
209
|
+
setTheme,
|
|
210
|
+
addTheme,
|
|
211
|
+
removeTheme,
|
|
212
|
+
getTheme,
|
|
213
|
+
isLoading,
|
|
214
|
+
error
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
return (
|
|
218
|
+
<ThemeContext.Provider value={contextValue}>
|
|
219
|
+
{children}
|
|
220
|
+
</ThemeContext.Provider>
|
|
221
|
+
);
|
|
222
|
+
};
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
+
import { ThemeContext, ThemeContextType, ThemeProviderProps } from './ThemeContext';
|
|
3
|
+
import { MultiThemeConfig, CompleteThemeConfig } from './types';
|
|
4
|
+
import { themeInheritanceManager, toCompleteThemeConfig } from './inheritance';
|
|
5
|
+
import { defaultThemes } from './base-themes';
|
|
6
|
+
import { createThemePersistence } from './themePersistence';
|
|
7
|
+
import { themeCSSUpdater } from './themeCSSUpdater';
|
|
8
|
+
import { fontLoader } from './fontLoader';
|
|
9
|
+
import { ColorManager } from './colorManager';
|
|
10
|
+
|
|
11
|
+
export const ThemeProvider= ({
|
|
12
|
+
children,
|
|
13
|
+
defaultTheme = 'stan-design',
|
|
14
|
+
themes = defaultThemes,
|
|
15
|
+
persistTheme = true,
|
|
16
|
+
storageKey = 'stan-design-theme'
|
|
17
|
+
}) => {
|
|
18
|
+
// State management
|
|
19
|
+
const [currentTheme, setCurrentThemeState] = useState<string>(defaultTheme);
|
|
20
|
+
const [currentThemeConfig, setCurrentThemeConfig] = useState<CompleteThemeConfig | null>(null);
|
|
21
|
+
const [availableThemes, setAvailableThemes] = useState<string[]>([]);
|
|
22
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
23
|
+
const [error, setError] = useState<string | null>(null);
|
|
24
|
+
|
|
25
|
+
// Enhance theme colors using ColorManager
|
|
26
|
+
const enhanceThemeColors = useCallback((themeConfig)=> {
|
|
27
|
+
try {
|
|
28
|
+
const enhanced = { ...themeConfig };
|
|
29
|
+
|
|
30
|
+
// Enhance primary colors if they exist
|
|
31
|
+
if (enhanced.colors?.primary?.[500]) {
|
|
32
|
+
const baseColor = enhanced.colors.primary[500];
|
|
33
|
+
|
|
34
|
+
// Generate additional color variations if they don't exist
|
|
35
|
+
if (!enhanced.colors.primary.light || !enhanced.colors.primary.dark || !enhanced.colors.primary.contrast) {
|
|
36
|
+
const enhancedScale = ColorManager.generateColorScale({
|
|
37
|
+
baseColor,
|
|
38
|
+
generateShades,
|
|
39
|
+
generateContrast});
|
|
40
|
+
|
|
41
|
+
enhanced.colors.primary = {
|
|
42
|
+
...enhanced.colors.primary,
|
|
43
|
+
light,
|
|
44
|
+
dark,
|
|
45
|
+
contrast};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Enhance semantic colors if they don't exist
|
|
50
|
+
if (enhanced.colors?.primary?.[500] && !enhanced.colors.semantic?.success) {
|
|
51
|
+
const semanticColors = ColorManager.generateSemanticColors(enhanced.colors.primary[500]);
|
|
52
|
+
enhanced.colors.semantic = {
|
|
53
|
+
...enhanced.colors.semantic,
|
|
54
|
+
...semanticColors
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Enhance neutral colors if they don't exist
|
|
59
|
+
if (!enhanced.colors?.neutral?.[500]) {
|
|
60
|
+
enhanced.colors.neutral = ColorManager.generateNeutralColors('#6b7280');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return enhanced;
|
|
64
|
+
} catch (err) {
|
|
65
|
+
console.warn('Failed to enhance theme colors, err);
|
|
66
|
+
return themeConfig;
|
|
67
|
+
}
|
|
68
|
+
}, []);
|
|
69
|
+
|
|
70
|
+
// Initialize themes in the inheritance manager
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
try {
|
|
73
|
+
// Register all provided themes
|
|
74
|
+
Object.entries(themes).forEach(([name, theme]) => {
|
|
75
|
+
try {
|
|
76
|
+
themeInheritanceManager.registerTheme(name, theme);
|
|
77
|
+
} catch (err) {
|
|
78
|
+
console.warn(`Failed to register theme '${name}', err);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// Set available themes
|
|
83
|
+
setAvailableThemes(Object.keys(themes));
|
|
84
|
+
|
|
85
|
+
// Load persisted theme or use default
|
|
86
|
+
if (persistTheme) {
|
|
87
|
+
const persistence = createThemePersistence({
|
|
88
|
+
storageKey,
|
|
89
|
+
defaultTheme,
|
|
90
|
+
enableSystemPreference});
|
|
91
|
+
const persistedTheme = persistence.getStoredTheme();
|
|
92
|
+
if (persistedTheme && themes[persistedTheme]) {
|
|
93
|
+
setCurrentThemeState(persistedTheme);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
} catch (err) {
|
|
97
|
+
setError(`Failed to initialize themes}`);
|
|
98
|
+
} finally {
|
|
99
|
+
setIsLoading(false);
|
|
100
|
+
}
|
|
101
|
+
}, [themes, persistTheme, storageKey, defaultTheme]);
|
|
102
|
+
|
|
103
|
+
// Update current theme config when theme changes
|
|
104
|
+
useEffect(() => {
|
|
105
|
+
try {
|
|
106
|
+
const themeConfig = themeInheritanceManager.getCompleteTheme(currentTheme);
|
|
107
|
+
|
|
108
|
+
if (themeConfig) {
|
|
109
|
+
// Enhance theme colors using ColorManager
|
|
110
|
+
const enhancedThemeConfig = enhanceThemeColors(toCompleteThemeConfig(themeConfig));
|
|
111
|
+
setCurrentThemeConfig(enhancedThemeConfig);
|
|
112
|
+
|
|
113
|
+
// Apply the enhanced theme to CSS variables and load fonts
|
|
114
|
+
themeCSSUpdater.applyTheme(enhancedThemeConfig);
|
|
115
|
+
fontLoader.loadThemeFonts(enhancedThemeConfig.fonts).catch(err => {
|
|
116
|
+
console.warn(`Failed to load fonts for theme '${currentTheme}', err);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
setError(null);
|
|
121
|
+
} catch (err) {
|
|
122
|
+
const errorMessage = `Failed to load theme '${currentTheme}'}`;
|
|
123
|
+
setError(errorMessage);
|
|
124
|
+
setCurrentThemeConfig(null);
|
|
125
|
+
console.error(errorMessage, err);
|
|
126
|
+
}
|
|
127
|
+
}, [currentTheme, enhanceThemeColors]);
|
|
128
|
+
|
|
129
|
+
// Theme switching function
|
|
130
|
+
const setTheme = useCallback(async (themeName) => {
|
|
131
|
+
if (!themes[themeName]) {
|
|
132
|
+
setError(`Theme '${themeName}' not found`);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
try {
|
|
137
|
+
// Get the complete theme configuration
|
|
138
|
+
const themeConfig = themeInheritanceManager.getCompleteTheme(themeName);
|
|
139
|
+
|
|
140
|
+
if (!themeConfig) {
|
|
141
|
+
throw new Error(`Theme configuration not found for '${themeName}'`);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Enhance theme colors using ColorManager
|
|
145
|
+
const enhancedThemeConfig = enhanceThemeColors(toCompleteThemeConfig(themeConfig));
|
|
146
|
+
|
|
147
|
+
// Apply enhanced CSS variables to the document
|
|
148
|
+
themeCSSUpdater.applyTheme(enhancedThemeConfig);
|
|
149
|
+
|
|
150
|
+
// Load fonts for the theme
|
|
151
|
+
await fontLoader.loadThemeFonts(enhancedThemeConfig.fonts);
|
|
152
|
+
|
|
153
|
+
// Update state
|
|
154
|
+
setCurrentThemeState(themeName);
|
|
155
|
+
setCurrentThemeConfig(enhancedThemeConfig);
|
|
156
|
+
|
|
157
|
+
// Persist theme preference
|
|
158
|
+
if (persistTheme) {
|
|
159
|
+
const persistence = createThemePersistence({ storageKey });
|
|
160
|
+
persistence.setStoredTheme(themeName);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
setError(null);
|
|
164
|
+
} catch (err) {
|
|
165
|
+
const errorMessage = `Failed to switch to theme '${themeName}'}`;
|
|
166
|
+
setError(errorMessage);
|
|
167
|
+
console.error(errorMessage, err);
|
|
168
|
+
}
|
|
169
|
+
}, [themes, persistTheme, storageKey]);
|
|
170
|
+
|
|
171
|
+
// Add new theme
|
|
172
|
+
const addTheme = useCallback((name, theme) => {
|
|
173
|
+
try {
|
|
174
|
+
themeInheritanceManager.registerTheme(name, theme);
|
|
175
|
+
setAvailableThemes(prev => [...prev, name]);
|
|
176
|
+
setError(null);
|
|
177
|
+
} catch (err) {
|
|
178
|
+
setError(`Failed to add theme '${name}'}`);
|
|
179
|
+
}
|
|
180
|
+
}, []);
|
|
181
|
+
|
|
182
|
+
// Remove theme
|
|
183
|
+
const removeTheme = useCallback((name) => {
|
|
184
|
+
try {
|
|
185
|
+
// Don't allow removing the current theme
|
|
186
|
+
if (name === currentTheme) {
|
|
187
|
+
setError('Cannot remove the currently active theme');
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Remove from inheritance manager (we'll need to add this method)
|
|
192
|
+
// themeInheritanceManager.removeTheme(name);
|
|
193
|
+
|
|
194
|
+
setAvailableThemes(prev => prev.filter(t => t !== name));
|
|
195
|
+
setError(null);
|
|
196
|
+
} catch (err) {
|
|
197
|
+
setError(`Failed to remove theme '${name}'}`);
|
|
198
|
+
}
|
|
199
|
+
}, [currentTheme]);
|
|
200
|
+
|
|
201
|
+
// Get theme by name
|
|
202
|
+
const getTheme = useCallback((name)=> {
|
|
203
|
+
try {
|
|
204
|
+
return themeInheritanceManager.getCompleteTheme(name);
|
|
205
|
+
} catch (err) {
|
|
206
|
+
setError(`Failed to get theme '${name}'}`);
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
}, []);
|
|
210
|
+
|
|
211
|
+
// Context value
|
|
212
|
+
const contextValue= {
|
|
213
|
+
currentTheme,
|
|
214
|
+
currentThemeConfig,
|
|
215
|
+
availableThemes,
|
|
216
|
+
setTheme,
|
|
217
|
+
addTheme,
|
|
218
|
+
removeTheme,
|
|
219
|
+
getTheme,
|
|
220
|
+
isLoading,
|
|
221
|
+
error
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
return (
|
|
225
|
+
<ThemeContext.Provider value={contextValue}>
|
|
226
|
+
{children}
|
|
227
|
+
</ThemeContext.Provider>
|
|
228
|
+
);
|
|
229
|
+
};
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
+
import { ThemeContext, ThemeContextType, ThemeProviderProps } from './ThemeContext';
|
|
3
|
+
import { MultiThemeConfig, CompleteThemeConfig } from './types';
|
|
4
|
+
import { themeInheritanceManager, toCompleteThemeConfig } from './inheritance';
|
|
5
|
+
import { defaultThemes } from './base-themes';
|
|
6
|
+
import { createThemePersistence } from './themePersistence';
|
|
7
|
+
import { themeCSSUpdater } from './themeCSSUpdater';
|
|
8
|
+
import { fontLoader } from './fontLoader';
|
|
9
|
+
import { ColorManager } from './colorManager';
|
|
10
|
+
|
|
11
|
+
export const ThemeProvider= ({
|
|
12
|
+
children,
|
|
13
|
+
defaultTheme = 'stan-design',
|
|
14
|
+
themes = defaultThemes,
|
|
15
|
+
persistTheme = true,
|
|
16
|
+
storageKey = 'stan-design-theme'
|
|
17
|
+
}) => {
|
|
18
|
+
// State management
|
|
19
|
+
const [currentTheme, setCurrentThemeState] = useState<string>(defaultTheme);
|
|
20
|
+
const [currentThemeConfig, setCurrentThemeConfig] = useState<CompleteThemeConfig | null>(null);
|
|
21
|
+
const [availableThemes, setAvailableThemes] = useState<string[]>([]);
|
|
22
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
23
|
+
const [error, setError] = useState<string | null>(null);
|
|
24
|
+
|
|
25
|
+
// Enhance theme colors using ColorManager
|
|
26
|
+
const enhanceThemeColors = useCallback((themeConfig)=> {
|
|
27
|
+
try {
|
|
28
|
+
const enhanced = { ...themeConfig };
|
|
29
|
+
|
|
30
|
+
// Enhance primary colors if they exist
|
|
31
|
+
if (enhanced.colors?.primary?.[500]) {
|
|
32
|
+
const baseColor = enhanced.colors.primary[500];
|
|
33
|
+
|
|
34
|
+
// Generate additional color variations if they don't exist
|
|
35
|
+
if (!enhanced.colors.primary.light || !enhanced.colors.primary.dark || !enhanced.colors.primary.contrast) {
|
|
36
|
+
const enhancedScale = ColorManager.generateColorScale({
|
|
37
|
+
baseColor,
|
|
38
|
+
generateShades,
|
|
39
|
+
generateContrast});
|
|
40
|
+
|
|
41
|
+
enhanced.colors.primary = {
|
|
42
|
+
...enhanced.colors.primary,
|
|
43
|
+
light,
|
|
44
|
+
dark,
|
|
45
|
+
contrast};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Enhance semantic colors if they don't exist
|
|
50
|
+
if (enhanced.colors?.primary?.[500] && !enhanced.colors.semantic?.success) {
|
|
51
|
+
const semanticColors = ColorManager.generateSemanticColors(enhanced.colors.primary[500]);
|
|
52
|
+
enhanced.colors.semantic = {
|
|
53
|
+
...enhanced.colors.semantic,
|
|
54
|
+
...semanticColors
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Enhance neutral colors if they don't exist
|
|
59
|
+
if (!enhanced.colors?.neutral?.[500]) {
|
|
60
|
+
enhanced.colors.neutral = ColorManager.generateNeutralColors('#6b7280');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return enhanced;
|
|
64
|
+
} catch (err) {
|
|
65
|
+
console.warn('Failed to enhance theme colors, err);
|
|
66
|
+
return themeConfig;
|
|
67
|
+
}
|
|
68
|
+
}, []);
|
|
69
|
+
|
|
70
|
+
// Initialize themes in the inheritance manager
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
try {
|
|
73
|
+
// Register all provided themes
|
|
74
|
+
Object.entries(themes).forEach(([name, theme]) => {
|
|
75
|
+
try {
|
|
76
|
+
themeInheritanceManager.registerTheme(name, theme);
|
|
77
|
+
} catch (err) {
|
|
78
|
+
console.warn(`Failed to register theme '${name}', err);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// Set available themes
|
|
83
|
+
setAvailableThemes(Object.keys(themes));
|
|
84
|
+
|
|
85
|
+
// Load persisted theme or use default
|
|
86
|
+
if (persistTheme) {
|
|
87
|
+
const persistence = createThemePersistence({
|
|
88
|
+
storageKey,
|
|
89
|
+
defaultTheme,
|
|
90
|
+
enableSystemPreference});
|
|
91
|
+
const persistedTheme = persistence.getStoredTheme();
|
|
92
|
+
if (persistedTheme && themes[persistedTheme]) {
|
|
93
|
+
setCurrentThemeState(persistedTheme);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
} catch (err) {
|
|
97
|
+
setError(`Failed to initialize themes}`);
|
|
98
|
+
} finally {
|
|
99
|
+
setIsLoading(false);
|
|
100
|
+
}
|
|
101
|
+
}, [themes, persistTheme, storageKey, defaultTheme]);
|
|
102
|
+
|
|
103
|
+
// Update current theme config when theme changes
|
|
104
|
+
useEffect(() => {
|
|
105
|
+
try {
|
|
106
|
+
const themeConfig = themeInheritanceManager.getCompleteTheme(currentTheme);
|
|
107
|
+
|
|
108
|
+
if (themeConfig) {
|
|
109
|
+
// Enhance theme colors using ColorManager
|
|
110
|
+
const enhancedThemeConfig = enhanceThemeColors(toCompleteThemeConfig(themeConfig));
|
|
111
|
+
setCurrentThemeConfig(enhancedThemeConfig);
|
|
112
|
+
|
|
113
|
+
// Apply the enhanced theme to CSS variables and load fonts
|
|
114
|
+
themeCSSUpdater.applyTheme(enhancedThemeConfig);
|
|
115
|
+
fontLoader.loadThemeFonts(enhancedThemeConfig.fonts).catch(err => {
|
|
116
|
+
console.warn(`Failed to load fonts for theme '${currentTheme}', err);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
setError(null);
|
|
121
|
+
} catch (err) {
|
|
122
|
+
const errorMessage = `Failed to load theme '${currentTheme}'}`;
|
|
123
|
+
setError(errorMessage);
|
|
124
|
+
setCurrentThemeConfig(null);
|
|
125
|
+
console.error(errorMessage, err);
|
|
126
|
+
}
|
|
127
|
+
}, [currentTheme, enhanceThemeColors]);
|
|
128
|
+
|
|
129
|
+
// Theme switching function
|
|
130
|
+
const setTheme = useCallback(async (themeName) => {
|
|
131
|
+
if (!themes[themeName]) {
|
|
132
|
+
setError(`Theme '${themeName}' not found`);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
try {
|
|
137
|
+
// Get the complete theme configuration
|
|
138
|
+
const themeConfig = themeInheritanceManager.getCompleteTheme(themeName);
|
|
139
|
+
|
|
140
|
+
if (!themeConfig) {
|
|
141
|
+
throw new Error(`Theme configuration not found for '${themeName}'`);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Enhance theme colors using ColorManager
|
|
145
|
+
const enhancedThemeConfig = enhanceThemeColors(toCompleteThemeConfig(themeConfig));
|
|
146
|
+
|
|
147
|
+
// Apply enhanced CSS variables to the document
|
|
148
|
+
themeCSSUpdater.applyTheme(enhancedThemeConfig);
|
|
149
|
+
|
|
150
|
+
// Load fonts for the theme
|
|
151
|
+
await fontLoader.loadThemeFonts(enhancedThemeConfig.fonts);
|
|
152
|
+
|
|
153
|
+
// Update state
|
|
154
|
+
setCurrentThemeState(themeName);
|
|
155
|
+
setCurrentThemeConfig(enhancedThemeConfig);
|
|
156
|
+
|
|
157
|
+
// Persist theme preference
|
|
158
|
+
if (persistTheme) {
|
|
159
|
+
const persistence = createThemePersistence({ storageKey });
|
|
160
|
+
persistence.setStoredTheme(themeName);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
setError(null);
|
|
164
|
+
} catch (err) {
|
|
165
|
+
const errorMessage = `Failed to switch to theme '${themeName}'}`;
|
|
166
|
+
setError(errorMessage);
|
|
167
|
+
console.error(errorMessage, err);
|
|
168
|
+
}
|
|
169
|
+
}, [themes, persistTheme, storageKey]);
|
|
170
|
+
|
|
171
|
+
// Add new theme
|
|
172
|
+
const addTheme = useCallback((name, theme) => {
|
|
173
|
+
try {
|
|
174
|
+
themeInheritanceManager.registerTheme(name, theme);
|
|
175
|
+
setAvailableThemes(prev => [...prev, name]);
|
|
176
|
+
setError(null);
|
|
177
|
+
} catch (err) {
|
|
178
|
+
setError(`Failed to add theme '${name}'}`);
|
|
179
|
+
}
|
|
180
|
+
}, []);
|
|
181
|
+
|
|
182
|
+
// Remove theme
|
|
183
|
+
const removeTheme = useCallback((name) => {
|
|
184
|
+
try {
|
|
185
|
+
// Don't allow removing the current theme
|
|
186
|
+
if (name === currentTheme) {
|
|
187
|
+
setError('Cannot remove the currently active theme');
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Remove from inheritance manager (we'll need to add this method)
|
|
192
|
+
// themeInheritanceManager.removeTheme(name);
|
|
193
|
+
|
|
194
|
+
setAvailableThemes(prev => prev.filter(t => t !== name));
|
|
195
|
+
setError(null);
|
|
196
|
+
} catch (err) {
|
|
197
|
+
setError(`Failed to remove theme '${name}'}`);
|
|
198
|
+
}
|
|
199
|
+
}, [currentTheme]);
|
|
200
|
+
|
|
201
|
+
// Get theme by name
|
|
202
|
+
const getTheme = useCallback((name)=> {
|
|
203
|
+
try {
|
|
204
|
+
return themeInheritanceManager.getCompleteTheme(name);
|
|
205
|
+
} catch (err) {
|
|
206
|
+
setError(`Failed to get theme '${name}'}`);
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
}, []);
|
|
210
|
+
|
|
211
|
+
// Context value
|
|
212
|
+
const contextValue= {
|
|
213
|
+
currentTheme,
|
|
214
|
+
currentThemeConfig,
|
|
215
|
+
availableThemes,
|
|
216
|
+
setTheme,
|
|
217
|
+
addTheme,
|
|
218
|
+
removeTheme,
|
|
219
|
+
getTheme,
|
|
220
|
+
isLoading,
|
|
221
|
+
error
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
return (
|
|
225
|
+
<ThemeContext.Provider value={contextValue}>
|
|
226
|
+
{children}
|
|
227
|
+
</ThemeContext.Provider>
|
|
228
|
+
);
|
|
229
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Accessibility theme system exports
|
|
2
|
+
export * from '../accessibility';
|
|
3
|
+
|
|
4
|
+
// Re-export main managers for easy access
|
|
5
|
+
// Re-export specific classes to avoid naming conflicts
|
|
6
|
+
// Re-export specific classes from other modules
|
|
7
|
+
// Re-export specific utilities and constants
|