@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
|
@@ -3,11 +3,11 @@ import { OverlayManagerProps, OverlayState, OverlayAction } from './types';
|
|
|
3
3
|
|
|
4
4
|
// Overlay context for managing global overlay state
|
|
5
5
|
interface OverlayContextType {
|
|
6
|
-
overlays];
|
|
7
|
-
addOverlay, zIndex) => void;
|
|
8
|
-
removeOverlay) => void;
|
|
9
|
-
getTopZIndex) => number;
|
|
10
|
-
isOverlayActive) => boolean;
|
|
6
|
+
overlays: OverlayState[];
|
|
7
|
+
addOverlay: (id: string, zIndex: number) => void;
|
|
8
|
+
removeOverlay: (id: string) => void;
|
|
9
|
+
getTopZIndex: () => number;
|
|
10
|
+
isOverlayActive: (id: string) => boolean;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
const OverlayContext = createContext<OverlayContextType | undefined>(undefined);
|
|
@@ -22,31 +22,36 @@ export const useOverlayManager = () => {
|
|
|
22
22
|
};
|
|
23
23
|
|
|
24
24
|
// Overlay reducer for state management
|
|
25
|
-
const overlayReducer = (state], action)] => {
|
|
25
|
+
const overlayReducer = (state: OverlayState[], action: OverlayAction): OverlayState[] => {
|
|
26
26
|
switch (action.type) {
|
|
27
|
-
case 'ADD_OVERLAY'
|
|
27
|
+
case 'ADD_OVERLAY':
|
|
28
|
+
return [...state, { id: action.payload.id, zIndex: action.payload.zIndex || 1000 }];
|
|
28
29
|
|
|
29
|
-
case 'REMOVE_OVERLAY'
|
|
30
|
+
case 'REMOVE_OVERLAY':
|
|
31
|
+
return state.filter(overlay => overlay.id !== action.payload.id);
|
|
30
32
|
|
|
31
|
-
case 'UPDATE_Z_INDEX'
|
|
33
|
+
case 'UPDATE_Z_INDEX':
|
|
34
|
+
return state.map(overlay =>
|
|
32
35
|
overlay.id === action.payload.id
|
|
33
|
-
? { ...overlay, zIndex}
|
|
34
|
-
|
|
36
|
+
? { ...overlay, zIndex: action.payload.zIndex || overlay.zIndex }
|
|
37
|
+
: overlay
|
|
38
|
+
);
|
|
35
39
|
|
|
36
|
-
default
|
|
40
|
+
default:
|
|
41
|
+
return state;
|
|
37
42
|
}
|
|
38
43
|
};
|
|
39
44
|
|
|
40
45
|
// Overlay provider component
|
|
41
|
-
export const OverlayProvider}> = ({ children }) => {
|
|
46
|
+
export const OverlayProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
|
|
42
47
|
const [overlays, dispatch] = useReducer(overlayReducer, []);
|
|
43
48
|
|
|
44
|
-
const addOverlay = useCallback((id, zIndex) => {
|
|
45
|
-
dispatch({ type, payload, zIndex } });
|
|
49
|
+
const addOverlay = useCallback((id: string, zIndex: number) => {
|
|
50
|
+
dispatch({ type: 'ADD_OVERLAY', payload: { id, zIndex } });
|
|
46
51
|
}, []);
|
|
47
52
|
|
|
48
|
-
const removeOverlay = useCallback((id) => {
|
|
49
|
-
dispatch({ type, payload} });
|
|
53
|
+
const removeOverlay = useCallback((id: string) => {
|
|
54
|
+
dispatch({ type: 'REMOVE_OVERLAY', payload: { id } });
|
|
50
55
|
}, []);
|
|
51
56
|
|
|
52
57
|
const getTopZIndex = useCallback(() => {
|
|
@@ -54,11 +59,11 @@ export const OverlayProvider}> = ({ children }) => {
|
|
|
54
59
|
return Math.max(...overlays.map(o => o.zIndex)) + 1;
|
|
55
60
|
}, [overlays]);
|
|
56
61
|
|
|
57
|
-
const isOverlayActive = useCallback((id) => {
|
|
62
|
+
const isOverlayActive = useCallback((id: string) => {
|
|
58
63
|
return overlays.some(overlay => overlay.id === id);
|
|
59
64
|
}, [overlays]);
|
|
60
65
|
|
|
61
|
-
const value= {
|
|
66
|
+
const value: OverlayContextType = {
|
|
62
67
|
overlays,
|
|
63
68
|
addOverlay,
|
|
64
69
|
removeOverlay,
|
|
@@ -74,7 +79,7 @@ export const OverlayProvider}> = ({ children }) => {
|
|
|
74
79
|
};
|
|
75
80
|
|
|
76
81
|
// Overlay manager component for direct usage
|
|
77
|
-
export const OverlayManager= ({
|
|
82
|
+
export const OverlayManager: React.FC<OverlayManagerProps> = ({
|
|
78
83
|
children,
|
|
79
84
|
maxOverlays = 10,
|
|
80
85
|
onOverlayChange
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
} from './types';
|
|
12
12
|
|
|
13
13
|
// SVG Icons
|
|
14
|
-
const XMarkIcon}> = ({ className = 'w-5 h-5' }) => (
|
|
14
|
+
const XMarkIcon: React.FC<{ className?: string }> = ({ className = 'w-5 h-5' }) => (
|
|
15
15
|
<svg className={className} fill="none" viewBox="0 0 24 24" strokeWidth={1.5} stroke="currentColor">
|
|
16
16
|
<path strokeLinecap="round" strokeLinejoin="round" d="M6 18L18 6M6 6l12 12" />
|
|
17
17
|
</svg>
|
|
@@ -19,19 +19,19 @@ const XMarkIcon}> = ({ className = 'w-5 h-5' }) => (
|
|
|
19
19
|
|
|
20
20
|
// Default color fallbacks
|
|
21
21
|
const getDefaultColors = () => ({
|
|
22
|
-
surface, surface, border, divider},
|
|
23
|
-
text, secondary, muted, inverse},
|
|
24
|
-
interactive, active, focus, disabled},
|
|
25
|
-
primary, 600},
|
|
26
|
-
semantic, warning, error, info}
|
|
22
|
+
surface: { background: '#ffffff', surface: '#f9fafb', border: '#e5e7eb', divider: '#e5e7eb' },
|
|
23
|
+
text: { primary: '#111827', secondary: '#6b7280', muted: '#9ca3af', inverse: '#ffffff' },
|
|
24
|
+
interactive: { hover: '#f3f4f6', active: '#e5e7eb', focus: '#3b82f6', disabled: '#d1d5db' },
|
|
25
|
+
primary: { 500: '#3b82f6', 600: '#2563eb' },
|
|
26
|
+
semantic: { success: '#10b981', warning: '#f59e0b', error: '#ef4444', info: '#3b82f6' }
|
|
27
27
|
});
|
|
28
28
|
|
|
29
29
|
// Position calculations utility (similar to tooltip but adjusted for larger content)
|
|
30
30
|
const calculatePosition = (
|
|
31
|
-
triggerRect,
|
|
32
|
-
popoverRect,
|
|
33
|
-
position] = 'bottom',
|
|
34
|
-
offset= 8
|
|
31
|
+
triggerRect: DOMRect,
|
|
32
|
+
popoverRect: DOMRect,
|
|
33
|
+
position: PopoverProps['position'] = 'bottom',
|
|
34
|
+
offset: number = 8
|
|
35
35
|
) => {
|
|
36
36
|
const scrollX = window.scrollX || document.documentElement.scrollLeft;
|
|
37
37
|
const scrollY = window.scrollY || document.documentElement.scrollTop;
|
|
@@ -44,40 +44,52 @@ const calculatePosition = (
|
|
|
44
44
|
const triggerCenterY = triggerRect.top + triggerRect.height / 2;
|
|
45
45
|
|
|
46
46
|
switch (position) {
|
|
47
|
-
case 'top'
|
|
47
|
+
case 'top':
|
|
48
|
+
top = triggerRect.top - popoverRect.height - offset;
|
|
48
49
|
left = triggerCenterX - popoverRect.width / 2;
|
|
49
50
|
break;
|
|
50
|
-
case 'top-start'
|
|
51
|
+
case 'top-start':
|
|
52
|
+
top = triggerRect.top - popoverRect.height - offset;
|
|
51
53
|
left = triggerRect.left;
|
|
52
54
|
break;
|
|
53
|
-
case 'top-end'
|
|
55
|
+
case 'top-end':
|
|
56
|
+
top = triggerRect.top - popoverRect.height - offset;
|
|
54
57
|
left = triggerRect.right - popoverRect.width;
|
|
55
58
|
break;
|
|
56
|
-
case 'bottom'
|
|
59
|
+
case 'bottom':
|
|
60
|
+
top = triggerRect.bottom + offset;
|
|
57
61
|
left = triggerCenterX - popoverRect.width / 2;
|
|
58
62
|
break;
|
|
59
|
-
case 'bottom-start'
|
|
63
|
+
case 'bottom-start':
|
|
64
|
+
top = triggerRect.bottom + offset;
|
|
60
65
|
left = triggerRect.left;
|
|
61
66
|
break;
|
|
62
|
-
case 'bottom-end'
|
|
67
|
+
case 'bottom-end':
|
|
68
|
+
top = triggerRect.bottom + offset;
|
|
63
69
|
left = triggerRect.right - popoverRect.width;
|
|
64
70
|
break;
|
|
65
|
-
case 'left'
|
|
71
|
+
case 'left':
|
|
72
|
+
top = triggerCenterY - popoverRect.height / 2;
|
|
66
73
|
left = triggerRect.left - popoverRect.width - offset;
|
|
67
74
|
break;
|
|
68
|
-
case 'left-start'
|
|
75
|
+
case 'left-start':
|
|
76
|
+
top = triggerRect.top;
|
|
69
77
|
left = triggerRect.left - popoverRect.width - offset;
|
|
70
78
|
break;
|
|
71
|
-
case 'left-end'
|
|
79
|
+
case 'left-end':
|
|
80
|
+
top = triggerRect.bottom - popoverRect.height;
|
|
72
81
|
left = triggerRect.left - popoverRect.width - offset;
|
|
73
82
|
break;
|
|
74
|
-
case 'right'
|
|
83
|
+
case 'right':
|
|
84
|
+
top = triggerCenterY - popoverRect.height / 2;
|
|
75
85
|
left = triggerRect.right + offset;
|
|
76
86
|
break;
|
|
77
|
-
case 'right-start'
|
|
87
|
+
case 'right-start':
|
|
88
|
+
top = triggerRect.top;
|
|
78
89
|
left = triggerRect.right + offset;
|
|
79
90
|
break;
|
|
80
|
-
case 'right-end'
|
|
91
|
+
case 'right-end':
|
|
92
|
+
top = triggerRect.bottom - popoverRect.height;
|
|
81
93
|
left = triggerRect.right + offset;
|
|
82
94
|
break;
|
|
83
95
|
}
|
|
@@ -101,14 +113,16 @@ const calculatePosition = (
|
|
|
101
113
|
}
|
|
102
114
|
|
|
103
115
|
return {
|
|
104
|
-
top,
|
|
105
|
-
left
|
|
116
|
+
top: top + scrollY,
|
|
117
|
+
left: left + scrollX
|
|
118
|
+
};
|
|
106
119
|
};
|
|
107
120
|
|
|
108
121
|
// Arrow component for popovers
|
|
109
|
-
const PopoverArrow
|
|
110
|
-
|
|
111
|
-
|
|
122
|
+
const PopoverArrow: React.FC<{
|
|
123
|
+
position: PopoverProps['position'];
|
|
124
|
+
colors: any;
|
|
125
|
+
className?: string;
|
|
112
126
|
}> = ({ className = '' }) => {
|
|
113
127
|
return (
|
|
114
128
|
<div className={`popover__arrow ${className}`} />
|
|
@@ -116,7 +130,7 @@ const PopoverArrow];
|
|
|
116
130
|
};
|
|
117
131
|
|
|
118
132
|
// Popover Content Component
|
|
119
|
-
export const PopoverContent= ({
|
|
133
|
+
export const PopoverContent: React.FC<PopoverContentProps> = ({
|
|
120
134
|
children,
|
|
121
135
|
className = '',
|
|
122
136
|
style = {}
|
|
@@ -129,7 +143,7 @@ export const PopoverContent= ({
|
|
|
129
143
|
};
|
|
130
144
|
|
|
131
145
|
// Popover Header Component
|
|
132
|
-
export const PopoverHeader= ({
|
|
146
|
+
export const PopoverHeader: React.FC<PopoverHeaderProps> = ({
|
|
133
147
|
title,
|
|
134
148
|
subtitle,
|
|
135
149
|
onClose,
|
|
@@ -142,8 +156,8 @@ export const PopoverHeader= ({
|
|
|
142
156
|
}) => {
|
|
143
157
|
const headerClasses = [
|
|
144
158
|
'popover__header',
|
|
145
|
-
borderless ? 'popover__header--borderless' ,
|
|
146
|
-
noPadding ? 'popover__header--no-padding' ,
|
|
159
|
+
borderless ? 'popover__header--borderless' : '',
|
|
160
|
+
noPadding ? 'popover__header--no-padding' : '',
|
|
147
161
|
className
|
|
148
162
|
].filter(Boolean).join(' ');
|
|
149
163
|
|
|
@@ -178,7 +192,7 @@ export const PopoverHeader= ({
|
|
|
178
192
|
};
|
|
179
193
|
|
|
180
194
|
// Popover Body Component
|
|
181
|
-
export const PopoverBody= ({
|
|
195
|
+
export const PopoverBody: React.FC<PopoverBodyProps> = ({
|
|
182
196
|
children,
|
|
183
197
|
className = '',
|
|
184
198
|
padding = 'md',
|
|
@@ -187,17 +201,17 @@ export const PopoverBody= ({
|
|
|
187
201
|
}) => {
|
|
188
202
|
const bodyClasses = [
|
|
189
203
|
'popover__body',
|
|
190
|
-
padding === 'none' ? 'popover__body--no-padding' ,
|
|
191
|
-
padding === 'sm' ? 'popover__body--compact' ,
|
|
192
|
-
padding === 'lg' ? 'popover__body--spacious' ,
|
|
193
|
-
scrollable ? 'popover__body--scrollable' ,
|
|
204
|
+
padding === 'none' ? 'popover__body--no-padding' : '',
|
|
205
|
+
padding === 'sm' ? 'popover__body--compact' : '',
|
|
206
|
+
padding === 'lg' ? 'popover__body--spacious' : '',
|
|
207
|
+
scrollable ? 'popover__body--scrollable' : '',
|
|
194
208
|
className
|
|
195
209
|
].filter(Boolean).join(' ');
|
|
196
210
|
|
|
197
211
|
return (
|
|
198
212
|
<div
|
|
199
213
|
className={bodyClasses}
|
|
200
|
-
style={{ maxHeight}}
|
|
214
|
+
style={{ maxHeight: scrollable ? maxHeight : undefined }}
|
|
201
215
|
>
|
|
202
216
|
{children}
|
|
203
217
|
</div>
|
|
@@ -205,7 +219,7 @@ export const PopoverBody= ({
|
|
|
205
219
|
};
|
|
206
220
|
|
|
207
221
|
// Popover Footer Component
|
|
208
|
-
export const PopoverFooter= ({
|
|
222
|
+
export const PopoverFooter: React.FC<PopoverFooterProps> = ({
|
|
209
223
|
children,
|
|
210
224
|
className = '',
|
|
211
225
|
justify = 'end',
|
|
@@ -214,11 +228,11 @@ export const PopoverFooter= ({
|
|
|
214
228
|
}) => {
|
|
215
229
|
const footerClasses = [
|
|
216
230
|
'popover__footer',
|
|
217
|
-
!borderTop ? 'popover__footer--borderless' ,
|
|
218
|
-
padding === 'none' ? 'popover__footer--no-padding' ,
|
|
219
|
-
justify === 'start' ? 'popover__footer--start' ,
|
|
220
|
-
justify === 'center' ? 'popover__footer--center' ,
|
|
221
|
-
justify === 'between' ? 'popover__footer--space-between' ,
|
|
231
|
+
!borderTop ? 'popover__footer--borderless' : '',
|
|
232
|
+
padding === 'none' ? 'popover__footer--no-padding' : '',
|
|
233
|
+
justify === 'start' ? 'popover__footer--start' : '',
|
|
234
|
+
justify === 'center' ? 'popover__footer--center' : '',
|
|
235
|
+
justify === 'between' ? 'popover__footer--space-between' : '',
|
|
222
236
|
className
|
|
223
237
|
].filter(Boolean).join(' ');
|
|
224
238
|
|
|
@@ -230,10 +244,10 @@ export const PopoverFooter= ({
|
|
|
230
244
|
};
|
|
231
245
|
|
|
232
246
|
// Main Popover Component
|
|
233
|
-
export const Popover= ({
|
|
247
|
+
export const Popover: React.FC<PopoverProps> = ({
|
|
234
248
|
trigger,
|
|
235
249
|
children,
|
|
236
|
-
isOpen,
|
|
250
|
+
isOpen: controlledIsOpen,
|
|
237
251
|
onOpenChange,
|
|
238
252
|
position = 'bottom',
|
|
239
253
|
triggerType = 'click',
|
|
@@ -255,7 +269,7 @@ export const Popover= ({
|
|
|
255
269
|
const colors = themeConfig?.colors || getDefaultColors();
|
|
256
270
|
|
|
257
271
|
const [internalIsOpen, setInternalIsOpen] = useState(false);
|
|
258
|
-
const [popoverPosition, setPopoverPosition] = useState({ top, left});
|
|
272
|
+
const [popoverPosition, setPopoverPosition] = useState({ top: 0, left: 0 });
|
|
259
273
|
|
|
260
274
|
const triggerRef = useRef<HTMLElement>(null);
|
|
261
275
|
const popoverRef = useRef<HTMLDivElement>(null);
|
|
@@ -264,7 +278,7 @@ export const Popover= ({
|
|
|
264
278
|
const isOpen = controlledIsOpen ?? internalIsOpen;
|
|
265
279
|
|
|
266
280
|
// Handle open/close state changes
|
|
267
|
-
const handleOpenChange = useCallback((open) => {
|
|
281
|
+
const handleOpenChange = useCallback((open: boolean) => {
|
|
268
282
|
if (controlledIsOpen === undefined) {
|
|
269
283
|
setInternalIsOpen(open);
|
|
270
284
|
}
|
|
@@ -309,7 +323,7 @@ export const Popover= ({
|
|
|
309
323
|
useEffect(() => {
|
|
310
324
|
if (!isOpen || !closeOnEscape) return;
|
|
311
325
|
|
|
312
|
-
const handleEscape = (event) => {
|
|
326
|
+
const handleEscape = (event: KeyboardEvent) => {
|
|
313
327
|
if (event.key === 'Escape') {
|
|
314
328
|
hidePopover();
|
|
315
329
|
}
|
|
@@ -323,7 +337,7 @@ export const Popover= ({
|
|
|
323
337
|
useEffect(() => {
|
|
324
338
|
if (!isOpen || !closeOnBlur) return;
|
|
325
339
|
|
|
326
|
-
const handleClickOutside = (event) => {
|
|
340
|
+
const handleClickOutside = (event: MouseEvent) => {
|
|
327
341
|
const target = event.target as Node;
|
|
328
342
|
|
|
329
343
|
if (
|
|
@@ -370,9 +384,9 @@ export const Popover= ({
|
|
|
370
384
|
const getContentClasses = () => {
|
|
371
385
|
const classes = [
|
|
372
386
|
'popover__content',
|
|
373
|
-
size ? `popover__content--size-${size}` ,
|
|
374
|
-
variant ? `popover__content--variant-${variant}` ,
|
|
375
|
-
position ? `popover__content--position-${position}` ,
|
|
387
|
+
size ? `popover__content--size-${size}` : '',
|
|
388
|
+
variant ? `popover__content--variant-${variant}` : '',
|
|
389
|
+
position ? `popover__content--position-${position}` : '',
|
|
376
390
|
className
|
|
377
391
|
];
|
|
378
392
|
|
|
@@ -386,7 +400,7 @@ export const Popover= ({
|
|
|
386
400
|
|
|
387
401
|
// Create trigger event handlers
|
|
388
402
|
const getTriggerProps = () => {
|
|
389
|
-
const props= {};
|
|
403
|
+
const props: any = {};
|
|
390
404
|
|
|
391
405
|
if (triggerType === 'hover') {
|
|
392
406
|
props.onMouseEnter = showPopover;
|
|
@@ -404,7 +418,8 @@ export const Popover= ({
|
|
|
404
418
|
// Clone trigger element with event handlers
|
|
405
419
|
const triggerElement = cloneElement(trigger, {
|
|
406
420
|
...getTriggerProps(),
|
|
407
|
-
ref
|
|
421
|
+
ref: triggerRef
|
|
422
|
+
});
|
|
408
423
|
|
|
409
424
|
return (
|
|
410
425
|
<>
|
|
@@ -424,11 +439,12 @@ export const Popover= ({
|
|
|
424
439
|
className={getContentClasses()}
|
|
425
440
|
style={{
|
|
426
441
|
...popoverPosition,
|
|
427
|
-
maxWidth=== 'number' ? `${maxWidth}px` ,
|
|
442
|
+
maxWidth: typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth,
|
|
428
443
|
zIndex,
|
|
429
|
-
backgroundColor,
|
|
430
|
-
borderColor,
|
|
431
|
-
color
|
|
444
|
+
backgroundColor: colors.surface.background,
|
|
445
|
+
borderColor: colors.surface.border,
|
|
446
|
+
color: colors.text.primary
|
|
447
|
+
}}
|
|
432
448
|
>
|
|
433
449
|
{children}
|
|
434
450
|
|