@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.
- package/CLAUDE.md +199 -232
- package/README.md +5 -5
- package/package.json +20 -2
- 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 +140 -63
- package/src/Select/Select.styles.tsx +312 -302
- package/src/Select/Select.web.tsx +156 -316
- package/src/Select/index.ts +5 -2
- package/src/Select/index.web.ts +5 -2
- package/src/Select/types.ts +13 -7
- 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 +67 -67
- 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 +17 -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 +71 -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/Select/README.md +0 -166
- package/src/Text/README.md +0 -94
- package/src/View/README.md +0 -107
- package/src/examples/AllExamples.tsx +0 -88
- 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
|
@@ -1,88 +1,161 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
2
|
import { Screen, View, Icon, Text, Button } from '../index';
|
|
3
3
|
import type { IconName } from '../Icon/icon-types';
|
|
4
4
|
|
|
5
|
+
// Test Components for Plugin
|
|
6
|
+
const SimpleVariableTest = () => {
|
|
7
|
+
const homeIcon = "home";
|
|
8
|
+
const accountIcon = "account";
|
|
9
|
+
const cogIcon = "cog";
|
|
10
|
+
return (
|
|
11
|
+
<>
|
|
12
|
+
<Icon name={homeIcon} size="md" />
|
|
13
|
+
<Icon name={accountIcon} size="md" />
|
|
14
|
+
<Icon name={cogIcon} size="md" />
|
|
15
|
+
</>
|
|
16
|
+
);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const NamespaceTest = () => {
|
|
20
|
+
const starIcon = "mdi:star";
|
|
21
|
+
const heartIcon = "mdi:heart";
|
|
22
|
+
const rocketIcon = "mdi:rocket";
|
|
23
|
+
return (
|
|
24
|
+
<>
|
|
25
|
+
<Icon name={starIcon} size="md" />
|
|
26
|
+
<Icon name={heartIcon} size="md" />
|
|
27
|
+
<Icon name={rocketIcon} size="md" />
|
|
28
|
+
</>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const TemplateLiteralTest = () => {
|
|
33
|
+
const bellIcon = `bell`;
|
|
34
|
+
const mailIcon = `mail`;
|
|
35
|
+
return (
|
|
36
|
+
<>
|
|
37
|
+
<Icon name={bellIcon} size="md" />
|
|
38
|
+
<Icon name={mailIcon} size="md" />
|
|
39
|
+
</>
|
|
40
|
+
);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const MultipleVariablesTest = () => {
|
|
44
|
+
const deleteIcon = "delete";
|
|
45
|
+
const editIcon = "pencil";
|
|
46
|
+
const saveIcon = "content-save";
|
|
47
|
+
const copyIcon = "content-copy";
|
|
48
|
+
return (
|
|
49
|
+
<>
|
|
50
|
+
<Icon name={deleteIcon} size="md" color="red" />
|
|
51
|
+
<Icon name={editIcon} size="md" color="blue" />
|
|
52
|
+
<Icon name={saveIcon} size="md" color="green" />
|
|
53
|
+
<Icon name={copyIcon} size="md" color="orange" />
|
|
54
|
+
</>
|
|
55
|
+
);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const FalsePositiveTest = () => {
|
|
59
|
+
const pageName = "home"; // Not used with Icon
|
|
60
|
+
const title = "account"; // Not used with Icon
|
|
61
|
+
return (
|
|
62
|
+
<>
|
|
63
|
+
<Text size="sm">Page: {pageName}</Text>
|
|
64
|
+
<Text size="sm">Title: {title}</Text>
|
|
65
|
+
<Text size="sm" style={{ fontFamily: 'monospace', color: '#666' }}>
|
|
66
|
+
These strings are NOT transformed (not used with Icon)
|
|
67
|
+
</Text>
|
|
68
|
+
</>
|
|
69
|
+
);
|
|
70
|
+
};
|
|
71
|
+
|
|
5
72
|
export const IconExamples = () => {
|
|
73
|
+
// Test state for dynamic icon switching
|
|
74
|
+
const [isPlaying, setIsPlaying] = useState(false);
|
|
75
|
+
const [userStatus, setUserStatus] = useState<'online' | 'offline' | 'away'>('online');
|
|
76
|
+
|
|
77
|
+
// Test function that returns an icon name
|
|
78
|
+
const getStatusIcon = (status: string): IconName => {
|
|
79
|
+
switch (status) {
|
|
80
|
+
case 'online': return 'check-circle';
|
|
81
|
+
case 'offline': return 'close-circle';
|
|
82
|
+
case 'away': return 'clock';
|
|
83
|
+
default: return 'help-circle';
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
6
87
|
return (
|
|
7
88
|
<Screen background="primary" padding="lg">
|
|
8
89
|
<View spacing="none">
|
|
9
|
-
<Text size="
|
|
90
|
+
<Text size="lg" weight="bold" align="center">
|
|
10
91
|
Icon Examples
|
|
11
92
|
</Text>
|
|
12
93
|
|
|
13
94
|
{/* Color Variants */}
|
|
14
95
|
<View spacing="md">
|
|
15
|
-
<Text size="
|
|
96
|
+
<Text size="md" weight="semibold">Color Variants</Text>
|
|
16
97
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
17
98
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
18
|
-
<Icon name="home-account" size="md"
|
|
19
|
-
<Text size="
|
|
99
|
+
<Icon name="home-account" size="md" intent="primary" />
|
|
100
|
+
<Text size="sm">Intent Primary</Text>
|
|
20
101
|
</View>
|
|
21
102
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
22
|
-
<Icon name="check" size="md"
|
|
23
|
-
<Text size="
|
|
103
|
+
<Icon name="check" size="md" intent="success" />
|
|
104
|
+
<Text size="sm">Intent Success</Text>
|
|
24
105
|
</View>
|
|
25
106
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
26
107
|
<Icon name="alert-circle" size="md" color="blue" />
|
|
27
|
-
<Text size="
|
|
108
|
+
<Text size="sm">Blue</Text>
|
|
28
109
|
</View>
|
|
29
110
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
30
111
|
<Icon name="alert" size="md" color="green" />
|
|
31
|
-
<Text size="
|
|
112
|
+
<Text size="sm">Green</Text>
|
|
32
113
|
</View>
|
|
33
114
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
34
115
|
<Icon name="cog" size="md" color="red" />
|
|
35
|
-
<Text size="
|
|
116
|
+
<Text size="sm">Red</Text>
|
|
36
117
|
</View>
|
|
37
118
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
38
119
|
<Icon name="text" size="md" color="orange" />
|
|
39
|
-
<Text size="
|
|
40
|
-
</View>
|
|
41
|
-
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
42
|
-
<Icon name="text" size="md" color="disabled" />
|
|
43
|
-
<Text size="small">Disabled</Text>
|
|
44
|
-
</View>
|
|
45
|
-
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
46
|
-
<Icon name="text" size="md" color="muted" />
|
|
47
|
-
<Text size="small">Muted</Text>
|
|
120
|
+
<Text size="sm">Orange</Text>
|
|
48
121
|
</View>
|
|
49
122
|
</View>
|
|
50
123
|
</View>
|
|
51
124
|
|
|
52
125
|
{/* Color Shades */}
|
|
53
126
|
<View spacing="md">
|
|
54
|
-
<Text size="
|
|
127
|
+
<Text size="md" weight="semibold">Color Shades</Text>
|
|
55
128
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
56
129
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
57
130
|
<Icon name="star" size="md" color="blue.200" />
|
|
58
|
-
<Text size="
|
|
131
|
+
<Text size="sm">Blue 200</Text>
|
|
59
132
|
</View>
|
|
60
133
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
61
134
|
<Icon name="star" size="md" color="blue.500" />
|
|
62
|
-
<Text size="
|
|
135
|
+
<Text size="sm">Blue 500</Text>
|
|
63
136
|
</View>
|
|
64
137
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
65
138
|
<Icon name="star" size="md" color="blue.800" />
|
|
66
|
-
<Text size="
|
|
139
|
+
<Text size="sm">Blue 800</Text>
|
|
67
140
|
</View>
|
|
68
141
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
69
142
|
<Icon name="heart" size="md" color="red.300" />
|
|
70
|
-
<Text size="
|
|
143
|
+
<Text size="sm">Red 300</Text>
|
|
71
144
|
</View>
|
|
72
145
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
73
146
|
<Icon name="heart" size="md" color="red.600" />
|
|
74
|
-
<Text size="
|
|
147
|
+
<Text size="sm">Red 600</Text>
|
|
75
148
|
</View>
|
|
76
149
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
77
150
|
<Icon name="heart" size="md" color="red.900" />
|
|
78
|
-
<Text size="
|
|
151
|
+
<Text size="sm">Red 900</Text>
|
|
79
152
|
</View>
|
|
80
153
|
</View>
|
|
81
154
|
</View>
|
|
82
155
|
|
|
83
156
|
{/* Basic Icons */}
|
|
84
157
|
<View spacing="md">
|
|
85
|
-
<Text size="
|
|
158
|
+
<Text size="md" weight="semibold">Basic Icons</Text>
|
|
86
159
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
87
160
|
<Icon name="home" />
|
|
88
161
|
<Icon name="cog" />
|
|
@@ -97,57 +170,57 @@ export const IconExamples = () => {
|
|
|
97
170
|
|
|
98
171
|
{/* Icon Sizes */}
|
|
99
172
|
<View spacing="md">
|
|
100
|
-
<Text size="
|
|
173
|
+
<Text size="md" weight="semibold">Sizes</Text>
|
|
101
174
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
102
175
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
103
176
|
<Icon name="home" size="xs" />
|
|
104
|
-
<Text size="
|
|
177
|
+
<Text size="sm">XS (12px)</Text>
|
|
105
178
|
</View>
|
|
106
179
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
107
180
|
<Icon name="home" size="sm" />
|
|
108
|
-
<Text size="
|
|
181
|
+
<Text size="sm">SM (16px)</Text>
|
|
109
182
|
</View>
|
|
110
183
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
111
184
|
<Icon name="home" size="md" />
|
|
112
|
-
<Text size="
|
|
185
|
+
<Text size="sm">MD (24px)</Text>
|
|
113
186
|
</View>
|
|
114
187
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
115
188
|
<Icon name="home" size="lg" />
|
|
116
|
-
<Text size="
|
|
189
|
+
<Text size="sm">LG (32px)</Text>
|
|
117
190
|
</View>
|
|
118
191
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
119
192
|
<Icon name="home" size="xl" />
|
|
120
|
-
<Text size="
|
|
193
|
+
<Text size="sm">XL (48px)</Text>
|
|
121
194
|
</View>
|
|
122
195
|
</View>
|
|
123
196
|
</View>
|
|
124
197
|
|
|
125
198
|
{/* Custom Colors vs Variants */}
|
|
126
199
|
<View spacing="md">
|
|
127
|
-
<Text size="
|
|
200
|
+
<Text size="md" weight="semibold">Custom Colors vs Variants</Text>
|
|
128
201
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
129
202
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
130
203
|
<Icon name="heart" size="lg" style={{ color: '#FF0000' }} />
|
|
131
|
-
<Text size="
|
|
204
|
+
<Text size="sm">Custom Red</Text>
|
|
132
205
|
</View>
|
|
133
206
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
134
207
|
<Icon name="heart" size="lg" color="red" />
|
|
135
|
-
<Text size="
|
|
208
|
+
<Text size="sm">Red Variant</Text>
|
|
136
209
|
</View>
|
|
137
210
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
138
211
|
<Icon name="heart" size="lg" style={{ color: '#00FF00' }} />
|
|
139
|
-
<Text size="
|
|
212
|
+
<Text size="sm">Custom Green</Text>
|
|
140
213
|
</View>
|
|
141
214
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
142
215
|
<Icon name="heart" size="lg" color="green" />
|
|
143
|
-
<Text size="
|
|
216
|
+
<Text size="sm">Green Variant</Text>
|
|
144
217
|
</View>
|
|
145
218
|
</View>
|
|
146
219
|
</View>
|
|
147
220
|
|
|
148
221
|
{/* Navigation Icons */}
|
|
149
222
|
<View spacing="md">
|
|
150
|
-
<Text size="
|
|
223
|
+
<Text size="md" weight="semibold">Navigation & Movement</Text>
|
|
151
224
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
152
225
|
<Icon name="arrow-left" size="md" />
|
|
153
226
|
<Icon name="arrow-right" size="md" />
|
|
@@ -164,7 +237,7 @@ export const IconExamples = () => {
|
|
|
164
237
|
|
|
165
238
|
{/* Action Icons */}
|
|
166
239
|
<View spacing="md">
|
|
167
|
-
<Text size="
|
|
240
|
+
<Text size="md" weight="semibold">Actions & Controls</Text>
|
|
168
241
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
169
242
|
<Icon name="play" size="md" />
|
|
170
243
|
<Icon name="pause" size="md" />
|
|
@@ -181,7 +254,7 @@ export const IconExamples = () => {
|
|
|
181
254
|
|
|
182
255
|
{/* Communication Icons */}
|
|
183
256
|
<View spacing="md">
|
|
184
|
-
<Text size="
|
|
257
|
+
<Text size="md" weight="semibold">Communication</Text>
|
|
185
258
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
186
259
|
<Icon name="mail" size="md" />
|
|
187
260
|
<Icon name="message" size="md" />
|
|
@@ -196,7 +269,7 @@ export const IconExamples = () => {
|
|
|
196
269
|
|
|
197
270
|
{/* Social Media Icons */}
|
|
198
271
|
<View spacing="md">
|
|
199
|
-
<Text size="
|
|
272
|
+
<Text size="md" weight="semibold">Social Media</Text>
|
|
200
273
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
201
274
|
<Icon name="facebook" size="md" />
|
|
202
275
|
<Icon name="twitter" size="md" />
|
|
@@ -211,30 +284,30 @@ export const IconExamples = () => {
|
|
|
211
284
|
|
|
212
285
|
{/* Status & Alert Icons with Variants */}
|
|
213
286
|
<View spacing="md">
|
|
214
|
-
<Text size="
|
|
287
|
+
<Text size="md" weight="semibold">Status & Alerts (Using Variants)</Text>
|
|
215
288
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
216
289
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
217
290
|
<Icon name="check-circle" size="md" color="green" />
|
|
218
|
-
<Text size="
|
|
291
|
+
<Text size="sm">Success</Text>
|
|
219
292
|
</View>
|
|
220
293
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
221
294
|
<Icon name="alert" size="md" color="orange" />
|
|
222
|
-
<Text size="
|
|
295
|
+
<Text size="sm">Warning</Text>
|
|
223
296
|
</View>
|
|
224
297
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
225
298
|
<Icon name="alert-circle" size="md" color="red" />
|
|
226
|
-
<Text size="
|
|
299
|
+
<Text size="sm">Error</Text>
|
|
227
300
|
</View>
|
|
228
301
|
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
229
302
|
<Icon name="information" size="md" color="blue" />
|
|
230
|
-
<Text size="
|
|
303
|
+
<Text size="sm">Info</Text>
|
|
231
304
|
</View>
|
|
232
305
|
</View>
|
|
233
306
|
</View>
|
|
234
307
|
|
|
235
308
|
{/* File & Document Icons */}
|
|
236
309
|
<View spacing="md">
|
|
237
|
-
<Text size="
|
|
310
|
+
<Text size="md" weight="semibold">Files & Documents</Text>
|
|
238
311
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
239
312
|
<Icon name="file-document" size="md" />
|
|
240
313
|
<Icon name="folder" size="md" />
|
|
@@ -249,7 +322,7 @@ export const IconExamples = () => {
|
|
|
249
322
|
|
|
250
323
|
{/* Media Icons */}
|
|
251
324
|
<View spacing="md">
|
|
252
|
-
<Text size="
|
|
325
|
+
<Text size="md" weight="semibold">Media & Content</Text>
|
|
253
326
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
254
327
|
<Icon name="image" size="md" />
|
|
255
328
|
<Icon name="camera" size="md" />
|
|
@@ -264,7 +337,7 @@ export const IconExamples = () => {
|
|
|
264
337
|
|
|
265
338
|
{/* Technology Icons */}
|
|
266
339
|
<View spacing="md">
|
|
267
|
-
<Text size="
|
|
340
|
+
<Text size="md" weight="semibold">Technology & Devices</Text>
|
|
268
341
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
269
342
|
<Icon name="cellphone" size="md" />
|
|
270
343
|
<Icon name="laptop" size="md" />
|
|
@@ -279,7 +352,7 @@ export const IconExamples = () => {
|
|
|
279
352
|
|
|
280
353
|
{/* Weather Icons */}
|
|
281
354
|
<View spacing="md">
|
|
282
|
-
<Text size="
|
|
355
|
+
<Text size="md" weight="semibold">Weather</Text>
|
|
283
356
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
284
357
|
<Icon name="weather-sunny" size="md" />
|
|
285
358
|
<Icon name="weather-night" size="md" />
|
|
@@ -294,7 +367,7 @@ export const IconExamples = () => {
|
|
|
294
367
|
|
|
295
368
|
{/* Gaming & Entertainment Icons */}
|
|
296
369
|
<View spacing="md">
|
|
297
|
-
<Text size="
|
|
370
|
+
<Text size="md" weight="semibold">Gaming & Entertainment</Text>
|
|
298
371
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
299
372
|
<Icon name="gamepad" size="md" />
|
|
300
373
|
<Icon name="trophy" size="md" />
|
|
@@ -309,7 +382,7 @@ export const IconExamples = () => {
|
|
|
309
382
|
|
|
310
383
|
{/* Business & Work Icons */}
|
|
311
384
|
<View spacing="md">
|
|
312
|
-
<Text size="
|
|
385
|
+
<Text size="md" weight="semibold">Business & Work</Text>
|
|
313
386
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
314
387
|
<Icon name="briefcase" size="md" />
|
|
315
388
|
<Icon name="presentation" size="md" />
|
|
@@ -324,7 +397,7 @@ export const IconExamples = () => {
|
|
|
324
397
|
|
|
325
398
|
{/* Tool Icons */}
|
|
326
399
|
<View spacing="md">
|
|
327
|
-
<Text size="
|
|
400
|
+
<Text size="md" weight="semibold">Tools & Utilities</Text>
|
|
328
401
|
<View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap', alignItems: 'center' }}>
|
|
329
402
|
<Icon name="tools" size="md" />
|
|
330
403
|
<Icon name="hammer" size="md" />
|
|
@@ -336,6 +409,149 @@ export const IconExamples = () => {
|
|
|
336
409
|
<Icon name="hammer-wrench" size="md" />
|
|
337
410
|
</View>
|
|
338
411
|
</View>
|
|
412
|
+
|
|
413
|
+
{/* Enhanced Plugin Testing Section */}
|
|
414
|
+
<View spacing="lg" style={{ marginTop: 32, padding: 16, backgroundColor: 'rgba(100, 100, 255, 0.1)', borderRadius: 8 }}>
|
|
415
|
+
<Text size="lg" weight="bold">Enhanced Plugin Testing</Text>
|
|
416
|
+
<Text size="sm" style={{ fontStyle: 'italic', marginBottom: 16 }}>
|
|
417
|
+
These examples test the new context-aware babel plugin features
|
|
418
|
+
</Text>
|
|
419
|
+
|
|
420
|
+
{/* Test 1: Simple Variable */}
|
|
421
|
+
<View spacing="md">
|
|
422
|
+
<Text size="md" weight="semibold">Test 1: Simple Variable</Text>
|
|
423
|
+
<Text size="sm" color="secondary">Icon name from a simple variable</Text>
|
|
424
|
+
<View style={{ flexDirection: 'row', gap: 16, alignItems: 'center' }}>
|
|
425
|
+
<SimpleVariableTest />
|
|
426
|
+
</View>
|
|
427
|
+
<Text size="sm" style={{ fontFamily: 'monospace', color: '#666' }}>
|
|
428
|
+
const iconName = "home"; <Icon name={'{iconName}'} />
|
|
429
|
+
</Text>
|
|
430
|
+
</View>
|
|
431
|
+
|
|
432
|
+
{/* Test 2: Namespace Prefix */}
|
|
433
|
+
<View spacing="md">
|
|
434
|
+
<Text size="md" weight="semibold">Test 2: Namespace Prefix (mdi:)</Text>
|
|
435
|
+
<Text size="sm" color="secondary">Explicit marking with mdi: prefix</Text>
|
|
436
|
+
<View style={{ flexDirection: 'row', gap: 16, alignItems: 'center' }}>
|
|
437
|
+
<NamespaceTest />
|
|
438
|
+
</View>
|
|
439
|
+
<Text size="sm" style={{ fontFamily: 'monospace', color: '#666' }}>
|
|
440
|
+
const icon = "mdi:star"; <Icon name={'{icon}'} />
|
|
441
|
+
</Text>
|
|
442
|
+
</View>
|
|
443
|
+
|
|
444
|
+
{/* Test 3: Conditional Expression */}
|
|
445
|
+
<View spacing="md">
|
|
446
|
+
<Text size="md" weight="semibold">Test 3: Conditional Expression</Text>
|
|
447
|
+
<Text size="sm" color="secondary">Ternary operator with two icons</Text>
|
|
448
|
+
<View style={{ flexDirection: 'row', gap: 16, alignItems: 'center' }}>
|
|
449
|
+
<Icon name={isPlaying ? "pause" : "play"} size="md" />
|
|
450
|
+
<Button onPress={() => setIsPlaying(!isPlaying)}>
|
|
451
|
+
Toggle Play/Pause
|
|
452
|
+
</Button>
|
|
453
|
+
<Text size="sm">Currently: {isPlaying ? 'Playing' : 'Paused'}</Text>
|
|
454
|
+
</View>
|
|
455
|
+
<Text size="sm" style={{ fontFamily: 'monospace', color: '#666' }}>
|
|
456
|
+
<Icon name={'{isPlaying ? "pause" : "play"}'} />
|
|
457
|
+
</Text>
|
|
458
|
+
</View>
|
|
459
|
+
|
|
460
|
+
{/* Test 4: Function Return */}
|
|
461
|
+
<View spacing="md">
|
|
462
|
+
<Text size="md" weight="semibold">Test 4: Function Return Value</Text>
|
|
463
|
+
<Text size="sm" color="secondary">Icon name from function (requires manifest or namespace)</Text>
|
|
464
|
+
<View style={{ flexDirection: 'row', gap: 16, alignItems: 'center' }}>
|
|
465
|
+
<Icon name={getStatusIcon(userStatus)} size="md" />
|
|
466
|
+
<View style={{ flexDirection: 'row', gap: 8 }}>
|
|
467
|
+
<Button onPress={() => setUserStatus('online')} type={userStatus === 'online' ? 'contained' : 'outlined'}>
|
|
468
|
+
Online
|
|
469
|
+
</Button>
|
|
470
|
+
<Button onPress={() => setUserStatus('offline')} type={userStatus === 'offline' ? 'contained' : 'outlined'}>
|
|
471
|
+
Offline
|
|
472
|
+
</Button>
|
|
473
|
+
<Button onPress={() => setUserStatus('away')} type={userStatus === 'away' ? 'contained' : 'outlined'}>
|
|
474
|
+
Away
|
|
475
|
+
</Button>
|
|
476
|
+
</View>
|
|
477
|
+
</View>
|
|
478
|
+
<Text size="sm" style={{ fontFamily: 'monospace', color: '#666' }}>
|
|
479
|
+
<Icon name={'{getStatusIcon(status)}'} />
|
|
480
|
+
</Text>
|
|
481
|
+
</View>
|
|
482
|
+
|
|
483
|
+
{/* Test 5: Namespace with Conditional */}
|
|
484
|
+
<View spacing="md">
|
|
485
|
+
<Text size="md" weight="semibold">Test 5: Namespace + Conditional</Text>
|
|
486
|
+
<Text size="sm" color="secondary">Guaranteed transformation with mdi: prefix</Text>
|
|
487
|
+
<View style={{ flexDirection: 'row', gap: 16, alignItems: 'center' }}>
|
|
488
|
+
<Icon name={isPlaying ? "mdi:volume-high" : "mdi:volume-mute"} size="md" />
|
|
489
|
+
<Text size="sm">Audio: {isPlaying ? 'On' : 'Muted'}</Text>
|
|
490
|
+
</View>
|
|
491
|
+
<Text size="sm" style={{ fontFamily: 'monospace', color: '#666' }}>
|
|
492
|
+
<Icon name={'{isPlaying ? "mdi:volume-high" : "mdi:volume-mute"}'} />
|
|
493
|
+
</Text>
|
|
494
|
+
</View>
|
|
495
|
+
|
|
496
|
+
{/* Test 6: Logical Expression */}
|
|
497
|
+
<View spacing="md">
|
|
498
|
+
<Text size="md" weight="semibold">Test 6: Logical Expression</Text>
|
|
499
|
+
<Text size="sm" color="secondary">Using && and || operators</Text>
|
|
500
|
+
<View style={{ flexDirection: 'row', gap: 16, alignItems: 'center' }}>
|
|
501
|
+
<Icon name={userStatus === 'online' ? "wifi" : undefined} size="md" />
|
|
502
|
+
<Icon name={userStatus === 'offline' ? undefined : "wifi-off"} size="md" />
|
|
503
|
+
</View>
|
|
504
|
+
<Text size="sm" style={{ fontFamily: 'monospace', color: '#666' }}>
|
|
505
|
+
<Icon name={'{condition && "wifi"}'} />
|
|
506
|
+
</Text>
|
|
507
|
+
</View>
|
|
508
|
+
|
|
509
|
+
{/* Test 7: Template Literal (Static) */}
|
|
510
|
+
<View spacing="md">
|
|
511
|
+
<Text size="md" weight="semibold">Test 7: Template Literal (Static)</Text>
|
|
512
|
+
<Text size="sm" color="secondary">Static template strings</Text>
|
|
513
|
+
<View style={{ flexDirection: 'row', gap: 16, alignItems: 'center' }}>
|
|
514
|
+
<TemplateLiteralTest />
|
|
515
|
+
</View>
|
|
516
|
+
<Text size="sm" style={{ fontFamily: 'monospace', color: '#666' }}>
|
|
517
|
+
const icon = `bell`; <Icon name={'{icon}'} />
|
|
518
|
+
</Text>
|
|
519
|
+
</View>
|
|
520
|
+
|
|
521
|
+
{/* Test 8: No False Positives */}
|
|
522
|
+
<View spacing="md">
|
|
523
|
+
<Text size="md" weight="semibold">Test 8: No False Positives</Text>
|
|
524
|
+
<Text size="sm" color="secondary">Common words NOT used with Icon shouldn't transform</Text>
|
|
525
|
+
<View style={{ flexDirection: 'column', gap: 8 }}>
|
|
526
|
+
<FalsePositiveTest />
|
|
527
|
+
</View>
|
|
528
|
+
</View>
|
|
529
|
+
|
|
530
|
+
{/* Test 9: Multiple Variables */}
|
|
531
|
+
<View spacing="md">
|
|
532
|
+
<Text size="md" weight="semibold">Test 9: Multiple Icon Variables</Text>
|
|
533
|
+
<Text size="sm" color="secondary">Several variables used with Icon components</Text>
|
|
534
|
+
<View style={{ flexDirection: 'row', gap: 16, alignItems: 'center' }}>
|
|
535
|
+
<MultipleVariablesTest />
|
|
536
|
+
</View>
|
|
537
|
+
<Text size="sm" style={{ fontFamily: 'monospace', color: '#666' }}>
|
|
538
|
+
Multiple icon variables in same scope
|
|
539
|
+
</Text>
|
|
540
|
+
</View>
|
|
541
|
+
|
|
542
|
+
{/* Summary */}
|
|
543
|
+
<View style={{ marginTop: 16, padding: 12, backgroundColor: 'rgba(0, 255, 0, 0.1)', borderRadius: 4 }}>
|
|
544
|
+
<Text size="sm" weight="semibold">Plugin Features Tested:</Text>
|
|
545
|
+
<Text size="sm">✓ Simple variables</Text>
|
|
546
|
+
<Text size="sm">✓ Namespace prefix (mdi:)</Text>
|
|
547
|
+
<Text size="sm">✓ Conditional expressions</Text>
|
|
548
|
+
<Text size="sm">✓ Function returns</Text>
|
|
549
|
+
<Text size="sm">✓ Logical operators</Text>
|
|
550
|
+
<Text size="sm">✓ Template literals</Text>
|
|
551
|
+
<Text size="sm">✓ No false positives</Text>
|
|
552
|
+
<Text size="sm">✓ Multiple variables</Text>
|
|
553
|
+
</View>
|
|
554
|
+
</View>
|
|
339
555
|
</View>
|
|
340
556
|
</Screen>
|
|
341
557
|
);
|