@idealyst/components 1.0.83 → 1.0.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -0,0 +1,143 @@
1
+ import React, { useState } from 'react';
2
+ import { Screen, View, Text } from '@idealyst/components';
3
+ import TabBar from '../TabBar';
4
+ import type { TabBarItem } from '../TabBar/types';
5
+
6
+ export const TabBarExamples: React.FC = () => {
7
+ const [activeTab, setActiveTab] = useState('tab1');
8
+ const [variantTab, setVariantTab] = useState('home');
9
+ const [pillTab, setPillTab] = useState('tab1');
10
+
11
+ const basicTabs: TabBarItem[] = [
12
+ { value: 'tab1', label: 'Tab 1' },
13
+ { value: 'tab2', label: 'Tab 2' },
14
+ { value: 'tab3', label: 'Tab 3' },
15
+ ];
16
+
17
+ const variantTabs: TabBarItem[] = [
18
+ { value: 'home', label: 'Home' },
19
+ { value: 'search', label: 'Search' },
20
+ { value: 'settings', label: 'Settings' },
21
+ ];
22
+
23
+ const disabledTabs: TabBarItem[] = [
24
+ { value: 'tab1', label: 'Enabled' },
25
+ { value: 'tab2', label: 'Disabled', disabled: true },
26
+ { value: 'tab3', label: 'Enabled' },
27
+ ];
28
+
29
+ return (
30
+ <Screen background="primary" padding="lg">
31
+ <View spacing="lg">
32
+ <Text size="xl" weight="bold">TabBar Examples</Text>
33
+
34
+ <View spacing="md">
35
+ <Text size="lg" weight="semibold">Basic TabBar</Text>
36
+ <TabBar
37
+ items={basicTabs}
38
+ value={activeTab}
39
+ onChange={setActiveTab}
40
+ />
41
+ <Text size="sm" color="secondary">
42
+ Active tab: {activeTab}
43
+ </Text>
44
+ </View>
45
+
46
+ <View spacing="md">
47
+ <Text size="lg" weight="semibold">Variants</Text>
48
+ <View spacing="sm">
49
+ <View spacing="xs">
50
+ <Text size="sm" weight="medium">Standard</Text>
51
+ <TabBar
52
+ items={variantTabs}
53
+ value={variantTab}
54
+ onChange={setVariantTab}
55
+ type="standard"
56
+ />
57
+ </View>
58
+ <View spacing="xs">
59
+ <Text size="sm" weight="medium">Pills</Text>
60
+ <TabBar
61
+ items={variantTabs}
62
+ value={variantTab}
63
+ onChange={setVariantTab}
64
+ type="pills"
65
+ pillMode="light"
66
+ />
67
+ </View>
68
+ <View spacing="xs">
69
+ <Text size="sm" weight="medium">Underline</Text>
70
+ <TabBar
71
+ items={variantTabs}
72
+ value={variantTab}
73
+ onChange={setVariantTab}
74
+ type="underline"
75
+ />
76
+ </View>
77
+ </View>
78
+ </View>
79
+
80
+ <View spacing="md">
81
+ <Text size="lg" weight="semibold">Sizes</Text>
82
+ <View spacing="sm">
83
+ <TabBar
84
+ items={basicTabs}
85
+ value={activeTab}
86
+ onChange={setActiveTab}
87
+ size="sm"
88
+ />
89
+ <TabBar
90
+ items={basicTabs}
91
+ value={activeTab}
92
+ onChange={setActiveTab}
93
+ size="md"
94
+ />
95
+ <TabBar
96
+ items={basicTabs}
97
+ value={activeTab}
98
+ onChange={setActiveTab}
99
+ size="lg"
100
+ />
101
+ </View>
102
+ </View>
103
+
104
+ <View spacing="md">
105
+ <Text size="lg" weight="semibold">Pill Modes</Text>
106
+ <View spacing="sm">
107
+ <View spacing="xs">
108
+ <Text size="sm" weight="medium">Light Mode (dark pill on light background)</Text>
109
+ <TabBar
110
+ items={basicTabs}
111
+ value={pillTab}
112
+ onChange={setPillTab}
113
+ type="pills"
114
+ pillMode="light"
115
+ />
116
+ </View>
117
+ <View spacing="xs">
118
+ <Text size="sm" weight="medium">Dark Mode (light pill on dark background)</Text>
119
+ <TabBar
120
+ items={basicTabs}
121
+ value={pillTab}
122
+ onChange={setPillTab}
123
+ type="pills"
124
+ pillMode="dark"
125
+ />
126
+ </View>
127
+ </View>
128
+ </View>
129
+
130
+ <View spacing="md">
131
+ <Text size="lg" weight="semibold">Disabled Tabs</Text>
132
+ <TabBar
133
+ items={disabledTabs}
134
+ value={activeTab}
135
+ onChange={setActiveTab}
136
+ />
137
+ </View>
138
+ </View>
139
+ </Screen>
140
+ );
141
+ };
142
+
143
+ export default TabBarExamples;
@@ -0,0 +1,280 @@
1
+ import React from 'react';
2
+ import { Screen, View, Text, Badge, Button } from '@idealyst/components';
3
+ import Table from '../Table';
4
+ import type { TableColumn } from '../Table/types';
5
+
6
+ interface User {
7
+ id: number;
8
+ name: string;
9
+ email: string;
10
+ role: string;
11
+ status: 'active' | 'inactive';
12
+ }
13
+
14
+ interface Product {
15
+ id: number;
16
+ name: string;
17
+ category: string;
18
+ price: number;
19
+ stock: number;
20
+ }
21
+
22
+ export const TableExamples: React.FC = () => {
23
+ const users: User[] = [
24
+ { id: 1, name: 'John Doe', email: 'john@example.com', role: 'Admin', status: 'active' },
25
+ { id: 2, name: 'Jane Smith', email: 'jane@example.com', role: 'User', status: 'active' },
26
+ { id: 3, name: 'Bob Johnson', email: 'bob@example.com', role: 'User', status: 'inactive' },
27
+ { id: 4, name: 'Alice Williams', email: 'alice@example.com', role: 'Manager', status: 'active' },
28
+ ];
29
+
30
+ const products: Product[] = [
31
+ { id: 1, name: 'Laptop', category: 'Electronics', price: 999.99, stock: 15 },
32
+ { id: 2, name: 'Mouse', category: 'Electronics', price: 29.99, stock: 150 },
33
+ { id: 3, name: 'Keyboard', category: 'Electronics', price: 79.99, stock: 75 },
34
+ { id: 4, name: 'Monitor', category: 'Electronics', price: 299.99, stock: 30 },
35
+ { id: 5, name: 'Desk', category: 'Furniture', price: 399.99, stock: 10 },
36
+ ];
37
+
38
+ const userColumns: TableColumn<User>[] = [
39
+ {
40
+ key: 'name',
41
+ title: 'Name',
42
+ dataIndex: 'name',
43
+ width: '200px',
44
+ },
45
+ {
46
+ key: 'email',
47
+ title: 'Email',
48
+ dataIndex: 'email',
49
+ },
50
+ {
51
+ key: 'role',
52
+ title: 'Role',
53
+ dataIndex: 'role',
54
+ width: '120px',
55
+ },
56
+ {
57
+ key: 'status',
58
+ title: 'Status',
59
+ dataIndex: 'status',
60
+ width: '100px',
61
+ render: (status: string) => (
62
+ <Badge
63
+ type="filled"
64
+ color={status === 'active' ? 'green' : 'gray'}
65
+ >
66
+ {status}
67
+ </Badge>
68
+ ),
69
+ },
70
+ ];
71
+
72
+ const productColumns: TableColumn<Product>[] = [
73
+ {
74
+ key: 'name',
75
+ title: 'Product',
76
+ dataIndex: 'name',
77
+ },
78
+ {
79
+ key: 'category',
80
+ title: 'Category',
81
+ dataIndex: 'category',
82
+ width: '150px',
83
+ },
84
+ {
85
+ key: 'price',
86
+ title: 'Price',
87
+ dataIndex: 'price',
88
+ width: '120px',
89
+ align: 'right',
90
+ render: (price: number) => `$${price.toFixed(2)}`,
91
+ },
92
+ {
93
+ key: 'stock',
94
+ title: 'Stock',
95
+ dataIndex: 'stock',
96
+ width: '100px',
97
+ align: 'center',
98
+ render: (stock: number) => (
99
+ <Badge
100
+ type="filled"
101
+ color={stock > 50 ? 'green' : stock > 20 ? 'yellow' : 'red'}
102
+ >
103
+ {stock}
104
+ </Badge>
105
+ ),
106
+ },
107
+ ];
108
+
109
+ const actionColumns: TableColumn<User>[] = [
110
+ {
111
+ key: 'name',
112
+ title: 'Name',
113
+ dataIndex: 'name',
114
+ },
115
+ {
116
+ key: 'email',
117
+ title: 'Email',
118
+ dataIndex: 'email',
119
+ },
120
+ {
121
+ key: 'actions',
122
+ title: 'Actions',
123
+ width: '200px',
124
+ render: (_, user) => (
125
+ <View style={{ flexDirection: 'row', gap: 8 }}>
126
+ <Button size="sm" type="outlined" onPress={() => console.log('Edit', user.id)}>
127
+ Edit
128
+ </Button>
129
+ <Button size="sm" type="outlined" intent="error" onPress={() => console.log('Delete', user.id)}>
130
+ Delete
131
+ </Button>
132
+ </View>
133
+ ),
134
+ },
135
+ ];
136
+
137
+ return (
138
+ <Screen background="primary" padding="lg">
139
+ <View spacing="lg">
140
+ <Text size="xl" weight="bold">Table Examples</Text>
141
+
142
+ <View spacing="md">
143
+ <Text size="lg" weight="semibold">Basic Table</Text>
144
+ <Table columns={userColumns} data={users} />
145
+ </View>
146
+
147
+ <View spacing="md">
148
+ <Text size="lg" weight="semibold">Variants</Text>
149
+ <View spacing="sm">
150
+ <View spacing="xs">
151
+ <Text size="sm" weight="medium">Default</Text>
152
+ <Table
153
+ columns={userColumns}
154
+ data={users}
155
+ type="standard"
156
+ />
157
+ </View>
158
+ <View spacing="xs">
159
+ <Text size="sm" weight="medium">Bordered</Text>
160
+ <Table
161
+ columns={userColumns}
162
+ data={users}
163
+ type="bordered"
164
+ />
165
+ </View>
166
+ <View spacing="xs">
167
+ <Text size="sm" weight="medium">Striped</Text>
168
+ <Table
169
+ columns={userColumns}
170
+ data={users}
171
+ type="striped"
172
+ />
173
+ </View>
174
+ </View>
175
+ </View>
176
+
177
+ <View spacing="md">
178
+ <Text size="lg" weight="semibold">Sizes</Text>
179
+ <View spacing="sm">
180
+ <View spacing="xs">
181
+ <Text size="sm" weight="medium">Small</Text>
182
+ <Table
183
+ columns={userColumns}
184
+ data={users.slice(0, 2)}
185
+ size="sm"
186
+ type="bordered"
187
+ />
188
+ </View>
189
+ <View spacing="xs">
190
+ <Text size="sm" weight="medium">Medium (default)</Text>
191
+ <Table
192
+ columns={userColumns}
193
+ data={users.slice(0, 2)}
194
+ size="md"
195
+ type="bordered"
196
+ />
197
+ </View>
198
+ <View spacing="xs">
199
+ <Text size="sm" weight="medium">Large</Text>
200
+ <Table
201
+ columns={userColumns}
202
+ data={users.slice(0, 2)}
203
+ size="lg"
204
+ type="bordered"
205
+ />
206
+ </View>
207
+ </View>
208
+ </View>
209
+
210
+ <View spacing="md">
211
+ <Text size="lg" weight="semibold">Custom Rendering</Text>
212
+ <Table columns={productColumns} data={products} type="striped" />
213
+ </View>
214
+
215
+ <View spacing="md">
216
+ <Text size="lg" weight="semibold">Clickable Rows</Text>
217
+ <Table
218
+ columns={userColumns}
219
+ data={users}
220
+ type="bordered"
221
+ onRowPress={(user) => console.log('Clicked user:', user)}
222
+ />
223
+ <Text size="sm" color="secondary">
224
+ Click any row to see console output
225
+ </Text>
226
+ </View>
227
+
228
+ <View spacing="md">
229
+ <Text size="lg" weight="semibold">With Actions</Text>
230
+ <Table
231
+ columns={actionColumns}
232
+ data={users}
233
+ type="bordered"
234
+ />
235
+ </View>
236
+
237
+ <View spacing="md">
238
+ <Text size="lg" weight="semibold">Column Alignment</Text>
239
+ <Table
240
+ columns={[
241
+ { key: 'name', title: 'Product', dataIndex: 'name', align: 'left' },
242
+ { key: 'category', title: 'Category', dataIndex: 'category', align: 'center', width: '150px' },
243
+ { key: 'price', title: 'Price', dataIndex: 'price', align: 'right', width: '120px', render: (price: number) => `$${price.toFixed(2)}` },
244
+ ]}
245
+ data={products.slice(0, 3)}
246
+ type="bordered"
247
+ />
248
+ </View>
249
+
250
+ <View spacing="md">
251
+ <Text size="lg" weight="semibold">Fixed Column Widths</Text>
252
+ <Table
253
+ columns={[
254
+ { key: 'id', title: 'ID', dataIndex: 'id', width: '60px' },
255
+ { key: 'name', title: 'Name', dataIndex: 'name', width: '200px' },
256
+ { key: 'email', title: 'Email', dataIndex: 'email' },
257
+ { key: 'role', title: 'Role', dataIndex: 'role', width: '120px' },
258
+ ]}
259
+ data={users}
260
+ type="bordered"
261
+ />
262
+ </View>
263
+
264
+ <View spacing="md">
265
+ <Text size="lg" weight="semibold">Empty Table</Text>
266
+ <Table
267
+ columns={userColumns}
268
+ data={[]}
269
+ type="bordered"
270
+ />
271
+ <Text size="sm" color="secondary">
272
+ No data to display
273
+ </Text>
274
+ </View>
275
+ </View>
276
+ </Screen>
277
+ );
278
+ };
279
+
280
+ export default TableExamples;
@@ -0,0 +1,173 @@
1
+ import React, { useState } from 'react';
2
+ import { Screen, View, Text } from '@idealyst/components';
3
+ import TextArea from '../TextArea';
4
+
5
+ export const TextAreaExamples: React.FC = () => {
6
+ const [basicValue, setBasicValue] = useState('');
7
+ const [limitedValue, setLimitedValue] = useState('');
8
+ const [errorValue, setErrorValue] = useState('');
9
+ const [autoGrowValue, setAutoGrowValue] = useState('');
10
+
11
+ return (
12
+ <Screen background="primary" padding="lg">
13
+ <View spacing="lg">
14
+ <Text size="xl" weight="bold">TextArea Examples</Text>
15
+
16
+ <View spacing="md">
17
+ <Text size="lg" weight="semibold">Basic TextArea</Text>
18
+ <TextArea
19
+ value={basicValue}
20
+ onChange={setBasicValue}
21
+ placeholder="Enter your text here..."
22
+ rows={4}
23
+ />
24
+ </View>
25
+
26
+ <View spacing="md">
27
+ <Text size="lg" weight="semibold">Auto-Growing TextArea</Text>
28
+ <TextArea
29
+ label="Auto-grow with min/max height"
30
+ value={autoGrowValue}
31
+ onChange={setAutoGrowValue}
32
+ placeholder="Type multiple lines to see auto-grow in action..."
33
+ autoGrow
34
+ minHeight={60}
35
+ maxHeight={200}
36
+ helperText="This textarea grows as you type, up to 200px"
37
+ />
38
+ </View>
39
+
40
+ <View spacing="md">
41
+ <Text size="lg" weight="semibold">With Label</Text>
42
+ <TextArea
43
+ label="Description"
44
+ value={basicValue}
45
+ onChange={setBasicValue}
46
+ placeholder="Enter description..."
47
+ helperText="Provide a detailed description"
48
+ />
49
+ </View>
50
+
51
+ <View spacing="md">
52
+ <Text size="lg" weight="semibold">Sizes</Text>
53
+ <View spacing="sm">
54
+ <TextArea
55
+ size="sm"
56
+ placeholder="Small textarea"
57
+ rows={3}
58
+ />
59
+ <TextArea
60
+ size="md"
61
+ placeholder="Medium textarea (default)"
62
+ rows={3}
63
+ />
64
+ <TextArea
65
+ size="lg"
66
+ placeholder="Large textarea"
67
+ rows={3}
68
+ />
69
+ </View>
70
+ </View>
71
+
72
+ <View spacing="md">
73
+ <Text size="lg" weight="semibold">Intent Colors</Text>
74
+ <View spacing="sm">
75
+ <TextArea
76
+ intent="primary"
77
+ placeholder="Primary intent"
78
+ rows={2}
79
+ />
80
+ <TextArea
81
+ intent="success"
82
+ placeholder="Success intent"
83
+ rows={2}
84
+ />
85
+ <TextArea
86
+ intent="warning"
87
+ placeholder="Warning intent"
88
+ rows={2}
89
+ />
90
+ <TextArea
91
+ intent="neutral"
92
+ placeholder="Neutral intent"
93
+ rows={2}
94
+ />
95
+ </View>
96
+ </View>
97
+
98
+ <View spacing="md">
99
+ <Text size="lg" weight="semibold">With Character Limit</Text>
100
+ <TextArea
101
+ label="Limited Input"
102
+ value={limitedValue}
103
+ onChange={setLimitedValue}
104
+ placeholder="Maximum 100 characters"
105
+ maxLength={100}
106
+ showCharacterCount
107
+ rows={3}
108
+ />
109
+ </View>
110
+
111
+ <View spacing="md">
112
+ <Text size="lg" weight="semibold">Error State</Text>
113
+ <TextArea
114
+ label="Required Field"
115
+ value={errorValue}
116
+ onChange={setErrorValue}
117
+ placeholder="This field is required"
118
+ error="This field cannot be empty"
119
+ rows={3}
120
+ />
121
+ </View>
122
+
123
+ <View spacing="md">
124
+ <Text size="lg" weight="semibold">Resize Options</Text>
125
+ <View spacing="sm">
126
+ <TextArea
127
+ placeholder="Resize: none"
128
+ resize="none"
129
+ rows={2}
130
+ />
131
+ <TextArea
132
+ placeholder="Resize: vertical"
133
+ resize="vertical"
134
+ rows={2}
135
+ />
136
+ <TextArea
137
+ placeholder="Resize: horizontal"
138
+ resize="horizontal"
139
+ rows={2}
140
+ />
141
+ <TextArea
142
+ placeholder="Resize: both"
143
+ resize="both"
144
+ rows={2}
145
+ />
146
+ </View>
147
+ </View>
148
+
149
+ <View spacing="md">
150
+ <Text size="lg" weight="semibold">Custom Styling</Text>
151
+ <TextArea
152
+ label="Monospace Font"
153
+ placeholder="Code or monospace text..."
154
+ textareaStyle={{ fontFamily: 'monospace' }}
155
+ rows={4}
156
+ />
157
+ </View>
158
+
159
+ <View spacing="md">
160
+ <Text size="lg" weight="semibold">Disabled State</Text>
161
+ <TextArea
162
+ label="Disabled"
163
+ value="This textarea is disabled"
164
+ disabled
165
+ rows={3}
166
+ />
167
+ </View>
168
+ </View>
169
+ </Screen>
170
+ );
171
+ };
172
+
173
+ export default TextAreaExamples;