@idealyst/components 1.0.83 → 1.0.85

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.
Files changed (316) hide show
  1. package/CLAUDE.md +199 -232
  2. package/README.md +5 -5
  3. package/package.json +20 -2
  4. package/plugin/README.md +272 -0
  5. package/plugin/test-cases.jsx +112 -0
  6. package/plugin/web-legacy.js +320 -0
  7. package/plugin/web.js +422 -124
  8. package/src/Accordion/Accordion.native.tsx +182 -0
  9. package/src/Accordion/Accordion.styles.tsx +260 -0
  10. package/src/Accordion/Accordion.web.tsx +147 -0
  11. package/src/Accordion/index.native.tsx +3 -0
  12. package/src/Accordion/index.ts +3 -0
  13. package/src/Accordion/index.web.tsx +3 -0
  14. package/src/Accordion/types.ts +23 -0
  15. package/src/ActivityIndicator/ActivityIndicator.native.tsx +17 -12
  16. package/src/ActivityIndicator/ActivityIndicator.styles.tsx +83 -109
  17. package/src/ActivityIndicator/ActivityIndicator.web.tsx +23 -17
  18. package/src/ActivityIndicator/index.ts +5 -2
  19. package/src/ActivityIndicator/index.web.ts +5 -2
  20. package/src/ActivityIndicator/types.ts +15 -10
  21. package/src/Alert/Alert.native.tsx +113 -0
  22. package/src/Alert/Alert.styles.tsx +304 -0
  23. package/src/Alert/Alert.web.tsx +123 -0
  24. package/src/Alert/index.native.ts +5 -0
  25. package/src/Alert/index.ts +5 -0
  26. package/src/Alert/index.web.ts +5 -0
  27. package/src/Alert/types.ts +21 -0
  28. package/src/Avatar/Avatar.native.tsx +8 -6
  29. package/src/Avatar/Avatar.styles.tsx +64 -58
  30. package/src/Avatar/Avatar.web.tsx +13 -8
  31. package/src/Avatar/index.ts +5 -2
  32. package/src/Avatar/index.web.ts +5 -2
  33. package/src/Avatar/types.ts +19 -13
  34. package/src/Badge/Badge.native.tsx +59 -14
  35. package/src/Badge/Badge.styles.tsx +125 -139
  36. package/src/Badge/Badge.web.tsx +72 -16
  37. package/src/Badge/index.ts +5 -2
  38. package/src/Badge/index.web.ts +5 -2
  39. package/src/Badge/types.ts +23 -11
  40. package/src/Breadcrumb/Breadcrumb.native.tsx +225 -0
  41. package/src/Breadcrumb/Breadcrumb.styles.tsx +234 -0
  42. package/src/Breadcrumb/Breadcrumb.web.tsx +268 -0
  43. package/src/Breadcrumb/index.native.ts +5 -0
  44. package/src/Breadcrumb/index.ts +5 -0
  45. package/src/Breadcrumb/index.web.ts +5 -0
  46. package/src/Breadcrumb/types.ts +56 -0
  47. package/src/Button/Button.native.tsx +75 -24
  48. package/src/Button/Button.styles.tsx +248 -205
  49. package/src/Button/Button.web.tsx +82 -25
  50. package/src/Button/index.ts +5 -5
  51. package/src/Button/index.web.ts +5 -3
  52. package/src/Button/types.ts +32 -15
  53. package/src/Card/Card.native.tsx +14 -11
  54. package/src/Card/Card.styles.tsx +146 -220
  55. package/src/Card/Card.web.tsx +20 -21
  56. package/src/Card/index.ts +5 -5
  57. package/src/Card/index.web.ts +5 -3
  58. package/src/Card/types.ts +24 -17
  59. package/src/Checkbox/Checkbox.native.tsx +24 -34
  60. package/src/Checkbox/Checkbox.styles.tsx +223 -275
  61. package/src/Checkbox/Checkbox.web.tsx +30 -37
  62. package/src/Checkbox/index.ts +5 -5
  63. package/src/Checkbox/index.web.ts +5 -3
  64. package/src/Checkbox/types.ts +26 -20
  65. package/src/Chip/Chip.native.tsx +126 -0
  66. package/src/Chip/Chip.styles.tsx +138 -0
  67. package/src/Chip/Chip.web.tsx +154 -0
  68. package/src/Chip/index.native.ts +5 -0
  69. package/src/Chip/index.ts +5 -0
  70. package/src/Chip/index.web.ts +5 -0
  71. package/src/Chip/types.ts +51 -0
  72. package/src/Dialog/Dialog.native.tsx +65 -12
  73. package/src/Dialog/Dialog.styles.tsx +154 -136
  74. package/src/Dialog/Dialog.web.tsx +16 -11
  75. package/src/Dialog/index.ts +5 -2
  76. package/src/Dialog/index.web.ts +5 -2
  77. package/src/Dialog/types.ts +22 -16
  78. package/src/Divider/Divider.native.tsx +19 -14
  79. package/src/Divider/Divider.styles.tsx +273 -595
  80. package/src/Divider/Divider.web.tsx +19 -12
  81. package/src/Divider/index.ts +5 -5
  82. package/src/Divider/index.web.ts +5 -3
  83. package/src/Divider/types.ts +28 -19
  84. package/src/Icon/Icon.native.tsx +17 -24
  85. package/src/Icon/Icon.styles.tsx +64 -48
  86. package/src/Icon/Icon.web.tsx +14 -11
  87. package/src/Icon/IconSvg/IconSvg.native.tsx +42 -0
  88. package/src/Icon/IconSvg/IconSvg.web.tsx +40 -0
  89. package/src/Icon/IconSvg/index.native.ts +1 -0
  90. package/src/Icon/IconSvg/index.ts +1 -0
  91. package/src/Icon/icon-resolver.native.ts +27 -0
  92. package/src/Icon/icon-resolver.ts +70 -0
  93. package/src/Icon/index.ts +5 -5
  94. package/src/Icon/index.web.ts +5 -3
  95. package/src/Icon/types.ts +17 -11
  96. package/src/Image/Image.native.tsx +86 -0
  97. package/src/Image/Image.styles.tsx +57 -0
  98. package/src/Image/Image.web.tsx +92 -0
  99. package/src/Image/index.native.ts +5 -0
  100. package/src/Image/index.ts +5 -0
  101. package/src/Image/types.ts +21 -0
  102. package/src/Input/Input.native.tsx +103 -26
  103. package/src/Input/Input.styles.tsx +240 -177
  104. package/src/Input/Input.web.tsx +141 -38
  105. package/src/Input/index.ts +5 -5
  106. package/src/Input/index.web.ts +5 -3
  107. package/src/Input/types.ts +43 -20
  108. package/src/List/List.native.tsx +56 -0
  109. package/src/List/List.styles.tsx +257 -0
  110. package/src/List/List.web.tsx +43 -0
  111. package/src/List/ListContext.tsx +16 -0
  112. package/src/List/ListItem.native.tsx +111 -0
  113. package/src/List/ListItem.web.tsx +110 -0
  114. package/src/List/ListSection.native.tsx +31 -0
  115. package/src/List/ListSection.web.tsx +33 -0
  116. package/src/List/index.native.tsx +5 -0
  117. package/src/List/index.ts +5 -0
  118. package/src/List/index.web.tsx +5 -0
  119. package/src/List/types.ts +42 -0
  120. package/src/Menu/Menu.native.tsx +150 -0
  121. package/src/Menu/Menu.styles.tsx +185 -0
  122. package/src/Menu/Menu.web.tsx +99 -0
  123. package/src/Menu/MenuItem.native.tsx +66 -0
  124. package/src/Menu/MenuItem.styles.tsx +119 -0
  125. package/src/Menu/MenuItem.web.tsx +67 -0
  126. package/src/Menu/index.native.ts +3 -0
  127. package/src/Menu/index.ts +3 -0
  128. package/src/Menu/index.web.ts +3 -0
  129. package/src/Menu/types.ts +30 -0
  130. package/src/Popover/Popover.native.tsx +102 -32
  131. package/src/Popover/Popover.styles.tsx +100 -67
  132. package/src/Popover/Popover.web.tsx +36 -260
  133. package/src/Popover/index.ts +5 -2
  134. package/src/Popover/index.web.ts +5 -2
  135. package/src/Popover/types.ts +14 -13
  136. package/src/Pressable/Pressable.native.tsx +7 -6
  137. package/src/Pressable/Pressable.web.tsx +8 -6
  138. package/src/Pressable/index.ts +5 -2
  139. package/src/Pressable/index.web.ts +5 -2
  140. package/src/Pressable/types.ts +11 -10
  141. package/src/Progress/Progress.native.tsx +179 -0
  142. package/src/Progress/Progress.styles.tsx +164 -0
  143. package/src/Progress/Progress.web.tsx +144 -0
  144. package/src/Progress/index.native.ts +1 -0
  145. package/src/Progress/index.ts +5 -0
  146. package/src/Progress/index.web.ts +5 -0
  147. package/src/Progress/types.ts +21 -0
  148. package/src/RadioButton/RadioButton.native.tsx +88 -0
  149. package/src/RadioButton/RadioButton.styles.tsx +163 -0
  150. package/src/RadioButton/RadioButton.web.tsx +85 -0
  151. package/src/RadioButton/RadioGroup.native.tsx +43 -0
  152. package/src/RadioButton/RadioGroup.web.tsx +49 -0
  153. package/src/RadioButton/index.native.ts +2 -0
  154. package/src/RadioButton/index.ts +2 -0
  155. package/src/RadioButton/index.web.ts +2 -0
  156. package/src/RadioButton/types.ts +29 -0
  157. package/src/SVGImage/SVGImage.native.tsx +9 -7
  158. package/src/SVGImage/SVGImage.styles.tsx +63 -55
  159. package/src/SVGImage/SVGImage.web.tsx +16 -13
  160. package/src/SVGImage/index.ts +5 -5
  161. package/src/SVGImage/index.web.ts +5 -2
  162. package/src/SVGImage/types.ts +7 -3
  163. package/src/Screen/Screen.native.tsx +43 -17
  164. package/src/Screen/Screen.styles.tsx +58 -54
  165. package/src/Screen/Screen.web.tsx +11 -5
  166. package/src/Screen/index.ts +5 -2
  167. package/src/Screen/index.web.ts +5 -2
  168. package/src/Screen/types.ts +23 -9
  169. package/src/Select/Select.native.tsx +140 -63
  170. package/src/Select/Select.styles.tsx +312 -302
  171. package/src/Select/Select.web.tsx +156 -316
  172. package/src/Select/index.ts +5 -2
  173. package/src/Select/index.web.ts +5 -2
  174. package/src/Select/types.ts +13 -7
  175. package/src/Skeleton/Skeleton.native.tsx +139 -0
  176. package/src/Skeleton/Skeleton.styles.tsx +59 -0
  177. package/src/Skeleton/Skeleton.web.tsx +112 -0
  178. package/src/Skeleton/index.native.ts +4 -0
  179. package/src/Skeleton/index.ts +5 -0
  180. package/src/Skeleton/index.web.ts +5 -0
  181. package/src/Skeleton/types.ts +75 -0
  182. package/src/Slider/Slider.native.tsx +248 -0
  183. package/src/Slider/Slider.styles.tsx +241 -0
  184. package/src/Slider/Slider.web.tsx +226 -0
  185. package/src/Slider/index.native.ts +3 -0
  186. package/src/Slider/index.ts +5 -0
  187. package/src/Slider/index.web.ts +5 -0
  188. package/src/Slider/types.ts +31 -0
  189. package/src/Switch/Switch.native.tsx +131 -0
  190. package/src/Switch/Switch.styles.tsx +169 -0
  191. package/src/Switch/Switch.web.tsx +121 -0
  192. package/src/Switch/index.native.ts +3 -0
  193. package/src/Switch/index.ts +5 -0
  194. package/src/Switch/index.web.ts +5 -0
  195. package/src/Switch/types.ts +21 -0
  196. package/src/TabBar/TabBar.native.tsx +142 -0
  197. package/src/TabBar/TabBar.styles.tsx +399 -0
  198. package/src/TabBar/TabBar.web.tsx +205 -0
  199. package/src/TabBar/index.native.tsx +3 -0
  200. package/src/TabBar/index.ts +3 -0
  201. package/src/TabBar/index.web.tsx +3 -0
  202. package/src/TabBar/types.ts +26 -0
  203. package/src/Table/Table.native.tsx +122 -0
  204. package/src/Table/Table.styles.tsx +283 -0
  205. package/src/Table/Table.web.tsx +112 -0
  206. package/src/Table/index.native.tsx +3 -0
  207. package/src/Table/index.ts +3 -0
  208. package/src/Table/index.web.tsx +3 -0
  209. package/src/Table/types.ts +28 -0
  210. package/src/Text/Text.native.tsx +12 -11
  211. package/src/Text/Text.styles.tsx +76 -64
  212. package/src/Text/Text.web.tsx +14 -9
  213. package/src/Text/index.ts +5 -5
  214. package/src/Text/index.web.ts +5 -3
  215. package/src/Text/types.ts +20 -13
  216. package/src/TextArea/TextArea.native.tsx +134 -0
  217. package/src/TextArea/TextArea.styles.tsx +175 -0
  218. package/src/TextArea/TextArea.web.tsx +156 -0
  219. package/src/TextArea/index.native.ts +3 -0
  220. package/src/TextArea/index.ts +3 -0
  221. package/src/TextArea/index.web.ts +3 -0
  222. package/src/TextArea/types.ts +30 -0
  223. package/src/Tooltip/Tooltip.native.tsx +165 -0
  224. package/src/Tooltip/Tooltip.styles.tsx +73 -0
  225. package/src/Tooltip/Tooltip.web.tsx +87 -0
  226. package/src/Tooltip/index.native.ts +3 -0
  227. package/src/Tooltip/index.ts +3 -0
  228. package/src/Tooltip/types.ts +18 -0
  229. package/src/Video/Video.native.tsx +105 -0
  230. package/src/Video/Video.styles.tsx +39 -0
  231. package/src/Video/Video.web.tsx +115 -0
  232. package/src/Video/index.native.ts +5 -0
  233. package/src/Video/index.ts +5 -0
  234. package/src/Video/types.ts +29 -0
  235. package/src/View/View.native.tsx +9 -14
  236. package/src/View/View.styles.tsx +101 -93
  237. package/src/View/View.web.tsx +16 -17
  238. package/src/View/index.ts +5 -5
  239. package/src/View/index.web.ts +5 -3
  240. package/src/View/types.ts +29 -21
  241. package/src/examples/AccordionExamples.tsx +126 -0
  242. package/src/examples/AlertExamples.tsx +280 -0
  243. package/src/examples/AvatarExamples.tsx +23 -23
  244. package/src/examples/BadgeExamples.tsx +109 -41
  245. package/src/examples/BreadcrumbExamples.tsx +312 -0
  246. package/src/examples/ButtonExamples.tsx +160 -33
  247. package/src/examples/CardExamples.tsx +40 -40
  248. package/src/examples/CheckboxExamples.tsx +12 -12
  249. package/src/examples/ChipExamples.tsx +197 -0
  250. package/src/examples/DialogExamples.tsx +22 -22
  251. package/src/examples/DividerExamples.tsx +49 -49
  252. package/src/examples/IconExamples.tsx +270 -54
  253. package/src/examples/ImageExamples.tsx +174 -0
  254. package/src/examples/InputExamples.tsx +75 -17
  255. package/src/examples/ListExamples.tsx +288 -0
  256. package/src/examples/MenuExamples.tsx +144 -0
  257. package/src/examples/PopoverExamples.tsx +69 -73
  258. package/src/examples/ProgressExamples.tsx +137 -0
  259. package/src/examples/RadioButtonExamples.tsx +161 -0
  260. package/src/examples/SVGImageExamples.tsx +19 -17
  261. package/src/examples/ScreenExamples.tsx +31 -31
  262. package/src/examples/SelectExamples.tsx +67 -67
  263. package/src/examples/SkeletonExamples.tsx +206 -0
  264. package/src/examples/SliderExamples.tsx +200 -0
  265. package/src/examples/SwitchExamples.tsx +182 -0
  266. package/src/examples/TabBarExamples.tsx +143 -0
  267. package/src/examples/TableExamples.tsx +280 -0
  268. package/src/examples/TextAreaExamples.tsx +173 -0
  269. package/src/examples/TextExamples.tsx +28 -32
  270. package/src/examples/ThemeExtensionExamples.tsx +10 -10
  271. package/src/examples/TooltipExamples.tsx +126 -0
  272. package/src/examples/VideoExamples.tsx +144 -0
  273. package/src/examples/ViewExamples.tsx +64 -56
  274. package/src/examples/index.ts +17 -3
  275. package/src/hooks/useMergeRefs.ts +16 -0
  276. package/src/hooks/useSmartPosition.native.ts +169 -0
  277. package/src/index.native.ts +80 -9
  278. package/src/index.ts +71 -1
  279. package/src/internal/BoundedModalContent.native.tsx +58 -0
  280. package/src/internal/PositionedPortal.tsx +254 -0
  281. package/src/internal/SafeAreaDebugOverlay.native.tsx +173 -0
  282. package/src/unistyles.d.ts +6 -0
  283. package/src/utils/buildSizeVariants.ts +16 -0
  284. package/src/utils/deepMerge.ts +43 -0
  285. package/src/utils/positionUtils.native.ts +280 -0
  286. package/src/utils/styleHelpers.ts +48 -0
  287. package/LLM-ACCESS-GUIDE.md +0 -143
  288. package/src/ActivityIndicator/README.md +0 -132
  289. package/src/Avatar/README.md +0 -139
  290. package/src/Badge/README.md +0 -170
  291. package/src/Button/Button.types.ts +0 -12
  292. package/src/Button/README.md +0 -262
  293. package/src/Card/README.md +0 -258
  294. package/src/Checkbox/README.md +0 -102
  295. package/src/Dialog/README.md +0 -210
  296. package/src/Divider/README.md +0 -108
  297. package/src/Icon/README.md +0 -81
  298. package/src/Input/README.md +0 -100
  299. package/src/SVGImage/README.md +0 -209
  300. package/src/Screen/README.md +0 -86
  301. package/src/Select/README.md +0 -166
  302. package/src/Text/README.md +0 -94
  303. package/src/View/README.md +0 -107
  304. package/src/examples/AllExamples.tsx +0 -88
  305. package/src/examples/README.md +0 -136
  306. package/src/examples/ValidationExamples.tsx +0 -95
  307. package/src/examples/extendedTheme.ts +0 -329
  308. package/src/theme/breakpoints.ts +0 -8
  309. package/src/theme/colorResolver.ts +0 -218
  310. package/src/theme/colors.ts +0 -315
  311. package/src/theme/defaultThemes.ts +0 -326
  312. package/src/theme/index.ts +0 -188
  313. package/src/theme/themeBuilder.ts +0 -602
  314. package/src/theme/unistyles.d.ts +0 -6
  315. package/src/theme/variantHelpers.ts +0 -584
  316. package/src/theme/variants.ts +0 -56
@@ -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
@@ -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
- }
@@ -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