@idealyst/components 1.0.82 → 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.
Files changed (316) hide show
  1. package/CLAUDE.md +199 -232
  2. package/README.md +5 -5
  3. package/package.json +25 -7
  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 +347 -0
  170. package/src/Select/Select.styles.tsx +335 -0
  171. package/src/Select/Select.web.tsx +276 -0
  172. package/src/Select/index.native.ts +2 -0
  173. package/src/Select/index.ts +5 -0
  174. package/src/Select/index.web.ts +5 -0
  175. package/src/Select/types.ts +124 -0
  176. package/src/Skeleton/Skeleton.native.tsx +139 -0
  177. package/src/Skeleton/Skeleton.styles.tsx +59 -0
  178. package/src/Skeleton/Skeleton.web.tsx +112 -0
  179. package/src/Skeleton/index.native.ts +4 -0
  180. package/src/Skeleton/index.ts +5 -0
  181. package/src/Skeleton/index.web.ts +5 -0
  182. package/src/Skeleton/types.ts +75 -0
  183. package/src/Slider/Slider.native.tsx +248 -0
  184. package/src/Slider/Slider.styles.tsx +241 -0
  185. package/src/Slider/Slider.web.tsx +226 -0
  186. package/src/Slider/index.native.ts +3 -0
  187. package/src/Slider/index.ts +5 -0
  188. package/src/Slider/index.web.ts +5 -0
  189. package/src/Slider/types.ts +31 -0
  190. package/src/Switch/Switch.native.tsx +131 -0
  191. package/src/Switch/Switch.styles.tsx +169 -0
  192. package/src/Switch/Switch.web.tsx +121 -0
  193. package/src/Switch/index.native.ts +3 -0
  194. package/src/Switch/index.ts +5 -0
  195. package/src/Switch/index.web.ts +5 -0
  196. package/src/Switch/types.ts +21 -0
  197. package/src/TabBar/TabBar.native.tsx +142 -0
  198. package/src/TabBar/TabBar.styles.tsx +399 -0
  199. package/src/TabBar/TabBar.web.tsx +205 -0
  200. package/src/TabBar/index.native.tsx +3 -0
  201. package/src/TabBar/index.ts +3 -0
  202. package/src/TabBar/index.web.tsx +3 -0
  203. package/src/TabBar/types.ts +26 -0
  204. package/src/Table/Table.native.tsx +122 -0
  205. package/src/Table/Table.styles.tsx +283 -0
  206. package/src/Table/Table.web.tsx +112 -0
  207. package/src/Table/index.native.tsx +3 -0
  208. package/src/Table/index.ts +3 -0
  209. package/src/Table/index.web.tsx +3 -0
  210. package/src/Table/types.ts +28 -0
  211. package/src/Text/Text.native.tsx +12 -11
  212. package/src/Text/Text.styles.tsx +76 -64
  213. package/src/Text/Text.web.tsx +14 -9
  214. package/src/Text/index.ts +5 -5
  215. package/src/Text/index.web.ts +5 -3
  216. package/src/Text/types.ts +20 -13
  217. package/src/TextArea/TextArea.native.tsx +134 -0
  218. package/src/TextArea/TextArea.styles.tsx +175 -0
  219. package/src/TextArea/TextArea.web.tsx +156 -0
  220. package/src/TextArea/index.native.ts +3 -0
  221. package/src/TextArea/index.ts +3 -0
  222. package/src/TextArea/index.web.ts +3 -0
  223. package/src/TextArea/types.ts +30 -0
  224. package/src/Tooltip/Tooltip.native.tsx +165 -0
  225. package/src/Tooltip/Tooltip.styles.tsx +73 -0
  226. package/src/Tooltip/Tooltip.web.tsx +87 -0
  227. package/src/Tooltip/index.native.ts +3 -0
  228. package/src/Tooltip/index.ts +3 -0
  229. package/src/Tooltip/types.ts +18 -0
  230. package/src/Video/Video.native.tsx +105 -0
  231. package/src/Video/Video.styles.tsx +39 -0
  232. package/src/Video/Video.web.tsx +115 -0
  233. package/src/Video/index.native.ts +5 -0
  234. package/src/Video/index.ts +5 -0
  235. package/src/Video/types.ts +29 -0
  236. package/src/View/View.native.tsx +9 -14
  237. package/src/View/View.styles.tsx +101 -93
  238. package/src/View/View.web.tsx +16 -17
  239. package/src/View/index.ts +5 -5
  240. package/src/View/index.web.ts +5 -3
  241. package/src/View/types.ts +29 -21
  242. package/src/examples/AccordionExamples.tsx +126 -0
  243. package/src/examples/AlertExamples.tsx +280 -0
  244. package/src/examples/AvatarExamples.tsx +23 -23
  245. package/src/examples/BadgeExamples.tsx +109 -41
  246. package/src/examples/BreadcrumbExamples.tsx +312 -0
  247. package/src/examples/ButtonExamples.tsx +160 -33
  248. package/src/examples/CardExamples.tsx +40 -40
  249. package/src/examples/CheckboxExamples.tsx +12 -12
  250. package/src/examples/ChipExamples.tsx +197 -0
  251. package/src/examples/DialogExamples.tsx +22 -22
  252. package/src/examples/DividerExamples.tsx +49 -49
  253. package/src/examples/IconExamples.tsx +270 -54
  254. package/src/examples/ImageExamples.tsx +174 -0
  255. package/src/examples/InputExamples.tsx +75 -17
  256. package/src/examples/ListExamples.tsx +288 -0
  257. package/src/examples/MenuExamples.tsx +144 -0
  258. package/src/examples/PopoverExamples.tsx +69 -73
  259. package/src/examples/ProgressExamples.tsx +137 -0
  260. package/src/examples/RadioButtonExamples.tsx +161 -0
  261. package/src/examples/SVGImageExamples.tsx +19 -17
  262. package/src/examples/ScreenExamples.tsx +31 -31
  263. package/src/examples/SelectExamples.tsx +423 -0
  264. package/src/examples/SkeletonExamples.tsx +206 -0
  265. package/src/examples/SliderExamples.tsx +200 -0
  266. package/src/examples/SwitchExamples.tsx +182 -0
  267. package/src/examples/TabBarExamples.tsx +143 -0
  268. package/src/examples/TableExamples.tsx +280 -0
  269. package/src/examples/TextAreaExamples.tsx +173 -0
  270. package/src/examples/TextExamples.tsx +28 -32
  271. package/src/examples/ThemeExtensionExamples.tsx +10 -10
  272. package/src/examples/TooltipExamples.tsx +126 -0
  273. package/src/examples/VideoExamples.tsx +144 -0
  274. package/src/examples/ViewExamples.tsx +64 -56
  275. package/src/examples/index.ts +18 -3
  276. package/src/hooks/useMergeRefs.ts +16 -0
  277. package/src/hooks/useSmartPosition.native.ts +169 -0
  278. package/src/index.native.ts +80 -9
  279. package/src/index.ts +75 -1
  280. package/src/internal/BoundedModalContent.native.tsx +58 -0
  281. package/src/internal/PositionedPortal.tsx +254 -0
  282. package/src/internal/SafeAreaDebugOverlay.native.tsx +173 -0
  283. package/src/unistyles.d.ts +6 -0
  284. package/src/utils/buildSizeVariants.ts +16 -0
  285. package/src/utils/deepMerge.ts +43 -0
  286. package/src/utils/positionUtils.native.ts +280 -0
  287. package/src/utils/styleHelpers.ts +48 -0
  288. package/LLM-ACCESS-GUIDE.md +0 -143
  289. package/src/ActivityIndicator/README.md +0 -132
  290. package/src/Avatar/README.md +0 -139
  291. package/src/Badge/README.md +0 -170
  292. package/src/Button/Button.types.ts +0 -12
  293. package/src/Button/README.md +0 -262
  294. package/src/Card/README.md +0 -258
  295. package/src/Checkbox/README.md +0 -102
  296. package/src/Dialog/README.md +0 -210
  297. package/src/Divider/README.md +0 -108
  298. package/src/Icon/README.md +0 -81
  299. package/src/Input/README.md +0 -100
  300. package/src/SVGImage/README.md +0 -209
  301. package/src/Screen/README.md +0 -86
  302. package/src/Text/README.md +0 -94
  303. package/src/View/README.md +0 -107
  304. package/src/examples/AllExamples.tsx +0 -84
  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,81 +0,0 @@
