@idealyst/components 1.0.82 → 1.0.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +199 -232
- package/README.md +5 -5
- package/package.json +25 -7
- package/plugin/README.md +272 -0
- package/plugin/test-cases.jsx +112 -0
- package/plugin/web-legacy.js +320 -0
- package/plugin/web.js +422 -124
- package/src/Accordion/Accordion.native.tsx +182 -0
- package/src/Accordion/Accordion.styles.tsx +260 -0
- package/src/Accordion/Accordion.web.tsx +147 -0
- package/src/Accordion/index.native.tsx +3 -0
- package/src/Accordion/index.ts +3 -0
- package/src/Accordion/index.web.tsx +3 -0
- package/src/Accordion/types.ts +23 -0
- package/src/ActivityIndicator/ActivityIndicator.native.tsx +17 -12
- package/src/ActivityIndicator/ActivityIndicator.styles.tsx +83 -109
- package/src/ActivityIndicator/ActivityIndicator.web.tsx +23 -17
- package/src/ActivityIndicator/index.ts +5 -2
- package/src/ActivityIndicator/index.web.ts +5 -2
- package/src/ActivityIndicator/types.ts +15 -10
- package/src/Alert/Alert.native.tsx +113 -0
- package/src/Alert/Alert.styles.tsx +304 -0
- package/src/Alert/Alert.web.tsx +123 -0
- package/src/Alert/index.native.ts +5 -0
- package/src/Alert/index.ts +5 -0
- package/src/Alert/index.web.ts +5 -0
- package/src/Alert/types.ts +21 -0
- package/src/Avatar/Avatar.native.tsx +8 -6
- package/src/Avatar/Avatar.styles.tsx +64 -58
- package/src/Avatar/Avatar.web.tsx +13 -8
- package/src/Avatar/index.ts +5 -2
- package/src/Avatar/index.web.ts +5 -2
- package/src/Avatar/types.ts +19 -13
- package/src/Badge/Badge.native.tsx +59 -14
- package/src/Badge/Badge.styles.tsx +125 -139
- package/src/Badge/Badge.web.tsx +72 -16
- package/src/Badge/index.ts +5 -2
- package/src/Badge/index.web.ts +5 -2
- package/src/Badge/types.ts +23 -11
- package/src/Breadcrumb/Breadcrumb.native.tsx +225 -0
- package/src/Breadcrumb/Breadcrumb.styles.tsx +234 -0
- package/src/Breadcrumb/Breadcrumb.web.tsx +268 -0
- package/src/Breadcrumb/index.native.ts +5 -0
- package/src/Breadcrumb/index.ts +5 -0
- package/src/Breadcrumb/index.web.ts +5 -0
- package/src/Breadcrumb/types.ts +56 -0
- package/src/Button/Button.native.tsx +75 -24
- package/src/Button/Button.styles.tsx +248 -205
- package/src/Button/Button.web.tsx +82 -25
- package/src/Button/index.ts +5 -5
- package/src/Button/index.web.ts +5 -3
- package/src/Button/types.ts +32 -15
- package/src/Card/Card.native.tsx +14 -11
- package/src/Card/Card.styles.tsx +146 -220
- package/src/Card/Card.web.tsx +20 -21
- package/src/Card/index.ts +5 -5
- package/src/Card/index.web.ts +5 -3
- package/src/Card/types.ts +24 -17
- package/src/Checkbox/Checkbox.native.tsx +24 -34
- package/src/Checkbox/Checkbox.styles.tsx +223 -275
- package/src/Checkbox/Checkbox.web.tsx +30 -37
- package/src/Checkbox/index.ts +5 -5
- package/src/Checkbox/index.web.ts +5 -3
- package/src/Checkbox/types.ts +26 -20
- package/src/Chip/Chip.native.tsx +126 -0
- package/src/Chip/Chip.styles.tsx +138 -0
- package/src/Chip/Chip.web.tsx +154 -0
- package/src/Chip/index.native.ts +5 -0
- package/src/Chip/index.ts +5 -0
- package/src/Chip/index.web.ts +5 -0
- package/src/Chip/types.ts +51 -0
- package/src/Dialog/Dialog.native.tsx +65 -12
- package/src/Dialog/Dialog.styles.tsx +154 -136
- package/src/Dialog/Dialog.web.tsx +16 -11
- package/src/Dialog/index.ts +5 -2
- package/src/Dialog/index.web.ts +5 -2
- package/src/Dialog/types.ts +22 -16
- package/src/Divider/Divider.native.tsx +19 -14
- package/src/Divider/Divider.styles.tsx +273 -595
- package/src/Divider/Divider.web.tsx +19 -12
- package/src/Divider/index.ts +5 -5
- package/src/Divider/index.web.ts +5 -3
- package/src/Divider/types.ts +28 -19
- package/src/Icon/Icon.native.tsx +17 -24
- package/src/Icon/Icon.styles.tsx +64 -48
- package/src/Icon/Icon.web.tsx +14 -11
- package/src/Icon/IconSvg/IconSvg.native.tsx +42 -0
- package/src/Icon/IconSvg/IconSvg.web.tsx +40 -0
- package/src/Icon/IconSvg/index.native.ts +1 -0
- package/src/Icon/IconSvg/index.ts +1 -0
- package/src/Icon/icon-resolver.native.ts +27 -0
- package/src/Icon/icon-resolver.ts +70 -0
- package/src/Icon/index.ts +5 -5
- package/src/Icon/index.web.ts +5 -3
- package/src/Icon/types.ts +17 -11
- package/src/Image/Image.native.tsx +86 -0
- package/src/Image/Image.styles.tsx +57 -0
- package/src/Image/Image.web.tsx +92 -0
- package/src/Image/index.native.ts +5 -0
- package/src/Image/index.ts +5 -0
- package/src/Image/types.ts +21 -0
- package/src/Input/Input.native.tsx +103 -26
- package/src/Input/Input.styles.tsx +240 -177
- package/src/Input/Input.web.tsx +141 -38
- package/src/Input/index.ts +5 -5
- package/src/Input/index.web.ts +5 -3
- package/src/Input/types.ts +43 -20
- package/src/List/List.native.tsx +56 -0
- package/src/List/List.styles.tsx +257 -0
- package/src/List/List.web.tsx +43 -0
- package/src/List/ListContext.tsx +16 -0
- package/src/List/ListItem.native.tsx +111 -0
- package/src/List/ListItem.web.tsx +110 -0
- package/src/List/ListSection.native.tsx +31 -0
- package/src/List/ListSection.web.tsx +33 -0
- package/src/List/index.native.tsx +5 -0
- package/src/List/index.ts +5 -0
- package/src/List/index.web.tsx +5 -0
- package/src/List/types.ts +42 -0
- package/src/Menu/Menu.native.tsx +150 -0
- package/src/Menu/Menu.styles.tsx +185 -0
- package/src/Menu/Menu.web.tsx +99 -0
- package/src/Menu/MenuItem.native.tsx +66 -0
- package/src/Menu/MenuItem.styles.tsx +119 -0
- package/src/Menu/MenuItem.web.tsx +67 -0
- package/src/Menu/index.native.ts +3 -0
- package/src/Menu/index.ts +3 -0
- package/src/Menu/index.web.ts +3 -0
- package/src/Menu/types.ts +30 -0
- package/src/Popover/Popover.native.tsx +102 -32
- package/src/Popover/Popover.styles.tsx +100 -67
- package/src/Popover/Popover.web.tsx +36 -260
- package/src/Popover/index.ts +5 -2
- package/src/Popover/index.web.ts +5 -2
- package/src/Popover/types.ts +14 -13
- package/src/Pressable/Pressable.native.tsx +7 -6
- package/src/Pressable/Pressable.web.tsx +8 -6
- package/src/Pressable/index.ts +5 -2
- package/src/Pressable/index.web.ts +5 -2
- package/src/Pressable/types.ts +11 -10
- package/src/Progress/Progress.native.tsx +179 -0
- package/src/Progress/Progress.styles.tsx +164 -0
- package/src/Progress/Progress.web.tsx +144 -0
- package/src/Progress/index.native.ts +1 -0
- package/src/Progress/index.ts +5 -0
- package/src/Progress/index.web.ts +5 -0
- package/src/Progress/types.ts +21 -0
- package/src/RadioButton/RadioButton.native.tsx +88 -0
- package/src/RadioButton/RadioButton.styles.tsx +163 -0
- package/src/RadioButton/RadioButton.web.tsx +85 -0
- package/src/RadioButton/RadioGroup.native.tsx +43 -0
- package/src/RadioButton/RadioGroup.web.tsx +49 -0
- package/src/RadioButton/index.native.ts +2 -0
- package/src/RadioButton/index.ts +2 -0
- package/src/RadioButton/index.web.ts +2 -0
- package/src/RadioButton/types.ts +29 -0
- package/src/SVGImage/SVGImage.native.tsx +9 -7
- package/src/SVGImage/SVGImage.styles.tsx +63 -55
- package/src/SVGImage/SVGImage.web.tsx +16 -13
- package/src/SVGImage/index.ts +5 -5
- package/src/SVGImage/index.web.ts +5 -2
- package/src/SVGImage/types.ts +7 -3
- package/src/Screen/Screen.native.tsx +43 -17
- package/src/Screen/Screen.styles.tsx +58 -54
- package/src/Screen/Screen.web.tsx +11 -5
- package/src/Screen/index.ts +5 -2
- package/src/Screen/index.web.ts +5 -2
- package/src/Screen/types.ts +23 -9
- package/src/Select/Select.native.tsx +347 -0
- package/src/Select/Select.styles.tsx +335 -0
- package/src/Select/Select.web.tsx +276 -0
- package/src/Select/index.native.ts +2 -0
- package/src/Select/index.ts +5 -0
- package/src/Select/index.web.ts +5 -0
- package/src/Select/types.ts +124 -0
- package/src/Skeleton/Skeleton.native.tsx +139 -0
- package/src/Skeleton/Skeleton.styles.tsx +59 -0
- package/src/Skeleton/Skeleton.web.tsx +112 -0
- package/src/Skeleton/index.native.ts +4 -0
- package/src/Skeleton/index.ts +5 -0
- package/src/Skeleton/index.web.ts +5 -0
- package/src/Skeleton/types.ts +75 -0
- package/src/Slider/Slider.native.tsx +248 -0
- package/src/Slider/Slider.styles.tsx +241 -0
- package/src/Slider/Slider.web.tsx +226 -0
- package/src/Slider/index.native.ts +3 -0
- package/src/Slider/index.ts +5 -0
- package/src/Slider/index.web.ts +5 -0
- package/src/Slider/types.ts +31 -0
- package/src/Switch/Switch.native.tsx +131 -0
- package/src/Switch/Switch.styles.tsx +169 -0
- package/src/Switch/Switch.web.tsx +121 -0
- package/src/Switch/index.native.ts +3 -0
- package/src/Switch/index.ts +5 -0
- package/src/Switch/index.web.ts +5 -0
- package/src/Switch/types.ts +21 -0
- package/src/TabBar/TabBar.native.tsx +142 -0
- package/src/TabBar/TabBar.styles.tsx +399 -0
- package/src/TabBar/TabBar.web.tsx +205 -0
- package/src/TabBar/index.native.tsx +3 -0
- package/src/TabBar/index.ts +3 -0
- package/src/TabBar/index.web.tsx +3 -0
- package/src/TabBar/types.ts +26 -0
- package/src/Table/Table.native.tsx +122 -0
- package/src/Table/Table.styles.tsx +283 -0
- package/src/Table/Table.web.tsx +112 -0
- package/src/Table/index.native.tsx +3 -0
- package/src/Table/index.ts +3 -0
- package/src/Table/index.web.tsx +3 -0
- package/src/Table/types.ts +28 -0
- package/src/Text/Text.native.tsx +12 -11
- package/src/Text/Text.styles.tsx +76 -64
- package/src/Text/Text.web.tsx +14 -9
- package/src/Text/index.ts +5 -5
- package/src/Text/index.web.ts +5 -3
- package/src/Text/types.ts +20 -13
- package/src/TextArea/TextArea.native.tsx +134 -0
- package/src/TextArea/TextArea.styles.tsx +175 -0
- package/src/TextArea/TextArea.web.tsx +156 -0
- package/src/TextArea/index.native.ts +3 -0
- package/src/TextArea/index.ts +3 -0
- package/src/TextArea/index.web.ts +3 -0
- package/src/TextArea/types.ts +30 -0
- package/src/Tooltip/Tooltip.native.tsx +165 -0
- package/src/Tooltip/Tooltip.styles.tsx +73 -0
- package/src/Tooltip/Tooltip.web.tsx +87 -0
- package/src/Tooltip/index.native.ts +3 -0
- package/src/Tooltip/index.ts +3 -0
- package/src/Tooltip/types.ts +18 -0
- package/src/Video/Video.native.tsx +105 -0
- package/src/Video/Video.styles.tsx +39 -0
- package/src/Video/Video.web.tsx +115 -0
- package/src/Video/index.native.ts +5 -0
- package/src/Video/index.ts +5 -0
- package/src/Video/types.ts +29 -0
- package/src/View/View.native.tsx +9 -14
- package/src/View/View.styles.tsx +101 -93
- package/src/View/View.web.tsx +16 -17
- package/src/View/index.ts +5 -5
- package/src/View/index.web.ts +5 -3
- package/src/View/types.ts +29 -21
- package/src/examples/AccordionExamples.tsx +126 -0
- package/src/examples/AlertExamples.tsx +280 -0
- package/src/examples/AvatarExamples.tsx +23 -23
- package/src/examples/BadgeExamples.tsx +109 -41
- package/src/examples/BreadcrumbExamples.tsx +312 -0
- package/src/examples/ButtonExamples.tsx +160 -33
- package/src/examples/CardExamples.tsx +40 -40
- package/src/examples/CheckboxExamples.tsx +12 -12
- package/src/examples/ChipExamples.tsx +197 -0
- package/src/examples/DialogExamples.tsx +22 -22
- package/src/examples/DividerExamples.tsx +49 -49
- package/src/examples/IconExamples.tsx +270 -54
- package/src/examples/ImageExamples.tsx +174 -0
- package/src/examples/InputExamples.tsx +75 -17
- package/src/examples/ListExamples.tsx +288 -0
- package/src/examples/MenuExamples.tsx +144 -0
- package/src/examples/PopoverExamples.tsx +69 -73
- package/src/examples/ProgressExamples.tsx +137 -0
- package/src/examples/RadioButtonExamples.tsx +161 -0
- package/src/examples/SVGImageExamples.tsx +19 -17
- package/src/examples/ScreenExamples.tsx +31 -31
- package/src/examples/SelectExamples.tsx +423 -0
- package/src/examples/SkeletonExamples.tsx +206 -0
- package/src/examples/SliderExamples.tsx +200 -0
- package/src/examples/SwitchExamples.tsx +182 -0
- package/src/examples/TabBarExamples.tsx +143 -0
- package/src/examples/TableExamples.tsx +280 -0
- package/src/examples/TextAreaExamples.tsx +173 -0
- package/src/examples/TextExamples.tsx +28 -32
- package/src/examples/ThemeExtensionExamples.tsx +10 -10
- package/src/examples/TooltipExamples.tsx +126 -0
- package/src/examples/VideoExamples.tsx +144 -0
- package/src/examples/ViewExamples.tsx +64 -56
- package/src/examples/index.ts +18 -3
- package/src/hooks/useMergeRefs.ts +16 -0
- package/src/hooks/useSmartPosition.native.ts +169 -0
- package/src/index.native.ts +80 -9
- package/src/index.ts +75 -1
- package/src/internal/BoundedModalContent.native.tsx +58 -0
- package/src/internal/PositionedPortal.tsx +254 -0
- package/src/internal/SafeAreaDebugOverlay.native.tsx +173 -0
- package/src/unistyles.d.ts +6 -0
- package/src/utils/buildSizeVariants.ts +16 -0
- package/src/utils/deepMerge.ts +43 -0
- package/src/utils/positionUtils.native.ts +280 -0
- package/src/utils/styleHelpers.ts +48 -0
- package/LLM-ACCESS-GUIDE.md +0 -143
- package/src/ActivityIndicator/README.md +0 -132
- package/src/Avatar/README.md +0 -139
- package/src/Badge/README.md +0 -170
- package/src/Button/Button.types.ts +0 -12
- package/src/Button/README.md +0 -262
- package/src/Card/README.md +0 -258
- package/src/Checkbox/README.md +0 -102
- package/src/Dialog/README.md +0 -210
- package/src/Divider/README.md +0 -108
- package/src/Icon/README.md +0 -81
- package/src/Input/README.md +0 -100
- package/src/SVGImage/README.md +0 -209
- package/src/Screen/README.md +0 -86
- package/src/Text/README.md +0 -94
- package/src/View/README.md +0 -107
- package/src/examples/AllExamples.tsx +0 -84
- package/src/examples/README.md +0 -136
- package/src/examples/ValidationExamples.tsx +0 -95
- package/src/examples/extendedTheme.ts +0 -329
- package/src/theme/breakpoints.ts +0 -8
- package/src/theme/colorResolver.ts +0 -218
- package/src/theme/colors.ts +0 -315
- package/src/theme/defaultThemes.ts +0 -326
- package/src/theme/index.ts +0 -188
- package/src/theme/themeBuilder.ts +0 -602
- package/src/theme/unistyles.d.ts +0 -6
- package/src/theme/variantHelpers.ts +0 -584
- package/src/theme/variants.ts +0 -56
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Screen, View, Text } from '@idealyst/components';
|
|
3
|
+
import Image from '../Image';
|
|
4
|
+
|
|
5
|
+
export const ImageExamples: React.FC = () => {
|
|
6
|
+
return (
|
|
7
|
+
<Screen background="primary" padding="lg">
|
|
8
|
+
<View spacing="lg">
|
|
9
|
+
<Text size="xl" weight="bold">Image Examples</Text>
|
|
10
|
+
|
|
11
|
+
<View spacing="md">
|
|
12
|
+
<Text size="lg" weight="semibold">Basic Image</Text>
|
|
13
|
+
<Image
|
|
14
|
+
source="https://picsum.photos/400/300"
|
|
15
|
+
alt="Random placeholder image"
|
|
16
|
+
width={400}
|
|
17
|
+
height={300}
|
|
18
|
+
/>
|
|
19
|
+
</View>
|
|
20
|
+
|
|
21
|
+
<View spacing="md">
|
|
22
|
+
<Text size="lg" weight="semibold">Object Fit Variants</Text>
|
|
23
|
+
<View spacing="sm">
|
|
24
|
+
<Text size="sm" weight="medium">Cover (default)</Text>
|
|
25
|
+
<Image
|
|
26
|
+
source="https://picsum.photos/800/400"
|
|
27
|
+
alt="Cover example"
|
|
28
|
+
width={300}
|
|
29
|
+
height={200}
|
|
30
|
+
objectFit="cover"
|
|
31
|
+
/>
|
|
32
|
+
|
|
33
|
+
<Text size="sm" weight="medium">Contain</Text>
|
|
34
|
+
<Image
|
|
35
|
+
source="https://picsum.photos/800/400"
|
|
36
|
+
alt="Contain example"
|
|
37
|
+
width={300}
|
|
38
|
+
height={200}
|
|
39
|
+
objectFit="contain"
|
|
40
|
+
/>
|
|
41
|
+
|
|
42
|
+
<Text size="sm" weight="medium">Fill</Text>
|
|
43
|
+
<Image
|
|
44
|
+
source="https://picsum.photos/800/400"
|
|
45
|
+
alt="Fill example"
|
|
46
|
+
width={300}
|
|
47
|
+
height={200}
|
|
48
|
+
objectFit="fill"
|
|
49
|
+
/>
|
|
50
|
+
</View>
|
|
51
|
+
</View>
|
|
52
|
+
|
|
53
|
+
<View spacing="md">
|
|
54
|
+
<Text size="lg" weight="semibold">Aspect Ratio</Text>
|
|
55
|
+
<View spacing="sm">
|
|
56
|
+
<Text size="sm" weight="medium">16:9 Aspect Ratio</Text>
|
|
57
|
+
<Image
|
|
58
|
+
source="https://picsum.photos/1600/900"
|
|
59
|
+
alt="16:9 aspect ratio"
|
|
60
|
+
width="100%"
|
|
61
|
+
aspectRatio={16 / 9}
|
|
62
|
+
/>
|
|
63
|
+
|
|
64
|
+
<Text size="sm" weight="medium">1:1 Square</Text>
|
|
65
|
+
<Image
|
|
66
|
+
source="https://picsum.photos/600/600"
|
|
67
|
+
alt="Square aspect ratio"
|
|
68
|
+
width={200}
|
|
69
|
+
aspectRatio={1}
|
|
70
|
+
/>
|
|
71
|
+
</View>
|
|
72
|
+
</View>
|
|
73
|
+
|
|
74
|
+
<View spacing="md">
|
|
75
|
+
<Text size="lg" weight="semibold">Border Radius</Text>
|
|
76
|
+
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap' }}>
|
|
77
|
+
<View spacing="xs">
|
|
78
|
+
<Text size="sm" weight="medium">Rounded (8px)</Text>
|
|
79
|
+
<Image
|
|
80
|
+
source="https://picsum.photos/200/200?random=1"
|
|
81
|
+
alt="Rounded corners"
|
|
82
|
+
width={150}
|
|
83
|
+
height={150}
|
|
84
|
+
borderRadius={8}
|
|
85
|
+
/>
|
|
86
|
+
</View>
|
|
87
|
+
|
|
88
|
+
<View spacing="xs">
|
|
89
|
+
<Text size="sm" weight="medium">Very Rounded (24px)</Text>
|
|
90
|
+
<Image
|
|
91
|
+
source="https://picsum.photos/200/200?random=2"
|
|
92
|
+
alt="Very rounded corners"
|
|
93
|
+
width={150}
|
|
94
|
+
height={150}
|
|
95
|
+
borderRadius={24}
|
|
96
|
+
/>
|
|
97
|
+
</View>
|
|
98
|
+
|
|
99
|
+
<View spacing="xs">
|
|
100
|
+
<Text size="sm" weight="medium">Circle (50%)</Text>
|
|
101
|
+
<Image
|
|
102
|
+
source="https://picsum.photos/200/200?random=3"
|
|
103
|
+
alt="Circle"
|
|
104
|
+
width={150}
|
|
105
|
+
height={150}
|
|
106
|
+
borderRadius={75}
|
|
107
|
+
/>
|
|
108
|
+
</View>
|
|
109
|
+
</View>
|
|
110
|
+
</View>
|
|
111
|
+
|
|
112
|
+
<View spacing="md">
|
|
113
|
+
<Text size="lg" weight="semibold">Lazy Loading</Text>
|
|
114
|
+
<Text size="sm" color="secondary">Images load as they scroll into view</Text>
|
|
115
|
+
<View spacing="sm">
|
|
116
|
+
{[1, 2, 3, 4, 5].map((i) => (
|
|
117
|
+
<Image
|
|
118
|
+
key={i}
|
|
119
|
+
source={`https://picsum.photos/400/200?random=${i + 10}`}
|
|
120
|
+
alt={`Lazy loaded image ${i}`}
|
|
121
|
+
width="100%"
|
|
122
|
+
height={200}
|
|
123
|
+
loading="lazy"
|
|
124
|
+
/>
|
|
125
|
+
))}
|
|
126
|
+
</View>
|
|
127
|
+
</View>
|
|
128
|
+
|
|
129
|
+
<View spacing="md">
|
|
130
|
+
<Text size="lg" weight="semibold">With Custom Placeholder</Text>
|
|
131
|
+
<Image
|
|
132
|
+
source="https://picsum.photos/400/300?random=20"
|
|
133
|
+
alt="Custom placeholder"
|
|
134
|
+
width={400}
|
|
135
|
+
height={300}
|
|
136
|
+
placeholder={
|
|
137
|
+
<View style={{ padding: 20 }}>
|
|
138
|
+
<Text>Loading custom image...</Text>
|
|
139
|
+
</View>
|
|
140
|
+
}
|
|
141
|
+
/>
|
|
142
|
+
</View>
|
|
143
|
+
|
|
144
|
+
<View spacing="md">
|
|
145
|
+
<Text size="lg" weight="semibold">Error Handling</Text>
|
|
146
|
+
<Text size="sm" color="secondary">Image with broken URL shows fallback</Text>
|
|
147
|
+
<Image
|
|
148
|
+
source="https://broken-url-that-does-not-exist.com/image.jpg"
|
|
149
|
+
alt="Broken image"
|
|
150
|
+
width={400}
|
|
151
|
+
height={300}
|
|
152
|
+
fallback={
|
|
153
|
+
<View style={{ padding: 20 }}>
|
|
154
|
+
<Text color="primary">❌ Failed to load image</Text>
|
|
155
|
+
</View>
|
|
156
|
+
}
|
|
157
|
+
/>
|
|
158
|
+
</View>
|
|
159
|
+
|
|
160
|
+
<View spacing="md">
|
|
161
|
+
<Text size="lg" weight="semibold">Responsive Width</Text>
|
|
162
|
+
<Image
|
|
163
|
+
source="https://picsum.photos/1200/400"
|
|
164
|
+
alt="Responsive image"
|
|
165
|
+
width="100%"
|
|
166
|
+
aspectRatio={3}
|
|
167
|
+
/>
|
|
168
|
+
</View>
|
|
169
|
+
</View>
|
|
170
|
+
</Screen>
|
|
171
|
+
);
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
export default ImageExamples;
|
|
@@ -6,17 +6,63 @@ export const InputExamples = () => {
|
|
|
6
6
|
const [emailValue, setEmailValue] = useState('');
|
|
7
7
|
const [passwordValue, setPasswordValue] = useState('');
|
|
8
8
|
const [numberValue, setNumberValue] = useState('');
|
|
9
|
+
const [searchValue, setSearchValue] = useState('');
|
|
10
|
+
const [usernameValue, setUsernameValue] = useState('');
|
|
9
11
|
|
|
10
12
|
return (
|
|
11
13
|
<Screen background="primary" padding="lg">
|
|
12
14
|
<View spacing="none">
|
|
13
|
-
<Text size="
|
|
15
|
+
<Text size="lg" weight="bold" align="center">
|
|
14
16
|
Input Examples
|
|
15
17
|
</Text>
|
|
16
|
-
|
|
18
|
+
|
|
19
|
+
{/* With Icons */}
|
|
20
|
+
<View spacing="md">
|
|
21
|
+
<Text size="md" weight="semibold">With Icons</Text>
|
|
22
|
+
<View spacing="sm" style={{ gap: 10 }}>
|
|
23
|
+
<Input
|
|
24
|
+
leftIcon="email"
|
|
25
|
+
value={emailValue}
|
|
26
|
+
onChangeText={setEmailValue}
|
|
27
|
+
placeholder="Email with icon"
|
|
28
|
+
inputType="email"
|
|
29
|
+
/>
|
|
30
|
+
<Input
|
|
31
|
+
leftIcon="account"
|
|
32
|
+
value={usernameValue}
|
|
33
|
+
onChangeText={setUsernameValue}
|
|
34
|
+
placeholder="Username with icon"
|
|
35
|
+
/>
|
|
36
|
+
<Input
|
|
37
|
+
rightIcon="magnify"
|
|
38
|
+
value={searchValue}
|
|
39
|
+
onChangeText={setSearchValue}
|
|
40
|
+
placeholder="Search with icon"
|
|
41
|
+
/>
|
|
42
|
+
<Input
|
|
43
|
+
leftIcon="lock"
|
|
44
|
+
rightIcon="check"
|
|
45
|
+
placeholder="Both icons"
|
|
46
|
+
/>
|
|
47
|
+
<Input
|
|
48
|
+
leftIcon="lock"
|
|
49
|
+
value={passwordValue}
|
|
50
|
+
onChangeText={setPasswordValue}
|
|
51
|
+
placeholder="Password with toggle"
|
|
52
|
+
inputType="password"
|
|
53
|
+
/>
|
|
54
|
+
<Input
|
|
55
|
+
leftIcon="lock"
|
|
56
|
+
placeholder="Password without toggle"
|
|
57
|
+
inputType="password"
|
|
58
|
+
showPasswordToggle={false}
|
|
59
|
+
/>
|
|
60
|
+
</View>
|
|
61
|
+
</View>
|
|
62
|
+
|
|
17
63
|
{/* Input Types */}
|
|
18
64
|
<View spacing="md">
|
|
19
|
-
<Text size="
|
|
65
|
+
<Text size="md" weight="semibold">Input Types</Text>
|
|
20
66
|
<View spacing="sm" style={{ gap: 10 }}>
|
|
21
67
|
<Input
|
|
22
68
|
value={textValue}
|
|
@@ -25,19 +71,21 @@ export const InputExamples = () => {
|
|
|
25
71
|
inputType="text"
|
|
26
72
|
/>
|
|
27
73
|
<Input
|
|
74
|
+
leftIcon="email"
|
|
28
75
|
value={emailValue}
|
|
29
76
|
onChangeText={setEmailValue}
|
|
30
77
|
placeholder="Email input"
|
|
31
78
|
inputType="email"
|
|
32
79
|
/>
|
|
33
80
|
<Input
|
|
81
|
+
leftIcon="lock"
|
|
34
82
|
value={passwordValue}
|
|
35
83
|
onChangeText={setPasswordValue}
|
|
36
84
|
placeholder="Password input"
|
|
37
85
|
inputType="password"
|
|
38
|
-
secureTextEntry
|
|
39
86
|
/>
|
|
40
87
|
<Input
|
|
88
|
+
leftIcon="calculator"
|
|
41
89
|
value={numberValue}
|
|
42
90
|
onChangeText={setNumberValue}
|
|
43
91
|
placeholder="Number input"
|
|
@@ -48,58 +96,68 @@ export const InputExamples = () => {
|
|
|
48
96
|
|
|
49
97
|
{/* Input Sizes */}
|
|
50
98
|
<View spacing="md">
|
|
51
|
-
<Text size="
|
|
99
|
+
<Text size="md" weight="semibold">Sizes</Text>
|
|
52
100
|
<View spacing="sm" style={{ gap: 10 }}>
|
|
53
101
|
<Input
|
|
102
|
+
leftIcon="email"
|
|
54
103
|
placeholder="Small input"
|
|
55
|
-
size="
|
|
104
|
+
size="sm"
|
|
56
105
|
/>
|
|
57
106
|
<Input
|
|
107
|
+
leftIcon="email"
|
|
58
108
|
placeholder="Medium input"
|
|
59
|
-
size="
|
|
109
|
+
size="md"
|
|
60
110
|
/>
|
|
61
111
|
<Input
|
|
112
|
+
leftIcon="email"
|
|
62
113
|
placeholder="Large input"
|
|
63
|
-
size="
|
|
114
|
+
size="lg"
|
|
64
115
|
/>
|
|
65
116
|
</View>
|
|
66
117
|
</View>
|
|
67
118
|
|
|
68
119
|
{/* Input Variants */}
|
|
69
120
|
<View spacing="md">
|
|
70
|
-
<Text size="
|
|
121
|
+
<Text size="md" weight="semibold">Variants</Text>
|
|
71
122
|
<View spacing="sm" style={{ gap: 10 }}>
|
|
72
123
|
<Input
|
|
73
|
-
|
|
74
|
-
variant="default"
|
|
75
|
-
/>
|
|
76
|
-
<Input
|
|
124
|
+
leftIcon="magnify"
|
|
77
125
|
placeholder="Outlined variant"
|
|
78
|
-
|
|
126
|
+
type="outlined"
|
|
79
127
|
/>
|
|
80
128
|
<Input
|
|
129
|
+
leftIcon="magnify"
|
|
81
130
|
placeholder="Filled variant"
|
|
82
|
-
|
|
131
|
+
type="filled"
|
|
132
|
+
/>
|
|
133
|
+
<Input
|
|
134
|
+
leftIcon="magnify"
|
|
135
|
+
placeholder="Bare variant"
|
|
136
|
+
type="bare"
|
|
83
137
|
/>
|
|
84
138
|
</View>
|
|
85
139
|
</View>
|
|
86
140
|
|
|
87
141
|
{/* Input States */}
|
|
88
142
|
<View spacing="md">
|
|
89
|
-
<Text size="
|
|
143
|
+
<Text size="md" weight="semibold">States</Text>
|
|
90
144
|
<View spacing="sm" style={{ gap: 10 }}>
|
|
91
145
|
<Input
|
|
146
|
+
leftIcon="account"
|
|
92
147
|
placeholder="Normal state"
|
|
93
148
|
/>
|
|
94
149
|
<Input
|
|
150
|
+
leftIcon="account"
|
|
95
151
|
placeholder="Disabled state"
|
|
96
152
|
disabled
|
|
97
153
|
/>
|
|
98
154
|
<Input
|
|
155
|
+
leftIcon="account"
|
|
99
156
|
placeholder="Error state"
|
|
100
157
|
hasError
|
|
101
158
|
/>
|
|
102
159
|
<Input
|
|
160
|
+
leftIcon="account"
|
|
103
161
|
value="Pre-filled value"
|
|
104
162
|
onChangeText={() => {}}
|
|
105
163
|
/>
|
|
@@ -108,7 +166,7 @@ export const InputExamples = () => {
|
|
|
108
166
|
|
|
109
167
|
{/* Auto-capitalization Examples */}
|
|
110
168
|
<View spacing="md">
|
|
111
|
-
<Text size="
|
|
169
|
+
<Text size="md" weight="semibold">Auto-capitalization</Text>
|
|
112
170
|
<View spacing="sm" style={{ gap: 10 }}>
|
|
113
171
|
<Input
|
|
114
172
|
placeholder="No capitalization"
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Screen, View, Text, Badge } from '@idealyst/components';
|
|
3
|
+
import { List, ListItem, ListSection } from '../List';
|
|
4
|
+
|
|
5
|
+
export const ListExamples: React.FC = () => {
|
|
6
|
+
const [selectedItem, setSelectedItem] = useState('home');
|
|
7
|
+
const [selectedNav, setSelectedNav] = useState('dashboard');
|
|
8
|
+
|
|
9
|
+
return (
|
|
10
|
+
<Screen background="primary" padding="lg">
|
|
11
|
+
<View spacing="lg">
|
|
12
|
+
<Text size="xl" weight="bold">List Examples</Text>
|
|
13
|
+
|
|
14
|
+
<View spacing="md">
|
|
15
|
+
<Text size="lg" weight="semibold">Basic List</Text>
|
|
16
|
+
<List type="divided">
|
|
17
|
+
<ListItem label="Item 1" />
|
|
18
|
+
<ListItem label="Item 2" />
|
|
19
|
+
<ListItem label="Item 3" />
|
|
20
|
+
</List>
|
|
21
|
+
</View>
|
|
22
|
+
|
|
23
|
+
<View spacing="md">
|
|
24
|
+
<Text size="lg" weight="semibold">Variants</Text>
|
|
25
|
+
<View spacing="sm">
|
|
26
|
+
<View spacing="xs">
|
|
27
|
+
<Text size="sm" weight="medium">Default</Text>
|
|
28
|
+
<List type="default">
|
|
29
|
+
<ListItem label="Item 1" />
|
|
30
|
+
<ListItem label="Item 2" />
|
|
31
|
+
<ListItem label="Item 3" />
|
|
32
|
+
</List>
|
|
33
|
+
</View>
|
|
34
|
+
<View spacing="xs">
|
|
35
|
+
<Text size="sm" weight="medium">Bordered</Text>
|
|
36
|
+
<List type="bordered">
|
|
37
|
+
<ListItem label="Item 1" />
|
|
38
|
+
<ListItem label="Item 2" />
|
|
39
|
+
<ListItem label="Item 3" />
|
|
40
|
+
</List>
|
|
41
|
+
</View>
|
|
42
|
+
<View spacing="xs">
|
|
43
|
+
<Text size="sm" weight="medium">Divided</Text>
|
|
44
|
+
<List type="divided">
|
|
45
|
+
<ListItem label="Item 1" />
|
|
46
|
+
<ListItem label="Item 2" />
|
|
47
|
+
<ListItem label="Item 3" />
|
|
48
|
+
</List>
|
|
49
|
+
</View>
|
|
50
|
+
</View>
|
|
51
|
+
</View>
|
|
52
|
+
|
|
53
|
+
<View spacing="md">
|
|
54
|
+
<Text size="lg" weight="semibold">Sizes</Text>
|
|
55
|
+
<View spacing="sm">
|
|
56
|
+
<List type="bordered" size="sm">
|
|
57
|
+
<ListItem label="Small Item" />
|
|
58
|
+
<ListItem label="Small Item" />
|
|
59
|
+
</List>
|
|
60
|
+
<List type="bordered" size="md">
|
|
61
|
+
<ListItem label="Medium Item" />
|
|
62
|
+
<ListItem label="Medium Item" />
|
|
63
|
+
</List>
|
|
64
|
+
<List type="bordered" size="lg">
|
|
65
|
+
<ListItem label="Large Item" />
|
|
66
|
+
<ListItem label="Large Item" />
|
|
67
|
+
</List>
|
|
68
|
+
</View>
|
|
69
|
+
</View>
|
|
70
|
+
|
|
71
|
+
<View spacing="md">
|
|
72
|
+
<Text size="lg" weight="semibold">Clickable List</Text>
|
|
73
|
+
<List type="bordered">
|
|
74
|
+
<ListItem
|
|
75
|
+
label="Home"
|
|
76
|
+
selected={selectedItem === 'home'}
|
|
77
|
+
onPress={() => setSelectedItem('home')}
|
|
78
|
+
/>
|
|
79
|
+
<ListItem
|
|
80
|
+
label="Settings"
|
|
81
|
+
selected={selectedItem === 'settings'}
|
|
82
|
+
onPress={() => setSelectedItem('settings')}
|
|
83
|
+
/>
|
|
84
|
+
<ListItem
|
|
85
|
+
label="Profile"
|
|
86
|
+
selected={selectedItem === 'profile'}
|
|
87
|
+
onPress={() => setSelectedItem('profile')}
|
|
88
|
+
/>
|
|
89
|
+
</List>
|
|
90
|
+
<Text size="sm" color="secondary">
|
|
91
|
+
Selected: {selectedItem}
|
|
92
|
+
</Text>
|
|
93
|
+
</View>
|
|
94
|
+
|
|
95
|
+
<View spacing="md">
|
|
96
|
+
<Text size="lg" weight="semibold">With Leading Elements</Text>
|
|
97
|
+
<List type="divided">
|
|
98
|
+
<ListItem
|
|
99
|
+
label="Dashboard"
|
|
100
|
+
leading="home"
|
|
101
|
+
onPress={() => console.log('Dashboard')}
|
|
102
|
+
/>
|
|
103
|
+
<ListItem
|
|
104
|
+
label="Settings"
|
|
105
|
+
leading="cog"
|
|
106
|
+
onPress={() => console.log('Settings')}
|
|
107
|
+
/>
|
|
108
|
+
<ListItem
|
|
109
|
+
label="Profile"
|
|
110
|
+
leading="account"
|
|
111
|
+
onPress={() => console.log('Profile')}
|
|
112
|
+
/>
|
|
113
|
+
</List>
|
|
114
|
+
</View>
|
|
115
|
+
|
|
116
|
+
<View spacing="md">
|
|
117
|
+
<Text size="lg" weight="semibold">With Trailing Elements</Text>
|
|
118
|
+
<List type="bordered">
|
|
119
|
+
<ListItem
|
|
120
|
+
label="Notifications"
|
|
121
|
+
leading="bell"
|
|
122
|
+
trailing={<Badge type="filled" color="red">3</Badge>}
|
|
123
|
+
/>
|
|
124
|
+
<ListItem
|
|
125
|
+
label="Messages"
|
|
126
|
+
leading="email"
|
|
127
|
+
trailing={<Badge type="filled" color="blue">12</Badge>}
|
|
128
|
+
/>
|
|
129
|
+
<ListItem
|
|
130
|
+
label="Updates"
|
|
131
|
+
leading="refresh"
|
|
132
|
+
trailing={<Text size="sm" color="secondary">New</Text>}
|
|
133
|
+
/>
|
|
134
|
+
</List>
|
|
135
|
+
</View>
|
|
136
|
+
|
|
137
|
+
<View spacing="md">
|
|
138
|
+
<Text size="lg" weight="semibold">Navigation Sidebar</Text>
|
|
139
|
+
<List type="bordered">
|
|
140
|
+
<ListItem
|
|
141
|
+
label="Dashboard"
|
|
142
|
+
leading="view-dashboard"
|
|
143
|
+
selected={selectedNav === 'dashboard'}
|
|
144
|
+
onPress={() => setSelectedNav('dashboard')}
|
|
145
|
+
/>
|
|
146
|
+
<ListItem
|
|
147
|
+
label="Analytics"
|
|
148
|
+
leading="chart-line"
|
|
149
|
+
selected={selectedNav === 'analytics'}
|
|
150
|
+
onPress={() => setSelectedNav('analytics')}
|
|
151
|
+
/>
|
|
152
|
+
<ListItem
|
|
153
|
+
label="Reports"
|
|
154
|
+
leading="file-document"
|
|
155
|
+
selected={selectedNav === 'reports'}
|
|
156
|
+
onPress={() => setSelectedNav('reports')}
|
|
157
|
+
/>
|
|
158
|
+
<ListItem
|
|
159
|
+
label="Settings"
|
|
160
|
+
leading="cog"
|
|
161
|
+
selected={selectedNav === 'settings'}
|
|
162
|
+
onPress={() => setSelectedNav('settings')}
|
|
163
|
+
/>
|
|
164
|
+
</List>
|
|
165
|
+
</View>
|
|
166
|
+
|
|
167
|
+
<View spacing="md">
|
|
168
|
+
<Text size="lg" weight="semibold">With Sections</Text>
|
|
169
|
+
<List type="divided">
|
|
170
|
+
<ListSection title="Main">
|
|
171
|
+
<ListItem
|
|
172
|
+
label="Dashboard"
|
|
173
|
+
leading="home"
|
|
174
|
+
/>
|
|
175
|
+
<ListItem
|
|
176
|
+
label="Analytics"
|
|
177
|
+
leading="chart-line"
|
|
178
|
+
/>
|
|
179
|
+
</ListSection>
|
|
180
|
+
|
|
181
|
+
<ListSection title="Settings">
|
|
182
|
+
<ListItem
|
|
183
|
+
label="Profile"
|
|
184
|
+
leading="account"
|
|
185
|
+
/>
|
|
186
|
+
<ListItem
|
|
187
|
+
label="Preferences"
|
|
188
|
+
leading="cog"
|
|
189
|
+
/>
|
|
190
|
+
<ListItem
|
|
191
|
+
label="Security"
|
|
192
|
+
leading="lock"
|
|
193
|
+
/>
|
|
194
|
+
</ListSection>
|
|
195
|
+
|
|
196
|
+
<ListSection title="Other">
|
|
197
|
+
<ListItem
|
|
198
|
+
label="Help"
|
|
199
|
+
leading="help-circle"
|
|
200
|
+
/>
|
|
201
|
+
<ListItem
|
|
202
|
+
label="Logout"
|
|
203
|
+
leading="logout"
|
|
204
|
+
/>
|
|
205
|
+
</ListSection>
|
|
206
|
+
</List>
|
|
207
|
+
</View>
|
|
208
|
+
|
|
209
|
+
<View spacing="md">
|
|
210
|
+
<Text size="lg" weight="semibold">Indented Items</Text>
|
|
211
|
+
<List type="bordered">
|
|
212
|
+
<ListItem label="Parent Item 1" />
|
|
213
|
+
<ListItem label="Child Item 1.1" indent={1} />
|
|
214
|
+
<ListItem label="Child Item 1.2" indent={1} />
|
|
215
|
+
<ListItem label="Grandchild Item 1.2.1" indent={2} />
|
|
216
|
+
<ListItem label="Parent Item 2" />
|
|
217
|
+
<ListItem label="Child Item 2.1" indent={1} />
|
|
218
|
+
</List>
|
|
219
|
+
</View>
|
|
220
|
+
|
|
221
|
+
<View spacing="md">
|
|
222
|
+
<Text size="lg" weight="semibold">Disabled Items</Text>
|
|
223
|
+
<List type="bordered">
|
|
224
|
+
<ListItem
|
|
225
|
+
label="Enabled Item"
|
|
226
|
+
onPress={() => console.log('Clicked')}
|
|
227
|
+
/>
|
|
228
|
+
<ListItem
|
|
229
|
+
label="Disabled Item"
|
|
230
|
+
disabled
|
|
231
|
+
onPress={() => console.log('This should not trigger')}
|
|
232
|
+
/>
|
|
233
|
+
<ListItem
|
|
234
|
+
label="Another Enabled Item"
|
|
235
|
+
onPress={() => console.log('Clicked')}
|
|
236
|
+
/>
|
|
237
|
+
</List>
|
|
238
|
+
</View>
|
|
239
|
+
|
|
240
|
+
<View spacing="md">
|
|
241
|
+
<Text size="lg" weight="semibold">Rich Content</Text>
|
|
242
|
+
<List type="bordered">
|
|
243
|
+
<ListItem
|
|
244
|
+
leading="account-circle"
|
|
245
|
+
trailing={<Text size="sm" color="secondary">Admin</Text>}
|
|
246
|
+
>
|
|
247
|
+
<View>
|
|
248
|
+
<Text weight="semibold">John Doe</Text>
|
|
249
|
+
<Text size="sm" color="secondary">john.doe@example.com</Text>
|
|
250
|
+
</View>
|
|
251
|
+
</ListItem>
|
|
252
|
+
<ListItem
|
|
253
|
+
leading="account-circle"
|
|
254
|
+
trailing={<Text size="sm" color="secondary">User</Text>}
|
|
255
|
+
>
|
|
256
|
+
<View>
|
|
257
|
+
<Text weight="semibold">Jane Smith</Text>
|
|
258
|
+
<Text size="sm" color="secondary">jane.smith@example.com</Text>
|
|
259
|
+
</View>
|
|
260
|
+
</ListItem>
|
|
261
|
+
</List>
|
|
262
|
+
</View>
|
|
263
|
+
|
|
264
|
+
<View spacing="md">
|
|
265
|
+
<Text size="lg" weight="semibold">Active States</Text>
|
|
266
|
+
<List type="bordered">
|
|
267
|
+
<ListItem
|
|
268
|
+
label="Normal Item"
|
|
269
|
+
onPress={() => console.log('Normal')}
|
|
270
|
+
/>
|
|
271
|
+
<ListItem
|
|
272
|
+
label="Active Item"
|
|
273
|
+
active
|
|
274
|
+
onPress={() => console.log('Active')}
|
|
275
|
+
/>
|
|
276
|
+
<ListItem
|
|
277
|
+
label="Selected Item"
|
|
278
|
+
selected
|
|
279
|
+
onPress={() => console.log('Selected')}
|
|
280
|
+
/>
|
|
281
|
+
</List>
|
|
282
|
+
</View>
|
|
283
|
+
</View>
|
|
284
|
+
</Screen>
|
|
285
|
+
);
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
export default ListExamples;
|