@idealyst/components 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/README.md +568 -0
  2. package/package.json +107 -0
  3. package/plugin/web.js +186 -0
  4. package/src/Avatar/Avatar.native.tsx +44 -0
  5. package/src/Avatar/Avatar.styles.tsx +67 -0
  6. package/src/Avatar/Avatar.web.tsx +51 -0
  7. package/src/Avatar/index.native.ts +2 -0
  8. package/src/Avatar/index.ts +2 -0
  9. package/src/Avatar/index.web.ts +2 -0
  10. package/src/Avatar/types.ts +43 -0
  11. package/src/Badge/Badge.native.tsx +43 -0
  12. package/src/Badge/Badge.styles.tsx +154 -0
  13. package/src/Badge/Badge.web.tsx +45 -0
  14. package/src/Badge/index.native.ts +2 -0
  15. package/src/Badge/index.ts +2 -0
  16. package/src/Badge/index.web.ts +2 -0
  17. package/src/Badge/types.ts +34 -0
  18. package/src/Button/Button.native.tsx +39 -0
  19. package/src/Button/Button.styles.tsx +215 -0
  20. package/src/Button/Button.types.ts +12 -0
  21. package/src/Button/Button.web.tsx +56 -0
  22. package/src/Button/index.native.ts +3 -0
  23. package/src/Button/index.ts +5 -0
  24. package/src/Button/index.web.ts +3 -0
  25. package/src/Button/types.ts +49 -0
  26. package/src/Card/Card.native.tsx +52 -0
  27. package/src/Card/Card.styles.tsx +240 -0
  28. package/src/Card/Card.web.tsx +62 -0
  29. package/src/Card/index.native.ts +3 -0
  30. package/src/Card/index.ts +5 -0
  31. package/src/Card/index.web.ts +3 -0
  32. package/src/Card/types.ts +59 -0
  33. package/src/Checkbox/Checkbox.native.tsx +99 -0
  34. package/src/Checkbox/Checkbox.styles.tsx +292 -0
  35. package/src/Checkbox/Checkbox.web.tsx +131 -0
  36. package/src/Checkbox/index.native.ts +3 -0
  37. package/src/Checkbox/index.ts +5 -0
  38. package/src/Checkbox/index.web.ts +3 -0
  39. package/src/Checkbox/types.ts +79 -0
  40. package/src/Divider/Divider.native.tsx +145 -0
  41. package/src/Divider/Divider.styles.tsx +602 -0
  42. package/src/Divider/Divider.web.tsx +73 -0
  43. package/src/Divider/index.native.ts +3 -0
  44. package/src/Divider/index.ts +5 -0
  45. package/src/Divider/index.web.ts +3 -0
  46. package/src/Divider/types.ts +54 -0
  47. package/src/Icon/Icon.native.tsx +39 -0
  48. package/src/Icon/Icon.styles.tsx +50 -0
  49. package/src/Icon/Icon.web.tsx +47 -0
  50. package/src/Icon/icon-types.ts +7452 -0
  51. package/src/Icon/index.native.ts +3 -0
  52. package/src/Icon/index.ts +5 -0
  53. package/src/Icon/index.web.ts +3 -0
  54. package/src/Icon/types.ts +36 -0
  55. package/src/Input/Input.native.tsx +75 -0
  56. package/src/Input/Input.styles.tsx +177 -0
  57. package/src/Input/Input.web.tsx +71 -0
  58. package/src/Input/index.native.ts +3 -0
  59. package/src/Input/index.ts +5 -0
  60. package/src/Input/index.web.ts +3 -0
  61. package/src/Input/types.ts +69 -0
  62. package/src/Screen/Screen.native.tsx +41 -0
  63. package/src/Screen/Screen.styles.tsx +60 -0
  64. package/src/Screen/Screen.web.tsx +33 -0
  65. package/src/Screen/index.native.ts +2 -0
  66. package/src/Screen/index.ts +2 -0
  67. package/src/Screen/index.web.ts +2 -0
  68. package/src/Screen/types.ts +38 -0
  69. package/src/Text/Text.native.tsx +36 -0
  70. package/src/Text/Text.styles.tsx +67 -0
  71. package/src/Text/Text.web.tsx +41 -0
  72. package/src/Text/index.native.ts +3 -0
  73. package/src/Text/index.ts +5 -0
  74. package/src/Text/index.web.ts +3 -0
  75. package/src/Text/types.ts +39 -0
  76. package/src/View/View.native.tsx +56 -0
  77. package/src/View/View.styles.tsx +103 -0
  78. package/src/View/View.web.tsx +60 -0
  79. package/src/View/index.native.ts +3 -0
  80. package/src/View/index.ts +5 -0
  81. package/src/View/index.web.ts +3 -0
  82. package/src/View/types.ts +73 -0
  83. package/src/examples/AllExamples.tsx +72 -0
  84. package/src/examples/AvatarExamples.tsx +97 -0
  85. package/src/examples/BadgeExamples.tsx +200 -0
  86. package/src/examples/ButtonExamples.tsx +150 -0
  87. package/src/examples/CardExamples.tsx +176 -0
  88. package/src/examples/CheckboxExamples.tsx +217 -0
  89. package/src/examples/DividerExamples.tsx +218 -0
  90. package/src/examples/IconExamples.tsx +342 -0
  91. package/src/examples/InputExamples.tsx +134 -0
  92. package/src/examples/README.md +136 -0
  93. package/src/examples/ScreenExamples.tsx +154 -0
  94. package/src/examples/TextExamples.tsx +89 -0
  95. package/src/examples/ThemeExtensionExamples.tsx +91 -0
  96. package/src/examples/ValidationExamples.tsx +95 -0
  97. package/src/examples/ViewExamples.tsx +129 -0
  98. package/src/examples/extendedTheme.ts +331 -0
  99. package/src/examples/index.ts +15 -0
  100. package/src/index.native.ts +52 -0
  101. package/src/index.ts +48 -0
  102. package/src/theme/breakpoints.ts +8 -0
  103. package/src/theme/colorResolver.ts +218 -0
  104. package/src/theme/colors.ts +315 -0
  105. package/src/theme/defaultThemes.ts +326 -0
  106. package/src/theme/index.ts +188 -0
  107. package/src/theme/themeBuilder.ts +602 -0
  108. package/src/theme/unistyles.d.ts +6 -0
  109. package/src/theme/variantHelpers.ts +584 -0
  110. package/src/theme/variants.ts +56 -0
  111. package/src/unistyles.d.ts +108 -0
  112. package/src/unistyles.ts +43 -0
