@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.9 → 0.2.10
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 +23 -1
- package/dist/components/ui/navigation/index.js +23 -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 +22 -2
- package/dist/components/ui/overlay/index.js +22 -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 +289 -280
- package/dist/index.js +289 -280
- 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/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 +15 -4
- package/dist/tokens/index.js +15 -4
- 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={`tree__icon ${className}`}
|
|
13
13
|
fill="none"
|
|
@@ -18,7 +18,7 @@ const ChevronRightIcon}> = ({ className = '' }) => (
|
|
|
18
18
|
</svg>
|
|
19
19
|
);
|
|
20
20
|
|
|
21
|
-
const ChevronDownIcon}> = ({ className = '' }) => (
|
|
21
|
+
const ChevronDownIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
22
22
|
<svg
|
|
23
23
|
className={`tree__icon ${className}`}
|
|
24
24
|
fill="none"
|
|
@@ -29,7 +29,7 @@ const ChevronDownIcon}> = ({ className = '' }) => (
|
|
|
29
29
|
</svg>
|
|
30
30
|
);
|
|
31
31
|
|
|
32
|
-
const SearchIcon}> = ({ className = '' }) => (
|
|
32
|
+
const SearchIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
33
33
|
<svg
|
|
34
34
|
className={`tree__icon ${className}`}
|
|
35
35
|
fill="none"
|
|
@@ -40,7 +40,7 @@ const SearchIcon}> = ({ className = '' }) => (
|
|
|
40
40
|
</svg>
|
|
41
41
|
);
|
|
42
42
|
|
|
43
|
-
const FilterIcon}> = ({ className = '' }) => (
|
|
43
|
+
const FilterIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
44
44
|
<svg
|
|
45
45
|
className={`tree__icon ${className}`}
|
|
46
46
|
fill="none"
|
|
@@ -51,7 +51,7 @@ const FilterIcon}> = ({ className = '' }) => (
|
|
|
51
51
|
</svg>
|
|
52
52
|
);
|
|
53
53
|
|
|
54
|
-
const FolderIcon}> = ({ className = '' }) => (
|
|
54
|
+
const FolderIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
55
55
|
<svg
|
|
56
56
|
className={`tree__icon ${className}`}
|
|
57
57
|
fill="none"
|
|
@@ -62,7 +62,7 @@ const FolderIcon}> = ({ className = '' }) => (
|
|
|
62
62
|
</svg>
|
|
63
63
|
);
|
|
64
64
|
|
|
65
|
-
const DocumentIcon}> = ({ className = '' }) => (
|
|
65
|
+
const DocumentIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
66
66
|
<svg
|
|
67
67
|
className={`tree__icon ${className}`}
|
|
68
68
|
fill="none"
|
|
@@ -73,7 +73,7 @@ const DocumentIcon}> = ({ className = '' }) => (
|
|
|
73
73
|
</svg>
|
|
74
74
|
);
|
|
75
75
|
|
|
76
|
-
const CheckIcon}> = ({ className = '' }) => (
|
|
76
|
+
const CheckIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
77
77
|
<svg
|
|
78
78
|
className={`tree__icon ${className}`}
|
|
79
79
|
fill="none"
|
|
@@ -84,7 +84,7 @@ const CheckIcon}> = ({ className = '' }) => (
|
|
|
84
84
|
</svg>
|
|
85
85
|
);
|
|
86
86
|
|
|
87
|
-
const MinusIcon}> = ({ className = '' }) => (
|
|
87
|
+
const MinusIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
88
88
|
<svg
|
|
89
89
|
className={`tree__icon ${className}`}
|
|
90
90
|
fill="none"
|
|
@@ -97,35 +97,44 @@ const MinusIcon}> = ({ className = '' }) => (
|
|
|
97
97
|
|
|
98
98
|
// Default color fallbacks for when theme is not available
|
|
99
99
|
const getDefaultColors = () => ({
|
|
100
|
-
surface
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
100
|
+
surface: {
|
|
101
|
+
background: '#ffffff',
|
|
102
|
+
surface: '#f3f4f6',
|
|
103
|
+
border: '#d1d5db',
|
|
104
|
+
divider: '#e5e7eb'
|
|
105
|
+
},
|
|
106
|
+
text: {
|
|
107
|
+
primary: '#111827',
|
|
108
|
+
secondary: '#6b7280',
|
|
109
|
+
muted: '#9ca3af',
|
|
110
|
+
inverse: '#ffffff',
|
|
111
|
+
onPrimary: '#ffffff',
|
|
112
|
+
onSecondary: '#ffffff',
|
|
113
|
+
onSurface: '#111827'
|
|
114
|
+
},
|
|
115
|
+
interactive: {
|
|
116
|
+
hover: '#f3f4f6',
|
|
117
|
+
active: '#e5e7eb',
|
|
118
|
+
focus: '#3b82f6',
|
|
119
|
+
disabled: '#d1d5db'
|
|
120
|
+
},
|
|
121
|
+
primary: { 500: '#3b82f6' },
|
|
122
|
+
semantic: {
|
|
123
|
+
success: '#10b981',
|
|
124
|
+
warning: '#f59e0b',
|
|
125
|
+
error: '#ef4444',
|
|
126
|
+
info: '#3b82f6'
|
|
127
|
+
}
|
|
120
128
|
});
|
|
121
129
|
|
|
122
130
|
// Tree Search Bar
|
|
123
|
-
const TreeSearchBar
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
131
|
+
const TreeSearchBar: React.FC<{
|
|
132
|
+
searchable: boolean;
|
|
133
|
+
searchValue: string;
|
|
134
|
+
onSearchChange: (value: string) => void;
|
|
135
|
+
filterable: boolean;
|
|
136
|
+
theme: string;
|
|
137
|
+
size: 'sm' | 'md' | 'lg';
|
|
129
138
|
}> = ({
|
|
130
139
|
searchable,
|
|
131
140
|
searchValue,
|
|
@@ -139,9 +148,10 @@ const TreeSearchBar;
|
|
|
139
148
|
const colors = themeConfig?.colors || getDefaultColors();
|
|
140
149
|
|
|
141
150
|
const sizeClasses = {
|
|
142
|
-
sm,
|
|
143
|
-
md,
|
|
144
|
-
lg
|
|
151
|
+
sm: 'h-8 text-sm px-3',
|
|
152
|
+
md: 'h-10 text-base px-4',
|
|
153
|
+
lg: 'h-12 text-lg px-5'
|
|
154
|
+
};
|
|
145
155
|
|
|
146
156
|
if (!searchable && !filterable) return null;
|
|
147
157
|
|
|
@@ -159,9 +169,10 @@ const TreeSearchBar;
|
|
|
159
169
|
placeholder="Search nodes..."
|
|
160
170
|
className={`w-full ${sizeClasses[size]} pl-10 pr-4 rounded-lg border outline-none`}
|
|
161
171
|
style={{
|
|
162
|
-
backgroundColor,
|
|
163
|
-
border}`,
|
|
164
|
-
color
|
|
172
|
+
backgroundColor: colors.surface.background,
|
|
173
|
+
border: `1px solid ${colors.surface.border}`,
|
|
174
|
+
color: colors.text.primary
|
|
175
|
+
}}
|
|
165
176
|
onFocus={(e) => {
|
|
166
177
|
e.target.style.borderColor = colors.primary[500];
|
|
167
178
|
e.target.style.boxShadow = `0 0 0 3px ${colors.primary[500]}20`;
|
|
@@ -185,7 +196,7 @@ const TreeSearchBar;
|
|
|
185
196
|
};
|
|
186
197
|
|
|
187
198
|
// Individual Tree Item Component
|
|
188
|
-
const TreeItem= ({
|
|
199
|
+
const TreeItem: React.FC<TreeItemProps> = ({
|
|
189
200
|
node,
|
|
190
201
|
level = 0,
|
|
191
202
|
expandedKeys,
|
|
@@ -198,7 +209,11 @@ const TreeItem= ({
|
|
|
198
209
|
theme,
|
|
199
210
|
size,
|
|
200
211
|
variant,
|
|
201
|
-
// draggable = false, // TODO
|
|
212
|
+
// draggable = false, // TODO: Implement drag and drop
|
|
213
|
+
// onDragStart, // TODO: Implement drag and drop
|
|
214
|
+
// onDragEnd, // TODO: Implement drag and drop
|
|
215
|
+
// onDrop, // TODO: Implement drag and drop
|
|
216
|
+
showLines = true,
|
|
202
217
|
showIcons = true
|
|
203
218
|
}) => {
|
|
204
219
|
// const { getTheme } = useTheme();
|
|
@@ -211,30 +226,32 @@ const TreeItem= ({
|
|
|
211
226
|
const isClickable = !!onClick;
|
|
212
227
|
|
|
213
228
|
const iconSizes = {
|
|
214
|
-
sm,
|
|
215
|
-
md,
|
|
216
|
-
lg
|
|
229
|
+
sm: 'w-3 h-3',
|
|
230
|
+
md: 'w-4 h-4',
|
|
231
|
+
lg: 'w-5 h-5'
|
|
232
|
+
};
|
|
217
233
|
|
|
218
234
|
const indentWidth = {
|
|
219
|
-
sm,
|
|
220
|
-
md,
|
|
221
|
-
lg
|
|
235
|
+
sm: 16,
|
|
236
|
+
md: 20,
|
|
237
|
+
lg: 24
|
|
238
|
+
};
|
|
222
239
|
|
|
223
|
-
const handleToggleExpand = (e) => {
|
|
240
|
+
const handleToggleExpand = (e: React.MouseEvent) => {
|
|
224
241
|
e.stopPropagation();
|
|
225
242
|
if (hasChildren && expandable) {
|
|
226
243
|
onToggleExpand?.(node.id, !isExpanded);
|
|
227
244
|
}
|
|
228
245
|
};
|
|
229
246
|
|
|
230
|
-
const handleSelectionChange = (e) => {
|
|
247
|
+
const handleSelectionChange = (e: React.MouseEvent) => {
|
|
231
248
|
e.stopPropagation();
|
|
232
249
|
if (selectable) {
|
|
233
250
|
onSelectionChange?.(node.id, !isSelected);
|
|
234
251
|
}
|
|
235
252
|
};
|
|
236
253
|
|
|
237
|
-
const handleClick = (e) => {
|
|
254
|
+
const handleClick = (e: React.MouseEvent) => {
|
|
238
255
|
if (isClickable) {
|
|
239
256
|
onClick?.(node, e);
|
|
240
257
|
}
|
|
@@ -270,10 +287,11 @@ const TreeItem= ({
|
|
|
270
287
|
return (
|
|
271
288
|
<>
|
|
272
289
|
<div
|
|
273
|
-
className={`tree__node tree__node--${size} ${variant !== 'default' ? `tree__node--${variant}` } ${
|
|
274
|
-
isSelected ? 'tree__node--selected'
|
|
290
|
+
className={`tree__node tree__node--${size} ${variant !== 'default' ? `tree__node--${variant}` : ''} ${
|
|
291
|
+
isSelected ? 'tree__node--selected' : ''
|
|
292
|
+
} ${isClickable ? 'tree__node--clickable' : ''}`}
|
|
275
293
|
style={{
|
|
276
|
-
paddingLeft] + 12}px`
|
|
294
|
+
paddingLeft: `${level * indentWidth[size] + 12}px`
|
|
277
295
|
}}
|
|
278
296
|
onClick={handleClick}
|
|
279
297
|
>
|
|
@@ -282,7 +300,7 @@ const TreeItem= ({
|
|
|
282
300
|
<div
|
|
283
301
|
className="tree__line"
|
|
284
302
|
style={{
|
|
285
|
-
left) * indentWidth[size] + 12 + indentWidth[size] / 2 - 1}px`
|
|
303
|
+
left: `${(level - 1) * indentWidth[size] + 12 + indentWidth[size] / 2 - 1}px`
|
|
286
304
|
}}
|
|
287
305
|
/>
|
|
288
306
|
)}
|
|
@@ -294,14 +312,16 @@ const TreeItem= ({
|
|
|
294
312
|
onClick={handleToggleExpand}
|
|
295
313
|
className={`tree__node-toggle tree__node-toggle--${size}`}
|
|
296
314
|
>
|
|
297
|
-
<div className={`tree__expand-icon ${isExpanded ? 'tree__expand-icon--expanded' }`}>
|
|
315
|
+
<div className={`tree__expand-icon ${isExpanded ? 'tree__expand-icon--expanded' : ''}`}>
|
|
298
316
|
{isExpanded ? (
|
|
299
317
|
<ChevronDownIcon className={`tree__icon tree__icon--${size}`} />
|
|
300
|
-
)
|
|
318
|
+
) : (
|
|
319
|
+
<ChevronRightIcon className={`tree__icon tree__icon--${size}`} />
|
|
301
320
|
)}
|
|
302
321
|
</div>
|
|
303
322
|
</button>
|
|
304
|
-
)
|
|
323
|
+
) : (
|
|
324
|
+
<div className={`tree__node-spacer tree__node-spacer--${size}`} />
|
|
305
325
|
)}
|
|
306
326
|
</div>
|
|
307
327
|
|
|
@@ -311,8 +331,10 @@ const TreeItem= ({
|
|
|
311
331
|
<button
|
|
312
332
|
onClick={handleSelectionChange}
|
|
313
333
|
className={`tree__checkbox-input ${
|
|
314
|
-
checkboxState ? 'tree__checkbox-input--checked'
|
|
315
|
-
|
|
334
|
+
checkboxState ? 'tree__checkbox-input--checked' : ''
|
|
335
|
+
} ${
|
|
336
|
+
checkboxState === 'indeterminate' ? 'tree__checkbox-input--indeterminate' : ''
|
|
337
|
+
}`}
|
|
316
338
|
>
|
|
317
339
|
{checkboxState === true && <CheckIcon className="tree__checkbox-icon" />}
|
|
318
340
|
{checkboxState === 'indeterminate' && <MinusIcon className="tree__checkbox-icon" />}
|
|
@@ -332,7 +354,8 @@ const TreeItem= ({
|
|
|
332
354
|
<div className="tree__node-main">
|
|
333
355
|
<div className="tree__node-text">
|
|
334
356
|
<span className={`tree__node-label ${
|
|
335
|
-
isSelected ? 'tree__node-label--selected'
|
|
357
|
+
isSelected ? 'tree__node-label--selected' : ''
|
|
358
|
+
}`}>
|
|
336
359
|
{node.label}
|
|
337
360
|
</span>
|
|
338
361
|
{node.description && (
|
|
@@ -390,7 +413,7 @@ const TreeItem= ({
|
|
|
390
413
|
};
|
|
391
414
|
|
|
392
415
|
// Main Tree Component
|
|
393
|
-
export const Tree= ({
|
|
416
|
+
export const Tree: React.FC<TreeProps> = ({
|
|
394
417
|
data,
|
|
395
418
|
expandedKeys = [],
|
|
396
419
|
selectedKeys = [],
|
|
@@ -399,11 +422,17 @@ export const Tree= ({
|
|
|
399
422
|
onNodeClick,
|
|
400
423
|
selectable = false,
|
|
401
424
|
expandable = true,
|
|
402
|
-
// draggable = false, // TODO
|
|
425
|
+
// draggable = false, // TODO: Implement drag and drop
|
|
426
|
+
// onDragStart, // TODO: Implement drag and drop
|
|
427
|
+
// onDragEnd, // TODO: Implement drag and drop
|
|
428
|
+
// onDrop, // TODO: Implement drag and drop
|
|
429
|
+
searchable = false,
|
|
403
430
|
searchValue = '',
|
|
404
431
|
onSearchChange,
|
|
405
432
|
filterable = false,
|
|
406
|
-
// filters = [], // TODO
|
|
433
|
+
// filters = [], // TODO: Implement filter functionality
|
|
434
|
+
// onFiltersChange, // TODO: Implement filter functionality
|
|
435
|
+
showLines = true,
|
|
407
436
|
showIcons = true,
|
|
408
437
|
expandAll = false,
|
|
409
438
|
collapseAll = false,
|
|
@@ -425,22 +454,23 @@ export const Tree= ({
|
|
|
425
454
|
|
|
426
455
|
const searchLower = searchValue.toLowerCase();
|
|
427
456
|
|
|
428
|
-
const filterNode = (node)=> {
|
|
457
|
+
const filterNode = (node: TreeNode): TreeNode | null => {
|
|
429
458
|
const matchesSearch = node.label.toLowerCase().includes(searchLower) ||
|
|
430
459
|
node.description?.toLowerCase().includes(searchLower);
|
|
431
460
|
|
|
432
|
-
let filteredChildren] = [];
|
|
461
|
+
let filteredChildren: TreeNode[] = [];
|
|
433
462
|
if (node.children) {
|
|
434
463
|
filteredChildren = node.children
|
|
435
464
|
.map(child => filterNode(child))
|
|
436
|
-
.filter((child)=> child !== null);
|
|
465
|
+
.filter((child): child is TreeNode => child !== null);
|
|
437
466
|
}
|
|
438
467
|
|
|
439
468
|
// Include node if it matches search OR has matching children
|
|
440
469
|
if (matchesSearch || filteredChildren.length > 0) {
|
|
441
470
|
return {
|
|
442
471
|
...node,
|
|
443
|
-
children
|
|
472
|
+
children: filteredChildren.length > 0 ? filteredChildren : node.children
|
|
473
|
+
};
|
|
444
474
|
}
|
|
445
475
|
|
|
446
476
|
return null;
|
|
@@ -448,15 +478,15 @@ export const Tree= ({
|
|
|
448
478
|
|
|
449
479
|
return data
|
|
450
480
|
.map(node => filterNode(node))
|
|
451
|
-
.filter((node)=> node !== null);
|
|
481
|
+
.filter((node): node is TreeNode => node !== null);
|
|
452
482
|
}, [data, searchable, searchValue]);
|
|
453
483
|
|
|
454
484
|
// Auto-expand all nodes when expandAll changes
|
|
455
485
|
React.useEffect(() => {
|
|
456
486
|
if (expandAll) {
|
|
457
|
-
const getAllNodeIds = (nodes])] => {
|
|
458
|
-
const ids] = [];
|
|
459
|
-
const traverse = (nodeList]) => {
|
|
487
|
+
const getAllNodeIds = (nodes: TreeNode[]): string[] => {
|
|
488
|
+
const ids: string[] = [];
|
|
489
|
+
const traverse = (nodeList: TreeNode[]) => {
|
|
460
490
|
nodeList.forEach(node => {
|
|
461
491
|
if (node.children && node.children.length > 0) {
|
|
462
492
|
ids.push(node.id);
|
|
@@ -480,18 +510,18 @@ export const Tree= ({
|
|
|
480
510
|
}
|
|
481
511
|
}, [collapseAll, onExpandedKeysChange]);
|
|
482
512
|
|
|
483
|
-
const handleToggleExpand = useCallback((nodeId, expanded) => {
|
|
513
|
+
const handleToggleExpand = useCallback((nodeId: string, expanded: boolean) => {
|
|
484
514
|
const newExpandedKeys = expanded
|
|
485
515
|
? [...expandedKeys, nodeId]
|
|
486
|
-
=> key !== nodeId);
|
|
516
|
+
: expandedKeys.filter(key => key !== nodeId);
|
|
487
517
|
|
|
488
518
|
onExpandedKeysChange?.(newExpandedKeys);
|
|
489
519
|
}, [expandedKeys, onExpandedKeysChange]);
|
|
490
520
|
|
|
491
|
-
const handleSelectionChange = useCallback((nodeId, selected) => {
|
|
521
|
+
const handleSelectionChange = useCallback((nodeId: string, selected: boolean) => {
|
|
492
522
|
const newSelectedKeys = selected
|
|
493
523
|
? [...selectedKeys, nodeId]
|
|
494
|
-
=> key !== nodeId);
|
|
524
|
+
: selectedKeys.filter(key => key !== nodeId);
|
|
495
525
|
|
|
496
526
|
onSelectedKeysChange?.(newSelectedKeys);
|
|
497
527
|
}, [selectedKeys, onSelectedKeysChange]);
|
|
@@ -500,7 +530,7 @@ export const Tree= ({
|
|
|
500
530
|
return (
|
|
501
531
|
<div
|
|
502
532
|
className={`p-8 text-center ${className}`}
|
|
503
|
-
style={{ color}}
|
|
533
|
+
style={{ color: colors.text.muted }}
|
|
504
534
|
>
|
|
505
535
|
Loading...
|
|
506
536
|
</div>
|
|
@@ -512,10 +542,11 @@ export const Tree= ({
|
|
|
512
542
|
<div
|
|
513
543
|
className={`p-8 text-center ${className}`}
|
|
514
544
|
style={{
|
|
515
|
-
color,
|
|
516
|
-
backgroundColor,
|
|
517
|
-
border}30`,
|
|
518
|
-
borderRadius
|
|
545
|
+
color: colors.semantic.error,
|
|
546
|
+
backgroundColor: colors.semantic.error + '10',
|
|
547
|
+
border: `1px solid ${colors.semantic.error}30`,
|
|
548
|
+
borderRadius: '8px'
|
|
549
|
+
}}
|
|
519
550
|
>
|
|
520
551
|
{error}
|
|
521
552
|
</div>
|
|
@@ -523,7 +554,7 @@ export const Tree= ({
|
|
|
523
554
|
}
|
|
524
555
|
|
|
525
556
|
return (
|
|
526
|
-
<div className={`tree__container tree__container--${size} ${variant !== 'default' ? `tree__container--${variant}` } ${className}`}>
|
|
557
|
+
<div className={`tree__container tree__container--${size} ${variant !== 'default' ? `tree__container--${variant}` : ''} ${className}`}>
|
|
527
558
|
{/* Search Bar */}
|
|
528
559
|
<TreeSearchBar
|
|
529
560
|
searchable={searchable}
|
|
@@ -535,12 +566,13 @@ export const Tree= ({
|
|
|
535
566
|
/>
|
|
536
567
|
|
|
537
568
|
{/* Tree */}
|
|
538
|
-
<div className={`tree__tree tree__tree--${size} ${variant !== 'default' ? `tree__tree--${variant}` }`}>
|
|
569
|
+
<div className={`tree__tree tree__tree--${size} ${variant !== 'default' ? `tree__tree--${variant}` : ''}`}>
|
|
539
570
|
{filteredData.length === 0 ? (
|
|
540
571
|
<div className="tree__empty">
|
|
541
572
|
{emptyMessage}
|
|
542
573
|
</div>
|
|
543
|
-
)
|
|
574
|
+
) : (
|
|
575
|
+
<div className="tree__nodes">
|
|
544
576
|
{filteredData.map((node) => (
|
|
545
577
|
<TreeItem
|
|
546
578
|
key={node.id}
|