@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,423 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Screen, View, Text, Select, Card, Button, Icon, Divider } from '../index';
|
|
3
|
+
|
|
4
|
+
// Mock data for examples
|
|
5
|
+
const fruitOptions = [
|
|
6
|
+
{ value: 'apple', label: 'Apple' },
|
|
7
|
+
{ value: 'banana', label: 'Banana' },
|
|
8
|
+
{ value: 'orange', label: 'Orange' },
|
|
9
|
+
{ value: 'grape', label: 'Grape' },
|
|
10
|
+
{ value: 'strawberry', label: 'Strawberry' },
|
|
11
|
+
{ value: 'pineapple', label: 'Pineapple' },
|
|
12
|
+
{ value: 'mango', label: 'Mango' },
|
|
13
|
+
{ value: 'kiwi', label: 'Kiwi' },
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
const countryOptions = [
|
|
17
|
+
{ value: 'us', label: 'United States', icon: <Text>🇺🇸</Text> },
|
|
18
|
+
{ value: 'ca', label: 'Canada', icon: <Text>🇨🇦</Text> },
|
|
19
|
+
{ value: 'uk', label: 'United Kingdom', icon: <Text>🇬🇧</Text> },
|
|
20
|
+
{ value: 'de', label: 'Germany', icon: <Text>🇩🇪</Text> },
|
|
21
|
+
{ value: 'fr', label: 'France', icon: <Text>🇫🇷</Text> },
|
|
22
|
+
{ value: 'jp', label: 'Japan', icon: <Text>🇯🇵</Text> },
|
|
23
|
+
{ value: 'au', label: 'Australia', icon: <Text>🇦🇺</Text> },
|
|
24
|
+
{ value: 'in', label: 'India', icon: <Text>🇮🇳</Text> },
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const priorityOptions = [
|
|
28
|
+
{
|
|
29
|
+
value: 'low',
|
|
30
|
+
label: 'Low Priority',
|
|
31
|
+
icon: <Text style={{ color: '#22c55e' }}>●</Text>
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
value: 'medium',
|
|
35
|
+
label: 'Medium Priority',
|
|
36
|
+
icon: <Text style={{ color: '#f59e0b' }}>●</Text>
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
value: 'high',
|
|
40
|
+
label: 'High Priority',
|
|
41
|
+
icon: <Text style={{ color: '#ef4444' }}>●</Text>
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
value: 'urgent',
|
|
45
|
+
label: 'Urgent',
|
|
46
|
+
icon: <Text style={{ color: '#dc2626' }}>🔥</Text>
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
const statusOptions = [
|
|
51
|
+
{ value: 'draft', label: 'Draft', disabled: false },
|
|
52
|
+
{ value: 'pending', label: 'Pending Review' },
|
|
53
|
+
{ value: 'approved', label: 'Approved' },
|
|
54
|
+
{ value: 'archived', label: 'Archived (Disabled)', disabled: true },
|
|
55
|
+
{ value: 'deleted', label: 'Deleted (Disabled)', disabled: true },
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
export const SelectExamples = () => {
|
|
59
|
+
// State for all select examples
|
|
60
|
+
const [basicSelect, setBasicSelect] = useState('');
|
|
61
|
+
const [fruitSelect, setFruitSelect] = useState('apple');
|
|
62
|
+
const [countrySelect, setCountrySelect] = useState('');
|
|
63
|
+
const [prioritySelect, setPrioritySelect] = useState('medium');
|
|
64
|
+
const [statusSelect, setStatusSelect] = useState('draft');
|
|
65
|
+
const [searchableSelect, setSearchableSelect] = useState('');
|
|
66
|
+
const [formSelect, setFormSelect] = useState('');
|
|
67
|
+
const [sizeSmall, setSizeSmall] = useState('');
|
|
68
|
+
const [sizeMedium, setSizeMedium] = useState('');
|
|
69
|
+
const [sizeLarge, setSizeLarge] = useState('');
|
|
70
|
+
const [outlinedSelect, setOutlinedSelect] = useState('');
|
|
71
|
+
const [filledSelect, setFilledSelect] = useState('');
|
|
72
|
+
const [primarySelect, setPrimarySelect] = useState('');
|
|
73
|
+
const [successSelect, setSuccessSelect] = useState('');
|
|
74
|
+
const [errorSelect, setErrorSelect] = useState('');
|
|
75
|
+
const [warningSelect, setWarningSelect] = useState('');
|
|
76
|
+
|
|
77
|
+
const [formErrors, setFormErrors] = useState<Record<string, string>>({});
|
|
78
|
+
|
|
79
|
+
const validateForm = () => {
|
|
80
|
+
const errors: Record<string, string> = {};
|
|
81
|
+
if (!formSelect) {
|
|
82
|
+
errors.formSelect = 'Please select a country';
|
|
83
|
+
}
|
|
84
|
+
setFormErrors(errors);
|
|
85
|
+
return Object.keys(errors).length === 0;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const handleFormSubmit = () => {
|
|
89
|
+
if (validateForm()) {
|
|
90
|
+
console.log('Form submitted successfully!', { country: formSelect });
|
|
91
|
+
} else {
|
|
92
|
+
console.log('Form has validation errors');
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const resetAllSelections = () => {
|
|
97
|
+
setBasicSelect('');
|
|
98
|
+
setFruitSelect('');
|
|
99
|
+
setCountrySelect('');
|
|
100
|
+
setPrioritySelect('');
|
|
101
|
+
setStatusSelect('');
|
|
102
|
+
setSearchableSelect('');
|
|
103
|
+
setFormSelect('');
|
|
104
|
+
setSizeSmall('');
|
|
105
|
+
setSizeMedium('');
|
|
106
|
+
setSizeLarge('');
|
|
107
|
+
setOutlinedSelect('');
|
|
108
|
+
setFilledSelect('');
|
|
109
|
+
setPrimarySelect('');
|
|
110
|
+
setSuccessSelect('');
|
|
111
|
+
setErrorSelect('');
|
|
112
|
+
setWarningSelect('');
|
|
113
|
+
setFormErrors({});
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
return (
|
|
117
|
+
<Screen background="primary" padding="lg">
|
|
118
|
+
<View spacing="lg">
|
|
119
|
+
<View style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>
|
|
120
|
+
<Text size="lg" weight="bold">
|
|
121
|
+
Select Component Examples
|
|
122
|
+
</Text>
|
|
123
|
+
<Button
|
|
124
|
+
type="outlined"
|
|
125
|
+
intent="neutral"
|
|
126
|
+
size="sm"
|
|
127
|
+
onPress={resetAllSelections}
|
|
128
|
+
>
|
|
129
|
+
Reset All
|
|
130
|
+
</Button>
|
|
131
|
+
</View>
|
|
132
|
+
|
|
133
|
+
{/* Basic Usage */}
|
|
134
|
+
<Card type="outlined" padding="md">
|
|
135
|
+
<View spacing="md">
|
|
136
|
+
<Text size="md" weight="semibold">Basic Usage</Text>
|
|
137
|
+
<Select
|
|
138
|
+
options={fruitOptions}
|
|
139
|
+
value={basicSelect}
|
|
140
|
+
onValueChange={setBasicSelect}
|
|
141
|
+
placeholder="Choose a fruit"
|
|
142
|
+
/>
|
|
143
|
+
<Text size="sm" color="secondary">
|
|
144
|
+
Selected: {basicSelect || 'None'}
|
|
145
|
+
</Text>
|
|
146
|
+
</View>
|
|
147
|
+
</Card>
|
|
148
|
+
|
|
149
|
+
{/* With Icons */}
|
|
150
|
+
<Card type="outlined" padding="md">
|
|
151
|
+
<View spacing="md">
|
|
152
|
+
<Text size="md" weight="semibold">With Icons</Text>
|
|
153
|
+
<Select
|
|
154
|
+
options={countryOptions}
|
|
155
|
+
value={countrySelect}
|
|
156
|
+
onValueChange={setCountrySelect}
|
|
157
|
+
placeholder="Select a country"
|
|
158
|
+
label="Country"
|
|
159
|
+
/>
|
|
160
|
+
<Text size="sm" color="secondary">
|
|
161
|
+
Selected: {countrySelect || 'None'}
|
|
162
|
+
</Text>
|
|
163
|
+
</View>
|
|
164
|
+
</Card>
|
|
165
|
+
|
|
166
|
+
{/* Custom Icons */}
|
|
167
|
+
<Card type="outlined" padding="md">
|
|
168
|
+
<View spacing="md">
|
|
169
|
+
<Text size="md" weight="semibold">Custom Icon Components</Text>
|
|
170
|
+
<Select
|
|
171
|
+
options={priorityOptions}
|
|
172
|
+
value={prioritySelect}
|
|
173
|
+
onValueChange={setPrioritySelect}
|
|
174
|
+
placeholder="Select priority"
|
|
175
|
+
label="Task Priority"
|
|
176
|
+
/>
|
|
177
|
+
<Text size="sm" color="secondary">
|
|
178
|
+
Selected: {prioritySelect || 'None'}
|
|
179
|
+
</Text>
|
|
180
|
+
</View>
|
|
181
|
+
</Card>
|
|
182
|
+
|
|
183
|
+
{/* Disabled Options */}
|
|
184
|
+
<Card type="outlined" padding="md">
|
|
185
|
+
<View spacing="md">
|
|
186
|
+
<Text size="md" weight="semibold">Disabled Options</Text>
|
|
187
|
+
<Select
|
|
188
|
+
options={statusOptions}
|
|
189
|
+
value={statusSelect}
|
|
190
|
+
onValueChange={setStatusSelect}
|
|
191
|
+
placeholder="Select status"
|
|
192
|
+
label="Document Status"
|
|
193
|
+
helperText="Some options are disabled"
|
|
194
|
+
/>
|
|
195
|
+
<Text size="sm" color="secondary">
|
|
196
|
+
Selected: {statusSelect || 'None'}
|
|
197
|
+
</Text>
|
|
198
|
+
</View>
|
|
199
|
+
</Card>
|
|
200
|
+
|
|
201
|
+
{/* Searchable */}
|
|
202
|
+
<Card type="outlined" padding="md">
|
|
203
|
+
<View spacing="md">
|
|
204
|
+
<Text size="md" weight="semibold">Searchable Select</Text>
|
|
205
|
+
<Select
|
|
206
|
+
options={fruitOptions}
|
|
207
|
+
value={searchableSelect}
|
|
208
|
+
onValueChange={setSearchableSelect}
|
|
209
|
+
placeholder="Search for fruits..."
|
|
210
|
+
label="Fruit Search"
|
|
211
|
+
searchable
|
|
212
|
+
helperText="Type to filter options"
|
|
213
|
+
/>
|
|
214
|
+
<Text size="sm" color="secondary">
|
|
215
|
+
Selected: {searchableSelect || 'None'}
|
|
216
|
+
</Text>
|
|
217
|
+
</View>
|
|
218
|
+
</Card>
|
|
219
|
+
|
|
220
|
+
{/* Sizes */}
|
|
221
|
+
<Card type="outlined" padding="md">
|
|
222
|
+
<View spacing="md">
|
|
223
|
+
<Text size="md" weight="semibold">Sizes</Text>
|
|
224
|
+
<View spacing="sm">
|
|
225
|
+
<View>
|
|
226
|
+
<Text size="sm" weight="medium">Small</Text>
|
|
227
|
+
<Select
|
|
228
|
+
options={fruitOptions.slice(0, 3)}
|
|
229
|
+
value={sizeSmall}
|
|
230
|
+
onValueChange={setSizeSmall}
|
|
231
|
+
placeholder="Small select"
|
|
232
|
+
size="sm"
|
|
233
|
+
/>
|
|
234
|
+
</View>
|
|
235
|
+
<View>
|
|
236
|
+
<Text size="sm" weight="medium">Medium (Default)</Text>
|
|
237
|
+
<Select
|
|
238
|
+
options={fruitOptions.slice(0, 3)}
|
|
239
|
+
value={sizeMedium}
|
|
240
|
+
onValueChange={setSizeMedium}
|
|
241
|
+
placeholder="Medium select"
|
|
242
|
+
size="md"
|
|
243
|
+
/>
|
|
244
|
+
</View>
|
|
245
|
+
<View>
|
|
246
|
+
<Text size="sm" weight="medium">Large</Text>
|
|
247
|
+
<Select
|
|
248
|
+
options={fruitOptions.slice(0, 3)}
|
|
249
|
+
value={sizeLarge}
|
|
250
|
+
onValueChange={setSizeLarge}
|
|
251
|
+
placeholder="Large select"
|
|
252
|
+
size="lg"
|
|
253
|
+
/>
|
|
254
|
+
</View>
|
|
255
|
+
</View>
|
|
256
|
+
</View>
|
|
257
|
+
</Card>
|
|
258
|
+
|
|
259
|
+
{/* Variants */}
|
|
260
|
+
<Card type="outlined" padding="md">
|
|
261
|
+
<View spacing="md">
|
|
262
|
+
<Text size="md" weight="semibold">Variants</Text>
|
|
263
|
+
<View spacing="sm">
|
|
264
|
+
<View>
|
|
265
|
+
<Text size="sm" weight="medium">Outlined (Default)</Text>
|
|
266
|
+
<Select
|
|
267
|
+
options={fruitOptions.slice(0, 4)}
|
|
268
|
+
value={outlinedSelect}
|
|
269
|
+
onValueChange={setOutlinedSelect}
|
|
270
|
+
placeholder="Outlined variant"
|
|
271
|
+
type="outlined"
|
|
272
|
+
/>
|
|
273
|
+
</View>
|
|
274
|
+
<View>
|
|
275
|
+
<Text size="sm" weight="medium">Filled</Text>
|
|
276
|
+
<Select
|
|
277
|
+
options={fruitOptions.slice(0, 4)}
|
|
278
|
+
value={filledSelect}
|
|
279
|
+
onValueChange={setFilledSelect}
|
|
280
|
+
placeholder="Filled variant"
|
|
281
|
+
type="filled"
|
|
282
|
+
/>
|
|
283
|
+
</View>
|
|
284
|
+
</View>
|
|
285
|
+
</View>
|
|
286
|
+
</Card>
|
|
287
|
+
|
|
288
|
+
{/* Intents */}
|
|
289
|
+
<Card type="outlined" padding="md">
|
|
290
|
+
<View spacing="md">
|
|
291
|
+
<Text size="md" weight="semibold">Intent Colors</Text>
|
|
292
|
+
<View spacing="sm">
|
|
293
|
+
<View>
|
|
294
|
+
<Text size="sm" weight="medium">Primary</Text>
|
|
295
|
+
<Select
|
|
296
|
+
options={fruitOptions.slice(0, 3)}
|
|
297
|
+
value={primarySelect}
|
|
298
|
+
onValueChange={setPrimarySelect}
|
|
299
|
+
placeholder="Primary intent"
|
|
300
|
+
intent="primary"
|
|
301
|
+
type="outlined"
|
|
302
|
+
/>
|
|
303
|
+
</View>
|
|
304
|
+
<View>
|
|
305
|
+
<Text size="sm" weight="medium">Success</Text>
|
|
306
|
+
<Select
|
|
307
|
+
options={fruitOptions.slice(0, 3)}
|
|
308
|
+
value={successSelect}
|
|
309
|
+
onValueChange={setSuccessSelect}
|
|
310
|
+
placeholder="Success intent"
|
|
311
|
+
intent="success"
|
|
312
|
+
type="outlined"
|
|
313
|
+
/>
|
|
314
|
+
</View>
|
|
315
|
+
<View>
|
|
316
|
+
<Text size="sm" weight="medium">Warning</Text>
|
|
317
|
+
<Select
|
|
318
|
+
options={fruitOptions.slice(0, 3)}
|
|
319
|
+
value={warningSelect}
|
|
320
|
+
onValueChange={setWarningSelect}
|
|
321
|
+
placeholder="Warning intent"
|
|
322
|
+
intent="warning"
|
|
323
|
+
type="outlined"
|
|
324
|
+
/>
|
|
325
|
+
</View>
|
|
326
|
+
<View>
|
|
327
|
+
<Text size="sm" weight="medium">Error</Text>
|
|
328
|
+
<Select
|
|
329
|
+
options={fruitOptions.slice(0, 3)}
|
|
330
|
+
value={errorSelect}
|
|
331
|
+
onValueChange={setErrorSelect}
|
|
332
|
+
placeholder="Error intent"
|
|
333
|
+
intent="error"
|
|
334
|
+
type="outlined"
|
|
335
|
+
/>
|
|
336
|
+
</View>
|
|
337
|
+
</View>
|
|
338
|
+
</View>
|
|
339
|
+
</Card>
|
|
340
|
+
|
|
341
|
+
{/* Form Example */}
|
|
342
|
+
<Card type="outlined" padding="md">
|
|
343
|
+
<View spacing="md">
|
|
344
|
+
<Text size="md" weight="semibold">Form Integration</Text>
|
|
345
|
+
<Select
|
|
346
|
+
options={countryOptions}
|
|
347
|
+
value={formSelect}
|
|
348
|
+
onValueChange={(value) => {
|
|
349
|
+
setFormSelect(value);
|
|
350
|
+
if (formErrors.formSelect) {
|
|
351
|
+
setFormErrors(prev => ({ ...prev, formSelect: '' }));
|
|
352
|
+
}
|
|
353
|
+
}}
|
|
354
|
+
placeholder="Select your country"
|
|
355
|
+
label="Country *"
|
|
356
|
+
error={!!formErrors.formSelect}
|
|
357
|
+
helperText={formErrors.formSelect || "Required field"}
|
|
358
|
+
type="outlined"
|
|
359
|
+
intent="primary"
|
|
360
|
+
/>
|
|
361
|
+
<Button
|
|
362
|
+
type="contained"
|
|
363
|
+
intent="primary"
|
|
364
|
+
onPress={handleFormSubmit}
|
|
365
|
+
>
|
|
366
|
+
Submit Form
|
|
367
|
+
</Button>
|
|
368
|
+
</View>
|
|
369
|
+
</Card>
|
|
370
|
+
|
|
371
|
+
{/* Disabled State */}
|
|
372
|
+
<Card type="outlined" padding="md">
|
|
373
|
+
<View spacing="md">
|
|
374
|
+
<Text size="md" weight="semibold">Disabled State</Text>
|
|
375
|
+
<Select
|
|
376
|
+
options={fruitOptions}
|
|
377
|
+
value="apple"
|
|
378
|
+
onValueChange={() => {}}
|
|
379
|
+
placeholder="This select is disabled"
|
|
380
|
+
label="Disabled Select"
|
|
381
|
+
disabled
|
|
382
|
+
helperText="This select cannot be interacted with"
|
|
383
|
+
/>
|
|
384
|
+
</View>
|
|
385
|
+
</Card>
|
|
386
|
+
|
|
387
|
+
{/* Platform-specific Features */}
|
|
388
|
+
<Card type="outlined" padding="md">
|
|
389
|
+
<View spacing="md">
|
|
390
|
+
<Text size="md" weight="semibold">Platform Features</Text>
|
|
391
|
+
<Text size="sm" color="secondary">
|
|
392
|
+
On iOS: Try the ActionSheet presentation mode for native feel
|
|
393
|
+
</Text>
|
|
394
|
+
<Select
|
|
395
|
+
options={priorityOptions}
|
|
396
|
+
value={prioritySelect}
|
|
397
|
+
onValueChange={setPrioritySelect}
|
|
398
|
+
placeholder="Select priority"
|
|
399
|
+
label="iOS ActionSheet Mode"
|
|
400
|
+
presentationMode="actionSheet" // iOS only
|
|
401
|
+
helperText="Uses native ActionSheet on iOS"
|
|
402
|
+
/>
|
|
403
|
+
</View>
|
|
404
|
+
</Card>
|
|
405
|
+
|
|
406
|
+
<Divider spacing="lg" />
|
|
407
|
+
|
|
408
|
+
{/* Summary */}
|
|
409
|
+
<Card type="filled" padding="md">
|
|
410
|
+
<View spacing="sm">
|
|
411
|
+
<Text size="md" weight="semibold">Current Selections Summary</Text>
|
|
412
|
+
<Text size="sm">Basic: {basicSelect || 'None'}</Text>
|
|
413
|
+
<Text size="sm">Country: {countrySelect || 'None'}</Text>
|
|
414
|
+
<Text size="sm">Priority: {prioritySelect || 'None'}</Text>
|
|
415
|
+
<Text size="sm">Status: {statusSelect || 'None'}</Text>
|
|
416
|
+
<Text size="sm">Searchable: {searchableSelect || 'None'}</Text>
|
|
417
|
+
<Text size="sm">Form: {formSelect || 'None'}</Text>
|
|
418
|
+
</View>
|
|
419
|
+
</Card>
|
|
420
|
+
</View>
|
|
421
|
+
</Screen>
|
|
422
|
+
);
|
|
423
|
+
};
|
|
@@ -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
|
+
};
|