@frosted-ui/react-native 0.0.1-canary.100

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 (207) hide show
  1. package/README.md +160 -0
  2. package/dist/components/accordion.d.ts +21 -0
  3. package/dist/components/accordion.d.ts.map +1 -0
  4. package/dist/components/accordion.js +94 -0
  5. package/dist/components/accordion.js.map +1 -0
  6. package/dist/components/alert-dialog.d.ts +67 -0
  7. package/dist/components/alert-dialog.d.ts.map +1 -0
  8. package/dist/components/alert-dialog.js +170 -0
  9. package/dist/components/alert-dialog.js.map +1 -0
  10. package/dist/components/aspect-ratio.d.ts +4 -0
  11. package/dist/components/aspect-ratio.d.ts.map +1 -0
  12. package/dist/components/aspect-ratio.js +4 -0
  13. package/dist/components/aspect-ratio.js.map +1 -0
  14. package/dist/components/avatar.d.ts +23 -0
  15. package/dist/components/avatar.d.ts.map +1 -0
  16. package/dist/components/avatar.js +128 -0
  17. package/dist/components/avatar.js.map +1 -0
  18. package/dist/components/badge.d.ts +15 -0
  19. package/dist/components/badge.d.ts.map +1 -0
  20. package/dist/components/badge.js +81 -0
  21. package/dist/components/badge.js.map +1 -0
  22. package/dist/components/button.d.ts +14 -0
  23. package/dist/components/button.d.ts.map +1 -0
  24. package/dist/components/button.js +81 -0
  25. package/dist/components/button.js.map +1 -0
  26. package/dist/components/callout.d.ts +23 -0
  27. package/dist/components/callout.d.ts.map +1 -0
  28. package/dist/components/callout.js +128 -0
  29. package/dist/components/callout.js.map +1 -0
  30. package/dist/components/card.d.ts +9 -0
  31. package/dist/components/card.d.ts.map +1 -0
  32. package/dist/components/card.js +41 -0
  33. package/dist/components/card.js.map +1 -0
  34. package/dist/components/checkbox.d.ts +12 -0
  35. package/dist/components/checkbox.d.ts.map +1 -0
  36. package/dist/components/checkbox.js +100 -0
  37. package/dist/components/checkbox.js.map +1 -0
  38. package/dist/components/circular-progress.d.ts +21 -0
  39. package/dist/components/circular-progress.d.ts.map +1 -0
  40. package/dist/components/circular-progress.js +78 -0
  41. package/dist/components/circular-progress.js.map +1 -0
  42. package/dist/components/code.d.ts +18 -0
  43. package/dist/components/code.d.ts.map +1 -0
  44. package/dist/components/code.js +83 -0
  45. package/dist/components/code.js.map +1 -0
  46. package/dist/components/context-menu.d.ts +65 -0
  47. package/dist/components/context-menu.d.ts.map +1 -0
  48. package/dist/components/context-menu.js +441 -0
  49. package/dist/components/context-menu.js.map +1 -0
  50. package/dist/components/dialog.d.ts +49 -0
  51. package/dist/components/dialog.d.ts.map +1 -0
  52. package/dist/components/dialog.js +141 -0
  53. package/dist/components/dialog.js.map +1 -0
  54. package/dist/components/dropdown-menu.d.ts +65 -0
  55. package/dist/components/dropdown-menu.d.ts.map +1 -0
  56. package/dist/components/dropdown-menu.js +441 -0
  57. package/dist/components/dropdown-menu.js.map +1 -0
  58. package/dist/components/heading.d.ts +15 -0
  59. package/dist/components/heading.d.ts.map +1 -0
  60. package/dist/components/heading.js +8 -0
  61. package/dist/components/heading.js.map +1 -0
  62. package/dist/components/hover-card.d.ts +24 -0
  63. package/dist/components/hover-card.d.ts.map +1 -0
  64. package/dist/components/hover-card.js +49 -0
  65. package/dist/components/hover-card.js.map +1 -0
  66. package/dist/components/icon-button.d.ts +14 -0
  67. package/dist/components/icon-button.d.ts.map +1 -0
  68. package/dist/components/icon-button.js +81 -0
  69. package/dist/components/icon-button.js.map +1 -0
  70. package/dist/components/icon.d.ts +27 -0
  71. package/dist/components/icon.d.ts.map +1 -0
  72. package/dist/components/icon.js +30 -0
  73. package/dist/components/icon.js.map +1 -0
  74. package/dist/components/index.d.ts +37 -0
  75. package/dist/components/index.d.ts.map +1 -0
  76. package/dist/components/index.js +49 -0
  77. package/dist/components/index.js.map +1 -0
  78. package/dist/components/label.d.ts +8 -0
  79. package/dist/components/label.d.ts.map +1 -0
  80. package/dist/components/label.js +26 -0
  81. package/dist/components/label.js.map +1 -0
  82. package/dist/components/link.d.ts +19 -0
  83. package/dist/components/link.d.ts.map +1 -0
  84. package/dist/components/link.js +68 -0
  85. package/dist/components/link.js.map +1 -0
  86. package/dist/components/list.d.ts +37 -0
  87. package/dist/components/list.d.ts.map +1 -0
  88. package/dist/components/list.js +112 -0
  89. package/dist/components/list.js.map +1 -0
  90. package/dist/components/native-only-animated-view.d.ts +219 -0
  91. package/dist/components/native-only-animated-view.d.ts.map +1 -0
  92. package/dist/components/native-only-animated-view.js +26 -0
  93. package/dist/components/native-only-animated-view.js.map +1 -0
  94. package/dist/components/popover.d.ts +24 -0
  95. package/dist/components/popover.d.ts.map +1 -0
  96. package/dist/components/popover.js +52 -0
  97. package/dist/components/popover.js.map +1 -0
  98. package/dist/components/progress.d.ts +14 -0
  99. package/dist/components/progress.d.ts.map +1 -0
  100. package/dist/components/progress.js +52 -0
  101. package/dist/components/progress.js.map +1 -0
  102. package/dist/components/radio-group.d.ts +18 -0
  103. package/dist/components/radio-group.d.ts.map +1 -0
  104. package/dist/components/radio-group.js +122 -0
  105. package/dist/components/radio-group.js.map +1 -0
  106. package/dist/components/segmented-control.d.ts +21 -0
  107. package/dist/components/segmented-control.d.ts.map +1 -0
  108. package/dist/components/segmented-control.js +113 -0
  109. package/dist/components/segmented-control.js.map +1 -0
  110. package/dist/components/select.d.ts +58 -0
  111. package/dist/components/select.d.ts.map +1 -0
  112. package/dist/components/select.js +491 -0
  113. package/dist/components/select.js.map +1 -0
  114. package/dist/components/separator.d.ts +12 -0
  115. package/dist/components/separator.d.ts.map +1 -0
  116. package/dist/components/separator.js +47 -0
  117. package/dist/components/separator.js.map +1 -0
  118. package/dist/components/skeleton.d.ts +28 -0
  119. package/dist/components/skeleton.d.ts.map +1 -0
  120. package/dist/components/skeleton.js +137 -0
  121. package/dist/components/skeleton.js.map +1 -0
  122. package/dist/components/slider.d.ts +30 -0
  123. package/dist/components/slider.d.ts.map +1 -0
  124. package/dist/components/slider.js +248 -0
  125. package/dist/components/slider.js.map +1 -0
  126. package/dist/components/spinner.d.ts +17 -0
  127. package/dist/components/spinner.d.ts.map +1 -0
  128. package/dist/components/spinner.js +199 -0
  129. package/dist/components/spinner.js.map +1 -0
  130. package/dist/components/switch.d.ts +12 -0
  131. package/dist/components/switch.d.ts.map +1 -0
  132. package/dist/components/switch.js +188 -0
  133. package/dist/components/switch.js.map +1 -0
  134. package/dist/components/tabs.d.ts +26 -0
  135. package/dist/components/tabs.d.ts.map +1 -0
  136. package/dist/components/tabs.js +125 -0
  137. package/dist/components/tabs.js.map +1 -0
  138. package/dist/components/text-area.d.ts +16 -0
  139. package/dist/components/text-area.d.ts.map +1 -0
  140. package/dist/components/text-area.js +121 -0
  141. package/dist/components/text-area.js.map +1 -0
  142. package/dist/components/text-field.d.ts +35 -0
  143. package/dist/components/text-field.d.ts.map +1 -0
  144. package/dist/components/text-field.js +300 -0
  145. package/dist/components/text-field.js.map +1 -0
  146. package/dist/components/text.d.ts +23 -0
  147. package/dist/components/text.d.ts.map +1 -0
  148. package/dist/components/text.js +44 -0
  149. package/dist/components/text.js.map +1 -0
  150. package/dist/components/tooltip.d.ts +24 -0
  151. package/dist/components/tooltip.d.ts.map +1 -0
  152. package/dist/components/tooltip.js +63 -0
  153. package/dist/components/tooltip.js.map +1 -0
  154. package/dist/index.d.ts +9 -0
  155. package/dist/index.d.ts.map +1 -0
  156. package/dist/index.js +18 -0
  157. package/dist/index.js.map +1 -0
  158. package/dist/lib/button-styles.d.ts +13 -0
  159. package/dist/lib/button-styles.d.ts.map +1 -0
  160. package/dist/lib/button-styles.js +115 -0
  161. package/dist/lib/button-styles.js.map +1 -0
  162. package/dist/lib/color-utils.d.ts +26 -0
  163. package/dist/lib/color-utils.d.ts.map +1 -0
  164. package/dist/lib/color-utils.js +48 -0
  165. package/dist/lib/color-utils.js.map +1 -0
  166. package/dist/lib/dialog-styles.d.ts +42 -0
  167. package/dist/lib/dialog-styles.d.ts.map +1 -0
  168. package/dist/lib/dialog-styles.js +162 -0
  169. package/dist/lib/dialog-styles.js.map +1 -0
  170. package/dist/lib/full-window-overlay.d.ts +11 -0
  171. package/dist/lib/full-window-overlay.d.ts.map +1 -0
  172. package/dist/lib/full-window-overlay.js +16 -0
  173. package/dist/lib/full-window-overlay.js.map +1 -0
  174. package/dist/lib/panel-styles.d.ts +32 -0
  175. package/dist/lib/panel-styles.d.ts.map +1 -0
  176. package/dist/lib/panel-styles.js +96 -0
  177. package/dist/lib/panel-styles.js.map +1 -0
  178. package/dist/lib/text-input-styles.d.ts +36 -0
  179. package/dist/lib/text-input-styles.d.ts.map +1 -0
  180. package/dist/lib/text-input-styles.js +88 -0
  181. package/dist/lib/text-input-styles.js.map +1 -0
  182. package/dist/lib/theme-context.d.ts +80 -0
  183. package/dist/lib/theme-context.d.ts.map +1 -0
  184. package/dist/lib/theme-context.js +97 -0
  185. package/dist/lib/theme-context.js.map +1 -0
  186. package/dist/lib/theme-tokens.d.ts +222 -0
  187. package/dist/lib/theme-tokens.d.ts.map +1 -0
  188. package/dist/lib/theme-tokens.js +158 -0
  189. package/dist/lib/theme-tokens.js.map +1 -0
  190. package/dist/lib/theme.d.ts +40 -0
  191. package/dist/lib/theme.d.ts.map +1 -0
  192. package/dist/lib/theme.js +194 -0
  193. package/dist/lib/theme.js.map +1 -0
  194. package/dist/lib/types.d.ts +18 -0
  195. package/dist/lib/types.d.ts.map +1 -0
  196. package/dist/lib/types.js +2 -0
  197. package/dist/lib/types.js.map +1 -0
  198. package/dist/lib/use-theme-tokens.d.ts +593 -0
  199. package/dist/lib/use-theme-tokens.d.ts.map +1 -0
  200. package/dist/lib/use-theme-tokens.js +44 -0
  201. package/dist/lib/use-theme-tokens.js.map +1 -0
  202. package/docs/llm/COLOR_SYSTEM.md +799 -0
  203. package/docs/llm/COMPONENTS.md +1329 -0
  204. package/docs/llm/DESIGN_PATTERNS.md +2567 -0
  205. package/docs/llm/README.md +118 -0
  206. package/docs/llm/TYPOGRAPHY.md +516 -0
  207. package/package.json +106 -0
