@lockin90/ui-native 2.2.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/BackLink.js +2 -2
- package/lib/commonjs/components/BackLink.js.map +1 -1
- package/lib/commonjs/components/Button.js +8 -2
- package/lib/commonjs/components/Button.js.map +1 -1
- package/lib/commonjs/components/Chip.js +2 -3
- package/lib/commonjs/components/Chip.js.map +1 -1
- package/lib/commonjs/components/FollowButton.js +2 -2
- package/lib/commonjs/components/FollowButton.js.map +1 -1
- package/lib/commonjs/components/FormField.js +21 -9
- package/lib/commonjs/components/FormField.js.map +1 -1
- package/lib/commonjs/components/Input.js +9 -3
- package/lib/commonjs/components/Input.js.map +1 -1
- package/lib/commonjs/components/PasswordInput.js +11 -4
- package/lib/commonjs/components/PasswordInput.js.map +1 -1
- package/lib/commonjs/components/Select.js +6 -4
- package/lib/commonjs/components/Select.js.map +1 -1
- package/lib/commonjs/components/SplitButton.js +1 -1
- package/lib/commonjs/components/SplitButton.js.map +1 -1
- package/lib/commonjs/components/SsoButton.js +5 -4
- package/lib/commonjs/components/SsoButton.js.map +1 -1
- package/lib/module/components/BackLink.js +2 -2
- package/lib/module/components/BackLink.js.map +1 -1
- package/lib/module/components/Button.js +9 -2
- package/lib/module/components/Button.js.map +1 -1
- package/lib/module/components/Chip.js +2 -3
- package/lib/module/components/Chip.js.map +1 -1
- package/lib/module/components/FollowButton.js +2 -2
- package/lib/module/components/FollowButton.js.map +1 -1
- package/lib/module/components/FormField.js +21 -9
- package/lib/module/components/FormField.js.map +1 -1
- package/lib/module/components/Input.js +9 -3
- package/lib/module/components/Input.js.map +1 -1
- package/lib/module/components/PasswordInput.js +11 -4
- package/lib/module/components/PasswordInput.js.map +1 -1
- package/lib/module/components/Select.js +6 -4
- package/lib/module/components/Select.js.map +1 -1
- package/lib/module/components/SplitButton.js +1 -1
- package/lib/module/components/SplitButton.js.map +1 -1
- package/lib/module/components/SsoButton.js +5 -4
- package/lib/module/components/SsoButton.js.map +1 -1
- package/lib/typescript/components/Button.d.ts.map +1 -1
- package/lib/typescript/components/FormField.d.ts +3 -1
- package/lib/typescript/components/FormField.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/BackLink.tsx +2 -2
- package/src/components/Button.tsx +9 -6
- package/src/components/Chip.tsx +3 -3
- package/src/components/FollowButton.tsx +2 -2
- package/src/components/FormField.tsx +19 -8
- package/src/components/Input.tsx +9 -5
- package/src/components/PasswordInput.tsx +11 -5
- package/src/components/Select.tsx +6 -4
- package/src/components/SplitButton.tsx +1 -1
- package/src/components/SsoButton.tsx +4 -3
- package/src/components/__tests__/Button.test.tsx +12 -0
- package/src/components/__tests__/FormField.test.tsx +17 -0
- package/src/components/__tests__/SsoButton.test.tsx +15 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["View","Text","Pressable","StyleSheet","LinearGradient","colors","radii","gradients","fonts","nativeShadows","Icon","Menu","jsx","_jsx","jsxs","_jsxs","SplitButton","label","onPress","items","variant","icon","isPrimary","fg","text","chevColor","textDim","style","styles","group","groupPrimary","groupDefault","children","pressed","cta","stops","start","x","y","end","main","color","numberOfLines","mainDefault","divider","backgroundColor","border","chevWrapPrimary","chevWrapDefault","absoluteFill","align","trigger","chev","name","size","create","flexDirection","alignItems","alignSelf","borderRadius","sm","overflow","glowAccent","borderWidth","borderColor","gap","paddingVertical","paddingHorizontal","glass2","opacity","flexShrink","fontFamily","ui","fontWeight","fontSize","width","position","justifyContent","transform","rotate"],"sourceRoot":"../../../src","sources":["components/SplitButton.tsx"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["View","Text","Pressable","StyleSheet","LinearGradient","colors","radii","gradients","fonts","nativeShadows","Icon","Menu","jsx","_jsx","jsxs","_jsxs","SplitButton","label","onPress","items","variant","icon","isPrimary","fg","text","chevColor","textDim","style","styles","group","groupPrimary","groupDefault","children","pressed","cta","stops","start","x","y","end","main","color","numberOfLines","mainDefault","divider","backgroundColor","border","chevWrapPrimary","chevWrapDefault","absoluteFill","align","trigger","chev","name","size","create","flexDirection","alignItems","alignSelf","borderRadius","sm","overflow","glowAccent","borderWidth","borderColor","border2","gap","paddingVertical","paddingHorizontal","glass2","opacity","flexShrink","fontFamily","ui","fontWeight","fontSize","width","position","justifyContent","transform","rotate"],"sourceRoot":"../../../src","sources":["components/SplitButton.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -13,9 +13,9 @@ export function SsoButton({
|
|
|
13
13
|
}) {
|
|
14
14
|
const label = provider === 'google' ? 'Google' : 'Apple';
|
|
15
15
|
return /*#__PURE__*/_jsxs(Pressable, {
|
|
16
|
-
...rest,
|
|
17
16
|
accessibilityRole: "button",
|
|
18
17
|
accessibilityLabel: `Continue with ${label}`,
|
|
18
|
+
...rest,
|
|
19
19
|
style: ({
|
|
20
20
|
pressed
|
|
21
21
|
}) => [styles.btn, pressed && styles.pressed, rest.disabled === true ? styles.disabled : undefined],
|
|
@@ -78,11 +78,10 @@ const styles = StyleSheet.create({
|
|
|
78
78
|
borderRadius: radii.sm,
|
|
79
79
|
backgroundColor: 'rgba(255,255,255,0.04)',
|
|
80
80
|
borderWidth: 1,
|
|
81
|
-
borderColor:
|
|
81
|
+
borderColor: colors.border2
|
|
82
82
|
},
|
|
83
83
|
pressed: {
|
|
84
|
-
backgroundColor: 'rgba(255,255,255,0.06)'
|
|
85
|
-
borderColor: 'rgba(255,255,255,0.16)'
|
|
84
|
+
backgroundColor: 'rgba(255,255,255,0.06)'
|
|
86
85
|
},
|
|
87
86
|
disabled: {
|
|
88
87
|
opacity: 0.5
|
|
@@ -98,6 +97,8 @@ const styles = StyleSheet.create({
|
|
|
98
97
|
fontFamily: fonts.ui,
|
|
99
98
|
fontWeight: '600',
|
|
100
99
|
fontSize: 12.5,
|
|
100
|
+
// the web's 1.55 line height: 10 + 19.4 + 10 + 2 borders = 41.4, as on web
|
|
101
|
+
lineHeight: 12.5 * 1.55,
|
|
101
102
|
letterSpacing: 0.1
|
|
102
103
|
}
|
|
103
104
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Pressable","Text","View","StyleSheet","Svg","Path","colors","fonts","radii","jsx","_jsx","jsxs","_jsxs","SsoButton","provider","rest","label","accessibilityRole","accessibilityLabel","style","pressed","styles","btn","disabled","undefined","children","iconSlot","GoogleBrandIcon","AppleBrandIcon","color","text","size","width","height","viewBox","fill","d","create","flex","flexDirection","alignItems","justifyContent","gap","paddingVertical","paddingHorizontal","borderRadius","sm","backgroundColor","borderWidth","borderColor","opacity","fontFamily","ui","fontWeight","fontSize","letterSpacing"],"sourceRoot":"../../../src","sources":["components/SsoButton.tsx"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,IAAI,EAAEC,IAAI,EAAEC,UAAU,QAA6B,cAAc;AACrF,OAAOC,GAAG,IAAIC,IAAI,QAAQ,kBAAkB;AAC5C,SAASC,MAAM,EAAEC,KAAK,EAAEC,KAAK,QAAQ,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAQxD;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAAC;EAAEC,QAAQ;EAAE,GAAGC;AAAqB,CAAC,EAAE;EAC/D,MAAMC,KAAK,GAAGF,QAAQ,KAAK,QAAQ,GAAG,QAAQ,GAAG,OAAO;EACxD,oBACEF,KAAA,CAACZ,SAAS;
|
|
1
|
+
{"version":3,"names":["Pressable","Text","View","StyleSheet","Svg","Path","colors","fonts","radii","jsx","_jsx","jsxs","_jsxs","SsoButton","provider","rest","label","accessibilityRole","accessibilityLabel","style","pressed","styles","btn","disabled","undefined","children","iconSlot","GoogleBrandIcon","AppleBrandIcon","color","text","size","width","height","viewBox","fill","d","create","flex","flexDirection","alignItems","justifyContent","gap","paddingVertical","paddingHorizontal","borderRadius","sm","backgroundColor","borderWidth","borderColor","border2","opacity","fontFamily","ui","fontWeight","fontSize","lineHeight","letterSpacing"],"sourceRoot":"../../../src","sources":["components/SsoButton.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAqC,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAqC,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAQtH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAC5D,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;AAOlC,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,CAAC;IAC7E,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED;;;wBAGwB;AACxB,wBAAgB,MAAM,CAAC,EAAE,OAAmB,EAAE,IAAI,EAAE,IAAW,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAgFhI"}
|
|
@@ -9,11 +9,13 @@ export interface FormFieldProps extends ViewProps {
|
|
|
9
9
|
error?: ReactNode;
|
|
10
10
|
/** appends a small accent `*` after the label */
|
|
11
11
|
required?: boolean;
|
|
12
|
+
/** a link or action at the end of the label row (e.g. "Forgot password?") */
|
|
13
|
+
labelAction?: ReactNode;
|
|
12
14
|
/** the form control to wrap */
|
|
13
15
|
children?: ReactNode;
|
|
14
16
|
}
|
|
15
17
|
/** Labeled form-control wrapper — mono label, the control, then faint help or red error. */
|
|
16
|
-
export declare function FormField({ label, help, error, required, children, style, ...rest }: FormFieldProps): import("react").JSX.Element;
|
|
18
|
+
export declare function FormField({ label, help, error, required, labelAction, children, style, ...rest }: FormFieldProps): import("react").JSX.Element;
|
|
17
19
|
export interface SearchInputProps extends Omit<TextInputProps, 'onChange' | 'value'> {
|
|
18
20
|
/** current query value (controlled) */
|
|
19
21
|
value?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormField.d.ts","sourceRoot":"","sources":["../../../src/components/FormField.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAItB,MAAM,WAAW,cAAe,SAAQ,SAAS;IAC/C,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,sEAAsE;IACtE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,4FAA4F;AAC5F,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,EACJ,KAAK,EACL,QAAgB,EAChB,QAAQ,EACR,KAAK,EACL,GAAG,IAAI,EACR,EAAE,cAAc,+
|
|
1
|
+
{"version":3,"file":"FormField.d.ts","sourceRoot":"","sources":["../../../src/components/FormField.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAItB,MAAM,WAAW,cAAe,SAAQ,SAAS;IAC/C,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,sEAAsE;IACtE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,4FAA4F;AAC5F,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,EACJ,KAAK,EACL,QAAgB,EAChB,WAAW,EACX,QAAQ,EACR,KAAK,EACL,GAAG,IAAI,EACR,EAAE,cAAc,+BAsBhB;AAED,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,CAAC;IAClF,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;oFACgF;IAChF,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,4FAA4F;AAC5F,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,WAAuB,EACvB,OAAO,EACP,KAAc,EACd,KAAK,EACL,OAAO,EACP,MAAM,EACN,GAAG,IAAI,EACR,EAAE,gBAAgB,+BA8ElB"}
|
package/package.json
CHANGED
|
@@ -55,9 +55,9 @@ const pillStyles = StyleSheet.create({
|
|
|
55
55
|
paddingVertical: 7,
|
|
56
56
|
paddingHorizontal: 13,
|
|
57
57
|
borderWidth: 1,
|
|
58
|
-
borderColor: colors.
|
|
58
|
+
borderColor: colors.border2,
|
|
59
59
|
backgroundColor: colors.glass,
|
|
60
|
-
borderRadius: radii.
|
|
60
|
+
borderRadius: radii.sm,
|
|
61
61
|
alignSelf: 'flex-start',
|
|
62
62
|
},
|
|
63
63
|
label: { color: colors.textDim, fontFamily: fonts.mono, fontSize: 11.5, fontWeight: '400' },
|
|
@@ -4,6 +4,9 @@ import { LinearGradient } from 'expo-linear-gradient';
|
|
|
4
4
|
import { colors, radii, gradients, fonts, nativeShadows } from '@lockin90/tokens';
|
|
5
5
|
import { hapticSelection } from '../internal/optionalHaptics';
|
|
6
6
|
|
|
7
|
+
// the web's body line height (1.55): the md button is 12 + 14 × 1.55 + 12 = 45.7, as on web
|
|
8
|
+
const LINE = 1.55;
|
|
9
|
+
|
|
7
10
|
export type ButtonVariant = 'default' | 'primary' | 'ghost';
|
|
8
11
|
export type ButtonTone = 'danger';
|
|
9
12
|
|
|
@@ -50,7 +53,7 @@ export function Button({ variant = 'default', tone, size = 'md', title, leading,
|
|
|
50
53
|
|
|
51
54
|
if (variant === 'primary' && !danger) {
|
|
52
55
|
return (
|
|
53
|
-
<Pressable onPress={press} {...rest}>
|
|
56
|
+
<Pressable accessibilityRole="button" onPress={press} {...rest}>
|
|
54
57
|
{({ pressed }) => (
|
|
55
58
|
<LinearGradient
|
|
56
59
|
colors={gradients.cta.stops as unknown as [string, string]}
|
|
@@ -59,7 +62,7 @@ export function Button({ variant = 'default', tone, size = 'md', title, leading,
|
|
|
59
62
|
style={[styles.base, pad, styles.primary, pressed && styles.pressed, style]}
|
|
60
63
|
>
|
|
61
64
|
{leading}
|
|
62
|
-
<Text style={[styles.label, { fontSize: labelSize, color: '#0A0A12' }]}>{title}</Text>
|
|
65
|
+
<Text style={[styles.label, { fontSize: labelSize, lineHeight: labelSize * LINE, color: '#0A0A12' }]}>{title}</Text>
|
|
63
66
|
{trailing}
|
|
64
67
|
</LinearGradient>
|
|
65
68
|
)}
|
|
@@ -90,12 +93,12 @@ export function Button({ variant = 'default', tone, size = 'md', title, leading,
|
|
|
90
93
|
textColor = colors.bad;
|
|
91
94
|
} else {
|
|
92
95
|
backgroundColor = ghost ? 'transparent' : colors.glass2;
|
|
93
|
-
borderColor =
|
|
96
|
+
borderColor = colors.border2;
|
|
94
97
|
textColor = ghost ? colors.textDim : colors.text;
|
|
95
98
|
}
|
|
96
99
|
|
|
97
100
|
return (
|
|
98
|
-
<Pressable onPress={press} {...rest}>
|
|
101
|
+
<Pressable accessibilityRole="button" onPress={press} {...rest}>
|
|
99
102
|
{({ pressed }) => (
|
|
100
103
|
<View
|
|
101
104
|
style={[
|
|
@@ -108,7 +111,7 @@ export function Button({ variant = 'default', tone, size = 'md', title, leading,
|
|
|
108
111
|
]}
|
|
109
112
|
>
|
|
110
113
|
{leading}
|
|
111
|
-
<Text style={[styles.label, { fontSize: labelSize, color: textColor }]}>{title}</Text>
|
|
114
|
+
<Text style={[styles.label, { fontSize: labelSize, lineHeight: labelSize * LINE, color: textColor }]}>{title}</Text>
|
|
112
115
|
{trailing}
|
|
113
116
|
</View>
|
|
114
117
|
)}
|
|
@@ -117,7 +120,7 @@ export function Button({ variant = 'default', tone, size = 'md', title, leading,
|
|
|
117
120
|
}
|
|
118
121
|
|
|
119
122
|
const styles = StyleSheet.create({
|
|
120
|
-
base: { flexDirection: 'row', alignItems: 'center', justifyContent: 'center', gap: 9, borderRadius: radii.
|
|
123
|
+
base: { flexDirection: 'row', alignItems: 'center', justifyContent: 'center', gap: 9, borderRadius: radii.sm },
|
|
121
124
|
padMd: { paddingVertical: 12, paddingHorizontal: 20 },
|
|
122
125
|
padSm: { paddingVertical: 8, paddingHorizontal: 14 },
|
|
123
126
|
primary: { ...nativeShadows.glowAccent },
|
package/src/components/Chip.tsx
CHANGED
|
@@ -18,7 +18,7 @@ export interface ChipProps extends ViewProps {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
const TONE: Record<ChipTone, { color: string; border: string; bg: string }> = {
|
|
21
|
-
default: { color: colors.textDim, border: colors.
|
|
21
|
+
default: { color: colors.textDim, border: colors.border2, bg: colors.glass },
|
|
22
22
|
neutral: { color: colors.textFaint, border: colors.border2, bg: colors.glass2 },
|
|
23
23
|
high: { color: colors.zoneHigh, border: 'rgba(52,245,197,0.35)', bg: 'rgba(52,245,197,0.08)' },
|
|
24
24
|
mid: { color: colors.zoneMid, border: 'rgba(255,176,32,0.35)', bg: 'rgba(255,176,32,0.08)' },
|
|
@@ -34,7 +34,7 @@ const TONE: Record<ChipTone, { color: string; border: string; bg: string }> = {
|
|
|
34
34
|
* pill (high/mid/low read slightly stronger; neutral reads dim on glass-2).
|
|
35
35
|
* The `accent` tone is handled specially (filled gradient). */
|
|
36
36
|
const TONE_SM: Partial<Record<ChipTone, Partial<{ color: string; border: string; bg: string }>>> = {
|
|
37
|
-
neutral: { color: colors.textDim,
|
|
37
|
+
neutral: { color: colors.textDim, bg: colors.glass2 },
|
|
38
38
|
high: { bg: 'rgba(52,245,197,0.10)' },
|
|
39
39
|
mid: { bg: 'rgba(255,176,32,0.10)' },
|
|
40
40
|
low: { bg: 'rgba(255,77,109,0.10)' },
|
|
@@ -102,7 +102,7 @@ const styles = StyleSheet.create({
|
|
|
102
102
|
gap: 7,
|
|
103
103
|
paddingVertical: 5,
|
|
104
104
|
paddingHorizontal: 11,
|
|
105
|
-
borderRadius: radii.
|
|
105
|
+
borderRadius: radii.sm,
|
|
106
106
|
borderWidth: 1,
|
|
107
107
|
alignSelf: 'flex-start',
|
|
108
108
|
},
|
|
@@ -35,7 +35,7 @@ export function FollowButton({
|
|
|
35
35
|
const labelSize = size === 'sm' ? 12 : 12.5;
|
|
36
36
|
|
|
37
37
|
const tone = following
|
|
38
|
-
? { color: colors.textDim, border: colors.
|
|
38
|
+
? { color: colors.textDim, border: colors.border2, bg: colors.glass }
|
|
39
39
|
: { color: '#cbbcff', border: 'rgba(124,92,255,0.45)', bg: 'rgba(124,92,255,0.10)' };
|
|
40
40
|
|
|
41
41
|
return (
|
|
@@ -66,7 +66,7 @@ const styles = StyleSheet.create({
|
|
|
66
66
|
flexDirection: 'row',
|
|
67
67
|
alignItems: 'center',
|
|
68
68
|
gap: 6,
|
|
69
|
-
borderRadius: radii.
|
|
69
|
+
borderRadius: radii.sm,
|
|
70
70
|
borderWidth: 1,
|
|
71
71
|
alignSelf: 'flex-start',
|
|
72
72
|
},
|
|
@@ -20,6 +20,8 @@ export interface FormFieldProps extends ViewProps {
|
|
|
20
20
|
error?: ReactNode;
|
|
21
21
|
/** appends a small accent `*` after the label */
|
|
22
22
|
required?: boolean;
|
|
23
|
+
/** a link or action at the end of the label row (e.g. "Forgot password?") */
|
|
24
|
+
labelAction?: ReactNode;
|
|
23
25
|
/** the form control to wrap */
|
|
24
26
|
children?: ReactNode;
|
|
25
27
|
}
|
|
@@ -30,17 +32,23 @@ export function FormField({
|
|
|
30
32
|
help,
|
|
31
33
|
error,
|
|
32
34
|
required = false,
|
|
35
|
+
labelAction,
|
|
33
36
|
children,
|
|
34
37
|
style,
|
|
35
38
|
...rest
|
|
36
39
|
}: FormFieldProps) {
|
|
37
40
|
return (
|
|
38
41
|
<View style={[styles.field, style]} {...rest}>
|
|
39
|
-
{label ? (
|
|
40
|
-
<
|
|
41
|
-
{label
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
{label || labelAction ? (
|
|
43
|
+
<View style={styles.labelRow}>
|
|
44
|
+
{label ? (
|
|
45
|
+
<Text style={styles.fieldLabel}>
|
|
46
|
+
{label.toUpperCase()}
|
|
47
|
+
{required ? <Text style={styles.req}> *</Text> : null}
|
|
48
|
+
</Text>
|
|
49
|
+
) : null}
|
|
50
|
+
{labelAction}
|
|
51
|
+
</View>
|
|
44
52
|
) : null}
|
|
45
53
|
<View style={styles.control}>{children}</View>
|
|
46
54
|
{error ? (
|
|
@@ -160,12 +168,15 @@ export function SearchInput({
|
|
|
160
168
|
const styles = StyleSheet.create({
|
|
161
169
|
// FormField
|
|
162
170
|
field: { gap: 6, minWidth: 0 },
|
|
171
|
+
labelRow: { flexDirection: 'row', alignItems: 'baseline', justifyContent: 'space-between', gap: 10 },
|
|
172
|
+
// the label the web shows (11px / 500, text-dim, 0.12em, line height 1.55 = 17)
|
|
163
173
|
fieldLabel: {
|
|
164
174
|
fontFamily: fonts.mono,
|
|
165
|
-
fontSize:
|
|
175
|
+
fontSize: 11,
|
|
176
|
+
lineHeight: 17,
|
|
166
177
|
fontWeight: '500',
|
|
167
|
-
letterSpacing: 1.
|
|
168
|
-
color: colors.
|
|
178
|
+
letterSpacing: 1.32,
|
|
179
|
+
color: colors.textDim,
|
|
169
180
|
},
|
|
170
181
|
req: { color: colors.accent, fontSize: 11 },
|
|
171
182
|
control: { minWidth: 0 },
|
package/src/components/Input.tsx
CHANGED
|
@@ -70,28 +70,32 @@ export function Input({
|
|
|
70
70
|
|
|
71
71
|
const styles = StyleSheet.create({
|
|
72
72
|
wrap: { gap: 6, minWidth: 0 },
|
|
73
|
+
// the same caption as FormField's label (11px / 500, text-dim, line height 17), as the web shows
|
|
73
74
|
label: {
|
|
74
75
|
fontFamily: fonts.mono,
|
|
75
|
-
fontSize:
|
|
76
|
+
fontSize: 11,
|
|
77
|
+
lineHeight: 17,
|
|
76
78
|
fontWeight: '500',
|
|
77
|
-
letterSpacing: 1.
|
|
78
|
-
color: colors.
|
|
79
|
+
letterSpacing: 1.32,
|
|
80
|
+
color: colors.textDim,
|
|
79
81
|
},
|
|
80
82
|
field: {
|
|
81
83
|
flexDirection: 'row',
|
|
82
84
|
alignItems: 'center',
|
|
83
85
|
gap: 8,
|
|
84
86
|
minWidth: 0,
|
|
87
|
+
minHeight: 39.6,
|
|
85
88
|
paddingVertical: 9,
|
|
86
89
|
paddingHorizontal: 12,
|
|
87
90
|
borderRadius: radii.sm,
|
|
88
91
|
borderWidth: 1,
|
|
89
92
|
backgroundColor: colors.glass2,
|
|
90
93
|
},
|
|
91
|
-
|
|
94
|
+
// the web box: 9 + 14 × 1.4 + 9 + 2 borders = 39.6 (sm: 6 + 12.5 × 1.4 + 6 + 2 = 31.5)
|
|
95
|
+
fieldSm: { minHeight: 31.5, paddingVertical: 6, paddingHorizontal: 10 },
|
|
92
96
|
// design `.strow .sv` — glass-2 fill (already the field default), border-2
|
|
93
97
|
// (already default), 9px radius, roomier centered padding.
|
|
94
|
-
fieldNumeral: { justifyContent: 'center', paddingVertical: 10, paddingHorizontal: 10, borderRadius: 9 },
|
|
98
|
+
fieldNumeral: { minHeight: 0, justifyContent: 'center', paddingVertical: 10, paddingHorizontal: 10, borderRadius: 9 },
|
|
95
99
|
lead: { flexShrink: 0 },
|
|
96
100
|
input: {
|
|
97
101
|
flex: 1,
|
|
@@ -80,25 +80,29 @@ export function PasswordInput({
|
|
|
80
80
|
|
|
81
81
|
const styles = StyleSheet.create({
|
|
82
82
|
wrap: { gap: 6, minWidth: 0 },
|
|
83
|
+
// the same caption as FormField's label (11px / 500, text-dim, line height 17), as the web shows
|
|
83
84
|
label: {
|
|
84
85
|
fontFamily: fonts.mono,
|
|
85
|
-
fontSize:
|
|
86
|
+
fontSize: 11,
|
|
87
|
+
lineHeight: 17,
|
|
86
88
|
fontWeight: '500',
|
|
87
|
-
letterSpacing: 1.
|
|
88
|
-
color: colors.
|
|
89
|
+
letterSpacing: 1.32,
|
|
90
|
+
color: colors.textDim,
|
|
89
91
|
},
|
|
90
92
|
field: {
|
|
91
93
|
flexDirection: 'row',
|
|
92
94
|
alignItems: 'center',
|
|
93
95
|
gap: 8,
|
|
94
96
|
minWidth: 0,
|
|
97
|
+
minHeight: 39.6,
|
|
95
98
|
paddingVertical: 9,
|
|
96
99
|
paddingHorizontal: 12,
|
|
97
100
|
borderRadius: radii.sm,
|
|
98
101
|
borderWidth: 1,
|
|
99
102
|
backgroundColor: colors.glass2,
|
|
100
103
|
},
|
|
101
|
-
|
|
104
|
+
// the web box: 9 + 14 × 1.4 + 9 + 2 borders = 39.6 (sm: 6 + 12.5 × 1.4 + 6 + 2 = 31.5)
|
|
105
|
+
fieldSm: { minHeight: 31.5, paddingVertical: 6, paddingHorizontal: 10 },
|
|
102
106
|
lead: { flexShrink: 0 },
|
|
103
107
|
input: {
|
|
104
108
|
flex: 1,
|
|
@@ -107,7 +111,9 @@ const styles = StyleSheet.create({
|
|
|
107
111
|
color: colors.text,
|
|
108
112
|
fontFamily: fonts.ui,
|
|
109
113
|
fontSize: 14,
|
|
110
|
-
lineHeight
|
|
114
|
+
// centred by the field's height, as Input (an explicit lineHeight biases the glyph)
|
|
115
|
+
textAlignVertical: 'center',
|
|
116
|
+
includeFontPadding: false,
|
|
111
117
|
},
|
|
112
118
|
inputSm: { fontSize: 12.5 },
|
|
113
119
|
trail: { flexShrink: 0 },
|
|
@@ -248,12 +248,14 @@ const styles = StyleSheet.create({
|
|
|
248
248
|
wrap: { flexDirection: 'column', gap: 6, alignSelf: 'stretch' },
|
|
249
249
|
// sm hugs its content instead of stretching (design `.pref-select` pill)
|
|
250
250
|
wrapSm: { alignSelf: 'auto' },
|
|
251
|
+
// the same caption as FormField's label (11px / 500, text-dim, line height 17), as the web shows
|
|
251
252
|
label: {
|
|
252
|
-
fontFamily: fonts.
|
|
253
|
-
fontSize:
|
|
253
|
+
fontFamily: fonts.mono,
|
|
254
|
+
fontSize: 11,
|
|
255
|
+
lineHeight: 17,
|
|
254
256
|
fontWeight: '500',
|
|
255
|
-
letterSpacing: 1.
|
|
256
|
-
color: colors.
|
|
257
|
+
letterSpacing: 1.32,
|
|
258
|
+
color: colors.textDim,
|
|
257
259
|
},
|
|
258
260
|
field: {
|
|
259
261
|
flexDirection: 'row',
|
|
@@ -87,7 +87,7 @@ const styles = StyleSheet.create({
|
|
|
87
87
|
overflow: 'hidden',
|
|
88
88
|
},
|
|
89
89
|
groupPrimary: { ...nativeShadows.glowAccent },
|
|
90
|
-
groupDefault: { borderWidth: 1, borderColor: colors.
|
|
90
|
+
groupDefault: { borderWidth: 1, borderColor: colors.border2 },
|
|
91
91
|
main: {
|
|
92
92
|
flexDirection: 'row',
|
|
93
93
|
alignItems: 'center',
|
|
@@ -15,9 +15,9 @@ export function SsoButton({ provider, ...rest }: SsoButtonProps) {
|
|
|
15
15
|
const label = provider === 'google' ? 'Google' : 'Apple';
|
|
16
16
|
return (
|
|
17
17
|
<Pressable
|
|
18
|
-
{...rest}
|
|
19
18
|
accessibilityRole="button"
|
|
20
19
|
accessibilityLabel={`Continue with ${label}`}
|
|
20
|
+
{...rest}
|
|
21
21
|
style={({ pressed }) => [
|
|
22
22
|
styles.btn,
|
|
23
23
|
pressed && styles.pressed,
|
|
@@ -75,11 +75,10 @@ const styles = StyleSheet.create({
|
|
|
75
75
|
borderRadius: radii.sm,
|
|
76
76
|
backgroundColor: 'rgba(255,255,255,0.04)',
|
|
77
77
|
borderWidth: 1,
|
|
78
|
-
borderColor:
|
|
78
|
+
borderColor: colors.border2,
|
|
79
79
|
},
|
|
80
80
|
pressed: {
|
|
81
81
|
backgroundColor: 'rgba(255,255,255,0.06)',
|
|
82
|
-
borderColor: 'rgba(255,255,255,0.16)',
|
|
83
82
|
},
|
|
84
83
|
disabled: { opacity: 0.5 },
|
|
85
84
|
iconSlot: { width: 16, height: 16, alignItems: 'center', justifyContent: 'center' },
|
|
@@ -88,6 +87,8 @@ const styles = StyleSheet.create({
|
|
|
88
87
|
fontFamily: fonts.ui,
|
|
89
88
|
fontWeight: '600',
|
|
90
89
|
fontSize: 12.5,
|
|
90
|
+
// the web's 1.55 line height: 10 + 19.4 + 10 + 2 borders = 41.4, as on web
|
|
91
|
+
lineHeight: 12.5 * 1.55,
|
|
91
92
|
letterSpacing: 0.1,
|
|
92
93
|
},
|
|
93
94
|
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { describe, expect, test } from 'vitest';
|
|
2
|
+
import { Button } from '../Button';
|
|
3
|
+
import { render } from './markup';
|
|
4
|
+
|
|
5
|
+
/* Screen readers announce every variant as a button. */
|
|
6
|
+
describe('Button role', () => {
|
|
7
|
+
for (const variant of ['primary', 'ghost'] as const) {
|
|
8
|
+
test(`${variant} is a button`, () => {
|
|
9
|
+
expect(render(Button, { variant, title: 'Sign in' })).toMatch(/role="button"/);
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Text } from 'react-native';
|
|
2
|
+
import { describe, expect, test } from 'vitest';
|
|
3
|
+
import { FormField } from '../FormField';
|
|
4
|
+
import { render } from './markup';
|
|
5
|
+
|
|
6
|
+
/* The label row can end with a link (the sign-in "Forgot password?"). */
|
|
7
|
+
describe('FormField labelAction', () => {
|
|
8
|
+
test('renders the action after the label', () => {
|
|
9
|
+
const html = render(FormField, { label: 'Password', labelAction: <Text>Forgot password?</Text> });
|
|
10
|
+
expect(html.indexOf('PASSWORD')).toBeGreaterThan(-1);
|
|
11
|
+
expect(html.indexOf('Forgot password?')).toBeGreaterThan(html.indexOf('PASSWORD'));
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
test('renders the action without a label', () => {
|
|
15
|
+
expect(render(FormField, { labelAction: <Text>Forgot password?</Text> })).toContain('Forgot password?');
|
|
16
|
+
});
|
|
17
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { describe, expect, test } from 'vitest';
|
|
2
|
+
import { SsoButton } from '../SsoButton';
|
|
3
|
+
import { render } from './markup';
|
|
4
|
+
|
|
5
|
+
/* The app's translated name replaces the built-in English one. */
|
|
6
|
+
describe('SsoButton name', () => {
|
|
7
|
+
test('defaults to the English name', () => {
|
|
8
|
+
expect(render(SsoButton, { provider: 'google' })).toContain('aria-label="Continue with Google"');
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
test('takes the app’s accessibilityLabel', () => {
|
|
12
|
+
const html = render(SsoButton, { provider: 'apple', accessibilityLabel: 'Продовжити з Apple' });
|
|
13
|
+
expect(html).toContain('aria-label="Продовжити з Apple"');
|
|
14
|
+
});
|
|
15
|
+
});
|