@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.6 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/dist/components/ui/accessibility-demo.d.ts +259 -0
- package/dist/components/ui/accessibility-demo.esm.js +265 -0
- package/dist/components/ui/accessibility-demo.js +265 -0
- package/dist/components/ui/advanced-component-architecture-demo.d.ts +718 -0
- package/dist/components/ui/advanced-component-architecture-demo.esm.js +860 -0
- package/dist/components/ui/advanced-component-architecture-demo.js +860 -0
- package/dist/components/ui/advanced-transition-system-demo.d.ts +660 -0
- package/dist/components/ui/advanced-transition-system-demo.esm.js +624 -0
- package/dist/components/ui/advanced-transition-system-demo.js +624 -0
- package/dist/components/ui/advanced-transition-system.d.ts +391 -0
- package/dist/components/ui/advanced-transition-system.esm.js +351 -0
- package/dist/components/ui/advanced-transition-system.js +351 -0
- package/dist/components/ui/animation/animated-container.d.ts +162 -0
- package/dist/components/ui/animation/animated-container.esm.js +143 -0
- package/dist/components/ui/animation/animated-container.js +143 -0
- package/dist/components/ui/animation/index.d.ts +9 -0
- package/dist/components/ui/animation/index.esm.js +19 -0
- package/dist/components/ui/animation/index.js +19 -0
- package/dist/components/ui/animation/staggered-container.d.ts +64 -0
- package/dist/components/ui/animation/staggered-container.esm.js +59 -0
- package/dist/components/ui/animation/staggered-container.js +59 -0
- package/dist/components/ui/animation-demo.d.ts +238 -0
- package/dist/components/ui/animation-demo.esm.js +218 -0
- package/dist/components/ui/animation-demo.js +218 -0
- package/dist/components/ui/badge.d.ts +28 -0
- package/dist/components/ui/badge.esm.js +30 -0
- package/dist/components/ui/badge.js +30 -0
- package/dist/components/ui/battery-conscious-animation-demo.d.ts +561 -0
- package/dist/components/ui/battery-conscious-animation-demo.esm.js +533 -0
- package/dist/components/ui/battery-conscious-animation-demo.js +533 -0
- package/dist/components/ui/border-radius-shadow-demo.d.ts +183 -0
- package/dist/components/ui/border-radius-shadow-demo.esm.js +176 -0
- package/dist/components/ui/border-radius-shadow-demo.js +176 -0
- package/dist/components/ui/button.d.ts +33 -0
- package/dist/components/ui/button.esm.js +30 -0
- package/dist/components/ui/button.js +30 -0
- package/dist/components/ui/card.d.ts +205 -0
- package/dist/components/ui/card.esm.js +182 -0
- package/dist/components/ui/card.js +182 -0
- package/dist/components/ui/checkbox.d.ts +26 -0
- package/dist/components/ui/checkbox.esm.js +30 -0
- package/dist/components/ui/checkbox.js +30 -0
- package/dist/components/ui/color-preview.d.ts +402 -0
- package/dist/components/ui/color-preview.esm.js +388 -0
- package/dist/components/ui/color-preview.js +388 -0
- package/dist/components/ui/data-display/chart.d.ts +646 -0
- package/dist/components/ui/data-display/chart.esm.js +625 -0
- package/dist/components/ui/data-display/chart.js +625 -0
- package/dist/components/ui/data-display/data-grid-simple.d.ts +73 -0
- package/dist/components/ui/data-display/data-grid-simple.esm.js +76 -0
- package/dist/components/ui/data-display/data-grid-simple.js +76 -0
- package/dist/components/ui/data-display/data-grid.d.ts +670 -0
- package/dist/components/ui/data-display/data-grid.esm.js +667 -0
- package/dist/components/ui/data-display/data-grid.js +667 -0
- package/dist/components/ui/data-display/list.d.ts +448 -0
- package/dist/components/ui/data-display/list.esm.js +448 -0
- package/dist/components/ui/data-display/list.js +448 -0
- package/dist/components/ui/data-display/table.d.ts +472 -0
- package/dist/components/ui/data-display/table.esm.js +474 -0
- package/dist/components/ui/data-display/table.js +474 -0
- package/dist/components/ui/data-display/timeline.d.ts +433 -0
- package/dist/components/ui/data-display/timeline.esm.js +436 -0
- package/dist/components/ui/data-display/timeline.js +436 -0
- package/dist/components/ui/data-display/tree.d.ts +594 -0
- package/dist/components/ui/data-display/tree.esm.js +570 -0
- package/dist/components/ui/data-display/tree.js +570 -0
- package/dist/components/ui/data-display/types.d.ts +534 -0
- package/dist/components/ui/data-display/types.esm.js +511 -0
- package/dist/components/ui/data-display/types.js +511 -0
- package/dist/components/ui/enterprise-mobile-experience-demo.d.ts +735 -0
- package/dist/components/ui/enterprise-mobile-experience-demo.esm.js +699 -0
- package/dist/components/ui/enterprise-mobile-experience-demo.js +699 -0
- package/dist/components/ui/enterprise-mobile-experience.d.ts +461 -0
- package/dist/components/ui/enterprise-mobile-experience.esm.js +413 -0
- package/dist/components/ui/enterprise-mobile-experience.js +413 -0
- package/dist/components/ui/feedback/alert.d.ts +154 -0
- package/dist/components/ui/feedback/alert.esm.js +150 -0
- package/dist/components/ui/feedback/alert.js +150 -0
- package/dist/components/ui/feedback/progress.d.ts +288 -0
- package/dist/components/ui/feedback/progress.esm.js +269 -0
- package/dist/components/ui/feedback/progress.js +269 -0
- package/dist/components/ui/feedback/skeleton.d.ts +182 -0
- package/dist/components/ui/feedback/skeleton.esm.js +175 -0
- package/dist/components/ui/feedback/skeleton.js +175 -0
- package/dist/components/ui/feedback/toast.d.ts +277 -0
- package/dist/components/ui/feedback/toast.esm.js +256 -0
- package/dist/components/ui/feedback/toast.js +256 -0
- package/dist/components/ui/feedback/types.d.ts +123 -0
- package/dist/components/ui/feedback/types.esm.js +125 -0
- package/dist/components/ui/feedback/types.js +125 -0
- package/dist/components/ui/font-preview.d.ts +282 -0
- package/dist/components/ui/font-preview.esm.js +286 -0
- package/dist/components/ui/font-preview.js +286 -0
- package/dist/components/ui/form-demo.d.ts +544 -0
- package/dist/components/ui/form-demo.esm.js +516 -0
- package/dist/components/ui/form-demo.js +516 -0
- package/dist/components/ui/hardware-acceleration-demo.d.ts +540 -0
- package/dist/components/ui/hardware-acceleration-demo.esm.js +497 -0
- package/dist/components/ui/hardware-acceleration-demo.js +497 -0
- package/dist/components/ui/input.d.ts +33 -0
- package/dist/components/ui/input.esm.js +32 -0
- package/dist/components/ui/input.js +32 -0
- package/dist/components/ui/label.d.ts +13 -0
- package/dist/components/ui/label.esm.js +16 -0
- package/dist/components/ui/label.js +16 -0
- package/dist/components/ui/layout-demo.d.ts +352 -0
- package/dist/components/ui/layout-demo.esm.js +342 -0
- package/dist/components/ui/layout-demo.js +342 -0
- package/dist/components/ui/layouts/adaptive-layout.d.ts +132 -0
- package/dist/components/ui/layouts/adaptive-layout.esm.js +120 -0
- package/dist/components/ui/layouts/adaptive-layout.js +120 -0
- package/dist/components/ui/layouts/desktop-layout.d.ts +219 -0
- package/dist/components/ui/layouts/desktop-layout.esm.js +204 -0
- package/dist/components/ui/layouts/desktop-layout.js +204 -0
- package/dist/components/ui/layouts/index.d.ts +5 -0
- package/dist/components/ui/layouts/index.esm.js +10 -0
- package/dist/components/ui/layouts/index.js +10 -0
- package/dist/components/ui/layouts/mobile-layout.d.ts +158 -0
- package/dist/components/ui/layouts/mobile-layout.esm.js +152 -0
- package/dist/components/ui/layouts/mobile-layout.js +152 -0
- package/dist/components/ui/layouts/tablet-layout.d.ts +192 -0
- package/dist/components/ui/layouts/tablet-layout.esm.js +183 -0
- package/dist/components/ui/layouts/tablet-layout.js +183 -0
- package/dist/components/ui/mobile-form-validation.d.ts +439 -0
- package/dist/components/ui/mobile-form-validation.esm.js +418 -0
- package/dist/components/ui/mobile-form-validation.js +418 -0
- package/dist/components/ui/mobile-input-demo.d.ts +197 -0
- package/dist/components/ui/mobile-input-demo.esm.js +195 -0
- package/dist/components/ui/mobile-input-demo.js +195 -0
- package/dist/components/ui/mobile-input.d.ts +273 -0
- package/dist/components/ui/mobile-input.esm.js +216 -0
- package/dist/components/ui/mobile-input.js +216 -0
- package/dist/components/ui/mobile-skeleton-loading-demo.d.ts +628 -0
- package/dist/components/ui/mobile-skeleton-loading-demo.esm.js +621 -0
- package/dist/components/ui/mobile-skeleton-loading-demo.js +621 -0
- package/dist/components/ui/navigation/breadcrumb.d.ts +149 -0
- package/dist/components/ui/navigation/breadcrumb.esm.js +155 -0
- package/dist/components/ui/navigation/breadcrumb.js +155 -0
- package/dist/components/ui/navigation/index.d.ts +25 -0
- package/dist/components/ui/navigation/index.esm.js +14 -0
- package/dist/components/ui/navigation/index.js +14 -0
- package/dist/components/ui/navigation/menu.d.ts +366 -0
- package/dist/components/ui/navigation/menu.esm.js +360 -0
- package/dist/components/ui/navigation/menu.js +360 -0
- package/dist/components/ui/navigation/navigation-demo.d.ts +169 -0
- package/dist/components/ui/navigation/navigation-demo.esm.js +317 -0
- package/dist/components/ui/navigation/navigation-demo.js +317 -0
- package/dist/components/ui/navigation/pagination.d.ts +261 -0
- package/dist/components/ui/navigation/pagination.esm.js +260 -0
- package/dist/components/ui/navigation/pagination.js +260 -0
- package/dist/components/ui/navigation/sidebar.d.ts +375 -0
- package/dist/components/ui/navigation/sidebar.esm.js +369 -0
- package/dist/components/ui/navigation/sidebar.js +369 -0
- package/dist/components/ui/navigation/stepper.d.ts +294 -0
- package/dist/components/ui/navigation/stepper.esm.js +292 -0
- package/dist/components/ui/navigation/stepper.js +292 -0
- package/dist/components/ui/navigation/tabs.d.ts +196 -0
- package/dist/components/ui/navigation/tabs.esm.js +194 -0
- package/dist/components/ui/navigation/tabs.js +194 -0
- package/dist/components/ui/navigation/types.d.ts +293 -0
- package/dist/components/ui/navigation/types.esm.js +298 -0
- package/dist/components/ui/navigation/types.js +298 -0
- package/dist/components/ui/overlay/backdrop.d.ts +79 -0
- package/dist/components/ui/overlay/backdrop.esm.js +80 -0
- package/dist/components/ui/overlay/backdrop.js +80 -0
- package/dist/components/ui/overlay/focus-manager.d.ts +141 -0
- package/dist/components/ui/overlay/focus-manager.esm.js +141 -0
- package/dist/components/ui/overlay/focus-manager.js +141 -0
- package/dist/components/ui/overlay/index.d.ts +27 -0
- package/dist/components/ui/overlay/index.esm.js +16 -0
- package/dist/components/ui/overlay/index.js +16 -0
- package/dist/components/ui/overlay/modal.d.ts +262 -0
- package/dist/components/ui/overlay/modal.esm.js +266 -0
- package/dist/components/ui/overlay/modal.js +266 -0
- package/dist/components/ui/overlay/overlay-manager.d.ts +107 -0
- package/dist/components/ui/overlay/overlay-manager.esm.js +105 -0
- package/dist/components/ui/overlay/overlay-manager.js +105 -0
- package/dist/components/ui/overlay/popover.d.ts +450 -0
- package/dist/components/ui/overlay/popover.esm.js +446 -0
- package/dist/components/ui/overlay/popover.js +446 -0
- package/dist/components/ui/overlay/portal.d.ts +75 -0
- package/dist/components/ui/overlay/portal.esm.js +79 -0
- package/dist/components/ui/overlay/portal.js +79 -0
- package/dist/components/ui/overlay/tooltip.d.ts +298 -0
- package/dist/components/ui/overlay/tooltip.esm.js +288 -0
- package/dist/components/ui/overlay/tooltip.js +288 -0
- package/dist/components/ui/overlay/types.d.ts +194 -0
- package/dist/components/ui/overlay/types.esm.js +195 -0
- package/dist/components/ui/overlay/types.js +195 -0
- package/dist/components/ui/performance-demo.d.ts +583 -0
- package/dist/components/ui/performance-demo.esm.js +549 -0
- package/dist/components/ui/performance-demo.js +549 -0
- package/dist/components/ui/semantic-input-system-demo.d.ts +490 -0
- package/dist/components/ui/semantic-input-system-demo.esm.js +465 -0
- package/dist/components/ui/semantic-input-system-demo.js +465 -0
- package/dist/components/ui/theme-customizer.d.ts +378 -0
- package/dist/components/ui/theme-customizer.esm.js +354 -0
- package/dist/components/ui/theme-customizer.js +354 -0
- package/dist/components/ui/theme-preview.d.ts +305 -0
- package/dist/components/ui/theme-preview.esm.js +258 -0
- package/dist/components/ui/theme-preview.js +258 -0
- package/dist/components/ui/theme-switcher.d.ts +259 -0
- package/dist/components/ui/theme-switcher.esm.js +238 -0
- package/dist/components/ui/theme-switcher.js +238 -0
- package/dist/components/ui/theme-toggle.d.ts +34 -0
- package/dist/components/ui/theme-toggle.esm.js +38 -0
- package/dist/components/ui/theme-toggle.js +38 -0
- package/dist/components/ui/token-demo.d.ts +188 -0
- package/dist/components/ui/token-demo.esm.js +183 -0
- package/dist/components/ui/token-demo.js +183 -0
- package/dist/components/ui/touch-demo.d.ts +455 -0
- package/dist/components/ui/touch-demo.esm.js +433 -0
- package/dist/components/ui/touch-demo.js +433 -0
- package/dist/components/ui/touch-friendly-interface-demo.d.ts +512 -0
- package/dist/components/ui/touch-friendly-interface-demo.esm.js +481 -0
- package/dist/components/ui/touch-friendly-interface-demo.js +481 -0
- package/dist/components/ui/touch-friendly-interface.d.ts +292 -0
- package/dist/components/ui/touch-friendly-interface.esm.js +272 -0
- package/dist/components/ui/touch-friendly-interface.js +272 -0
- package/dist/hooks/index.d.ts +161 -0
- package/dist/hooks/index.esm.js +190 -0
- package/dist/hooks/index.js +190 -0
- package/dist/hooks/use-accessibility-support.d.ts +516 -0
- package/dist/hooks/use-accessibility-support.esm.js +488 -0
- package/dist/hooks/use-accessibility-support.js +488 -0
- package/dist/hooks/use-adaptive-layout.d.ts +287 -0
- package/dist/hooks/use-adaptive-layout.esm.js +266 -0
- package/dist/hooks/use-adaptive-layout.js +266 -0
- package/dist/hooks/use-advanced-patterns.d.ts +292 -0
- package/dist/hooks/use-advanced-patterns.esm.js +279 -0
- package/dist/hooks/use-advanced-patterns.js +279 -0
- package/dist/hooks/use-advanced-transition-system.d.ts +390 -0
- package/dist/hooks/use-advanced-transition-system.esm.js +352 -0
- package/dist/hooks/use-advanced-transition-system.js +352 -0
- package/dist/hooks/use-animation-profile.d.ts +285 -0
- package/dist/hooks/use-animation-profile.esm.js +259 -0
- package/dist/hooks/use-animation-profile.js +259 -0
- package/dist/hooks/use-battery-animations.d.ts +382 -0
- package/dist/hooks/use-battery-animations.esm.js +359 -0
- package/dist/hooks/use-battery-animations.js +359 -0
- package/dist/hooks/use-battery-conscious-loading.d.ts +473 -0
- package/dist/hooks/use-battery-conscious-loading.esm.js +432 -0
- package/dist/hooks/use-battery-conscious-loading.js +432 -0
- package/dist/hooks/use-battery-optimization.d.ts +328 -0
- package/dist/hooks/use-battery-optimization.esm.js +307 -0
- package/dist/hooks/use-battery-optimization.js +307 -0
- package/dist/hooks/use-battery-status.d.ts +297 -0
- package/dist/hooks/use-battery-status.esm.js +277 -0
- package/dist/hooks/use-battery-status.js +277 -0
- package/dist/hooks/use-component-performance.d.ts +342 -0
- package/dist/hooks/use-component-performance.esm.js +329 -0
- package/dist/hooks/use-component-performance.js +329 -0
- package/dist/hooks/use-device-loading-states.d.ts +456 -0
- package/dist/hooks/use-device-loading-states.esm.js +416 -0
- package/dist/hooks/use-device-loading-states.js +416 -0
- package/dist/hooks/use-device.d.ts +104 -0
- package/dist/hooks/use-device.esm.js +99 -0
- package/dist/hooks/use-device.js +99 -0
- package/dist/hooks/use-enterprise-mobile-experience.d.ts +486 -0
- package/dist/hooks/use-enterprise-mobile-experience.esm.js +439 -0
- package/dist/hooks/use-enterprise-mobile-experience.js +439 -0
- package/dist/hooks/use-form-feedback.d.ts +401 -0
- package/dist/hooks/use-form-feedback.esm.js +360 -0
- package/dist/hooks/use-form-feedback.js +360 -0
- package/dist/hooks/use-form-performance.d.ts +511 -0
- package/dist/hooks/use-form-performance.esm.js +478 -0
- package/dist/hooks/use-form-performance.js +478 -0
- package/dist/hooks/use-frame-rate.d.ts +249 -0
- package/dist/hooks/use-frame-rate.esm.js +232 -0
- package/dist/hooks/use-frame-rate.js +232 -0
- package/dist/hooks/use-gestures.d.ts +336 -0
- package/dist/hooks/use-gestures.esm.js +314 -0
- package/dist/hooks/use-gestures.js +314 -0
- package/dist/hooks/use-hardware-acceleration.d.ts +339 -0
- package/dist/hooks/use-hardware-acceleration.esm.js +313 -0
- package/dist/hooks/use-hardware-acceleration.js +313 -0
- package/dist/hooks/use-input-accessibility.d.ts +451 -0
- package/dist/hooks/use-input-accessibility.esm.js +417 -0
- package/dist/hooks/use-input-accessibility.js +417 -0
- package/dist/hooks/use-input-performance.d.ts +503 -0
- package/dist/hooks/use-input-performance.esm.js +471 -0
- package/dist/hooks/use-input-performance.js +471 -0
- package/dist/hooks/use-layout-performance.d.ts +317 -0
- package/dist/hooks/use-layout-performance.esm.js +298 -0
- package/dist/hooks/use-layout-performance.js +298 -0
- package/dist/hooks/use-loading-accessibility.d.ts +532 -0
- package/dist/hooks/use-loading-accessibility.esm.js +495 -0
- package/dist/hooks/use-loading-accessibility.js +495 -0
- package/dist/hooks/use-loading-performance.d.ts +471 -0
- package/dist/hooks/use-loading-performance.esm.js +449 -0
- package/dist/hooks/use-loading-performance.js +449 -0
- package/dist/hooks/use-memory-usage.d.ts +285 -0
- package/dist/hooks/use-memory-usage.esm.js +268 -0
- package/dist/hooks/use-memory-usage.js +268 -0
- package/dist/hooks/use-mobile-form-layout.d.ts +462 -0
- package/dist/hooks/use-mobile-form-layout.esm.js +427 -0
- package/dist/hooks/use-mobile-form-layout.js +427 -0
- package/dist/hooks/use-mobile-form-validation.d.ts +516 -0
- package/dist/hooks/use-mobile-form-validation.esm.js +451 -0
- package/dist/hooks/use-mobile-form-validation.js +451 -0
- package/dist/hooks/use-mobile-keyboard-optimization.d.ts +469 -0
- package/dist/hooks/use-mobile-keyboard-optimization.esm.js +431 -0
- package/dist/hooks/use-mobile-keyboard-optimization.js +431 -0
- package/dist/hooks/use-mobile-layout.d.ts +300 -0
- package/dist/hooks/use-mobile-layout.esm.js +280 -0
- package/dist/hooks/use-mobile-layout.js +280 -0
- package/dist/hooks/use-mobile-optimization.d.ts +404 -0
- package/dist/hooks/use-mobile-optimization.esm.js +378 -0
- package/dist/hooks/use-mobile-optimization.js +378 -0
- package/dist/hooks/use-mobile-skeleton.d.ts +399 -0
- package/dist/hooks/use-mobile-skeleton.esm.js +369 -0
- package/dist/hooks/use-mobile-skeleton.js +369 -0
- package/dist/hooks/use-mobile-touch.d.ts +412 -0
- package/dist/hooks/use-mobile-touch.esm.js +379 -0
- package/dist/hooks/use-mobile-touch.js +379 -0
- package/dist/hooks/use-performance-throttling.d.ts +346 -0
- package/dist/hooks/use-performance-throttling.esm.js +324 -0
- package/dist/hooks/use-performance-throttling.js +324 -0
- package/dist/hooks/use-performance.d.ts +314 -0
- package/dist/hooks/use-performance.esm.js +278 -0
- package/dist/hooks/use-performance.js +278 -0
- package/dist/hooks/use-reusable-architecture.d.ts +412 -0
- package/dist/hooks/use-reusable-architecture.esm.js +385 -0
- package/dist/hooks/use-reusable-architecture.js +385 -0
- package/dist/hooks/use-semantic-input-types.d.ts +354 -0
- package/dist/hooks/use-semantic-input-types.esm.js +315 -0
- package/dist/hooks/use-semantic-input-types.js +315 -0
- package/dist/hooks/use-semantic-input.d.ts +563 -0
- package/dist/hooks/use-semantic-input.esm.js +513 -0
- package/dist/hooks/use-semantic-input.js +513 -0
- package/dist/hooks/use-tablet-layout.d.ts +382 -0
- package/dist/hooks/use-tablet-layout.esm.js +355 -0
- package/dist/hooks/use-tablet-layout.js +355 -0
- package/dist/hooks/use-touch-friendly-input.d.ts +520 -0
- package/dist/hooks/use-touch-friendly-input.esm.js +480 -0
- package/dist/hooks/use-touch-friendly-input.js +480 -0
- package/dist/hooks/use-touch-friendly-interface.d.ts +329 -0
- package/dist/hooks/use-touch-friendly-interface.esm.js +299 -0
- package/dist/hooks/use-touch-friendly-interface.js +299 -0
- package/dist/hooks/use-touch-optimization.d.ts +373 -0
- package/dist/hooks/use-touch-optimization.esm.js +348 -0
- package/dist/hooks/use-touch-optimization.js +348 -0
- package/dist/index.esm.js +2 -2
- package/dist/index.js +2 -2
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.esm.js +6 -0
- package/dist/lib/utils.js +6 -0
- package/dist/plugins/theme-css-generator.d.ts +345 -0
- package/dist/plugins/theme-css-generator.esm.js +305 -0
- package/dist/plugins/theme-css-generator.js +305 -0
- package/dist/styles.css +1 -1
- package/dist/themes/ThemeContext.d.ts +27 -0
- package/dist/themes/ThemeContext.esm.js +31 -0
- package/dist/themes/ThemeContext.js +31 -0
- package/dist/themes/ThemeProvider.d.ts +222 -0
- package/dist/themes/ThemeProvider.esm.js +229 -0
- package/dist/themes/ThemeProvider.js +229 -0
- package/dist/themes/accessibility/index.d.ts +7 -0
- package/dist/themes/accessibility/index.esm.js +27 -0
- package/dist/themes/accessibility/index.js +27 -0
- package/dist/themes/accessibility.d.ts +259 -0
- package/dist/themes/accessibility.esm.js +220 -0
- package/dist/themes/accessibility.js +220 -0
- package/dist/themes/aria-patterns.d.ts +418 -0
- package/dist/themes/aria-patterns.esm.js +384 -0
- package/dist/themes/aria-patterns.js +384 -0
- package/dist/themes/base-themes.d.ts +34 -0
- package/dist/themes/base-themes.esm.js +52 -0
- package/dist/themes/base-themes.js +52 -0
- package/dist/themes/colorManager.d.ts +327 -0
- package/dist/themes/colorManager.esm.js +362 -0
- package/dist/themes/colorManager.js +362 -0
- package/dist/themes/examples/dark-theme.d.ts +139 -0
- package/dist/themes/examples/dark-theme.esm.js +124 -0
- package/dist/themes/examples/dark-theme.js +124 -0
- package/dist/themes/examples/minimal-theme.d.ts +93 -0
- package/dist/themes/examples/minimal-theme.esm.js +86 -0
- package/dist/themes/examples/minimal-theme.js +86 -0
- package/dist/themes/focus-management.d.ts +699 -0
- package/dist/themes/focus-management.esm.js +642 -0
- package/dist/themes/focus-management.js +642 -0
- package/dist/themes/fontLoader.d.ts +163 -0
- package/dist/themes/fontLoader.esm.js +192 -0
- package/dist/themes/fontLoader.js +192 -0
- package/dist/themes/high-contrast.d.ts +619 -0
- package/dist/themes/high-contrast.esm.js +573 -0
- package/dist/themes/high-contrast.js +573 -0
- package/dist/themes/index.d.ts +11 -0
- package/dist/themes/index.esm.js +19 -0
- package/dist/themes/index.js +19 -0
- package/dist/themes/inheritance.d.ts +160 -0
- package/dist/themes/inheritance.esm.js +219 -0
- package/dist/themes/inheritance.js +219 -0
- package/dist/themes/keyboard-navigation.d.ts +550 -0
- package/dist/themes/keyboard-navigation.esm.js +521 -0
- package/dist/themes/keyboard-navigation.js +521 -0
- package/dist/themes/motion-reduction.d.ts +660 -0
- package/dist/themes/motion-reduction.esm.js +602 -0
- package/dist/themes/motion-reduction.js +602 -0
- package/dist/themes/navigation.d.ts +232 -0
- package/dist/themes/navigation.esm.js +238 -0
- package/dist/themes/navigation.js +238 -0
- package/dist/themes/screen-reader.d.ts +645 -0
- package/dist/themes/screen-reader.esm.js +580 -0
- package/dist/themes/screen-reader.js +580 -0
- package/dist/themes/systemThemeDetector.d.ts +148 -0
- package/dist/themes/systemThemeDetector.esm.js +174 -0
- package/dist/themes/systemThemeDetector.js +174 -0
- package/dist/themes/themeCSSUpdater.d.ts +229 -0
- package/dist/themes/themeCSSUpdater.esm.js +250 -0
- package/dist/themes/themeCSSUpdater.js +250 -0
- package/dist/themes/themePersistence.d.ts +192 -0
- package/dist/themes/themePersistence.esm.js +217 -0
- package/dist/themes/themePersistence.js +217 -0
- package/dist/themes/themes/stan-design.d.ts +678 -0
- package/dist/themes/themes/stan-design.esm.js +518 -0
- package/dist/themes/themes/stan-design.js +518 -0
- package/dist/themes/types.d.ts +454 -0
- package/dist/themes/types.esm.js +446 -0
- package/dist/themes/types.js +446 -0
- package/dist/themes/useSystemTheme.d.ts +43 -0
- package/dist/themes/useSystemTheme.esm.js +48 -0
- package/dist/themes/useSystemTheme.js +48 -0
- package/dist/themes/useTheme.d.ts +20 -0
- package/dist/themes/useTheme.esm.js +87 -0
- package/dist/themes/useTheme.js +87 -0
- package/dist/themes/validation.d.ts +406 -0
- package/dist/themes/validation.esm.js +411 -0
- package/dist/themes/validation.js +411 -0
- package/dist/tokens/index.d.ts +25 -0
- package/dist/tokens/index.esm.js +23 -0
- package/dist/tokens/index.js +23 -0
- package/dist/tokens/tokenExporter.d.ts +336 -0
- package/dist/tokens/tokenExporter.esm.js +371 -0
- package/dist/tokens/tokenExporter.js +371 -0
- package/dist/tokens/tokenGenerator.d.ts +250 -0
- package/dist/tokens/tokenGenerator.esm.js +267 -0
- package/dist/tokens/tokenGenerator.js +267 -0
- package/dist/tokens/tokenManager.d.ts +194 -0
- package/dist/tokens/tokenManager.esm.js +235 -0
- package/dist/tokens/tokenManager.js +235 -0
- package/dist/tokens/tokenValidator.d.ts +488 -0
- package/dist/tokens/tokenValidator.esm.js +497 -0
- package/dist/tokens/tokenValidator.js +497 -0
- package/dist/tokens/types.d.ts +78 -0
- package/dist/tokens/types.esm.js +64 -0
- package/dist/tokens/types.js +64 -0
- package/dist/utils/bundle-analyzer.d.ts +260 -0
- package/dist/utils/bundle-analyzer.esm.js +242 -0
- package/dist/utils/bundle-analyzer.js +242 -0
- package/dist/utils/bundle-splitting.d.ts +483 -0
- package/dist/utils/bundle-splitting.esm.js +458 -0
- package/dist/utils/bundle-splitting.js +458 -0
- package/dist/utils/lazy-loading.d.ts +437 -0
- package/dist/utils/lazy-loading.esm.js +415 -0
- package/dist/utils/lazy-loading.js +415 -0
- package/dist/utils/performance-monitor.d.ts +513 -0
- package/dist/utils/performance-monitor.esm.js +472 -0
- package/dist/utils/performance-monitor.js +472 -0
- package/dist/utils/tree-shaking.d.ts +274 -0
- package/dist/utils/tree-shaking.esm.js +266 -0
- package/dist/utils/tree-shaking.js +266 -0
- package/package.json +1 -1
- package/src/index.ts +2 -2
- package/src/themes/accessibility/index.ts +1 -1
- package/src/themes/focus-management.ts +3 -3
- package/src/themes/keyboard-navigation.ts +3 -3
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
|
|
2
|
+
function deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T {
|
|
3
|
+
const result = { ...target };
|
|
4
|
+
|
|
5
|
+
for (const key in source) {
|
|
6
|
+
if (source[key] !== undefined) {
|
|
7
|
+
if (
|
|
8
|
+
typeof source[key] === 'object' &&
|
|
9
|
+
source[key] !== null &&
|
|
10
|
+
!Array.isArray(source[key]) &&
|
|
11
|
+
typeof target[key] === 'object' &&
|
|
12
|
+
target[key] !== null &&
|
|
13
|
+
!Array.isArray(target[key])
|
|
14
|
+
) {
|
|
15
|
+
// Recursively merge objects
|
|
16
|
+
result[key] = deepMerge(target[key], source[key]);
|
|
17
|
+
} else {
|
|
18
|
+
// Direct assignment for primitives, arrays, or null values
|
|
19
|
+
result[key] = source[key] as T[Extract<keyof T, string>];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function applyThemeInheritance(theme: Partial<MultiThemeConfig>): MultiThemeConfig {
|
|
28
|
+
return deepMerge(defaultTheme, theme);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function createTheme(themeConfig: Partial<MultiThemeConfig>): MultiThemeConfig {
|
|
32
|
+
return applyThemeInheritance(themeConfig);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function validateThemeCompleteness(theme: MultiThemeConfig): string[] {
|
|
36
|
+
const missingPaths: string[] = [];
|
|
37
|
+
|
|
38
|
+
function checkObject(obj: any, defaultObj: any, path: string = '') {
|
|
39
|
+
for (const key in defaultObj) {
|
|
40
|
+
const currentPath = path ? `${path}.${key}` : key;
|
|
41
|
+
|
|
42
|
+
if (obj[key] === undefined) {
|
|
43
|
+
missingPaths.push(currentPath);
|
|
44
|
+
} else if (
|
|
45
|
+
typeof defaultObj[key] === 'object' &&
|
|
46
|
+
defaultObj[key] !== null &&
|
|
47
|
+
!Array.isArray(defaultObj[key])
|
|
48
|
+
) {
|
|
49
|
+
checkObject(obj[key], defaultObj[key], currentPath);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
checkObject(theme, defaultTheme);
|
|
55
|
+
return missingPaths;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export declare const themeInheritanceManager: {
|
|
59
|
+
// Internal theme registry
|
|
60
|
+
_themes: new Map<string, MultiThemeConfig>(),
|
|
61
|
+
|
|
62
|
+
applyInheritance: applyThemeInheritance,
|
|
63
|
+
|
|
64
|
+
createTheme,
|
|
65
|
+
|
|
66
|
+
getDefaultTheme: () => defaultTheme,
|
|
67
|
+
|
|
68
|
+
validateCompleteness: validateThemeCompleteness,
|
|
69
|
+
|
|
70
|
+
hasInheritance: (theme: MultiThemeConfig): boolean => {
|
|
71
|
+
const missing = validateThemeCompleteness(theme);
|
|
72
|
+
return missing.length === 0;
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
getProperty: <T>(theme: MultiThemeConfig, path: string, fallback?: T): T => {
|
|
76
|
+
const keys = path.split('.');
|
|
77
|
+
let current: any = theme;
|
|
78
|
+
|
|
79
|
+
for (const key of keys) {
|
|
80
|
+
if (current && typeof current === 'object' && key in current) {
|
|
81
|
+
current = current[key];
|
|
82
|
+
} else {
|
|
83
|
+
// Fall back to default theme
|
|
84
|
+
current = defaultTheme;
|
|
85
|
+
for (const key of keys) {
|
|
86
|
+
if (current && typeof current === 'object' && key in current) {
|
|
87
|
+
current = current[key];
|
|
88
|
+
} else {
|
|
89
|
+
return fallback as T;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return current as T;
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
registerTheme: (name: string, theme: Partial<MultiThemeConfig>): MultiThemeConfig => {
|
|
100
|
+
const themeWithInheritance = applyThemeInheritance(theme);
|
|
101
|
+
themeInheritanceManager._themes.set(name, themeWithInheritance);
|
|
102
|
+
return themeWithInheritance;
|
|
103
|
+
},
|
|
104
|
+
|
|
105
|
+
getCompleteTheme: (name: string): CompleteThemeConfig | null => {
|
|
106
|
+
// First try to get the registered theme
|
|
107
|
+
const registeredTheme = themeInheritanceManager._themes.get(name);
|
|
108
|
+
if (registeredTheme) {
|
|
109
|
+
// Check if this theme extends another theme that exists
|
|
110
|
+
if (registeredTheme.extends && !themeInheritanceManager._themes.has(registeredTheme.extends)) {
|
|
111
|
+
// Theme extends a missing parent, return null
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
return toCompleteThemeConfig(registeredTheme);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Fall back to default theme if the requested theme is not found
|
|
118
|
+
if (name === 'default' || name === 'stan-design') {
|
|
119
|
+
return toCompleteThemeConfig(defaultTheme);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return null;
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
getRegisteredThemeNames: (): string[] => {
|
|
126
|
+
return Array.from(themeInheritanceManager._themes.keys());
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
isThemeRegistered: (name: string): boolean => {
|
|
130
|
+
return themeInheritanceManager._themes.has(name);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
export function withInheritance(themeConfig: Partial<MultiThemeConfig>) {
|
|
135
|
+
return function <T extends { new (...args: any[]): any }>(constructor: T) {
|
|
136
|
+
return class extends constructor {
|
|
137
|
+
static theme = applyThemeInheritance(themeConfig);
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export type PartialThemeConfig = Partial<MultiThemeConfig>;
|
|
143
|
+
|
|
144
|
+
export function overrideTheme(
|
|
145
|
+
baseTheme: MultiThemeConfig,
|
|
146
|
+
overrides: Partial<MultiThemeConfig>
|
|
147
|
+
): MultiThemeConfig {
|
|
148
|
+
return deepMerge(baseTheme, overrides);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export function toCompleteThemeConfig(theme: MultiThemeConfig): CompleteThemeConfig {
|
|
152
|
+
return {
|
|
153
|
+
...theme,
|
|
154
|
+
validation: {
|
|
155
|
+
isValid: true,
|
|
156
|
+
errors: [],
|
|
157
|
+
warnings: []
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { MultiThemeConfig, CompleteThemeConfig } from './types';
|
|
2
|
+
import { defaultTheme } from './themes/default';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Deep merge utility for theme inheritance
|
|
6
|
+
* Recursively merges theme configuration with default values
|
|
7
|
+
*/
|
|
8
|
+
function deepMerge<T extends Record<string, any>>(target, source)= { ...target };
|
|
9
|
+
|
|
10
|
+
for (const key in source) {
|
|
11
|
+
if (source[key] !== undefined) {
|
|
12
|
+
if (
|
|
13
|
+
typeof source[key] === 'object' &&
|
|
14
|
+
source[key] !== null &&
|
|
15
|
+
!Array.isArray(source[key]) &&
|
|
16
|
+
typeof target[key] === 'object' &&
|
|
17
|
+
target[key] !== null &&
|
|
18
|
+
!Array.isArray(target[key])
|
|
19
|
+
) {
|
|
20
|
+
// Recursively merge objects
|
|
21
|
+
result[key] = deepMerge(target[key], source[key]);
|
|
22
|
+
} else {
|
|
23
|
+
// Direct assignment for primitives, arrays, or null values
|
|
24
|
+
result[key] = source[key] as T[Extract<keyof T, string>];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Apply theme inheritance by merging with default theme
|
|
34
|
+
* Any undefined values in the theme will be filled with defaults
|
|
35
|
+
*/
|
|
36
|
+
export function applyThemeInheritance(theme), theme);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Create a theme with inheritance support
|
|
41
|
+
* This is the recommended way to define new themes
|
|
42
|
+
*/
|
|
43
|
+
export function createTheme(themeConfig));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Validate that a theme has all required properties
|
|
48
|
+
* Returns an array of missing property paths
|
|
49
|
+
*/
|
|
50
|
+
export function validateThemeCompleteness(theme)] {
|
|
51
|
+
const missingPaths] = [];
|
|
52
|
+
|
|
53
|
+
function checkObject(obj, defaultObj, path= '') {
|
|
54
|
+
for (const key in defaultObj) {
|
|
55
|
+
const currentPath = path ? `${path}.${key}` ;
|
|
56
|
+
|
|
57
|
+
if (obj[key] === undefined) {
|
|
58
|
+
missingPaths.push(currentPath);
|
|
59
|
+
} else if (
|
|
60
|
+
typeof defaultObj[key] === 'object' &&
|
|
61
|
+
defaultObj[key] !== null &&
|
|
62
|
+
!Array.isArray(defaultObj[key])
|
|
63
|
+
) {
|
|
64
|
+
checkObject(obj[key], defaultObj[key], currentPath);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
checkObject(theme, defaultTheme);
|
|
70
|
+
return missingPaths;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Theme inheritance manager
|
|
75
|
+
* Provides utilities for working with theme inheritance
|
|
76
|
+
*/
|
|
77
|
+
export const themeInheritanceManager = {
|
|
78
|
+
// Internal theme registry
|
|
79
|
+
_themes, MultiThemeConfig>(),
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Apply inheritance to a theme
|
|
83
|
+
*/
|
|
84
|
+
applyInheritance,
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Create a new theme with inheritance
|
|
88
|
+
*/
|
|
89
|
+
createTheme,
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Get the default theme
|
|
93
|
+
*/
|
|
94
|
+
getDefaultTheme) => defaultTheme,
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Validate theme completeness
|
|
98
|
+
*/
|
|
99
|
+
validateCompleteness,
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Check if a theme has inheritance applied
|
|
103
|
+
*/
|
|
104
|
+
hasInheritance)=> {
|
|
105
|
+
const missing = validateThemeCompleteness(theme);
|
|
106
|
+
return missing.length === 0;
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Get theme property with fallback to default
|
|
111
|
+
*/
|
|
112
|
+
getProperty, path, fallback?)=> {
|
|
113
|
+
const keys = path.split('.');
|
|
114
|
+
let current= theme;
|
|
115
|
+
|
|
116
|
+
for (const key of keys) {
|
|
117
|
+
if (current && typeof current === 'object' && key in current) {
|
|
118
|
+
current = current[key];
|
|
119
|
+
} else {
|
|
120
|
+
// Fall back to default theme
|
|
121
|
+
current = defaultTheme;
|
|
122
|
+
for (const key of keys) {
|
|
123
|
+
if (current && typeof current === 'object' && key in current) {
|
|
124
|
+
current = current[key];
|
|
125
|
+
} else {
|
|
126
|
+
return fallback as T;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return current as T;
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Register a theme with inheritance applied
|
|
138
|
+
*/
|
|
139
|
+
registerTheme, theme)=> {
|
|
140
|
+
const themeWithInheritance = applyThemeInheritance(theme);
|
|
141
|
+
themeInheritanceManager._themes.set(name, themeWithInheritance);
|
|
142
|
+
return themeWithInheritance;
|
|
143
|
+
},
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Get complete theme with inheritance applied
|
|
147
|
+
*/
|
|
148
|
+
getCompleteTheme)=> {
|
|
149
|
+
// First try to get the registered theme
|
|
150
|
+
const registeredTheme = themeInheritanceManager._themes.get(name);
|
|
151
|
+
if (registeredTheme) {
|
|
152
|
+
// Check if this theme extends another theme that exists
|
|
153
|
+
if (registeredTheme.extends && !themeInheritanceManager._themes.has(registeredTheme.extends)) {
|
|
154
|
+
// Theme extends a missing parent, return null
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
return toCompleteThemeConfig(registeredTheme);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Fall back to default theme if the requested theme is not found
|
|
161
|
+
if (name === 'default' || name === 'stan-design') {
|
|
162
|
+
return toCompleteThemeConfig(defaultTheme);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return null;
|
|
166
|
+
},
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Get all registered theme names
|
|
170
|
+
*/
|
|
171
|
+
getRegisteredThemeNames)] => {
|
|
172
|
+
return Array.from(themeInheritanceManager._themes.keys());
|
|
173
|
+
},
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Check if a theme is registered
|
|
177
|
+
*/
|
|
178
|
+
isThemeRegistered)=> {
|
|
179
|
+
return themeInheritanceManager._themes.has(name);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Theme inheritance decorator
|
|
185
|
+
* Use this to automatically apply inheritance when defining themes
|
|
186
|
+
*/
|
|
187
|
+
export function withInheritance(themeConfig) {
|
|
188
|
+
return function <T extends { new (...args])}>(constructor) {
|
|
189
|
+
return class extends constructor {
|
|
190
|
+
static theme = applyThemeInheritance(themeConfig);
|
|
191
|
+
};
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Partial theme type for theme definitions
|
|
197
|
+
* Use this when you only want to define specific parts of a theme
|
|
198
|
+
*/
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Theme override utility
|
|
203
|
+
* Allows you to override specific parts of an existing theme
|
|
204
|
+
*/
|
|
205
|
+
export function overrideTheme(
|
|
206
|
+
baseTheme,
|
|
207
|
+
overrides), overrides);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Convert MultiThemeConfig to CompleteThemeConfig
|
|
212
|
+
*/
|
|
213
|
+
export function toCompleteThemeConfig(theme),
|
|
214
|
+
validation,
|
|
215
|
+
errors],
|
|
216
|
+
warnings]
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { MultiThemeConfig, CompleteThemeConfig } from './types';
|
|
2
|
+
import { defaultTheme } from './themes/default';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Deep merge utility for theme inheritance
|
|
6
|
+
* Recursively merges theme configuration with default values
|
|
7
|
+
*/
|
|
8
|
+
function deepMerge<T extends Record<string, any>>(target, source)= { ...target };
|
|
9
|
+
|
|
10
|
+
for (const key in source) {
|
|
11
|
+
if (source[key] !== undefined) {
|
|
12
|
+
if (
|
|
13
|
+
typeof source[key] === 'object' &&
|
|
14
|
+
source[key] !== null &&
|
|
15
|
+
!Array.isArray(source[key]) &&
|
|
16
|
+
typeof target[key] === 'object' &&
|
|
17
|
+
target[key] !== null &&
|
|
18
|
+
!Array.isArray(target[key])
|
|
19
|
+
) {
|
|
20
|
+
// Recursively merge objects
|
|
21
|
+
result[key] = deepMerge(target[key], source[key]);
|
|
22
|
+
} else {
|
|
23
|
+
// Direct assignment for primitives, arrays, or null values
|
|
24
|
+
result[key] = source[key] as T[Extract<keyof T, string>];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Apply theme inheritance by merging with default theme
|
|
34
|
+
* Any undefined values in the theme will be filled with defaults
|
|
35
|
+
*/
|
|
36
|
+
export function applyThemeInheritance(theme), theme);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Create a theme with inheritance support
|
|
41
|
+
* This is the recommended way to define new themes
|
|
42
|
+
*/
|
|
43
|
+
export function createTheme(themeConfig));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Validate that a theme has all required properties
|
|
48
|
+
* Returns an array of missing property paths
|
|
49
|
+
*/
|
|
50
|
+
export function validateThemeCompleteness(theme)] {
|
|
51
|
+
const missingPaths] = [];
|
|
52
|
+
|
|
53
|
+
function checkObject(obj, defaultObj, path= '') {
|
|
54
|
+
for (const key in defaultObj) {
|
|
55
|
+
const currentPath = path ? `${path}.${key}` ;
|
|
56
|
+
|
|
57
|
+
if (obj[key] === undefined) {
|
|
58
|
+
missingPaths.push(currentPath);
|
|
59
|
+
} else if (
|
|
60
|
+
typeof defaultObj[key] === 'object' &&
|
|
61
|
+
defaultObj[key] !== null &&
|
|
62
|
+
!Array.isArray(defaultObj[key])
|
|
63
|
+
) {
|
|
64
|
+
checkObject(obj[key], defaultObj[key], currentPath);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
checkObject(theme, defaultTheme);
|
|
70
|
+
return missingPaths;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Theme inheritance manager
|
|
75
|
+
* Provides utilities for working with theme inheritance
|
|
76
|
+
*/
|
|
77
|
+
export const themeInheritanceManager = {
|
|
78
|
+
// Internal theme registry
|
|
79
|
+
_themes, MultiThemeConfig>(),
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Apply inheritance to a theme
|
|
83
|
+
*/
|
|
84
|
+
applyInheritance,
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Create a new theme with inheritance
|
|
88
|
+
*/
|
|
89
|
+
createTheme,
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Get the default theme
|
|
93
|
+
*/
|
|
94
|
+
getDefaultTheme) => defaultTheme,
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Validate theme completeness
|
|
98
|
+
*/
|
|
99
|
+
validateCompleteness,
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Check if a theme has inheritance applied
|
|
103
|
+
*/
|
|
104
|
+
hasInheritance)=> {
|
|
105
|
+
const missing = validateThemeCompleteness(theme);
|
|
106
|
+
return missing.length === 0;
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Get theme property with fallback to default
|
|
111
|
+
*/
|
|
112
|
+
getProperty, path, fallback?)=> {
|
|
113
|
+
const keys = path.split('.');
|
|
114
|
+
let current= theme;
|
|
115
|
+
|
|
116
|
+
for (const key of keys) {
|
|
117
|
+
if (current && typeof current === 'object' && key in current) {
|
|
118
|
+
current = current[key];
|
|
119
|
+
} else {
|
|
120
|
+
// Fall back to default theme
|
|
121
|
+
current = defaultTheme;
|
|
122
|
+
for (const key of keys) {
|
|
123
|
+
if (current && typeof current === 'object' && key in current) {
|
|
124
|
+
current = current[key];
|
|
125
|
+
} else {
|
|
126
|
+
return fallback as T;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return current as T;
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Register a theme with inheritance applied
|
|
138
|
+
*/
|
|
139
|
+
registerTheme, theme)=> {
|
|
140
|
+
const themeWithInheritance = applyThemeInheritance(theme);
|
|
141
|
+
themeInheritanceManager._themes.set(name, themeWithInheritance);
|
|
142
|
+
return themeWithInheritance;
|
|
143
|
+
},
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Get complete theme with inheritance applied
|
|
147
|
+
*/
|
|
148
|
+
getCompleteTheme)=> {
|
|
149
|
+
// First try to get the registered theme
|
|
150
|
+
const registeredTheme = themeInheritanceManager._themes.get(name);
|
|
151
|
+
if (registeredTheme) {
|
|
152
|
+
// Check if this theme extends another theme that exists
|
|
153
|
+
if (registeredTheme.extends && !themeInheritanceManager._themes.has(registeredTheme.extends)) {
|
|
154
|
+
// Theme extends a missing parent, return null
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
return toCompleteThemeConfig(registeredTheme);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Fall back to default theme if the requested theme is not found
|
|
161
|
+
if (name === 'default' || name === 'stan-design') {
|
|
162
|
+
return toCompleteThemeConfig(defaultTheme);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return null;
|
|
166
|
+
},
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Get all registered theme names
|
|
170
|
+
*/
|
|
171
|
+
getRegisteredThemeNames)] => {
|
|
172
|
+
return Array.from(themeInheritanceManager._themes.keys());
|
|
173
|
+
},
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Check if a theme is registered
|
|
177
|
+
*/
|
|
178
|
+
isThemeRegistered)=> {
|
|
179
|
+
return themeInheritanceManager._themes.has(name);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Theme inheritance decorator
|
|
185
|
+
* Use this to automatically apply inheritance when defining themes
|
|
186
|
+
*/
|
|
187
|
+
export function withInheritance(themeConfig) {
|
|
188
|
+
return function <T extends { new (...args])}>(constructor) {
|
|
189
|
+
return class extends constructor {
|
|
190
|
+
static theme = applyThemeInheritance(themeConfig);
|
|
191
|
+
};
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Partial theme type for theme definitions
|
|
197
|
+
* Use this when you only want to define specific parts of a theme
|
|
198
|
+
*/
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Theme override utility
|
|
203
|
+
* Allows you to override specific parts of an existing theme
|
|
204
|
+
*/
|
|
205
|
+
export function overrideTheme(
|
|
206
|
+
baseTheme,
|
|
207
|
+
overrides), overrides);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Convert MultiThemeConfig to CompleteThemeConfig
|
|
212
|
+
*/
|
|
213
|
+
export function toCompleteThemeConfig(theme),
|
|
214
|
+
validation,
|
|
215
|
+
errors],
|
|
216
|
+
warnings]
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
}
|