@idealyst/components 1.0.83 → 1.0.84
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/CLAUDE.md +199 -232
- package/README.md +5 -5
- package/package.json +20 -2
- package/plugin/README.md +272 -0
- package/plugin/test-cases.jsx +112 -0
- package/plugin/web-legacy.js +320 -0
- package/plugin/web.js +422 -124
- package/src/Accordion/Accordion.native.tsx +182 -0
- package/src/Accordion/Accordion.styles.tsx +260 -0
- package/src/Accordion/Accordion.web.tsx +147 -0
- package/src/Accordion/index.native.tsx +3 -0
- package/src/Accordion/index.ts +3 -0
- package/src/Accordion/index.web.tsx +3 -0
- package/src/Accordion/types.ts +23 -0
- package/src/ActivityIndicator/ActivityIndicator.native.tsx +17 -12
- package/src/ActivityIndicator/ActivityIndicator.styles.tsx +83 -109
- package/src/ActivityIndicator/ActivityIndicator.web.tsx +23 -17
- package/src/ActivityIndicator/index.ts +5 -2
- package/src/ActivityIndicator/index.web.ts +5 -2
- package/src/ActivityIndicator/types.ts +15 -10
- package/src/Alert/Alert.native.tsx +113 -0
- package/src/Alert/Alert.styles.tsx +304 -0
- package/src/Alert/Alert.web.tsx +123 -0
- package/src/Alert/index.native.ts +5 -0
- package/src/Alert/index.ts +5 -0
- package/src/Alert/index.web.ts +5 -0
- package/src/Alert/types.ts +21 -0
- package/src/Avatar/Avatar.native.tsx +8 -6
- package/src/Avatar/Avatar.styles.tsx +64 -58
- package/src/Avatar/Avatar.web.tsx +13 -8
- package/src/Avatar/index.ts +5 -2
- package/src/Avatar/index.web.ts +5 -2
- package/src/Avatar/types.ts +19 -13
- package/src/Badge/Badge.native.tsx +59 -14
- package/src/Badge/Badge.styles.tsx +125 -139
- package/src/Badge/Badge.web.tsx +72 -16
- package/src/Badge/index.ts +5 -2
- package/src/Badge/index.web.ts +5 -2
- package/src/Badge/types.ts +23 -11
- package/src/Breadcrumb/Breadcrumb.native.tsx +225 -0
- package/src/Breadcrumb/Breadcrumb.styles.tsx +234 -0
- package/src/Breadcrumb/Breadcrumb.web.tsx +268 -0
- package/src/Breadcrumb/index.native.ts +5 -0
- package/src/Breadcrumb/index.ts +5 -0
- package/src/Breadcrumb/index.web.ts +5 -0
- package/src/Breadcrumb/types.ts +56 -0
- package/src/Button/Button.native.tsx +75 -24
- package/src/Button/Button.styles.tsx +248 -205
- package/src/Button/Button.web.tsx +82 -25
- package/src/Button/index.ts +5 -5
- package/src/Button/index.web.ts +5 -3
- package/src/Button/types.ts +32 -15
- package/src/Card/Card.native.tsx +14 -11
- package/src/Card/Card.styles.tsx +146 -220
- package/src/Card/Card.web.tsx +20 -21
- package/src/Card/index.ts +5 -5
- package/src/Card/index.web.ts +5 -3
- package/src/Card/types.ts +24 -17
- package/src/Checkbox/Checkbox.native.tsx +24 -34
- package/src/Checkbox/Checkbox.styles.tsx +223 -275
- package/src/Checkbox/Checkbox.web.tsx +30 -37
- package/src/Checkbox/index.ts +5 -5
- package/src/Checkbox/index.web.ts +5 -3
- package/src/Checkbox/types.ts +26 -20
- package/src/Chip/Chip.native.tsx +126 -0
- package/src/Chip/Chip.styles.tsx +138 -0
- package/src/Chip/Chip.web.tsx +154 -0
- package/src/Chip/index.native.ts +5 -0
- package/src/Chip/index.ts +5 -0
- package/src/Chip/index.web.ts +5 -0
- package/src/Chip/types.ts +51 -0
- package/src/Dialog/Dialog.native.tsx +65 -12
- package/src/Dialog/Dialog.styles.tsx +154 -136
- package/src/Dialog/Dialog.web.tsx +16 -11
- package/src/Dialog/index.ts +5 -2
- package/src/Dialog/index.web.ts +5 -2
- package/src/Dialog/types.ts +22 -16
- package/src/Divider/Divider.native.tsx +19 -14
- package/src/Divider/Divider.styles.tsx +273 -595
- package/src/Divider/Divider.web.tsx +19 -12
- package/src/Divider/index.ts +5 -5
- package/src/Divider/index.web.ts +5 -3
- package/src/Divider/types.ts +28 -19
- package/src/Icon/Icon.native.tsx +17 -24
- package/src/Icon/Icon.styles.tsx +64 -48
- package/src/Icon/Icon.web.tsx +14 -11
- package/src/Icon/IconSvg/IconSvg.native.tsx +42 -0
- package/src/Icon/IconSvg/IconSvg.web.tsx +40 -0
- package/src/Icon/IconSvg/index.native.ts +1 -0
- package/src/Icon/IconSvg/index.ts +1 -0
- package/src/Icon/icon-resolver.native.ts +27 -0
- package/src/Icon/icon-resolver.ts +70 -0
- package/src/Icon/index.ts +5 -5
- package/src/Icon/index.web.ts +5 -3
- package/src/Icon/types.ts +17 -11
- package/src/Image/Image.native.tsx +86 -0
- package/src/Image/Image.styles.tsx +57 -0
- package/src/Image/Image.web.tsx +92 -0
- package/src/Image/index.native.ts +5 -0
- package/src/Image/index.ts +5 -0
- package/src/Image/types.ts +21 -0
- package/src/Input/Input.native.tsx +103 -26
- package/src/Input/Input.styles.tsx +240 -177
- package/src/Input/Input.web.tsx +141 -38
- package/src/Input/index.ts +5 -5
- package/src/Input/index.web.ts +5 -3
- package/src/Input/types.ts +43 -20
- package/src/List/List.native.tsx +56 -0
- package/src/List/List.styles.tsx +257 -0
- package/src/List/List.web.tsx +43 -0
- package/src/List/ListContext.tsx +16 -0
- package/src/List/ListItem.native.tsx +111 -0
- package/src/List/ListItem.web.tsx +110 -0
- package/src/List/ListSection.native.tsx +31 -0
- package/src/List/ListSection.web.tsx +33 -0
- package/src/List/index.native.tsx +5 -0
- package/src/List/index.ts +5 -0
- package/src/List/index.web.tsx +5 -0
- package/src/List/types.ts +42 -0
- package/src/Menu/Menu.native.tsx +150 -0
- package/src/Menu/Menu.styles.tsx +185 -0
- package/src/Menu/Menu.web.tsx +99 -0
- package/src/Menu/MenuItem.native.tsx +66 -0
- package/src/Menu/MenuItem.styles.tsx +119 -0
- package/src/Menu/MenuItem.web.tsx +67 -0
- package/src/Menu/index.native.ts +3 -0
- package/src/Menu/index.ts +3 -0
- package/src/Menu/index.web.ts +3 -0
- package/src/Menu/types.ts +30 -0
- package/src/Popover/Popover.native.tsx +102 -32
- package/src/Popover/Popover.styles.tsx +100 -67
- package/src/Popover/Popover.web.tsx +36 -260
- package/src/Popover/index.ts +5 -2
- package/src/Popover/index.web.ts +5 -2
- package/src/Popover/types.ts +14 -13
- package/src/Pressable/Pressable.native.tsx +7 -6
- package/src/Pressable/Pressable.web.tsx +8 -6
- package/src/Pressable/index.ts +5 -2
- package/src/Pressable/index.web.ts +5 -2
- package/src/Pressable/types.ts +11 -10
- package/src/Progress/Progress.native.tsx +179 -0
- package/src/Progress/Progress.styles.tsx +164 -0
- package/src/Progress/Progress.web.tsx +144 -0
- package/src/Progress/index.native.ts +1 -0
- package/src/Progress/index.ts +5 -0
- package/src/Progress/index.web.ts +5 -0
- package/src/Progress/types.ts +21 -0
- package/src/RadioButton/RadioButton.native.tsx +88 -0
- package/src/RadioButton/RadioButton.styles.tsx +163 -0
- package/src/RadioButton/RadioButton.web.tsx +85 -0
- package/src/RadioButton/RadioGroup.native.tsx +43 -0
- package/src/RadioButton/RadioGroup.web.tsx +49 -0
- package/src/RadioButton/index.native.ts +2 -0
- package/src/RadioButton/index.ts +2 -0
- package/src/RadioButton/index.web.ts +2 -0
- package/src/RadioButton/types.ts +29 -0
- package/src/SVGImage/SVGImage.native.tsx +9 -7
- package/src/SVGImage/SVGImage.styles.tsx +63 -55
- package/src/SVGImage/SVGImage.web.tsx +16 -13
- package/src/SVGImage/index.ts +5 -5
- package/src/SVGImage/index.web.ts +5 -2
- package/src/SVGImage/types.ts +7 -3
- package/src/Screen/Screen.native.tsx +43 -17
- package/src/Screen/Screen.styles.tsx +58 -54
- package/src/Screen/Screen.web.tsx +11 -5
- package/src/Screen/index.ts +5 -2
- package/src/Screen/index.web.ts +5 -2
- package/src/Screen/types.ts +23 -9
- package/src/Select/Select.native.tsx +140 -63
- package/src/Select/Select.styles.tsx +312 -302
- package/src/Select/Select.web.tsx +156 -316
- package/src/Select/index.ts +5 -2
- package/src/Select/index.web.ts +5 -2
- package/src/Select/types.ts +13 -7
- package/src/Skeleton/Skeleton.native.tsx +139 -0
- package/src/Skeleton/Skeleton.styles.tsx +59 -0
- package/src/Skeleton/Skeleton.web.tsx +112 -0
- package/src/Skeleton/index.native.ts +4 -0
- package/src/Skeleton/index.ts +5 -0
- package/src/Skeleton/index.web.ts +5 -0
- package/src/Skeleton/types.ts +75 -0
- package/src/Slider/Slider.native.tsx +248 -0
- package/src/Slider/Slider.styles.tsx +241 -0
- package/src/Slider/Slider.web.tsx +226 -0
- package/src/Slider/index.native.ts +3 -0
- package/src/Slider/index.ts +5 -0
- package/src/Slider/index.web.ts +5 -0
- package/src/Slider/types.ts +31 -0
- package/src/Switch/Switch.native.tsx +131 -0
- package/src/Switch/Switch.styles.tsx +169 -0
- package/src/Switch/Switch.web.tsx +121 -0
- package/src/Switch/index.native.ts +3 -0
- package/src/Switch/index.ts +5 -0
- package/src/Switch/index.web.ts +5 -0
- package/src/Switch/types.ts +21 -0
- package/src/TabBar/TabBar.native.tsx +142 -0
- package/src/TabBar/TabBar.styles.tsx +399 -0
- package/src/TabBar/TabBar.web.tsx +205 -0
- package/src/TabBar/index.native.tsx +3 -0
- package/src/TabBar/index.ts +3 -0
- package/src/TabBar/index.web.tsx +3 -0
- package/src/TabBar/types.ts +26 -0
- package/src/Table/Table.native.tsx +122 -0
- package/src/Table/Table.styles.tsx +283 -0
- package/src/Table/Table.web.tsx +112 -0
- package/src/Table/index.native.tsx +3 -0
- package/src/Table/index.ts +3 -0
- package/src/Table/index.web.tsx +3 -0
- package/src/Table/types.ts +28 -0
- package/src/Text/Text.native.tsx +12 -11
- package/src/Text/Text.styles.tsx +76 -64
- package/src/Text/Text.web.tsx +14 -9
- package/src/Text/index.ts +5 -5
- package/src/Text/index.web.ts +5 -3
- package/src/Text/types.ts +20 -13
- package/src/TextArea/TextArea.native.tsx +134 -0
- package/src/TextArea/TextArea.styles.tsx +175 -0
- package/src/TextArea/TextArea.web.tsx +156 -0
- package/src/TextArea/index.native.ts +3 -0
- package/src/TextArea/index.ts +3 -0
- package/src/TextArea/index.web.ts +3 -0
- package/src/TextArea/types.ts +30 -0
- package/src/Tooltip/Tooltip.native.tsx +165 -0
- package/src/Tooltip/Tooltip.styles.tsx +73 -0
- package/src/Tooltip/Tooltip.web.tsx +87 -0
- package/src/Tooltip/index.native.ts +3 -0
- package/src/Tooltip/index.ts +3 -0
- package/src/Tooltip/types.ts +18 -0
- package/src/Video/Video.native.tsx +105 -0
- package/src/Video/Video.styles.tsx +39 -0
- package/src/Video/Video.web.tsx +115 -0
- package/src/Video/index.native.ts +5 -0
- package/src/Video/index.ts +5 -0
- package/src/Video/types.ts +29 -0
- package/src/View/View.native.tsx +9 -14
- package/src/View/View.styles.tsx +101 -93
- package/src/View/View.web.tsx +16 -17
- package/src/View/index.ts +5 -5
- package/src/View/index.web.ts +5 -3
- package/src/View/types.ts +29 -21
- package/src/examples/AccordionExamples.tsx +126 -0
- package/src/examples/AlertExamples.tsx +280 -0
- package/src/examples/AvatarExamples.tsx +23 -23
- package/src/examples/BadgeExamples.tsx +109 -41
- package/src/examples/BreadcrumbExamples.tsx +312 -0
- package/src/examples/ButtonExamples.tsx +160 -33
- package/src/examples/CardExamples.tsx +40 -40
- package/src/examples/CheckboxExamples.tsx +12 -12
- package/src/examples/ChipExamples.tsx +197 -0
- package/src/examples/DialogExamples.tsx +22 -22
- package/src/examples/DividerExamples.tsx +49 -49
- package/src/examples/IconExamples.tsx +270 -54
- package/src/examples/ImageExamples.tsx +174 -0
- package/src/examples/InputExamples.tsx +75 -17
- package/src/examples/ListExamples.tsx +288 -0
- package/src/examples/MenuExamples.tsx +144 -0
- package/src/examples/PopoverExamples.tsx +69 -73
- package/src/examples/ProgressExamples.tsx +137 -0
- package/src/examples/RadioButtonExamples.tsx +161 -0
- package/src/examples/SVGImageExamples.tsx +19 -17
- package/src/examples/ScreenExamples.tsx +31 -31
- package/src/examples/SelectExamples.tsx +67 -67
- package/src/examples/SkeletonExamples.tsx +206 -0
- package/src/examples/SliderExamples.tsx +200 -0
- package/src/examples/SwitchExamples.tsx +182 -0
- package/src/examples/TabBarExamples.tsx +143 -0
- package/src/examples/TableExamples.tsx +280 -0
- package/src/examples/TextAreaExamples.tsx +173 -0
- package/src/examples/TextExamples.tsx +28 -32
- package/src/examples/ThemeExtensionExamples.tsx +10 -10
- package/src/examples/TooltipExamples.tsx +126 -0
- package/src/examples/VideoExamples.tsx +144 -0
- package/src/examples/ViewExamples.tsx +64 -56
- package/src/examples/index.ts +17 -3
- package/src/hooks/useMergeRefs.ts +16 -0
- package/src/hooks/useSmartPosition.native.ts +169 -0
- package/src/index.native.ts +80 -9
- package/src/index.ts +71 -1
- package/src/internal/BoundedModalContent.native.tsx +58 -0
- package/src/internal/PositionedPortal.tsx +254 -0
- package/src/internal/SafeAreaDebugOverlay.native.tsx +173 -0
- package/src/unistyles.d.ts +6 -0
- package/src/utils/buildSizeVariants.ts +16 -0
- package/src/utils/deepMerge.ts +43 -0
- package/src/utils/positionUtils.native.ts +280 -0
- package/src/utils/styleHelpers.ts +48 -0
- package/LLM-ACCESS-GUIDE.md +0 -143
- package/src/ActivityIndicator/README.md +0 -132
- package/src/Avatar/README.md +0 -139
- package/src/Badge/README.md +0 -170
- package/src/Button/Button.types.ts +0 -12
- package/src/Button/README.md +0 -262
- package/src/Card/README.md +0 -258
- package/src/Checkbox/README.md +0 -102
- package/src/Dialog/README.md +0 -210
- package/src/Divider/README.md +0 -108
- package/src/Icon/README.md +0 -81
- package/src/Input/README.md +0 -100
- package/src/SVGImage/README.md +0 -209
- package/src/Screen/README.md +0 -86
- package/src/Select/README.md +0 -166
- package/src/Text/README.md +0 -94
- package/src/View/README.md +0 -107
- package/src/examples/AllExamples.tsx +0 -88
- package/src/examples/README.md +0 -136
- package/src/examples/ValidationExamples.tsx +0 -95
- package/src/examples/extendedTheme.ts +0 -329
- package/src/theme/breakpoints.ts +0 -8
- package/src/theme/colorResolver.ts +0 -218
- package/src/theme/colors.ts +0 -315
- package/src/theme/defaultThemes.ts +0 -326
- package/src/theme/index.ts +0 -188
- package/src/theme/themeBuilder.ts +0 -602
- package/src/theme/unistyles.d.ts +0 -6
- package/src/theme/variantHelpers.ts +0 -584
- package/src/theme/variants.ts +0 -56
package/src/Avatar/README.md
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
# Avatar Component
|
|
2
|
-
|
|
3
|
-
A flexible avatar component for displaying user profile pictures with fallback support.
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- ✅ Cross-platform (React & React Native)
|
|
8
|
-
- ✅ Multiple sizes (small, medium, large, xlarge)
|
|
9
|
-
- ✅ Shape variants (circle, square)
|
|
10
|
-
- ✅ Automatic fallback to initials when image fails
|
|
11
|
-
- ✅ Color-themed backgrounds for fallback text
|
|
12
|
-
- ✅ Accessible with proper alt text support
|
|
13
|
-
- ✅ TypeScript support
|
|
14
|
-
|
|
15
|
-
## Basic Usage
|
|
16
|
-
|
|
17
|
-
```tsx
|
|
18
|
-
import { Avatar } from '@idealyst/components';
|
|
19
|
-
|
|
20
|
-
// With image URL
|
|
21
|
-
<Avatar
|
|
22
|
-
src="https://example.com/avatar.jpg"
|
|
23
|
-
alt="John Doe"
|
|
24
|
-
fallback="JD"
|
|
25
|
-
size="medium"
|
|
26
|
-
/>
|
|
27
|
-
|
|
28
|
-
// With local image (React Native)
|
|
29
|
-
<Avatar
|
|
30
|
-
src={require('./avatar.png')}
|
|
31
|
-
alt="John Doe"
|
|
32
|
-
fallback="JD"
|
|
33
|
-
size="large"
|
|
34
|
-
/>
|
|
35
|
-
|
|
36
|
-
// Fallback only (no image)
|
|
37
|
-
<Avatar
|
|
38
|
-
fallback="AB"
|
|
39
|
-
size="small"
|
|
40
|
-
color="primary"
|
|
41
|
-
/>
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
## Props
|
|
45
|
-
|
|
46
|
-
| Prop | Type | Default | Description |
|
|
47
|
-
|------|------|---------|-------------|
|
|
48
|
-
| `src` | `string \| any` | - | Image source (URL string or require() for local images) |
|
|
49
|
-
| `alt` | `string` | - | Alt text for accessibility |
|
|
50
|
-
| `fallback` | `string` | - | Fallback text to display (usually initials) |
|
|
51
|
-
| `size` | `'small' \| 'medium' \| 'large' \| 'xlarge'` | `'medium'` | Size of the avatar |
|
|
52
|
-
| `shape` | `'circle' \| 'square'` | `'circle'` | Shape of the avatar |
|
|
53
|
-
| `color` | `ColorVariant` | - | Color scheme for fallback background |
|
|
54
|
-
| `style` | `ViewStyle` | - | Additional custom styles |
|
|
55
|
-
| `testID` | `string` | - | Test identifier for testing |
|
|
56
|
-
|
|
57
|
-
## Sizes
|
|
58
|
-
|
|
59
|
-
| Size | Dimensions |
|
|
60
|
-
|------|------------|
|
|
61
|
-
| `small` | 32×32px |
|
|
62
|
-
| `medium` | 48×48px |
|
|
63
|
-
| `large` | 64×64px |
|
|
64
|
-
| `xlarge` | 96×96px |
|
|
65
|
-
|
|
66
|
-
## Examples
|
|
67
|
-
|
|
68
|
-
### Different Sizes
|
|
69
|
-
```tsx
|
|
70
|
-
<Avatar src="https://example.com/user.jpg" size="small" fallback="JS" />
|
|
71
|
-
<Avatar src="https://example.com/user.jpg" size="medium" fallback="JS" />
|
|
72
|
-
<Avatar src="https://example.com/user.jpg" size="large" fallback="JS" />
|
|
73
|
-
<Avatar src="https://example.com/user.jpg" size="xlarge" fallback="JS" />
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### Different Shapes
|
|
77
|
-
```tsx
|
|
78
|
-
<Avatar src="https://example.com/user.jpg" shape="circle" fallback="JS" />
|
|
79
|
-
<Avatar src="https://example.com/user.jpg" shape="square" fallback="JS" />
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Fallback with Colors
|
|
83
|
-
```tsx
|
|
84
|
-
<Avatar fallback="AB" color="primary" />
|
|
85
|
-
<Avatar fallback="CD" color="secondary" />
|
|
86
|
-
<Avatar fallback="EF" color="success" />
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### Error Handling
|
|
90
|
-
```tsx
|
|
91
|
-
// If the image fails to load, fallback text will be shown automatically
|
|
92
|
-
<Avatar
|
|
93
|
-
src="https://invalid-url.com/image.jpg"
|
|
94
|
-
fallback="JD"
|
|
95
|
-
alt="John Doe"
|
|
96
|
-
/>
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
## Accessibility
|
|
100
|
-
|
|
101
|
-
- Uses proper alt text for images
|
|
102
|
-
- Fallback text is readable by screen readers
|
|
103
|
-
- Maintains proper contrast ratios for text
|
|
104
|
-
- Follows accessibility best practices for user avatars
|
|
105
|
-
|
|
106
|
-
## Styling
|
|
107
|
-
|
|
108
|
-
The Avatar component uses the theme system for consistent styling:
|
|
109
|
-
|
|
110
|
-
```tsx
|
|
111
|
-
// Custom styling
|
|
112
|
-
<Avatar
|
|
113
|
-
src="https://example.com/user.jpg"
|
|
114
|
-
style={{
|
|
115
|
-
borderWidth: 2,
|
|
116
|
-
borderColor: '#007AFF'
|
|
117
|
-
}}
|
|
118
|
-
/>
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
## Platform Differences
|
|
122
|
-
|
|
123
|
-
### React Native
|
|
124
|
-
- Uses `Image` component with proper error handling
|
|
125
|
-
- Supports both local (`require()`) and remote images
|
|
126
|
-
- Uses `accessibilityLabel` for screen readers
|
|
127
|
-
|
|
128
|
-
### Web
|
|
129
|
-
- Uses HTML `<img>` element
|
|
130
|
-
- Proper `alt` attribute for accessibility
|
|
131
|
-
- CSS-based styling with `object-fit: cover`
|
|
132
|
-
|
|
133
|
-
## Best Practices
|
|
134
|
-
|
|
135
|
-
1. **Always provide fallback text** for when images fail to load
|
|
136
|
-
2. **Use meaningful alt text** that describes the person or content
|
|
137
|
-
3. **Keep fallback text short** (usually 1-3 characters for initials)
|
|
138
|
-
4. **Choose appropriate sizes** for your use case
|
|
139
|
-
5. **Consider accessibility** when choosing colors and contrast
|
package/src/Badge/README.md
DELETED
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
# Badge Component
|
|
2
|
-
|
|
3
|
-
A versatile badge component for displaying status, counts, or indicators with multiple visual styles.
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- ✅ Cross-platform (React & React Native)
|
|
8
|
-
- ✅ Multiple sizes (small, medium, large)
|
|
9
|
-
- ✅ Three variants (filled, outlined, dot)
|
|
10
|
-
- ✅ Color scheme support with theme integration
|
|
11
|
-
- ✅ Accessible with proper ARIA roles
|
|
12
|
-
- ✅ TypeScript support
|
|
13
|
-
|
|
14
|
-
## Basic Usage
|
|
15
|
-
|
|
16
|
-
```tsx
|
|
17
|
-
import { Badge } from '@idealyst/components';
|
|
18
|
-
|
|
19
|
-
// Basic filled badge
|
|
20
|
-
<Badge color="blue">5</Badge>
|
|
21
|
-
|
|
22
|
-
// Outlined badge
|
|
23
|
-
<Badge variant="outlined" color="green">New</Badge>
|
|
24
|
-
|
|
25
|
-
// Dot indicator
|
|
26
|
-
<Badge variant="dot" color="red" />
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## Props
|
|
30
|
-
|
|
31
|
-
| Prop | Type | Default | Description |
|
|
32
|
-
|------|------|---------|-------------|
|
|
33
|
-
| `children` | `ReactNode` | - | Content to display inside the badge (not used for dot variant) |
|
|
34
|
-
| `size` | `'small' \| 'medium' \| 'large'` | `'medium'` | Size of the badge |
|
|
35
|
-
| `variant` | `'filled' \| 'outlined' \| 'dot'` | `'filled'` | Visual style variant |
|
|
36
|
-
| `color` | `DisplayColorVariant` | `'blue'` | Color scheme for the badge |
|
|
37
|
-
| `style` | `ViewStyle` | - | Additional custom styles |
|
|
38
|
-
| `testID` | `string` | - | Test identifier for testing |
|
|
39
|
-
|
|
40
|
-
## Variants
|
|
41
|
-
|
|
42
|
-
### Filled Badge
|
|
43
|
-
The default variant with a solid background color.
|
|
44
|
-
|
|
45
|
-
```tsx
|
|
46
|
-
<Badge variant="filled" color="blue">3</Badge>
|
|
47
|
-
<Badge variant="filled" color="green">New</Badge>
|
|
48
|
-
<Badge variant="filled" color="red">!</Badge>
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### Outlined Badge
|
|
52
|
-
A badge with a border and transparent background.
|
|
53
|
-
|
|
54
|
-
```tsx
|
|
55
|
-
<Badge variant="outlined" color="blue">Draft</Badge>
|
|
56
|
-
<Badge variant="outlined" color="amber">Pending</Badge>
|
|
57
|
-
<Badge variant="outlined" color="gray">Inactive</Badge>
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### Dot Badge
|
|
61
|
-
A small circular indicator without text content.
|
|
62
|
-
|
|
63
|
-
```tsx
|
|
64
|
-
<Badge variant="dot" color="red" />
|
|
65
|
-
<Badge variant="dot" color="green" />
|
|
66
|
-
<Badge variant="dot" color="blue" />
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## Sizes
|
|
70
|
-
|
|
71
|
-
| Size | Description | Use Case |
|
|
72
|
-
|------|-------------|----------|
|
|
73
|
-
| `small` | Compact size | Inline indicators, tight spaces |
|
|
74
|
-
| `medium` | Standard size | General use, notifications |
|
|
75
|
-
| `large` | Prominent size | Important status, emphasis |
|
|
76
|
-
|
|
77
|
-
```tsx
|
|
78
|
-
<Badge size="small" color="blue">1</Badge>
|
|
79
|
-
<Badge size="medium" color="blue">10</Badge>
|
|
80
|
-
<Badge size="large" color="blue">99+</Badge>
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Color Variants
|
|
84
|
-
|
|
85
|
-
The badge supports various color schemes from the theme system:
|
|
86
|
-
|
|
87
|
-
```tsx
|
|
88
|
-
<Badge color="blue">Primary</Badge>
|
|
89
|
-
<Badge color="green">Success</Badge>
|
|
90
|
-
<Badge color="red">Error</Badge>
|
|
91
|
-
<Badge color="amber">Warning</Badge>
|
|
92
|
-
<Badge color="gray">Neutral</Badge>
|
|
93
|
-
<Badge color="cyan">Info</Badge>
|
|
94
|
-
<Badge color="purple">Purple</Badge>
|
|
95
|
-
<Badge color="pink">Pink</Badge>
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
## Common Use Cases
|
|
99
|
-
|
|
100
|
-
### Notification Count
|
|
101
|
-
```tsx
|
|
102
|
-
<View style={{ position: 'relative' }}>
|
|
103
|
-
<Icon name="bell" />
|
|
104
|
-
<Badge
|
|
105
|
-
size="small"
|
|
106
|
-
color="red"
|
|
107
|
-
style={{ position: 'absolute', top: -5, right: -5 }}
|
|
108
|
-
>
|
|
109
|
-
3
|
|
110
|
-
</Badge>
|
|
111
|
-
</View>
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
### Status Indicator
|
|
115
|
-
```tsx
|
|
116
|
-
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>
|
|
117
|
-
<Text>Server Status</Text>
|
|
118
|
-
<Badge variant="dot" color="green" />
|
|
119
|
-
</View>
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### Category Labels
|
|
123
|
-
```tsx
|
|
124
|
-
<View style={{ flexDirection: 'row', gap: 8 }}>
|
|
125
|
-
<Badge variant="outlined" color="blue">React</Badge>
|
|
126
|
-
<Badge variant="outlined" color="green">TypeScript</Badge>
|
|
127
|
-
<Badge variant="outlined" color="purple">UI</Badge>
|
|
128
|
-
</View>
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### Priority Indicators
|
|
132
|
-
```tsx
|
|
133
|
-
<Badge variant="filled" color="red" size="small">High</Badge>
|
|
134
|
-
<Badge variant="filled" color="amber" size="small">Medium</Badge>
|
|
135
|
-
<Badge variant="filled" color="gray" size="small">Low</Badge>
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
## Accessibility
|
|
139
|
-
|
|
140
|
-
- Uses `role="status"` for screen readers
|
|
141
|
-
- Dot variant includes `aria-label="status indicator"`
|
|
142
|
-
- Proper contrast ratios for text visibility
|
|
143
|
-
- Keyboard accessible when interactive
|
|
144
|
-
|
|
145
|
-
## Styling
|
|
146
|
-
|
|
147
|
-
```tsx
|
|
148
|
-
// Custom positioning for notification badges
|
|
149
|
-
<Badge
|
|
150
|
-
color="red"
|
|
151
|
-
style={{
|
|
152
|
-
position: 'absolute',
|
|
153
|
-
top: -8,
|
|
154
|
-
right: -8,
|
|
155
|
-
minWidth: 20,
|
|
156
|
-
minHeight: 20
|
|
157
|
-
}}
|
|
158
|
-
>
|
|
159
|
-
{notificationCount}
|
|
160
|
-
</Badge>
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
## Best Practices
|
|
164
|
-
|
|
165
|
-
1. **Keep text short** - Use abbreviations or symbols for long text
|
|
166
|
-
2. **Use appropriate colors** - Red for errors/urgent, green for success, etc.
|
|
167
|
-
3. **Consider accessibility** - Ensure sufficient contrast for text badges
|
|
168
|
-
4. **Position carefully** - For overlay badges, ensure they don't obscure important content
|
|
169
|
-
5. **Limit usage** - Don't overuse badges as they can create visual clutter
|
|
170
|
-
6. **Use dot variant** for simple status indicators without text
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { TouchableOpacityProps } from 'react-native';
|
|
2
|
-
import { IntentNames } from '../theme';
|
|
3
|
-
|
|
4
|
-
export interface ButtonProps extends Omit<TouchableOpacityProps, 'disabled'> {
|
|
5
|
-
title: string;
|
|
6
|
-
onPress: () => void;
|
|
7
|
-
variant?: 'contained' | 'outlined' | 'text';
|
|
8
|
-
intent?: IntentNames;
|
|
9
|
-
size?: 'small' | 'medium' | 'large';
|
|
10
|
-
disabled?: boolean;
|
|
11
|
-
loading?: boolean;
|
|
12
|
-
}
|
package/src/Button/README.md
DELETED
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
# Button Component
|
|
2
|
-
|
|
3
|
-
A versatile button component with multiple variants, intents, and sizes for consistent user interactions.
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- ✅ Cross-platform (React & React Native)
|
|
8
|
-
- ✅ Three variants (contained, outlined, text)
|
|
9
|
-
- ✅ Intent-based color system
|
|
10
|
-
- ✅ Multiple sizes (small, medium, large)
|
|
11
|
-
- ✅ Disabled and loading states
|
|
12
|
-
- ✅ Accessible with proper ARIA attributes
|
|
13
|
-
- ✅ TypeScript support
|
|
14
|
-
|
|
15
|
-
## Basic Usage
|
|
16
|
-
|
|
17
|
-
```tsx
|
|
18
|
-
import { Button } from '@idealyst/components';
|
|
19
|
-
|
|
20
|
-
// Basic contained button
|
|
21
|
-
<Button
|
|
22
|
-
variant="contained"
|
|
23
|
-
intent="primary"
|
|
24
|
-
onPress={() => console.log('Pressed!')}
|
|
25
|
-
>
|
|
26
|
-
Click Me
|
|
27
|
-
</Button>
|
|
28
|
-
|
|
29
|
-
// Outlined button
|
|
30
|
-
<Button
|
|
31
|
-
variant="outlined"
|
|
32
|
-
intent="neutral"
|
|
33
|
-
onPress={handlePress}
|
|
34
|
-
>
|
|
35
|
-
Cancel
|
|
36
|
-
</Button>
|
|
37
|
-
|
|
38
|
-
// Text button
|
|
39
|
-
<Button
|
|
40
|
-
variant="text"
|
|
41
|
-
intent="primary"
|
|
42
|
-
onPress={handlePress}
|
|
43
|
-
>
|
|
44
|
-
Learn More
|
|
45
|
-
</Button>
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## Props
|
|
49
|
-
|
|
50
|
-
| Prop | Type | Default | Description |
|
|
51
|
-
|------|------|---------|-------------|
|
|
52
|
-
| `children` | `ReactNode` | - | Content to display inside the button |
|
|
53
|
-
| `title` | `string` | - | Text title for the button (web compatibility) |
|
|
54
|
-
| `onPress` | `() => void` | **Required** | Function called when button is pressed |
|
|
55
|
-
| `disabled` | `boolean` | `false` | Whether the button is disabled |
|
|
56
|
-
| `variant` | `'contained' \| 'outlined' \| 'text'` | `'contained'` | Visual style variant |
|
|
57
|
-
| `intent` | `IntentVariant` | `'primary'` | Color scheme/intent of the button |
|
|
58
|
-
| `size` | `'small' \| 'medium' \| 'large'` | `'medium'` | Size of the button |
|
|
59
|
-
| `loading` | `boolean` | `false` | Show loading state (React Native only) |
|
|
60
|
-
| `style` | `ViewStyle` | - | Additional custom styles |
|
|
61
|
-
| `testID` | `string` | - | Test identifier for testing |
|
|
62
|
-
|
|
63
|
-
## Variants
|
|
64
|
-
|
|
65
|
-
### Contained Button
|
|
66
|
-
High emphasis button with solid background color.
|
|
67
|
-
|
|
68
|
-
```tsx
|
|
69
|
-
<Button variant="contained" intent="primary" onPress={handleSave}>
|
|
70
|
-
Save Changes
|
|
71
|
-
</Button>
|
|
72
|
-
<Button variant="contained" intent="error" onPress={handleDelete}>
|
|
73
|
-
Delete
|
|
74
|
-
</Button>
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### Outlined Button
|
|
78
|
-
Medium emphasis button with border and transparent background.
|
|
79
|
-
|
|
80
|
-
```tsx
|
|
81
|
-
<Button variant="outlined" intent="neutral" onPress={handleCancel}>
|
|
82
|
-
Cancel
|
|
83
|
-
</Button>
|
|
84
|
-
<Button variant="outlined" intent="success" onPress={handleApprove}>
|
|
85
|
-
Approve
|
|
86
|
-
</Button>
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### Text Button
|
|
90
|
-
Low emphasis button with no background or border.
|
|
91
|
-
|
|
92
|
-
```tsx
|
|
93
|
-
<Button variant="text" intent="primary" onPress={handleLearnMore}>
|
|
94
|
-
Learn More
|
|
95
|
-
</Button>
|
|
96
|
-
<Button variant="text" intent="neutral" onPress={handleSkip}>
|
|
97
|
-
Skip
|
|
98
|
-
</Button>
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
## Intent System
|
|
102
|
-
|
|
103
|
-
Buttons use an intent-based color system for semantic meaning:
|
|
104
|
-
|
|
105
|
-
### Primary Intent
|
|
106
|
-
Main brand actions and primary calls-to-action.
|
|
107
|
-
|
|
108
|
-
```tsx
|
|
109
|
-
<Button intent="primary" onPress={handleSubmit}>Submit</Button>
|
|
110
|
-
<Button intent="primary" onPress={handleSignIn}>Sign In</Button>
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### Neutral Intent
|
|
114
|
-
Secondary actions and neutral operations.
|
|
115
|
-
|
|
116
|
-
```tsx
|
|
117
|
-
<Button intent="neutral" onPress={handleCancel}>Cancel</Button>
|
|
118
|
-
<Button intent="neutral" onPress={handleBack}>Back</Button>
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
### Success Intent
|
|
122
|
-
Positive actions like save, confirm, or approve.
|
|
123
|
-
|
|
124
|
-
```tsx
|
|
125
|
-
<Button intent="success" onPress={handleSave}>Save</Button>
|
|
126
|
-
<Button intent="success" onPress={handleConfirm}>Confirm</Button>
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### Error Intent
|
|
130
|
-
Destructive actions like delete or remove.
|
|
131
|
-
|
|
132
|
-
```tsx
|
|
133
|
-
<Button intent="error" onPress={handleDelete}>Delete</Button>
|
|
134
|
-
<Button intent="error" onPress={handleRemove}>Remove</Button>
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
### Warning Intent
|
|
138
|
-
Caution actions that require attention.
|
|
139
|
-
|
|
140
|
-
```tsx
|
|
141
|
-
<Button intent="warning" onPress={handleWarningAction}>Proceed with Caution</Button>
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
## Sizes
|
|
145
|
-
|
|
146
|
-
| Size | Height | Padding | Font Size | Use Case |
|
|
147
|
-
|------|--------|---------|-----------|----------|
|
|
148
|
-
| `small` | 32px | 12px | 14px | Compact spaces, secondary actions |
|
|
149
|
-
| `medium` | 40px | 16px | 16px | Standard use, forms |
|
|
150
|
-
| `large` | 48px | 20px | 18px | Primary actions, mobile |
|
|
151
|
-
|
|
152
|
-
```tsx
|
|
153
|
-
<Button size="small" intent="neutral">Small</Button>
|
|
154
|
-
<Button size="medium" intent="primary">Medium</Button>
|
|
155
|
-
<Button size="large" intent="primary">Large</Button>
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
## States
|
|
159
|
-
|
|
160
|
-
### Disabled State
|
|
161
|
-
```tsx
|
|
162
|
-
<Button
|
|
163
|
-
disabled={true}
|
|
164
|
-
intent="primary"
|
|
165
|
-
onPress={handlePress}
|
|
166
|
-
>
|
|
167
|
-
Disabled Button
|
|
168
|
-
</Button>
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### Loading State (React Native)
|
|
172
|
-
```tsx
|
|
173
|
-
<Button
|
|
174
|
-
loading={isLoading}
|
|
175
|
-
intent="primary"
|
|
176
|
-
onPress={handleAsyncAction}
|
|
177
|
-
>
|
|
178
|
-
{isLoading ? 'Loading...' : 'Submit'}
|
|
179
|
-
</Button>
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
## Common Patterns
|
|
183
|
-
|
|
184
|
-
### Form Actions
|
|
185
|
-
```tsx
|
|
186
|
-
<View style={{ flexDirection: 'row', gap: 12, justifyContent: 'flex-end' }}>
|
|
187
|
-
<Button variant="outlined" intent="neutral" onPress={handleCancel}>
|
|
188
|
-
Cancel
|
|
189
|
-
</Button>
|
|
190
|
-
<Button variant="contained" intent="primary" onPress={handleSubmit}>
|
|
191
|
-
Submit
|
|
192
|
-
</Button>
|
|
193
|
-
</View>
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### Destructive Actions
|
|
197
|
-
```tsx
|
|
198
|
-
<View style={{ flexDirection: 'row', gap: 12 }}>
|
|
199
|
-
<Button variant="outlined" intent="neutral" onPress={handleCancel}>
|
|
200
|
-
Cancel
|
|
201
|
-
</Button>
|
|
202
|
-
<Button variant="contained" intent="error" onPress={handleDelete}>
|
|
203
|
-
Delete Forever
|
|
204
|
-
</Button>
|
|
205
|
-
</View>
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
### Call-to-Action Groups
|
|
209
|
-
```tsx
|
|
210
|
-
<View style={{ gap: 12 }}>
|
|
211
|
-
<Button
|
|
212
|
-
variant="contained"
|
|
213
|
-
intent="primary"
|
|
214
|
-
size="large"
|
|
215
|
-
onPress={handleGetStarted}
|
|
216
|
-
>
|
|
217
|
-
Get Started
|
|
218
|
-
</Button>
|
|
219
|
-
<Button
|
|
220
|
-
variant="text"
|
|
221
|
-
intent="neutral"
|
|
222
|
-
onPress={handleLearnMore}
|
|
223
|
-
>
|
|
224
|
-
Learn More
|
|
225
|
-
</Button>
|
|
226
|
-
</View>
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
## Accessibility
|
|
230
|
-
|
|
231
|
-
- Proper focus management and keyboard navigation
|
|
232
|
-
- ARIA labels and roles for screen readers
|
|
233
|
-
- Sufficient contrast ratios for all variants
|
|
234
|
-
- Disabled state properly communicated to assistive technologies
|
|
235
|
-
- Touch targets meet minimum size requirements (44px)
|
|
236
|
-
|
|
237
|
-
## Styling
|
|
238
|
-
|
|
239
|
-
```tsx
|
|
240
|
-
// Custom button styling
|
|
241
|
-
<Button
|
|
242
|
-
variant="contained"
|
|
243
|
-
intent="primary"
|
|
244
|
-
style={{
|
|
245
|
-
borderRadius: 20,
|
|
246
|
-
paddingHorizontal: 24,
|
|
247
|
-
}}
|
|
248
|
-
onPress={handlePress}
|
|
249
|
-
>
|
|
250
|
-
Custom Styled
|
|
251
|
-
</Button>
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
## Best Practices
|
|
255
|
-
|
|
256
|
-
1. **Use appropriate intents** - Match button color to action semantics
|
|
257
|
-
2. **Limit contained buttons** - Use one primary contained button per view
|
|
258
|
-
3. **Provide clear labels** - Button text should describe the action
|
|
259
|
-
4. **Consider hierarchy** - Use variants to establish visual hierarchy
|
|
260
|
-
5. **Mind touch targets** - Ensure buttons are large enough for touch interaction
|
|
261
|
-
6. **Handle loading states** - Provide feedback for async actions
|
|
262
|
-
7. **Test accessibility** - Verify with screen readers and keyboard navigation
|