@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
@@ -0,0 +1,174 @@
1
+ import React from 'react';
2
+ import { Screen, View, Text } from '@idealyst/components';
3
+ import Image from '../Image';
4
+
5
+ export const ImageExamples: React.FC = () => {
6
+ return (
7
+ <Screen background="primary" padding="lg">
8
+ <View spacing="lg">
9
+ <Text size="xl" weight="bold">Image Examples</Text>
10
+
11
+ <View spacing="md">
12
+ <Text size="lg" weight="semibold">Basic Image</Text>
13
+ <Image
14
+ source="https://picsum.photos/400/300"
15
+ alt="Random placeholder image"
16
+ width={400}
17
+ height={300}
18
+ />
19
+ </View>
20
+
21
+ <View spacing="md">
22
+ <Text size="lg" weight="semibold">Object Fit Variants</Text>
23
+ <View spacing="sm">
24
+ <Text size="sm" weight="medium">Cover (default)</Text>
25
+ <Image
26
+ source="https://picsum.photos/800/400"
27
+ alt="Cover example"
28
+ width={300}
29
+ height={200}
30
+ objectFit="cover"
31
+ />
32
+
33
+ <Text size="sm" weight="medium">Contain</Text>
34
+ <Image
35
+ source="https://picsum.photos/800/400"
36
+ alt="Contain example"
37
+ width={300}
38
+ height={200}
39
+ objectFit="contain"
40
+ />
41
+
42
+ <Text size="sm" weight="medium">Fill</Text>
43
+ <Image
44
+ source="https://picsum.photos/800/400"
45
+ alt="Fill example"
46
+ width={300}
47
+ height={200}
48
+ objectFit="fill"
49
+ />
50
+ </View>
51
+ </View>
52
+
53
+ <View spacing="md">
54
+ <Text size="lg" weight="semibold">Aspect Ratio</Text>
55
+ <View spacing="sm">
56
+ <Text size="sm" weight="medium">16:9 Aspect Ratio</Text>
57
+ <Image
58
+ source="https://picsum.photos/1600/900"
59
+ alt="16:9 aspect ratio"
60
+ width="100%"
61
+ aspectRatio={16 / 9}
62
+ />
63
+
64
+ <Text size="sm" weight="medium">1:1 Square</Text>
65
+ <Image
66
+ source="https://picsum.photos/600/600"
67
+ alt="Square aspect ratio"
68
+ width={200}
69
+ aspectRatio={1}
70
+ />
71
+ </View>
72
+ </View>
73
+
74
+ <View spacing="md">
75
+ <Text size="lg" weight="semibold">Border Radius</Text>
76
+ <View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap' }}>
77
+ <View spacing="xs">
78
+ <Text size="sm" weight="medium">Rounded (8px)</Text>
79
+ <Image
80
+ source="https://picsum.photos/200/200?random=1"
81
+ alt="Rounded corners"
82
+ width={150}
83
+ height={150}
84
+ borderRadius={8}
85
+ />
86
+ </View>
87
+
88
+ <View spacing="xs">
89
+ <Text size="sm" weight="medium">Very Rounded (24px)</Text>
90
+ <Image
91
+ source="https://picsum.photos/200/200?random=2"
92
+ alt="Very rounded corners"
93
+ width={150}
94
+ height={150}
95
+ borderRadius={24}
96
+ />
97
+ </View>
98
+
99
+ <View spacing="xs">
100
+ <Text size="sm" weight="medium">Circle (50%)</Text>
101
+ <Image
102
+ source="https://picsum.photos/200/200?random=3"
103
+ alt="Circle"
104
+ width={150}
105
+ height={150}
106
+ borderRadius={75}
107
+ />
108
+ </View>
109
+ </View>
110
+ </View>
111
+
112
+ <View spacing="md">
113
+ <Text size="lg" weight="semibold">Lazy Loading</Text>
114
+ <Text size="sm" color="secondary">Images load as they scroll into view</Text>
115
+ <View spacing="sm">
116
+ {[1, 2, 3, 4, 5].map((i) => (
117
+ <Image
118
+ key={i}
119
+ source={`https://picsum.photos/400/200?random=${i + 10}`}
120
+ alt={`Lazy loaded image ${i}`}
121
+ width="100%"
122
+ height={200}
123
+ loading="lazy"
124
+ />
125
+ ))}
126
+ </View>
127
+ </View>
128
+
129
+ <View spacing="md">
130
+ <Text size="lg" weight="semibold">With Custom Placeholder</Text>
131
+ <Image
132
+ source="https://picsum.photos/400/300?random=20"
133
+ alt="Custom placeholder"
134
+ width={400}
135
+ height={300}
136
+ placeholder={
137
+ <View style={{ padding: 20 }}>
138
+ <Text>Loading custom image...</Text>
139
+ </View>
140
+ }
141
+ />
142
+ </View>
143
+
144
+ <View spacing="md">
145
+ <Text size="lg" weight="semibold">Error Handling</Text>
146
+ <Text size="sm" color="secondary">Image with broken URL shows fallback</Text>
147
+ <Image
148
+ source="https://broken-url-that-does-not-exist.com/image.jpg"
149
+ alt="Broken image"
150
+ width={400}
151
+ height={300}
152
+ fallback={
153
+ <View style={{ padding: 20 }}>
154
+ <Text color="primary">❌ Failed to load image</Text>
155
+ </View>
156
+ }
157
+ />
158
+ </View>
159
+
160
+ <View spacing="md">
161
+ <Text size="lg" weight="semibold">Responsive Width</Text>
162
+ <Image
163
+ source="https://picsum.photos/1200/400"
164
+ alt="Responsive image"
165
+ width="100%"
166
+ aspectRatio={3}
167
+ />
168
+ </View>
169
+ </View>
170
+ </Screen>
171
+ );
172
+ };
173
+
174
+ export default ImageExamples;
@@ -6,17 +6,63 @@ export const InputExamples = () => {
6
6
  const [emailValue, setEmailValue] = useState('');
7
7
  const [passwordValue, setPasswordValue] = useState('');
8
8
  const [numberValue, setNumberValue] = useState('');
9
+ const [searchValue, setSearchValue] = useState('');
10
+ const [usernameValue, setUsernameValue] = useState('');
9
11
 
10
12
  return (
11
13
  <Screen background="primary" padding="lg">
12
14
  <View spacing="none">
13
- <Text size="large" weight="bold" align="center">
15
+ <Text size="lg" weight="bold" align="center">
14
16
  Input Examples
15
17
  </Text>
16
-
18
+
19
+ {/* With Icons */}
20
+ <View spacing="md">
21
+ <Text size="md" weight="semibold">With Icons</Text>
22
+ <View spacing="sm" style={{ gap: 10 }}>
23
+ <Input
24
+ leftIcon="email"
25
+ value={emailValue}
26
+ onChangeText={setEmailValue}
27
+ placeholder="Email with icon"
28
+ inputType="email"
29
+ />
30
+ <Input
31
+ leftIcon="account"
32
+ value={usernameValue}
33
+ onChangeText={setUsernameValue}
34
+ placeholder="Username with icon"
35
+ />
36
+ <Input
37
+ rightIcon="magnify"
38
+ value={searchValue}
39
+ onChangeText={setSearchValue}
40
+ placeholder="Search with icon"
41
+ />
42
+ <Input
43
+ leftIcon="lock"
44
+ rightIcon="check"
45
+ placeholder="Both icons"
46
+ />
47
+ <Input
48
+ leftIcon="lock"
49
+ value={passwordValue}
50
+ onChangeText={setPasswordValue}
51
+ placeholder="Password with toggle"
52
+ inputType="password"
53
+ />
54
+ <Input
55
+ leftIcon="lock"
56
+ placeholder="Password without toggle"
57
+ inputType="password"
58
+ showPasswordToggle={false}
59
+ />
60
+ </View>
61
+ </View>
62
+
17
63
  {/* Input Types */}
18
64
  <View spacing="md">
19
- <Text size="medium" weight="semibold">Input Types</Text>
65
+ <Text size="md" weight="semibold">Input Types</Text>
20
66
  <View spacing="sm" style={{ gap: 10 }}>
21
67
  <Input
22
68
  value={textValue}
@@ -25,19 +71,21 @@ export const InputExamples = () => {
25
71
  inputType="text"
26
72
  />
27
73
  <Input
74
+ leftIcon="email"
28
75
  value={emailValue}
29
76
  onChangeText={setEmailValue}
30
77
  placeholder="Email input"
31
78
  inputType="email"
32
79
  />
33
80
  <Input
81
+ leftIcon="lock"
34
82
  value={passwordValue}
35
83
  onChangeText={setPasswordValue}
36
84
  placeholder="Password input"
37
85
  inputType="password"
38
- secureTextEntry
39
86
  />
40
87
  <Input
88
+ leftIcon="calculator"
41
89
  value={numberValue}
42
90
  onChangeText={setNumberValue}
43
91
  placeholder="Number input"
@@ -48,58 +96,68 @@ export const InputExamples = () => {
48
96
 
49
97
  {/* Input Sizes */}
50
98
  <View spacing="md">
51
- <Text size="medium" weight="semibold">Sizes</Text>
99
+ <Text size="md" weight="semibold">Sizes</Text>
52
100
  <View spacing="sm" style={{ gap: 10 }}>
53
101
  <Input
102
+ leftIcon="email"
54
103
  placeholder="Small input"
55
- size="small"
104
+ size="sm"
56
105
  />
57
106
  <Input
107
+ leftIcon="email"
58
108
  placeholder="Medium input"
59
- size="medium"
109
+ size="md"
60
110
  />
61
111
  <Input
112
+ leftIcon="email"
62
113
  placeholder="Large input"
63
- size="large"
114
+ size="lg"
64
115
  />
65
116
  </View>
66
117
  </View>
67
118
 
68
119
  {/* Input Variants */}
69
120
  <View spacing="md">
70
- <Text size="medium" weight="semibold">Variants</Text>
121
+ <Text size="md" weight="semibold">Variants</Text>
71
122
  <View spacing="sm" style={{ gap: 10 }}>
72
123
  <Input
73
- placeholder="Default variant"
74
- variant="default"
75
- />
76
- <Input
124
+ leftIcon="magnify"
77
125
  placeholder="Outlined variant"
78
- variant="outlined"
126
+ type="outlined"
79
127
  />
80
128
  <Input
129
+ leftIcon="magnify"
81
130
  placeholder="Filled variant"
82
- variant="filled"
131
+ type="filled"
132
+ />
133
+ <Input
134
+ leftIcon="magnify"
135
+ placeholder="Bare variant"
136
+ type="bare"
83
137
  />
84
138
  </View>
85
139
  </View>
86
140
 
87
141
  {/* Input States */}
88
142
  <View spacing="md">
89
- <Text size="medium" weight="semibold">States</Text>
143
+ <Text size="md" weight="semibold">States</Text>
90
144
  <View spacing="sm" style={{ gap: 10 }}>
91
145
  <Input
146
+ leftIcon="account"
92
147
  placeholder="Normal state"
93
148
  />
94
149
  <Input
150
+ leftIcon="account"
95
151
  placeholder="Disabled state"
96
152
  disabled
97
153
  />
98
154
  <Input
155
+ leftIcon="account"
99
156
  placeholder="Error state"
100
157
  hasError
101
158
  />
102
159
  <Input
160
+ leftIcon="account"
103
161
  value="Pre-filled value"
104
162
  onChangeText={() => {}}
105
163
  />
@@ -108,7 +166,7 @@ export const InputExamples = () => {
108
166
 
109
167
  {/* Auto-capitalization Examples */}
110
168
  <View spacing="md">
111
- <Text size="medium" weight="semibold">Auto-capitalization</Text>
169
+ <Text size="md" weight="semibold">Auto-capitalization</Text>
112
170
  <View spacing="sm" style={{ gap: 10 }}>
113
171
  <Input
114
172
  placeholder="No capitalization"
@@ -0,0 +1,288 @@
1
+ import React, { useState } from 'react';
2
+ import { Screen, View, Text, Badge } from '@idealyst/components';
3
+ import { List, ListItem, ListSection } from '../List';
4
+
5
+ export const ListExamples: React.FC = () => {
6
+ const [selectedItem, setSelectedItem] = useState('home');
7
+ const [selectedNav, setSelectedNav] = useState('dashboard');
8
+
9
+ return (
10
+ <Screen background="primary" padding="lg">
11
+ <View spacing="lg">
12
+ <Text size="xl" weight="bold">List Examples</Text>
13
+
14
+ <View spacing="md">
15
+ <Text size="lg" weight="semibold">Basic List</Text>
16
+ <List type="divided">
17
+ <ListItem label="Item 1" />
18
+ <ListItem label="Item 2" />
19
+ <ListItem label="Item 3" />
20
+ </List>
21
+ </View>
22
+
23
+ <View spacing="md">
24
+ <Text size="lg" weight="semibold">Variants</Text>
25
+ <View spacing="sm">
26
+ <View spacing="xs">
27
+ <Text size="sm" weight="medium">Default</Text>
28
+ <List type="default">
29
+ <ListItem label="Item 1" />
30
+ <ListItem label="Item 2" />
31
+ <ListItem label="Item 3" />
32
+ </List>
33
+ </View>
34
+ <View spacing="xs">
35
+ <Text size="sm" weight="medium">Bordered</Text>
36
+ <List type="bordered">
37
+ <ListItem label="Item 1" />
38
+ <ListItem label="Item 2" />
39
+ <ListItem label="Item 3" />
40
+ </List>
41
+ </View>
42
+ <View spacing="xs">
43
+ <Text size="sm" weight="medium">Divided</Text>
44
+ <List type="divided">
45
+ <ListItem label="Item 1" />
46
+ <ListItem label="Item 2" />
47
+ <ListItem label="Item 3" />
48
+ </List>
49
+ </View>
50
+ </View>
51
+ </View>
52
+
53
+ <View spacing="md">
54
+ <Text size="lg" weight="semibold">Sizes</Text>
55
+ <View spacing="sm">
56
+ <List type="bordered" size="sm">
57
+ <ListItem label="Small Item" />
58
+ <ListItem label="Small Item" />
59
+ </List>
60
+ <List type="bordered" size="md">
61
+ <ListItem label="Medium Item" />
62
+ <ListItem label="Medium Item" />
63
+ </List>
64
+ <List type="bordered" size="lg">
65
+ <ListItem label="Large Item" />
66
+ <ListItem label="Large Item" />
67
+ </List>
68
+ </View>
69
+ </View>
70
+
71
+ <View spacing="md">
72
+ <Text size="lg" weight="semibold">Clickable List</Text>
73
+ <List type="bordered">
74
+ <ListItem
75
+ label="Home"
76
+ selected={selectedItem === 'home'}
77
+ onPress={() => setSelectedItem('home')}
78
+ />
79
+ <ListItem
80
+ label="Settings"
81
+ selected={selectedItem === 'settings'}
82
+ onPress={() => setSelectedItem('settings')}
83
+ />
84
+ <ListItem
85
+ label="Profile"
86
+ selected={selectedItem === 'profile'}
87
+ onPress={() => setSelectedItem('profile')}
88
+ />
89
+ </List>
90
+ <Text size="sm" color="secondary">
91
+ Selected: {selectedItem}
92
+ </Text>
93
+ </View>
94
+
95
+ <View spacing="md">
96
+ <Text size="lg" weight="semibold">With Leading Elements</Text>
97
+ <List type="divided">
98
+ <ListItem
99
+ label="Dashboard"
100
+ leading="home"
101
+ onPress={() => console.log('Dashboard')}
102
+ />
103
+ <ListItem
104
+ label="Settings"
105
+ leading="cog"
106
+ onPress={() => console.log('Settings')}
107
+ />
108
+ <ListItem
109
+ label="Profile"
110
+ leading="account"
111
+ onPress={() => console.log('Profile')}
112
+ />
113
+ </List>
114
+ </View>
115
+
116
+ <View spacing="md">
117
+ <Text size="lg" weight="semibold">With Trailing Elements</Text>
118
+ <List type="bordered">
119
+ <ListItem
120
+ label="Notifications"
121
+ leading="bell"
122
+ trailing={<Badge type="filled" color="red">3</Badge>}
123
+ />
124
+ <ListItem
125
+ label="Messages"
126
+ leading="email"
127
+ trailing={<Badge type="filled" color="blue">12</Badge>}
128
+ />
129
+ <ListItem
130
+ label="Updates"
131
+ leading="refresh"
132
+ trailing={<Text size="sm" color="secondary">New</Text>}
133
+ />
134
+ </List>
135
+ </View>
136
+
137
+ <View spacing="md">
138
+ <Text size="lg" weight="semibold">Navigation Sidebar</Text>
139
+ <List type="bordered">
140
+ <ListItem
141
+ label="Dashboard"
142
+ leading="view-dashboard"
143
+ selected={selectedNav === 'dashboard'}
144
+ onPress={() => setSelectedNav('dashboard')}
145
+ />
146
+ <ListItem
147
+ label="Analytics"
148
+ leading="chart-line"
149
+ selected={selectedNav === 'analytics'}
150
+ onPress={() => setSelectedNav('analytics')}
151
+ />
152
+ <ListItem
153
+ label="Reports"
154
+ leading="file-document"
155
+ selected={selectedNav === 'reports'}
156
+ onPress={() => setSelectedNav('reports')}
157
+ />
158
+ <ListItem
159
+ label="Settings"
160
+ leading="cog"
161
+ selected={selectedNav === 'settings'}
162
+ onPress={() => setSelectedNav('settings')}
163
+ />
164
+ </List>
165
+ </View>
166
+
167
+ <View spacing="md">
168
+ <Text size="lg" weight="semibold">With Sections</Text>
169
+ <List type="divided">
170
+ <ListSection title="Main">
171
+ <ListItem
172
+ label="Dashboard"
173
+ leading="home"
174
+ />
175
+ <ListItem
176
+ label="Analytics"
177
+ leading="chart-line"
178
+ />
179
+ </ListSection>
180
+
181
+ <ListSection title="Settings">
182
+ <ListItem
183
+ label="Profile"
184
+ leading="account"
185
+ />
186
+ <ListItem
187
+ label="Preferences"
188
+ leading="cog"
189
+ />
190
+ <ListItem
191
+ label="Security"
192
+ leading="lock"
193
+ />
194
+ </ListSection>
195
+
196
+ <ListSection title="Other">
197
+ <ListItem
198
+ label="Help"
199
+ leading="help-circle"
200
+ />
201
+ <ListItem
202
+ label="Logout"
203
+ leading="logout"
204
+ />
205
+ </ListSection>
206
+ </List>
207
+ </View>
208
+
209
+ <View spacing="md">
210
+ <Text size="lg" weight="semibold">Indented Items</Text>
211
+ <List type="bordered">
212
+ <ListItem label="Parent Item 1" />
213
+ <ListItem label="Child Item 1.1" indent={1} />
214
+ <ListItem label="Child Item 1.2" indent={1} />
215
+ <ListItem label="Grandchild Item 1.2.1" indent={2} />
216
+ <ListItem label="Parent Item 2" />
217
+ <ListItem label="Child Item 2.1" indent={1} />
218
+ </List>
219
+ </View>
220
+
221
+ <View spacing="md">
222
+ <Text size="lg" weight="semibold">Disabled Items</Text>
223
+ <List type="bordered">
224
+ <ListItem
225
+ label="Enabled Item"
226
+ onPress={() => console.log('Clicked')}
227
+ />
228
+ <ListItem
229
+ label="Disabled Item"
230
+ disabled
231
+ onPress={() => console.log('This should not trigger')}
232
+ />
233
+ <ListItem
234
+ label="Another Enabled Item"
235
+ onPress={() => console.log('Clicked')}
236
+ />
237
+ </List>
238
+ </View>
239
+
240
+ <View spacing="md">
241
+ <Text size="lg" weight="semibold">Rich Content</Text>
242
+ <List type="bordered">
243
+ <ListItem
244
+ leading="account-circle"
245
+ trailing={<Text size="sm" color="secondary">Admin</Text>}
246
+ >
247
+ <View>
248
+ <Text weight="semibold">John Doe</Text>
249
+ <Text size="sm" color="secondary">john.doe@example.com</Text>
250
+ </View>
251
+ </ListItem>
252
+ <ListItem
253
+ leading="account-circle"
254
+ trailing={<Text size="sm" color="secondary">User</Text>}
255
+ >
256
+ <View>
257
+ <Text weight="semibold">Jane Smith</Text>
258
+ <Text size="sm" color="secondary">jane.smith@example.com</Text>
259
+ </View>
260
+ </ListItem>
261
+ </List>
262
+ </View>
263
+
264
+ <View spacing="md">
265
+ <Text size="lg" weight="semibold">Active States</Text>
266
+ <List type="bordered">
267
+ <ListItem
268
+ label="Normal Item"
269
+ onPress={() => console.log('Normal')}
270
+ />
271
+ <ListItem
272
+ label="Active Item"
273
+ active
274
+ onPress={() => console.log('Active')}
275
+ />
276
+ <ListItem
277
+ label="Selected Item"
278
+ selected
279
+ onPress={() => console.log('Selected')}
280
+ />
281
+ </List>
282
+ </View>
283
+ </View>
284
+ </Screen>
285
+ );
286
+ };
287
+
288
+ export default ListExamples;