@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,206 @@
1
+ import React from 'react';
2
+ import { Screen, View, Text, Skeleton, SkeletonGroup, Divider, Card } from '../index';
3
+
4
+ export const SkeletonExamples = () => {
5
+ return (
6
+ <Screen background="primary" safeArea>
7
+ <View spacing="lg" style={{ maxWidth: 800, width: '100%', paddingHorizontal: 16, marginHorizontal: 'auto' }}>
8
+ <Text size="xl" weight="bold">Skeleton Examples</Text>
9
+
10
+ <Divider spacing="md" />
11
+ <Text size="lg" weight="semibold">Basic Shapes</Text>
12
+
13
+ <Text size="md" weight="semibold">Rectangle (Default)</Text>
14
+ <Skeleton width="100%" height={40} shape="rectangle" />
15
+
16
+ <Text size="md" weight="semibold">Rounded</Text>
17
+ <Skeleton width="100%" height={40} shape="rounded" />
18
+
19
+ <Text size="md" weight="semibold">Circle</Text>
20
+ <Skeleton width={64} height={64} shape="circle" />
21
+
22
+ <Divider spacing="md" />
23
+ <Text size="lg" weight="semibold">Custom Border Radius</Text>
24
+
25
+ <Skeleton width="100%" height={40} shape="rounded" borderRadius={4} />
26
+ <Skeleton width="100%" height={40} shape="rounded" borderRadius={16} />
27
+ <Skeleton width="100%" height={40} shape="rounded" borderRadius={24} />
28
+
29
+ <Divider spacing="md" />
30
+ <Text size="lg" weight="semibold">Animation Types</Text>
31
+
32
+ <Text size="md" weight="semibold">Pulse (Default)</Text>
33
+ <Skeleton width="100%" height={40} animation="pulse" />
34
+
35
+ <Text size="md" weight="semibold">Wave</Text>
36
+ <Skeleton width="100%" height={40} animation="wave" />
37
+
38
+ <Text size="md" weight="semibold">None</Text>
39
+ <Skeleton width="100%" height={40} animation="none" />
40
+
41
+ <Divider spacing="md" />
42
+ <Text size="lg" weight="semibold">Skeleton Groups</Text>
43
+
44
+ <Text size="md" weight="semibold">Default Group (3 items)</Text>
45
+ <SkeletonGroup />
46
+
47
+ <Text size="md" weight="semibold">Custom Count (5 items)</Text>
48
+ <SkeletonGroup count={5} />
49
+
50
+ <Text size="md" weight="semibold">Custom Spacing</Text>
51
+ <SkeletonGroup count={3} spacing={20} />
52
+
53
+ <Text size="md" weight="semibold">Custom Skeleton Props</Text>
54
+ <SkeletonGroup
55
+ count={4}
56
+ spacing={16}
57
+ skeletonProps={{
58
+ height: 60,
59
+ shape: 'rounded',
60
+ animation: 'wave',
61
+ }}
62
+ />
63
+
64
+ <Divider spacing="md" />
65
+ <Text size="lg" weight="semibold">Profile Card Loading</Text>
66
+
67
+ <Card type="outlined">
68
+ <View spacing="md">
69
+ <View style={{ flexDirection: 'row', gap: 12, alignItems: 'center' }}>
70
+ <Skeleton width={64} height={64} shape="circle" />
71
+ <View style={{ flex: 1, gap: 8 }}>
72
+ <Skeleton width="60%" height={24} shape="rounded" />
73
+ <Skeleton width="40%" height={16} shape="rounded" />
74
+ </View>
75
+ </View>
76
+ <SkeletonGroup count={3} skeletonProps={{ height: 16, shape: 'rounded' }} />
77
+ </View>
78
+ </Card>
79
+
80
+ <Divider spacing="md" />
81
+ <Text size="lg" weight="semibold">Article Card Loading</Text>
82
+
83
+ <Card type="outlined">
84
+ <View spacing="md">
85
+ <Skeleton width="100%" height={200} shape="rounded" />
86
+ <Skeleton width="80%" height={28} shape="rounded" />
87
+ <SkeletonGroup
88
+ count={3}
89
+ spacing={8}
90
+ skeletonProps={{ height: 16, shape: 'rounded' }}
91
+ />
92
+ <View style={{ flexDirection: 'row', gap: 12, marginTop: 8 }}>
93
+ <Skeleton width={32} height={32} shape="circle" />
94
+ <Skeleton width={120} height={16} shape="rounded" />
95
+ </View>
96
+ </View>
97
+ </Card>
98
+
99
+ <Divider spacing="md" />
100
+ <Text size="lg" weight="semibold">List Item Loading</Text>
101
+
102
+ <Card type="outlined">
103
+ <View spacing="md">
104
+ {[1, 2, 3].map((item) => (
105
+ <View key={item} style={{ flexDirection: 'row', gap: 12, alignItems: 'center' }}>
106
+ <Skeleton width={48} height={48} shape="rounded" />
107
+ <View style={{ flex: 1, gap: 8 }}>
108
+ <Skeleton width="70%" height={18} shape="rounded" />
109
+ <Skeleton width="50%" height={14} shape="rounded" />
110
+ </View>
111
+ </View>
112
+ ))}
113
+ </View>
114
+ </Card>
115
+
116
+ <Divider spacing="md" />
117
+ <Text size="lg" weight="semibold">Table Loading</Text>
118
+
119
+ <Card type="outlined">
120
+ <View spacing="sm">
121
+ {/* Header */}
122
+ <View style={{ flexDirection: 'row', gap: 12 }}>
123
+ <Skeleton width={40} height={20} shape="rounded" />
124
+ <Skeleton width="25%" height={20} shape="rounded" />
125
+ <Skeleton width="25%" height={20} shape="rounded" />
126
+ <Skeleton width="25%" height={20} shape="rounded" />
127
+ </View>
128
+ <Divider spacing="sm" />
129
+ {/* Rows */}
130
+ {[1, 2, 3, 4, 5].map((row) => (
131
+ <View key={row} style={{ flexDirection: 'row', gap: 12, alignItems: 'center' }}>
132
+ <Skeleton width={40} height={16} shape="rounded" />
133
+ <Skeleton width="25%" height={16} shape="rounded" />
134
+ <Skeleton width="25%" height={16} shape="rounded" />
135
+ <Skeleton width="25%" height={16} shape="rounded" />
136
+ </View>
137
+ ))}
138
+ </View>
139
+ </Card>
140
+
141
+ <Divider spacing="md" />
142
+ <Text size="lg" weight="semibold">Dashboard Card Loading</Text>
143
+
144
+ <View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap' }}>
145
+ {[1, 2, 3, 4].map((card) => (
146
+ <Card key={card} type="outlined" style={{ flex: 1, minWidth: 180 }}>
147
+ <View spacing="sm">
148
+ <Skeleton width="60%" height={16} shape="rounded" />
149
+ <Skeleton width="80%" height={32} shape="rounded" />
150
+ <Skeleton width="40%" height={12} shape="rounded" />
151
+ </View>
152
+ </Card>
153
+ ))}
154
+ </View>
155
+
156
+ <Divider spacing="md" />
157
+ <Text size="lg" weight="semibold">Comment Thread Loading</Text>
158
+
159
+ <Card type="outlined">
160
+ <View spacing="md">
161
+ {[1, 2, 3].map((comment) => (
162
+ <View key={comment} style={{ paddingLeft: comment > 1 ? 32 : 0 }}>
163
+ <View style={{ flexDirection: 'row', gap: 12 }}>
164
+ <Skeleton width={40} height={40} shape="circle" />
165
+ <View style={{ flex: 1, gap: 8 }}>
166
+ <Skeleton width="30%" height={16} shape="rounded" />
167
+ <SkeletonGroup
168
+ count={2}
169
+ spacing={6}
170
+ skeletonProps={{ height: 14, shape: 'rounded' }}
171
+ />
172
+ </View>
173
+ </View>
174
+ </View>
175
+ ))}
176
+ </View>
177
+ </Card>
178
+
179
+ <Divider spacing="md" />
180
+ <Text size="lg" weight="semibold">Mixed Shapes and Sizes</Text>
181
+
182
+ <View style={{ flexDirection: 'row', gap: 12, flexWrap: 'wrap' }}>
183
+ <Skeleton width={80} height={80} shape="circle" />
184
+ <Skeleton width={80} height={80} shape="rounded" borderRadius={16} />
185
+ <Skeleton width={80} height={80} shape="rectangle" />
186
+ </View>
187
+
188
+ <View style={{ flexDirection: 'row', gap: 12, alignItems: 'center' }}>
189
+ <Skeleton width={24} height={24} shape="circle" />
190
+ <Skeleton width={32} height={32} shape="circle" />
191
+ <Skeleton width={48} height={48} shape="circle" />
192
+ <Skeleton width={64} height={64} shape="circle" />
193
+ </View>
194
+
195
+ <Divider spacing="md" />
196
+ <Text size="lg" weight="semibold">Custom Widths</Text>
197
+
198
+ <Skeleton width={100} height={20} shape="rounded" />
199
+ <Skeleton width="25%" height={20} shape="rounded" />
200
+ <Skeleton width="50%" height={20} shape="rounded" />
201
+ <Skeleton width="75%" height={20} shape="rounded" />
202
+ <Skeleton width="100%" height={20} shape="rounded" />
203
+ </View>
204
+ </Screen>
205
+ );
206
+ };
@@ -0,0 +1,200 @@
1
+ import React, { useState } from 'react';
2
+ import { Screen, View, Text } from '@idealyst/components';
3
+ import Slider from '../Slider';
4
+
5
+ export const SliderExamples: React.FC = () => {
6
+ const [basicValue, setBasicValue] = useState(50);
7
+ const [volumeValue, setVolumeValue] = useState(75);
8
+ const [temperatureValue, setTemperatureValue] = useState(20);
9
+
10
+ return (
11
+ <Screen background="primary" padding="lg">
12
+ <View spacing="lg">
13
+ <Text size="xl" weight="bold">Slider Examples</Text>
14
+
15
+ <View spacing="md">
16
+ <Text size="lg" weight="semibold">Basic Slider</Text>
17
+ <Slider
18
+ value={basicValue}
19
+ onValueChange={setBasicValue}
20
+ showValue
21
+ />
22
+ <Text size="sm" color="secondary">Value: {basicValue}</Text>
23
+ </View>
24
+
25
+ <View spacing="md">
26
+ <Text size="lg" weight="semibold">Sizes</Text>
27
+ <View spacing="sm" style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
28
+ <View spacing="xs">
29
+ <Text size="sm">Small</Text>
30
+ <Slider defaultValue={30} size="sm" />
31
+ </View>
32
+ <View spacing="xs">
33
+ <Text size="sm">Medium (default)</Text>
34
+ <Slider defaultValue={50} size="md" />
35
+ </View>
36
+ <View spacing="xs">
37
+ <Text size="sm">Large</Text>
38
+ <Slider defaultValue={70} size="lg" />
39
+ </View>
40
+ </View>
41
+ </View>
42
+
43
+ <View spacing="md">
44
+ <Text size="lg" weight="semibold">Intent Colors</Text>
45
+ <View spacing="sm" style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
46
+ <View spacing="xs">
47
+ <Text size="sm">Primary</Text>
48
+ <Slider defaultValue={60} intent="primary" />
49
+ </View>
50
+ <View spacing="xs">
51
+ <Text size="sm">Success</Text>
52
+ <Slider defaultValue={60} intent="success" />
53
+ </View>
54
+ <View spacing="xs">
55
+ <Text size="sm">Error</Text>
56
+ <Slider defaultValue={60} intent="error" />
57
+ </View>
58
+ <View spacing="xs">
59
+ <Text size="sm">Warning</Text>
60
+ <Slider defaultValue={60} intent="warning" />
61
+ </View>
62
+ <View spacing="xs">
63
+ <Text size="sm">Neutral</Text>
64
+ <Slider defaultValue={60} intent="neutral" />
65
+ </View>
66
+ </View>
67
+ </View>
68
+
69
+ <View spacing="md">
70
+ <Text size="lg" weight="semibold">With Min/Max Labels</Text>
71
+ <Slider
72
+ defaultValue={50}
73
+ showMinMax
74
+ />
75
+ </View>
76
+
77
+ <View spacing="md">
78
+ <Text size="lg" weight="semibold">Custom Range & Step</Text>
79
+ <View spacing="sm" style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
80
+ <View spacing="xs">
81
+ <Text size="sm">Range: 0-10, Step: 1</Text>
82
+ <Slider
83
+ min={0}
84
+ max={10}
85
+ step={1}
86
+ defaultValue={5}
87
+ showValue
88
+ showMinMax
89
+ />
90
+ </View>
91
+ <View spacing="xs">
92
+ <Text size="sm">Range: -50 to 50, Step: 5</Text>
93
+ <Slider
94
+ min={-50}
95
+ max={50}
96
+ step={5}
97
+ defaultValue={0}
98
+ showValue
99
+ showMinMax
100
+ />
101
+ </View>
102
+ </View>
103
+ </View>
104
+
105
+ <View spacing="md">
106
+ <Text size="lg" weight="semibold">With Marks</Text>
107
+ <Slider
108
+ min={0}
109
+ max={100}
110
+ defaultValue={50}
111
+ marks={[
112
+ { value: 0, label: '0%' },
113
+ { value: 25, label: '25%' },
114
+ { value: 50, label: '50%' },
115
+ { value: 75, label: '75%' },
116
+ { value: 100, label: '100%' },
117
+ ]}
118
+ />
119
+ </View>
120
+
121
+ <View spacing="md">
122
+ <Text size="lg" weight="semibold">Volume Control</Text>
123
+ <Slider
124
+ value={volumeValue}
125
+ onValueChange={setVolumeValue}
126
+ min={0}
127
+ max={100}
128
+ showValue
129
+ intent="primary"
130
+ marks={[
131
+ { value: 0, label: 'Mute' },
132
+ { value: 50 },
133
+ { value: 100, label: 'Max' },
134
+ ]}
135
+ />
136
+ </View>
137
+
138
+ <View spacing="md">
139
+ <Text size="lg" weight="semibold">With Icons</Text>
140
+ <View spacing="sm" style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
141
+ <View spacing="xs">
142
+ <Text size="sm">Volume with icon</Text>
143
+ <Slider
144
+ defaultValue={60}
145
+ icon="volume-high"
146
+ intent="primary"
147
+ showMinMax
148
+ />
149
+ </View>
150
+ <View spacing="xs">
151
+ <Text size="sm">Brightness with icon</Text>
152
+ <Slider
153
+ defaultValue={75}
154
+ icon="brightness-6"
155
+ intent="warning"
156
+ showMinMax
157
+ />
158
+ </View>
159
+ <View spacing="xs">
160
+ <Text size="sm">Temperature with icon</Text>
161
+ <Slider
162
+ defaultValue={22}
163
+ min={10}
164
+ max={30}
165
+ icon="thermometer"
166
+ intent="error"
167
+ showMinMax
168
+ />
169
+ </View>
170
+ </View>
171
+ </View>
172
+
173
+ <View spacing="md">
174
+ <Text size="lg" weight="semibold">Temperature Control</Text>
175
+ <Slider
176
+ value={temperatureValue}
177
+ onValueChange={setTemperatureValue}
178
+ min={10}
179
+ max={30}
180
+ step={0.5}
181
+ showValue
182
+ showMinMax
183
+ intent="warning"
184
+ />
185
+ <Text size="sm" color="secondary">Temperature: {temperatureValue}°C</Text>
186
+ </View>
187
+
188
+ <View spacing="md">
189
+ <Text size="lg" weight="semibold">Disabled</Text>
190
+ <Slider
191
+ defaultValue={60}
192
+ disabled
193
+ />
194
+ </View>
195
+ </View>
196
+ </Screen>
197
+ );
198
+ };
199
+
200
+ export default SliderExamples;
@@ -0,0 +1,182 @@
1
+ import React, { useState } from 'react';
2
+ import { Screen, View, Text } from '@idealyst/components';
3
+ import Switch from '../Switch';
4
+
5
+ export const SwitchExamples: React.FC = () => {
6
+ const [basicChecked, setBasicChecked] = useState(false);
7
+ const [labelledChecked, setLabelledChecked] = useState(false);
8
+ const [intentChecked, setIntentChecked] = useState({
9
+ primary: false,
10
+ success: false,
11
+ error: false,
12
+ warning: false,
13
+ neutral: false,
14
+ });
15
+ const [iconChecked, setIconChecked] = useState({
16
+ basic: false,
17
+ notifications: true,
18
+ visibility: false,
19
+ volume: true,
20
+ wifi: false,
21
+ });
22
+
23
+ return (
24
+ <Screen background="primary" padding="lg">
25
+ <View spacing="lg">
26
+ <Text size="xl" weight="bold">Switch Examples</Text>
27
+
28
+ <View spacing="md">
29
+ <Text size="lg" weight="semibold">Basic Switch</Text>
30
+ <Switch
31
+ checked={basicChecked}
32
+ onCheckedChange={setBasicChecked}
33
+ />
34
+ </View>
35
+
36
+ <View spacing="md">
37
+ <Text size="lg" weight="semibold">With Label</Text>
38
+ <Switch
39
+ checked={labelledChecked}
40
+ onCheckedChange={setLabelledChecked}
41
+ label="Enable notifications"
42
+ />
43
+ </View>
44
+
45
+ <View spacing="md">
46
+ <Text size="lg" weight="semibold">Label Position</Text>
47
+ <Switch
48
+ checked={labelledChecked}
49
+ onCheckedChange={setLabelledChecked}
50
+ label="Left label"
51
+ labelPosition="left"
52
+ />
53
+ </View>
54
+
55
+ <View spacing="md">
56
+ <Text size="lg" weight="semibold">Sizes</Text>
57
+ <View spacing="sm">
58
+ <Switch
59
+ checked={basicChecked}
60
+ onCheckedChange={setBasicChecked}
61
+ size="sm"
62
+ label="Small"
63
+ />
64
+ <Switch
65
+ checked={basicChecked}
66
+ onCheckedChange={setBasicChecked}
67
+ size="md"
68
+ label="Medium (default)"
69
+ />
70
+ <Switch
71
+ checked={basicChecked}
72
+ onCheckedChange={setBasicChecked}
73
+ size="lg"
74
+ label="Large"
75
+ />
76
+ </View>
77
+ </View>
78
+
79
+ <View spacing="md">
80
+ <Text size="lg" weight="semibold">Intent Colors</Text>
81
+ <View spacing="sm">
82
+ <Switch
83
+ checked={intentChecked.primary}
84
+ onCheckedChange={(checked) => setIntentChecked(prev => ({ ...prev, primary: checked }))}
85
+ intent="primary"
86
+ label="Primary"
87
+ />
88
+ <Switch
89
+ checked={intentChecked.success}
90
+ onCheckedChange={(checked) => setIntentChecked(prev => ({ ...prev, success: checked }))}
91
+ intent="success"
92
+ label="Success"
93
+ />
94
+ <Switch
95
+ checked={intentChecked.error}
96
+ onCheckedChange={(checked) => setIntentChecked(prev => ({ ...prev, error: checked }))}
97
+ intent="error"
98
+ label="Error"
99
+ />
100
+ <Switch
101
+ checked={intentChecked.warning}
102
+ onCheckedChange={(checked) => setIntentChecked(prev => ({ ...prev, warning: checked }))}
103
+ intent="warning"
104
+ label="Warning"
105
+ />
106
+ <Switch
107
+ checked={intentChecked.neutral}
108
+ onCheckedChange={(checked) => setIntentChecked(prev => ({ ...prev, neutral: checked }))}
109
+ intent="neutral"
110
+ label="Neutral"
111
+ />
112
+ </View>
113
+ </View>
114
+
115
+ <View spacing="md">
116
+ <Text size="lg" weight="semibold">With Icons</Text>
117
+ <View spacing="sm">
118
+ <Switch
119
+ checked={iconChecked.basic}
120
+ onCheckedChange={(checked) => setIconChecked(prev => ({ ...prev, basic: checked }))}
121
+ enabledIcon="check"
122
+ disabledIcon="close"
123
+ label="On/Off"
124
+ />
125
+ <Switch
126
+ checked={iconChecked.notifications}
127
+ onCheckedChange={(checked) => setIconChecked(prev => ({ ...prev, notifications: checked }))}
128
+ enabledIcon="bell"
129
+ disabledIcon="bell-off"
130
+ intent="success"
131
+ label="Notifications"
132
+ />
133
+ <Switch
134
+ checked={iconChecked.visibility}
135
+ onCheckedChange={(checked) => setIconChecked(prev => ({ ...prev, visibility: checked }))}
136
+ enabledIcon="eye"
137
+ disabledIcon="eye-off"
138
+ intent="primary"
139
+ label="Visibility"
140
+ />
141
+ <Switch
142
+ checked={iconChecked.volume}
143
+ onCheckedChange={(checked) => setIconChecked(prev => ({ ...prev, volume: checked }))}
144
+ enabledIcon="volume-high"
145
+ disabledIcon="volume-off"
146
+ intent="warning"
147
+ label="Sound"
148
+ size="lg"
149
+ />
150
+ <Switch
151
+ checked={iconChecked.wifi}
152
+ onCheckedChange={(checked) => setIconChecked(prev => ({ ...prev, wifi: checked }))}
153
+ enabledIcon="wifi"
154
+ disabledIcon="wifi-off"
155
+ intent="error"
156
+ label="WiFi Connection"
157
+ size="sm"
158
+ />
159
+ </View>
160
+ </View>
161
+
162
+ <View spacing="md">
163
+ <Text size="lg" weight="semibold">Disabled States</Text>
164
+ <View spacing="sm">
165
+ <Switch
166
+ checked={false}
167
+ disabled
168
+ label="Disabled unchecked"
169
+ />
170
+ <Switch
171
+ checked={true}
172
+ disabled
173
+ label="Disabled checked"
174
+ />
175
+ </View>
176
+ </View>
177
+ </View>
178
+ </Screen>
179
+ );
180
+ };
181
+
182
+ export default SwitchExamples;