@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
|
@@ -7,50 +7,53 @@ import {
|
|
|
7
7
|
} from './types';
|
|
8
8
|
|
|
9
9
|
// Simple icon components
|
|
10
|
-
const ChevronUpIcon}> = ({ className = '' }) => (
|
|
10
|
+
const ChevronUpIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
11
11
|
<svg className={`data-grid__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
12
12
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 15l7-7 7 7" />
|
|
13
13
|
</svg>
|
|
14
14
|
);
|
|
15
15
|
|
|
16
|
-
const ChevronDownIcon}> = ({ className = '' }) => (
|
|
16
|
+
const ChevronDownIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
17
17
|
<svg className={`data-grid__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
18
18
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
|
|
19
19
|
</svg>
|
|
20
20
|
);
|
|
21
21
|
|
|
22
|
-
const SearchIcon}> = ({ className = '' }) => (
|
|
22
|
+
const SearchIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
23
23
|
<svg className={`data-grid__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
24
24
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
|
|
25
25
|
</svg>
|
|
26
26
|
);
|
|
27
27
|
|
|
28
|
-
const FilterIcon}> = ({ className = '' }) => (
|
|
28
|
+
const FilterIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
29
29
|
<svg className={`data-grid__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
30
30
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.207A1 1 0 013 6.5V4z" />
|
|
31
31
|
</svg>
|
|
32
32
|
);
|
|
33
33
|
|
|
34
|
-
const MenuIcon}> = ({ className = '' }) => (
|
|
34
|
+
const MenuIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
35
35
|
<svg className={`data-grid__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
36
36
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 6h16M4 12h16M4 18h16" />
|
|
37
37
|
</svg>
|
|
38
38
|
);
|
|
39
39
|
|
|
40
|
-
// const DragIcon}> = ({ className = '' }) => (
|
|
40
|
+
// const DragIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
41
41
|
// <svg className={className} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
42
42
|
// <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M8 9l3 3-3 3m5 0h3M8 9l3 3-3 3m5 0h3" />
|
|
43
43
|
// </svg>
|
|
44
|
-
// ); // TODO
|
|
44
|
+
// ); // TODO: Implement drag functionality
|
|
45
|
+
|
|
46
|
+
const GroupIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
45
47
|
<svg className={`data-grid__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
46
48
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z" />
|
|
47
49
|
</svg>
|
|
48
50
|
);
|
|
49
51
|
|
|
50
52
|
// Resizable Column Header Component
|
|
51
|
-
const DataGridColumn= ({
|
|
53
|
+
const DataGridColumn: React.FC<DataGridColumnProps> = ({
|
|
52
54
|
column,
|
|
53
|
-
// index, // TODO
|
|
55
|
+
// index, // TODO: Use for column ordering
|
|
56
|
+
onSort,
|
|
54
57
|
onResize,
|
|
55
58
|
sortConfig,
|
|
56
59
|
// theme,
|
|
@@ -66,7 +69,7 @@ const DataGridColumn= ({
|
|
|
66
69
|
const [startWidth, setStartWidth] = useState(0);
|
|
67
70
|
const headerRef = useRef<HTMLTableHeaderCellElement>(null);
|
|
68
71
|
|
|
69
|
-
const handleMouseDown = useCallback((e) => {
|
|
72
|
+
const handleMouseDown = useCallback((e: React.MouseEvent) => {
|
|
70
73
|
if (!resizable) return;
|
|
71
74
|
|
|
72
75
|
e.preventDefault();
|
|
@@ -75,7 +78,7 @@ const DataGridColumn= ({
|
|
|
75
78
|
setStartWidth(headerRef.current?.offsetWidth || 0);
|
|
76
79
|
}, [resizable]);
|
|
77
80
|
|
|
78
|
-
const handleMouseMove = useCallback((e) => {
|
|
81
|
+
const handleMouseMove = useCallback((e: MouseEvent) => {
|
|
79
82
|
if (!isResizing) return;
|
|
80
83
|
|
|
81
84
|
const diff = e.clientX - startX;
|
|
@@ -105,9 +108,9 @@ const DataGridColumn= ({
|
|
|
105
108
|
return (
|
|
106
109
|
<th
|
|
107
110
|
ref={headerRef}
|
|
108
|
-
className={`data-grid__header data-grid__header--${size} data-grid__header--${column.align || 'left'} ${isSorted ? 'data-grid__header--sorted' }`}
|
|
111
|
+
className={`data-grid__header data-grid__header--${size} data-grid__header--${column.align || 'left'} ${isSorted ? 'data-grid__header--sorted' : ''}`}
|
|
109
112
|
style={{
|
|
110
|
-
width,
|
|
113
|
+
width: column.width,
|
|
111
114
|
}}
|
|
112
115
|
onClick={onSort}
|
|
113
116
|
>
|
|
@@ -116,14 +119,15 @@ const DataGridColumn= ({
|
|
|
116
119
|
{column.sortable && isSorted && (
|
|
117
120
|
sortConfig?.direction === 'asc' ? (
|
|
118
121
|
<ChevronUpIcon className="data-grid__sort-icon" />
|
|
119
|
-
)
|
|
122
|
+
) : (
|
|
123
|
+
<ChevronDownIcon className="data-grid__sort-icon" />
|
|
120
124
|
)
|
|
121
125
|
)}
|
|
122
126
|
</div>
|
|
123
127
|
|
|
124
128
|
{resizable && (
|
|
125
129
|
<div
|
|
126
|
-
className={`data-grid__resize-handle ${isResizing ? 'data-grid__resize-handle--active' }`}
|
|
130
|
+
className={`data-grid__resize-handle ${isResizing ? 'data-grid__resize-handle--active' : ''}`}
|
|
127
131
|
onMouseDown={handleMouseDown}
|
|
128
132
|
/>
|
|
129
133
|
)}
|
|
@@ -132,24 +136,25 @@ const DataGridColumn= ({
|
|
|
132
136
|
};
|
|
133
137
|
|
|
134
138
|
// Column Management Panel
|
|
135
|
-
const ColumnPanel
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
139
|
+
const ColumnPanel: React.FC<{
|
|
140
|
+
columns: SortableColumn[];
|
|
141
|
+
groups?: string[];
|
|
142
|
+
onGroupChange?: (groups: string[]) => void;
|
|
143
|
+
onColumnToggle?: (columnKey: string, visible: boolean) => void;
|
|
144
|
+
theme: 'stan-design' | 'enterprise' | 'harvey';
|
|
145
|
+
size: 'sm' | 'md' | 'lg';
|
|
146
|
+
onClose: () => void;
|
|
142
147
|
}> = ({ columns, groups = [], onGroupChange, onColumnToggle, size, onClose }) => {
|
|
143
148
|
// const { getTheme } = useTheme();
|
|
144
149
|
// const themeConfig = getTheme(theme);
|
|
145
150
|
// const colors = themeConfig?.colors || getDefaultColors();
|
|
146
151
|
|
|
147
|
-
const handleGroupToggle = (columnKey) => {
|
|
152
|
+
const handleGroupToggle = (columnKey: string) => {
|
|
148
153
|
if (!onGroupChange) return;
|
|
149
154
|
|
|
150
155
|
const newGroups = groups.includes(columnKey)
|
|
151
156
|
? groups.filter(g => g !== columnKey)
|
|
152
|
-
, columnKey];
|
|
157
|
+
: [...groups, columnKey];
|
|
153
158
|
|
|
154
159
|
onGroupChange(newGroups);
|
|
155
160
|
};
|
|
@@ -216,18 +221,19 @@ const ColumnPanel];
|
|
|
216
221
|
};
|
|
217
222
|
|
|
218
223
|
// Advanced Search and Filter Bar
|
|
219
|
-
const DataGridToolbar
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
224
|
+
const DataGridToolbar: React.FC<{
|
|
225
|
+
searchable?: boolean;
|
|
226
|
+
searchValue?: string;
|
|
227
|
+
onSearchChange?: (value: string) => void;
|
|
228
|
+
filterable?: boolean;
|
|
229
|
+
filters?: FilterConfig[];
|
|
230
|
+
onFiltersChange?: (filters: FilterConfig[]) => void;
|
|
231
|
+
groupable?: boolean;
|
|
232
|
+
groups?: string[];
|
|
233
|
+
onGroupChange?: (groups: string[]) => void;
|
|
234
|
+
columns: SortableColumn[];
|
|
235
|
+
theme: 'stan-design' | 'enterprise' | 'harvey';
|
|
236
|
+
size: 'sm' | 'md' | 'lg';
|
|
231
237
|
}> = ({
|
|
232
238
|
searchable,
|
|
233
239
|
searchValue,
|
|
@@ -253,17 +259,18 @@ const DataGridToolbar;
|
|
|
253
259
|
const addFilter = () => {
|
|
254
260
|
if (!filterColumn || !filterValue || !onFiltersChange) return;
|
|
255
261
|
|
|
256
|
-
const newFilter= {
|
|
257
|
-
key,
|
|
258
|
-
value,
|
|
259
|
-
operator
|
|
262
|
+
const newFilter: FilterConfig = {
|
|
263
|
+
key: filterColumn,
|
|
264
|
+
value: filterValue,
|
|
265
|
+
operator: 'contains'
|
|
266
|
+
};
|
|
260
267
|
|
|
261
268
|
onFiltersChange([...filters, newFilter]);
|
|
262
269
|
setFilterColumn('');
|
|
263
270
|
setFilterValue('');
|
|
264
271
|
};
|
|
265
272
|
|
|
266
|
-
const removeFilter = (index) => {
|
|
273
|
+
const removeFilter = (index: number) => {
|
|
267
274
|
if (!onFiltersChange) return;
|
|
268
275
|
const newFilters = filters.filter((_, i) => i !== index);
|
|
269
276
|
onFiltersChange(newFilters);
|
|
@@ -292,7 +299,7 @@ const DataGridToolbar;
|
|
|
292
299
|
{filterable && (
|
|
293
300
|
<button
|
|
294
301
|
className={`data-grid__toolbar-button data-grid__toolbar-button--${size}`}
|
|
295
|
-
onClick={() => {/* TODO}}
|
|
302
|
+
onClick={() => {/* TODO: Open filter dialog */}}
|
|
296
303
|
>
|
|
297
304
|
<FilterIcon className="data-grid__toolbar-icon" />
|
|
298
305
|
<span>Filter ({filters.length})</span>
|
|
@@ -302,7 +309,7 @@ const DataGridToolbar;
|
|
|
302
309
|
{groupable && (
|
|
303
310
|
<button
|
|
304
311
|
className={`data-grid__toolbar-button data-grid__toolbar-button--${size}`}
|
|
305
|
-
onClick={() => {/* TODO}}
|
|
312
|
+
onClick={() => {/* TODO: Open group dialog */}}
|
|
306
313
|
>
|
|
307
314
|
<GroupIcon className="data-grid__toolbar-icon" />
|
|
308
315
|
<span>Group ({groups.length})</span>
|
|
@@ -336,12 +343,14 @@ const DataGridToolbar;
|
|
|
336
343
|
{filters.length > 0 && (
|
|
337
344
|
<div className="data-grid__active-filters">
|
|
338
345
|
<span className={`data-grid__active-filters-label data-grid__active-filters-label--${size}`}>
|
|
339
|
-
Active Filters
|
|
346
|
+
Active Filters:
|
|
347
|
+
</span>
|
|
348
|
+
{filters.map((filter, index) => (
|
|
340
349
|
<div
|
|
341
350
|
key={index}
|
|
342
351
|
className={`data-grid__filter-tag data-grid__filter-tag--${size}`}
|
|
343
352
|
>
|
|
344
|
-
<span>{filter.key})}</span>
|
|
353
|
+
<span>{filter.key}: {String(filter.value)}</span>
|
|
345
354
|
<button
|
|
346
355
|
onClick={() => removeFilter(index)}
|
|
347
356
|
className="data-grid__filter-tag-remove"
|
|
@@ -380,7 +389,7 @@ const DataGridToolbar;
|
|
|
380
389
|
<button
|
|
381
390
|
onClick={addFilter}
|
|
382
391
|
disabled={!filterColumn || !filterValue}
|
|
383
|
-
className={`data-grid__filter-add-button data-grid__filter-add-button--${size} ${(!filterColumn || !filterValue) ? 'data-grid__filter-add-button--disabled' }`}
|
|
392
|
+
className={`data-grid__filter-add-button data-grid__filter-add-button--${size} ${(!filterColumn || !filterValue) ? 'data-grid__filter-add-button--disabled' : ''}`}
|
|
384
393
|
>
|
|
385
394
|
Add Filter
|
|
386
395
|
</button>
|
|
@@ -391,24 +400,28 @@ const DataGridToolbar;
|
|
|
391
400
|
};
|
|
392
401
|
|
|
393
402
|
// Main DataGrid Component
|
|
394
|
-
export const DataGrid= ({
|
|
403
|
+
export const DataGrid: React.FC<DataGridProps> = ({
|
|
395
404
|
columns,
|
|
396
405
|
data,
|
|
397
406
|
sortable = true,
|
|
398
407
|
filterable = true,
|
|
399
408
|
groupable = true,
|
|
400
409
|
resizable = true,
|
|
401
|
-
// reorderable = false, // TODO
|
|
410
|
+
// reorderable = false, // TODO: Implement column reordering
|
|
411
|
+
onSort,
|
|
402
412
|
onFiltersChange,
|
|
403
413
|
onGroupChange,
|
|
404
414
|
onColumnResize,
|
|
405
|
-
// onColumnReorder, // TODO
|
|
415
|
+
// onColumnReorder, // TODO: Implement column reordering
|
|
416
|
+
sortConfig,
|
|
406
417
|
filters = [],
|
|
407
418
|
groups = [],
|
|
408
419
|
columnWidths = {},
|
|
409
|
-
// columnOrder = [], // TODO
|
|
420
|
+
// columnOrder = [], // TODO: Implement column ordering
|
|
421
|
+
pagination,
|
|
410
422
|
onPageChange,
|
|
411
|
-
// onPageSizeChange, // TODO
|
|
423
|
+
// onPageSizeChange, // TODO: Implement page size change
|
|
424
|
+
searchable = true,
|
|
412
425
|
searchValue,
|
|
413
426
|
onSearchChange,
|
|
414
427
|
rowKey = 'id',
|
|
@@ -439,12 +452,12 @@ export const DataGrid= ({
|
|
|
439
452
|
const enhancedColumns = useMemo(() => {
|
|
440
453
|
return columns.map(column => ({
|
|
441
454
|
...column,
|
|
442
|
-
width] || column.width || 150
|
|
455
|
+
width: columnWidths[column.key] || column.width || 150
|
|
443
456
|
}));
|
|
444
457
|
}, [columns, columnWidths]);
|
|
445
458
|
|
|
446
459
|
// Get row key function
|
|
447
|
-
const getRowKey = (row, any>, index)=> {
|
|
460
|
+
const getRowKey = (row: Record<string, any>, index: number): string => {
|
|
448
461
|
if (typeof rowKey === 'function') {
|
|
449
462
|
return rowKey(row);
|
|
450
463
|
}
|
|
@@ -452,22 +465,22 @@ export const DataGrid= ({
|
|
|
452
465
|
};
|
|
453
466
|
|
|
454
467
|
// Handle column resize
|
|
455
|
-
const handleColumnResize = useCallback((columnKey, newWidth) => {
|
|
468
|
+
const handleColumnResize = useCallback((columnKey: string, newWidth: number) => {
|
|
456
469
|
onColumnResize?.(columnKey, newWidth);
|
|
457
470
|
}, [onColumnResize]);
|
|
458
471
|
|
|
459
472
|
// Handle sorting
|
|
460
|
-
const handleSort = useCallback((column) => {
|
|
473
|
+
const handleSort = useCallback((column: SortableColumn) => {
|
|
461
474
|
if (!sortable || !onSort || !column.sortable) return;
|
|
462
475
|
|
|
463
|
-
const newDirection = sortConfig?.key === column.key && sortConfig.direction === 'asc' ? 'desc' ;
|
|
464
|
-
onSort({ key, direction});
|
|
476
|
+
const newDirection = sortConfig?.key === column.key && sortConfig.direction === 'asc' ? 'desc' : 'asc';
|
|
477
|
+
onSort({ key: column.key, direction: newDirection });
|
|
465
478
|
}, [sortable, onSort, sortConfig]);
|
|
466
479
|
|
|
467
480
|
// Handle row selection
|
|
468
|
-
const handleRowSelect = useCallback((row, any>, checked) => {
|
|
469
|
-
const key = typeof rowKey === 'function' ? rowKey(row) ] || `row-0`;
|
|
470
|
-
let newSelectedKeys];
|
|
481
|
+
const handleRowSelect = useCallback((row: Record<string, any>, checked: boolean) => {
|
|
482
|
+
const key = typeof rowKey === 'function' ? rowKey(row) : row[rowKey] || `row-0`;
|
|
483
|
+
let newSelectedKeys: string[];
|
|
471
484
|
|
|
472
485
|
if (checked) {
|
|
473
486
|
newSelectedKeys = [...internalSelectedKeys, key];
|
|
@@ -480,13 +493,13 @@ export const DataGrid= ({
|
|
|
480
493
|
}, [internalSelectedKeys, onSelectionChange, rowKey]);
|
|
481
494
|
|
|
482
495
|
// Handle select all
|
|
483
|
-
const handleSelectAll = useCallback((checked) => {
|
|
496
|
+
const handleSelectAll = useCallback((checked: boolean) => {
|
|
484
497
|
const newSelectedKeys = checked ? data.map((row, index) => {
|
|
485
498
|
if (typeof rowKey === 'function') {
|
|
486
499
|
return rowKey(row);
|
|
487
500
|
}
|
|
488
501
|
return row[rowKey] || `row-${index}`;
|
|
489
|
-
}) ];
|
|
502
|
+
}) : [];
|
|
490
503
|
setInternalSelectedKeys(newSelectedKeys);
|
|
491
504
|
onSelectionChange?.(newSelectedKeys);
|
|
492
505
|
}, [data, onSelectionChange, rowKey]);
|
|
@@ -514,7 +527,7 @@ export const DataGrid= ({
|
|
|
514
527
|
<div className={`data-grid__container ${className || ''}`}>
|
|
515
528
|
<div className="data-grid__error">
|
|
516
529
|
<div className={`data-grid__error-text data-grid__error-text--${size}`}>
|
|
517
|
-
Error}
|
|
530
|
+
Error: {error}
|
|
518
531
|
</div>
|
|
519
532
|
</div>
|
|
520
533
|
</div>
|
|
@@ -602,7 +615,7 @@ export const DataGrid= ({
|
|
|
602
615
|
return (
|
|
603
616
|
<tr
|
|
604
617
|
key={key}
|
|
605
|
-
className={`data-grid__row data-grid__row--${size} ${isSelected ? 'data-grid__row--selected' } ${variant === 'striped' && index % 2 === 1 ? 'data-grid__row--striped' }`}
|
|
618
|
+
className={`data-grid__row data-grid__row--${size} ${isSelected ? 'data-grid__row--selected' : ''} ${variant === 'striped' && index % 2 === 1 ? 'data-grid__row--striped' : ''}`}
|
|
606
619
|
>
|
|
607
620
|
{selectable && (
|
|
608
621
|
<td className={`data-grid__select-cell data-grid__select-cell--${size}`}>
|
|
@@ -619,7 +632,7 @@ export const DataGrid= ({
|
|
|
619
632
|
<td
|
|
620
633
|
key={column.key}
|
|
621
634
|
className={`data-grid__cell data-grid__cell--${size} data-grid__cell--${column.align || 'left'}`}
|
|
622
|
-
style={{ width}}
|
|
635
|
+
style={{ width: column.width }}
|
|
623
636
|
>
|
|
624
637
|
{String(row[column.key] || '')}
|
|
625
638
|
</td>
|
|
@@ -641,7 +654,7 @@ export const DataGrid= ({
|
|
|
641
654
|
<button
|
|
642
655
|
onClick={() => onPageChange?.(pagination.currentPage - 1)}
|
|
643
656
|
disabled={pagination.currentPage === 1}
|
|
644
|
-
className={`data-grid__pagination-button data-grid__pagination-button--${size} ${pagination.currentPage === 1 ? 'data-grid__pagination-button--disabled' }`}
|
|
657
|
+
className={`data-grid__pagination-button data-grid__pagination-button--${size} ${pagination.currentPage === 1 ? 'data-grid__pagination-button--disabled' : ''}`}
|
|
645
658
|
>
|
|
646
659
|
Previous
|
|
647
660
|
</button>
|
|
@@ -653,7 +666,7 @@ export const DataGrid= ({
|
|
|
653
666
|
<button
|
|
654
667
|
onClick={() => onPageChange?.(pagination.currentPage + 1)}
|
|
655
668
|
disabled={pagination.currentPage >= Math.ceil(pagination.totalItems / pagination.pageSize)}
|
|
656
|
-
className={`data-grid__pagination-button data-grid__pagination-button--${size} ${pagination.currentPage >= Math.ceil(pagination.totalItems / pagination.pageSize) ? 'data-grid__pagination-button--disabled' }`}
|
|
669
|
+
className={`data-grid__pagination-button data-grid__pagination-button--${size} ${pagination.currentPage >= Math.ceil(pagination.totalItems / pagination.pageSize) ? 'data-grid__pagination-button--disabled' : ''}`}
|
|
657
670
|
>
|
|
658
671
|
Next
|
|
659
672
|
</button>
|