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

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 (188) hide show
  1. package/README.md +102 -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 +143 -0
  17. package/dist/components/avatar.js.map +1 -0
  18. package/dist/components/badge.d.ts +17 -0
  19. package/dist/components/badge.d.ts.map +1 -0
  20. package/dist/components/badge.js +95 -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 +85 -0
  25. package/dist/components/button.js.map +1 -0
  26. package/dist/components/callout.d.ts +25 -0
  27. package/dist/components/callout.d.ts.map +1 -0
  28. package/dist/components/callout.js +146 -0
  29. package/dist/components/callout.js.map +1 -0
  30. package/dist/components/card.d.ts +10 -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 +13 -0
  35. package/dist/components/checkbox.d.ts.map +1 -0
  36. package/dist/components/checkbox.js +116 -0
  37. package/dist/components/checkbox.js.map +1 -0
  38. package/dist/components/code.d.ts +20 -0
  39. package/dist/components/code.d.ts.map +1 -0
  40. package/dist/components/code.js +83 -0
  41. package/dist/components/code.js.map +1 -0
  42. package/dist/components/context-menu.d.ts +65 -0
  43. package/dist/components/context-menu.d.ts.map +1 -0
  44. package/dist/components/context-menu.js +441 -0
  45. package/dist/components/context-menu.js.map +1 -0
  46. package/dist/components/dialog.d.ts +49 -0
  47. package/dist/components/dialog.d.ts.map +1 -0
  48. package/dist/components/dialog.js +141 -0
  49. package/dist/components/dialog.js.map +1 -0
  50. package/dist/components/dropdown-menu.d.ts +65 -0
  51. package/dist/components/dropdown-menu.d.ts.map +1 -0
  52. package/dist/components/dropdown-menu.js +441 -0
  53. package/dist/components/dropdown-menu.js.map +1 -0
  54. package/dist/components/heading.d.ts +15 -0
  55. package/dist/components/heading.d.ts.map +1 -0
  56. package/dist/components/heading.js +8 -0
  57. package/dist/components/heading.js.map +1 -0
  58. package/dist/components/hover-card.d.ts +24 -0
  59. package/dist/components/hover-card.d.ts.map +1 -0
  60. package/dist/components/hover-card.js +49 -0
  61. package/dist/components/hover-card.js.map +1 -0
  62. package/dist/components/icon-button.d.ts +14 -0
  63. package/dist/components/icon-button.d.ts.map +1 -0
  64. package/dist/components/icon-button.js +85 -0
  65. package/dist/components/icon-button.js.map +1 -0
  66. package/dist/components/icon.d.ts +28 -0
  67. package/dist/components/icon.d.ts.map +1 -0
  68. package/dist/components/icon.js +45 -0
  69. package/dist/components/icon.js.map +1 -0
  70. package/dist/components/index.d.ts +33 -0
  71. package/dist/components/index.d.ts.map +1 -0
  72. package/dist/components/index.js +45 -0
  73. package/dist/components/index.js.map +1 -0
  74. package/dist/components/label.d.ts +8 -0
  75. package/dist/components/label.d.ts.map +1 -0
  76. package/dist/components/label.js +26 -0
  77. package/dist/components/label.js.map +1 -0
  78. package/dist/components/native-only-animated-view.d.ts +223 -0
  79. package/dist/components/native-only-animated-view.d.ts.map +1 -0
  80. package/dist/components/native-only-animated-view.js +26 -0
  81. package/dist/components/native-only-animated-view.js.map +1 -0
  82. package/dist/components/popover.d.ts +24 -0
  83. package/dist/components/popover.d.ts.map +1 -0
  84. package/dist/components/popover.js +52 -0
  85. package/dist/components/popover.js.map +1 -0
  86. package/dist/components/progress.d.ts +15 -0
  87. package/dist/components/progress.d.ts.map +1 -0
  88. package/dist/components/progress.js +68 -0
  89. package/dist/components/progress.js.map +1 -0
  90. package/dist/components/radio-group.d.ts +19 -0
  91. package/dist/components/radio-group.d.ts.map +1 -0
  92. package/dist/components/radio-group.js +138 -0
  93. package/dist/components/radio-group.js.map +1 -0
  94. package/dist/components/segmented-control.d.ts +21 -0
  95. package/dist/components/segmented-control.d.ts.map +1 -0
  96. package/dist/components/segmented-control.js +113 -0
  97. package/dist/components/segmented-control.js.map +1 -0
  98. package/dist/components/select.d.ts +58 -0
  99. package/dist/components/select.d.ts.map +1 -0
  100. package/dist/components/select.js +493 -0
  101. package/dist/components/select.js.map +1 -0
  102. package/dist/components/separator.d.ts +12 -0
  103. package/dist/components/separator.d.ts.map +1 -0
  104. package/dist/components/separator.js +64 -0
  105. package/dist/components/separator.js.map +1 -0
  106. package/dist/components/skeleton.d.ts +28 -0
  107. package/dist/components/skeleton.d.ts.map +1 -0
  108. package/dist/components/skeleton.js +153 -0
  109. package/dist/components/skeleton.js.map +1 -0
  110. package/dist/components/spinner.d.ts +17 -0
  111. package/dist/components/spinner.d.ts.map +1 -0
  112. package/dist/components/spinner.js +199 -0
  113. package/dist/components/spinner.js.map +1 -0
  114. package/dist/components/switch.d.ts +13 -0
  115. package/dist/components/switch.d.ts.map +1 -0
  116. package/dist/components/switch.js +204 -0
  117. package/dist/components/switch.js.map +1 -0
  118. package/dist/components/tabs.d.ts +25 -0
  119. package/dist/components/tabs.d.ts.map +1 -0
  120. package/dist/components/tabs.js +124 -0
  121. package/dist/components/tabs.js.map +1 -0
  122. package/dist/components/text-area.d.ts +16 -0
  123. package/dist/components/text-area.d.ts.map +1 -0
  124. package/dist/components/text-area.js +117 -0
  125. package/dist/components/text-area.js.map +1 -0
  126. package/dist/components/text-field.d.ts +35 -0
  127. package/dist/components/text-field.d.ts.map +1 -0
  128. package/dist/components/text-field.js +256 -0
  129. package/dist/components/text-field.js.map +1 -0
  130. package/dist/components/text.d.ts +23 -0
  131. package/dist/components/text.d.ts.map +1 -0
  132. package/dist/components/text.js +33 -0
  133. package/dist/components/text.js.map +1 -0
  134. package/dist/components/tooltip.d.ts +24 -0
  135. package/dist/components/tooltip.d.ts.map +1 -0
  136. package/dist/components/tooltip.js +63 -0
  137. package/dist/components/tooltip.js.map +1 -0
  138. package/dist/index.d.ts +4 -0
  139. package/dist/index.d.ts.map +1 -0
  140. package/dist/index.js +8 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/lib/button-styles.d.ts +13 -0
  143. package/dist/lib/button-styles.d.ts.map +1 -0
  144. package/dist/lib/button-styles.js +131 -0
  145. package/dist/lib/button-styles.js.map +1 -0
  146. package/dist/lib/color-utils.d.ts +21 -0
  147. package/dist/lib/color-utils.d.ts.map +1 -0
  148. package/dist/lib/color-utils.js +84 -0
  149. package/dist/lib/color-utils.js.map +1 -0
  150. package/dist/lib/dialog-styles.d.ts +42 -0
  151. package/dist/lib/dialog-styles.d.ts.map +1 -0
  152. package/dist/lib/dialog-styles.js +162 -0
  153. package/dist/lib/dialog-styles.js.map +1 -0
  154. package/dist/lib/native-colors.d.ts +8 -0
  155. package/dist/lib/native-colors.d.ts.map +1 -0
  156. package/dist/lib/native-colors.js +67 -0
  157. package/dist/lib/native-colors.js.map +1 -0
  158. package/dist/lib/panel-styles.d.ts +32 -0
  159. package/dist/lib/panel-styles.d.ts.map +1 -0
  160. package/dist/lib/panel-styles.js +96 -0
  161. package/dist/lib/panel-styles.js.map +1 -0
  162. package/dist/lib/text-input-styles.d.ts +35 -0
  163. package/dist/lib/text-input-styles.d.ts.map +1 -0
  164. package/dist/lib/text-input-styles.js +107 -0
  165. package/dist/lib/text-input-styles.js.map +1 -0
  166. package/dist/lib/theme-vars.d.ts +222 -0
  167. package/dist/lib/theme-vars.d.ts.map +1 -0
  168. package/dist/lib/theme-vars.js +173 -0
  169. package/dist/lib/theme-vars.js.map +1 -0
  170. package/dist/lib/theme.d.ts +57 -0
  171. package/dist/lib/theme.d.ts.map +1 -0
  172. package/dist/lib/theme.js +80 -0
  173. package/dist/lib/theme.js.map +1 -0
  174. package/dist/lib/types.d.ts +14 -0
  175. package/dist/lib/types.d.ts.map +1 -0
  176. package/dist/lib/types.js +2 -0
  177. package/dist/lib/types.js.map +1 -0
  178. package/dist/lib/use-theme-vars.d.ts +325 -0
  179. package/dist/lib/use-theme-vars.d.ts.map +1 -0
  180. package/dist/lib/use-theme-vars.js +17 -0
  181. package/dist/lib/use-theme-vars.js.map +1 -0
  182. package/dist/lib/utils.d.ts +3 -0
  183. package/dist/lib/utils.d.ts.map +1 -0
  184. package/dist/lib/utils.js +17 -0
  185. package/dist/lib/utils.js.map +1 -0
  186. package/global.css +1813 -0
  187. package/package.json +114 -0
  188. package/tailwind-preset.js +310 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/components/skeleton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAe,KAAK,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAkB,KAAK,SAAS,EAAkB,MAAM,cAAc,CAAC;AAoG9E,KAAK,mBAAmB,GAAG,SAAS,GAAG;IACrC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,iBAAS,cAAc,CAAC,EACtB,IAAU,EACV,KAAgB,EAChB,KAAc,EACd,KAAK,EACL,GAAG,KAAK,EACT,EAAE,mBAAmB,qBAuBrB;AAMD,KAAK,iBAAiB,GAAG,SAAS,GAAG;IACnC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,iBAAS,YAAY,CAAC,EAAE,IAAU,EAAE,KAAc,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,qBAqCvF;AAMD,KAAK,iBAAiB,GAAG,SAAS,GAAG;IACnC,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,iBAAS,YAAY,CAAC,EAAE,KAAc,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,qBAiB3E;AAMD,QAAA,MAAM,QAAQ;;;;CAIb,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AAChE,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,153 @@