@@ -0,0 +1,199 @@
1
+ import { useThemeTokens } from '../lib/use-theme-tokens';
2
+ import * as React from 'react';
3
+ import { Platform, View } from 'react-native';
4
+ import Animated, { Easing, useAnimatedStyle, useSharedValue, withRepeat, withSequence, withTiming, } from 'react-native-reanimated';
5
+ // ============================================================================
6
+ // Size helpers
7
+ // ============================================================================
8
+ function getSpinnerSize(size) {
9
+ switch (size) {
10
+ case '1':
11
+ return 12; // --space-3
12
+ case '2':
13
+ return 16; // --space-4
14
+ case '3':
15
+ return 20; // 1.25 * --space-4
16
+ case '4':
17
+ return 24; // --space-5
18
+ case '5':
19
+ return 32; // --space-6
20
+ case '6':
21
+ return 40; // --space-7
22
+ default:
23
+ return 16;
24
+ }
25
+ }
26
+ // ============================================================================
27
+ // Spinner Leaf Component
28
+ // ============================================================================
29
+ const ANIMATION_DURATION = 800;
30
+ const NUM_LEAVES = 8;
31
+ function SpinnerLeaf({ index, spinnerSize, color }) {
32
+ // Web CSS uses negative animation-delay: -(800 - index * 100)ms
33
+ // This means each leaf starts at a different phase of the animation
34
+ // Leaf 0: starts at 0% through cycle (opacity 1)
35
+ // Leaf 1: starts at 87.5% through cycle
36
+ // ...
37
+ // Leaf 7: starts at 12.5% through cycle
38
+ // Calculate where in the animation cycle this leaf should start
39
+ // Phase goes from 0 to 1 over the animation duration
40
+ // Web delay is -(DURATION - index * DURATION/8), so time elapsed is (DURATION - index * DURATION/8)
41
+ // Phase = (8 - index) / 8 for leaf at index (wrapping around)
42
+ const phaseOffset = ((NUM_LEAVES - index) % NUM_LEAVES) / NUM_LEAVES;
43
+ // Opacity goes from 1 to 0.25 (range of 0.75)
44
+ // At phase p: opacity = 1 - p * 0.75
45
+ const initialOpacity = 1 - phaseOffset * 0.75;
46
+ const opacity = useSharedValue(initialOpacity);
47
+ // Calculate how much time remains in the first cycle
48
+ const remainingDuration = ANIMATION_DURATION * (1 - phaseOffset);
49
+ React.useEffect(() => {
50
+ // First, complete the current cycle from the starting point
51
+ // Then repeat the full cycle infinitely
52
+ opacity.value = withSequence(
53
+ // Complete the first partial cycle
54
+ withTiming(0.25, {
55
+ duration: remainingDuration,
56
+ easing: Easing.linear,
57
+ }),
58
+ // Then repeat full cycles
59
+ withRepeat(withSequence(
60
+ // Jump back to 1 instantly
61
+ withTiming(1, { duration: 0 }),
62
+ // Animate to 0.25
63
+ withTiming(0.25, {
64
+ duration: ANIMATION_DURATION,
65
+ easing: Easing.linear,
66
+ })), -1, // infinite
67
+ false));
68
+ }, [opacity, remainingDuration]);
69
+ const animatedStyle = useAnimatedStyle(() => ({
70
+ opacity: opacity.value,
71
+ }));
72
+ // Calculate rotation for this leaf
73
+ const rotation = index * 45; // 360 / 8 = 45 degrees per leaf
74
+ // Leaf dimensions
75
+ const leafWidth = spinnerSize * 0.125; // 12.5%
76
+ const leafHeight = spinnerSize;
77
+ const dotHeight = leafHeight * 0.3; // 30%
78
+ const borderRadius = Math.max(2, leafWidth / 2);
79
+ return (<Animated.View style={[
80
+ {
81
+ position: 'absolute',
82
+ width: leafWidth,
83
+ height: leafHeight,
84
+ left: (spinnerSize - leafWidth) / 2,
85
+ top: 0,
86
+ alignItems: 'center',
87
+ transform: [{ rotate: `${rotation}deg` }],
88
+ transformOrigin: 'center center',
89
+ },
90
+ animatedStyle,
91
+ ]}>
92
+ <View style={{
93
+ width: '100%',
94
+ height: dotHeight,
95
+ borderRadius,
96
+ backgroundColor: color,
97
+ }}/>
98
+ </Animated.View>);
99
+ }
100
+ // Web-specific CSS animation version for better performance
101
+ function SpinnerLeafWeb({ index, spinnerSize, color }) {
102
+ const rotation = index * 45;
103
+ const leafWidth = spinnerSize * 0.125;
104
+ const leafHeight = spinnerSize;
105
+ const dotHeight = leafHeight * 0.3;
106
+ const borderRadius = Math.max(2, leafWidth / 2);
107
+ // Animation delay (negative to start mid-animation)
108
+ const animationDelay = -(ANIMATION_DURATION - index * (ANIMATION_DURATION / NUM_LEAVES));
109
+ return (<View style={{
110
+ position: 'absolute',
111
+ width: leafWidth,
112
+ height: leafHeight,
113
+ left: (spinnerSize - leafWidth) / 2,
114
+ top: 0,
115
+ alignItems: 'center',
116
+ transform: [{ rotate: `${rotation}deg` }],
117
+ transformOrigin: 'center center',
118
+ animation: `spinner-leaf-fade ${ANIMATION_DURATION}ms linear infinite`,
119
+ animationDelay: `${animationDelay}ms`,
120
+ }}>
121
+ <View style={{
122
+ width: '100%',
123
+ height: dotHeight,
124
+ borderRadius,
125
+ backgroundColor: color,
126
+ }}/>
127
+ </View>);
128
+ }
129
+ // ============================================================================
130
+ // Spinner Component
131
+ // ============================================================================
132
+ function Spinner({ size = '2', loading = true, children, color, style }) {
133
+ const { colors } = useThemeTokens();
134
+ const spinnerSize = getSpinnerSize(size);
135
+ // Use gray-12 as default color (matches text color in both light/dark modes)
136
+ const resolvedColor = color ?? colors.palettes.gray['12'];
137
+ // Inject CSS keyframes for web
138
+ React.useEffect(() => {
139
+ if (Platform.OS === 'web') {
140
+ const styleId = 'frosted-ui-spinner-keyframes';
141
+ if (!document.getElementById(styleId)) {
142
+ const styleEl = document.createElement('style');
143
+ styleEl.id = styleId;
144
+ styleEl.textContent = `
145
+ @keyframes spinner-leaf-fade {
146
+ from { opacity: 1; }
147
+ to { opacity: 0.25; }
148
+ }
149
+ `;
150
+ document.head.appendChild(styleEl);
151
+ }
152
+ }
153
+ }, []);
154
+ if (!loading) {
155
+ return <>{children}</>;
156
+ }
157
+ const LeafComponent = Platform.OS === 'web' ? SpinnerLeafWeb : SpinnerLeaf;
158
+ const spinner = (<View style={[
159
+ {
160
+ width: spinnerSize,
161
+ height: spinnerSize,
162
+ position: 'relative',
163
+ opacity: 0.65,
164
+ },
165
+ style,
166
+ ]}>
167
+ {Array.from({ length: NUM_LEAVES }).map((_, index) => (<LeafComponent key={index} index={index} spinnerSize={spinnerSize} color={resolvedColor}/>))}
168
+ </View>);
169
+ if (children === undefined) {
170
+ return spinner;
171
+ }
172
+ // Wrap children with spinner overlay
173
+ return (<View style={{
174
+ position: 'relative',
175
+ alignItems: 'center',
176
+ justifyContent: 'center',
177
+ }}>
178
+ {/* Hidden children for layout */}
179
+ <View style={{ opacity: 0 }} aria-hidden pointerEvents="none">
180
+ {children}
181
+ </View>
182
+
183
+ {/* Spinner overlay */}
184
+ <View style={{
185
+ position: 'absolute',
186
+ top: 0,
187
+ left: 0,
188
+ right: 0,
189
+ bottom: 0,
190
+ alignItems: 'center',
191
+ justifyContent: 'center',
192
+ }}>
193
+ {spinner}
194
+ </View>
195
+ </View>);
196
+ }
197
+ Spinner.displayName = 'Spinner';
198
+ export { Spinner };
199
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/components/spinner.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Color } from '../lib/types';
2
+ import * as SwitchPrimitive from '@rn-primitives/switch';
3
+ import * as React from 'react';
4
+ type SwitchSize = '1' | '2' | '3';
5
+ type SwitchProps = Omit<SwitchPrimitive.RootProps, 'children'> & {
6
+ size?: SwitchSize;
7
+ color?: Color;
8
+ };
9
+ declare function Switch({ size, color, checked, disabled, onCheckedChange, onFocus, onBlur, ...props }: SwitchProps): React.JSX.Element;
10
+ export { Switch };
11
+ export type { SwitchProps };
12
+ //# sourceMappingURL=switch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../src/components/switch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,KAAK,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AA0ClC,KAAK,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG;IAC/D,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,iBAAS,MAAM,CAAC,EACd,IAAU,EACV,KAAK,EACL,OAAO,EACP,QAAQ,EACR,eAAe,EACf,OAAO,EACP,MAAM,EACN,GAAG,KAAK,EACT,EAAE,WAAW,qBA8Kb;AAED,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,188 @@
1
+ import { useThemeTokens } from '../lib/use-theme-tokens';
2
+ import * as SwitchPrimitive from '@rn-primitives/switch';
3
+ import * as React from 'react';
4
+ import { Platform, View } from 'react-native';
5
+ // Size styles from CSS:
6
+ // Size 1: --switch-height: var(--space-4) = 16px
7
+ // Size 2: --switch-height: var(--space-5) = 24px
8
+ // Size 3: --switch-height: var(--space-6) = 32px
9
+ // --switch-width: calc(var(--switch-height) * 1.75)
10
+ // --switch-padding: 1px
11
+ // --switch-thumb-size: calc(var(--switch-height) - var(--switch-padding) * 2)
12
+ function getSizeStyle(size) {
13
+ const padding = 1;
14
+ switch (size) {
15
+ case '1': {
16
+ const height = 16;
17
+ const width = height * 1.75; // 28
18
+ const thumbSize = height - padding * 2; // 14
19
+ const translateX = width - height; // 12
20
+ return { height, width, padding, thumbSize, translateX };
21
+ }
22
+ case '2': {
23
+ const height = 24;
24
+ const width = height * 1.75; // 42
25
+ const thumbSize = height - padding * 2; // 22
26
+ const translateX = width - height; // 18
27
+ return { height, width, padding, thumbSize, translateX };
28
+ }
29
+ case '3': {
30
+ const height = 32;
31
+ const width = height * 1.75; // 56
32
+ const thumbSize = height - padding * 2; // 30
33
+ const translateX = width - height; // 24
34
+ return { height, width, padding, thumbSize, translateX };
35
+ }
36
+ }
37
+ }
38
+ function Switch({ size = '2', color, checked, disabled, onCheckedChange, onFocus, onBlur, ...props }) {
39
+ const { colors } = useThemeTokens();
40
+ const [focused, setFocused] = React.useState(false);
41
+ const gray = colors.palettes.gray;
42
+ // Semantic colors (accent, danger, etc.) are added by useThemeTokens
43
+ // Fallback to gray if palette key doesn't exist
44
+ const palette = colors.palettes[color ?? 'accent'] ?? gray;
45
+ const { height, width, padding, thumbSize, translateX } = getSizeStyle(size);
46
+ // Track base style
47
+ const trackBaseStyle = {
48
+ width,
49
+ height,
50
+ borderRadius: height / 2,
51
+ padding,
52
+ justifyContent: 'center',
53
+ };
54
+ // Track state-based styles
55
+ let trackStateStyle;
56
+ if (disabled) {
57
+ // Disabled state - same inset shadow as unchecked
58
+ trackStateStyle = {
59
+ backgroundColor: gray.a3,
60
+ ...(Platform.OS === 'web' && {
61
+ boxShadow: `inset 0 0 0 1px ${gray.a3}, inset 0 1.5px 2px 0 ${gray.a2}`,
62
+ }),
63
+ };
64
+ }
65
+ else if (checked) {
66
+ // Checked state - accent background with inset shadow for inner border
67
+ trackStateStyle = {
68
+ backgroundColor: palette['9'],
69
+ ...(Platform.OS === 'web' && {
70
+ boxShadow: `inset 0 0 0 1px ${gray.a3}, inset 0 0 0 1px ${palette.a4}, inset 0 1.5px 2px 0 rgba(0,0,0,0.1)`,
71
+ }),
72
+ };
73
+ }
74
+ else {
75
+ // Unchecked state - gray background with inset shadow (--shadow-1)
76
+ // --shadow-1: inset 0 0 0 1px var(--gray-a5), inset 0 1.5px 2px 0 var(--gray-a2)
77
+ trackStateStyle = {
78
+ backgroundColor: gray.a4,
79
+ ...(Platform.OS === 'web' && {
80
+ boxShadow: `inset 0 0 0 1px ${gray.a5}, inset 0 1.5px 2px 0 ${gray.a2}`,
81
+ }),
82
+ };
83
+ }
84
+ // Focus style
85
+ const focusStyle = focused && !disabled
86
+ ? {
87
+ outlineWidth: 2,
88
+ outlineStyle: 'solid',
89
+ outlineColor: palette.a8,
90
+ outlineOffset: 2,
91
+ }
92
+ : undefined;
93
+ const trackCombinedStyle = {
94
+ ...trackBaseStyle,
95
+ ...trackStateStyle,
96
+ ...focusStyle,
97
+ };
98
+ // Thumb base style
99
+ const thumbBaseStyle = {
100
+ width: thumbSize,
101
+ height: thumbSize,
102
+ borderRadius: thumbSize / 2,
103
+ backgroundColor: 'white',
104
+ };
105
+ // Thumb shadow based on state
106
+ let thumbShadowStyle;
107
+ if (disabled) {
108
+ // Disabled thumb - visible border like other states
109
+ thumbShadowStyle = {
110
+ backgroundColor: gray['2'],
111
+ ...(Platform.OS === 'web'
112
+ ? {
113
+ boxShadow: `0 0 0 1px ${gray.a3}, 0 1px 3px rgba(0,0,0,0.05)`,
114
+ }
115
+ : {
116
+ shadowColor: '#000',
117
+ shadowOpacity: 0.05,
118
+ shadowOffset: { width: 0, height: 1 },
119
+ shadowRadius: 2,
120
+ }),
121
+ };
122
+ }
123
+ else if (checked) {
124
+ // Checked thumb shadow - includes accent border and left shadow
125
+ thumbShadowStyle =
126
+ Platform.OS === 'web'
127
+ ? {
128
+ boxShadow: `0 1px 3px rgba(0,0,0,0.1), 0 2px 4px -1px rgba(0,0,0,0.05), 0 0 0 1px rgba(0,0,0,0.05), 0 0 0 1px ${palette.a4}, -1px 0 1px rgba(0,0,0,0.1)`,
129
+ }
130
+ : {
131
+ shadowColor: '#000',
132
+ shadowOpacity: 0.15,
133
+ shadowOffset: { width: -1, height: 1 },
134
+ shadowRadius: 2,
135
+ elevation: 2,
136
+ };
137
+ }
138
+ else {
139
+ // Unchecked thumb shadow
140
+ thumbShadowStyle =
141
+ Platform.OS === 'web'
142
+ ? {
143
+ boxShadow: `0 1px 3px rgba(0,0,0,0.12), 0 2px 4px -1px rgba(0,0,0,0.05), 0 0 0 1px rgba(0,0,0,0.08)`,
144
+ }
145
+ : {
146
+ shadowColor: '#000',
147
+ shadowOpacity: 0.15,
148
+ shadowOffset: { width: 0, height: 1 },
149
+ shadowRadius: 2,
150
+ elevation: 2,
151
+ };
152
+ }
153
+ // Thumb position based on checked state
154
+ const thumbTransformStyle = {
155
+ transform: [{ translateX: checked ? translateX : 0 }],
156
+ };
157
+ const thumbCombinedStyle = {
158
+ ...thumbBaseStyle,
159
+ ...thumbShadowStyle,
160
+ ...thumbTransformStyle,
161
+ };
162
+ const handleFocus = React.useCallback((e) => {
163
+ if (Platform.OS === 'web') {
164
+ const target = e.target;
165
+ if (target?.matches?.(':focus-visible')) {
166
+ setFocused(true);
167
+ }
168
+ }
169
+ onFocus?.(e);
170
+ }, [onFocus]);
171
+ const handleBlur = React.useCallback((e) => {
172
+ setFocused(false);
173
+ onBlur?.(e);
174
+ }, [onBlur]);
175
+ // Reset default focus styles
176
+ const rootStyle = {
177
+ outlineWidth: 0,
178
+ };
179
+ return (<SwitchPrimitive.Root checked={checked} onCheckedChange={onCheckedChange} disabled={disabled} onFocus={handleFocus} onBlur={handleBlur} style={rootStyle} {...props}>
180
+ <View style={trackCombinedStyle}>
181
+ <SwitchPrimitive.Thumb>
182
+ <View style={thumbCombinedStyle}/>
183
+ </SwitchPrimitive.Thumb>
184
+ </View>
185
+ </SwitchPrimitive.Root>);
186
+ }
187
+ export { Switch };
188
+ //# sourceMappingURL=switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switch.js","sourceRoot":"","sources":["../../src/components/switch.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { Color } from '../lib/types';
2
+ import * as TabsPrimitive from '@rn-primitives/tabs';
3
+ import * as React from 'react';
4
+ type TabsSize = '1' | '2';
5
+ type TabsRootProps = TabsPrimitive.RootProps & {
6
+ size?: TabsSize;
7
+ color?: Color;
8
+ };
9
+ declare function TabsRoot({ size, color, value, onValueChange, children, ...props }: TabsRootProps): React.JSX.Element;
10
+ type TabsListProps = TabsPrimitive.ListProps;
11
+ declare function TabsList({ children, ...props }: TabsListProps): React.JSX.Element;
12
+ type TabsTriggerProps = Omit<TabsPrimitive.TriggerProps, 'children'> & {
13
+ children?: React.ReactNode;
14
+ };
15
+ declare function TabsTrigger({ value, children, ...props }: TabsTriggerProps): React.JSX.Element;
16
+ type TabsContentProps = TabsPrimitive.ContentProps;
17
+ declare function TabsContent({ ...props }: TabsContentProps): React.JSX.Element;
18
+ declare const Tabs: {
19
+ Root: typeof TabsRoot;
20
+ List: typeof TabsList;
21
+ Trigger: typeof TabsTrigger;
22
+ Content: typeof TabsContent;
23
+ };
24
+ export { Tabs, TabsContent, TabsList, TabsRoot, TabsTrigger };
25
+ export type { TabsContentProps, TabsListProps, TabsRootProps, TabsTriggerProps };
26
+ //# sourceMappingURL=tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/components/tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAgD1B,KAAK,aAAa,GAAG,aAAa,CAAC,SAAS,GAAG;IAC7C,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,iBAAS,QAAQ,CAAC,EAAE,IAAU,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,qBAa/F;AAED,KAAK,aAAa,GAAG,aAAa,CAAC,SAAS,CAAC;AAE7C,iBAAS,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,qBAoBtD;AAiED,KAAK,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG;IACrE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAEF,iBAAS,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,qBAcnE;AAED,KAAK,gBAAgB,GAAG,aAAa,CAAC,YAAY,CAAC;AAEnD,iBAAS,WAAW,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,qBAElD;AAED,QAAA,MAAM,IAAI;;;;;CAKT,CAAC;AAEF,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,125 @@
1
+ import { Text, TextStyleContext } from '../components/text';
2
+ import { useThemeTokens } from '../lib/use-theme-tokens';
3
+ import * as TabsPrimitive from '@rn-primitives/tabs';
4
+ import * as React from 'react';
5
+ import { View } from 'react-native';
6
+ const TabsContext = React.createContext({
7
+ size: '2',
8
+ color: 'accent',
9
+ value: undefined,
10
+ });
11
+ // Size styles from CSS:
12
+ // Size 1: height: 36px, font-size-1
13
+ // Size 2: height: var(--space-7) = 40px, font-size-2
14
+ function getListHeight(size) {
15
+ switch (size) {
16
+ case '1':
17
+ return 36;
18
+ case '2':
19
+ return 40;
20
+ }
21
+ }
22
+ function getTextSize(size) {
23
+ switch (size) {
24
+ case '1':
25
+ return '1';
26
+ case '2':
27
+ return '2';
28
+ }
29
+ }
30
+ function getTriggerPadding(size) {
31
+ switch (size) {
32
+ case '1':
33
+ return { paddingX: 4, innerPaddingX: 6, innerPaddingY: 4 }; // space-1 = 4px
34
+ case '2':
35
+ return { paddingX: 4, innerPaddingX: 10, innerPaddingY: 4 }; // 1.25 * space-2 = 10px
36
+ }
37
+ }
38
+ function TabsRoot({ size = '2', color, value, onValueChange, children, ...props }) {
39
+ const contextValue = React.useMemo(() => ({ size, color: color ?? 'accent', value }), [size, color, value]);
40
+ return (<TabsContext.Provider value={contextValue}>
41
+ <TabsPrimitive.Root value={value} onValueChange={onValueChange} {...props}>
42
+ {children}
43
+ </TabsPrimitive.Root>
44
+ </TabsContext.Provider>);
45
+ }
46
+ function TabsList({ children, ...props }) {
47
+ const { size } = React.useContext(TabsContext);
48
+ const { colors } = useThemeTokens();
49
+ const gray = colors.palettes.gray;
50
+ const height = getListHeight(size);
51
+ const listStyle = {
52
+ flexDirection: 'row',
53
+ height,
54
+ borderBottomWidth: 1,
55
+ borderBottomColor: gray.a5,
56
+ alignItems: 'stretch',
57
+ };
58
+ return (<TabsPrimitive.List {...props}>
59
+ <View style={listStyle}>{children}</View>
60
+ </TabsPrimitive.List>);
61
+ }
62
+ function TabsTriggerInner({ value, hovered, children }) {
63
+ const { size, color, value: activeValue } = React.useContext(TabsContext);
64
+ const { colors } = useThemeTokens();
65
+ const gray = colors.palettes.gray;
66
+ // Use the color from context, falling back to accent palette
67
+ const palette = colors.palettes[color] ?? gray;
68
+ const isActive = value === activeValue;
69
+ const { paddingX, innerPaddingX, innerPaddingY } = getTriggerPadding(size);
70
+ const textSize = getTextSize(size);
71
+ // Text color - gray-12 on hover or active, gray-a11 otherwise
72
+ const textColor = isActive || hovered ? gray['12'] : gray.a11;
73
+ // Trigger wrapper style - stretch to full height
74
+ const triggerStyle = {
75
+ paddingHorizontal: paddingX,
76
+ flexShrink: 0,
77
+ justifyContent: 'center',
78
+ alignItems: 'center',
79
+ position: 'relative',
80
+ height: '100%',
81
+ };
82
+ // Inner content style with hover background
83
+ const innerStyle = {
84
+ paddingHorizontal: innerPaddingX,
85
+ paddingVertical: innerPaddingY,
86
+ borderRadius: size === '1' ? 4 : 6, // radius-2 or radius-3
87
+ backgroundColor: hovered ? gray.a3 : undefined,
88
+ };
89
+ // Active indicator (bottom border)
90
+ const activeIndicatorStyle = {
91
+ position: 'absolute',
92
+ bottom: -1,
93
+ left: 0,
94
+ right: 0,
95
+ height: 2,
96
+ backgroundColor: palette['10'],
97
+ };
98
+ // Wrap string children in Text component
99
+ const content = typeof children === 'string' ? <Text>{children}</Text> : children;
100
+ return (<TextStyleContext.Provider value={{ size: textSize, weight: isActive ? 'medium' : 'regular', color: textColor }}>
101
+ <View style={triggerStyle}>
102
+ <View style={innerStyle}>{content}</View>
103
+ {isActive && <View style={activeIndicatorStyle}/>}
104
+ </View>
105
+ </TextStyleContext.Provider>);
106
+ }
107
+ function TabsTrigger({ value, children, ...props }) {
108
+ const [hovered, setHovered] = React.useState(false);
109
+ return (<TabsPrimitive.Trigger value={value} onHoverIn={() => setHovered(true)} onHoverOut={() => setHovered(false)} {...props}>
110
+ <TabsTriggerInner value={value} hovered={hovered}>
111
+ {children}
112
+ </TabsTriggerInner>
113
+ </TabsPrimitive.Trigger>);
114
+ }
115
+ function TabsContent({ ...props }) {
116
+ return <TabsPrimitive.Content {...props}/>;
117
+ }
118
+ const Tabs = {
119
+ Root: TabsRoot,
120
+ List: TabsList,
121
+ Trigger: TabsTrigger,
122
+ Content: TabsContent,
123
+ };
124
+ export { Tabs, TabsContent, TabsList, TabsRoot, TabsTrigger };
125
+ //# sourceMappingURL=tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/components/tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAkB,MAAM,cAAc,CAAC;AAUpD,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAmB;IACxD,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,SAAS;CACjB,CAAC,CAAC;AAEH,wBAAwB;AACxB,oCAAoC;AACpC,qDAAqD;AACrD,SAAS,aAAa,CAAC,IAAc;IACnC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,GAAG;YACN,OAAO,EAAE,CAAC;QACZ,KAAK,GAAG;YACN,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAc;IACjC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,GAAG;YACN,OAAO,GAAG,CAAC;QACb,KAAK,GAAG;YACN,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAc;IAKvC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,GAAG;YACN,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,gBAAgB;QAC9E,KAAK,GAAG;YACN,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,wBAAwB;IACzF,CAAC;AACH,CAAC;AAOD,SAAS,QAAQ,CAAC,EAAE,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAiB;IAC9F,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAChC,GAAqB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK,EAAE,CAAC,EACnE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CACrB,CAAC;IAEF,OAAO,CACL,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CACxC;MAAA,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,KAAK,CAAC,CACxE;QAAA,CAAC,QAAQ,CACX;MAAA,EAAE,aAAa,CAAC,IAAI,CACtB;IAAA,EAAE,WAAW,CAAC,QAAQ,CAAC,CACxB,CAAC;AACJ,CAAC;AAID,SAAS,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAiB;IACrD,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAElC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAEnC,MAAM,SAAS,GAAc;QAC3B,aAAa,EAAE,KAAK;QACpB,MAAM;QACN,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,IAAI,CAAC,EAAE;QAC1B,UAAU,EAAE,SAAS;KACtB,CAAC;IAEF,OAAO,CACL,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAC5B;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAC1C;IAAA,EAAE,aAAa,CAAC,IAAI,CAAC,CACtB,CAAC;AACJ,CAAC;AAQD,SAAS,gBAAgB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAyB;IAC3E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC1E,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IAEpC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAClC,6DAA6D;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IAE/C,MAAM,QAAQ,GAAG,KAAK,KAAK,WAAW,CAAC;IACvC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAEnC,8DAA8D;IAC9D,MAAM,SAAS,GAAG,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IAE9D,iDAAiD;IACjD,MAAM,YAAY,GAAc;QAC9B,iBAAiB,EAAE,QAAQ;QAC3B,UAAU,EAAE,CAAC;QACb,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,QAAQ;QACpB,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,MAAM;KACf,CAAC;IAEF,4CAA4C;IAC5C,MAAM,UAAU,GAAc;QAC5B,iBAAiB,EAAE,aAAa;QAChC,eAAe,EAAE,aAAa;QAC9B,YAAY,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,uBAAuB;QAC3D,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;KAC/C,CAAC;IAEF,mCAAmC;IACnC,MAAM,oBAAoB,GAAc;QACtC,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,CAAC,CAAC;QACV,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC;KAC/B,CAAC;IAEF,yCAAyC;IACzC,MAAM,OAAO,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAElF,OAAO,CACL,CAAC,gBAAgB,CAAC,QAAQ,CACxB,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CACrF;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CACxB;QAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CACxC;QAAA,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,EAAG,CACpD;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAC7B,CAAC;AACJ,CAAC;AAMD,SAAS,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAoB;IAClE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,OAAO,CACL,CAAC,aAAa,CAAC,OAAO,CACpB,KAAK,CAAC,CAAC,KAAK,CAAC,CACb,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAClC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CACpC,IAAI,KAAK,CAAC,CACV;MAAA,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAC/C;QAAA,CAAC,QAAQ,CACX;MAAA,EAAE,gBAAgB,CACpB;IAAA,EAAE,aAAa,CAAC,OAAO,CAAC,CACzB,CAAC;AACJ,CAAC;AAID,SAAS,WAAW,CAAC,EAAE,GAAG,KAAK,EAAoB;IACjD,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,EAAG,CAAC;AAC9C,CAAC;AAED,MAAM,IAAI,GAAG;IACX,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;CACrB,CAAC;AAEF,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { type TextInputSize, type TextInputVariant } from '../lib/text-input-styles';
2
+ import type { Color } from '../lib/types';
3
+ import * as React from 'react';
4
+ import { type TextInputProps, type TextStyle } from 'react-native';
5
+ type TextAreaSize = TextInputSize;
6
+ type TextAreaVariant = TextInputVariant;
7
+ interface TextAreaProps extends Omit<TextInputProps, 'style'> {
8
+ size?: TextAreaSize;
9
+ variant?: TextAreaVariant;
10
+ color?: Color;
11
+ style?: TextStyle;
12
+ }
13
+ declare function TextArea({ size, variant, color, style, editable, ...props }: TextAreaProps): React.JSX.Element;
14
+ export { TextArea };
15
+ export type { TextAreaProps, TextAreaSize, TextAreaVariant };
16
+ //# sourceMappingURL=text-area.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-area.d.ts","sourceRoot":"","sources":["../../src/components/text-area.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,cAAc,CAAC;AAStB,KAAK,YAAY,GAAG,aAAa,CAAC;AAClC,KAAK,eAAe,GAAG,gBAAgB,CAAC;AA0DxC,UAAU,aAAc,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;IAC3D,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,iBAAS,QAAQ,CAAC,EAChB,IAAU,EACV,OAAmB,EACnB,KAAK,EACL,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,aAAa,qBA2Ff;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC"}