@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,121 @@
1
+ import { getDisabledSoftStyle, getDisabledSurfaceStyle, getSoftVariantStyle, getSurfaceVariantStyle, getTextInputColors, } from '../lib/text-input-styles';
2
+ import { useThemeTokens } from '../lib/use-theme-tokens';
3
+ import * as React from 'react';
4
+ import { Platform, TextInput, View, } from 'react-native';
5
+ // ============================================================================
6
+ // Size helpers
7
+ // ============================================================================
8
+ function getTextAreaSizeStyle(size) {
9
+ switch (size) {
10
+ case '1':
11
+ return {
12
+ minHeight: 32, // space-8
13
+ fontSize: 12,
14
+ lineHeight: 16,
15
+ borderRadius: 6,
16
+ paddingVertical: 3, // space-1 - border
17
+ paddingHorizontal: 6, // space-1.5 - border
18
+ };
19
+ case '2':
20
+ return {
21
+ minHeight: 36, // space-9
22
+ fontSize: 14,
23
+ lineHeight: 20,
24
+ borderRadius: 8,
25
+ paddingVertical: 6, // space-1.5 - border
26
+ paddingHorizontal: 8, // space-2 - border
27
+ };
28
+ case '3':
29
+ return {
30
+ minHeight: 80,
31
+ fontSize: 16,
32
+ lineHeight: 24,
33
+ borderRadius: 10,
34
+ paddingVertical: 8, // space-2 - border
35
+ paddingHorizontal: 12, // space-3 - border
36
+ };
37
+ case '4':
38
+ return {
39
+ minHeight: 96,
40
+ fontSize: 18,
41
+ lineHeight: 28,
42
+ borderRadius: 14,
43
+ paddingVertical: 12, // space-3 - border
44
+ paddingHorizontal: 16, // space-4 - border
45
+ };
46
+ }
47
+ }
48
+ function TextArea({ size = '3', variant = 'surface', color, style, editable, ...props }) {
49
+ const { colors } = useThemeTokens();
50
+ const gray = colors.palettes.gray;
51
+ // For soft variant background/text, use gray as default
52
+ const paletteKey = color ?? 'gray';
53
+ // For focus outline, use accent as default
54
+ const focusPalette = colors.palettes[color ?? 'accent'] ?? gray;
55
+ const sizeStyle = getTextAreaSizeStyle(size);
56
+ const disabled = editable === false;
57
+ const [focused, setFocused] = React.useState(false);
58
+ // Variant styles
59
+ let variantStyle = variant === 'surface'
60
+ ? getSurfaceVariantStyle(colors)
61
+ : getSoftVariantStyle(colors, paletteKey);
62
+ // Apply disabled styles (surface keeps border, soft replaces background)
63
+ if (disabled) {
64
+ if (variant === 'surface') {
65
+ // Surface: keep border, replace background
66
+ variantStyle = {
67
+ ...variantStyle,
68
+ ...getDisabledSurfaceStyle(colors),
69
+ };
70
+ }
71
+ else {
72
+ // Soft: replace background completely
73
+ variantStyle = getDisabledSoftStyle(colors);
74
+ }
75
+ }
76
+ // Focus outline (web only) - uses accent color by default
77
+ const focusStyle = focused && !disabled && Platform.OS === 'web'
78
+ ? {
79
+ outline: `2px solid ${focusPalette.a8}`,
80
+ outlineOffset: -1,
81
+ }
82
+ : undefined;
83
+ // Text and placeholder colors
84
+ const { textColor, placeholderColor } = getTextInputColors(variant, colors, paletteKey, disabled);
85
+ const rootStyle = {
86
+ flexDirection: 'column',
87
+ minHeight: sizeStyle.minHeight,
88
+ borderRadius: sizeStyle.borderRadius,
89
+ ...variantStyle,
90
+ ...focusStyle,
91
+ };
92
+ const inputStyle = {
93
+ flex: 1,
94
+ fontSize: sizeStyle.fontSize,
95
+ lineHeight: sizeStyle.lineHeight,
96
+ color: textColor,
97
+ paddingVertical: sizeStyle.paddingVertical,
98
+ paddingHorizontal: sizeStyle.paddingHorizontal,
99
+ textAlignVertical: 'top',
100
+ ...(Platform.OS === 'web'
101
+ ? {
102
+ outline: 'none',
103
+ backgroundColor: 'transparent',
104
+ resize: 'none',
105
+ }
106
+ : {}),
107
+ };
108
+ const handleFocus = (e) => {
109
+ setFocused(true);
110
+ props.onFocus?.(e);
111
+ };
112
+ const handleBlur = (e) => {
113
+ setFocused(false);
114
+ props.onBlur?.(e);
115
+ };
116
+ return (<View style={rootStyle}>
117
+ <TextInput style={[inputStyle, style]} placeholderTextColor={placeholderColor} editable={editable} multiline onFocus={handleFocus} onBlur={handleBlur} {...props}/>
118
+ </View>);
119
+ }
120
+ export { TextArea };
121
+ //# sourceMappingURL=text-area.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-area.js","sourceRoot":"","sources":["../../src/components/text-area.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
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 { TextInput, type TextInputProps, type TextStyle, type ViewProps } from 'react-native';
5
+ type TextFieldSize = TextInputSize;
6
+ type TextFieldVariant = TextInputVariant;
7
+ interface TextFieldRootProps extends ViewProps {
8
+ size?: TextFieldSize;
9
+ variant?: TextFieldVariant;
10
+ color?: Color;
11
+ disabled?: boolean;
12
+ focused?: boolean;
13
+ children: React.ReactNode;
14
+ }
15
+ declare function TextFieldRoot({ size, variant, color, disabled, focused: focusedProp, style, children, ...props }: TextFieldRootProps): React.JSX.Element;
16
+ interface TextFieldSlotProps extends ViewProps {
17
+ color?: Color;
18
+ children?: React.ReactNode;
19
+ }
20
+ declare function TextFieldSlot({ color, style, children, ...props }: TextFieldSlotProps): React.JSX.Element | null;
21
+ interface TextFieldInputProps extends Omit<TextInputProps, 'style'> {
22
+ size?: TextFieldSize;
23
+ variant?: TextFieldVariant;
24
+ color?: Color;
25
+ style?: TextStyle;
26
+ }
27
+ declare const TextFieldInput: React.ForwardRefExoticComponent<TextFieldInputProps & React.RefAttributes<TextInput>>;
28
+ declare const TextField: {
29
+ Root: typeof TextFieldRoot;
30
+ Slot: typeof TextFieldSlot;
31
+ Input: React.ForwardRefExoticComponent<TextFieldInputProps & React.RefAttributes<TextInput>>;
32
+ };
33
+ export { TextField, TextFieldInput, TextFieldRoot, TextFieldSlot };
34
+ export type { TextFieldInputProps, TextFieldRootProps, TextFieldSize, TextFieldSlotProps, TextFieldVariant, };
35
+ //# sourceMappingURL=text-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-field.d.ts","sourceRoot":"","sources":["../../src/components/text-field.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,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,EAEL,SAAS,EAGT,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,EAEf,MAAM,cAAc,CAAC;AAMtB,KAAK,aAAa,GAAG,aAAa,CAAC;AACnC,KAAK,gBAAgB,GAAG,gBAAgB,CAAC;AA6DzC,UAAU,kBAAmB,SAAQ,SAAS;IAC5C,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,iBAAS,aAAa,CAAC,EACrB,IAAU,EACV,OAAmB,EACnB,KAAK,EACL,QAAgB,EAChB,OAAO,EAAE,WAAW,EACpB,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,kBAAkB,qBA+KpB;AAMD,UAAU,kBAAmB,SAAQ,SAAS;IAC5C,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,iBAAS,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,kBAAkB,4BAiC9E;AAMD,UAAU,mBAAoB,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;IACjE,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,QAAA,MAAM,cAAc,uFAgInB,CAAC;AAOF,QAAA,MAAM,SAAS;;;;CAId,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;AACnE,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,GACjB,CAAC"}
@@ -0,0 +1,300 @@
1
+ import { getDisabledSoftStyle, getDisabledSurfaceStyle, getSoftVariantStyle, getSurfaceVariantStyle, getTextInputColors, hexToRgba, } from '../lib/text-input-styles';
2
+ import { useThemeTokens } from '../lib/use-theme-tokens';
3
+ import * as React from 'react';
4
+ import { Platform, TextInput, View, } from 'react-native';
5
+ const TextFieldContext = React.createContext(undefined);
6
+ // ============================================================================
7
+ // Size helpers
8
+ // ============================================================================
9
+ function getSizeStyle(size) {
10
+ switch (size) {
11
+ case '1':
12
+ return { height: 24, fontSize: 12, borderRadius: 6, paddingHorizontal: 6 }; // space-5
13
+ case '2':
14
+ return { height: 32, fontSize: 14, borderRadius: 8, paddingHorizontal: 8 }; // space-6
15
+ case '3':
16
+ return { height: 40, fontSize: 16, borderRadius: 10, paddingHorizontal: 12 }; // space-7
17
+ case '4':
18
+ return { height: 48, fontSize: 18, borderRadius: 14, paddingHorizontal: 12 }; // space-8
19
+ }
20
+ }
21
+ function getSlotPadding(size) {
22
+ switch (size) {
23
+ case '1':
24
+ case '2':
25
+ return 8;
26
+ case '3':
27
+ return 10;
28
+ case '4':
29
+ return 12;
30
+ }
31
+ }
32
+ function TextFieldRoot({ size = '3', variant = 'surface', color, disabled = false, focused: focusedProp, style, children, ...props }) {
33
+ const { colors } = useThemeTokens();
34
+ const gray = colors.palettes.gray;
35
+ // For soft variant background/text, use gray as default
36
+ const paletteKey = color ?? 'gray';
37
+ // For focus outline, use accent as default
38
+ const focusPalette = colors.palettes[color ?? 'accent'] ?? gray;
39
+ const [internalFocused, setInternalFocused] = React.useState(false);
40
+ const focused = focusedProp !== undefined ? focusedProp : internalFocused;
41
+ const inputRef = React.useRef(null);
42
+ // Determine if there are slots before/after the input
43
+ const childArray = React.Children.toArray(children);
44
+ let inputIndex = -1;
45
+ let hasSlotBefore = false;
46
+ let hasSlotAfter = false;
47
+ childArray.forEach((child, index) => {
48
+ if (React.isValidElement(child)) {
49
+ if (child.type === TextFieldInput) {
50
+ inputIndex = index;
51
+ }
52
+ }
53
+ });
54
+ if (inputIndex !== -1) {
55
+ // Check for slots before the input
56
+ for (let i = 0; i < inputIndex; i++) {
57
+ const child = childArray[i];
58
+ if (React.isValidElement(child) && child.type === TextFieldSlot) {
59
+ hasSlotBefore = true;
60
+ break;
61
+ }
62
+ }
63
+ // Check for slots after the input
64
+ for (let i = inputIndex + 1; i < childArray.length; i++) {
65
+ const child = childArray[i];
66
+ if (React.isValidElement(child) && child.type === TextFieldSlot) {
67
+ hasSlotAfter = true;
68
+ break;
69
+ }
70
+ }
71
+ }
72
+ const sizeStyle = getSizeStyle(size);
73
+ // Background and border based on variant
74
+ let variantStyle = variant === 'surface'
75
+ ? getSurfaceVariantStyle(colors)
76
+ : getSoftVariantStyle(colors, paletteKey);
77
+ // Apply disabled styles (surface keeps border, soft replaces background)
78
+ if (disabled) {
79
+ if (variant === 'surface') {
80
+ // Surface: keep border, replace background
81
+ variantStyle = {
82
+ ...variantStyle,
83
+ ...getDisabledSurfaceStyle(colors),
84
+ };
85
+ }
86
+ else {
87
+ // Soft: replace background completely
88
+ variantStyle = getDisabledSoftStyle(colors);
89
+ }
90
+ }
91
+ // Focus outline (web only) - uses accent color by default
92
+ const focusStyle = focused && !disabled && Platform.OS === 'web'
93
+ ? {
94
+ outline: `2px solid ${focusPalette.a8}`,
95
+ outlineOffset: -1,
96
+ }
97
+ : undefined;
98
+ const rootStyle = {
99
+ flexDirection: 'row',
100
+ alignItems: 'center',
101
+ borderRadius: sizeStyle.borderRadius,
102
+ ...variantStyle,
103
+ ...focusStyle,
104
+ };
105
+ // Handle pointer/touch events to focus input when clicking on non-button elements
106
+ const handlePointerDown = React.useCallback((event) => {
107
+ if (disabled || !inputRef.current)
108
+ return;
109
+ // On web, we can access the DOM target
110
+ if (Platform.OS === 'web') {
111
+ // Access the native DOM event
112
+ // On React Native Web, the event structure may vary, so we check both
113
+ const eventAny = event;
114
+ const nativeEvent = eventAny.nativeEvent || eventAny;
115
+ const target = nativeEvent.target;
116
+ if (!target)
117
+ return;
118
+ // If clicking on input, button, or anchor, don't focus (let them handle it)
119
+ if (target.closest('input, button, a'))
120
+ return;
121
+ // Focus the input
122
+ requestAnimationFrame(() => {
123
+ inputRef.current?.focus();
124
+ });
125
+ }
126
+ }, [disabled]);
127
+ // Handle native touch events (iOS/Android)
128
+ const handleStartShouldSetResponder = React.useCallback((event) => {
129
+ if (disabled || !inputRef.current)
130
+ return false;
131
+ // Check if the touch target is a button-like component
132
+ // On native, we check the component type from the event
133
+ const target = event.target;
134
+ if (!target)
135
+ return false;
136
+ // Check if target is the TextInput itself - don't focus in that case
137
+ // We can't directly compare refs, but we can check if it's an input
138
+ const targetType = target.constructor?.name || '';
139
+ const isInput = targetType.includes('TextInput') || targetType.includes('RCTTextInput');
140
+ if (isInput) {
141
+ return false; // Let the input handle it
142
+ }
143
+ // Check if target is a button-like component
144
+ // Buttons (Pressable, TouchableOpacity) typically have these in their name
145
+ const isButtonLike = targetType.includes('Touchable') ||
146
+ targetType.includes('Pressable') ||
147
+ targetType.includes('Button');
148
+ if (isButtonLike) {
149
+ return false; // Let the button handle it
150
+ }
151
+ // Focus the input for other touches (like icons in slots)
152
+ requestAnimationFrame(() => {
153
+ inputRef.current?.focus();
154
+ });
155
+ return false; // Don't capture the responder, let the event bubble
156
+ }, [disabled]);
157
+ return (<TextFieldContext.Provider value={{
158
+ size,
159
+ variant,
160
+ color: paletteKey,
161
+ disabled,
162
+ inputRef,
163
+ onFocus: () => setInternalFocused(true),
164
+ onBlur: () => setInternalFocused(false),
165
+ hasSlotBefore,
166
+ hasSlotAfter,
167
+ }}>
168
+ <View style={[rootStyle, style]} {...(Platform.OS === 'web'
169
+ ? { onPointerDown: handlePointerDown }
170
+ : { onStartShouldSetResponder: handleStartShouldSetResponder })} {...props}>
171
+ {children}
172
+ </View>
173
+ </TextFieldContext.Provider>);
174
+ }
175
+ function TextFieldSlot({ color, style, children, ...props }) {
176
+ const context = React.useContext(TextFieldContext);
177
+ const { colors } = useThemeTokens();
178
+ const slotColor = color ? colors.palettes[color].a11 : colors.palettes.gray.a11;
179
+ const padding = getSlotPadding(context?.size ?? '2');
180
+ const slotStyle = {
181
+ flexShrink: 0,
182
+ flexGrow: 0, // Slots should not grow, only maintain their size
183
+ flexDirection: 'row',
184
+ alignItems: 'center',
185
+ height: '100%',
186
+ gap: padding,
187
+ paddingHorizontal: padding,
188
+ };
189
+ if (!children)
190
+ return null;
191
+ return (<View style={[slotStyle, { opacity: 1 }, style]} {...props}>
192
+ {React.Children.map(children, (child) => {
193
+ if (React.isValidElement(child)) {
194
+ // Pass color to icon children if they accept it
195
+ return React.cloneElement(child, {
196
+ color: slotColor,
197
+ });
198
+ }
199
+ return child;
200
+ })}
201
+ </View>);
202
+ }
203
+ const TextFieldInput = React.forwardRef(({ size: sizeProp, variant: variantProp, color: colorProp, style, editable, ...props }, forwardedRef) => {
204
+ const context = React.useContext(TextFieldContext);
205
+ const { colors } = useThemeTokens();
206
+ const size = sizeProp ?? context?.size ?? '3';
207
+ const variant = variantProp ?? context?.variant ?? 'surface';
208
+ // Keep color undefined if not explicitly set, so TextFieldRoot uses accent for focus
209
+ const color = colorProp ?? context?.color;
210
+ const colorForStyles = color ?? 'gray';
211
+ const disabled = editable === false || context?.disabled;
212
+ // Create a callback ref that sets all necessary refs
213
+ const setRefs = React.useCallback((instance) => {
214
+ // Set context ref if it exists
215
+ if (context?.inputRef) {
216
+ context.inputRef.current = instance;
217
+ }
218
+ // Set forwarded ref if it exists
219
+ if (forwardedRef) {
220
+ if (typeof forwardedRef === 'function') {
221
+ forwardedRef(instance);
222
+ }
223
+ else {
224
+ forwardedRef.current = instance;
225
+ }
226
+ }
227
+ }, [context?.inputRef, forwardedRef]);
228
+ const sizeStyle = getSizeStyle(size);
229
+ // Text and placeholder colors based on variant and disabled state
230
+ // TextField uses 0.6 opacity for soft variant placeholder (TextArea uses 0.65)
231
+ const { textColor, placeholderColor: basePlaceholderColor } = getTextInputColors(variant, colors, colorForStyles, disabled);
232
+ const placeholderColor = variant === 'soft' && !disabled
233
+ ? hexToRgba(colors.palettes[colorForStyles]['12'], 0.6)
234
+ : basePlaceholderColor;
235
+ // Account for border height: surface variant has 1px border top and bottom (2px total)
236
+ const inputHeight = variant === 'surface' ? sizeStyle.height - 2 : sizeStyle.height;
237
+ // Determine padding based on adjacent slots
238
+ const hasSlotBefore = context?.hasSlotBefore ?? false;
239
+ const hasSlotAfter = context?.hasSlotAfter ?? false;
240
+ const paddingLeft = hasSlotBefore ? 0 : sizeStyle.paddingHorizontal;
241
+ const paddingRight = hasSlotAfter ? 0 : sizeStyle.paddingHorizontal;
242
+ const inputStyle = {
243
+ flex: 1,
244
+ minWidth: 0, // Allow input to shrink below content width
245
+ height: inputHeight,
246
+ fontSize: sizeStyle.fontSize,
247
+ color: textColor,
248
+ paddingLeft,
249
+ paddingRight,
250
+ // Remove default styling
251
+ ...(Platform.OS === 'web'
252
+ ? {
253
+ outline: 'none',
254
+ backgroundColor: 'transparent',
255
+ }
256
+ : {}),
257
+ };
258
+ // If no context (no Root), wrap in Root
259
+ const hasRoot = context !== undefined;
260
+ // When no root, manage focus state locally and pass to Root
261
+ const [localFocused, setLocalFocused] = React.useState(false);
262
+ const handleFocus = (e) => {
263
+ if (hasRoot) {
264
+ context?.onFocus?.();
265
+ }
266
+ else {
267
+ setLocalFocused(true);
268
+ }
269
+ props.onFocus?.(e);
270
+ };
271
+ const handleBlur = (e) => {
272
+ if (hasRoot) {
273
+ context?.onBlur?.();
274
+ }
275
+ else {
276
+ setLocalFocused(false);
277
+ }
278
+ props.onBlur?.(e);
279
+ };
280
+ const input = (<TextInput ref={setRefs} style={[inputStyle, style]} placeholderTextColor={placeholderColor} editable={editable} onFocus={handleFocus} onBlur={handleBlur} {...props}/>);
281
+ if (hasRoot) {
282
+ return input;
283
+ }
284
+ // When no root, create one with focus state management
285
+ // Pass color only if explicitly set, so TextFieldRoot uses accent for focus by default
286
+ return (<TextFieldRoot size={size} variant={variant} color={color} disabled={disabled} focused={localFocused}>
287
+ {input}
288
+ </TextFieldRoot>);
289
+ });
290
+ TextFieldInput.displayName = 'TextFieldInput';
291
+ // ============================================================================
292
+ // Export composite component
293
+ // ============================================================================
294
+ const TextField = {
295
+ Root: TextFieldRoot,
296
+ Slot: TextFieldSlot,
297
+ Input: TextFieldInput,
298
+ };
299
+ export { TextField, TextFieldInput, TextFieldRoot, TextFieldSlot };
300
+ //# sourceMappingURL=text-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-field.js","sourceRoot":"","sources":["../../src/components/text-field.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { themeTokens } from '../lib/theme-tokens';
2
+ import type { Color } from '../lib/types';
3
+ import * as React from 'react';
4
+ import { Text as RNText } from 'react-native';
5
+ type TextSize = keyof typeof themeTokens.typography;
6
+ type TextWeight = keyof typeof themeTokens.fontWeights;
7
+ type TextProps = Omit<React.ComponentProps<typeof RNText>, 'size' | 'weight' | 'color'> & {
8
+ asChild?: boolean;
9
+ size?: TextSize;
10
+ weight?: TextWeight;
11
+ color?: Color;
12
+ };
13
+ declare const TextClassContext: React.Context<string | undefined>;
14
+ type TextStyleContextValue = {
15
+ size?: TextSize;
16
+ weight?: TextWeight;
17
+ color?: string;
18
+ };
19
+ declare const TextStyleContext: React.Context<TextStyleContextValue | undefined>;
20
+ declare function Text({ asChild, size, weight, color, role, style, ...props }: TextProps): React.JSX.Element;
21
+ export { Text, TextClassContext, TextStyleContext };
22
+ export type { TextProps, TextSize };
23
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/components/text.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAE9C,KAAK,QAAQ,GAAG,MAAM,OAAO,WAAW,CAAC,UAAU,CAAC;AACpD,KAAK,UAAU,GAAG,MAAM,OAAO,WAAW,CAAC,WAAW,CAAC;AAEvD,KAAK,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,GAAG;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,QAAA,MAAM,gBAAgB,mCAAqD,CAAC;AAC5E,KAAK,qBAAqB,GAAG;IAC3B,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,QAAA,MAAM,gBAAgB,kDAAoE,CAAC;AAE3F,iBAAS,IAAI,CAAC,EAAE,OAAe,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,qBA4CvF;AAED,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;AACpD,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { useThemeTokens } from '../lib/use-theme-tokens';
2
+ import * as Slot from '@rn-primitives/slot';
3
+ import * as React from 'react';
4
+ import { Text as RNText } from 'react-native';
5
+ const TextClassContext = React.createContext(undefined);
6
+ const TextStyleContext = React.createContext(undefined);
7
+ function Text({ asChild = false, size, weight, color, role, style, ...props }) {
8
+ const { colors, typography, fontWeights } = useThemeTokens();
9
+ const textStyleContext = React.useContext(TextStyleContext);
10
+ const Component = asChild ? Slot.Text : RNText;
11
+ // Priority: explicit prop > context > default
12
+ const effectiveSize = size ?? textStyleContext?.size ?? '3';
13
+ const effectiveWeight = weight ?? textStyleContext?.weight;
14
+ // Resolve text color:
15
+ // 1. If color prop is set, use that palette's shade 11
16
+ // 2. If context provides a color, use that
17
+ // 3. Otherwise, use default foreground color (gray-12)
18
+ const gray = colors.palettes.gray;
19
+ const resolvedColor = color
20
+ ? (colors.palettes[color] ?? gray)['11']
21
+ : (textStyleContext?.color ?? gray['12']);
22
+ const typo = effectiveSize ? typography[effectiveSize] : undefined;
23
+ const fontWeightValue = effectiveWeight ? fontWeights[effectiveWeight] : undefined;
24
+ const typographyStyle = typo
25
+ ? {
26
+ fontSize: typo.fontSize,
27
+ lineHeight: typo.lineHeight,
28
+ letterSpacing: typo.letterSpacing,
29
+ }
30
+ : undefined;
31
+ const colorStyle = { color: resolvedColor };
32
+ const weightStyle = fontWeightValue ? { fontWeight: fontWeightValue } : undefined;
33
+ // Provide context to children so nested components (like Link) can inherit styles
34
+ const childContext = {
35
+ size: effectiveSize,
36
+ weight: effectiveWeight,
37
+ color: resolvedColor,
38
+ };
39
+ return (<TextStyleContext.Provider value={childContext}>
40
+ <Component style={[typographyStyle, weightStyle, colorStyle, style]} role={role} {...props}/>
41
+ </TextStyleContext.Provider>);
42
+ }
43
+ export { Text, TextClassContext, TextStyleContext };
44
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/components/text.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,IAAI,MAAM,qBAAqB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAY9C,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAAqB,SAAS,CAAC,CAAC;AAO5E,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAAoC,SAAS,CAAC,CAAC;AAE3F,SAAS,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,EAAa;IACtF,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC;IAC7D,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAE/C,8CAA8C;IAC9C,MAAM,aAAa,GAAG,IAAI,IAAI,gBAAgB,EAAE,IAAI,IAAI,GAAG,CAAC;IAC5D,MAAM,eAAe,GAAG,MAAM,IAAI,gBAAgB,EAAE,MAAM,CAAC;IAE3D,sBAAsB;IACtB,uDAAuD;IACvD,2CAA2C;IAC3C,uDAAuD;IACvD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAClC,MAAM,aAAa,GAAG,KAAK;QACzB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC;QACxC,CAAC,CAAC,CAAC,gBAAgB,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE5C,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnF,MAAM,eAAe,GAAG,IAAI;QAC1B,CAAC,CAAC;YACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAC5C,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAElF,kFAAkF;IAClF,MAAM,YAAY,GAA0B;QAC1C,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,eAAe;QACvB,KAAK,EAAE,aAAa;KACrB,CAAC;IAEF,OAAO,CACL,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAC7C;MAAA,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAC7F;IAAA,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAC7B,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import * as TooltipPrimitive from '@rn-primitives/tooltip';
2
+ import * as React from 'react';
3
+ interface TooltipProps extends Omit<TooltipPrimitive.RootProps, 'delayDuration'> {
4
+ /** The content to display in the tooltip */
5
+ content: React.ReactNode;
6
+ /** The trigger element */
7
+ children: React.ReactNode;
8
+ /** Delay before showing tooltip (ms) */
9
+ delayDuration?: number;
10
+ /** Side offset from trigger */
11
+ sideOffset?: number;
12
+ /** Which side to show tooltip */
13
+ side?: 'top' | 'bottom' | 'left' | 'right';
14
+ /** Portal host name */
15
+ portalHost?: string;
16
+ }
17
+ /**
18
+ * Tooltip component matching web version.
19
+ * Uses reversed theme appearance (light mode shows dark tooltip, dark mode shows light tooltip).
20
+ */
21
+ declare function Tooltip({ children, content, delayDuration, sideOffset, side, portalHost, ...rootProps }: TooltipProps): React.JSX.Element;
22
+ export { Tooltip };
23
+ export type { TooltipProps };
24
+ //# sourceMappingURL=tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../src/components/tooltip.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,gBAAgB,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,UAAU,YAAa,SAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC;IAC9E,4CAA4C;IAC5C,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,0BAA0B;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,wCAAwC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,uBAAuB;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,iBAAS,OAAO,CAAC,EACf,QAAQ,EACR,OAAO,EACP,aAAmB,EACnB,UAAc,EACd,IAAY,EACZ,UAAU,EACV,GAAG,SAAS,EACb,EAAE,YAAY,qBAqDd;AAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,YAAY,EAAE,YAAY,EAAE,CAAC"}