@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.9 → 0.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/dist/components/ui/accessibility-demo.esm.js +30 -24
- package/dist/components/ui/accessibility-demo.js +30 -24
- package/dist/components/ui/advanced-component-architecture-demo.esm.js +235 -179
- package/dist/components/ui/advanced-component-architecture-demo.js +235 -179
- package/dist/components/ui/advanced-transition-system-demo.esm.js +110 -64
- package/dist/components/ui/advanced-transition-system-demo.js +110 -64
- package/dist/components/ui/advanced-transition-system.esm.js +166 -122
- package/dist/components/ui/advanced-transition-system.js +166 -122
- package/dist/components/ui/animation/animated-container.esm.js +52 -29
- package/dist/components/ui/animation/animated-container.js +52 -29
- package/dist/components/ui/animation/staggered-container.esm.js +18 -9
- package/dist/components/ui/animation/staggered-container.js +18 -9
- package/dist/components/ui/animation-demo.esm.js +67 -35
- package/dist/components/ui/animation-demo.js +67 -35
- package/dist/components/ui/badge.esm.js +9 -6
- package/dist/components/ui/badge.js +9 -6
- package/dist/components/ui/battery-conscious-animation-demo.esm.js +122 -87
- package/dist/components/ui/battery-conscious-animation-demo.js +122 -87
- package/dist/components/ui/border-radius-shadow-demo.esm.js +23 -12
- package/dist/components/ui/border-radius-shadow-demo.js +23 -12
- package/dist/components/ui/button.esm.js +8 -2
- package/dist/components/ui/button.js +8 -2
- package/dist/components/ui/card.esm.js +33 -8
- package/dist/components/ui/card.js +33 -8
- package/dist/components/ui/checkbox.esm.js +3 -3
- package/dist/components/ui/checkbox.js +3 -3
- package/dist/components/ui/color-preview.esm.js +68 -45
- package/dist/components/ui/color-preview.js +68 -45
- package/dist/components/ui/data-display/chart.esm.js +112 -84
- package/dist/components/ui/data-display/chart.js +112 -84
- package/dist/components/ui/data-display/data-grid-simple.esm.js +1 -1
- package/dist/components/ui/data-display/data-grid-simple.js +1 -1
- package/dist/components/ui/data-display/data-grid.esm.js +80 -67
- package/dist/components/ui/data-display/data-grid.js +80 -67
- package/dist/components/ui/data-display/list.esm.js +53 -45
- package/dist/components/ui/data-display/list.js +53 -45
- package/dist/components/ui/data-display/table.esm.js +62 -54
- package/dist/components/ui/data-display/table.js +62 -54
- package/dist/components/ui/data-display/timeline.esm.js +39 -34
- package/dist/components/ui/data-display/timeline.js +39 -34
- package/dist/components/ui/data-display/tree.esm.js +116 -84
- package/dist/components/ui/data-display/tree.js +116 -84
- package/dist/components/ui/data-display/types.esm.js +389 -364
- package/dist/components/ui/data-display/types.js +389 -364
- package/dist/components/ui/enterprise-mobile-experience-demo.esm.js +120 -70
- package/dist/components/ui/enterprise-mobile-experience-demo.js +120 -70
- package/dist/components/ui/enterprise-mobile-experience.esm.js +124 -73
- package/dist/components/ui/enterprise-mobile-experience.js +124 -73
- package/dist/components/ui/feedback/alert.esm.js +22 -15
- package/dist/components/ui/feedback/alert.js +22 -15
- package/dist/components/ui/feedback/progress.esm.js +47 -24
- package/dist/components/ui/feedback/progress.js +47 -24
- package/dist/components/ui/feedback/skeleton.esm.js +39 -29
- package/dist/components/ui/feedback/skeleton.js +39 -29
- package/dist/components/ui/feedback/toast.esm.js +62 -38
- package/dist/components/ui/feedback/toast.js +62 -38
- package/dist/components/ui/feedback/types.esm.js +83 -83
- package/dist/components/ui/feedback/types.js +83 -83
- package/dist/components/ui/font-preview.esm.js +41 -39
- package/dist/components/ui/font-preview.js +41 -39
- package/dist/components/ui/form-demo.esm.js +150 -113
- package/dist/components/ui/form-demo.js +150 -113
- package/dist/components/ui/hardware-acceleration-demo.esm.js +137 -87
- package/dist/components/ui/hardware-acceleration-demo.js +137 -87
- package/dist/components/ui/input.esm.js +4 -1
- package/dist/components/ui/input.js +4 -1
- package/dist/components/ui/layout-demo.esm.js +81 -56
- package/dist/components/ui/layout-demo.js +81 -56
- package/dist/components/ui/layouts/adaptive-layout.esm.js +27 -8
- package/dist/components/ui/layouts/adaptive-layout.js +27 -8
- package/dist/components/ui/layouts/desktop-layout.esm.js +39 -19
- package/dist/components/ui/layouts/desktop-layout.js +39 -19
- package/dist/components/ui/layouts/mobile-layout.esm.js +19 -9
- package/dist/components/ui/layouts/mobile-layout.js +19 -9
- package/dist/components/ui/layouts/tablet-layout.esm.js +28 -14
- package/dist/components/ui/layouts/tablet-layout.js +28 -14
- package/dist/components/ui/mobile-form-validation.esm.js +120 -87
- package/dist/components/ui/mobile-form-validation.js +120 -87
- package/dist/components/ui/mobile-input-demo.esm.js +19 -13
- package/dist/components/ui/mobile-input-demo.js +19 -13
- package/dist/components/ui/mobile-input.esm.js +185 -120
- package/dist/components/ui/mobile-input.js +185 -120
- package/dist/components/ui/mobile-skeleton-loading-demo.esm.js +128 -111
- package/dist/components/ui/mobile-skeleton-loading-demo.js +128 -111
- package/dist/components/ui/navigation/breadcrumb.esm.js +17 -14
- package/dist/components/ui/navigation/breadcrumb.js +17 -14
- package/dist/components/ui/navigation/index.esm.js +0 -1
- package/dist/components/ui/navigation/index.js +0 -1
- package/dist/components/ui/navigation/menu.esm.js +49 -35
- package/dist/components/ui/navigation/menu.js +49 -35
- package/dist/components/ui/navigation/navigation-demo.esm.js +81 -74
- package/dist/components/ui/navigation/navigation-demo.js +81 -74
- package/dist/components/ui/navigation/pagination.esm.js +62 -50
- package/dist/components/ui/navigation/pagination.js +62 -50
- package/dist/components/ui/navigation/sidebar.esm.js +56 -42
- package/dist/components/ui/navigation/sidebar.js +56 -42
- package/dist/components/ui/navigation/stepper.esm.js +34 -23
- package/dist/components/ui/navigation/stepper.js +34 -23
- package/dist/components/ui/navigation/tabs.esm.js +32 -21
- package/dist/components/ui/navigation/tabs.js +32 -21
- package/dist/components/ui/navigation/types.esm.js +196 -195
- package/dist/components/ui/navigation/types.js +196 -195
- package/dist/components/ui/overlay/backdrop.esm.js +17 -16
- package/dist/components/ui/overlay/backdrop.js +17 -16
- package/dist/components/ui/overlay/focus-manager.esm.js +21 -19
- package/dist/components/ui/overlay/focus-manager.js +21 -19
- package/dist/components/ui/overlay/index.esm.js +0 -2
- package/dist/components/ui/overlay/index.js +0 -2
- package/dist/components/ui/overlay/modal.esm.js +38 -34
- package/dist/components/ui/overlay/modal.js +38 -34
- package/dist/components/ui/overlay/overlay-manager.esm.js +25 -20
- package/dist/components/ui/overlay/overlay-manager.js +25 -20
- package/dist/components/ui/overlay/popover.esm.js +74 -58
- package/dist/components/ui/overlay/popover.js +74 -58
- package/dist/components/ui/overlay/portal.esm.js +7 -7
- package/dist/components/ui/overlay/portal.js +7 -7
- package/dist/components/ui/overlay/tooltip.esm.js +54 -39
- package/dist/components/ui/overlay/tooltip.js +54 -39
- package/dist/components/ui/overlay/types.esm.js +132 -131
- package/dist/components/ui/overlay/types.js +132 -131
- package/dist/components/ui/performance-demo.esm.js +135 -88
- package/dist/components/ui/performance-demo.js +135 -88
- package/dist/components/ui/semantic-input-system-demo.esm.js +117 -80
- package/dist/components/ui/semantic-input-system-demo.js +117 -80
- package/dist/components/ui/theme-customizer.esm.js +84 -52
- package/dist/components/ui/theme-customizer.js +84 -52
- package/dist/components/ui/theme-preview.esm.js +95 -43
- package/dist/components/ui/theme-preview.js +95 -43
- package/dist/components/ui/theme-switcher.esm.js +70 -44
- package/dist/components/ui/theme-switcher.js +70 -44
- package/dist/components/ui/theme-toggle.esm.js +3 -3
- package/dist/components/ui/theme-toggle.js +3 -3
- package/dist/components/ui/token-demo.esm.js +33 -21
- package/dist/components/ui/token-demo.js +33 -21
- package/dist/components/ui/touch-demo.esm.js +102 -73
- package/dist/components/ui/touch-demo.js +102 -73
- package/dist/components/ui/touch-friendly-interface-demo.esm.js +102 -64
- package/dist/components/ui/touch-friendly-interface-demo.js +102 -64
- package/dist/components/ui/touch-friendly-interface.esm.js +85 -61
- package/dist/components/ui/touch-friendly-interface.js +85 -61
- package/dist/hooks/use-accessibility-support.esm.js +115 -85
- package/dist/hooks/use-accessibility-support.js +115 -85
- package/dist/hooks/use-adaptive-layout.esm.js +56 -33
- package/dist/hooks/use-adaptive-layout.js +56 -33
- package/dist/hooks/use-advanced-patterns.esm.js +57 -42
- package/dist/hooks/use-advanced-patterns.js +57 -42
- package/dist/hooks/use-advanced-transition-system.esm.js +112 -71
- package/dist/hooks/use-advanced-transition-system.js +112 -71
- package/dist/hooks/use-animation-profile.esm.js +63 -34
- package/dist/hooks/use-animation-profile.js +63 -34
- package/dist/hooks/use-battery-animations.esm.js +80 -55
- package/dist/hooks/use-battery-animations.js +80 -55
- package/dist/hooks/use-battery-conscious-loading.esm.js +166 -123
- package/dist/hooks/use-battery-conscious-loading.js +166 -123
- package/dist/hooks/use-battery-optimization.esm.js +78 -55
- package/dist/hooks/use-battery-optimization.js +78 -55
- package/dist/hooks/use-battery-status.esm.js +73 -51
- package/dist/hooks/use-battery-status.js +73 -51
- package/dist/hooks/use-component-performance.esm.js +62 -47
- package/dist/hooks/use-component-performance.js +62 -47
- package/dist/hooks/use-device-loading-states.esm.js +152 -109
- package/dist/hooks/use-device-loading-states.js +152 -109
- package/dist/hooks/use-device.esm.js +25 -14
- package/dist/hooks/use-device.js +25 -14
- package/dist/hooks/use-enterprise-mobile-experience.esm.js +137 -88
- package/dist/hooks/use-enterprise-mobile-experience.js +137 -88
- package/dist/hooks/use-form-feedback.esm.js +124 -81
- package/dist/hooks/use-form-feedback.js +124 -81
- package/dist/hooks/use-form-performance.esm.js +127 -92
- package/dist/hooks/use-form-performance.js +127 -92
- package/dist/hooks/use-frame-rate.esm.js +56 -37
- package/dist/hooks/use-frame-rate.js +56 -37
- package/dist/hooks/use-gestures.esm.js +96 -72
- package/dist/hooks/use-gestures.js +96 -72
- package/dist/hooks/use-hardware-acceleration.esm.js +65 -37
- package/dist/hooks/use-hardware-acceleration.js +65 -37
- package/dist/hooks/use-input-accessibility.esm.js +157 -119
- package/dist/hooks/use-input-accessibility.js +157 -119
- package/dist/hooks/use-input-performance.esm.js +139 -104
- package/dist/hooks/use-input-performance.js +139 -104
- package/dist/hooks/use-layout-performance.esm.js +50 -29
- package/dist/hooks/use-layout-performance.js +50 -29
- package/dist/hooks/use-loading-accessibility.esm.js +209 -169
- package/dist/hooks/use-loading-accessibility.js +209 -169
- package/dist/hooks/use-loading-performance.esm.js +117 -93
- package/dist/hooks/use-loading-performance.js +117 -93
- package/dist/hooks/use-memory-usage.esm.js +57 -38
- package/dist/hooks/use-memory-usage.js +57 -38
- package/dist/hooks/use-mobile-form-layout.esm.js +111 -74
- package/dist/hooks/use-mobile-form-layout.js +111 -74
- package/dist/hooks/use-mobile-form-validation.esm.js +211 -144
- package/dist/hooks/use-mobile-form-validation.js +211 -144
- package/dist/hooks/use-mobile-keyboard-optimization.esm.js +154 -113
- package/dist/hooks/use-mobile-keyboard-optimization.js +154 -113
- package/dist/hooks/use-mobile-layout.esm.js +73 -51
- package/dist/hooks/use-mobile-layout.js +73 -51
- package/dist/hooks/use-mobile-optimization.esm.js +72 -44
- package/dist/hooks/use-mobile-optimization.js +72 -44
- package/dist/hooks/use-mobile-skeleton.esm.js +97 -64
- package/dist/hooks/use-mobile-skeleton.js +97 -64
- package/dist/hooks/use-mobile-touch.esm.js +128 -93
- package/dist/hooks/use-mobile-touch.js +128 -93
- package/dist/hooks/use-performance-throttling.esm.js +72 -48
- package/dist/hooks/use-performance-throttling.js +72 -48
- package/dist/hooks/use-performance.esm.js +90 -52
- package/dist/hooks/use-performance.js +90 -52
- package/dist/hooks/use-reusable-architecture.esm.js +94 -65
- package/dist/hooks/use-reusable-architecture.js +94 -65
- package/dist/hooks/use-semantic-input-types.esm.js +166 -124
- package/dist/hooks/use-semantic-input-types.js +166 -124
- package/dist/hooks/use-semantic-input.esm.js +178 -126
- package/dist/hooks/use-semantic-input.js +178 -126
- package/dist/hooks/use-tablet-layout.esm.js +67 -38
- package/dist/hooks/use-tablet-layout.js +67 -38
- package/dist/hooks/use-touch-friendly-input.esm.js +193 -149
- package/dist/hooks/use-touch-friendly-input.js +193 -149
- package/dist/hooks/use-touch-friendly-interface.esm.js +99 -67
- package/dist/hooks/use-touch-friendly-interface.js +99 -67
- package/dist/hooks/use-touch-optimization.esm.js +99 -72
- package/dist/hooks/use-touch-optimization.js +99 -72
- package/dist/index.esm.js +157 -281
- package/dist/index.js +157 -281
- package/dist/lib/utils.esm.js +1 -1
- package/dist/lib/utils.js +1 -1
- package/dist/plugins/theme-css-generator.esm.js +104 -55
- package/dist/plugins/theme-css-generator.js +104 -55
- package/dist/provider.esm.js +4 -4
- package/dist/provider.js +4 -4
- package/dist/styles.css +1 -1
- package/dist/theme.esm.js +633 -468
- package/dist/theme.js +633 -468
- package/dist/themes/ThemeContext.esm.js +15 -15
- package/dist/themes/ThemeContext.js +15 -15
- package/dist/themes/ThemeProvider.esm.js +25 -22
- package/dist/themes/ThemeProvider.js +25 -22
- package/dist/themes/accessibility.esm.js +147 -108
- package/dist/themes/accessibility.js +147 -108
- package/dist/themes/aria-patterns.esm.js +198 -162
- package/dist/themes/aria-patterns.js +198 -162
- package/dist/themes/base-themes.esm.js +14 -11
- package/dist/themes/base-themes.js +14 -11
- package/dist/themes/colorManager.esm.js +101 -83
- package/dist/themes/colorManager.js +101 -83
- package/dist/themes/examples/dark-theme.esm.js +133 -103
- package/dist/themes/examples/dark-theme.js +133 -103
- package/dist/themes/examples/minimal-theme.esm.js +83 -61
- package/dist/themes/examples/minimal-theme.js +83 -61
- package/dist/themes/focus-management.esm.js +202 -143
- package/dist/themes/focus-management.js +202 -143
- package/dist/themes/fontLoader.esm.js +28 -19
- package/dist/themes/fontLoader.js +28 -19
- package/dist/themes/high-contrast.esm.js +152 -104
- package/dist/themes/high-contrast.js +152 -104
- package/dist/themes/index.esm.js +1 -1
- package/dist/themes/index.js +1 -1
- package/dist/themes/inheritance.esm.js +35 -27
- package/dist/themes/inheritance.js +35 -27
- package/dist/themes/keyboard-navigation.esm.js +152 -123
- package/dist/themes/keyboard-navigation.js +152 -123
- package/dist/themes/motion-reduction.esm.js +193 -133
- package/dist/themes/motion-reduction.js +193 -133
- package/dist/themes/navigation.esm.js +146 -146
- package/dist/themes/navigation.js +146 -146
- package/dist/themes/screen-reader.esm.js +159 -94
- package/dist/themes/screen-reader.js +159 -94
- package/dist/themes/systemThemeDetector.esm.js +42 -34
- package/dist/themes/systemThemeDetector.js +42 -34
- package/dist/themes/themeCSSUpdater.esm.js +21 -9
- package/dist/themes/themeCSSUpdater.js +21 -9
- package/dist/themes/themePersistence.esm.js +68 -47
- package/dist/themes/themePersistence.js +68 -47
- package/dist/themes/themes/stan-design.esm.js +633 -468
- package/dist/themes/themes/stan-design.js +633 -468
- package/dist/themes/types.esm.js +301 -287
- package/dist/themes/types.js +301 -287
- package/dist/themes/useSystemTheme.esm.js +4 -4
- package/dist/themes/useSystemTheme.js +4 -4
- package/dist/themes/useTheme.esm.js +4 -4
- package/dist/themes/useTheme.js +4 -4
- package/dist/themes/validation.esm.js +128 -77
- package/dist/themes/validation.js +128 -77
- package/dist/tokens/index.esm.js +1 -2
- package/dist/tokens/index.js +1 -2
- package/dist/tokens/tokenExporter.esm.js +87 -61
- package/dist/tokens/tokenExporter.js +87 -61
- package/dist/tokens/tokenGenerator.esm.js +86 -77
- package/dist/tokens/tokenGenerator.js +86 -77
- package/dist/tokens/tokenManager.esm.js +64 -51
- package/dist/tokens/tokenManager.js +64 -51
- package/dist/tokens/tokenValidator.esm.js +193 -147
- package/dist/tokens/tokenValidator.js +193 -147
- package/dist/tokens/types.esm.js +49 -35
- package/dist/tokens/types.js +49 -35
- package/dist/utils/bundle-analyzer.esm.js +83 -65
- package/dist/utils/bundle-analyzer.js +83 -65
- package/dist/utils/bundle-splitting.esm.js +142 -117
- package/dist/utils/bundle-splitting.js +142 -117
- package/dist/utils/lazy-loading.esm.js +132 -106
- package/dist/utils/lazy-loading.js +132 -106
- package/dist/utils/performance-monitor.esm.js +170 -129
- package/dist/utils/performance-monitor.js +170 -129
- package/dist/utils/tree-shaking.esm.js +69 -61
- package/dist/utils/tree-shaking.js +69 -61
- package/package.json +1 -1
- package/src/index.ts +146 -146
|
@@ -3,11 +3,17 @@ import { Slot } from "@radix-ui/react-slot"
|
|
|
3
3
|
|
|
4
4
|
export interface ButtonProps
|
|
5
5
|
extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
6
|
-
variant
|
|
6
|
+
variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'
|
|
7
|
+
size?: 'default' | 'sm' | 'lg' | 'icon' | 'mobile'
|
|
8
|
+
asChild?: boolean
|
|
9
|
+
}
|
|
7
10
|
|
|
8
11
|
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
|
9
12
|
({ className, variant = 'default', size = 'default', asChild = false, ...props }, ref) => {
|
|
10
|
-
const Comp = asChild ? Slot
|
|
13
|
+
const Comp = asChild ? Slot : "button"
|
|
14
|
+
|
|
15
|
+
// Build semantic CSS classes using BEM methodology
|
|
16
|
+
const baseClass = 'button'
|
|
11
17
|
const variantClass = `button--variant-${variant}`
|
|
12
18
|
const sizeClass = `button--size-${size}`
|
|
13
19
|
|
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import * as React from "react"
|
|
2
2
|
|
|
3
3
|
export interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
4
|
-
variant
|
|
4
|
+
variant?: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error'
|
|
5
|
+
elevation?: 'base' | 'elevated' | 'interactive'
|
|
6
|
+
size?: 'compact' | 'normal' | 'spacious'
|
|
7
|
+
interactive?: boolean
|
|
8
|
+
disabled?: boolean
|
|
9
|
+
loading?: boolean
|
|
10
|
+
fullWidth?: boolean
|
|
11
|
+
centered?: boolean
|
|
12
|
+
textAlign?: 'left' | 'center' | 'right'
|
|
13
|
+
animateIn?: boolean
|
|
14
|
+
animateOut?: boolean
|
|
15
|
+
}
|
|
5
16
|
|
|
6
17
|
const Card = React.forwardRef<HTMLDivElement, CardProps>(
|
|
7
18
|
({
|
|
@@ -24,8 +35,17 @@ const Card = React.forwardRef<HTMLDivElement, CardProps>(
|
|
|
24
35
|
const variantClass = `card--variant-${variant}`
|
|
25
36
|
const elevationClass = `card--elevation-${elevation}`
|
|
26
37
|
const sizeClass = `card--size-${size}`
|
|
27
|
-
const interactiveClass = interactive ? 'card--interactive'
|
|
28
|
-
const
|
|
38
|
+
const interactiveClass = interactive ? 'card--interactive' : ''
|
|
39
|
+
const disabledClass = disabled ? 'card--disabled' : ''
|
|
40
|
+
const loadingClass = loading ? 'card--loading' : ''
|
|
41
|
+
const fullWidthClass = fullWidth ? 'card--full-width' : ''
|
|
42
|
+
const centeredClass = centered ? 'card--centered' : ''
|
|
43
|
+
const textAlignClass = `card--text-${textAlign}`
|
|
44
|
+
const animateInClass = animateIn ? 'card--animate-in' : ''
|
|
45
|
+
const animateOutClass = animateOut ? 'card--animate-out' : ''
|
|
46
|
+
|
|
47
|
+
// Combine classes
|
|
48
|
+
const cardClasses = [
|
|
29
49
|
baseClass,
|
|
30
50
|
variantClass,
|
|
31
51
|
elevationClass,
|
|
@@ -55,7 +75,8 @@ const Card = React.forwardRef<HTMLDivElement, CardProps>(
|
|
|
55
75
|
Card.displayName = "Card"
|
|
56
76
|
|
|
57
77
|
export interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
58
|
-
spacing
|
|
78
|
+
spacing?: 'compact' | 'normal' | 'spacious'
|
|
79
|
+
}
|
|
59
80
|
|
|
60
81
|
const CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(
|
|
61
82
|
({ className, spacing = 'normal', ...props }, ref) => {
|
|
@@ -80,7 +101,8 @@ const CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(
|
|
|
80
101
|
CardHeader.displayName = "CardHeader"
|
|
81
102
|
|
|
82
103
|
export interface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {
|
|
83
|
-
size
|
|
104
|
+
size?: 'small' | 'normal' | 'large'
|
|
105
|
+
}
|
|
84
106
|
|
|
85
107
|
const CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(
|
|
86
108
|
({ className, size = 'normal', ...props }, ref) => {
|
|
@@ -105,7 +127,8 @@ const CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(
|
|
|
105
127
|
CardTitle.displayName = "CardTitle"
|
|
106
128
|
|
|
107
129
|
export interface CardDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {
|
|
108
|
-
size
|
|
130
|
+
size?: 'small' | 'normal'
|
|
131
|
+
}
|
|
109
132
|
|
|
110
133
|
const CardDescription = React.forwardRef<HTMLParagraphElement, CardDescriptionProps>(
|
|
111
134
|
({ className, size = 'normal', ...props }, ref) => {
|
|
@@ -130,7 +153,8 @@ const CardDescription = React.forwardRef<HTMLParagraphElement, CardDescriptionPr
|
|
|
130
153
|
CardDescription.displayName = "CardDescription"
|
|
131
154
|
|
|
132
155
|
export interface CardContentProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
133
|
-
spacing
|
|
156
|
+
spacing?: 'compact' | 'normal' | 'spacious'
|
|
157
|
+
}
|
|
134
158
|
|
|
135
159
|
const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(
|
|
136
160
|
({ className, spacing = 'normal', ...props }, ref) => {
|
|
@@ -155,7 +179,8 @@ const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(
|
|
|
155
179
|
CardContent.displayName = "CardContent"
|
|
156
180
|
|
|
157
181
|
export interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
158
|
-
layout
|
|
182
|
+
layout?: 'horizontal' | 'vertical' | 'stacked' | 'justified' | 'centered'
|
|
183
|
+
}
|
|
159
184
|
|
|
160
185
|
const CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(
|
|
161
186
|
({ className, layout = 'horizontal', ...props }, ref) => {
|
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import * as React from "react"
|
|
2
2
|
|
|
3
3
|
export interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
4
|
-
variant
|
|
4
|
+
variant?: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error'
|
|
5
|
+
elevation?: 'base' | 'elevated' | 'interactive'
|
|
6
|
+
size?: 'compact' | 'normal' | 'spacious'
|
|
7
|
+
interactive?: boolean
|
|
8
|
+
disabled?: boolean
|
|
9
|
+
loading?: boolean
|
|
10
|
+
fullWidth?: boolean
|
|
11
|
+
centered?: boolean
|
|
12
|
+
textAlign?: 'left' | 'center' | 'right'
|
|
13
|
+
animateIn?: boolean
|
|
14
|
+
animateOut?: boolean
|
|
15
|
+
}
|
|
5
16
|
|
|
6
17
|
const Card = React.forwardRef<HTMLDivElement, CardProps>(
|
|
7
18
|
({
|
|
@@ -24,8 +35,17 @@ const Card = React.forwardRef<HTMLDivElement, CardProps>(
|
|
|
24
35
|
const variantClass = `card--variant-${variant}`
|
|
25
36
|
const elevationClass = `card--elevation-${elevation}`
|
|
26
37
|
const sizeClass = `card--size-${size}`
|
|
27
|
-
const interactiveClass = interactive ? 'card--interactive'
|
|
28
|
-
const
|
|
38
|
+
const interactiveClass = interactive ? 'card--interactive' : ''
|
|
39
|
+
const disabledClass = disabled ? 'card--disabled' : ''
|
|
40
|
+
const loadingClass = loading ? 'card--loading' : ''
|
|
41
|
+
const fullWidthClass = fullWidth ? 'card--full-width' : ''
|
|
42
|
+
const centeredClass = centered ? 'card--centered' : ''
|
|
43
|
+
const textAlignClass = `card--text-${textAlign}`
|
|
44
|
+
const animateInClass = animateIn ? 'card--animate-in' : ''
|
|
45
|
+
const animateOutClass = animateOut ? 'card--animate-out' : ''
|
|
46
|
+
|
|
47
|
+
// Combine classes
|
|
48
|
+
const cardClasses = [
|
|
29
49
|
baseClass,
|
|
30
50
|
variantClass,
|
|
31
51
|
elevationClass,
|
|
@@ -55,7 +75,8 @@ const Card = React.forwardRef<HTMLDivElement, CardProps>(
|
|
|
55
75
|
Card.displayName = "Card"
|
|
56
76
|
|
|
57
77
|
export interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
58
|
-
spacing
|
|
78
|
+
spacing?: 'compact' | 'normal' | 'spacious'
|
|
79
|
+
}
|
|
59
80
|
|
|
60
81
|
const CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(
|
|
61
82
|
({ className, spacing = 'normal', ...props }, ref) => {
|
|
@@ -80,7 +101,8 @@ const CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(
|
|
|
80
101
|
CardHeader.displayName = "CardHeader"
|
|
81
102
|
|
|
82
103
|
export interface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {
|
|
83
|
-
size
|
|
104
|
+
size?: 'small' | 'normal' | 'large'
|
|
105
|
+
}
|
|
84
106
|
|
|
85
107
|
const CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(
|
|
86
108
|
({ className, size = 'normal', ...props }, ref) => {
|
|
@@ -105,7 +127,8 @@ const CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(
|
|
|
105
127
|
CardTitle.displayName = "CardTitle"
|
|
106
128
|
|
|
107
129
|
export interface CardDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {
|
|
108
|
-
size
|
|
130
|
+
size?: 'small' | 'normal'
|
|
131
|
+
}
|
|
109
132
|
|
|
110
133
|
const CardDescription = React.forwardRef<HTMLParagraphElement, CardDescriptionProps>(
|
|
111
134
|
({ className, size = 'normal', ...props }, ref) => {
|
|
@@ -130,7 +153,8 @@ const CardDescription = React.forwardRef<HTMLParagraphElement, CardDescriptionPr
|
|
|
130
153
|
CardDescription.displayName = "CardDescription"
|
|
131
154
|
|
|
132
155
|
export interface CardContentProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
133
|
-
spacing
|
|
156
|
+
spacing?: 'compact' | 'normal' | 'spacious'
|
|
157
|
+
}
|
|
134
158
|
|
|
135
159
|
const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(
|
|
136
160
|
({ className, spacing = 'normal', ...props }, ref) => {
|
|
@@ -155,7 +179,8 @@ const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(
|
|
|
155
179
|
CardContent.displayName = "CardContent"
|
|
156
180
|
|
|
157
181
|
export interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
158
|
-
layout
|
|
182
|
+
layout?: 'horizontal' | 'vertical' | 'stacked' | 'justified' | 'centered'
|
|
183
|
+
}
|
|
159
184
|
|
|
160
185
|
const CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(
|
|
161
186
|
({ className, layout = 'horizontal', ...props }, ref) => {
|
|
@@ -3,15 +3,15 @@ import * as CheckboxPrimitive from "@radix-ui/react-checkbox"
|
|
|
3
3
|
import { Check } from "lucide-react"
|
|
4
4
|
|
|
5
5
|
export interface CheckboxProps extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {
|
|
6
|
-
size
|
|
6
|
+
size?: 'small' | 'default' | 'large';
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
const Checkbox = React.forwardRef<
|
|
10
10
|
React.ElementRef<typeof CheckboxPrimitive.Root>,
|
|
11
11
|
CheckboxProps
|
|
12
12
|
>(({ className, size = 'default', ...props }, ref) => {
|
|
13
|
-
const sizeClass = size !== 'default' ? `checkbox--size-${size}` ;
|
|
14
|
-
const checkmarkSize = size === 'small' ? 'h-3 w-3' === 'large' ? 'h-5 w-5' ;
|
|
13
|
+
const sizeClass = size !== 'default' ? `checkbox--size-${size}` : '';
|
|
14
|
+
const checkmarkSize = size === 'small' ? 'h-3 w-3' : size === 'large' ? 'h-5 w-5' : 'h-4 w-4';
|
|
15
15
|
|
|
16
16
|
return (
|
|
17
17
|
<CheckboxPrimitive.Root
|
|
@@ -3,15 +3,15 @@ import * as CheckboxPrimitive from "@radix-ui/react-checkbox"
|
|
|
3
3
|
import { Check } from "lucide-react"
|
|
4
4
|
|
|
5
5
|
export interface CheckboxProps extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {
|
|
6
|
-
size
|
|
6
|
+
size?: 'small' | 'default' | 'large';
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
const Checkbox = React.forwardRef<
|
|
10
10
|
React.ElementRef<typeof CheckboxPrimitive.Root>,
|
|
11
11
|
CheckboxProps
|
|
12
12
|
>(({ className, size = 'default', ...props }, ref) => {
|
|
13
|
-
const sizeClass = size !== 'default' ? `checkbox--size-${size}` ;
|
|
14
|
-
const checkmarkSize = size === 'small' ? 'h-3 w-3' === 'large' ? 'h-5 w-5' ;
|
|
13
|
+
const sizeClass = size !== 'default' ? `checkbox--size-${size}` : '';
|
|
14
|
+
const checkmarkSize = size === 'small' ? 'h-3 w-3' : size === 'large' ? 'h-5 w-5' : 'h-4 w-4';
|
|
15
15
|
|
|
16
16
|
return (
|
|
17
17
|
<CheckboxPrimitive.Root
|
|
@@ -6,14 +6,14 @@ import { ColorScale, SemanticColors } from '../../themes/types';
|
|
|
6
6
|
import { ColorManager } from '../../themes/colorManager';
|
|
7
7
|
|
|
8
8
|
export interface ColorPreviewProps {
|
|
9
|
-
colorScale
|
|
10
|
-
semanticColors
|
|
11
|
-
scaleName
|
|
12
|
-
showAccessibility
|
|
13
|
-
className
|
|
9
|
+
colorScale?: ColorScale;
|
|
10
|
+
semanticColors?: SemanticColors;
|
|
11
|
+
scaleName?: string;
|
|
12
|
+
showAccessibility?: boolean;
|
|
13
|
+
className?: string;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
export const ColorPreview= ({
|
|
16
|
+
export const ColorPreview: React.FC<ColorPreviewProps> = ({
|
|
17
17
|
colorScale,
|
|
18
18
|
semanticColors,
|
|
19
19
|
scaleName = 'Color Scale',
|
|
@@ -27,7 +27,7 @@ export const ColorPreview= ({
|
|
|
27
27
|
const semantic = semanticColors || currentThemeConfig?.colors.semantic;
|
|
28
28
|
|
|
29
29
|
// Type guard to ensure semantic colors are strings
|
|
30
|
-
const isStringColor = (color)=>
|
|
30
|
+
const isStringColor = (color: unknown): color is string =>
|
|
31
31
|
typeof color === 'string' && color.length > 0;
|
|
32
32
|
|
|
33
33
|
if (!colors) {
|
|
@@ -70,18 +70,20 @@ export const ColorPreview= ({
|
|
|
70
70
|
{/* Color Scale Preview */}
|
|
71
71
|
<div>
|
|
72
72
|
<h4 className="text-sm font-medium mb-3">Color Scale</h4>
|
|
73
|
-
<div className="grid grid-cols-2 md
|
|
73
|
+
<div className="grid grid-cols-2 md:grid-cols-5 gap-3">
|
|
74
|
+
{scaleShades.map(shade => {
|
|
74
75
|
const color = colors[shade as keyof ColorScale];
|
|
75
76
|
if (!color) return null;
|
|
76
77
|
|
|
77
78
|
const accessibility = showAccessibility
|
|
78
79
|
? ColorManager.checkColorContrast(color, '#ffffff')
|
|
79
|
-
;
|
|
80
|
+
: null;
|
|
80
81
|
|
|
81
82
|
return (
|
|
82
83
|
<div key={shade} className="space-y-2">
|
|
83
84
|
<div
|
|
84
|
-
className="w-full h-16 rounded-lg border border-gray-200 dark
|
|
85
|
+
className="w-full h-16 rounded-lg border border-gray-200 dark:border-gray-700"
|
|
86
|
+
style={{ backgroundColor: color }}
|
|
85
87
|
/>
|
|
86
88
|
<div className="text-center">
|
|
87
89
|
<div className="text-xs font-mono font-medium">{shade}</div>
|
|
@@ -89,11 +91,13 @@ export const ColorPreview= ({
|
|
|
89
91
|
{showAccessibility && accessibility && (
|
|
90
92
|
<div className="mt-1">
|
|
91
93
|
<Badge
|
|
92
|
-
variant={accessibility.aa ? 'default' }
|
|
94
|
+
variant={accessibility.aa ? 'default' : 'destructive'}
|
|
93
95
|
className="text-xs"
|
|
94
96
|
>
|
|
95
|
-
{accessibility.contrastRatio.toFixed(1)}
|
|
96
|
-
|
|
97
|
+
{accessibility.contrastRatio.toFixed(1)}:1
|
|
98
|
+
</Badge>
|
|
99
|
+
<div className="text-xs mt-1">
|
|
100
|
+
{accessibility.aa ? 'AA' : 'Fail'}
|
|
97
101
|
{accessibility.aaa && ' AAA'}
|
|
98
102
|
</div>
|
|
99
103
|
</div>
|
|
@@ -108,9 +112,12 @@ export const ColorPreview= ({
|
|
|
108
112
|
{(colors.light || colors.dark || colors.contrast) && (
|
|
109
113
|
<div className="mt-4">
|
|
110
114
|
<h5 className="text-sm font-medium mb-2">Additional Variations</h5>
|
|
111
|
-
<div className="grid grid-cols-1 md
|
|
115
|
+
<div className="grid grid-cols-1 md:grid-cols-3 gap-3">
|
|
116
|
+
{colors.light && (
|
|
117
|
+
<div className="space-y-2">
|
|
112
118
|
<div
|
|
113
|
-
className="w-full h-12 rounded-lg border border-gray-200 dark
|
|
119
|
+
className="w-full h-12 rounded-lg border border-gray-200 dark:border-gray-700"
|
|
120
|
+
style={{ backgroundColor: colors.light }}
|
|
114
121
|
/>
|
|
115
122
|
<div className="text-center">
|
|
116
123
|
<div className="text-xs font-medium">Light</div>
|
|
@@ -122,7 +129,8 @@ export const ColorPreview= ({
|
|
|
122
129
|
{colors.dark && (
|
|
123
130
|
<div className="space-y-2">
|
|
124
131
|
<div
|
|
125
|
-
className="w-full h-12 rounded-lg border border-gray-200 dark
|
|
132
|
+
className="w-full h-12 rounded-lg border border-gray-200 dark:border-gray-700"
|
|
133
|
+
style={{ backgroundColor: colors.dark }}
|
|
126
134
|
/>
|
|
127
135
|
<div className="text-center">
|
|
128
136
|
<div className="text-xs font-medium">Dark</div>
|
|
@@ -134,7 +142,8 @@ export const ColorPreview= ({
|
|
|
134
142
|
{colors.contrast && (
|
|
135
143
|
<div className="space-y-2">
|
|
136
144
|
<div
|
|
137
|
-
className="w-full h-12 rounded-lg border border-gray-200 dark
|
|
145
|
+
className="w-full h-12 rounded-lg border border-gray-200 dark:border-gray-700"
|
|
146
|
+
style={{ backgroundColor: colors.contrast }}
|
|
138
147
|
/>
|
|
139
148
|
<div className="text-center">
|
|
140
149
|
<div className="text-xs font-medium">Contrast</div>
|
|
@@ -151,17 +160,19 @@ export const ColorPreview= ({
|
|
|
151
160
|
{semantic && (
|
|
152
161
|
<div>
|
|
153
162
|
<h4 className="text-sm font-medium mb-3">Semantic Colors</h4>
|
|
154
|
-
<div className="grid grid-cols-2 md
|
|
163
|
+
<div className="grid grid-cols-2 md:grid-cols-4 gap-3">
|
|
164
|
+
{Object.entries(semantic).map(([name, color]) => {
|
|
155
165
|
if (!isStringColor(color) || name.includes('Light') || name.includes('Dark')) return null;
|
|
156
166
|
|
|
157
167
|
const accessibility = showAccessibility
|
|
158
168
|
? ColorManager.checkColorContrast(color, '#ffffff')
|
|
159
|
-
;
|
|
169
|
+
: null;
|
|
160
170
|
|
|
161
171
|
return (
|
|
162
172
|
<div key={name} className="space-y-2">
|
|
163
173
|
<div
|
|
164
|
-
className="w-full h-16 rounded-lg border border-gray-200 dark
|
|
174
|
+
className="w-full h-16 rounded-lg border border-gray-200 dark:border-gray-700"
|
|
175
|
+
style={{ backgroundColor: color }}
|
|
165
176
|
/>
|
|
166
177
|
<div className="text-center">
|
|
167
178
|
<div className="text-xs font-medium capitalize">
|
|
@@ -171,10 +182,13 @@ export const ColorPreview= ({
|
|
|
171
182
|
{showAccessibility && accessibility && (
|
|
172
183
|
<div className="mt-1">
|
|
173
184
|
<Badge
|
|
174
|
-
variant={accessibility.aa ? 'default' }
|
|
185
|
+
variant={accessibility.aa ? 'default' : 'destructive'}
|
|
175
186
|
className="text-xs"
|
|
176
187
|
>
|
|
177
|
-
{accessibility.contrastRatio.toFixed(1)}
|
|
188
|
+
{accessibility.contrastRatio.toFixed(1)}:1
|
|
189
|
+
</Badge>
|
|
190
|
+
</div>
|
|
191
|
+
)}
|
|
178
192
|
</div>
|
|
179
193
|
</div>
|
|
180
194
|
);
|
|
@@ -184,13 +198,15 @@ export const ColorPreview= ({
|
|
|
184
198
|
{/* Light and Dark variants */}
|
|
185
199
|
<div className="mt-4">
|
|
186
200
|
<h5 className="text-sm font-medium mb-2">Semantic Variants</h5>
|
|
187
|
-
<div className="grid grid-cols-2 md
|
|
201
|
+
<div className="grid grid-cols-2 md:grid-cols-4 gap-3">
|
|
202
|
+
{Object.entries(semantic).map(([name, color]) => {
|
|
188
203
|
if (!isStringColor(color) || !name.includes('Light') && !name.includes('Dark')) return null;
|
|
189
204
|
|
|
190
205
|
return (
|
|
191
206
|
<div key={name} className="space-y-2">
|
|
192
207
|
<div
|
|
193
|
-
className="w-full h-12 rounded-lg border border-gray-200 dark
|
|
208
|
+
className="w-full h-12 rounded-lg border border-gray-200 dark:border-gray-700"
|
|
209
|
+
style={{ backgroundColor: color }}
|
|
194
210
|
/>
|
|
195
211
|
<div className="text-center">
|
|
196
212
|
<div className="text-xs font-medium capitalize">
|
|
@@ -213,10 +229,15 @@ export const ColorPreview= ({
|
|
|
213
229
|
<div className="space-y-2 text-xs text-muted-foreground">
|
|
214
230
|
<div className="flex items-center gap-2">
|
|
215
231
|
<Badge variant="default" className="text-xs">AA</Badge>
|
|
216
|
-
<span>WCAG AA standard
|
|
232
|
+
<span>WCAG AA standard: 4.5:1 contrast ratio</span>
|
|
233
|
+
</div>
|
|
234
|
+
<div className="flex items-center gap-2">
|
|
217
235
|
<Badge variant="secondary" className="text-xs">AAA</Badge>
|
|
218
|
-
<span>WCAG AAA standard
|
|
219
|
-
|
|
236
|
+
<span>WCAG AAA standard: 7:1 contrast ratio</span>
|
|
237
|
+
</div>
|
|
238
|
+
<div className="text-xs">
|
|
239
|
+
<strong>Note:</strong> Colors are tested against white background.
|
|
240
|
+
For dark themes, test against appropriate dark backgrounds.
|
|
220
241
|
</div>
|
|
221
242
|
</div>
|
|
222
243
|
</div>
|
|
@@ -227,19 +248,19 @@ export const ColorPreview= ({
|
|
|
227
248
|
<h4 className="text-sm font-medium mb-2">Usage Examples</h4>
|
|
228
249
|
<div className="space-y-3">
|
|
229
250
|
{/* Primary color usage */}
|
|
230
|
-
<div className="p-3 rounded-lg border" style={{ backgroundColor] }}>
|
|
251
|
+
<div className="p-3 rounded-lg border" style={{ backgroundColor: colors[100] }}>
|
|
231
252
|
<div className="space-y-2">
|
|
232
|
-
<h5 className="font-medium" style={{ color] }}>
|
|
253
|
+
<h5 className="font-medium" style={{ color: colors[900] }}>
|
|
233
254
|
Primary Color Usage
|
|
234
255
|
</h5>
|
|
235
|
-
<p className="text-sm" style={{ color] }}>
|
|
256
|
+
<p className="text-sm" style={{ color: colors[700] }}>
|
|
236
257
|
This is an example of how the primary color scale can be used for text and backgrounds.
|
|
237
258
|
</p>
|
|
238
259
|
<div className="flex gap-2">
|
|
239
|
-
<Badge style={{ backgroundColor], color}}>
|
|
260
|
+
<Badge style={{ backgroundColor: colors[500], color: '#ffffff' }}>
|
|
240
261
|
Primary Button
|
|
241
262
|
</Badge>
|
|
242
|
-
<Badge variant="outline" style={{ borderColor], color] }}>
|
|
263
|
+
<Badge variant="outline" style={{ borderColor: colors[500], color: colors[700] }}>
|
|
243
264
|
Secondary Button
|
|
244
265
|
</Badge>
|
|
245
266
|
</div>
|
|
@@ -248,23 +269,24 @@ export const ColorPreview= ({
|
|
|
248
269
|
|
|
249
270
|
{/* Semantic color usage */}
|
|
250
271
|
{semantic && (
|
|
251
|
-
<div className="grid grid-cols-1 md
|
|
272
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-3">
|
|
273
|
+
<div className="p-3 rounded-lg border" style={{ backgroundColor: semantic.successLight }}>
|
|
252
274
|
<div className="space-y-2">
|
|
253
|
-
<h5 className="font-medium" style={{ color}}>
|
|
275
|
+
<h5 className="font-medium" style={{ color: semantic.successDark }}>
|
|
254
276
|
Success State
|
|
255
277
|
</h5>
|
|
256
|
-
<p className="text-sm" style={{ color}}>
|
|
278
|
+
<p className="text-sm" style={{ color: semantic.success }}>
|
|
257
279
|
This shows how semantic colors can be used for different states.
|
|
258
280
|
</p>
|
|
259
281
|
</div>
|
|
260
282
|
</div>
|
|
261
283
|
|
|
262
|
-
<div className="p-3 rounded-lg border" style={{ backgroundColor}}>
|
|
284
|
+
<div className="p-3 rounded-lg border" style={{ backgroundColor: semantic.errorLight }}>
|
|
263
285
|
<div className="space-y-2">
|
|
264
|
-
<h5 className="font-medium" style={{ color}}>
|
|
286
|
+
<h5 className="font-medium" style={{ color: semantic.errorDark }}>
|
|
265
287
|
Error State
|
|
266
288
|
</h5>
|
|
267
|
-
<p className="text-sm" style={{ color}}>
|
|
289
|
+
<p className="text-sm" style={{ color: semantic.error }}>
|
|
268
290
|
Error messages and validation feedback use semantic colors.
|
|
269
291
|
</p>
|
|
270
292
|
</div>
|
|
@@ -280,11 +302,11 @@ export const ColorPreview= ({
|
|
|
280
302
|
|
|
281
303
|
// Multi-color preview component
|
|
282
304
|
export interface ColorShowcaseProps {
|
|
283
|
-
showAccessibility
|
|
284
|
-
className
|
|
305
|
+
showAccessibility?: boolean;
|
|
306
|
+
className?: string;
|
|
285
307
|
}
|
|
286
308
|
|
|
287
|
-
export const ColorShowcase= ({
|
|
309
|
+
export const ColorShowcase: React.FC<ColorShowcaseProps> = ({
|
|
288
310
|
showAccessibility = true,
|
|
289
311
|
className = ''
|
|
290
312
|
}) => {
|
|
@@ -301,7 +323,7 @@ export const ColorShowcase= ({
|
|
|
301
323
|
const { primary, secondary, semantic, neutral, surface, text } = currentThemeConfig.colors;
|
|
302
324
|
|
|
303
325
|
// Type guard to ensure colors are strings
|
|
304
|
-
const isStringColor = (color)=>
|
|
326
|
+
const isStringColor = (color: unknown): color is string =>
|
|
305
327
|
typeof color === 'string' && color.length > 0;
|
|
306
328
|
|
|
307
329
|
return (
|
|
@@ -339,7 +361,8 @@ export const ColorShowcase= ({
|
|
|
339
361
|
</CardDescription>
|
|
340
362
|
</CardHeader>
|
|
341
363
|
<CardContent>
|
|
342
|
-
<div className="grid grid-cols-1 md
|
|
364
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
365
|
+
<div className="space-y-3">
|
|
343
366
|
<h4 className="text-sm font-medium">Surface Colors</h4>
|
|
344
367
|
<div className="space-y-2">
|
|
345
368
|
{Object.entries(surface).map(([name, color]) => {
|
|
@@ -348,7 +371,7 @@ export const ColorShowcase= ({
|
|
|
348
371
|
<div key={name} className="flex items-center gap-3">
|
|
349
372
|
<div
|
|
350
373
|
className="w-8 h-8 rounded border"
|
|
351
|
-
style={{ backgroundColor}}
|
|
374
|
+
style={{ backgroundColor: color }}
|
|
352
375
|
/>
|
|
353
376
|
<div>
|
|
354
377
|
<div className="text-sm font-medium capitalize">{name}</div>
|
|
@@ -369,7 +392,7 @@ export const ColorShowcase= ({
|
|
|
369
392
|
<div key={name} className="flex items-center gap-3">
|
|
370
393
|
<div
|
|
371
394
|
className="w-8 h-8 rounded border"
|
|
372
|
-
style={{ backgroundColor}}
|
|
395
|
+
style={{ backgroundColor: color }}
|
|
373
396
|
/>
|
|
374
397
|
<div>
|
|
375
398
|
<div className="text-sm font-medium capitalize">{name}</div>
|