@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.9 → 0.2.11
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.esm.js +30 -24
- package/dist/components/ui/accessibility-demo.js +30 -24
- package/dist/components/ui/advanced-component-architecture-demo.esm.js +235 -179
- package/dist/components/ui/advanced-component-architecture-demo.js +235 -179
- package/dist/components/ui/advanced-transition-system-demo.esm.js +110 -64
- package/dist/components/ui/advanced-transition-system-demo.js +110 -64
- package/dist/components/ui/advanced-transition-system.esm.js +166 -122
- package/dist/components/ui/advanced-transition-system.js +166 -122
- package/dist/components/ui/animation/animated-container.esm.js +52 -29
- package/dist/components/ui/animation/animated-container.js +52 -29
- package/dist/components/ui/animation/staggered-container.esm.js +18 -9
- package/dist/components/ui/animation/staggered-container.js +18 -9
- package/dist/components/ui/animation-demo.esm.js +67 -35
- package/dist/components/ui/animation-demo.js +67 -35
- package/dist/components/ui/badge.esm.js +9 -6
- package/dist/components/ui/badge.js +9 -6
- package/dist/components/ui/battery-conscious-animation-demo.esm.js +122 -87
- package/dist/components/ui/battery-conscious-animation-demo.js +122 -87
- package/dist/components/ui/border-radius-shadow-demo.esm.js +23 -12
- package/dist/components/ui/border-radius-shadow-demo.js +23 -12
- package/dist/components/ui/button.esm.js +8 -2
- package/dist/components/ui/button.js +8 -2
- package/dist/components/ui/card.esm.js +33 -8
- package/dist/components/ui/card.js +33 -8
- package/dist/components/ui/checkbox.esm.js +3 -3
- package/dist/components/ui/checkbox.js +3 -3
- package/dist/components/ui/color-preview.esm.js +68 -45
- package/dist/components/ui/color-preview.js +68 -45
- package/dist/components/ui/data-display/chart.esm.js +112 -84
- package/dist/components/ui/data-display/chart.js +112 -84
- package/dist/components/ui/data-display/data-grid-simple.esm.js +1 -1
- package/dist/components/ui/data-display/data-grid-simple.js +1 -1
- package/dist/components/ui/data-display/data-grid.esm.js +80 -67
- package/dist/components/ui/data-display/data-grid.js +80 -67
- package/dist/components/ui/data-display/list.esm.js +53 -45
- package/dist/components/ui/data-display/list.js +53 -45
- package/dist/components/ui/data-display/table.esm.js +62 -54
- package/dist/components/ui/data-display/table.js +62 -54
- package/dist/components/ui/data-display/timeline.esm.js +39 -34
- package/dist/components/ui/data-display/timeline.js +39 -34
- package/dist/components/ui/data-display/tree.esm.js +116 -84
- package/dist/components/ui/data-display/tree.js +116 -84
- package/dist/components/ui/data-display/types.esm.js +389 -364
- package/dist/components/ui/data-display/types.js +389 -364
- package/dist/components/ui/enterprise-mobile-experience-demo.esm.js +120 -70
- package/dist/components/ui/enterprise-mobile-experience-demo.js +120 -70
- package/dist/components/ui/enterprise-mobile-experience.esm.js +124 -73
- package/dist/components/ui/enterprise-mobile-experience.js +124 -73
- package/dist/components/ui/feedback/alert.esm.js +22 -15
- package/dist/components/ui/feedback/alert.js +22 -15
- package/dist/components/ui/feedback/progress.esm.js +47 -24
- package/dist/components/ui/feedback/progress.js +47 -24
- package/dist/components/ui/feedback/skeleton.esm.js +39 -29
- package/dist/components/ui/feedback/skeleton.js +39 -29
- package/dist/components/ui/feedback/toast.esm.js +62 -38
- package/dist/components/ui/feedback/toast.js +62 -38
- package/dist/components/ui/feedback/types.esm.js +83 -83
- package/dist/components/ui/feedback/types.js +83 -83
- package/dist/components/ui/font-preview.esm.js +41 -39
- package/dist/components/ui/font-preview.js +41 -39
- package/dist/components/ui/form-demo.esm.js +150 -113
- package/dist/components/ui/form-demo.js +150 -113
- package/dist/components/ui/hardware-acceleration-demo.esm.js +137 -87
- package/dist/components/ui/hardware-acceleration-demo.js +137 -87
- package/dist/components/ui/input.esm.js +4 -1
- package/dist/components/ui/input.js +4 -1
- package/dist/components/ui/layout-demo.esm.js +81 -56
- package/dist/components/ui/layout-demo.js +81 -56
- package/dist/components/ui/layouts/adaptive-layout.esm.js +27 -8
- package/dist/components/ui/layouts/adaptive-layout.js +27 -8
- package/dist/components/ui/layouts/desktop-layout.esm.js +39 -19
- package/dist/components/ui/layouts/desktop-layout.js +39 -19
- package/dist/components/ui/layouts/mobile-layout.esm.js +19 -9
- package/dist/components/ui/layouts/mobile-layout.js +19 -9
- package/dist/components/ui/layouts/tablet-layout.esm.js +28 -14
- package/dist/components/ui/layouts/tablet-layout.js +28 -14
- package/dist/components/ui/mobile-form-validation.esm.js +120 -87
- package/dist/components/ui/mobile-form-validation.js +120 -87
- package/dist/components/ui/mobile-input-demo.esm.js +19 -13
- package/dist/components/ui/mobile-input-demo.js +19 -13
- package/dist/components/ui/mobile-input.esm.js +185 -120
- package/dist/components/ui/mobile-input.js +185 -120
- package/dist/components/ui/mobile-skeleton-loading-demo.esm.js +128 -111
- package/dist/components/ui/mobile-skeleton-loading-demo.js +128 -111
- package/dist/components/ui/navigation/breadcrumb.esm.js +17 -14
- package/dist/components/ui/navigation/breadcrumb.js +17 -14
- package/dist/components/ui/navigation/index.esm.js +0 -1
- package/dist/components/ui/navigation/index.js +0 -1
- package/dist/components/ui/navigation/menu.esm.js +49 -35
- package/dist/components/ui/navigation/menu.js +49 -35
- package/dist/components/ui/navigation/navigation-demo.esm.js +81 -74
- package/dist/components/ui/navigation/navigation-demo.js +81 -74
- package/dist/components/ui/navigation/pagination.esm.js +62 -50
- package/dist/components/ui/navigation/pagination.js +62 -50
- package/dist/components/ui/navigation/sidebar.esm.js +56 -42
- package/dist/components/ui/navigation/sidebar.js +56 -42
- package/dist/components/ui/navigation/stepper.esm.js +34 -23
- package/dist/components/ui/navigation/stepper.js +34 -23
- package/dist/components/ui/navigation/tabs.esm.js +32 -21
- package/dist/components/ui/navigation/tabs.js +32 -21
- package/dist/components/ui/navigation/types.esm.js +196 -195
- package/dist/components/ui/navigation/types.js +196 -195
- package/dist/components/ui/overlay/backdrop.esm.js +17 -16
- package/dist/components/ui/overlay/backdrop.js +17 -16
- package/dist/components/ui/overlay/focus-manager.esm.js +21 -19
- package/dist/components/ui/overlay/focus-manager.js +21 -19
- package/dist/components/ui/overlay/index.esm.js +0 -2
- package/dist/components/ui/overlay/index.js +0 -2
- package/dist/components/ui/overlay/modal.esm.js +38 -34
- package/dist/components/ui/overlay/modal.js +38 -34
- package/dist/components/ui/overlay/overlay-manager.esm.js +25 -20
- package/dist/components/ui/overlay/overlay-manager.js +25 -20
- package/dist/components/ui/overlay/popover.esm.js +74 -58
- package/dist/components/ui/overlay/popover.js +74 -58
- package/dist/components/ui/overlay/portal.esm.js +7 -7
- package/dist/components/ui/overlay/portal.js +7 -7
- package/dist/components/ui/overlay/tooltip.esm.js +54 -39
- package/dist/components/ui/overlay/tooltip.js +54 -39
- package/dist/components/ui/overlay/types.esm.js +132 -131
- package/dist/components/ui/overlay/types.js +132 -131
- package/dist/components/ui/performance-demo.esm.js +135 -88
- package/dist/components/ui/performance-demo.js +135 -88
- package/dist/components/ui/semantic-input-system-demo.esm.js +117 -80
- package/dist/components/ui/semantic-input-system-demo.js +117 -80
- package/dist/components/ui/theme-customizer.esm.js +84 -52
- package/dist/components/ui/theme-customizer.js +84 -52
- package/dist/components/ui/theme-preview.esm.js +95 -43
- package/dist/components/ui/theme-preview.js +95 -43
- package/dist/components/ui/theme-switcher.esm.js +70 -44
- package/dist/components/ui/theme-switcher.js +70 -44
- package/dist/components/ui/theme-toggle.esm.js +3 -3
- package/dist/components/ui/theme-toggle.js +3 -3
- package/dist/components/ui/token-demo.esm.js +33 -21
- package/dist/components/ui/token-demo.js +33 -21
- package/dist/components/ui/touch-demo.esm.js +102 -73
- package/dist/components/ui/touch-demo.js +102 -73
- package/dist/components/ui/touch-friendly-interface-demo.esm.js +102 -64
- package/dist/components/ui/touch-friendly-interface-demo.js +102 -64
- package/dist/components/ui/touch-friendly-interface.esm.js +85 -61
- package/dist/components/ui/touch-friendly-interface.js +85 -61
- package/dist/hooks/use-accessibility-support.esm.js +115 -85
- package/dist/hooks/use-accessibility-support.js +115 -85
- package/dist/hooks/use-adaptive-layout.esm.js +56 -33
- package/dist/hooks/use-adaptive-layout.js +56 -33
- package/dist/hooks/use-advanced-patterns.esm.js +57 -42
- package/dist/hooks/use-advanced-patterns.js +57 -42
- package/dist/hooks/use-advanced-transition-system.esm.js +112 -71
- package/dist/hooks/use-advanced-transition-system.js +112 -71
- package/dist/hooks/use-animation-profile.esm.js +63 -34
- package/dist/hooks/use-animation-profile.js +63 -34
- package/dist/hooks/use-battery-animations.esm.js +80 -55
- package/dist/hooks/use-battery-animations.js +80 -55
- package/dist/hooks/use-battery-conscious-loading.esm.js +166 -123
- package/dist/hooks/use-battery-conscious-loading.js +166 -123
- package/dist/hooks/use-battery-optimization.esm.js +78 -55
- package/dist/hooks/use-battery-optimization.js +78 -55
- package/dist/hooks/use-battery-status.esm.js +73 -51
- package/dist/hooks/use-battery-status.js +73 -51
- package/dist/hooks/use-component-performance.esm.js +62 -47
- package/dist/hooks/use-component-performance.js +62 -47
- package/dist/hooks/use-device-loading-states.esm.js +152 -109
- package/dist/hooks/use-device-loading-states.js +152 -109
- package/dist/hooks/use-device.esm.js +25 -14
- package/dist/hooks/use-device.js +25 -14
- package/dist/hooks/use-enterprise-mobile-experience.esm.js +137 -88
- package/dist/hooks/use-enterprise-mobile-experience.js +137 -88
- package/dist/hooks/use-form-feedback.esm.js +124 -81
- package/dist/hooks/use-form-feedback.js +124 -81
- package/dist/hooks/use-form-performance.esm.js +127 -92
- package/dist/hooks/use-form-performance.js +127 -92
- package/dist/hooks/use-frame-rate.esm.js +56 -37
- package/dist/hooks/use-frame-rate.js +56 -37
- package/dist/hooks/use-gestures.esm.js +96 -72
- package/dist/hooks/use-gestures.js +96 -72
- package/dist/hooks/use-hardware-acceleration.esm.js +65 -37
- package/dist/hooks/use-hardware-acceleration.js +65 -37
- package/dist/hooks/use-input-accessibility.esm.js +157 -119
- package/dist/hooks/use-input-accessibility.js +157 -119
- package/dist/hooks/use-input-performance.esm.js +139 -104
- package/dist/hooks/use-input-performance.js +139 -104
- package/dist/hooks/use-layout-performance.esm.js +50 -29
- package/dist/hooks/use-layout-performance.js +50 -29
- package/dist/hooks/use-loading-accessibility.esm.js +209 -169
- package/dist/hooks/use-loading-accessibility.js +209 -169
- package/dist/hooks/use-loading-performance.esm.js +117 -93
- package/dist/hooks/use-loading-performance.js +117 -93
- package/dist/hooks/use-memory-usage.esm.js +57 -38
- package/dist/hooks/use-memory-usage.js +57 -38
- package/dist/hooks/use-mobile-form-layout.esm.js +111 -74
- package/dist/hooks/use-mobile-form-layout.js +111 -74
- package/dist/hooks/use-mobile-form-validation.esm.js +211 -144
- package/dist/hooks/use-mobile-form-validation.js +211 -144
- package/dist/hooks/use-mobile-keyboard-optimization.esm.js +154 -113
- package/dist/hooks/use-mobile-keyboard-optimization.js +154 -113
- package/dist/hooks/use-mobile-layout.esm.js +73 -51
- package/dist/hooks/use-mobile-layout.js +73 -51
- package/dist/hooks/use-mobile-optimization.esm.js +72 -44
- package/dist/hooks/use-mobile-optimization.js +72 -44
- package/dist/hooks/use-mobile-skeleton.esm.js +97 -64
- package/dist/hooks/use-mobile-skeleton.js +97 -64
- package/dist/hooks/use-mobile-touch.esm.js +128 -93
- package/dist/hooks/use-mobile-touch.js +128 -93
- package/dist/hooks/use-performance-throttling.esm.js +72 -48
- package/dist/hooks/use-performance-throttling.js +72 -48
- package/dist/hooks/use-performance.esm.js +90 -52
- package/dist/hooks/use-performance.js +90 -52
- package/dist/hooks/use-reusable-architecture.esm.js +94 -65
- package/dist/hooks/use-reusable-architecture.js +94 -65
- package/dist/hooks/use-semantic-input-types.esm.js +166 -124
- package/dist/hooks/use-semantic-input-types.js +166 -124
- package/dist/hooks/use-semantic-input.esm.js +178 -126
- package/dist/hooks/use-semantic-input.js +178 -126
- package/dist/hooks/use-tablet-layout.esm.js +67 -38
- package/dist/hooks/use-tablet-layout.js +67 -38
- package/dist/hooks/use-touch-friendly-input.esm.js +193 -149
- package/dist/hooks/use-touch-friendly-input.js +193 -149
- package/dist/hooks/use-touch-friendly-interface.esm.js +99 -67
- package/dist/hooks/use-touch-friendly-interface.js +99 -67
- package/dist/hooks/use-touch-optimization.esm.js +99 -72
- package/dist/hooks/use-touch-optimization.js +99 -72
- package/dist/index.esm.js +157 -281
- package/dist/index.js +157 -281
- package/dist/lib/utils.esm.js +1 -1
- package/dist/lib/utils.js +1 -1
- package/dist/plugins/theme-css-generator.esm.js +104 -55
- package/dist/plugins/theme-css-generator.js +104 -55
- package/dist/provider.esm.js +4 -4
- package/dist/provider.js +4 -4
- package/dist/styles.css +1 -1
- package/dist/theme.esm.js +633 -468
- package/dist/theme.js +633 -468
- package/dist/themes/ThemeContext.esm.js +15 -15
- package/dist/themes/ThemeContext.js +15 -15
- package/dist/themes/ThemeProvider.esm.js +25 -22
- package/dist/themes/ThemeProvider.js +25 -22
- package/dist/themes/accessibility.esm.js +147 -108
- package/dist/themes/accessibility.js +147 -108
- package/dist/themes/aria-patterns.esm.js +198 -162
- package/dist/themes/aria-patterns.js +198 -162
- package/dist/themes/base-themes.esm.js +14 -11
- package/dist/themes/base-themes.js +14 -11
- package/dist/themes/colorManager.esm.js +101 -83
- package/dist/themes/colorManager.js +101 -83
- package/dist/themes/examples/dark-theme.esm.js +133 -103
- package/dist/themes/examples/dark-theme.js +133 -103
- package/dist/themes/examples/minimal-theme.esm.js +83 -61
- package/dist/themes/examples/minimal-theme.js +83 -61
- package/dist/themes/focus-management.esm.js +202 -143
- package/dist/themes/focus-management.js +202 -143
- package/dist/themes/fontLoader.esm.js +28 -19
- package/dist/themes/fontLoader.js +28 -19
- package/dist/themes/high-contrast.esm.js +152 -104
- package/dist/themes/high-contrast.js +152 -104
- package/dist/themes/index.esm.js +1 -1
- package/dist/themes/index.js +1 -1
- package/dist/themes/inheritance.esm.js +35 -27
- package/dist/themes/inheritance.js +35 -27
- package/dist/themes/keyboard-navigation.esm.js +152 -123
- package/dist/themes/keyboard-navigation.js +152 -123
- package/dist/themes/motion-reduction.esm.js +193 -133
- package/dist/themes/motion-reduction.js +193 -133
- package/dist/themes/navigation.esm.js +146 -146
- package/dist/themes/navigation.js +146 -146
- package/dist/themes/screen-reader.esm.js +159 -94
- package/dist/themes/screen-reader.js +159 -94
- package/dist/themes/systemThemeDetector.esm.js +42 -34
- package/dist/themes/systemThemeDetector.js +42 -34
- package/dist/themes/themeCSSUpdater.esm.js +21 -9
- package/dist/themes/themeCSSUpdater.js +21 -9
- package/dist/themes/themePersistence.esm.js +68 -47
- package/dist/themes/themePersistence.js +68 -47
- package/dist/themes/themes/stan-design.esm.js +633 -468
- package/dist/themes/themes/stan-design.js +633 -468
- package/dist/themes/types.esm.js +301 -287
- package/dist/themes/types.js +301 -287
- package/dist/themes/useSystemTheme.esm.js +4 -4
- package/dist/themes/useSystemTheme.js +4 -4
- package/dist/themes/useTheme.esm.js +4 -4
- package/dist/themes/useTheme.js +4 -4
- package/dist/themes/validation.esm.js +128 -77
- package/dist/themes/validation.js +128 -77
- package/dist/tokens/index.esm.js +1 -2
- package/dist/tokens/index.js +1 -2
- package/dist/tokens/tokenExporter.esm.js +87 -61
- package/dist/tokens/tokenExporter.js +87 -61
- package/dist/tokens/tokenGenerator.esm.js +86 -77
- package/dist/tokens/tokenGenerator.js +86 -77
- package/dist/tokens/tokenManager.esm.js +64 -51
- package/dist/tokens/tokenManager.js +64 -51
- package/dist/tokens/tokenValidator.esm.js +193 -147
- package/dist/tokens/tokenValidator.js +193 -147
- package/dist/tokens/types.esm.js +49 -35
- package/dist/tokens/types.js +49 -35
- package/dist/utils/bundle-analyzer.esm.js +83 -65
- package/dist/utils/bundle-analyzer.js +83 -65
- package/dist/utils/bundle-splitting.esm.js +142 -117
- package/dist/utils/bundle-splitting.js +142 -117
- package/dist/utils/lazy-loading.esm.js +132 -106
- package/dist/utils/lazy-loading.js +132 -106
- package/dist/utils/performance-monitor.esm.js +170 -129
- package/dist/utils/performance-monitor.js +170 -129
- package/dist/utils/tree-shaking.esm.js +69 -61
- package/dist/utils/tree-shaking.js +69 -61
- package/package.json +1 -1
- package/src/index.ts +146 -146
|
@@ -1,33 +1,44 @@
|
|
|
1
1
|
import { useState, useCallback, useRef, useEffect, ReactNode, ComponentType } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface AdvancedPatternsConfig {
|
|
4
|
-
enableCompoundComponents
|
|
4
|
+
enableCompoundComponents?: boolean
|
|
5
|
+
enableRenderProps?: boolean
|
|
6
|
+
enableHigherOrderComponents?: boolean
|
|
7
|
+
enableCustomHooks?: boolean
|
|
8
|
+
enablePerformanceOptimization?: boolean
|
|
9
|
+
enableAccessibilitySupport?: boolean
|
|
10
|
+
}
|
|
5
11
|
|
|
6
12
|
export interface CompoundComponentContext {
|
|
7
|
-
registerComponent, component) => void
|
|
8
|
-
unregisterComponent) => void
|
|
9
|
-
getComponent) => ReactNode | undefined
|
|
10
|
-
getAllComponents) => ReactNode[]
|
|
13
|
+
registerComponent: (id: string, component: ReactNode) => void
|
|
14
|
+
unregisterComponent: (id: string) => void
|
|
15
|
+
getComponent: (id: string) => ReactNode | undefined
|
|
16
|
+
getAllComponents: () => ReactNode[]
|
|
11
17
|
}
|
|
12
18
|
|
|
13
19
|
export interface RenderPropsConfig<T = any> {
|
|
14
|
-
data
|
|
15
|
-
|
|
20
|
+
data: T
|
|
21
|
+
loading: boolean
|
|
22
|
+
error: Error | null
|
|
23
|
+
render: (props: T) => ReactNode
|
|
24
|
+
fallback?: ReactNode
|
|
25
|
+
}
|
|
16
26
|
|
|
17
27
|
export interface HigherOrderComponentConfig {
|
|
18
|
-
component
|
|
19
|
-
|
|
28
|
+
component: ComponentType<any>
|
|
29
|
+
props: Record<string, any>
|
|
30
|
+
enhancers: Array<(Component: ComponentType<any>) => ComponentType<any>>
|
|
20
31
|
}
|
|
21
32
|
|
|
22
33
|
export interface AdvancedPatternsCallbacks {
|
|
23
|
-
onPatternApplied
|
|
24
|
-
onPerformanceOptimized
|
|
25
|
-
onAccessibilityEnhanced
|
|
34
|
+
onPatternApplied?: (pattern: string, component: string) => void
|
|
35
|
+
onPerformanceOptimized?: (optimization: string) => void
|
|
36
|
+
onAccessibilityEnhanced?: (feature: string) => void
|
|
26
37
|
}
|
|
27
38
|
|
|
28
39
|
export const useAdvancedPatterns = (
|
|
29
|
-
config= {},
|
|
30
|
-
callbacks= {}
|
|
40
|
+
config: AdvancedPatternsConfig = {},
|
|
41
|
+
callbacks: AdvancedPatternsCallbacks = {}
|
|
31
42
|
) => {
|
|
32
43
|
const {
|
|
33
44
|
enableCompoundComponents = true,
|
|
@@ -45,8 +56,8 @@ export const useAdvancedPatterns = (
|
|
|
45
56
|
|
|
46
57
|
// Compound Components Pattern
|
|
47
58
|
const createCompoundComponent = useCallback((
|
|
48
|
-
baseComponent
|
|
49
|
-
subComponents, ComponentType<any>>
|
|
59
|
+
baseComponent: ComponentType<any>,
|
|
60
|
+
subComponents: Record<string, ComponentType<any>>
|
|
50
61
|
) => {
|
|
51
62
|
if (!enableCompoundComponents) return baseComponent
|
|
52
63
|
|
|
@@ -60,31 +71,33 @@ export const useAdvancedPatterns = (
|
|
|
60
71
|
|
|
61
72
|
// Render Props Pattern
|
|
62
73
|
const createRenderPropsComponent = useCallback(<T,>(
|
|
63
|
-
config
|
|
74
|
+
config: RenderPropsConfig<T>
|
|
75
|
+
) => {
|
|
64
76
|
if (!enableRenderProps) return null
|
|
65
77
|
|
|
66
78
|
const { data, loading, error, render, fallback } = config
|
|
67
79
|
|
|
68
80
|
if (loading) {
|
|
69
|
-
return { type, fallback }
|
|
81
|
+
return { type: 'loading', fallback }
|
|
70
82
|
}
|
|
71
83
|
|
|
72
84
|
if (error) {
|
|
73
|
-
return { type, message}
|
|
85
|
+
return { type: 'error', message: error.message }
|
|
74
86
|
}
|
|
75
87
|
|
|
76
88
|
setPatterns(prev => [...prev, 'Render Props'])
|
|
77
89
|
callbacks.onPatternApplied?.('Render Props', 'RenderPropsComponent')
|
|
78
90
|
|
|
79
|
-
return { type, data, render }
|
|
91
|
+
return { type: 'success', data, render }
|
|
80
92
|
}, [enableRenderProps, callbacks])
|
|
81
93
|
|
|
82
94
|
// Higher-Order Component Pattern
|
|
83
95
|
const createHigherOrderComponent = useCallback((
|
|
84
|
-
config
|
|
96
|
+
config: HigherOrderComponentConfig
|
|
97
|
+
) => {
|
|
85
98
|
if (!enableHigherOrderComponents) return config.component
|
|
86
99
|
|
|
87
|
-
const { component, props, enhancers } = config
|
|
100
|
+
const { component: Component, props, enhancers } = config
|
|
88
101
|
|
|
89
102
|
let EnhancedComponent = Component
|
|
90
103
|
|
|
@@ -95,13 +108,13 @@ export const useAdvancedPatterns = (
|
|
|
95
108
|
setPatterns(prev => [...prev, 'Higher-Order Components'])
|
|
96
109
|
callbacks.onPatternApplied?.('Higher-Order Components', Component.displayName || 'Unknown')
|
|
97
110
|
|
|
98
|
-
return { component, props, enhanced}
|
|
111
|
+
return { component: EnhancedComponent, props, enhanced: true }
|
|
99
112
|
}, [enableHigherOrderComponents, callbacks])
|
|
100
113
|
|
|
101
114
|
// Custom Hooks Pattern
|
|
102
115
|
const createCustomHook = useCallback(<T>(
|
|
103
|
-
hookName,
|
|
104
|
-
hookLogic) => T
|
|
116
|
+
hookName: string,
|
|
117
|
+
hookLogic: () => T
|
|
105
118
|
) => {
|
|
106
119
|
if (!enableCustomHooks) return hookLogic()
|
|
107
120
|
|
|
@@ -113,8 +126,9 @@ export const useAdvancedPatterns = (
|
|
|
113
126
|
|
|
114
127
|
// Performance Optimization
|
|
115
128
|
const optimizeComponent = useCallback((
|
|
116
|
-
componentId,
|
|
117
|
-
optimizationType
|
|
129
|
+
componentId: string,
|
|
130
|
+
optimizationType: 'memoization' | 'lazy-loading' | 'virtualization'
|
|
131
|
+
) => {
|
|
118
132
|
if (!enablePerformanceOptimization) return
|
|
119
133
|
|
|
120
134
|
setIsOptimizing(true)
|
|
@@ -129,8 +143,9 @@ export const useAdvancedPatterns = (
|
|
|
129
143
|
|
|
130
144
|
// Accessibility Enhancement
|
|
131
145
|
const enhanceAccessibility = useCallback((
|
|
132
|
-
componentId,
|
|
133
|
-
feature
|
|
146
|
+
componentId: string,
|
|
147
|
+
feature: 'aria' | 'keyboard' | 'screen-reader' | 'focus'
|
|
148
|
+
) => {
|
|
134
149
|
if (!enableAccessibilitySupport) return
|
|
135
150
|
|
|
136
151
|
const enhancement = `${feature} accessibility enhanced for ${componentId}`
|
|
@@ -139,15 +154,15 @@ export const useAdvancedPatterns = (
|
|
|
139
154
|
}, [enableAccessibilitySupport, callbacks])
|
|
140
155
|
|
|
141
156
|
// Component Registry
|
|
142
|
-
const registerComponent = useCallback((id, component) => {
|
|
157
|
+
const registerComponent = useCallback((id: string, component: ReactNode) => {
|
|
143
158
|
componentsRef.current.set(id, component)
|
|
144
159
|
}, [])
|
|
145
160
|
|
|
146
|
-
const unregisterComponent = useCallback((id) => {
|
|
161
|
+
const unregisterComponent = useCallback((id: string) => {
|
|
147
162
|
componentsRef.current.delete(id)
|
|
148
163
|
}, [])
|
|
149
164
|
|
|
150
|
-
const getComponent = useCallback((id) => {
|
|
165
|
+
const getComponent = useCallback((id: string) => {
|
|
151
166
|
return componentsRef.current.get(id)
|
|
152
167
|
}, [])
|
|
153
168
|
|
|
@@ -156,7 +171,7 @@ export const useAdvancedPatterns = (
|
|
|
156
171
|
}, [])
|
|
157
172
|
|
|
158
173
|
// Performance Monitoring
|
|
159
|
-
const measurePerformance = useCallback((componentId, operation) => {
|
|
174
|
+
const measurePerformance = useCallback((componentId: string, operation: string) => {
|
|
160
175
|
const startTime = performance.now()
|
|
161
176
|
|
|
162
177
|
return () => {
|
|
@@ -174,10 +189,10 @@ export const useAdvancedPatterns = (
|
|
|
174
189
|
}, {} as Record<string, number>)
|
|
175
190
|
|
|
176
191
|
return {
|
|
177
|
-
totalPatterns,
|
|
192
|
+
totalPatterns: patterns.length,
|
|
178
193
|
patternCounts,
|
|
179
|
-
uniquePatterns).length,
|
|
180
|
-
performanceMetrics)
|
|
194
|
+
uniquePatterns: Object.keys(patternCounts).length,
|
|
195
|
+
performanceMetrics: Object.fromEntries(performanceMetricsRef.current)
|
|
181
196
|
}
|
|
182
197
|
}, [patterns])
|
|
183
198
|
|
|
@@ -211,9 +226,9 @@ export const useAdvancedPatterns = (
|
|
|
211
226
|
// Pattern Validation
|
|
212
227
|
const validatePatterns = useCallback(() => {
|
|
213
228
|
const validation = {
|
|
214
|
-
isValid,
|
|
215
|
-
errors] as string[],
|
|
216
|
-
warnings] as string[]
|
|
229
|
+
isValid: true,
|
|
230
|
+
errors: [] as string[],
|
|
231
|
+
warnings: [] as string[]
|
|
217
232
|
}
|
|
218
233
|
|
|
219
234
|
// Check for pattern conflicts
|
|
@@ -270,9 +285,9 @@ export const useAdvancedPatterns = (
|
|
|
270
285
|
validatePatterns,
|
|
271
286
|
|
|
272
287
|
// Utility functions
|
|
273
|
-
hasPattern) => patterns.includes(pattern),
|
|
274
|
-
getPatternCount) => patterns.filter(p => p === pattern).length,
|
|
275
|
-
clearPatterns) => setPatterns([])
|
|
288
|
+
hasPattern: (pattern: string) => patterns.includes(pattern),
|
|
289
|
+
getPatternCount: (pattern: string) => patterns.filter(p => p === pattern).length,
|
|
290
|
+
clearPatterns: () => setPatterns([])
|
|
276
291
|
}
|
|
277
292
|
}
|
|
278
293
|
|
|
@@ -1,33 +1,44 @@
|
|
|
1
1
|
import { useState, useCallback, useRef, useEffect, ReactNode, ComponentType } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface AdvancedPatternsConfig {
|
|
4
|
-
enableCompoundComponents
|
|
4
|
+
enableCompoundComponents?: boolean
|
|
5
|
+
enableRenderProps?: boolean
|
|
6
|
+
enableHigherOrderComponents?: boolean
|
|
7
|
+
enableCustomHooks?: boolean
|
|
8
|
+
enablePerformanceOptimization?: boolean
|
|
9
|
+
enableAccessibilitySupport?: boolean
|
|
10
|
+
}
|
|
5
11
|
|
|
6
12
|
export interface CompoundComponentContext {
|
|
7
|
-
registerComponent, component) => void
|
|
8
|
-
unregisterComponent) => void
|
|
9
|
-
getComponent) => ReactNode | undefined
|
|
10
|
-
getAllComponents) => ReactNode[]
|
|
13
|
+
registerComponent: (id: string, component: ReactNode) => void
|
|
14
|
+
unregisterComponent: (id: string) => void
|
|
15
|
+
getComponent: (id: string) => ReactNode | undefined
|
|
16
|
+
getAllComponents: () => ReactNode[]
|
|
11
17
|
}
|
|
12
18
|
|
|
13
19
|
export interface RenderPropsConfig<T = any> {
|
|
14
|
-
data
|
|
15
|
-
|
|
20
|
+
data: T
|
|
21
|
+
loading: boolean
|
|
22
|
+
error: Error | null
|
|
23
|
+
render: (props: T) => ReactNode
|
|
24
|
+
fallback?: ReactNode
|
|
25
|
+
}
|
|
16
26
|
|
|
17
27
|
export interface HigherOrderComponentConfig {
|
|
18
|
-
component
|
|
19
|
-
|
|
28
|
+
component: ComponentType<any>
|
|
29
|
+
props: Record<string, any>
|
|
30
|
+
enhancers: Array<(Component: ComponentType<any>) => ComponentType<any>>
|
|
20
31
|
}
|
|
21
32
|
|
|
22
33
|
export interface AdvancedPatternsCallbacks {
|
|
23
|
-
onPatternApplied
|
|
24
|
-
onPerformanceOptimized
|
|
25
|
-
onAccessibilityEnhanced
|
|
34
|
+
onPatternApplied?: (pattern: string, component: string) => void
|
|
35
|
+
onPerformanceOptimized?: (optimization: string) => void
|
|
36
|
+
onAccessibilityEnhanced?: (feature: string) => void
|
|
26
37
|
}
|
|
27
38
|
|
|
28
39
|
export const useAdvancedPatterns = (
|
|
29
|
-
config= {},
|
|
30
|
-
callbacks= {}
|
|
40
|
+
config: AdvancedPatternsConfig = {},
|
|
41
|
+
callbacks: AdvancedPatternsCallbacks = {}
|
|
31
42
|
) => {
|
|
32
43
|
const {
|
|
33
44
|
enableCompoundComponents = true,
|
|
@@ -45,8 +56,8 @@ export const useAdvancedPatterns = (
|
|
|
45
56
|
|
|
46
57
|
// Compound Components Pattern
|
|
47
58
|
const createCompoundComponent = useCallback((
|
|
48
|
-
baseComponent
|
|
49
|
-
subComponents, ComponentType<any>>
|
|
59
|
+
baseComponent: ComponentType<any>,
|
|
60
|
+
subComponents: Record<string, ComponentType<any>>
|
|
50
61
|
) => {
|
|
51
62
|
if (!enableCompoundComponents) return baseComponent
|
|
52
63
|
|
|
@@ -60,31 +71,33 @@ export const useAdvancedPatterns = (
|
|
|
60
71
|
|
|
61
72
|
// Render Props Pattern
|
|
62
73
|
const createRenderPropsComponent = useCallback(<T,>(
|
|
63
|
-
config
|
|
74
|
+
config: RenderPropsConfig<T>
|
|
75
|
+
) => {
|
|
64
76
|
if (!enableRenderProps) return null
|
|
65
77
|
|
|
66
78
|
const { data, loading, error, render, fallback } = config
|
|
67
79
|
|
|
68
80
|
if (loading) {
|
|
69
|
-
return { type, fallback }
|
|
81
|
+
return { type: 'loading', fallback }
|
|
70
82
|
}
|
|
71
83
|
|
|
72
84
|
if (error) {
|
|
73
|
-
return { type, message}
|
|
85
|
+
return { type: 'error', message: error.message }
|
|
74
86
|
}
|
|
75
87
|
|
|
76
88
|
setPatterns(prev => [...prev, 'Render Props'])
|
|
77
89
|
callbacks.onPatternApplied?.('Render Props', 'RenderPropsComponent')
|
|
78
90
|
|
|
79
|
-
return { type, data, render }
|
|
91
|
+
return { type: 'success', data, render }
|
|
80
92
|
}, [enableRenderProps, callbacks])
|
|
81
93
|
|
|
82
94
|
// Higher-Order Component Pattern
|
|
83
95
|
const createHigherOrderComponent = useCallback((
|
|
84
|
-
config
|
|
96
|
+
config: HigherOrderComponentConfig
|
|
97
|
+
) => {
|
|
85
98
|
if (!enableHigherOrderComponents) return config.component
|
|
86
99
|
|
|
87
|
-
const { component, props, enhancers } = config
|
|
100
|
+
const { component: Component, props, enhancers } = config
|
|
88
101
|
|
|
89
102
|
let EnhancedComponent = Component
|
|
90
103
|
|
|
@@ -95,13 +108,13 @@ export const useAdvancedPatterns = (
|
|
|
95
108
|
setPatterns(prev => [...prev, 'Higher-Order Components'])
|
|
96
109
|
callbacks.onPatternApplied?.('Higher-Order Components', Component.displayName || 'Unknown')
|
|
97
110
|
|
|
98
|
-
return { component, props, enhanced}
|
|
111
|
+
return { component: EnhancedComponent, props, enhanced: true }
|
|
99
112
|
}, [enableHigherOrderComponents, callbacks])
|
|
100
113
|
|
|
101
114
|
// Custom Hooks Pattern
|
|
102
115
|
const createCustomHook = useCallback(<T>(
|
|
103
|
-
hookName,
|
|
104
|
-
hookLogic) => T
|
|
116
|
+
hookName: string,
|
|
117
|
+
hookLogic: () => T
|
|
105
118
|
) => {
|
|
106
119
|
if (!enableCustomHooks) return hookLogic()
|
|
107
120
|
|
|
@@ -113,8 +126,9 @@ export const useAdvancedPatterns = (
|
|
|
113
126
|
|
|
114
127
|
// Performance Optimization
|
|
115
128
|
const optimizeComponent = useCallback((
|
|
116
|
-
componentId,
|
|
117
|
-
optimizationType
|
|
129
|
+
componentId: string,
|
|
130
|
+
optimizationType: 'memoization' | 'lazy-loading' | 'virtualization'
|
|
131
|
+
) => {
|
|
118
132
|
if (!enablePerformanceOptimization) return
|
|
119
133
|
|
|
120
134
|
setIsOptimizing(true)
|
|
@@ -129,8 +143,9 @@ export const useAdvancedPatterns = (
|
|
|
129
143
|
|
|
130
144
|
// Accessibility Enhancement
|
|
131
145
|
const enhanceAccessibility = useCallback((
|
|
132
|
-
componentId,
|
|
133
|
-
feature
|
|
146
|
+
componentId: string,
|
|
147
|
+
feature: 'aria' | 'keyboard' | 'screen-reader' | 'focus'
|
|
148
|
+
) => {
|
|
134
149
|
if (!enableAccessibilitySupport) return
|
|
135
150
|
|
|
136
151
|
const enhancement = `${feature} accessibility enhanced for ${componentId}`
|
|
@@ -139,15 +154,15 @@ export const useAdvancedPatterns = (
|
|
|
139
154
|
}, [enableAccessibilitySupport, callbacks])
|
|
140
155
|
|
|
141
156
|
// Component Registry
|
|
142
|
-
const registerComponent = useCallback((id, component) => {
|
|
157
|
+
const registerComponent = useCallback((id: string, component: ReactNode) => {
|
|
143
158
|
componentsRef.current.set(id, component)
|
|
144
159
|
}, [])
|
|
145
160
|
|
|
146
|
-
const unregisterComponent = useCallback((id) => {
|
|
161
|
+
const unregisterComponent = useCallback((id: string) => {
|
|
147
162
|
componentsRef.current.delete(id)
|
|
148
163
|
}, [])
|
|
149
164
|
|
|
150
|
-
const getComponent = useCallback((id) => {
|
|
165
|
+
const getComponent = useCallback((id: string) => {
|
|
151
166
|
return componentsRef.current.get(id)
|
|
152
167
|
}, [])
|
|
153
168
|
|
|
@@ -156,7 +171,7 @@ export const useAdvancedPatterns = (
|
|
|
156
171
|
}, [])
|
|
157
172
|
|
|
158
173
|
// Performance Monitoring
|
|
159
|
-
const measurePerformance = useCallback((componentId, operation) => {
|
|
174
|
+
const measurePerformance = useCallback((componentId: string, operation: string) => {
|
|
160
175
|
const startTime = performance.now()
|
|
161
176
|
|
|
162
177
|
return () => {
|
|
@@ -174,10 +189,10 @@ export const useAdvancedPatterns = (
|
|
|
174
189
|
}, {} as Record<string, number>)
|
|
175
190
|
|
|
176
191
|
return {
|
|
177
|
-
totalPatterns,
|
|
192
|
+
totalPatterns: patterns.length,
|
|
178
193
|
patternCounts,
|
|
179
|
-
uniquePatterns).length,
|
|
180
|
-
performanceMetrics)
|
|
194
|
+
uniquePatterns: Object.keys(patternCounts).length,
|
|
195
|
+
performanceMetrics: Object.fromEntries(performanceMetricsRef.current)
|
|
181
196
|
}
|
|
182
197
|
}, [patterns])
|
|
183
198
|
|
|
@@ -211,9 +226,9 @@ export const useAdvancedPatterns = (
|
|
|
211
226
|
// Pattern Validation
|
|
212
227
|
const validatePatterns = useCallback(() => {
|
|
213
228
|
const validation = {
|
|
214
|
-
isValid,
|
|
215
|
-
errors] as string[],
|
|
216
|
-
warnings] as string[]
|
|
229
|
+
isValid: true,
|
|
230
|
+
errors: [] as string[],
|
|
231
|
+
warnings: [] as string[]
|
|
217
232
|
}
|
|
218
233
|
|
|
219
234
|
// Check for pattern conflicts
|
|
@@ -270,9 +285,9 @@ export const useAdvancedPatterns = (
|
|
|
270
285
|
validatePatterns,
|
|
271
286
|
|
|
272
287
|
// Utility functions
|
|
273
|
-
hasPattern) => patterns.includes(pattern),
|
|
274
|
-
getPatternCount) => patterns.filter(p => p === pattern).length,
|
|
275
|
-
clearPatterns) => setPatterns([])
|
|
288
|
+
hasPattern: (pattern: string) => patterns.includes(pattern),
|
|
289
|
+
getPatternCount: (pattern: string) => patterns.filter(p => p === pattern).length,
|
|
290
|
+
clearPatterns: () => setPatterns([])
|
|
276
291
|
}
|
|
277
292
|
}
|
|
278
293
|
|