@@ -0,0 +1,154 @@
1
+ import React from 'react';
2
+ import { Screen, View, Text } from '../index';
3
+
4
+ export const ScreenExamples = () => {
5
+ return (
6
+ <Screen background="primary" padding="lg">
7
+ <View spacing="lg">
8
+ <Text size="large" weight="bold" align="center">
9
+ Screen Examples
10
+ </Text>
11
+
12
+ {/* Background Examples */}
13
+ <View spacing="md">
14
+ <Text size="medium" weight="semibold">Background Variants</Text>
15
+ <Text size="small" color="secondary">
16
+ Each Screen should have a different background color
17
+ </Text>
18
+
19
+ <View style={{ flexDirection: 'row', gap: 8, flexWrap: 'wrap' }}>
20
+ <View style={{ height: 100, width: 120, borderWidth: 1, borderColor: '#ccc' }}>
21
+ <Screen background="primary" padding="sm">
22
+ <View spacing="sm" style={{ alignItems: 'center', justifyContent: 'center', flex: 1 }}>
23
+ <Text size="small" weight="bold">Primary</Text>
24
+ <Text size="small" color="secondary">Surface</Text>
25
+ </View>
26
+ </Screen>
27
+ </View>
28
+
29
+ <View style={{ height: 100, width: 120, borderWidth: 1, borderColor: '#ccc' }}>
30
+ <Screen background="secondary" padding="sm">
31
+ <View spacing="sm" style={{ alignItems: 'center', justifyContent: 'center', flex: 1 }}>
32
+ <Text size="small" weight="bold">Secondary</Text>
33
+ <Text size="small" color="secondary">Surface</Text>
34
+ </View>
35
+ </Screen>
36
+ </View>
37
+
38
+ <View style={{ height: 100, width: 120, borderWidth: 1, borderColor: '#ccc' }}>
39
+ <Screen background="tertiary" padding="sm">
40
+ <View spacing="sm" style={{ alignItems: 'center', justifyContent: 'center', flex: 1 }}>
41
+ <Text size="small" weight="bold">Tertiary</Text>
42
+ <Text size="small" color="secondary">Surface</Text>
43
+ </View>
44
+ </Screen>
45
+ </View>
46
+
47
+ <View style={{ height: 100, width: 120, borderWidth: 1, borderColor: '#ccc' }}>
48
+ <Screen background="inverse" padding="sm">
49
+ <View spacing="sm" style={{ alignItems: 'center', justifyContent: 'center', flex: 1 }}>
50
+ <Text size="small" weight="bold" color="primary">Inverse</Text>
51
+ <Text size="small" color="secondary">Surface</Text>
52
+ </View>
53
+ </Screen>
54
+ </View>
55
+ </View>
56
+ </View>
57
+
58
+ {/* Padding Examples */}
59
+ <View spacing="md">
60
+ <Text size="medium" weight="semibold">Padding Variants</Text>
61
+ <Text size="small" color="secondary">
62
+ Different padding options for Screen content
63
+ </Text>
64
+
65
+ <View style={{ flexDirection: 'row', gap: 8, flexWrap: 'wrap' }}>
66
+ <View style={{ height: 100, width: 120, borderWidth: 1, borderColor: '#ccc' }}>
67
+ <Screen background="secondary" padding="none">
68
+ <View style={{ alignItems: 'center', justifyContent: 'center', flex: 1, backgroundColor: 'rgba(255,0,0,0.1)' }}>
69
+ <Text size="small" weight="bold">None</Text>
70
+ <Text size="small" color="secondary">No padding</Text>
71
+ </View>
72
+ </Screen>
73
+ </View>
74
+
75
+ <View style={{ height: 100, width: 120, borderWidth: 1, borderColor: '#ccc' }}>
76
+ <Screen background="secondary" padding="sm">
77
+ <View style={{ alignItems: 'center', justifyContent: 'center', flex: 1, backgroundColor: 'rgba(255,0,0,0.1)' }}>
78
+ <Text size="small" weight="bold">Small</Text>
79
+ <Text size="small" color="secondary">8px</Text>
80
+ </View>
81
+ </Screen>
82
+ </View>
83
+
84
+ <View style={{ height: 100, width: 120, borderWidth: 1, borderColor: '#ccc' }}>
85
+ <Screen background="secondary" padding="md">
86
+ <View style={{ alignItems: 'center', justifyContent: 'center', flex: 1, backgroundColor: 'rgba(255,0,0,0.1)' }}>
87
+ <Text size="small" weight="bold">Medium</Text>
88
+ <Text size="small" color="secondary">16px</Text>
89
+ </View>
90
+ </Screen>
91
+ </View>
92
+
93
+ <View style={{ height: 100, width: 120, borderWidth: 1, borderColor: '#ccc' }}>
94
+ <Screen background="secondary" padding="lg">
95
+ <View style={{ alignItems: 'center', justifyContent: 'center', flex: 1, backgroundColor: 'rgba(255,0,0,0.1)' }}>
96
+ <Text size="small" weight="bold">Large</Text>
97
+ <Text size="small" color="secondary">24px</Text>
98
+ </View>
99
+ </Screen>
100
+ </View>
101
+ </View>
102
+ </View>
103
+
104
+ {/* Safe Area Examples */}
105
+ <View spacing="md">
106
+ <Text size="medium" weight="semibold">Safe Area</Text>
107
+ <Text size="small" color="secondary">
108
+ Safe area padding for mobile devices
109
+ </Text>
110
+
111
+ <View style={{ flexDirection: 'row', gap: 8, flexWrap: 'wrap' }}>
112
+ <View style={{ height: 100, width: 120, borderWidth: 1, borderColor: '#ccc' }}>
113
+ <Screen background="tertiary" padding="sm" safeArea={false}>
114
+ <View style={{ alignItems: 'center', justifyContent: 'center', flex: 1, backgroundColor: 'rgba(0,255,0,0.1)' }}>
115
+ <Text size="small" weight="bold">No Safe Area</Text>
116
+ <Text size="small" color="secondary">Standard</Text>
117
+ </View>
118
+ </Screen>
119
+ </View>
120
+
121
+ <View style={{ height: 100, width: 120, borderWidth: 1, borderColor: '#ccc' }}>
122
+ <Screen background="tertiary" padding="sm" safeArea={true}>
123
+ <View style={{ alignItems: 'center', justifyContent: 'center', flex: 1, backgroundColor: 'rgba(0,255,0,0.1)' }}>
124
+ <Text size="small" weight="bold">Safe Area</Text>
125
+ <Text size="small" color="secondary">Mobile</Text>
126
+ </View>
127
+ </Screen>
128
+ </View>
129
+ </View>
130
+ </View>
131
+
132
+ {/* Usage Examples */}
133
+ <View spacing="md">
134
+ <Text size="medium" weight="semibold">Common Usage</Text>
135
+ <View style={{ height: 120, borderWidth: 1, borderColor: '#ccc' }}>
136
+ <Screen background="primary" padding="lg">
137
+ <View style={{ alignItems: 'center', justifyContent: 'center', flex: 1 }}>
138
+ <Text size="large" weight="bold" align="center">
139
+ App Screen Layout
140
+ </Text>
141
+ <Text size="medium" color="secondary" align="center">
142
+ Primary background with large padding
143
+ </Text>
144
+ <Text size="small" color="secondary" align="center">
145
+ Perfect for main app screens
146
+ </Text>
147
+ </View>
148
+ </Screen>
149
+ </View>
150
+ </View>
151
+ </View>
152
+ </Screen>
153
+ );
154
+ };
@@ -0,0 +1,89 @@
1
+ import React from 'react';
2
+ import { Screen, View, Text } from '../index';
3
+
4
+ export const TextExamples = () => {
5
+ return (
6
+ <Screen background="primary" padding="lg">
7
+ <View spacing="none">
8
+ <Text size="large" weight="bold" align="center">
9
+ Text Examples
10
+ </Text>
11
+
12
+ {/* Text Sizes */}
13
+ <View spacing="md">
14
+ <Text size="medium" weight="semibold">Sizes</Text>
15
+ <View spacing="sm" style={{ gap: 10 }}>
16
+ <Text size="small">Small text - Lorem ipsum dolor sit amet</Text>
17
+ <Text size="medium">Medium text - Lorem ipsum dolor sit amet</Text>
18
+ <Text size="large">Large text - Lorem ipsum dolor sit amet</Text>
19
+ <Text size="xlarge">Extra large text - Lorem ipsum dolor sit amet</Text>
20
+ </View>
21
+ </View>
22
+
23
+ {/* Text Weights */}
24
+ <View spacing="md">
25
+ <Text size="medium" weight="semibold">Weights</Text>
26
+ <View spacing="sm" style={{ gap: 10 }}>
27
+ <Text weight="light">Light weight text</Text>
28
+ <Text weight="normal">Normal weight text</Text>
29
+ <Text weight="medium">Medium weight text</Text>
30
+ <Text weight="semibold">Semibold weight text</Text>
31
+ <Text weight="bold">Bold weight text</Text>
32
+ </View>
33
+ </View>
34
+
35
+ {/* Text Colors */}
36
+ <View spacing="md">
37
+ <Text size="medium" weight="semibold">Color Variants</Text>
38
+ <View spacing="sm" style={{ gap: 10 }}>
39
+ <Text color="primary">Primary color text</Text>
40
+ <Text color="secondary">Secondary color text</Text>
41
+ <Text color="blue">Blue color text</Text>
42
+ <Text color="green">Green color text</Text>
43
+ <Text color="red">Red color text</Text>
44
+ <Text color="orange">Orange color text</Text>
45
+ </View>
46
+ </View>
47
+
48
+ {/* Text Color Shades */}
49
+ <View spacing="md">
50
+ <Text size="medium" weight="semibold">Color Shades</Text>
51
+ <View spacing="sm" style={{ gap: 10 }}>
52
+ <Text color="blue.300">Blue 300 text</Text>
53
+ <Text color="blue.500">Blue 500 text</Text>
54
+ <Text color="blue.700">Blue 700 text</Text>
55
+ <Text color="red.200">Red 200 text</Text>
56
+ <Text color="red.600">Red 600 text</Text>
57
+ <Text color="red.900">Red 900 text</Text>
58
+ </View>
59
+ </View>
60
+
61
+ {/* Text Alignment */}
62
+ <View spacing="md">
63
+ <Text size="medium" weight="semibold">Alignment</Text>
64
+ <View spacing="sm" style={{ gap: 10 }}>
65
+ <Text align="left">Left aligned text</Text>
66
+ <Text align="center">Center aligned text</Text>
67
+ <Text align="right">Right aligned text</Text>
68
+ </View>
69
+ </View>
70
+
71
+ {/* Combined Examples */}
72
+ <View spacing="md">
73
+ <Text size="medium" weight="semibold">Combined Examples</Text>
74
+ <View spacing="sm" style={{ gap: 10 }}>
75
+ <Text size="large" weight="bold" color="primary" align="center">
76
+ Large Bold Primary Centered
77
+ </Text>
78
+ <Text size="small" weight="light" color="secondary" align="right">
79
+ Small Light Secondary Right
80
+ </Text>
81
+ <Text size="medium" weight="semibold" color="green">
82
+ Medium Semibold Green
83
+ </Text>
84
+ </View>
85
+ </View>
86
+ </View>
87
+ </Screen>
88
+ );
89
+ };
@@ -0,0 +1,91 @@
1
+ import React, { useEffect } from 'react';
2
+ import { Screen, View, Button, Text, Badge, Card, Input, Checkbox } from '../index';
3
+
4
+ export const ThemeExtensionExamples = () => {
5
+ return (
6
+ <Screen background="primary" padding="lg">
7
+ <View spacing="lg">
8
+ <Text size="large" weight="bold" align="center">
9
+ Extended Theme Test
10
+ </Text>
11
+
12
+ {/* Extended Colors */}
13
+ <View spacing="md">
14
+ <Text size="medium" weight="semibold">Extended Colors</Text>
15
+ <View style={{ flexDirection: 'row', gap: 8, flexWrap: 'wrap' }}>
16
+ <Badge color={"orange" as any}>Orange</Badge>
17
+ <Badge color={"teal" as any}>Teal</Badge>
18
+ <Badge color={"indigo" as any}>Indigo</Badge>
19
+ <Badge color={"violet" as any}>Violet</Badge>
20
+ <Badge color={"emerald" as any}>Emerald</Badge>
21
+ </View>
22
+
23
+ <View style={{ flexDirection: 'row', gap: 8, flexWrap: 'wrap' }}>
24
+ <Text color={"orange" as any}>Orange Text</Text>
25
+ <Text color={"teal" as any}>Teal Text</Text>
26
+ <Text color={"indigo" as any}>Indigo Text</Text>
27
+ <Text color={"violet" as any}>Violet Text</Text>
28
+ <Text color={"emerald" as any}>Emerald Text</Text>
29
+ </View>
30
+ </View>
31
+
32
+ {/* Extended Intents */}
33
+ <View spacing="md">
34
+ <Text size="medium" weight="semibold">Extended Intents</Text>
35
+ <View style={{ flexDirection: 'row', gap: 8, flexWrap: 'wrap' }}>
36
+ <Button intent={"accent" as any}>Accent Button</Button>
37
+ <Button intent={"feature" as any}>Feature Button</Button>
38
+ <Button intent={"highlight" as any}>Highlight Button</Button>
39
+ </View>
40
+
41
+ <View style={{ flexDirection: 'row', gap: 8, flexWrap: 'wrap' }}>
42
+ <Button intent={"accent" as any} variant="outlined">Accent Outlined</Button>
43
+ <Button intent={"feature" as any} variant="outlined">Feature Outlined</Button>
44
+ <Button intent={"highlight" as any} variant="outlined">Highlight Outlined</Button>
45
+ </View>
46
+ </View>
47
+
48
+ {/* Mixed Usage */}
49
+ <View spacing="md">
50
+ <Text size="medium" weight="semibold">Mixed Extended Usage</Text>
51
+
52
+ <Card>
53
+ <View spacing="sm">
54
+ <Text color={"orange" as any} weight="bold">Orange Card Header</Text>
55
+ <Text color="secondary">This card uses extended orange color for the header</Text>
56
+ <Button intent={"accent" as any} size="small">Accent Action</Button>
57
+ </View>
58
+ </Card>
59
+
60
+ <Card>
61
+ <View spacing="sm">
62
+ <Text color={"teal" as any} weight="bold">Teal Card Header</Text>
63
+ <Text color="secondary">This card uses extended teal color for the header</Text>
64
+ <Button intent={"feature" as any} size="small">Feature Action</Button>
65
+ </View>
66
+ </Card>
67
+ </View>
68
+
69
+ {/* Form with Extended Colors */}
70
+ <View spacing="md">
71
+ <Text size="medium" weight="semibold">Form with Extended Styling</Text>
72
+
73
+ <Input
74
+ placeholder="Input with accent intent"
75
+ intent={"accent" as any}
76
+ />
77
+
78
+ <Input
79
+ placeholder="Input with feature intent"
80
+ intent={"feature" as any}
81
+ />
82
+
83
+ <View style={{ flexDirection: 'row', gap: 12, flexWrap: 'wrap' }}>
84
+ <Checkbox intent={"accent" as any}>Accent Checkbox</Checkbox>
85
+ <Checkbox intent={"feature" as any}>Feature Checkbox</Checkbox>
86
+ </View>
87
+ </View>
88
+ </View>
89
+ </Screen>
90
+ );
91
+ };
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Validation Examples
3
+ *
4
+ * This file demonstrates how the theme validation system works
5
+ * and how components can use it to validate their props.
6
+ */
7
+
8
+ import React from 'react';
9
+ import { View } from 'react-native';
10
+ import { useUnistyles } from 'react-native-unistyles';
11
+ import Text from '../Text';
12
+ import Button from '../Button';
13
+ import Badge from '../Badge';
14
+ import { validateColorProp, validateIntentProp } from '../theme';
15
+
16
+ export function ValidationExamples() {
17
+ const { theme } = useUnistyles();
18
+
19
+ // Example: Valid usage
20
+ const handleValidUsage = () => {
21
+ console.log('=== Valid Usage Examples ===');
22
+
23
+ // These should not produce warnings
24
+ validateColorProp(theme, 'blue', 'Text');
25
+ validateColorProp(theme, 'primary', 'Text');
26
+ validateIntentProp(theme, 'primary', 'Button');
27
+ validateIntentProp(theme, 'success', 'Button');
28
+ };
29
+
30
+ // Example: Invalid usage
31
+ const handleInvalidUsage = () => {
32
+ console.log('=== Invalid Usage Examples ===');
33
+
34
+ // These should produce warnings in development
35
+ validateColorProp(theme, 'invalidColor', 'Text');
36
+ validateColorProp(theme, 'neonPink', 'Text');
37
+ validateIntentProp(theme, 'invalidIntent', 'Button');
38
+ validateIntentProp(theme, 'danger', 'Button'); // 'danger' doesn't exist, should be 'error'
39
+ };
40
+
41
+ return (
42
+ <View style={{ padding: 20, gap: 16 }}>
43
+ <Text size="large" weight="bold">
44
+ Theme Validation Examples
45
+ </Text>
46
+
47
+ <Text>
48
+ Open the browser console to see validation warnings when using invalid colors or intents.
49
+ </Text>
50
+
51
+ {/* Valid examples */}
52
+ <View style={{ gap: 8 }}>
53
+ <Text weight="semibold">✅ Valid Usage (no warnings):</Text>
54
+ <Text color="blue">Blue text (valid palette color)</Text>
55
+ <Text color="blue">Blue text (valid palette color)</Text>
56
+ <Button intent="primary" onPress={handleValidUsage}>
57
+ Valid Button
58
+ </Button>
59
+ <Badge color="green">Valid Badge</Badge>
60
+ </View>
61
+
62
+ {/* Invalid examples that would show warnings */}
63
+ <View style={{ gap: 8 }}>
64
+ <Text weight="semibold">⚠️ Invalid Usage (shows warnings):</Text>
65
+ <Button onPress={handleInvalidUsage}>
66
+ Click to Test Invalid Props (check console)
67
+ </Button>
68
+
69
+ <Text size="small" color="secondary">
70
+ Note: The invalid examples are triggered programmatically to avoid
71
+ runtime TypeScript errors. In real usage, TypeScript would catch
72
+ most of these at compile time.
73
+ </Text>
74
+ </View>
75
+
76
+ {/* Extensibility example */}
77
+ <View style={{ gap: 8 }}>
78
+ <Text weight="semibold">🔧 Extensibility:</Text>
79
+ <Text size="small">
80
+ When you add new colors to your theme palette (e.g., 'orange', 'teal'),
81
+ they automatically become available in all components that use ColorVariant.
82
+ The validation system will recognize them as valid options.
83
+ </Text>
84
+
85
+ <Text size="small">
86
+ Example: If you add 'orange' to your theme.palettes, then
87
+ &lt;Text color="orange"&gt; and &lt;Badge color="orange"&gt;
88
+ will work without any code changes to the components.
89
+ </Text>
90
+ </View>
91
+ </View>
92
+ );
93
+ }
94
+
95
+ export default ValidationExamples;
@@ -0,0 +1,129 @@
1
+ import React from 'react';
2
+ import { Screen, View, Text } from '../index';
3
+
4
+ export const ViewExamples = () => {
5
+ return (
6
+ <Screen background="primary" padding="lg">
7
+ <View spacing="none">
8
+ <Text size="large" weight="bold" align="center">
9
+ View Examples
10
+ </Text>
11
+
12
+ {/* Spacing Examples */}
13
+ <View spacing="md">
14
+ <Text size="medium" weight="semibold">Spacing Variants</Text>
15
+ <View style={{ flexDirection: 'row', gap: 8, flexWrap: 'wrap' }}>
16
+ <View spacing="none" background="surface" border="thin">
17
+ <Text size="small">None</Text>
18
+ </View>
19
+ <View spacing="xs" background="surface" border="thin">
20
+ <Text size="small">XS</Text>
21
+ </View>
22
+ <View spacing="sm" background="surface" border="thin">
23
+ <Text size="small">SM</Text>
24
+ </View>
25
+ <View spacing="md" background="surface" border="thin">
26
+ <Text size="small">MD</Text>
27
+ </View>
28
+ <View spacing="lg" background="surface" border="thin">
29
+ <Text size="small">LG</Text>
30
+ </View>
31
+ <View spacing="xl" background="surface" border="thin">
32
+ <Text size="small">XL</Text>
33
+ </View>
34
+ </View>
35
+ </View>
36
+
37
+ {/* Background Examples */}
38
+ <View spacing="md">
39
+ <Text size="medium" weight="semibold">Background Variants</Text>
40
+ <View style={{ flexDirection: 'row', gap: 8, flexWrap: 'wrap' }}>
41
+ <View background="transparent" border="thin" spacing="sm">
42
+ <Text size="small">Transparent</Text>
43
+ </View>
44
+ <View background="surface" spacing="sm">
45
+ <Text size="small">Surface</Text>
46
+ </View>
47
+ <View background="primary" spacing="sm">
48
+ <Text size="small" color="primary">Primary</Text>
49
+ </View>
50
+ <View background="secondary" spacing="sm">
51
+ <Text size="small" color="secondary">Secondary</Text>
52
+ </View>
53
+ </View>
54
+ </View>
55
+
56
+ {/* Border Radius Examples */}
57
+ <View spacing="md">
58
+ <Text size="medium" weight="semibold">Border Radius</Text>
59
+ <View style={{ flexDirection: 'row', gap: 8, flexWrap: 'wrap' }}>
60
+ <View radius="none" background="surface" spacing="sm" border="thin">
61
+ <Text size="small">None</Text>
62
+ </View>
63
+ <View radius="xs" background="surface" spacing="sm" border="thin">
64
+ <Text size="small">XS</Text>
65
+ </View>
66
+ <View radius="sm" background="surface" spacing="sm" border="thin">
67
+ <Text size="small">SM</Text>
68
+ </View>
69
+ <View radius="md" background="surface" spacing="sm" border="thin">
70
+ <Text size="small">MD</Text>
71
+ </View>
72
+ <View radius="lg" background="surface" spacing="sm" border="thin">
73
+ <Text size="small">LG</Text>
74
+ </View>
75
+ <View radius="xl" background="surface" spacing="sm" border="thin">
76
+ <Text size="small">XL</Text>
77
+ </View>
78
+ </View>
79
+ </View>
80
+
81
+ {/* Border Examples */}
82
+ <View spacing="md">
83
+ <Text size="medium" weight="semibold">Border Variants</Text>
84
+ <View style={{ flexDirection: 'row', gap: 8, flexWrap: 'wrap' }}>
85
+ <View border="none" background="surface" spacing="sm" radius="sm">
86
+ <Text size="small">None</Text>
87
+ </View>
88
+ <View border="thin" background="surface" spacing="sm" radius="sm">
89
+ <Text size="small">Thin</Text>
90
+ </View>
91
+ <View border="thick" background="surface" spacing="sm" radius="sm">
92
+ <Text size="small">Thick</Text>
93
+ </View>
94
+ </View>
95
+ </View>
96
+
97
+ {/* Layout Examples */}
98
+ <View spacing="md">
99
+ <Text size="medium" weight="semibold">Layout Examples</Text>
100
+ <View spacing="sm" style={{ gap: 10 }}>
101
+ <View
102
+ background="surface"
103
+ spacing="md"
104
+ radius="md"
105
+ border="thin"
106
+ style={{ flexDirection: 'row', justifyContent: 'space-between' }}
107
+ >
108
+ <Text>Left</Text>
109
+ <Text>Center</Text>
110
+ <Text>Right</Text>
111
+ </View>
112
+
113
+ <View
114
+ background="surface"
115
+ spacing="md"
116
+ radius="md"
117
+ border="thin"
118
+ style={{ flexDirection: 'column', alignItems: 'center' }}
119
+ >
120
+ <Text>Centered</Text>
121
+ <Text>Column</Text>
122
+ <Text>Layout</Text>
123
+ </View>
124
+ </View>
125
+ </View>
126
+ </View>
127
+ </Screen>
128
+ );
129
+ };