1
- # Icon Component
2
-
3
- A versatile icon component with extensive icon library and theming support.
4
-
5
- ## Features
6
-
7
- - ✅ Cross-platform (React & React Native)
8
- - ✅ Extensive icon library
9
- - ✅ Multiple sizes and color options
10
- - ✅ Intent-based color schemes
11
- - ✅ TypeScript support with icon name validation
12
-
13
- ## Basic Usage
14
-
15
- ```tsx
16
- import { Icon } from '@idealyst/components';
17
-
18
- // Basic icon
19
- <Icon name="heart" />
20
-
21
- // Sized and colored icon
22
- <Icon
23
- name="star"
24
- size={24}
25
- color="primary"
26
- />
27
-
28
- // Icon with intent color
29
- <Icon
30
- name="check-circle"
31
- size="large"
32
- intent="success"
33
- />
34
- ```
35
-
36
- ## Props
37
-
38
- | Prop | Type | Default | Description |
39
- |------|------|---------|-------------|
40
- | `name` | `IconName` | **Required** | Name of the icon to display |
41
- | `size` | `number \| 'small' \| 'medium' \| 'large' \| 'xlarge'` | `'medium'` | Size of the icon |
42
- | `color` | `string \| ColorVariant` | - | Color of the icon |
43
- | `intent` | `IntentVariant` | - | Intent-based color scheme |
44
- | `style` | `ViewStyle` | - | Additional custom styles |
45
- | `testID` | `string` | - | Test identifier for testing |
46
-
47
- ## Size Options
48
-
49
- | Size | Value | Use Case |
50
- |------|-------|----------|
51
- | `small` | 16px | Inline text, compact UI |
52
- | `medium` | 20px | Standard buttons, form elements |
53
- | `large` | 24px | Section headers, prominent actions |
54
- | `xlarge` | 32px | Feature highlights, empty states |
55
-
56
- ## Common Icons
57
-
58
- Popular icon names include:
59
- - `heart`, `star`, `bookmark`
60
- - `check`, `x`, `plus`, `minus`
61
- - `chevron-left`, `chevron-right`, `chevron-up`, `chevron-down`
62
- - `home`, `user`, `settings`, `search`
63
- - `bell`, `mail`, `calendar`, `file`
64
- - `edit`, `delete`, `copy`, `share`
65
-
66
- ## Examples
67
-
68
- ### Button Icons
69
- ```tsx
70
- <Button>
71
- <Icon name="plus" size="small" color="white" />
72
- Add Item
73
- </Button>
74
- ```
75
-
76
- ### Status Icons
77
- ```tsx
78
- <Icon name="check-circle" intent="success" size="large" />
79
- <Icon name="x-circle" intent="error" size="large" />
80
- <Icon name="alert-triangle" intent="warning" size="large" />
81
- ```
@@ -1,100 +0,0 @@
1
- # Input Component
2
-
3
- A text input component with consistent styling and form integration.
4
-
5
- ## Features
6
-
7
- - ✅ Cross-platform (React & React Native)
8
- - ✅ Multiple sizes and variants
9
- - ✅ Label and helper text support
10
- - ✅ Error state handling
11
- - ✅ Placeholder and validation
12
- - ✅ TypeScript support
13
-
14
- ## Basic Usage
15
-
16
- ```tsx
17
- import { Input } from '@idealyst/components';
18
-
19
- // Basic input
20
- <Input
21
- value={value}
22
- onChangeText={setValue}
23
- placeholder="Enter text..."
24
- />
25
-
26
- // Input with label
27
- <Input
28
- label="Email Address"
29
- value={email}
30
- onChangeText={setEmail}
31
- placeholder="you@example.com"
32
- keyboardType="email-address"
33
- />
34
-
35
- // Input with error
36
- <Input
37
- label="Password"
38
- value={password}
39
- onChangeText={setPassword}
40
- error={passwordError}
41
- secureTextEntry
42
- />
43
- ```
44
-
45
- ## Props
46
-
47
- | Prop | Type | Default | Description |
48
- |------|------|---------|-------------|
49
- | `value` | `string` | **Required** | Current input value |
50
- | `onChangeText` | `(text: string) => void` | **Required** | Called when text changes |
51
- | `label` | `string` | - | Label text to display above input |
52
- | `placeholder` | `string` | - | Placeholder text |
53
- | `error` | `string` | - | Error message to display |
54
- | `helperText` | `string` | - | Helper text below input |
55
- | `disabled` | `boolean` | `false` | Whether input is disabled |
56
- | `size` | `'small' \| 'medium' \| 'large'` | `'medium'` | Size of the input |
57
- | `variant` | `'outlined' \| 'filled'` | `'outlined'` | Visual style variant |
58
- | `required` | `boolean` | `false` | Whether input is required |
59
- | `multiline` | `boolean` | `false` | Allow multiple lines |
60
- | `style` | `ViewStyle` | - | Additional custom styles |
61
-
62
- ## Examples
63
-
64
- ### Form Inputs
65
- ```tsx
66
- <View style={{ gap: 16 }}>
67
- <Input
68
- label="Full Name"
69
- value={name}
70
- onChangeText={setName}
71
- required
72
- />
73
- <Input
74
- label="Email"
75
- value={email}
76
- onChangeText={setEmail}
77
- keyboardType="email-address"
78
- error={emailError}
79
- />
80
- <Input
81
- label="Password"
82
- value={password}
83
- onChangeText={setPassword}
84
- secureTextEntry
85
- helperText="Must be at least 8 characters"
86
- />
87
- </View>
88
- ```
89
-
90
- ### Multiline Input
91
- ```tsx
92
- <Input
93
- label="Description"
94
- value={description}
95
- onChangeText={setDescription}
96
- multiline
97
- numberOfLines={4}
98
- placeholder="Enter description..."
99
- />
100
- ```
@@ -1,209 +0,0 @@
1
- # SVGImage Component
2
-
3
- A cross-platform React/React Native component for rendering SVG images with theme support and consistent styling.
4
-
5
- ## Overview
6
-
7
- The SVGImage component provides a unified way to display SVG images across web and React Native platforms. It supports both imported SVG files (as React components) and remote SVG URLs, with built-in theming and styling capabilities.
8
-
9
- ## Installation
10
-
11
- The SVGImage component is part of the `@idealyst/components` package:
12
-
13
- ```bash
14
- yarn add @idealyst/components
15
- ```
16
-
17
- For React Native projects, you also need:
18
- ```bash
19
- yarn add react-native-svg react-native-svg-transformer
20
- ```
21
-
22
- ## Basic Usage
23
-
24
- ### Imported SVG Files (Recommended)
25
-
26
- ```tsx
27
- import { SVGImage } from '@idealyst/components';
28
- import MyLogo from './assets/logo.svg';
29
-
30
- function MyComponent() {
31
- return (
32
- <SVGImage
33
- source={MyLogo}
34
- width={100}
35
- height={50}
36
- />
37
- );
38
- }
39
- ```
40
-
41
- ### Remote SVG URLs
42
-
43
- ```tsx
44
- import { SVGImage } from '@idealyst/components';
45
-
46
- function MyComponent() {
47
- return (
48
- <SVGImage
49
- source={{ uri: "https://cdn.jsdelivr.net/npm/simple-icons@v9/icons/react.svg" }}
50
- width={60}
51
- height={60}
52
- color="#61dafb"
53
- />
54
- );
55
- }
56
- ```
57
-
58
- ## Props
59
-
60
- | Prop | Type | Default | Description |
61
- |------|------|---------|-------------|
62
- | `source` | `string \| { uri: string } \| React.FC<SvgProps>` | **Required** | SVG source - can be imported component, URL string, or URI object |
63
- | `width` | `number \| string` | `24` | Width of the SVG |
64
- | `height` | `number \| string` | `24` | Height of the SVG |
65
- | `size` | `number \| string` | - | Sets both width and height (overrides individual width/height) |
66
- | `color` | `string` | - | Fill color for the SVG |
67
- | `intent` | `'primary' \| 'success' \| 'error' \| 'warning' \| 'neutral'` | - | Theme-based color intent |
68
- | `style` | `ViewStyle` | - | Additional container styles |
69
- | `testID` | `string` | - | Test identifier |
70
-
71
- ## Theme Integration
72
-
73
- The SVGImage component integrates with the Idealyst theme system:
74
-
75
- ```tsx
76
- <SVGImage
77
- source={MyIcon}
78
- size={24}
79
- intent="primary" // Uses theme's primary color
80
- />
81
-
82
- <SVGImage
83
- source={MyIcon}
84
- size={24}
85
- intent="success" // Uses theme's success color
86
- />
87
- ```
88
-
89
- ## Platform Setup
90
-
91
- ### React Native Setup
92
-
93
- 1. **Install dependencies:**
94
- ```bash
95
- yarn add react-native-svg react-native-svg-transformer
96
- ```
97
-
98
- 2. **Configure Metro bundler** (`metro.config.js`):
99
- ```javascript
100
- const config = {
101
- transformer: {
102
- babelTransformerPath: require.resolve('react-native-svg-transformer'),
103
- },
104
- resolver: {
105
- sourceExts: ['js', 'jsx', 'ts', 'tsx', 'svg'],
106
- assetExts: ['png', 'jpg', 'jpeg', 'gif', 'webp'],
107
- },
108
- };
109
- ```
110
-
111
- 3. **Add TypeScript declarations** (`types/svg.d.ts`):
112
- ```typescript
113
- declare module '*.svg' {
114
- import React from 'react';
115
- import { SvgProps } from 'react-native-svg';
116
- const content: React.FC<SvgProps>;
117
- export default content;
118
- }
119
- ```
120
-
121
- 4. **iOS: Install pods:**
122
- ```bash
123
- cd ios && pod install
124
- ```
125
-
126
- ### Web Setup
127
-
128
- For web projects using Vite, SVG imports work out of the box. Add TypeScript declarations if needed:
129
-
130
- ```typescript
131
- // types/svg.d.ts
132
- declare module '*.svg' {
133
- import React from 'react';
134
- const content: React.FC<React.SVGProps<SVGSVGElement>>;
135
- export default content;
136
- }
137
- ```
138
-
139
- ## Examples
140
-
141
- ### Basic Usage
142
- ```tsx
143
- import { SVGImage } from '@idealyst/components';
144
- import LogoIcon from './logo.svg';
145
-
146
- <SVGImage source={LogoIcon} size={40} />
147
- ```
148
-
149
- ### With Theme Colors
150
- ```tsx
151
- <SVGImage
152
- source={LogoIcon}
153
- size={32}
154
- intent="primary"
155
- />
156
- ```
157
-
158
- ### Remote SVG
159
- ```tsx
160
- <SVGImage
161
- source={{ uri: "https://cdn.jsdelivr.net/npm/simple-icons@v9/icons/typescript.svg" }}
162
- width={48}
163
- height={48}
164
- color="#3178c6"
165
- />
166
- ```
167
-
168
- ### Custom Styling
169
- ```tsx
170
- <SVGImage
171
- source={LogoIcon}
172
- size={60}
173
- style={{
174
- backgroundColor: '#f0f0f0',
175
- borderRadius: 8,
176
- padding: 8
177
- }}
178
- />
179
- ```
180
-
181
- ## Best Practices
182
-
183
- 1. **Prefer imported SVGs over URLs** - Better performance and reliability
184
- 2. **Use theme intents** - Ensures consistency with your design system
185
- 3. **Provide dimensions** - Always specify width/height or size
186
- 4. **Test on both platforms** - Verify SVGs render correctly on web and mobile
187
- 5. **Use CDN URLs** - For remote SVGs, use reliable CDNs like jsDelivr
188
-
189
- ## Limitations
190
-
191
- - **React Native**: Local SVG files must be imported as components (not file paths)
192
- - **Remote URLs**: Some servers may block requests from mobile apps (403 errors)
193
- - **Coloring**: Works best with single-color SVG icons
194
-
195
- ## Troubleshooting
196
-
197
- ### SVGs not showing on React Native
198
- - Ensure `react-native-svg-transformer` is configured in Metro
199
- - Check that SVGs are imported as components, not file paths
200
- - Verify pods are installed on iOS
201
-
202
- ### Remote SVGs failing
203
- - Use CDN URLs (e.g., jsDelivr, unpkg) instead of direct server URLs
204
- - Check browser console for CORS or 403 errors
205
- - Consider hosting SVGs on your own CDN
206
-
207
- ### TypeScript errors
208
- - Add SVG type declarations to your project
209
- - Ensure `react-native-svg` types are installed
@@ -1,86 +0,0 @@
1
- # Screen Component
2
-
3
- A full-screen container component designed for app screens with theme-based backgrounds and safe area handling.
4
-
5
- ## Features
6
-
7
- - ✅ Cross-platform (React & React Native)
8
- - ✅ Theme-based background colors
9
- - ✅ Safe area support for mobile devices
10
- - ✅ Configurable padding options
11
- - ✅ Flexible content layout
12
- - ✅ TypeScript support
13
-
14
- ## Basic Usage
15
-
16
- ```tsx
17
- import { Screen, View, Text } from '@idealyst/components';
18
-
19
- // Basic screen
20
- <Screen>
21
- <Text>Screen content</Text>
22
- </Screen>
23
-
24
- // Screen with background and padding
25
- <Screen
26
- background="primary"
27
- padding="lg"
28
- safeArea
29
- >
30
- <View spacing="md">
31
- <Text size="large" weight="bold">Welcome</Text>
32
- <Text>This is a screen with safe area support</Text>
33
- </View>
34
- </Screen>
35
- ```
36
-
37
- ## Props
38
-
39
- | Prop | Type | Default | Description |
40
- |------|------|---------|-------------|
41
- | `children` | `ReactNode` | - | Content to display in the screen |
42
- | `background` | `'primary' \| 'secondary' \| 'tertiary' \| 'inverse'` | `'primary'` | Background color variant |
43
- | `padding` | `'none' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` | Screen padding |
44
- | `safeArea` | `boolean` | `false` | Enable safe area padding |
45
- | `style` | `ViewStyle` | - | Additional custom styles |
46
- | `testID` | `string` | - | Test identifier for testing |
47
-
48
- ## Background Variants
49
-
50
- - `primary` - Main app background (usually light/dark based on theme)
51
- - `secondary` - Secondary background color
52
- - `tertiary` - Tertiary background for depth
53
- - `inverse` - Contrasting background color
54
-
55
- ## Examples
56
-
57
- ### App Screens
58
- ```tsx
59
- // Home screen
60
- <Screen background="primary" safeArea>
61
- <View spacing="lg">
62
- <Text size="xlarge" weight="bold">Dashboard</Text>
63
- {/* Screen content */}
64
- </View>
65
- </Screen>
66
-
67
- // Settings screen
68
- <Screen background="secondary" padding="lg">
69
- <Text size="large" weight="bold">Settings</Text>
70
- {/* Settings content */}
71
- </Screen>
72
- ```
73
-
74
- ### Modal Screens
75
- ```tsx
76
- <Screen
77
- background="inverse"
78
- padding="xl"
79
- style={{
80
- borderTopLeftRadius: 16,
81
- borderTopRightRadius: 16
82
- }}
83
- >
84
- <Text size="large" weight="bold">Modal Content</Text>
85
- </Screen>
86
- ```
@@ -1,94 +0,0 @@
1
- # Text Component
2
-
3
- A comprehensive text component with extensive styling options and theme integration.
4
-
5
- ## Features
6
-
7
- - ✅ Cross-platform (React & React Native)
8
- - ✅ Multiple sizes and weights
9
- - ✅ Color variants and intent-based colors
10
- - ✅ Text alignment options
11
- - ✅ Theme integration
12
- - ✅ TypeScript support
13
-
14
- ## Basic Usage
15
-
16
- ```tsx
17
- import { Text } from '@idealyst/components';
18
-
19
- // Basic text
20
- <Text>Hello World</Text>
21
-
22
- // Styled text
23
- <Text
24
- size="large"
25
- weight="bold"
26
- color="primary"
27
- align="center"
28
- >
29
- Welcome to the App
30
- </Text>
31
- ```
32
-
33
- ## Props
34
-
35
- | Prop | Type | Default | Description |
36
- |------|------|---------|-------------|
37
- | `children` | `ReactNode` | - | Text content to display |
38
- | `size` | `'small' \| 'medium' \| 'large' \| 'xlarge'` | `'medium'` | Font size |
39
- | `weight` | `'light' \| 'normal' \| 'medium' \| 'semibold' \| 'bold'` | `'normal'` | Font weight |
40
- | `color` | `ColorVariant \| string` | - | Text color |
41
- | `intent` | `IntentVariant` | - | Intent-based color scheme |
42
- | `align` | `'left' \| 'center' \| 'right'` | `'left'` | Text alignment |
43
- | `style` | `TextStyle` | - | Additional custom styles |
44
-
45
- ## Size Options
46
-
47
- | Size | Font Size | Use Case |
48
- |------|-----------|----------|
49
- | `small` | 12px | Captions, helper text |
50
- | `medium` | 14px | Body text, standard content |
51
- | `large` | 16px | Headings, important text |
52
- | `xlarge` | 20px | Page titles, feature headings |
53
-
54
- ## Weight Options
55
-
56
- - `light` - Light font weight
57
- - `normal` - Regular font weight (default)
58
- - `medium` - Medium font weight
59
- - `semibold` - Semi-bold font weight
60
- - `bold` - Bold font weight
61
-
62
- ## Examples
63
-
64
- ### Headings
65
- ```tsx
66
- <Text size="xlarge" weight="bold">Page Title</Text>
67
- <Text size="large" weight="semibold">Section Heading</Text>
68
- <Text size="medium" weight="medium">Subsection</Text>
69
- ```
70
-
71
- ### Body Text
72
- ```tsx
73
- <Text size="medium">
74
- This is regular body text with normal weight and medium size.
75
- </Text>
76
- <Text size="small" color="secondary">
77
- This is caption text with smaller size and secondary color.
78
- </Text>
79
- ```
80
-
81
- ### Intent Colors
82
- ```tsx
83
- <Text intent="success">Success message</Text>
84
- <Text intent="error">Error message</Text>
85
- <Text intent="warning">Warning message</Text>
86
- <Text intent="primary">Primary text</Text>
87
- ```
88
-
89
- ### Alignment
90
- ```tsx
91
- <Text align="left">Left aligned text</Text>
92
- <Text align="center">Center aligned text</Text>
93
- <Text align="right">Right aligned text</Text>
94
- ```
@@ -1,107 +0,0 @@
1
- # View Component
2
-
3
- A flexible container component with built-in spacing and styling options.
4
-
5
- ## Features
6
-
7
- - ✅ Cross-platform (React & React Native)
8
- - ✅ Built-in spacing system
9
- - ✅ Background color variants
10
- - ✅ Flexible layout options
11
- - ✅ Theme integration
12
- - ✅ TypeScript support
13
-
14
- ## Basic Usage
15
-
16
- ```tsx
17
- import { View, Text } from '@idealyst/components';
18
-
19
- // Basic view
20
- <View>
21
- <Text>Content inside view</Text>
22
- </View>
23
-
24
- // View with spacing
25
- <View spacing="lg">
26
- <Text>First item</Text>
27
- <Text>Second item</Text>
28
- <Text>Third item</Text>
29
- </View>
30
-
31
- // Styled view
32
- <View
33
- spacing="md"
34
- background="secondary"
35
- style={{ padding: 16, borderRadius: 8 }}
36
- >
37
- <Text>Styled content</Text>
38
- </View>
39
- ```
40
-
41
- ## Props
42
-
43
- | Prop | Type | Default | Description |
44
- |------|------|---------|-------------|
45
- | `children` | `ReactNode` | - | Content to display inside the view |
46
- | `spacing` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl' \| 'xxl'` | - | Gap between child elements |
47
- | `background` | `BackgroundVariant` | - | Background color variant |
48
- | `style` | `ViewStyle` | - | Additional custom styles |
49
-
50
- ## Spacing System
51
-
52
- The spacing prop adds consistent gaps between child elements:
53
-
54
- | Spacing | Value | Use Case |
55
- |---------|-------|----------|
56
- | `xs` | 4px | Tight spacing |
57
- | `sm` | 8px | Small spacing |
58
- | `md` | 16px | Medium spacing |
59
- | `lg` | 24px | Large spacing |
60
- | `xl` | 32px | Extra large spacing |
61
- | `xxl` | 48px | Extra extra large spacing |
62
-
63
- ## Examples
64
-
65
- ### Vertical Lists
66
- ```tsx
67
- <View spacing="md">
68
- <Text size="large" weight="bold">Settings</Text>
69
- <Text>Profile Settings</Text>
70
- <Text>Notification Settings</Text>
71
- <Text>Privacy Settings</Text>
72
- </View>
73
- ```
74
-
75
- ### Card Content
76
- ```tsx
77
- <Card>
78
- <View spacing="sm">
79
- <Text size="large" weight="bold">Card Title</Text>
80
- <Text color="secondary">Card subtitle</Text>
81
- <Text>Card content goes here with proper spacing between elements.</Text>
82
- </View>
83
- </Card>
84
- ```
85
-
86
- ### Form Layout
87
- ```tsx
88
- <View spacing="lg">
89
- <Input label="Name" value={name} onChangeText={setName} />
90
- <Input label="Email" value={email} onChangeText={setEmail} />
91
- <Button onPress={handleSubmit}>Submit</Button>
92
- </View>
93
- ```
94
-
95
- ### Nested Views
96
- ```tsx
97
- <View spacing="xl">
98
- <View spacing="sm">
99
- <Text size="large" weight="bold">Section 1</Text>
100
- <Text>Content for section 1</Text>
101
- </View>
102
- <View spacing="sm">
103
- <Text size="large" weight="bold">Section 2</Text>
104
- <Text>Content for section 2</Text>
105
- </View>
106
- </View>
107
- ```