1
+ import { getAvatarSize } from '../components/avatar';
2
+ import { useThemeVars } from '../lib/use-theme-vars';
3
+ import * as React from 'react';
4
+ import { Platform, View } from 'react-native';
5
+ import Animated, { Easing, useAnimatedStyle, useSharedValue, withRepeat, withTiming, } from 'react-native-reanimated';
6
+ function resolveAccentFromColor(color) {
7
+ if (!color)
8
+ return 'gray';
9
+ switch (color) {
10
+ case 'danger':
11
+ return 'red';
12
+ case 'warning':
13
+ return 'amber';
14
+ case 'success':
15
+ return 'green';
16
+ case 'info':
17
+ return 'blue';
18
+ default:
19
+ return color;
20
+ }
21
+ }
22
+ // Text border radius based on size
23
+ function getTextBorderRadius(size) {
24
+ switch (size) {
25
+ case '0':
26
+ case '1':
27
+ case '2':
28
+ return 4; // radius-1
29
+ case '3':
30
+ case '4':
31
+ return 6; // radius-2
32
+ case '5':
33
+ case '6':
34
+ return 8; // radius-3
35
+ case '7':
36
+ case '8':
37
+ return 10; // radius-4
38
+ case '9':
39
+ return 12; // radius-5
40
+ }
41
+ }
42
+ // Pulse animation hook using Reanimated (runs on UI thread) - native only
43
+ function usePulseAnimation() {
44
+ const opacity = useSharedValue(1);
45
+ React.useEffect(() => {
46
+ // Skip on web - we use CSS animations there
47
+ if (Platform.OS === 'web')
48
+ return;
49
+ // Use withRepeat with reverse=true for smooth looping: 1 → 0.5 → 1 → 0.5 → ...
50
+ opacity.value = withRepeat(withTiming(0.5, { duration: 1000, easing: Easing.bezier(0.4, 0, 0.6, 1) }), -1, // Infinite repeat
51
+ true // Reverse on each iteration
52
+ );
53
+ }, [opacity]);
54
+ const animatedStyle = useAnimatedStyle(() => ({
55
+ opacity: opacity.value,
56
+ }));
57
+ return animatedStyle;
58
+ }
59
+ // CSS animation style for web (GPU-accelerated)
60
+ const webPulseStyle = Platform.OS === 'web'
61
+ ? {
62
+ animationName: 'skeleton-pulse',
63
+ animationDuration: '2s',
64
+ animationTimingFunction: 'cubic-bezier(0.4, 0, 0.6, 1)',
65
+ animationIterationCount: 'infinite',
66
+ }
67
+ : undefined;
68
+ // Inject keyframes on web
69
+ if (Platform.OS === 'web' && typeof document !== 'undefined') {
70
+ const styleId = 'skeleton-pulse-keyframes';
71
+ if (!document.getElementById(styleId)) {
72
+ const style = document.createElement('style');
73
+ style.id = styleId;
74
+ style.textContent = `
75
+ @keyframes skeleton-pulse {
76
+ 0%, 100% { opacity: 1; }
77
+ 50% { opacity: 0.5; }
78
+ }
79
+ `;
80
+ document.head.appendChild(style);
81
+ }
82
+ }
83
+ function SkeletonAvatar({ size = '3', shape = 'circle', color = 'gray', style, ...props }) {
84
+ const { colors } = useThemeVars();
85
+ const animatedStyle = usePulseAnimation();
86
+ const accentColor = resolveAccentFromColor(color);
87
+ const palette = colors.palettes[accentColor];
88
+ const avatarSize = getAvatarSize(size);
89
+ const borderRadius = shape === 'circle' ? avatarSize / 2 : avatarSize * 0.25;
90
+ const avatarStyle = {
91
+ width: avatarSize,
92
+ height: avatarSize,
93
+ borderRadius,
94
+ backgroundColor: palette.a3,
95
+ flexShrink: 0,
96
+ };
97
+ if (Platform.OS === 'web') {
98
+ return <View style={[avatarStyle, webPulseStyle, style]} {...props}/>;
99
+ }
100
+ return <Animated.View style={[avatarStyle, animatedStyle, style]} {...props}/>;
101
+ }
102
+ function SkeletonText({ size = '3', color = 'gray', style, ...props }) {
103
+ const { colors, typography } = useThemeVars();
104
+ const animatedStyle = usePulseAnimation();
105
+ const accentColor = resolveAccentFromColor(color);
106
+ const palette = colors.palettes[accentColor];
107
+ const typo = typography[size];
108
+ const borderRadius = getTextBorderRadius(size);
109
+ // Container matches line-height, inner bar matches font-size
110
+ const containerStyle = {
111
+ height: typo.lineHeight,
112
+ justifyContent: 'center',
113
+ alignItems: 'stretch',
114
+ };
115
+ const barStyle = {
116
+ height: typo.fontSize,
117
+ borderRadius,
118
+ backgroundColor: palette.a3,
119
+ width: '100%',
120
+ };
121
+ if (Platform.OS === 'web') {
122
+ return (<View style={[containerStyle, style]} {...props}>
123
+ <View style={[barStyle, webPulseStyle]}/>
124
+ </View>);
125
+ }
126
+ return (<View style={[containerStyle, style]} {...props}>
127
+ <Animated.View style={[barStyle, animatedStyle]}/>
128
+ </View>);
129
+ }
130
+ function SkeletonRect({ color = 'gray', style, ...props }) {
131
+ const { colors } = useThemeVars();
132
+ const animatedStyle = usePulseAnimation();
133
+ const accentColor = resolveAccentFromColor(color);
134
+ const palette = colors.palettes[accentColor];
135
+ const rectStyle = {
136
+ backgroundColor: palette.a3,
137
+ flexShrink: 0,
138
+ };
139
+ if (Platform.OS === 'web') {
140
+ return <View style={[rectStyle, webPulseStyle, style]} {...props}/>;
141
+ }
142
+ return <Animated.View style={[rectStyle, animatedStyle, style]} {...props}/>;
143
+ }
144
+ // ============================================================================
145
+ // Export composite component
146
+ // ============================================================================
147
+ const Skeleton = {
148
+ Avatar: SkeletonAvatar,
149
+ Text: SkeletonText,
150
+ Rect: SkeletonRect,
151
+ };
152
+ export { Skeleton, SkeletonAvatar, SkeletonRect, SkeletonText };
153
+ //# sourceMappingURL=skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../src/components/skeleton.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import * as React from 'react';
2
+ import { type ViewStyle } from 'react-native';
3
+ type SpinnerSize = '1' | '2' | '3' | '4' | '5' | '6';
4
+ interface SpinnerProps {
5
+ size?: SpinnerSize;
6
+ loading?: boolean;
7
+ children?: React.ReactNode;
8
+ color?: string;
9
+ style?: ViewStyle;
10
+ }
11
+ declare function Spinner({ size, loading, children, color, style }: SpinnerProps): React.JSX.Element;
12
+ declare namespace Spinner {
13
+ var displayName: string;
14
+ }
15
+ export { Spinner };
16
+ export type { SpinnerProps, SpinnerSize };
17
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/components/spinner.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAc9D,KAAK,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAErD,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAyKD,iBAAS,OAAO,CAAC,EAAE,IAAU,EAAE,OAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,qBAgFpF;kBAhFQ,OAAO;;;AAoFhB,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,199 @@
1
+ import { useThemeVars } from '../lib/use-theme-vars';
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 } = useThemeVars();
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,13 @@
1
+ import type { Color } from '../lib/types';
2
+ import * as SwitchPrimitive from '@rn-primitives/switch';
3
+ import * as React from 'react';
4
+ declare const switchSizes: readonly ["1", "2", "3"];
5
+ type SwitchSize = (typeof switchSizes)[number];
6
+ type SwitchProps = Omit<SwitchPrimitive.RootProps, 'children'> & {
7
+ size?: SwitchSize;
8
+ color?: Color;
9
+ };
10
+ declare function Switch({ size, color, checked, disabled, onCheckedChange, onFocus, onBlur, ...props }: SwitchProps): React.JSX.Element;
11
+ export { Switch };
12
+ export type { SwitchProps };
13
+ //# 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;AAEtD,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,QAAA,MAAM,WAAW,0BAA2B,CAAC;AAE7C,KAAK,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AA0D/C,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,qBA6Kb;AAED,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,204 @@
1
+ import { useThemeVars } from '../lib/use-theme-vars';
2
+ import * as SwitchPrimitive from '@rn-primitives/switch';
3
+ import * as React from 'react';
4
+ import { Platform, View } from 'react-native';
5
+ const switchSizes = ['1', '2', '3'];
6
+ function resolveAccentFromColor(color) {
7
+ if (!color)
8
+ return 'blue';
9
+ switch (color) {
10
+ case 'danger':
11
+ return 'red';
12
+ case 'warning':
13
+ return 'amber';
14
+ case 'success':
15
+ return 'green';
16
+ case 'info':
17
+ return 'blue';
18
+ default:
19
+ return color;
20
+ }
21
+ }
22
+ // Size styles from CSS:
23
+ // Size 1: --switch-height: var(--space-4) = 16px
24
+ // Size 2: --switch-height: var(--space-5) = 24px
25
+ // Size 3: --switch-height: var(--space-6) = 32px
26
+ // --switch-width: calc(var(--switch-height) * 1.75)
27
+ // --switch-padding: 1px
28
+ // --switch-thumb-size: calc(var(--switch-height) - var(--switch-padding) * 2)
29
+ function getSizeStyle(size) {
30
+ const padding = 1;
31
+ switch (size) {
32
+ case '1': {
33
+ const height = 16;
34
+ const width = height * 1.75; // 28
35
+ const thumbSize = height - padding * 2; // 14
36
+ const translateX = width - height; // 12
37
+ return { height, width, padding, thumbSize, translateX };
38
+ }
39
+ case '2': {
40
+ const height = 24;
41
+ const width = height * 1.75; // 42
42
+ const thumbSize = height - padding * 2; // 22
43
+ const translateX = width - height; // 18
44
+ return { height, width, padding, thumbSize, translateX };
45
+ }
46
+ case '3': {
47
+ const height = 32;
48
+ const width = height * 1.75; // 56
49
+ const thumbSize = height - padding * 2; // 30
50
+ const translateX = width - height; // 24
51
+ return { height, width, padding, thumbSize, translateX };
52
+ }
53
+ }
54
+ }
55
+ function Switch({ size = '2', color, checked, disabled, onCheckedChange, onFocus, onBlur, ...props }) {
56
+ const { colors } = useThemeVars();
57
+ const [focused, setFocused] = React.useState(false);
58
+ const accentColor = resolveAccentFromColor(color);
59
+ const palette = colors.palettes[accentColor];
60
+ const gray = colors.palettes.gray;
61
+ const { height, width, padding, thumbSize, translateX } = getSizeStyle(size);
62
+ // Track base style
63
+ const trackBaseStyle = {
64
+ width,
65
+ height,
66
+ borderRadius: height / 2,
67
+ padding,
68
+ justifyContent: 'center',
69
+ };
70
+ // Track state-based styles
71
+ let trackStateStyle;
72
+ if (disabled) {
73
+ // Disabled state - same inset shadow as unchecked
74
+ trackStateStyle = {
75
+ backgroundColor: gray.a3,
76
+ ...(Platform.OS === 'web' && {
77
+ boxShadow: `inset 0 0 0 1px ${gray.a3}, inset 0 1.5px 2px 0 ${gray.a2}`,
78
+ }),
79
+ };
80
+ }
81
+ else if (checked) {
82
+ // Checked state - accent background with inset shadow for inner border
83
+ trackStateStyle = {
84
+ backgroundColor: palette['9'],
85
+ ...(Platform.OS === 'web' && {
86
+ 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)`,
87
+ }),
88
+ };
89
+ }
90
+ else {
91
+ // Unchecked state - gray background with inset shadow (--shadow-1)
92
+ // --shadow-1: inset 0 0 0 1px var(--gray-a5), inset 0 1.5px 2px 0 var(--gray-a2)
93
+ trackStateStyle = {
94
+ backgroundColor: gray.a4,
95
+ ...(Platform.OS === 'web' && {
96
+ boxShadow: `inset 0 0 0 1px ${gray.a5}, inset 0 1.5px 2px 0 ${gray.a2}`,
97
+ }),
98
+ };
99
+ }
100
+ // Focus style
101
+ const focusStyle = focused && !disabled
102
+ ? {
103
+ outlineWidth: 2,
104
+ outlineStyle: 'solid',
105
+ outlineColor: palette.a8,
106
+ outlineOffset: 2,
107
+ }
108
+ : undefined;
109
+ const trackCombinedStyle = {
110
+ ...trackBaseStyle,
111
+ ...trackStateStyle,
112
+ ...focusStyle,
113
+ };
114
+ // Thumb base style
115
+ const thumbBaseStyle = {
116
+ width: thumbSize,
117
+ height: thumbSize,
118
+ borderRadius: thumbSize / 2,
119
+ backgroundColor: 'white',
120
+ };
121
+ // Thumb shadow based on state
122
+ let thumbShadowStyle;
123
+ if (disabled) {
124
+ // Disabled thumb - visible border like other states
125
+ thumbShadowStyle = {
126
+ backgroundColor: gray['2'],
127
+ ...(Platform.OS === 'web'
128
+ ? {
129
+ boxShadow: `0 0 0 1px ${gray.a3}, 0 1px 3px rgba(0,0,0,0.05)`,
130
+ }
131
+ : {
132
+ shadowColor: '#000',
133
+ shadowOpacity: 0.05,
134
+ shadowOffset: { width: 0, height: 1 },
135
+ shadowRadius: 2,
136
+ }),
137
+ };
138
+ }
139
+ else if (checked) {
140
+ // Checked thumb shadow - includes accent border and left shadow
141
+ thumbShadowStyle =
142
+ Platform.OS === 'web'
143
+ ? {
144
+ 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)`,
145
+ }
146
+ : {
147
+ shadowColor: '#000',
148
+ shadowOpacity: 0.15,
149
+ shadowOffset: { width: -1, height: 1 },
150
+ shadowRadius: 2,
151
+ elevation: 2,
152
+ };
153
+ }
154
+ else {
155
+ // Unchecked thumb shadow
156
+ thumbShadowStyle =
157
+ Platform.OS === 'web'
158
+ ? {
159
+ 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)`,
160
+ }
161
+ : {
162
+ shadowColor: '#000',
163
+ shadowOpacity: 0.15,
164
+ shadowOffset: { width: 0, height: 1 },
165
+ shadowRadius: 2,
166
+ elevation: 2,
167
+ };
168
+ }
169
+ // Thumb position based on checked state
170
+ const thumbTransformStyle = {
171
+ transform: [{ translateX: checked ? translateX : 0 }],
172
+ };
173
+ const thumbCombinedStyle = {
174
+ ...thumbBaseStyle,
175
+ ...thumbShadowStyle,
176
+ ...thumbTransformStyle,
177
+ };
178
+ const handleFocus = React.useCallback((e) => {
179
+ if (Platform.OS === 'web') {
180
+ const target = e.target;
181
+ if (target?.matches?.(':focus-visible')) {
182
+ setFocused(true);
183
+ }
184
+ }
185
+ onFocus?.(e);
186
+ }, [onFocus]);
187
+ const handleBlur = React.useCallback((e) => {
188
+ setFocused(false);
189
+ onBlur?.(e);
190
+ }, [onBlur]);
191
+ // Reset default focus styles
192
+ const rootStyle = {
193
+ outlineWidth: 0,
194
+ };
195
+ return (<SwitchPrimitive.Root checked={checked} onCheckedChange={onCheckedChange} disabled={disabled} onFocus={handleFocus} onBlur={handleBlur} style={rootStyle} {...props}>
196
+ <View style={trackCombinedStyle}>
197
+ <SwitchPrimitive.Thumb>
198
+ <View style={thumbCombinedStyle}/>
199
+ </SwitchPrimitive.Thumb>
200
+ </View>
201
+ </SwitchPrimitive.Root>);
202
+ }
203
+ export { Switch };
204
+ //# 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,25 @@
1
+ import * as TabsPrimitive from '@rn-primitives/tabs';
2
+ import * as React from 'react';
3
+ declare const tabsSizes: readonly ["1", "2"];
4
+ type TabsSize = (typeof tabsSizes)[number];
5
+ type TabsRootProps = TabsPrimitive.RootProps & {
6
+ size?: TabsSize;
7
+ };
8
+ declare function TabsRoot({ size, value, onValueChange, children, ...props }: TabsRootProps): React.JSX.Element;
9
+ type TabsListProps = TabsPrimitive.ListProps;
10
+ declare function TabsList({ children, ...props }: TabsListProps): React.JSX.Element;
11
+ type TabsTriggerProps = Omit<TabsPrimitive.TriggerProps, 'children'> & {
12
+ children?: React.ReactNode;
13
+ };
14
+ declare function TabsTrigger({ value, children, ...props }: TabsTriggerProps): React.JSX.Element;
15
+ type TabsContentProps = TabsPrimitive.ContentProps;
16
+ declare function TabsContent({ ...props }: TabsContentProps): React.JSX.Element;
17
+ declare const Tabs: {
18
+ Root: typeof TabsRoot;
19
+ List: typeof TabsList;
20
+ Trigger: typeof TabsTrigger;
21
+ Content: typeof TabsContent;
22
+ };
23
+ export { Tabs, TabsContent, TabsList, TabsRoot, TabsTrigger };
24
+ export type { TabsContentProps, TabsListProps, TabsRootProps, TabsTriggerProps };
25
+ //# sourceMappingURL=tabs.d.ts.map