react-native-terra-ui 0.13.9 → 0.13.10
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/CHANGELOG.md +7 -0
- package/lib/module/components/header/parts/HeaderGradientOverlay.js +8 -5
- package/lib/module/components/header/parts/HeaderGradientOverlay.js.map +1 -1
- package/lib/module/components/header/parts/HeaderSurface.js +18 -1
- package/lib/module/components/header/parts/HeaderSurface.js.map +1 -1
- package/lib/module/components/input/parts/InputField.js +12 -5
- package/lib/module/components/input/parts/InputField.js.map +1 -1
- package/lib/module/components/input/variants/SearchInput/SearchCancelButton.js +9 -3
- package/lib/module/components/input/variants/SearchInput/SearchCancelButton.js.map +1 -1
- package/lib/typescript/src/components/header/parts/HeaderGradientOverlay.d.ts +11 -1
- package/lib/typescript/src/components/header/parts/HeaderGradientOverlay.d.ts.map +1 -1
- package/lib/typescript/src/components/header/parts/HeaderSurface.d.ts.map +1 -1
- package/lib/typescript/src/components/input/parts/InputField.d.ts.map +1 -1
- package/lib/typescript/src/components/input/types.d.ts +4 -3
- package/lib/typescript/src/components/input/types.d.ts.map +1 -1
- package/lib/typescript/src/components/input/variants/SearchInput/SearchCancelButton.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/header/parts/HeaderGradientOverlay.tsx +12 -2
- package/src/components/header/parts/HeaderSurface.tsx +15 -2
- package/src/components/input/parts/InputField.tsx +16 -1
- package/src/components/input/types.ts +4 -3
- package/src/components/input/variants/SearchInput/SearchCancelButton.tsx +8 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.13.10](https://github.com/earthlin9/react-native-terra-ui/compare/v0.13.9...v0.13.10) (2026-10-05)
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
* **ui:** [header] size the surface gradient from layout so an accessory that grows after mount is covered ([62b7407](https://github.com/earthlin9/react-native-terra-ui/commit/62b7407e2542a2328817fe341da453f5ccf283fc))
|
|
8
|
+
* **ui:** [input] lift a focused field and its cancel button with the toolbar's xs elevation ([2b4950a](https://github.com/earthlin9/react-native-terra-ui/commit/2b4950a2f39d530012240f1d46e6e7908af35084))
|
|
9
|
+
|
|
3
10
|
## [0.13.9](https://github.com/earthlin9/react-native-terra-ui/compare/v0.13.8...v0.13.9) (2026-10-05)
|
|
4
11
|
|
|
5
12
|
### Bug Fixes
|
|
@@ -19,12 +19,15 @@ export const HEADER_FADE_END_OPACITY = 0.9;
|
|
|
19
19
|
*/
|
|
20
20
|
export function HeaderGradientOverlay({
|
|
21
21
|
color,
|
|
22
|
-
endOpacity = HEADER_FADE_END_OPACITY
|
|
22
|
+
endOpacity = HEADER_FADE_END_OPACITY,
|
|
23
|
+
size
|
|
23
24
|
}) {
|
|
24
25
|
const gradientId = useId();
|
|
26
|
+
const width = size?.width ?? "100%";
|
|
27
|
+
const height = size?.height ?? "100%";
|
|
25
28
|
return /*#__PURE__*/_jsxs(Svg, {
|
|
26
|
-
height:
|
|
27
|
-
width:
|
|
29
|
+
height: height,
|
|
30
|
+
width: width,
|
|
28
31
|
children: [/*#__PURE__*/_jsx(Defs, {
|
|
29
32
|
children: /*#__PURE__*/_jsxs(SvgLinearGradient, {
|
|
30
33
|
id: gradientId,
|
|
@@ -43,8 +46,8 @@ export function HeaderGradientOverlay({
|
|
|
43
46
|
})]
|
|
44
47
|
})
|
|
45
48
|
}), /*#__PURE__*/_jsx(Rect, {
|
|
46
|
-
width:
|
|
47
|
-
height:
|
|
49
|
+
width: width,
|
|
50
|
+
height: height,
|
|
48
51
|
fill: `url(#${gradientId})`
|
|
49
52
|
})]
|
|
50
53
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useId","Svg","Defs","Rect","Stop","LinearGradient","SvgLinearGradient","jsx","_jsx","jsxs","_jsxs","HEADER_FADE_END_OPACITY","HeaderGradientOverlay","color","endOpacity","
|
|
1
|
+
{"version":3,"names":["useId","Svg","Defs","Rect","Stop","LinearGradient","SvgLinearGradient","jsx","_jsx","jsxs","_jsxs","HEADER_FADE_END_OPACITY","HeaderGradientOverlay","color","endOpacity","size","gradientId","width","height","children","id","x1","y1","x2","y2","offset","stopColor","stopOpacity","fill"],"sourceRoot":"../../../../../src","sources":["components/header/parts/HeaderGradientOverlay.tsx"],"mappings":";;AAAA,SAASA,KAAK,QAAQ,OAAO;AAE7B,OAAOC,GAAG,IAAIC,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEC,cAAc,IAAIC,iBAAiB,QAAQ,kBAAkB;;AAE7F;AACA;AACA;AACA;AACA;AAJA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAKA,OAAO,MAAMC,uBAAuB,GAAG,GAAG;AAgB1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CAAC;EACpCC,KAAK;EACLC,UAAU,GAAGH,uBAAuB;EACpCI;AAC0B,CAAC,EAAE;EAC7B,MAAMC,UAAU,GAAGhB,KAAK,CAAC,CAAC;EAC1B,MAAMiB,KAAK,GAAGF,IAAI,EAAEE,KAAK,IAAI,MAAM;EACnC,MAAMC,MAAM,GAAGH,IAAI,EAAEG,MAAM,IAAI,MAAM;EAErC,oBACER,KAAA,CAACT,GAAG;IAACiB,MAAM,EAAEA,MAAO;IAACD,KAAK,EAAEA,KAAM;IAAAE,QAAA,gBAChCX,IAAA,CAACN,IAAI;MAAAiB,QAAA,eACHT,KAAA,CAACJ,iBAAiB;QAACc,EAAE,EAAEJ,UAAW;QAACK,EAAE,EAAC,GAAG;QAACC,EAAE,EAAC,GAAG;QAACC,EAAE,EAAC,GAAG;QAACC,EAAE,EAAC,GAAG;QAAAL,QAAA,gBAC5DX,IAAA,CAACJ,IAAI;UAACqB,MAAM,EAAE,CAAE;UAACC,SAAS,EAAEb,KAAM;UAACc,WAAW,EAAE;QAAE,CAAE,CAAC,eACrDnB,IAAA,CAACJ,IAAI;UAACqB,MAAM,EAAE,CAAE;UAACC,SAAS,EAAEb,KAAM;UAACc,WAAW,EAAEb;QAAW,CAAE,CAAC;MAAA,CAC7C;IAAC,CAChB,CAAC,eACPN,IAAA,CAACL,IAAI;MAACc,KAAK,EAAEA,KAAM;MAACC,MAAM,EAAEA,MAAO;MAACU,IAAI,EAAE,QAAQZ,UAAU;IAAI,CAAE,CAAC;EAAA,CAChE,CAAC;AAEV","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { useCallback, useState } from "react";
|
|
3
4
|
import Animated from "react-native-reanimated";
|
|
4
5
|
import { StyleSheet } from "react-native-unistyles";
|
|
5
6
|
import { HEADER_FADE_END_OPACITY, HeaderGradientOverlay } from "./HeaderGradientOverlay.js";
|
|
@@ -21,12 +22,28 @@ export function HeaderSurface({
|
|
|
21
22
|
hasAccessoryBelow
|
|
22
23
|
}) {
|
|
23
24
|
const fades = accessory || !hasAccessoryBelow;
|
|
25
|
+
// Measured so the gradient is drawn at the surface's real size. An accessory
|
|
26
|
+
// can mount a few points tall and grow, and the SVG's percentage lengths
|
|
27
|
+
// would stay resolved against the size it mounted at.
|
|
28
|
+
const [size, setSize] = useState();
|
|
29
|
+
const handleLayout = useCallback(event => {
|
|
30
|
+
const {
|
|
31
|
+
width,
|
|
32
|
+
height
|
|
33
|
+
} = event.nativeEvent.layout;
|
|
34
|
+
setSize(previous => previous && previous.width === width && previous.height === height ? previous : {
|
|
35
|
+
width,
|
|
36
|
+
height
|
|
37
|
+
});
|
|
38
|
+
}, []);
|
|
24
39
|
return /*#__PURE__*/_jsx(Animated.View, {
|
|
25
40
|
style: [styles.surface, animatedStyle],
|
|
26
41
|
pointerEvents: "none",
|
|
42
|
+
onLayout: handleLayout,
|
|
27
43
|
children: /*#__PURE__*/_jsx(HeaderGradientOverlay, {
|
|
28
44
|
color: color,
|
|
29
|
-
endOpacity: fades ? HEADER_FADE_END_OPACITY : 1
|
|
45
|
+
endOpacity: fades ? HEADER_FADE_END_OPACITY : 1,
|
|
46
|
+
size: size
|
|
30
47
|
})
|
|
31
48
|
});
|
|
32
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Animated","StyleSheet","HEADER_FADE_END_OPACITY","HeaderGradientOverlay","jsx","_jsx","HeaderSurface","color","animatedStyle","accessory","hasAccessoryBelow","fades","View","style","styles","surface","pointerEvents","children","endOpacity","create","position","top","left","right","bottom"],"sourceRoot":"../../../../../src","sources":["components/header/parts/HeaderSurface.tsx"],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"names":["useCallback","useState","Animated","StyleSheet","HEADER_FADE_END_OPACITY","HeaderGradientOverlay","jsx","_jsx","HeaderSurface","color","animatedStyle","accessory","hasAccessoryBelow","fades","size","setSize","handleLayout","event","width","height","nativeEvent","layout","previous","View","style","styles","surface","pointerEvents","onLayout","children","endOpacity","create","position","top","left","right","bottom"],"sourceRoot":"../../../../../src","sources":["components/header/parts/HeaderSurface.tsx"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AAG7C,OAAOC,QAAQ,MAAiC,yBAAyB;AACzE,SAASC,UAAU,QAAQ,wBAAwB;AAEnD,SAASC,uBAAuB,EAAEC,qBAAqB;AAAkC,SAAAC,GAAA,IAAAC,IAAA;AAkBzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAAC;EAAEC,KAAK;EAAEC,aAAa;EAAEC,SAAS;EAAEC;AAAsC,CAAC,EAAE;EACxG,MAAMC,KAAK,GAAGF,SAAS,IAAI,CAACC,iBAAiB;EAC7C;EACA;EACA;EACA,MAAM,CAACE,IAAI,EAAEC,OAAO,CAAC,GAAGd,QAAQ,CAAoC,CAAC;EACrE,MAAMe,YAAY,GAAGhB,WAAW,CAAEiB,KAAwB,IAAK;IAC7D,MAAM;MAAEC,KAAK;MAAEC;IAAO,CAAC,GAAGF,KAAK,CAACG,WAAW,CAACC,MAAM;IAClDN,OAAO,CAAEO,QAAQ,IACfA,QAAQ,IAAIA,QAAQ,CAACJ,KAAK,KAAKA,KAAK,IAAII,QAAQ,CAACH,MAAM,KAAKA,MAAM,GAAGG,QAAQ,GAAG;MAAEJ,KAAK;MAAEC;IAAO,CAClG,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EACN,oBACEZ,IAAA,CAACL,QAAQ,CAACqB,IAAI;IAACC,KAAK,EAAE,CAACC,MAAM,CAACC,OAAO,EAAEhB,aAAa,CAAE;IAACiB,aAAa,EAAC,MAAM;IAACC,QAAQ,EAAEZ,YAAa;IAAAa,QAAA,eACjGtB,IAAA,CAACF,qBAAqB;MAACI,KAAK,EAAEA,KAAM;MAACqB,UAAU,EAAEjB,KAAK,GAAGT,uBAAuB,GAAG,CAAE;MAACU,IAAI,EAAEA;IAAK,CAAE;EAAC,CACvF,CAAC;AAEpB;AAEA,MAAMW,MAAM,GAAGtB,UAAU,CAAC4B,MAAM,CAAC,OAAO;EACtCL,OAAO,EAAE;IACPM,QAAQ,EAAE,UAAU;IACpBC,GAAG,EAAE,CAAC;IACNC,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRC,MAAM,EAAE;EACV;AACF,CAAC,CAAC,CAAC","ignoreList":[]}
|
|
@@ -4,6 +4,7 @@ import { View } from "react-native-unistyles/components/native/View";
|
|
|
4
4
|
import { TextInput } from "react-native-unistyles/components/native/TextInput";
|
|
5
5
|
import { forwardRef } from "react";
|
|
6
6
|
import { StyleSheet, useUnistyles } from "react-native-unistyles";
|
|
7
|
+
import { withAlpha } from "../../../utils/color-utils.js";
|
|
7
8
|
import { resolveThemeColor } from "../../../utils/resolve-theme-color.js";
|
|
8
9
|
import { FONT_WEIGHT_VALUE, SYSTEM_FONT } from "../../../utils/typography.js";
|
|
9
10
|
import { useFocusState } from "../hooks/use-focus-state.js";
|
|
@@ -140,13 +141,19 @@ const styles = StyleSheet.create(theme => {
|
|
|
140
141
|
...(color && !isInvalid && {
|
|
141
142
|
borderColor: focusColor
|
|
142
143
|
}),
|
|
144
|
+
// The same lift a standalone toolbar button has, so a focused field in
|
|
145
|
+
// a header reads as one family with the buttons beside it, rather than
|
|
146
|
+
// a tinted ring that nothing else in the header wears. Written as a
|
|
147
|
+
// `boxShadow` rather than spreading the preset's `shadow*` props: on
|
|
148
|
+
// iOS those on this container stop the field from taking focus, and
|
|
149
|
+
// the field is the one thing here that must. A blur of twice the Core
|
|
150
|
+
// Animation radius is the closest CSS reading of the same shadow.
|
|
143
151
|
...(hasGlow && !isInvalid && {
|
|
144
152
|
boxShadow: [{
|
|
145
|
-
offsetX:
|
|
146
|
-
offsetY:
|
|
147
|
-
blurRadius:
|
|
148
|
-
|
|
149
|
-
color: focusColor
|
|
153
|
+
offsetX: theme.elevation.xs.shadowOffset.width,
|
|
154
|
+
offsetY: theme.elevation.xs.shadowOffset.height,
|
|
155
|
+
blurRadius: theme.elevation.xs.shadowRadius * 2,
|
|
156
|
+
color: withAlpha(theme.elevation.xs.shadowColor, theme.elevation.xs.shadowOpacity)
|
|
150
157
|
}]
|
|
151
158
|
}),
|
|
152
159
|
uni__dependencies: [0]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["forwardRef","StyleSheet","useUnistyles","resolveThemeColor","FONT_WEIGHT_VALUE","SYSTEM_FONT","useFocusState","jsx","_jsx","jsxs","_jsxs","FIELD_HEIGHT","sm","md","lg","TEXT_VARIANT","InputField","size","isDisabled","isInvalid","focusBorderColor","focusBorderWidth","hasFocusGlow","leading","trailing","background","radius","style","onFocus","onBlur","rest","ref","isFocused","handleFocus","handleBlur","showsFocus","theme","_styles","styles","useVariants","disabled","invalid","View","container","fill","focus","children","TextInput","editable","placeholderTextColor","color","input","maxFontSizeMultiplier","typography","variants","create","bodyWeight","fontWeight","bodyFont","fonts","isSystemBodyFont","flexDirection","alignItems","borderWidth","hairlineWidth","borderColor","height","paddingHorizontal","spacing","gap","true","false","opacity","uni__dependencies","width","hasGlow","focusColor","undefined","boxShadow","offsetX","offsetY","blurRadius","
|
|
1
|
+
{"version":3,"names":["forwardRef","StyleSheet","useUnistyles","withAlpha","resolveThemeColor","FONT_WEIGHT_VALUE","SYSTEM_FONT","useFocusState","jsx","_jsx","jsxs","_jsxs","FIELD_HEIGHT","sm","md","lg","TEXT_VARIANT","InputField","size","isDisabled","isInvalid","focusBorderColor","focusBorderWidth","hasFocusGlow","leading","trailing","background","radius","style","onFocus","onBlur","rest","ref","isFocused","handleFocus","handleBlur","showsFocus","theme","_styles","styles","useVariants","disabled","invalid","View","container","fill","focus","children","TextInput","editable","placeholderTextColor","color","input","maxFontSizeMultiplier","typography","variants","create","bodyWeight","fontWeight","bodyFont","fonts","isSystemBodyFont","flexDirection","alignItems","borderWidth","hairlineWidth","borderColor","height","paddingHorizontal","spacing","gap","true","false","opacity","uni__dependencies","width","hasGlow","focusColor","undefined","boxShadow","offsetX","elevation","xs","shadowOffset","offsetY","blurRadius","shadowRadius","shadowColor","shadowOpacity","backgroundColor","borderRadius","flex","paddingVertical","fontFamily","fontSize"],"sourceRoot":"../../../../../src","sources":["components/input/parts/InputField.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -51,7 +51,11 @@ export function SearchCancelButton({
|
|
|
51
51
|
opacity: progress.value,
|
|
52
52
|
transform: [{
|
|
53
53
|
scale: interpolate(progress.value, [0, 1], [START_SCALE, 1])
|
|
54
|
-
}]
|
|
54
|
+
}],
|
|
55
|
+
// Clipped only while sliding, so the button appears from the field's edge.
|
|
56
|
+
// At rest the slot is exactly the button's size, and a clip there would cut
|
|
57
|
+
// off the shadow that matches it to the toolbar buttons.
|
|
58
|
+
overflow: progress.value >= 1 ? "visible" : "hidden"
|
|
55
59
|
}));
|
|
56
60
|
return /*#__PURE__*/_jsx(Animated.View, {
|
|
57
61
|
style: [styles.slot(isVisible), slotStyle],
|
|
@@ -74,10 +78,11 @@ const styles = StyleSheet.create(theme => ({
|
|
|
74
78
|
slot: isVisible => ({
|
|
75
79
|
flexDirection: "row",
|
|
76
80
|
justifyContent: "flex-end",
|
|
77
|
-
overflow: "hidden",
|
|
78
81
|
pointerEvents: isVisible ? "auto" : "none"
|
|
79
82
|
}),
|
|
80
|
-
// A circle the height of the field, filled and edged to match it
|
|
83
|
+
// A circle the height of the field, filled and edged to match it, and
|
|
84
|
+
// lifted like a standalone toolbar button: it only exists while the field is
|
|
85
|
+
// focused, so it wears the same shadow the focused field does.
|
|
81
86
|
button: (diameter, background) => ({
|
|
82
87
|
width: diameter,
|
|
83
88
|
height: diameter,
|
|
@@ -87,6 +92,7 @@ const styles = StyleSheet.create(theme => ({
|
|
|
87
92
|
backgroundColor: resolveThemeColor(background, theme),
|
|
88
93
|
borderWidth: StyleSheet.hairlineWidth,
|
|
89
94
|
borderColor: theme.color["border.subtle"],
|
|
95
|
+
...theme.elevation.xs,
|
|
90
96
|
uni__dependencies: [0]
|
|
91
97
|
})
|
|
92
98
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","Animated","Easing","interpolate","useAnimatedStyle","useSharedValue","withTiming","StyleSheet","useUnistyles","resolveThemeColor","Icon","PressableOpacity","FIELD_HEIGHT","ICON_SIZE","jsx","_jsx","TRANSITION_MS","START_SCALE","GLYPH_EXTRA","SearchCancelButton","isVisible","size","background","accessibilityLabel","onPress","theme","progress","diameter","slotWidth","spacing","value","duration","easing","bezier","slotStyle","width","opacity","transform","scale","View","style","styles","slot","accessibilityElementsHidden","importantForAccessibility","children","accessibilityRole","button","name","color","create","flexDirection","justifyContent","
|
|
1
|
+
{"version":3,"names":["useEffect","Animated","Easing","interpolate","useAnimatedStyle","useSharedValue","withTiming","StyleSheet","useUnistyles","resolveThemeColor","Icon","PressableOpacity","FIELD_HEIGHT","ICON_SIZE","jsx","_jsx","TRANSITION_MS","START_SCALE","GLYPH_EXTRA","SearchCancelButton","isVisible","size","background","accessibilityLabel","onPress","theme","progress","diameter","slotWidth","spacing","value","duration","easing","bezier","slotStyle","width","opacity","transform","scale","overflow","View","style","styles","slot","accessibilityElementsHidden","importantForAccessibility","children","accessibilityRole","button","name","color","create","flexDirection","justifyContent","pointerEvents","height","borderRadius","alignItems","backgroundColor","borderWidth","hairlineWidth","borderColor","elevation","xs","uni__dependencies"],"sourceRoot":"../../../../../../src","sources":["components/input/variants/SearchInput/SearchCancelButton.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,6 +9,16 @@ export interface HeaderGradientOverlayProps {
|
|
|
9
9
|
color: string;
|
|
10
10
|
/** Opacity at the bottom edge. Defaults to {@link HEADER_FADE_END_OPACITY}; `1` is a solid fill. */
|
|
11
11
|
endOpacity?: number;
|
|
12
|
+
/**
|
|
13
|
+
* The overlay's measured size in dp. Until the caller knows it, the SVG sizes
|
|
14
|
+
* itself with percentages, which react-native-svg resolves once, at mount.
|
|
15
|
+
* A surface that grows after mounting (an accessory animating open from
|
|
16
|
+
* nothing) would otherwise keep painting the sliver it was born at.
|
|
17
|
+
*/
|
|
18
|
+
size?: {
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
};
|
|
12
22
|
}
|
|
13
23
|
/**
|
|
14
24
|
* Vertical fade behind header content, shared by header variants.
|
|
@@ -17,5 +27,5 @@ export interface HeaderGradientOverlayProps {
|
|
|
17
27
|
* the surface nor reserves a band inside it, so callers size the surface and
|
|
18
28
|
* the ramp simply spans whatever they gave it.
|
|
19
29
|
*/
|
|
20
|
-
export declare function HeaderGradientOverlay({ color, endOpacity, }: HeaderGradientOverlayProps): import("react").JSX.Element;
|
|
30
|
+
export declare function HeaderGradientOverlay({ color, endOpacity, size, }: HeaderGradientOverlayProps): import("react").JSX.Element;
|
|
21
31
|
//# sourceMappingURL=HeaderGradientOverlay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderGradientOverlay.d.ts","sourceRoot":"","sources":["../../../../../../src/components/header/parts/HeaderGradientOverlay.tsx"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,MAAM,WAAW,0BAA0B;IACzC,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,oGAAoG;IACpG,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"HeaderGradientOverlay.d.ts","sourceRoot":"","sources":["../../../../../../src/components/header/parts/HeaderGradientOverlay.tsx"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,MAAM,WAAW,0BAA0B;IACzC,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,oGAAoG;IACpG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,UAAoC,EACpC,IAAI,GACL,EAAE,0BAA0B,+BAgB5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderSurface.d.ts","sourceRoot":"","sources":["../../../../../../src/components/header/parts/HeaderSurface.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"HeaderSurface.d.ts","sourceRoot":"","sources":["../../../../../../src/components/header/parts/HeaderSurface.tsx"],"names":[],"mappings":"AAGA,OAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAK1E,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAC;AAEnF,MAAM,WAAW,kBAAkB;IACjC,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,0FAA0F;IAC1F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAAE,kBAAkB,+BAiBvG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputField.d.ts","sourceRoot":"","sources":["../../../../../../src/components/input/parts/InputField.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"InputField.d.ts","sourceRoot":"","sources":["../../../../../../src/components/input/parts/InputField.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAU,CAAC;AAE1D,wFAAwF;AACxF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAA8B,CAAC;AASlF;;;;GAIG;AACH,eAAO,MAAM,UAAU,oMAqDrB,CAAC"}
|
|
@@ -28,9 +28,10 @@ export interface InputBaseProps extends Omit<TextInputProps, "style" | "editable
|
|
|
28
28
|
/** Border width while focused, in dp. Defaults to `undefined` — the resting hairline stays. */
|
|
29
29
|
focusBorderWidth?: number;
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
31
|
+
* Lift the field with a soft shadow while focused: the theme's `xs`
|
|
32
|
+
* elevation, the same one a standalone `Toolbar.Button` wears, so a field
|
|
33
|
+
* in a header matches the buttons beside it. Defaults to `false`;
|
|
34
|
+
* `Input.Search` turns it on.
|
|
34
35
|
*/
|
|
35
36
|
hasFocusGlow?: boolean;
|
|
36
37
|
/** Merged over the container's own style. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/components/input/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,wCAAwC;AACxC,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C;;;;GAIG;AACH,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,UAAU,CAAC;IAChF,sDAAsD;IACtD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,kDAAkD;IAClD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,uEAAuE;IACvE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,uFAAuF;IACvF,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/components/input/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,wCAAwC;AACxC,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C;;;;GAIG;AACH,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,UAAU,CAAC;IAChF,sDAAsD;IACtD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,kDAAkD;IAClD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,uEAAuE;IACvE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,uFAAuF;IACvF,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B"}
|
package/lib/typescript/src/components/input/variants/SearchInput/SearchCancelButton.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchCancelButton.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/input/variants/SearchInput/SearchCancelButton.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAa,CAAC;AAY7C,UAAU,uBAAuB;IAC/B,6DAA6D;IAC7D,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,uDAAuD;IACvD,UAAU,EAAE,UAAU,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,IAAI,EACJ,UAAU,EACV,kBAAkB,EAClB,OAAO,GACR,EAAE,uBAAuB,+
|
|
1
|
+
{"version":3,"file":"SearchCancelButton.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/input/variants/SearchInput/SearchCancelButton.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAa,CAAC;AAY7C,UAAU,uBAAuB;IAC/B,6DAA6D;IAC7D,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,uDAAuD;IACvD,UAAU,EAAE,UAAU,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,IAAI,EACJ,UAAU,EACV,kBAAkB,EAClB,OAAO,GACR,EAAE,uBAAuB,+BA2CzB"}
|
package/package.json
CHANGED
|
@@ -14,6 +14,13 @@ export interface HeaderGradientOverlayProps {
|
|
|
14
14
|
color: string;
|
|
15
15
|
/** Opacity at the bottom edge. Defaults to {@link HEADER_FADE_END_OPACITY}; `1` is a solid fill. */
|
|
16
16
|
endOpacity?: number;
|
|
17
|
+
/**
|
|
18
|
+
* The overlay's measured size in dp. Until the caller knows it, the SVG sizes
|
|
19
|
+
* itself with percentages, which react-native-svg resolves once, at mount.
|
|
20
|
+
* A surface that grows after mounting (an accessory animating open from
|
|
21
|
+
* nothing) would otherwise keep painting the sliver it was born at.
|
|
22
|
+
*/
|
|
23
|
+
size?: { width: number; height: number };
|
|
17
24
|
}
|
|
18
25
|
|
|
19
26
|
/**
|
|
@@ -26,18 +33,21 @@ export interface HeaderGradientOverlayProps {
|
|
|
26
33
|
export function HeaderGradientOverlay({
|
|
27
34
|
color,
|
|
28
35
|
endOpacity = HEADER_FADE_END_OPACITY,
|
|
36
|
+
size,
|
|
29
37
|
}: HeaderGradientOverlayProps) {
|
|
30
38
|
const gradientId = useId();
|
|
39
|
+
const width = size?.width ?? "100%";
|
|
40
|
+
const height = size?.height ?? "100%";
|
|
31
41
|
|
|
32
42
|
return (
|
|
33
|
-
<Svg height=
|
|
43
|
+
<Svg height={height} width={width}>
|
|
34
44
|
<Defs>
|
|
35
45
|
<SvgLinearGradient id={gradientId} x1="0" y1="0" x2="0" y2="1">
|
|
36
46
|
<Stop offset={0} stopColor={color} stopOpacity={1} />
|
|
37
47
|
<Stop offset={1} stopColor={color} stopOpacity={endOpacity} />
|
|
38
48
|
</SvgLinearGradient>
|
|
39
49
|
</Defs>
|
|
40
|
-
<Rect width=
|
|
50
|
+
<Rect width={width} height={height} fill={`url(#${gradientId})`} />
|
|
41
51
|
</Svg>
|
|
42
52
|
);
|
|
43
53
|
}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { useCallback, useState } from "react";
|
|
2
|
+
import type { LayoutChangeEvent } from "react-native";
|
|
3
|
+
|
|
1
4
|
import Animated, { type useAnimatedStyle } from "react-native-reanimated";
|
|
2
5
|
import { StyleSheet } from "react-native-unistyles";
|
|
3
6
|
|
|
@@ -31,9 +34,19 @@ export interface HeaderSurfaceProps {
|
|
|
31
34
|
*/
|
|
32
35
|
export function HeaderSurface({ color, animatedStyle, accessory, hasAccessoryBelow }: HeaderSurfaceProps) {
|
|
33
36
|
const fades = accessory || !hasAccessoryBelow;
|
|
37
|
+
// Measured so the gradient is drawn at the surface's real size. An accessory
|
|
38
|
+
// can mount a few points tall and grow, and the SVG's percentage lengths
|
|
39
|
+
// would stay resolved against the size it mounted at.
|
|
40
|
+
const [size, setSize] = useState<{ width: number; height: number }>();
|
|
41
|
+
const handleLayout = useCallback((event: LayoutChangeEvent) => {
|
|
42
|
+
const { width, height } = event.nativeEvent.layout;
|
|
43
|
+
setSize((previous) =>
|
|
44
|
+
previous && previous.width === width && previous.height === height ? previous : { width, height }
|
|
45
|
+
);
|
|
46
|
+
}, []);
|
|
34
47
|
return (
|
|
35
|
-
<Animated.View style={[styles.surface, animatedStyle]} pointerEvents="none">
|
|
36
|
-
<HeaderGradientOverlay color={color} endOpacity={fades ? HEADER_FADE_END_OPACITY : 1} />
|
|
48
|
+
<Animated.View style={[styles.surface, animatedStyle]} pointerEvents="none" onLayout={handleLayout}>
|
|
49
|
+
<HeaderGradientOverlay color={color} endOpacity={fades ? HEADER_FADE_END_OPACITY : 1} size={size} />
|
|
37
50
|
</Animated.View>
|
|
38
51
|
);
|
|
39
52
|
}
|
|
@@ -4,6 +4,7 @@ import { TextInput, View } from "react-native";
|
|
|
4
4
|
import { StyleSheet, useUnistyles } from "react-native-unistyles";
|
|
5
5
|
|
|
6
6
|
import type { ColorToken, RadiusKey } from "#theme/types";
|
|
7
|
+
import { withAlpha } from "#utils/color-utils";
|
|
7
8
|
import { resolveThemeColor } from "#utils/resolve-theme-color";
|
|
8
9
|
import { FONT_WEIGHT_VALUE, SYSTEM_FONT } from "#utils/typography";
|
|
9
10
|
import { useFocusState } from "../hooks/use-focus-state";
|
|
@@ -124,9 +125,23 @@ const styles = StyleSheet.create((theme) => {
|
|
|
124
125
|
return {
|
|
125
126
|
...(width !== undefined && { borderWidth: width }),
|
|
126
127
|
...(color && !isInvalid && { borderColor: focusColor }),
|
|
128
|
+
// The same lift a standalone toolbar button has, so a focused field in
|
|
129
|
+
// a header reads as one family with the buttons beside it, rather than
|
|
130
|
+
// a tinted ring that nothing else in the header wears. Written as a
|
|
131
|
+
// `boxShadow` rather than spreading the preset's `shadow*` props: on
|
|
132
|
+
// iOS those on this container stop the field from taking focus, and
|
|
133
|
+
// the field is the one thing here that must. A blur of twice the Core
|
|
134
|
+
// Animation radius is the closest CSS reading of the same shadow.
|
|
127
135
|
...(hasGlow &&
|
|
128
136
|
!isInvalid && {
|
|
129
|
-
boxShadow: [
|
|
137
|
+
boxShadow: [
|
|
138
|
+
{
|
|
139
|
+
offsetX: theme.elevation.xs.shadowOffset.width,
|
|
140
|
+
offsetY: theme.elevation.xs.shadowOffset.height,
|
|
141
|
+
blurRadius: theme.elevation.xs.shadowRadius * 2,
|
|
142
|
+
color: withAlpha(theme.elevation.xs.shadowColor, theme.elevation.xs.shadowOpacity),
|
|
143
|
+
},
|
|
144
|
+
],
|
|
130
145
|
}),
|
|
131
146
|
};
|
|
132
147
|
},
|
|
@@ -31,9 +31,10 @@ export interface InputBaseProps extends Omit<TextInputProps, "style" | "editable
|
|
|
31
31
|
/** Border width while focused, in dp. Defaults to `undefined` — the resting hairline stays. */
|
|
32
32
|
focusBorderWidth?: number;
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
34
|
+
* Lift the field with a soft shadow while focused: the theme's `xs`
|
|
35
|
+
* elevation, the same one a standalone `Toolbar.Button` wears, so a field
|
|
36
|
+
* in a header matches the buttons beside it. Defaults to `false`;
|
|
37
|
+
* `Input.Search` turns it on.
|
|
37
38
|
*/
|
|
38
39
|
hasFocusGlow?: boolean;
|
|
39
40
|
/** Merged over the container's own style. */
|
|
@@ -68,6 +68,10 @@ export function SearchCancelButton({
|
|
|
68
68
|
width: progress.value * slotWidth,
|
|
69
69
|
opacity: progress.value,
|
|
70
70
|
transform: [{ scale: interpolate(progress.value, [0, 1], [START_SCALE, 1]) }],
|
|
71
|
+
// Clipped only while sliding, so the button appears from the field's edge.
|
|
72
|
+
// At rest the slot is exactly the button's size, and a clip there would cut
|
|
73
|
+
// off the shadow that matches it to the toolbar buttons.
|
|
74
|
+
overflow: progress.value >= 1 ? "visible" : "hidden",
|
|
71
75
|
}));
|
|
72
76
|
|
|
73
77
|
return (
|
|
@@ -92,10 +96,11 @@ const styles = StyleSheet.create((theme) => ({
|
|
|
92
96
|
slot: (isVisible: boolean) => ({
|
|
93
97
|
flexDirection: "row",
|
|
94
98
|
justifyContent: "flex-end",
|
|
95
|
-
overflow: "hidden",
|
|
96
99
|
pointerEvents: isVisible ? "auto" : "none",
|
|
97
100
|
}),
|
|
98
|
-
// A circle the height of the field, filled and edged to match it
|
|
101
|
+
// A circle the height of the field, filled and edged to match it, and
|
|
102
|
+
// lifted like a standalone toolbar button: it only exists while the field is
|
|
103
|
+
// focused, so it wears the same shadow the focused field does.
|
|
99
104
|
button: (diameter: number, background: ColorToken) => ({
|
|
100
105
|
width: diameter,
|
|
101
106
|
height: diameter,
|
|
@@ -105,5 +110,6 @@ const styles = StyleSheet.create((theme) => ({
|
|
|
105
110
|
backgroundColor: resolveThemeColor(background, theme),
|
|
106
111
|
borderWidth: StyleSheet.hairlineWidth,
|
|
107
112
|
borderColor: theme.color["border.subtle"],
|
|
113
|
+
...theme.elevation.xs,
|
|
108
114
|
}),
|
|
109
115
|
}));
|