@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,7 +7,7 @@ import {
|
|
|
7
7
|
} from './types';
|
|
8
8
|
|
|
9
9
|
// Simple icon components (inline SVG)
|
|
10
|
-
const ChevronRightIcon}> = ({ className = '' }) => (
|
|
10
|
+
const ChevronRightIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
11
11
|
<svg
|
|
12
12
|
className={`list__icon ${className}`}
|
|
13
13
|
fill="none"
|
|
@@ -18,7 +18,7 @@ const ChevronRightIcon}> = ({ className = '' }) => (
|
|
|
18
18
|
</svg>
|
|
19
19
|
);
|
|
20
20
|
|
|
21
|
-
const SearchIcon}> = ({ className = '' }) => (
|
|
21
|
+
const SearchIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
22
22
|
<svg
|
|
23
23
|
className={`list__icon ${className}`}
|
|
24
24
|
fill="none"
|
|
@@ -29,7 +29,7 @@ const SearchIcon}> = ({ className = '' }) => (
|
|
|
29
29
|
</svg>
|
|
30
30
|
);
|
|
31
31
|
|
|
32
|
-
const FilterIcon}> = ({ className = '' }) => (
|
|
32
|
+
const FilterIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
33
33
|
<svg
|
|
34
34
|
className={`list__icon ${className}`}
|
|
35
35
|
fill="none"
|
|
@@ -40,7 +40,7 @@ const FilterIcon}> = ({ className = '' }) => (
|
|
|
40
40
|
</svg>
|
|
41
41
|
);
|
|
42
42
|
|
|
43
|
-
const DotsIcon}> = ({ className = '' }) => (
|
|
43
|
+
const DotsIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
44
44
|
<svg
|
|
45
45
|
className={`list__icon ${className}`}
|
|
46
46
|
fill="none"
|
|
@@ -51,7 +51,7 @@ const DotsIcon}> = ({ className = '' }) => (
|
|
|
51
51
|
</svg>
|
|
52
52
|
);
|
|
53
53
|
|
|
54
|
-
const CheckIcon}> = ({ className = '' }) => (
|
|
54
|
+
const CheckIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
55
55
|
<svg
|
|
56
56
|
className={`list__icon ${className}`}
|
|
57
57
|
fill="none"
|
|
@@ -63,14 +63,15 @@ const CheckIcon}> = ({ className = '' }) => (
|
|
|
63
63
|
);
|
|
64
64
|
|
|
65
65
|
// List Search and Filter Bar
|
|
66
|
-
const ListSearchFilterBar
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
66
|
+
const ListSearchFilterBar: React.FC<{
|
|
67
|
+
searchable: boolean;
|
|
68
|
+
searchValue: string;
|
|
69
|
+
onSearchChange: (value: string) => void;
|
|
70
|
+
filterable: boolean;
|
|
71
|
+
filters: ListFilter[];
|
|
72
|
+
onFiltersChange?: (filters: ListFilter[]) => void;
|
|
73
|
+
theme: string;
|
|
74
|
+
size: 'sm' | 'md' | 'lg';
|
|
74
75
|
}> = ({
|
|
75
76
|
searchable,
|
|
76
77
|
searchValue,
|
|
@@ -84,9 +85,10 @@ const ListSearchFilterBar;
|
|
|
84
85
|
// const colors = themeConfig?.colors || getDefaultColors();
|
|
85
86
|
|
|
86
87
|
// const sizeClasses = {
|
|
87
|
-
// sm,
|
|
88
|
-
// md,
|
|
89
|
-
// lg
|
|
88
|
+
// sm: 'h-8 text-sm px-3',
|
|
89
|
+
// md: 'h-10 text-base px-4',
|
|
90
|
+
// lg: 'h-12 text-lg px-5'
|
|
91
|
+
// };
|
|
90
92
|
|
|
91
93
|
if (!searchable && !filterable) return null;
|
|
92
94
|
|
|
@@ -123,10 +125,11 @@ const ListSearchFilterBar;
|
|
|
123
125
|
};
|
|
124
126
|
|
|
125
127
|
// List Item Action Component
|
|
126
|
-
const ListItemActions
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
128
|
+
const ListItemActions: React.FC<{
|
|
129
|
+
actions: ListAction[];
|
|
130
|
+
item: ListItem;
|
|
131
|
+
theme: string;
|
|
132
|
+
size: 'sm' | 'md' | 'lg';
|
|
130
133
|
}> = ({ actions, item, size }) => {
|
|
131
134
|
// const { getTheme } = useTheme();
|
|
132
135
|
// const themeConfig = getTheme(theme);
|
|
@@ -135,9 +138,10 @@ const ListItemActions];
|
|
|
135
138
|
const [showMenu, setShowMenu] = useState(false);
|
|
136
139
|
|
|
137
140
|
// const sizeClasses = {
|
|
138
|
-
// sm,
|
|
139
|
-
// md,
|
|
140
|
-
// lg
|
|
141
|
+
// sm: 'p-1',
|
|
142
|
+
// md: 'p-1.5',
|
|
143
|
+
// lg: 'p-2'
|
|
144
|
+
// };
|
|
141
145
|
|
|
142
146
|
if (actions.length === 0) return null;
|
|
143
147
|
|
|
@@ -150,7 +154,7 @@ const ListItemActions];
|
|
|
150
154
|
e.stopPropagation();
|
|
151
155
|
action.onClick(item);
|
|
152
156
|
}}
|
|
153
|
-
className={`list__action-button list__action-button--${size} ${action.variant === 'danger' ? 'list__action-button--danger' }`}
|
|
157
|
+
className={`list__action-button list__action-button--${size} ${action.variant === 'danger' ? 'list__action-button--danger' : ''}`}
|
|
154
158
|
title={action.label}
|
|
155
159
|
>
|
|
156
160
|
{action.icon || <DotsIcon className="list__action-icon" />}
|
|
@@ -189,7 +193,7 @@ const ListItemActions];
|
|
|
189
193
|
action.onClick(item);
|
|
190
194
|
setShowMenu(false);
|
|
191
195
|
}}
|
|
192
|
-
className={`list__action-menu-item ${action.variant === 'danger' ? 'list__action-menu-item--danger' }`}
|
|
196
|
+
className={`list__action-menu-item ${action.variant === 'danger' ? 'list__action-menu-item--danger' : ''}`}
|
|
193
197
|
>
|
|
194
198
|
{action.icon && <span className="list__action-menu-icon">{action.icon}</span>}
|
|
195
199
|
{action.label}
|
|
@@ -203,17 +207,18 @@ const ListItemActions];
|
|
|
203
207
|
};
|
|
204
208
|
|
|
205
209
|
// Individual List Item Component
|
|
206
|
-
const ListItemComponent
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
210
|
+
const ListItemComponent: React.FC<{
|
|
211
|
+
item: ListItem;
|
|
212
|
+
index: number;
|
|
213
|
+
selectable: boolean;
|
|
214
|
+
selected: boolean;
|
|
215
|
+
onSelectionChange?: (selected: boolean) => void;
|
|
216
|
+
onClick?: (item: ListItem, index: number) => void;
|
|
217
|
+
actions: ListAction[];
|
|
218
|
+
showDivider: boolean;
|
|
219
|
+
theme: string;
|
|
220
|
+
size: 'sm' | 'md' | 'lg';
|
|
221
|
+
variant: 'default' | 'bordered' | 'striped';
|
|
217
222
|
}> = ({
|
|
218
223
|
item,
|
|
219
224
|
index,
|
|
@@ -232,8 +237,8 @@ const ListItemComponent;
|
|
|
232
237
|
|
|
233
238
|
return (
|
|
234
239
|
<div
|
|
235
|
-
className={`list__item list__item--${size} list__item--${variant} ${isClickable ? 'list__item--clickable' } ${index % 2 === 1 && variant === 'striped' ? 'list__item--striped' }`}
|
|
236
|
-
onClick={isClickable ? () => onClick(item, index) }
|
|
240
|
+
className={`list__item list__item--${size} list__item--${variant} ${isClickable ? 'list__item--clickable' : ''} ${index % 2 === 1 && variant === 'striped' ? 'list__item--striped' : ''}`}
|
|
241
|
+
onClick={isClickable ? () => onClick(item, index) : undefined}
|
|
237
242
|
>
|
|
238
243
|
{/* Selection Checkbox */}
|
|
239
244
|
{selectable && (
|
|
@@ -243,7 +248,7 @@ const ListItemComponent;
|
|
|
243
248
|
>
|
|
244
249
|
<button
|
|
245
250
|
onClick={() => onSelectionChange?.(!selected)}
|
|
246
|
-
className={`list__item-checkbox ${selected ? 'list__item-checkbox--selected' }`}
|
|
251
|
+
className={`list__item-checkbox ${selected ? 'list__item-checkbox--selected' : ''}`}
|
|
247
252
|
>
|
|
248
253
|
{selected && <CheckIcon className="list__item-checkbox-icon" />}
|
|
249
254
|
</button>
|
|
@@ -259,7 +264,8 @@ const ListItemComponent;
|
|
|
259
264
|
alt={item.title}
|
|
260
265
|
className="list__item-avatar-image"
|
|
261
266
|
/>
|
|
262
|
-
)
|
|
267
|
+
) : (
|
|
268
|
+
<div className="list__item-avatar-placeholder">
|
|
263
269
|
{item.avatar}
|
|
264
270
|
</div>
|
|
265
271
|
)}
|
|
@@ -334,7 +340,7 @@ const ListItemComponent;
|
|
|
334
340
|
};
|
|
335
341
|
|
|
336
342
|
// Main List Component
|
|
337
|
-
export const List= ({
|
|
343
|
+
export const List: React.FC<ListProps> = ({
|
|
338
344
|
items,
|
|
339
345
|
selectable = false,
|
|
340
346
|
selectedKeys = [],
|
|
@@ -346,7 +352,8 @@ export const List= ({
|
|
|
346
352
|
onSearchChange,
|
|
347
353
|
filterable = false,
|
|
348
354
|
filters = [],
|
|
349
|
-
// onFiltersChange, // TODO
|
|
355
|
+
// onFiltersChange, // TODO: Implement filter functionality
|
|
356
|
+
loading = false,
|
|
350
357
|
error = null,
|
|
351
358
|
emptyMessage = 'No items found',
|
|
352
359
|
showDividers = true,
|
|
@@ -371,12 +378,12 @@ export const List= ({
|
|
|
371
378
|
);
|
|
372
379
|
}, [items, searchable, searchValue]);
|
|
373
380
|
|
|
374
|
-
const handleSelectionChange = useCallback((itemKey, selected) => {
|
|
381
|
+
const handleSelectionChange = useCallback((itemKey: string, selected: boolean) => {
|
|
375
382
|
if (!onSelectionChange) return;
|
|
376
383
|
|
|
377
384
|
const newSelectedKeys = selected
|
|
378
385
|
? [...selectedKeys, itemKey]
|
|
379
|
-
=> key !== itemKey);
|
|
386
|
+
: selectedKeys.filter(key => key !== itemKey);
|
|
380
387
|
|
|
381
388
|
onSelectionChange(newSelectedKeys);
|
|
382
389
|
}, [selectedKeys, onSelectionChange]);
|
|
@@ -417,7 +424,8 @@ export const List= ({
|
|
|
417
424
|
<div className="list__empty">
|
|
418
425
|
{emptyMessage}
|
|
419
426
|
</div>
|
|
420
|
-
)
|
|
427
|
+
) : (
|
|
428
|
+
filteredItems.map((item, index) => {
|
|
421
429
|
const itemKey = item.key || item.id || index.toString();
|
|
422
430
|
const isSelected = selectedKeys.includes(itemKey);
|
|
423
431
|
const shouldShowDivider = showDividers && index < filteredItems.length - 1;
|
|
@@ -9,47 +9,48 @@ import {
|
|
|
9
9
|
} from './types';
|
|
10
10
|
|
|
11
11
|
// Simple icon components
|
|
12
|
-
const ChevronUpIcon}> = ({ className = '' }) => (
|
|
12
|
+
const ChevronUpIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
13
13
|
<svg className={`table__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
14
14
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 15l7-7 7 7" />
|
|
15
15
|
</svg>
|
|
16
16
|
);
|
|
17
17
|
|
|
18
|
-
const ChevronDownIcon}> = ({ className = '' }) => (
|
|
18
|
+
const ChevronDownIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
19
19
|
<svg className={`table__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
20
20
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
|
|
21
21
|
</svg>
|
|
22
22
|
);
|
|
23
23
|
|
|
24
|
-
const ChevronRightIcon}> = ({ className = '' }) => (
|
|
24
|
+
const ChevronRightIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
25
25
|
<svg className={`table__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
26
26
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5l7 7-7 7" />
|
|
27
27
|
</svg>
|
|
28
28
|
);
|
|
29
29
|
|
|
30
|
-
const SearchIcon}> = ({ className = '' }) => (
|
|
30
|
+
const SearchIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
31
31
|
<svg className={`table__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
32
32
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
|
|
33
33
|
</svg>
|
|
34
34
|
);
|
|
35
35
|
|
|
36
|
-
const FilterIcon}> = ({ className = '' }) => (
|
|
36
|
+
const FilterIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
37
37
|
<svg className={`table__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
38
38
|
<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" />
|
|
39
39
|
</svg>
|
|
40
40
|
);
|
|
41
41
|
|
|
42
42
|
// Table Header Component
|
|
43
|
-
const TableHeader
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
43
|
+
const TableHeader: React.FC<{
|
|
44
|
+
columns: SortableColumn[];
|
|
45
|
+
sortable?: boolean;
|
|
46
|
+
sortConfig?: SortConfig;
|
|
47
|
+
onSort?: (config: SortConfig) => void;
|
|
48
|
+
selectable?: boolean;
|
|
49
|
+
onSelectAll?: (checked: boolean) => void;
|
|
50
|
+
allSelected?: boolean;
|
|
51
|
+
theme: 'stan-design' | 'enterprise' | 'harvey';
|
|
52
|
+
size: 'sm' | 'md' | 'lg';
|
|
53
|
+
variant: 'default' | 'bordered' | 'striped' | 'compact';
|
|
53
54
|
}> = ({
|
|
54
55
|
columns,
|
|
55
56
|
sortable,
|
|
@@ -64,11 +65,11 @@ const TableHeader];
|
|
|
64
65
|
// const themeConfig = getTheme(theme);
|
|
65
66
|
// const colors = themeConfig?.colors || getDefaultColors();
|
|
66
67
|
|
|
67
|
-
const handleSort = useCallback((column) => {
|
|
68
|
+
const handleSort = useCallback((column: SortableColumn) => {
|
|
68
69
|
if (!sortable || !onSort || !column.sortable) return;
|
|
69
70
|
|
|
70
|
-
const newDirection = sortConfig?.key === column.key && sortConfig.direction === 'asc' ? 'desc' ;
|
|
71
|
-
onSort({ key, direction});
|
|
71
|
+
const newDirection = sortConfig?.key === column.key && sortConfig.direction === 'asc' ? 'desc' : 'asc';
|
|
72
|
+
onSort({ key: column.key, direction: newDirection });
|
|
72
73
|
}, [sortable, onSort, sortConfig]);
|
|
73
74
|
|
|
74
75
|
return (
|
|
@@ -87,8 +88,8 @@ const TableHeader];
|
|
|
87
88
|
{columns.map((column) => (
|
|
88
89
|
<th
|
|
89
90
|
key={column.key}
|
|
90
|
-
className={`table__header table__header--${size} table__header--${column.align || 'left'} ${sortable && column.sortable ? 'table__header--sortable' } ${sortConfig?.key === column.key ? 'table__header--sorted' }`}
|
|
91
|
-
style={{ width}}
|
|
91
|
+
className={`table__header table__header--${size} table__header--${column.align || 'left'} ${sortable && column.sortable ? 'table__header--sortable' : ''} ${sortConfig?.key === column.key ? 'table__header--sorted' : ''}`}
|
|
92
|
+
style={{ width: column.width }}
|
|
92
93
|
onClick={() => handleSort(column)}
|
|
93
94
|
>
|
|
94
95
|
<div className={`table__header-content table__header-content--${column.align || 'left'}`}>
|
|
@@ -96,7 +97,8 @@ const TableHeader];
|
|
|
96
97
|
{sortable && column.sortable && sortConfig?.key === column.key && (
|
|
97
98
|
sortConfig.direction === 'asc' ? (
|
|
98
99
|
<ChevronUpIcon className="table__sort-icon" />
|
|
99
|
-
)
|
|
100
|
+
) : (
|
|
101
|
+
<ChevronDownIcon className="table__sort-icon" />
|
|
100
102
|
)
|
|
101
103
|
)}
|
|
102
104
|
</div>
|
|
@@ -108,7 +110,7 @@ const TableHeader];
|
|
|
108
110
|
};
|
|
109
111
|
|
|
110
112
|
// Table Row Component
|
|
111
|
-
const TableRow= ({
|
|
113
|
+
const TableRow: React.FC<TableRowProps> = ({
|
|
112
114
|
row,
|
|
113
115
|
index,
|
|
114
116
|
columns,
|
|
@@ -126,7 +128,7 @@ const TableRow= ({
|
|
|
126
128
|
|
|
127
129
|
return (
|
|
128
130
|
<tr
|
|
129
|
-
className={`table__row table__row--${size} table__row--${variant} ${selected ? 'table__row--selected' } ${variant === 'striped' && index % 2 === 1 ? 'table__row--striped' }`}
|
|
131
|
+
className={`table__row table__row--${size} table__row--${variant} ${selected ? 'table__row--selected' : ''} ${variant === 'striped' && index % 2 === 1 ? 'table__row--striped' : ''}`}
|
|
130
132
|
onClick={onClick}
|
|
131
133
|
>
|
|
132
134
|
<td className={`table__cell table__cell--select table__cell--${size}`}>
|
|
@@ -142,7 +144,7 @@ const TableRow= ({
|
|
|
142
144
|
<td
|
|
143
145
|
key={column.key}
|
|
144
146
|
className={`table__cell table__cell--${size} table__cell--${column.align || 'left'}`}
|
|
145
|
-
style={{ width}}
|
|
147
|
+
style={{ width: column.width }}
|
|
146
148
|
>
|
|
147
149
|
{column.key === 'expand' ? (
|
|
148
150
|
<button
|
|
@@ -152,11 +154,12 @@ const TableRow= ({
|
|
|
152
154
|
}}
|
|
153
155
|
className="table__expand-button"
|
|
154
156
|
>
|
|
155
|
-
<div className={`table__expand-icon ${expanded ? 'table__expand-icon--expanded' }`}>
|
|
157
|
+
<div className={`table__expand-icon ${expanded ? 'table__expand-icon--expanded' : ''}`}>
|
|
156
158
|
<ChevronRightIcon className="table__expand-chevron" />
|
|
157
159
|
</div>
|
|
158
160
|
</button>
|
|
159
|
-
)
|
|
161
|
+
) : (
|
|
162
|
+
String(row[column.key] || '')
|
|
160
163
|
)}
|
|
161
164
|
</td>
|
|
162
165
|
))}
|
|
@@ -165,12 +168,13 @@ const TableRow= ({
|
|
|
165
168
|
};
|
|
166
169
|
|
|
167
170
|
// Search and Filter Bar Component
|
|
168
|
-
const SearchFilterBar
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
171
|
+
const SearchFilterBar: React.FC<{
|
|
172
|
+
searchable?: boolean;
|
|
173
|
+
searchValue?: string;
|
|
174
|
+
onSearchChange?: (value: string) => void;
|
|
175
|
+
filters?: FilterConfig[];
|
|
176
|
+
theme: 'stan-design' | 'enterprise' | 'harvey';
|
|
177
|
+
size: 'sm' | 'md' | 'lg';
|
|
174
178
|
}> = ({
|
|
175
179
|
searchable,
|
|
176
180
|
searchValue,
|
|
@@ -207,7 +211,7 @@ const SearchFilterBar;
|
|
|
207
211
|
<FilterIcon />
|
|
208
212
|
</div>
|
|
209
213
|
<span className={`table__filter-text table__filter-text--${size}`}>
|
|
210
|
-
Filters}
|
|
214
|
+
Filters: {filters.length}
|
|
211
215
|
</span>
|
|
212
216
|
</div>
|
|
213
217
|
)}
|
|
@@ -216,11 +220,12 @@ const SearchFilterBar;
|
|
|
216
220
|
};
|
|
217
221
|
|
|
218
222
|
// Pagination Component
|
|
219
|
-
const TablePagination
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
223
|
+
const TablePagination: React.FC<{
|
|
224
|
+
pagination?: PaginationConfig;
|
|
225
|
+
onPageChange?: (page: number) => void;
|
|
226
|
+
onPageSizeChange?: (pageSize: number) => void;
|
|
227
|
+
theme: 'stan-design' | 'enterprise' | 'harvey';
|
|
228
|
+
size: 'sm' | 'md' | 'lg';
|
|
224
229
|
}> = ({ pagination, onPageChange, onPageSizeChange, size }) => {
|
|
225
230
|
// const { getTheme } = useTheme();
|
|
226
231
|
// const themeConfig = getTheme(theme);
|
|
@@ -240,7 +245,9 @@ const TablePagination;
|
|
|
240
245
|
Showing {startItem}-{endItem} of {totalItems} items
|
|
241
246
|
</span>
|
|
242
247
|
<div className="table__pagination-size">
|
|
243
|
-
<span>Items per page
|
|
248
|
+
<span>Items per page:</span>
|
|
249
|
+
<select
|
|
250
|
+
value={pageSize}
|
|
244
251
|
onChange={(e) => onPageSizeChange?.(Number(e.target.value))}
|
|
245
252
|
className={`table__pagination-select table__pagination-select--${size}`}
|
|
246
253
|
>
|
|
@@ -255,14 +262,14 @@ const TablePagination;
|
|
|
255
262
|
<button
|
|
256
263
|
onClick={() => onPageChange?.(1)}
|
|
257
264
|
disabled={currentPage === 1}
|
|
258
|
-
className={`table__pagination-button table__pagination-button--${size} ${currentPage === 1 ? 'table__pagination-button--disabled' }`}
|
|
265
|
+
className={`table__pagination-button table__pagination-button--${size} ${currentPage === 1 ? 'table__pagination-button--disabled' : ''}`}
|
|
259
266
|
>
|
|
260
267
|
First
|
|
261
268
|
</button>
|
|
262
269
|
<button
|
|
263
270
|
onClick={() => onPageChange?.(currentPage - 1)}
|
|
264
271
|
disabled={currentPage === 1}
|
|
265
|
-
className={`table__pagination-button table__pagination-button--${size} ${currentPage === 1 ? 'table__pagination-button--disabled' }`}
|
|
272
|
+
className={`table__pagination-button table__pagination-button--${size} ${currentPage === 1 ? 'table__pagination-button--disabled' : ''}`}
|
|
266
273
|
>
|
|
267
274
|
Previous
|
|
268
275
|
</button>
|
|
@@ -274,14 +281,14 @@ const TablePagination;
|
|
|
274
281
|
<button
|
|
275
282
|
onClick={() => onPageChange?.(currentPage + 1)}
|
|
276
283
|
disabled={currentPage === totalPages}
|
|
277
|
-
className={`table__pagination-button table__pagination-button--${size} ${currentPage === totalPages ? 'table__pagination-button--disabled' }`}
|
|
284
|
+
className={`table__pagination-button table__pagination-button--${size} ${currentPage === totalPages ? 'table__pagination-button--disabled' : ''}`}
|
|
278
285
|
>
|
|
279
286
|
Next
|
|
280
287
|
</button>
|
|
281
288
|
<button
|
|
282
289
|
onClick={() => onPageChange?.(totalPages)}
|
|
283
290
|
disabled={currentPage === totalPages}
|
|
284
|
-
className={`table__pagination-button table__pagination-button--${size} ${currentPage === totalPages ? 'table__pagination-button--disabled' }`}
|
|
291
|
+
className={`table__pagination-button table__pagination-button--${size} ${currentPage === totalPages ? 'table__pagination-button--disabled' : ''}`}
|
|
285
292
|
>
|
|
286
293
|
Last
|
|
287
294
|
</button>
|
|
@@ -291,7 +298,7 @@ const TablePagination;
|
|
|
291
298
|
};
|
|
292
299
|
|
|
293
300
|
// Main Table Component
|
|
294
|
-
export const Table= ({
|
|
301
|
+
export const Table: React.FC<TableProps> = ({
|
|
295
302
|
columns,
|
|
296
303
|
data,
|
|
297
304
|
sortable = false,
|
|
@@ -307,7 +314,8 @@ export const Table= ({
|
|
|
307
314
|
onPageChange,
|
|
308
315
|
onPageSizeChange,
|
|
309
316
|
filters,
|
|
310
|
-
// onFiltersChange, // TODO
|
|
317
|
+
// onFiltersChange, // TODO: Implement filters change handler
|
|
318
|
+
searchable = false,
|
|
311
319
|
searchValue,
|
|
312
320
|
onSearchChange,
|
|
313
321
|
rowKey = 'id',
|
|
@@ -332,7 +340,7 @@ export const Table= ({
|
|
|
332
340
|
const currentExpandedKeys = expandedKeys || internalExpandedKeys;
|
|
333
341
|
|
|
334
342
|
// Get row key function
|
|
335
|
-
const getRowKey = useCallback((row, any>, index)=> {
|
|
343
|
+
const getRowKey = useCallback((row: Record<string, any>, index: number): string => {
|
|
336
344
|
if (typeof rowKey === 'function') {
|
|
337
345
|
return rowKey(row);
|
|
338
346
|
}
|
|
@@ -340,9 +348,9 @@ export const Table= ({
|
|
|
340
348
|
}, [rowKey]);
|
|
341
349
|
|
|
342
350
|
// Handle row selection
|
|
343
|
-
const handleRowSelect = useCallback((row, any>, checked) => {
|
|
351
|
+
const handleRowSelect = useCallback((row: Record<string, any>, checked: boolean) => {
|
|
344
352
|
const key = getRowKey(row, 0);
|
|
345
|
-
let newSelectedKeys];
|
|
353
|
+
let newSelectedKeys: string[];
|
|
346
354
|
|
|
347
355
|
if (checked) {
|
|
348
356
|
newSelectedKeys = [...currentSelectedKeys, key];
|
|
@@ -355,26 +363,26 @@ export const Table= ({
|
|
|
355
363
|
}, [currentSelectedKeys, onSelectionChange, getRowKey]);
|
|
356
364
|
|
|
357
365
|
// Handle select all
|
|
358
|
-
const handleSelectAll = useCallback((checked) => {
|
|
359
|
-
const newSelectedKeys = checked ? data.map((row, index) => getRowKey(row, index)) ];
|
|
366
|
+
const handleSelectAll = useCallback((checked: boolean) => {
|
|
367
|
+
const newSelectedKeys = checked ? data.map((row, index) => getRowKey(row, index)) : [];
|
|
360
368
|
setInternalSelectedKeys(newSelectedKeys);
|
|
361
369
|
onSelectionChange?.(newSelectedKeys);
|
|
362
370
|
}, [data, onSelectionChange, getRowKey]);
|
|
363
371
|
|
|
364
372
|
// Handle row expansion
|
|
365
|
-
const handleRowExpand = useCallback((row, any>) => {
|
|
373
|
+
const handleRowExpand = useCallback((row: Record<string, any>) => {
|
|
366
374
|
const key = getRowKey(row, 0);
|
|
367
375
|
const expanded = currentExpandedKeys.includes(key);
|
|
368
376
|
const newExpandedKeys = expanded
|
|
369
377
|
? currentExpandedKeys.filter(k => k !== key)
|
|
370
|
-
, key];
|
|
378
|
+
: [...currentExpandedKeys, key];
|
|
371
379
|
|
|
372
380
|
setInternalExpandedKeys(newExpandedKeys);
|
|
373
381
|
onRowExpand?.(row, !expanded);
|
|
374
382
|
}, [currentExpandedKeys, onRowExpand, getRowKey]);
|
|
375
383
|
|
|
376
384
|
// Handle row click
|
|
377
|
-
const handleRowClick = useCallback((row, any>, index) => {
|
|
385
|
+
const handleRowClick = useCallback((row: Record<string, any>, index: number) => {
|
|
378
386
|
onRowClick?.(row, index);
|
|
379
387
|
}, [onRowClick]);
|
|
380
388
|
|
|
@@ -397,7 +405,7 @@ export const Table= ({
|
|
|
397
405
|
return (
|
|
398
406
|
<div className="table__error">
|
|
399
407
|
<div className={`table__error-text table__error-text--${size}`}>
|
|
400
|
-
Error}
|
|
408
|
+
Error: {error}
|
|
401
409
|
</div>
|
|
402
410
|
</div>
|
|
403
411
|
);
|