@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
@@ -1,258 +0,0 @@
1
- # Card Component
2
-
3
- A flexible container component for displaying content in a visually grouped format with various styling options.
4
-
5
- ## Features
6
-
7
- - ✅ Cross-platform (React & React Native)
8
- - ✅ Multiple variants (default, outlined, elevated, filled)
9
- - ✅ Configurable padding and border radius
10
- - ✅ Intent-based color schemes
11
- - ✅ Clickable/interactive support
12
- - ✅ Disabled state handling
13
- - ✅ Accessible with proper ARIA attributes
14
- - ✅ TypeScript support
15
-
16
- ## Basic Usage
17
-
18
- ```tsx
19
- import { Card, Text } from '@idealyst/components';
20
-
21
- // Basic card
22
- <Card>
23
- <Text size="large" weight="bold">Card Title</Text>
24
- <Text>Card content goes here</Text>
25
- </Card>
26
-
27
- // Clickable card
28
- <Card
29
- clickable
30
- onPress={() => console.log('Card pressed!')}
31
- >
32
- <Text>Click me!</Text>
33
- </Card>
34
-
35
- // Elevated card with custom styling
36
- <Card
37
- variant="elevated"
38
- padding="large"
39
- radius="large"
40
- >
41
- <Text>Elevated card content</Text>
42
- </Card>
43
- ```
44
-
45
- ## Props
46
-
47
- | Prop | Type | Default | Description |
48
- |------|------|---------|-------------|
49
- | `children` | `ReactNode` | - | Content to display inside the card |
50
- | `variant` | `'default' \| 'outlined' \| 'elevated' \| 'filled'` | `'default'` | Visual style variant |
51
- | `padding` | `'none' \| 'small' \| 'medium' \| 'large'` | `'medium'` | Internal padding size |
52
- | `radius` | `'none' \| 'small' \| 'medium' \| 'large'` | `'medium'` | Border radius size |
53
- | `intent` | `IntentVariant` | `'neutral'` | Color scheme/intent |
54
- | `clickable` | `boolean` | `false` | Whether the card is interactive |
55
- | `onPress` | `() => void` | - | Function called when card is pressed (requires clickable) |
56
- | `disabled` | `boolean` | `false` | Whether the card is disabled |
57
- | `style` | `ViewStyle` | - | Additional custom styles |
58
- | `testID` | `string` | - | Test identifier for testing |
59
- | `accessibilityLabel` | `string` | - | Accessibility label for screen readers |
60
-
61
- ## Variants
62
-
63
- ### Default Card
64
- Basic card with subtle background.
65
-
66
- ```tsx
67
- <Card variant="default">
68
- <Text>Default card content</Text>
69
- </Card>
70
- ```
71
-
72
- ### Outlined Card
73
- Card with border and transparent background.
74
-
75
- ```tsx
76
- <Card variant="outlined">
77
- <Text>Outlined card content</Text>
78
- </Card>
79
- ```
80
-
81
- ### Elevated Card
82
- Card with shadow/elevation for depth.
83
-
84
- ```tsx
85
- <Card variant="elevated">
86
- <Text>Elevated card content</Text>
87
- </Card>
88
- ```
89
-
90
- ### Filled Card
91
- Card with solid background color.
92
-
93
- ```tsx
94
- <Card variant="filled" intent="primary">
95
- <Text>Filled card content</Text>
96
- </Card>
97
- ```
98
-
99
- ## Padding Options
100
-
101
- | Padding | Value | Use Case |
102
- |---------|-------|----------|
103
- | `none` | 0px | Custom content padding |
104
- | `small` | 8px | Compact cards |
105
- | `medium` | 16px | Standard cards |
106
- | `large` | 24px | Spacious cards |
107
-
108
- ```tsx
109
- <Card padding="none">No padding</Card>
110
- <Card padding="small">Small padding</Card>
111
- <Card padding="medium">Medium padding</Card>
112
- <Card padding="large">Large padding</Card>
113
- ```
114
-
115
- ## Border Radius Options
116
-
117
- | Radius | Value | Use Case |
118
- |--------|-------|----------|
119
- | `none` | 0px | Sharp corners |
120
- | `small` | 4px | Subtle rounding |
121
- | `medium` | 8px | Standard rounding |
122
- | `large` | 16px | Prominent rounding |
123
-
124
- ```tsx
125
- <Card radius="none">Sharp corners</Card>
126
- <Card radius="small">Subtle corners</Card>
127
- <Card radius="medium">Standard corners</Card>
128
- <Card radius="large">Rounded corners</Card>
129
- ```
130
-
131
- ## Intent Colors
132
-
133
- ```tsx
134
- <Card intent="primary">Primary themed card</Card>
135
- <Card intent="neutral">Neutral themed card</Card>
136
- <Card intent="success">Success themed card</Card>
137
- <Card intent="error">Error themed card</Card>
138
- <Card intent="warning">Warning themed card</Card>
139
- ```
140
-
141
- ## Interactive Cards
142
-
143
- ### Clickable Cards
144
- ```tsx
145
- <Card
146
- clickable
147
- onPress={() => navigation.navigate('Details')}
148
- accessibilityLabel="Navigate to details"
149
- >
150
- <Text size="large" weight="bold">Product Title</Text>
151
- <Text>Tap to view details</Text>
152
- </Card>
153
- ```
154
-
155
- ### Disabled Cards
156
- ```tsx
157
- <Card
158
- clickable
159
- disabled
160
- onPress={() => {}}
161
- >
162
- <Text>This card is disabled</Text>
163
- </Card>
164
- ```
165
-
166
- ## Common Use Cases
167
-
168
- ### Content Cards
169
- ```tsx
170
- <Card variant="outlined" padding="large">
171
- <Text size="large" weight="bold">Article Title</Text>
172
- <Text size="small" color="secondary">Published 2 hours ago</Text>
173
- <Text style={{ marginTop: 8 }}>
174
- Article content preview...
175
- </Text>
176
- </Card>
177
- ```
178
-
179
- ### Action Cards
180
- ```tsx
181
- <Card
182
- variant="elevated"
183
- clickable
184
- onPress={handleAction}
185
- style={{ alignItems: 'center' }}
186
- >
187
- <Icon name="plus" size={32} />
188
- <Text weight="medium">Add New Item</Text>
189
- </Card>
190
- ```
191
-
192
- ### Status Cards
193
- ```tsx
194
- <Card variant="filled" intent="success" padding="small">
195
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>
196
- <Icon name="check" color="white" />
197
- <Text color="white" weight="medium">Task Completed</Text>
198
- </View>
199
- </Card>
200
- ```
201
-
202
- ### Grid Layout
203
- ```tsx
204
- <View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap' }}>
205
- <Card
206
- variant="outlined"
207
- style={{ flex: 1, minWidth: 200 }}
208
- clickable
209
- onPress={() => {}}
210
- >
211
- <Text weight="bold">Card 1</Text>
212
- <Text>Content 1</Text>
213
- </Card>
214
- <Card
215
- variant="outlined"
216
- style={{ flex: 1, minWidth: 200 }}
217
- clickable
218
- onPress={() => {}}
219
- >
220
- <Text weight="bold">Card 2</Text>
221
- <Text>Content 2</Text>
222
- </Card>
223
- </View>
224
- ```
225
-
226
- ## Accessibility
227
-
228
- - Automatically uses appropriate HTML elements (`div` vs `button`)
229
- - Proper ARIA roles and labels
230
- - Keyboard navigation support for clickable cards
231
- - Focus management and visual indicators
232
- - Screen reader compatibility
233
-
234
- ## Styling
235
-
236
- ```tsx
237
- // Custom card styling
238
- <Card
239
- variant="outlined"
240
- style={{
241
- borderColor: '#007AFF',
242
- borderWidth: 2,
243
- backgroundColor: '#F0F9FF',
244
- }}
245
- >
246
- <Text>Custom styled card</Text>
247
- </Card>
248
- ```
249
-
250
- ## Best Practices
251
-
252
- 1. **Use consistent variants** - Stick to one variant family in a section
253
- 2. **Mind content hierarchy** - Use padding and spacing to create visual hierarchy
254
- 3. **Consider interaction** - Make clickable cards visually distinct
255
- 4. **Accessibility first** - Always provide proper labels for interactive cards
256
- 5. **Performance** - Avoid complex nested structures in large lists
257
- 6. **Responsive design** - Test cards across different screen sizes
258
- 7. **Intent consistency** - Use intent colors meaningfully, not decoratively
@@ -1,102 +0,0 @@
1
- # Checkbox Component
2
-
3
- A customizable checkbox component with label support and theme integration.
4
-
5
- ## Features
6
-
7
- - ✅ Cross-platform (React & React Native)
8
- - ✅ Multiple sizes (small, medium, large)
9
- - ✅ Intent-based color schemes
10
- - ✅ Label support with custom positioning
11
- - ✅ Disabled state handling
12
- - ✅ Accessible with proper ARIA attributes
13
- - ✅ TypeScript support
14
-
15
- ## Basic Usage
16
-
17
- ```tsx
18
- import { Checkbox } from '@idealyst/components';
19
-
20
- // Basic checkbox
21
- <Checkbox
22
- checked={isChecked}
23
- onPress={() => setIsChecked(!isChecked)}
24
- />
25
-
26
- // Checkbox with label
27
- <Checkbox
28
- checked={isAgreed}
29
- onPress={() => setIsAgreed(!isAgreed)}
30
- label="I agree to the terms and conditions"
31
- />
32
-
33
- // Colored checkbox
34
- <Checkbox
35
- checked={isSelected}
36
- onPress={() => setIsSelected(!isSelected)}
37
- label="Enable notifications"
38
- intent="success"
39
- size="large"
40
- />
41
- ```
42
-
43
- ## Props
44
-
45
- | Prop | Type | Default | Description |
46
- |------|------|---------|-------------|
47
- | `checked` | `boolean` | `false` | Whether the checkbox is checked |
48
- | `onPress` | `() => void` | **Required** | Function called when checkbox is pressed |
49
- | `label` | `string` | - | Text label to display next to checkbox |
50
- | `disabled` | `boolean` | `false` | Whether the checkbox is disabled |
51
- | `size` | `'small' \| 'medium' \| 'large'` | `'medium'` | Size of the checkbox |
52
- | `intent` | `IntentVariant` | `'primary'` | Color scheme/intent |
53
- | `labelPosition` | `'left' \| 'right'` | `'right'` | Position of label relative to checkbox |
54
- | `style` | `ViewStyle` | - | Additional custom styles |
55
- | `testID` | `string` | - | Test identifier for testing |
56
-
57
- ## Examples
58
-
59
- ### Different Sizes
60
- ```tsx
61
- <Checkbox size="small" checked={small} onPress={() => setSmall(!small)} label="Small" />
62
- <Checkbox size="medium" checked={medium} onPress={() => setMedium(!medium)} label="Medium" />
63
- <Checkbox size="large" checked={large} onPress={() => setLarge(!large)} label="Large" />
64
- ```
65
-
66
- ### Intent Colors
67
- ```tsx
68
- <Checkbox intent="primary" checked={primary} onPress={() => setPrimary(!primary)} label="Primary" />
69
- <Checkbox intent="success" checked={success} onPress={() => setSuccess(!success)} label="Success" />
70
- <Checkbox intent="error" checked={error} onPress={() => setError(!error)} label="Error" />
71
- <Checkbox intent="warning" checked={warning} onPress={() => setWarning(!warning)} label="Warning" />
72
- ```
73
-
74
- ### Label Positioning
75
- ```tsx
76
- <Checkbox
77
- labelPosition="left"
78
- checked={leftLabel}
79
- onPress={() => setLeftLabel(!leftLabel)}
80
- label="Label on left"
81
- />
82
- <Checkbox
83
- labelPosition="right"
84
- checked={rightLabel}
85
- onPress={() => setRightLabel(!rightLabel)}
86
- label="Label on right"
87
- />
88
- ```
89
-
90
- ### Disabled State
91
- ```tsx
92
- <Checkbox disabled checked={true} label="Disabled (checked)" />
93
- <Checkbox disabled checked={false} label="Disabled (unchecked)" />
94
- ```
95
-
96
- ## Best Practices
97
-
98
- 1. **Provide clear labels** - Use descriptive text that explains what checking means
99
- 2. **Group related checkboxes** - Use consistent spacing and alignment
100
- 3. **Handle accessibility** - Ensure proper focus and screen reader support
101
- 4. **Use appropriate intents** - Match colors to the action's semantic meaning
102
- 5. **Test touch targets** - Ensure checkboxes are large enough for easy interaction
@@ -1,210 +0,0 @@
1
- # Dialog Component
2
-
3
- A modal dialog component that creates a global overlay across the entire application. The Dialog component works consistently across web and React Native platforms.
4
-
5
- ## Features
6
-
7
- - **Global Overlay**: Appears above all other content including navigation bars and tab bars
8
- - **Cross-Platform**: Uses React portals on web and Modal component on React Native
9
- - **Accessibility**: Focus management, escape key support (web), hardware back button handling (native)
10
- - **Theme Integration**: Supports intent-based colors and Unistyles variants
11
- - **Flexible Sizing**: Multiple size options from small to fullscreen
12
- - **Backdrop Interaction**: Configurable backdrop click behavior
13
-
14
- ## Usage
15
-
16
- ```tsx
17
- import { Dialog, Button, Text } from '@idealyst/components';
18
- import { useState } from 'react';
19
-
20
- const MyComponent = () => {
21
- const [open, setOpen] = useState(false);
22
-
23
- return (
24
- <>
25
- <Button onPress={() => setOpen(true)}>
26
- Open Dialog
27
- </Button>
28
-
29
- <Dialog
30
- open={open}
31
- onOpenChange={setOpen}
32
- title="Dialog Title"
33
- size="medium"
34
- variant="default"
35
- intent="primary"
36
- >
37
- <Text>Dialog content goes here</Text>
38
- <Button onPress={() => setOpen(false)}>
39
- Close
40
- </Button>
41
- </Dialog>
42
- </>
43
- );
44
- };
45
- ```
46
-
47
- ## Props
48
-
49
- | Prop | Type | Default | Description |
50
- |------|------|---------|-------------|
51
- | `open` | `boolean` | - | Whether the dialog is visible |
52
- | `onOpenChange` | `(open: boolean) => void` | - | Called when dialog should open/close |
53
- | `title` | `string` | - | Optional title displayed in header |
54
- | `children` | `ReactNode` | - | Content to display inside dialog |
55
- | `size` | `'small' \| 'medium' \| 'large' \| 'fullscreen'` | `'medium'` | Size of the dialog |
56
- | `variant` | `'default' \| 'alert' \| 'confirmation'` | `'default'` | Visual style variant |
57
- | `intent` | `'primary' \| 'neutral' \| 'success' \| 'error' \| 'warning'` | `'primary'` | Color scheme/semantic meaning |
58
- | `showCloseButton` | `boolean` | `true` | Whether to show close button in header |
59
- | `closeOnBackdropClick` | `boolean` | `true` | Whether clicking backdrop closes dialog |
60
- | `closeOnEscapeKey` | `boolean` | `true` | Whether escape key closes dialog (web only) |
61
- | `animationType` | `'slide' \| 'fade' \| 'none'` | `'fade'` | Animation type (native only) |
62
- | `style` | `any` | - | Additional platform-specific styles |
63
- | `testID` | `string` | - | Test identifier |
64
-
65
- ## Variants
66
-
67
- ### Size Variants
68
- - **small**: 400px max width, suitable for simple alerts
69
- - **medium**: 600px max width, good for forms and content
70
- - **large**: 800px max width, for complex layouts
71
- - **fullscreen**: Full screen coverage, removes border radius
72
-
73
- ### Visual Variants
74
- - **default**: Standard dialog appearance
75
- - **alert**: Adds colored top border for alerts
76
- - **confirmation**: Adds colored top border for confirmations
77
-
78
- ### Intent Colors
79
- When used with `alert` or `confirmation` variants:
80
- - **primary**: Blue top border
81
- - **success**: Green top border
82
- - **error**: Red top border
83
- - **warning**: Orange top border
84
- - **neutral**: Gray top border
85
-
86
- ## Platform Differences
87
-
88
- ### Web Implementation
89
- - Uses React portals to render into `document.body`
90
- - Supports escape key to close
91
- - Automatic focus management and restoration
92
- - Click outside to close (configurable)
93
- - Body scroll prevention when open
94
-
95
- ### React Native Implementation
96
- - Uses React Native's `Modal` component
97
- - Hardware back button handling on Android
98
- - Touch outside to close (configurable)
99
- - Configurable animation types
100
-
101
- ## Examples
102
-
103
- ### Basic Dialog
104
- ```tsx
105
- <Dialog
106
- open={isOpen}
107
- onOpenChange={setIsOpen}
108
- title="Basic Dialog"
109
- >
110
- <Text>Simple dialog content</Text>
111
- </Dialog>
112
- ```
113
-
114
- ### Alert Dialog
115
- ```tsx
116
- <Dialog
117
- open={alertOpen}
118
- onOpenChange={setAlertOpen}
119
- title="Important Alert"
120
- variant="alert"
121
- intent="warning"
122
- >
123
- <Text>This is an important message!</Text>
124
- </Dialog>
125
- ```
126
-
127
- ### Confirmation Dialog
128
- ```tsx
129
- <Dialog
130
- open={confirmOpen}
131
- onOpenChange={setConfirmOpen}
132
- title="Confirm Action"
133
- variant="confirmation"
134
- intent="error"
135
- closeOnBackdropClick={false}
136
- >
137
- <Text>Are you sure you want to delete this item?</Text>
138
- <View style={{ flexDirection: 'row', gap: 12, marginTop: 16 }}>
139
- <Button variant="outlined" onPress={() => setConfirmOpen(false)}>
140
- Cancel
141
- </Button>
142
- <Button variant="contained" intent="error" onPress={handleDelete}>
143
- Delete
144
- </Button>
145
- </View>
146
- </Dialog>
147
- ```
148
-
149
- ### Fullscreen Dialog
150
- ```tsx
151
- <Dialog
152
- open={fullscreenOpen}
153
- onOpenChange={setFullscreenOpen}
154
- title="Fullscreen Dialog"
155
- size="fullscreen"
156
- >
157
- <Text>This dialog covers the entire screen</Text>
158
- </Dialog>
159
- ```
160
-
161
- ## Accessibility
162
-
163
- - **Focus Management**: Automatically focuses dialog on open and restores focus on close (web)
164
- - **Keyboard Navigation**: Escape key support on web
165
- - **Screen Readers**: Proper ARIA roles and labels
166
- - **Touch Targets**: Minimum 44px touch targets for interactive elements
167
- - **Hardware Back Button**: Handled automatically on Android
168
-
169
- ## Best Practices
170
-
171
- 1. **Use appropriate sizes**: Choose size based on content complexity
172
- 2. **Provide clear actions**: Always include a way to close the dialog
173
- 3. **Use variants appropriately**: Choose alert or confirmation for important dialogs
174
- 4. **Handle confirmation dialogs carefully**: Disable backdrop close for destructive actions
175
- 5. **Keep content focused**: Dialogs should have a single, clear purpose
176
- 6. **Test cross-platform**: Verify behavior on both web and native platforms
177
-
178
- ## Common Patterns
179
-
180
- ### Form Dialog
181
- ```tsx
182
- <Dialog open={formOpen} onOpenChange={setFormOpen} title="Edit Profile">
183
- <View spacing="md">
184
- <Input label="Name" value={name} onChangeText={setName} />
185
- <Input label="Email" value={email} onChangeText={setEmail} />
186
- <View style={{ flexDirection: 'row', gap: 12 }}>
187
- <Button variant="outlined" onPress={() => setFormOpen(false)}>
188
- Cancel
189
- </Button>
190
- <Button variant="contained" onPress={handleSave}>
191
- Save
192
- </Button>
193
- </View>
194
- </View>
195
- </Dialog>
196
- ```
197
-
198
- ### Loading Dialog
199
- ```tsx
200
- <Dialog
201
- open={loading}
202
- onOpenChange={() => {}}
203
- closeOnBackdropClick={false}
204
- showCloseButton={false}
205
- >
206
- <View style={{ alignItems: 'center', padding: 20 }}>
207
- <Text>Loading...</Text>
208
- </View>
209
- </Dialog>
210
- ```
@@ -1,108 +0,0 @@
1
- # Divider Component
2
-
3
- A flexible separator component for creating visual divisions between content sections.
4
-
5
- ## Features
6
-
7
- - ✅ Cross-platform (React & React Native)
8
- - ✅ Horizontal and vertical orientations
9
- - ✅ Spacing variants (small, medium, large)
10
- - ✅ Intent-based color schemes
11
- - ✅ Optional content/children support
12
- - ✅ TypeScript support
13
-
14
- ## Basic Usage
15
-
16
- ```tsx
17
- import { Divider, Text } from '@idealyst/components';
18
-
19
- // Basic horizontal divider
20
- <Divider />
21
-
22
- // Divider with spacing
23
- <Divider spacing="large" />
24
-
25
- // Vertical divider
26
- <Divider orientation="vertical" />
27
-
28
- // Divider with content
29
- <Divider spacing="medium">
30
- <Text size="small" color="secondary">OR</Text>
31
- </Divider>
32
- ```
33
-
34
- ## Props
35
-
36
- | Prop | Type | Default | Description |
37
- |------|------|---------|-------------|
38
- | `children` | `ReactNode` | - | Optional content to display in the divider |
39
- | `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | Direction of the divider |
40
- | `spacing` | `'small' \| 'medium' \| 'large'` | `'medium'` | Spacing around the divider |
41
- | `intent` | `IntentVariant` | `'neutral'` | Color scheme of the divider |
42
- | `variant` | `'solid' \| 'dashed' \| 'dotted'` | `'solid'` | Visual style of the line |
43
- | `thickness` | `'thin' \| 'medium' \| 'thick'` | `'thin'` | Thickness of the divider line |
44
- | `style` | `ViewStyle` | - | Additional custom styles |
45
- | `testID` | `string` | - | Test identifier for testing |
46
-
47
- ## Examples
48
-
49
- ### Basic Dividers
50
- ```tsx
51
- <View>
52
- <Text>Content above</Text>
53
- <Divider />
54
- <Text>Content below</Text>
55
- </View>
56
- ```
57
-
58
- ### Spacing Variants
59
- ```tsx
60
- <View>
61
- <Text>Small spacing</Text>
62
- <Divider spacing="small" />
63
- <Text>Medium spacing</Text>
64
- <Divider spacing="medium" />
65
- <Text>Large spacing</Text>
66
- <Divider spacing="large" />
67
- <Text>End content</Text>
68
- </View>
69
- ```
70
-
71
- ### Vertical Dividers
72
- ```tsx
73
- <View style={{ flexDirection: 'row', alignItems: 'center', height: 40 }}>
74
- <Text>Left</Text>
75
- <Divider orientation="vertical" spacing="medium" />
76
- <Text>Middle</Text>
77
- <Divider orientation="vertical" spacing="medium" />
78
- <Text>Right</Text>
79
- </View>
80
- ```
81
-
82
- ### Dividers with Content
83
- ```tsx
84
- <View>
85
- <Text>Sign in with your account</Text>
86
- <Divider spacing="large">
87
- <Text size="small" color="secondary">OR</Text>
88
- </Divider>
89
- <Text>Continue with social login</Text>
90
- </View>
91
- ```
92
-
93
- ### Styled Dividers
94
- ```tsx
95
- <View>
96
- <Divider variant="solid" intent="neutral" />
97
- <Divider variant="dashed" intent="primary" />
98
- <Divider variant="dotted" intent="secondary" />
99
- </View>
100
- ```
101
-
102
- ## Best Practices
103
-
104
- 1. **Use appropriate spacing** - Match divider spacing to your content hierarchy
105
- 2. **Consider orientation** - Use vertical dividers in horizontal layouts
106
- 3. **Keep content minimal** - If using children, keep text short and meaningful
107
- 4. **Maintain consistency** - Use the same divider style throughout your app
108
- 5. **Accessibility** - Ensure dividers don't interfere with screen reader flow