@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.
- package/README.md +160 -0
- package/dist/components/accordion.d.ts +21 -0
- package/dist/components/accordion.d.ts.map +1 -0
- package/dist/components/accordion.js +94 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/alert-dialog.d.ts +67 -0
- package/dist/components/alert-dialog.d.ts.map +1 -0
- package/dist/components/alert-dialog.js +170 -0
- package/dist/components/alert-dialog.js.map +1 -0
- package/dist/components/aspect-ratio.d.ts +4 -0
- package/dist/components/aspect-ratio.d.ts.map +1 -0
- package/dist/components/aspect-ratio.js +4 -0
- package/dist/components/aspect-ratio.js.map +1 -0
- package/dist/components/avatar.d.ts +23 -0
- package/dist/components/avatar.d.ts.map +1 -0
- package/dist/components/avatar.js +128 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.d.ts +15 -0
- package/dist/components/badge.d.ts.map +1 -0
- package/dist/components/badge.js +81 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/button.d.ts +14 -0
- package/dist/components/button.d.ts.map +1 -0
- package/dist/components/button.js +81 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/callout.d.ts +23 -0
- package/dist/components/callout.d.ts.map +1 -0
- package/dist/components/callout.js +128 -0
- package/dist/components/callout.js.map +1 -0
- package/dist/components/card.d.ts +9 -0
- package/dist/components/card.d.ts.map +1 -0
- package/dist/components/card.js +41 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/checkbox.d.ts +12 -0
- package/dist/components/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox.js +100 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/circular-progress.d.ts +21 -0
- package/dist/components/circular-progress.d.ts.map +1 -0
- package/dist/components/circular-progress.js +78 -0
- package/dist/components/circular-progress.js.map +1 -0
- package/dist/components/code.d.ts +18 -0
- package/dist/components/code.d.ts.map +1 -0
- package/dist/components/code.js +83 -0
- package/dist/components/code.js.map +1 -0
- package/dist/components/context-menu.d.ts +65 -0
- package/dist/components/context-menu.d.ts.map +1 -0
- package/dist/components/context-menu.js +441 -0
- package/dist/components/context-menu.js.map +1 -0
- package/dist/components/dialog.d.ts +49 -0
- package/dist/components/dialog.d.ts.map +1 -0
- package/dist/components/dialog.js +141 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/dropdown-menu.d.ts +65 -0
- package/dist/components/dropdown-menu.d.ts.map +1 -0
- package/dist/components/dropdown-menu.js +441 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/heading.d.ts +15 -0
- package/dist/components/heading.d.ts.map +1 -0
- package/dist/components/heading.js +8 -0
- package/dist/components/heading.js.map +1 -0
- package/dist/components/hover-card.d.ts +24 -0
- package/dist/components/hover-card.d.ts.map +1 -0
- package/dist/components/hover-card.js +49 -0
- package/dist/components/hover-card.js.map +1 -0
- package/dist/components/icon-button.d.ts +14 -0
- package/dist/components/icon-button.d.ts.map +1 -0
- package/dist/components/icon-button.js +81 -0
- package/dist/components/icon-button.js.map +1 -0
- package/dist/components/icon.d.ts +27 -0
- package/dist/components/icon.d.ts.map +1 -0
- package/dist/components/icon.js +30 -0
- package/dist/components/icon.js.map +1 -0
- package/dist/components/index.d.ts +37 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +49 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/label.d.ts +8 -0
- package/dist/components/label.d.ts.map +1 -0
- package/dist/components/label.js +26 -0
- package/dist/components/label.js.map +1 -0
- package/dist/components/link.d.ts +19 -0
- package/dist/components/link.d.ts.map +1 -0
- package/dist/components/link.js +68 -0
- package/dist/components/link.js.map +1 -0
- package/dist/components/list.d.ts +37 -0
- package/dist/components/list.d.ts.map +1 -0
- package/dist/components/list.js +112 -0
- package/dist/components/list.js.map +1 -0
- package/dist/components/native-only-animated-view.d.ts +219 -0
- package/dist/components/native-only-animated-view.d.ts.map +1 -0
- package/dist/components/native-only-animated-view.js +26 -0
- package/dist/components/native-only-animated-view.js.map +1 -0
- package/dist/components/popover.d.ts +24 -0
- package/dist/components/popover.d.ts.map +1 -0
- package/dist/components/popover.js +52 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/progress.d.ts +14 -0
- package/dist/components/progress.d.ts.map +1 -0
- package/dist/components/progress.js +52 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/radio-group.d.ts +18 -0
- package/dist/components/radio-group.d.ts.map +1 -0
- package/dist/components/radio-group.js +122 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/segmented-control.d.ts +21 -0
- package/dist/components/segmented-control.d.ts.map +1 -0
- package/dist/components/segmented-control.js +113 -0
- package/dist/components/segmented-control.js.map +1 -0
- package/dist/components/select.d.ts +58 -0
- package/dist/components/select.d.ts.map +1 -0
- package/dist/components/select.js +491 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/separator.d.ts +12 -0
- package/dist/components/separator.d.ts.map +1 -0
- package/dist/components/separator.js +47 -0
- package/dist/components/separator.js.map +1 -0
- package/dist/components/skeleton.d.ts +28 -0
- package/dist/components/skeleton.d.ts.map +1 -0
- package/dist/components/skeleton.js +137 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/slider.d.ts +30 -0
- package/dist/components/slider.d.ts.map +1 -0
- package/dist/components/slider.js +248 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/spinner.d.ts +17 -0
- package/dist/components/spinner.d.ts.map +1 -0
- package/dist/components/spinner.js +199 -0
- package/dist/components/spinner.js.map +1 -0
- package/dist/components/switch.d.ts +12 -0
- package/dist/components/switch.d.ts.map +1 -0
- package/dist/components/switch.js +188 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/tabs.d.ts +26 -0
- package/dist/components/tabs.d.ts.map +1 -0
- package/dist/components/tabs.js +125 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/text-area.d.ts +16 -0
- package/dist/components/text-area.d.ts.map +1 -0
- package/dist/components/text-area.js +121 -0
- package/dist/components/text-area.js.map +1 -0
- package/dist/components/text-field.d.ts +35 -0
- package/dist/components/text-field.d.ts.map +1 -0
- package/dist/components/text-field.js +300 -0
- package/dist/components/text-field.js.map +1 -0
- package/dist/components/text.d.ts +23 -0
- package/dist/components/text.d.ts.map +1 -0
- package/dist/components/text.js +44 -0
- package/dist/components/text.js.map +1 -0
- package/dist/components/tooltip.d.ts +24 -0
- package/dist/components/tooltip.d.ts.map +1 -0
- package/dist/components/tooltip.js +63 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/button-styles.d.ts +13 -0
- package/dist/lib/button-styles.d.ts.map +1 -0
- package/dist/lib/button-styles.js +115 -0
- package/dist/lib/button-styles.js.map +1 -0
- package/dist/lib/color-utils.d.ts +26 -0
- package/dist/lib/color-utils.d.ts.map +1 -0
- package/dist/lib/color-utils.js +48 -0
- package/dist/lib/color-utils.js.map +1 -0
- package/dist/lib/dialog-styles.d.ts +42 -0
- package/dist/lib/dialog-styles.d.ts.map +1 -0
- package/dist/lib/dialog-styles.js +162 -0
- package/dist/lib/dialog-styles.js.map +1 -0
- package/dist/lib/full-window-overlay.d.ts +11 -0
- package/dist/lib/full-window-overlay.d.ts.map +1 -0
- package/dist/lib/full-window-overlay.js +16 -0
- package/dist/lib/full-window-overlay.js.map +1 -0
- package/dist/lib/panel-styles.d.ts +32 -0
- package/dist/lib/panel-styles.d.ts.map +1 -0
- package/dist/lib/panel-styles.js +96 -0
- package/dist/lib/panel-styles.js.map +1 -0
- package/dist/lib/text-input-styles.d.ts +36 -0
- package/dist/lib/text-input-styles.d.ts.map +1 -0
- package/dist/lib/text-input-styles.js +88 -0
- package/dist/lib/text-input-styles.js.map +1 -0
- package/dist/lib/theme-context.d.ts +80 -0
- package/dist/lib/theme-context.d.ts.map +1 -0
- package/dist/lib/theme-context.js +97 -0
- package/dist/lib/theme-context.js.map +1 -0
- package/dist/lib/theme-tokens.d.ts +222 -0
- package/dist/lib/theme-tokens.d.ts.map +1 -0
- package/dist/lib/theme-tokens.js +158 -0
- package/dist/lib/theme-tokens.js.map +1 -0
- package/dist/lib/theme.d.ts +40 -0
- package/dist/lib/theme.d.ts.map +1 -0
- package/dist/lib/theme.js +194 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/types.d.ts +18 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/use-theme-tokens.d.ts +593 -0
- package/dist/lib/use-theme-tokens.d.ts.map +1 -0
- package/dist/lib/use-theme-tokens.js +44 -0
- package/dist/lib/use-theme-tokens.js.map +1 -0
- package/docs/llm/COLOR_SYSTEM.md +799 -0
- package/docs/llm/COMPONENTS.md +1329 -0
- package/docs/llm/DESIGN_PATTERNS.md +2567 -0
- package/docs/llm/README.md +118 -0
- package/docs/llm/TYPOGRAPHY.md +516 -0
- 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"}
|