rn-floating-input 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/lib/commonjs/ErrorText.js +26 -0
  2. package/lib/commonjs/ErrorText.js.map +1 -0
  3. package/lib/commonjs/FloatingInput.js +79 -118
  4. package/lib/commonjs/FloatingInput.js.map +1 -1
  5. package/lib/commonjs/FloatingLabel.js +27 -0
  6. package/lib/commonjs/FloatingLabel.js.map +1 -0
  7. package/lib/commonjs/defaults.js +31 -26
  8. package/lib/commonjs/defaults.js.map +1 -1
  9. package/lib/commonjs/index.js +0 -13
  10. package/lib/commonjs/index.js.map +1 -1
  11. package/lib/commonjs/useFloatingLabel.js +86 -0
  12. package/lib/commonjs/useFloatingLabel.js.map +1 -0
  13. package/lib/module/ErrorText.js +21 -0
  14. package/lib/module/ErrorText.js.map +1 -0
  15. package/lib/module/FloatingInput.js +82 -121
  16. package/lib/module/FloatingInput.js.map +1 -1
  17. package/lib/module/FloatingLabel.js +22 -0
  18. package/lib/module/FloatingLabel.js.map +1 -0
  19. package/lib/module/defaults.js +31 -26
  20. package/lib/module/defaults.js.map +1 -1
  21. package/lib/module/index.js +1 -2
  22. package/lib/module/index.js.map +1 -1
  23. package/lib/module/useFloatingLabel.js +82 -0
  24. package/lib/module/useFloatingLabel.js.map +1 -0
  25. package/lib/typescript/ErrorText.d.ts +14 -0
  26. package/lib/typescript/ErrorText.d.ts.map +1 -0
  27. package/lib/typescript/FloatingInput.d.ts.map +1 -1
  28. package/lib/typescript/FloatingLabel.d.ts +17 -0
  29. package/lib/typescript/FloatingLabel.d.ts.map +1 -0
  30. package/lib/typescript/defaults.d.ts +2 -1
  31. package/lib/typescript/defaults.d.ts.map +1 -1
  32. package/lib/typescript/index.d.ts +2 -3
  33. package/lib/typescript/index.d.ts.map +1 -1
  34. package/lib/typescript/types.d.ts +3 -5
  35. package/lib/typescript/types.d.ts.map +1 -1
  36. package/lib/typescript/useFloatingLabel.d.ts +43 -0
  37. package/lib/typescript/useFloatingLabel.d.ts.map +1 -0
  38. package/package.json +1 -1
  39. package/src/ErrorText.tsx +37 -0
  40. package/src/FloatingInput.tsx +91 -161
  41. package/src/FloatingLabel.tsx +41 -0
  42. package/src/defaults.ts +34 -29
  43. package/src/index.tsx +2 -3
  44. package/src/types.ts +50 -49
  45. package/src/useFloatingLabel.ts +111 -0
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
 
3
- import React, { useEffect, useImperativeHandle, useRef, useState } from "react";
3
+ import React, { useImperativeHandle, useRef } from "react";
4
4
  import { Pressable, TextInput as RNTextInput, View } from "react-native";
5
- import Animated, { interpolate, LinearTransition, useAnimatedStyle, useSharedValue, withSequence, withTiming } from "react-native-reanimated";
6
- import { baseStyles, DEFAULT_ANIMATION, DEFAULT_THEME } from "./defaults";
5
+ import Animated, { LinearTransition } from "react-native-reanimated";
6
+ import { baseStyles } from "./defaults";
7
+ import { ErrorText } from "./ErrorText";
8
+ import { FloatingLabel } from "./FloatingLabel";
9
+ import { useFloatingLabel } from "./useFloatingLabel";
7
10
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
11
  export const FloatingInput = /*#__PURE__*/React.forwardRef(({
9
12
  value,
@@ -26,136 +29,94 @@ export const FloatingInput = /*#__PURE__*/React.forwardRef(({
26
29
  theme: themeProp,
27
30
  styles: stylesProp,
28
31
  style,
29
- animationConfig: animationProp,
32
+ animationConfig,
30
33
  textInputProps
31
34
  }, ref) => {
32
35
  const inputRef = useRef(null);
33
- const [isFocused, setIsFocused] = useState(false);
34
- const hasError = !!touched && !!error;
35
- const theme = {
36
- ...DEFAULT_THEME,
37
- ...themeProp
38
- };
39
- const anim = {
40
- ...DEFAULT_ANIMATION,
41
- ...animationProp
42
- };
43
- const shouldBeActive = isFocused || !!value;
44
- const focusAnim = useSharedValue(value ? 1 : 0);
45
- const shakeAnim = useSharedValue(0);
36
+ const {
37
+ hasError,
38
+ shouldBeActive,
39
+ theme,
40
+ labelAnimatedStyle,
41
+ handleFocus,
42
+ handleBlur,
43
+ onContainerLayout
44
+ } = useFloatingLabel({
45
+ value,
46
+ onFocus,
47
+ onBlur,
48
+ touched,
49
+ error,
50
+ theme: themeProp,
51
+ animationConfig
52
+ });
46
53
  useImperativeHandle(ref, () => ({
47
54
  focus: () => inputRef.current?.focus(),
48
55
  blur: () => inputRef.current?.blur(),
49
56
  clear: () => inputRef.current?.clear(),
50
57
  isFocused: () => inputRef.current?.isFocused() ?? false
51
58
  }));
52
- useEffect(() => {
53
- focusAnim.value = withTiming(shouldBeActive ? 1 : 0, {
54
- duration: anim.labelDuration
55
- });
56
- }, [shouldBeActive]);
57
- useEffect(() => {
58
- if (!hasError) return;
59
- const mag = anim.shakeMagnitude;
60
- const dur = anim.shakeDuration;
61
- shakeAnim.value = withSequence(withTiming(-mag, {
62
- duration: dur
63
- }), withTiming(mag, {
64
- duration: dur
65
- }), withTiming(-mag, {
66
- duration: dur
67
- }), withTiming(0, {
68
- duration: dur
69
- }));
70
- }, [hasError]);
71
- const labelAnimatedStyle = useAnimatedStyle(() => ({
72
- transform: [{
73
- translateX: shakeAnim.value
74
- }, {
75
- translateY: interpolate(focusAnim.value, [0, 1], [0, -anim.labelTranslateY])
76
- }],
77
- fontSize: interpolate(focusAnim.value, [0, 1], [theme.fontSize, theme.labelActiveFontSize])
78
- }));
79
- function handleFocus() {
80
- setIsFocused(true);
81
- onFocus?.();
82
- }
83
- function handleBlur() {
84
- setIsFocused(false);
85
- onBlur?.();
86
- }
87
- function renderTextInput() {
88
- const inputProps = {
89
- ref: inputRef,
90
- editable,
91
- autoFocus,
92
- maxLength,
93
- value,
94
- placeholder: shouldBeActive ? placeholder : undefined,
95
- placeholderTextColor: theme.placeholderColor,
96
- onChangeText,
97
- onBlur: handleBlur,
98
- onFocus: handleFocus,
99
- keyboardType,
100
- autoCapitalize,
101
- secureTextEntry,
102
- selectionColor: theme.selectionColor,
103
- cursorColor: theme.selectionColor,
104
- selectionHandleColor: theme.selectionColor,
105
- underlineColorAndroid: "transparent",
106
- style: [baseStyles.input, {
107
- color: theme.inputColor,
108
- fontFamily: theme.fontFamily,
109
- fontSize: theme.fontSize
110
- }, right ? baseStyles.inputWithRight : undefined, stylesProp?.input],
111
- ...textInputProps
112
- };
113
- const inputElement = renderInput ? renderInput(inputProps) : /*#__PURE__*/_jsx(RNTextInput, {
114
- ...inputProps
115
- });
116
- return /*#__PURE__*/_jsxs(View, {
117
- style: [baseStyles.inputContainer, {
118
- backgroundColor: theme.backgroundColor,
119
- borderRadius: theme.borderRadius,
120
- minHeight: theme.minHeight
121
- }, style, stylesProp?.inputContainer],
122
- children: [/*#__PURE__*/_jsxs(View, {
123
- style: [baseStyles.labelAndInputArea, stylesProp?.labelAndInputArea],
124
- children: [/*#__PURE__*/_jsx(Animated.Text, {
125
- style: [baseStyles.label, {
126
- color: hasError ? theme.errorColor : theme.labelColor,
127
- fontFamily: theme.fontFamily
128
- }, labelAnimatedStyle, stylesProp?.label],
129
- children: label
130
- }), inputElement]
131
- }), right && /*#__PURE__*/_jsx(View, {
132
- style: [baseStyles.rightContainer, stylesProp?.right],
133
- children: right
134
- })]
135
- });
136
- }
137
- function renderContent() {
138
- if (onPress) {
139
- return /*#__PURE__*/_jsx(Pressable, {
140
- onPress: onPress,
141
- children: /*#__PURE__*/_jsx(View, {
142
- pointerEvents: "none",
143
- children: renderTextInput()
144
- })
145
- });
146
- }
147
- return renderTextInput();
148
- }
59
+ const inputProps = {
60
+ ref: inputRef,
61
+ editable,
62
+ autoFocus,
63
+ maxLength,
64
+ value,
65
+ placeholder: shouldBeActive ? placeholder : undefined,
66
+ placeholderTextColor: theme.placeholderColor,
67
+ onChangeText,
68
+ onBlur: handleBlur,
69
+ onFocus: handleFocus,
70
+ keyboardType,
71
+ autoCapitalize,
72
+ secureTextEntry,
73
+ selectionColor: hasError ? theme.errorColor : theme.selectionColor,
74
+ cursorColor: hasError ? theme.errorColor : theme.selectionColor,
75
+ selectionHandleColor: hasError ? theme.errorColor : theme.selectionColor,
76
+ underlineColorAndroid: "transparent",
77
+ style: [baseStyles.input, {
78
+ color: theme.inputColor,
79
+ fontFamily: theme.fontFamily,
80
+ fontSize: theme.fontSize
81
+ }, right ? baseStyles.inputWithRight : undefined, stylesProp?.input],
82
+ ...textInputProps
83
+ };
84
+ const inputElement = renderInput ? renderInput(inputProps) : /*#__PURE__*/_jsx(RNTextInput, {
85
+ ...inputProps
86
+ });
87
+ const inputContainer = /*#__PURE__*/_jsxs(View, {
88
+ onLayout: onContainerLayout,
89
+ style: [baseStyles.inputContainer, {
90
+ backgroundColor: theme.backgroundColor,
91
+ borderRadius: theme.borderRadius
92
+ }, style, stylesProp?.inputContainer],
93
+ children: [/*#__PURE__*/_jsxs(View, {
94
+ style: [baseStyles.labelAndInputArea, stylesProp?.labelAndInputArea],
95
+ children: [/*#__PURE__*/_jsx(FloatingLabel, {
96
+ label: label,
97
+ hasError: hasError,
98
+ theme: theme,
99
+ labelAnimatedStyle: labelAnimatedStyle,
100
+ style: stylesProp?.label
101
+ }), inputElement]
102
+ }), right && /*#__PURE__*/_jsx(View, {
103
+ style: [baseStyles.rightContainer, stylesProp?.right],
104
+ children: right
105
+ })]
106
+ });
149
107
  return /*#__PURE__*/_jsxs(Animated.View, {
150
108
  layout: LinearTransition.springify(),
151
109
  style: [baseStyles.container, stylesProp?.container],
152
- children: [renderContent(), hasError && /*#__PURE__*/_jsx(Animated.Text, {
153
- style: [baseStyles.errorText, {
154
- fontSize: theme.labelActiveFontSize,
155
- color: theme.errorColor,
156
- fontFamily: theme.fontFamily
157
- }, stylesProp?.error],
158
- children: error
110
+ children: [onPress ? /*#__PURE__*/_jsx(Pressable, {
111
+ onPress: onPress,
112
+ children: /*#__PURE__*/_jsx(View, {
113
+ pointerEvents: "none",
114
+ children: inputContainer
115
+ })
116
+ }) : inputContainer, hasError && /*#__PURE__*/_jsx(ErrorText, {
117
+ error: error,
118
+ theme: theme,
119
+ style: stylesProp?.error
159
120
  })]
160
121
  });
161
122
  });
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","useImperativeHandle","useRef","useState","Pressable","TextInput","RNTextInput","View","Animated","interpolate","LinearTransition","useAnimatedStyle","useSharedValue","withSequence","withTiming","baseStyles","DEFAULT_ANIMATION","DEFAULT_THEME","jsx","_jsx","jsxs","_jsxs","FloatingInput","forwardRef","value","onChangeText","onBlur","onFocus","onPress","label","placeholder","error","touched","maxLength","keyboardType","autoFocus","editable","autoCapitalize","secureTextEntry","right","renderInput","theme","themeProp","styles","stylesProp","style","animationConfig","animationProp","textInputProps","ref","inputRef","isFocused","setIsFocused","hasError","anim","shouldBeActive","focusAnim","shakeAnim","focus","current","blur","clear","duration","labelDuration","mag","shakeMagnitude","dur","shakeDuration","labelAnimatedStyle","transform","translateX","translateY","labelTranslateY","fontSize","labelActiveFontSize","handleFocus","handleBlur","renderTextInput","inputProps","undefined","placeholderTextColor","placeholderColor","selectionColor","cursorColor","selectionHandleColor","underlineColorAndroid","input","color","inputColor","fontFamily","inputWithRight","inputElement","inputContainer","backgroundColor","borderRadius","minHeight","children","labelAndInputArea","Text","errorColor","labelColor","rightContainer","renderContent","pointerEvents","layout","springify","container","errorText","displayName"],"sourceRoot":"../../src","sources":["FloatingInput.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useImperativeHandle","useRef","Pressable","TextInput","RNTextInput","View","Animated","LinearTransition","baseStyles","ErrorText","FloatingLabel","useFloatingLabel","jsx","_jsx","jsxs","_jsxs","FloatingInput","forwardRef","value","onChangeText","onBlur","onFocus","onPress","label","placeholder","error","touched","maxLength","keyboardType","autoFocus","editable","autoCapitalize","secureTextEntry","right","renderInput","theme","themeProp","styles","stylesProp","style","animationConfig","textInputProps","ref","inputRef","hasError","shouldBeActive","labelAnimatedStyle","handleFocus","handleBlur","onContainerLayout","focus","current","blur","clear","isFocused","inputProps","undefined","placeholderTextColor","placeholderColor","selectionColor","errorColor","cursorColor","selectionHandleColor","underlineColorAndroid","input","color","inputColor","fontFamily","fontSize","inputWithRight","inputElement","inputContainer","onLayout","backgroundColor","borderRadius","children","labelAndInputArea","rightContainer","layout","springify","container","pointerEvents","displayName"],"sourceRoot":"../../src","sources":["FloatingInput.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ import React from "react";
4
+ import Animated from "react-native-reanimated";
5
+ import { baseStyles } from "./defaults";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ export const FloatingLabel = /*#__PURE__*/React.memo(function FloatingLabel({
8
+ label,
9
+ hasError,
10
+ theme,
11
+ labelAnimatedStyle,
12
+ style
13
+ }) {
14
+ return /*#__PURE__*/_jsx(Animated.Text, {
15
+ style: [baseStyles.label, {
16
+ color: hasError ? theme.errorColor : theme.labelColor,
17
+ fontFamily: theme.fontFamily
18
+ }, labelAnimatedStyle, style],
19
+ children: label
20
+ });
21
+ });
22
+ //# sourceMappingURL=FloatingLabel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Animated","baseStyles","jsx","_jsx","FloatingLabel","memo","label","hasError","theme","labelAnimatedStyle","style","Text","color","errorColor","labelColor","fontFamily","children"],"sourceRoot":"../../src","sources":["FloatingLabel.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,QAAQ,MAA8B,yBAAyB;AAGtE,SAASC,UAAU,QAAQ,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAcxC,OAAO,MAAMC,aAAa,gBAAGL,KAAK,CAACM,IAAI,CAAC,SAASD,aAAaA,CAAC;EAC7DE,KAAK;EACLC,QAAQ;EACRC,KAAK;EACLC,kBAAkB;EAClBC;AACkB,CAAC,EAAE;EACrB,oBACEP,IAAA,CAACH,QAAQ,CAACW,IAAI;IACZD,KAAK,EAAE,CACLT,UAAU,CAACK,KAAK,EAChB;MACEM,KAAK,EAAEL,QAAQ,GAAGC,KAAK,CAACK,UAAU,GAAGL,KAAK,CAACM,UAAU;MACrDC,UAAU,EAAEP,KAAK,CAACO;IACpB,CAAC,EACDN,kBAAkB,EAClBC,KAAK,CACL;IAAAM,QAAA,EAEDV;EAAK,CACO,CAAC;AAEpB,CAAC,CAAC","ignoreList":[]}
@@ -1,56 +1,61 @@
1
1
  "use strict";
2
2
 
3
- import { StyleSheet } from 'react-native';
3
+ import { StyleSheet } from "react-native";
4
+ export const INPUT_PADDING_TOP = 24;
5
+ const INPUT_PADDING_BOTTOM = 8;
6
+ const INPUT_PADDING_HORIZONTAL = 16;
7
+ const RIGHT_CONTAINER_OFFSET = 12;
8
+ const INPUT_WITH_RIGHT_PADDING = 48;
9
+ const ERROR_MARGIN_LEFT = 8;
10
+ const ERROR_MARGIN_TOP = 6;
4
11
  export const DEFAULT_THEME = {
5
- backgroundColor: '#EDEFF2',
6
- labelColor: '#878A99',
7
- inputColor: '#36373D',
8
- errorColor: '#E3152E',
9
- selectionColor: '#31BE30',
10
- placeholderColor: '#878A99',
12
+ backgroundColor: "#EDEFF2",
13
+ labelColor: "#878A99",
14
+ inputColor: "#36373D",
15
+ errorColor: "#E3152E",
16
+ selectionColor: "#31BE30",
17
+ placeholderColor: "#878A99",
11
18
  borderRadius: 14,
12
- minHeight: 56,
13
19
  fontSize: 16,
14
20
  labelActiveFontSize: 12,
15
- fontFamily: 'System'
21
+ fontFamily: "System"
16
22
  };
17
23
  export const DEFAULT_ANIMATION = {
18
24
  labelDuration: 200,
19
25
  shakeMagnitude: 2,
20
- shakeDuration: 50,
21
- labelTranslateY: 10
26
+ shakeDuration: 50
22
27
  };
23
28
  export const baseStyles = StyleSheet.create({
24
29
  container: {},
25
30
  inputContainer: {
26
- flexDirection: 'row',
27
- alignItems: 'center'
31
+ flexDirection: "row",
32
+ alignItems: "center"
28
33
  },
29
34
  labelAndInputArea: {
30
35
  flex: 1,
31
- justifyContent: 'center'
36
+ justifyContent: "center"
32
37
  },
33
38
  label: {
34
- position: 'absolute',
35
- left: 16
39
+ position: "absolute",
40
+ left: INPUT_PADDING_HORIZONTAL
36
41
  },
37
42
  input: {
38
- paddingTop: 24,
39
- paddingBottom: 8,
40
- paddingLeft: 16,
41
- paddingRight: 16
43
+ paddingTop: INPUT_PADDING_TOP,
44
+ paddingBottom: INPUT_PADDING_BOTTOM,
45
+ paddingLeft: INPUT_PADDING_HORIZONTAL,
46
+ paddingRight: INPUT_PADDING_HORIZONTAL
42
47
  },
43
48
  inputWithRight: {
44
- paddingRight: 48
49
+ paddingRight: INPUT_WITH_RIGHT_PADDING
45
50
  },
46
51
  rightContainer: {
47
- position: 'absolute',
48
- right: 12,
49
- alignSelf: 'center'
52
+ position: "absolute",
53
+ right: RIGHT_CONTAINER_OFFSET,
54
+ alignSelf: "center"
50
55
  },
51
56
  errorText: {
52
- marginLeft: 8,
53
- marginTop: 6
57
+ marginLeft: ERROR_MARGIN_LEFT,
58
+ marginTop: ERROR_MARGIN_TOP
54
59
  }
55
60
  });
56
61
  //# sourceMappingURL=defaults.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["StyleSheet","DEFAULT_THEME","backgroundColor","labelColor","inputColor","errorColor","selectionColor","placeholderColor","borderRadius","minHeight","fontSize","labelActiveFontSize","fontFamily","DEFAULT_ANIMATION","labelDuration","shakeMagnitude","shakeDuration","labelTranslateY","baseStyles","create","container","inputContainer","flexDirection","alignItems","labelAndInputArea","flex","justifyContent","label","position","left","input","paddingTop","paddingBottom","paddingLeft","paddingRight","inputWithRight","rightContainer","right","alignSelf","errorText","marginLeft","marginTop"],"sourceRoot":"../../src","sources":["defaults.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AAIzC,OAAO,MAAMC,aAA2C,GAAG;EACzDC,eAAe,EAAE,SAAS;EAC1BC,UAAU,EAAE,SAAS;EACrBC,UAAU,EAAE,SAAS;EACrBC,UAAU,EAAE,SAAS;EACrBC,cAAc,EAAE,SAAS;EACzBC,gBAAgB,EAAE,SAAS;EAC3BC,YAAY,EAAE,EAAE;EAChBC,SAAS,EAAE,EAAE;EACbC,QAAQ,EAAE,EAAE;EACZC,mBAAmB,EAAE,EAAE;EACvBC,UAAU,EAAE;AACd,CAAC;AAED,OAAO,MAAMC,iBAAyD,GAAG;EACvEC,aAAa,EAAE,GAAG;EAClBC,cAAc,EAAE,CAAC;EACjBC,aAAa,EAAE,EAAE;EACjBC,eAAe,EAAE;AACnB,CAAC;AAED,OAAO,MAAMC,UAAU,GAAGlB,UAAU,CAACmB,MAAM,CAAC;EAC1CC,SAAS,EAAE,CAAC,CAAC;EACbC,cAAc,EAAE;IACdC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE;EACd,CAAC;EACDC,iBAAiB,EAAE;IACjBC,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,QAAQ,EAAE,UAAU;IACpBC,IAAI,EAAE;EACR,CAAC;EACDC,KAAK,EAAE;IACLC,UAAU,EAAE,EAAE;IACdC,aAAa,EAAE,CAAC;IAChBC,WAAW,EAAE,EAAE;IACfC,YAAY,EAAE;EAChB,CAAC;EACDC,cAAc,EAAE;IACdD,YAAY,EAAE;EAChB,CAAC;EACDE,cAAc,EAAE;IACdR,QAAQ,EAAE,UAAU;IACpBS,KAAK,EAAE,EAAE;IACTC,SAAS,EAAE;EACb,CAAC;EACDC,SAAS,EAAE;IACTC,UAAU,EAAE,CAAC;IACbC,SAAS,EAAE;EACb;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["StyleSheet","INPUT_PADDING_TOP","INPUT_PADDING_BOTTOM","INPUT_PADDING_HORIZONTAL","RIGHT_CONTAINER_OFFSET","INPUT_WITH_RIGHT_PADDING","ERROR_MARGIN_LEFT","ERROR_MARGIN_TOP","DEFAULT_THEME","backgroundColor","labelColor","inputColor","errorColor","selectionColor","placeholderColor","borderRadius","fontSize","labelActiveFontSize","fontFamily","DEFAULT_ANIMATION","labelDuration","shakeMagnitude","shakeDuration","baseStyles","create","container","inputContainer","flexDirection","alignItems","labelAndInputArea","flex","justifyContent","label","position","left","input","paddingTop","paddingBottom","paddingLeft","paddingRight","inputWithRight","rightContainer","right","alignSelf","errorText","marginLeft","marginTop"],"sourceRoot":"../../src","sources":["defaults.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AAGzC,OAAO,MAAMC,iBAAiB,GAAG,EAAE;AACnC,MAAMC,oBAAoB,GAAG,CAAC;AAC9B,MAAMC,wBAAwB,GAAG,EAAE;AACnC,MAAMC,sBAAsB,GAAG,EAAE;AACjC,MAAMC,wBAAwB,GAAG,EAAE;AACnC,MAAMC,iBAAiB,GAAG,CAAC;AAC3B,MAAMC,gBAAgB,GAAG,CAAC;AAE1B,OAAO,MAAMC,aAA2C,GAAG;EACzDC,eAAe,EAAE,SAAS;EAC1BC,UAAU,EAAE,SAAS;EACrBC,UAAU,EAAE,SAAS;EACrBC,UAAU,EAAE,SAAS;EACrBC,cAAc,EAAE,SAAS;EACzBC,gBAAgB,EAAE,SAAS;EAC3BC,YAAY,EAAE,EAAE;EAChBC,QAAQ,EAAE,EAAE;EACZC,mBAAmB,EAAE,EAAE;EACvBC,UAAU,EAAE;AACd,CAAC;AAED,OAAO,MAAMC,iBAAyD,GAAG;EACvEC,aAAa,EAAE,GAAG;EAClBC,cAAc,EAAE,CAAC;EACjBC,aAAa,EAAE;AACjB,CAAC;AAED,OAAO,MAAMC,UAAU,GAAGvB,UAAU,CAACwB,MAAM,CAAC;EAC1CC,SAAS,EAAE,CAAC,CAAC;EACbC,cAAc,EAAE;IACdC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE;EACd,CAAC;EACDC,iBAAiB,EAAE;IACjBC,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,QAAQ,EAAE,UAAU;IACpBC,IAAI,EAAE/B;EACR,CAAC;EACDgC,KAAK,EAAE;IACLC,UAAU,EAAEnC,iBAAiB;IAC7BoC,aAAa,EAAEnC,oBAAoB;IACnCoC,WAAW,EAAEnC,wBAAwB;IACrCoC,YAAY,EAAEpC;EAChB,CAAC;EACDqC,cAAc,EAAE;IACdD,YAAY,EAAElC;EAChB,CAAC;EACDoC,cAAc,EAAE;IACdR,QAAQ,EAAE,UAAU;IACpBS,KAAK,EAAEtC,sBAAsB;IAC7BuC,SAAS,EAAE;EACb,CAAC;EACDC,SAAS,EAAE;IACTC,UAAU,EAAEvC,iBAAiB;IAC7BwC,SAAS,EAAEvC;EACb;AACF,CAAC,CAAC","ignoreList":[]}
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
2
 
3
- export { FloatingInput } from './FloatingInput';
4
- export { DEFAULT_ANIMATION, DEFAULT_THEME } from './defaults';
3
+ export { FloatingInput } from "./FloatingInput";
5
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["FloatingInput","DEFAULT_ANIMATION","DEFAULT_THEME"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,iBAAiB,EAAEC,aAAa,QAAQ,YAAY","ignoreList":[]}
1
+ {"version":3,"names":["FloatingInput"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,iBAAiB","ignoreList":[]}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useState } from "react";
4
+ import { interpolate, useAnimatedStyle, useSharedValue, withSequence, withTiming } from "react-native-reanimated";
5
+ import { DEFAULT_ANIMATION, DEFAULT_THEME, INPUT_PADDING_TOP } from "./defaults";
6
+ export function useFloatingLabel({
7
+ value,
8
+ onFocus,
9
+ onBlur,
10
+ touched,
11
+ error,
12
+ theme: themeProp,
13
+ animationConfig: animationProp
14
+ }) {
15
+ const [isFocused, setIsFocused] = useState(false);
16
+ const hasError = !!touched && !!error;
17
+ const theme = {
18
+ ...DEFAULT_THEME,
19
+ ...themeProp
20
+ };
21
+ const anim = {
22
+ ...DEFAULT_ANIMATION,
23
+ ...animationProp
24
+ };
25
+ const shouldBeActive = isFocused || !!value;
26
+ const focusAnim = useSharedValue(value ? 1 : 0);
27
+ const shakeAnim = useSharedValue(0);
28
+ const containerHeight = useSharedValue(0);
29
+ useEffect(() => {
30
+ focusAnim.value = withTiming(shouldBeActive ? 1 : 0, {
31
+ duration: anim.labelDuration
32
+ });
33
+ }, [shouldBeActive]);
34
+ useEffect(() => {
35
+ if (!hasError) return;
36
+ const mag = anim.shakeMagnitude;
37
+ const dur = anim.shakeDuration;
38
+ shakeAnim.value = withSequence(withTiming(-mag, {
39
+ duration: dur
40
+ }), withTiming(mag, {
41
+ duration: dur
42
+ }), withTiming(-mag, {
43
+ duration: dur
44
+ }), withTiming(0, {
45
+ duration: dur
46
+ }));
47
+ }, [hasError]);
48
+ const labelAnimatedStyle = useAnimatedStyle(() => {
49
+ const h = containerHeight.value;
50
+ const translateY = h > 0 ? interpolate(focusAnim.value, [0, 1], [0, -(h / 2 - INPUT_PADDING_TOP / 1.75)]) : 0;
51
+ return {
52
+ transform: [{
53
+ translateX: shakeAnim.value
54
+ }, {
55
+ translateY
56
+ }],
57
+ fontSize: interpolate(focusAnim.value, [0, 1], [theme.fontSize, theme.labelActiveFontSize])
58
+ };
59
+ });
60
+ function handleFocus() {
61
+ setIsFocused(true);
62
+ onFocus?.();
63
+ }
64
+ function handleBlur() {
65
+ setIsFocused(false);
66
+ onBlur?.();
67
+ }
68
+ function onContainerLayout(e) {
69
+ containerHeight.value = e.nativeEvent.layout.height;
70
+ }
71
+ return {
72
+ isFocused,
73
+ hasError,
74
+ shouldBeActive,
75
+ theme,
76
+ labelAnimatedStyle,
77
+ handleFocus,
78
+ handleBlur,
79
+ onContainerLayout
80
+ };
81
+ }
82
+ //# sourceMappingURL=useFloatingLabel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useState","interpolate","useAnimatedStyle","useSharedValue","withSequence","withTiming","DEFAULT_ANIMATION","DEFAULT_THEME","INPUT_PADDING_TOP","useFloatingLabel","value","onFocus","onBlur","touched","error","theme","themeProp","animationConfig","animationProp","isFocused","setIsFocused","hasError","anim","shouldBeActive","focusAnim","shakeAnim","containerHeight","duration","labelDuration","mag","shakeMagnitude","dur","shakeDuration","labelAnimatedStyle","h","translateY","transform","translateX","fontSize","labelActiveFontSize","handleFocus","handleBlur","onContainerLayout","e","nativeEvent","layout","height"],"sourceRoot":"../../src","sources":["useFloatingLabel.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ import type { StyleProp, TextStyle } from "react-native";
3
+ interface ErrorTextProps {
4
+ error?: string;
5
+ theme: {
6
+ labelActiveFontSize: number;
7
+ errorColor: string;
8
+ fontFamily: string;
9
+ };
10
+ style?: StyleProp<TextStyle>;
11
+ }
12
+ export declare const ErrorText: React.NamedExoticComponent<ErrorTextProps>;
13
+ export {};
14
+ //# sourceMappingURL=ErrorText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorText.d.ts","sourceRoot":"","sources":["../../src/ErrorText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzD,UAAU,cAAc;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QACL,mBAAmB,EAAE,MAAM,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED,eAAO,MAAM,SAAS,4CAoBpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingInput.d.ts","sourceRoot":"","sources":["../../src/FloatingInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAYhF,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEpE,eAAO,MAAM,aAAa,6FAoNzB,CAAC"}
1
+ {"version":3,"file":"FloatingInput.d.ts","sourceRoot":"","sources":["../../src/FloatingInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAQ3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEpE,eAAO,MAAM,aAAa,6FAkJzB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ import { type AnimatedStyle } from "react-native-reanimated";
3
+ import type { StyleProp, TextStyle } from "react-native";
4
+ interface FloatingLabelProps {
5
+ label?: string;
6
+ hasError: boolean;
7
+ theme: {
8
+ errorColor: string;
9
+ labelColor: string;
10
+ fontFamily: string;
11
+ };
12
+ labelAnimatedStyle: AnimatedStyle;
13
+ style?: StyleProp<TextStyle>;
14
+ }
15
+ export declare const FloatingLabel: React.NamedExoticComponent<FloatingLabelProps>;
16
+ export {};
17
+ //# sourceMappingURL=FloatingLabel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FloatingLabel.d.ts","sourceRoot":"","sources":["../../src/FloatingLabel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzD,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,kBAAkB,EAAE,aAAa,CAAC;IAClC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED,eAAO,MAAM,aAAa,gDAsBxB,CAAC"}
@@ -1,4 +1,5 @@
1
- import type { FloatingInputAnimationConfig, FloatingInputTheme } from './types';
1
+ import type { FloatingInputAnimationConfig, FloatingInputTheme } from "./types";
2
+ export declare const INPUT_PADDING_TOP = 24;
2
3
  export declare const DEFAULT_THEME: Required<FloatingInputTheme>;
3
4
  export declare const DEFAULT_ANIMATION: Required<FloatingInputAnimationConfig>;
4
5
  export declare const baseStyles: {
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAE/E,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,kBAAkB,CAYtD,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,4BAA4B,CAKpE,CAAA;AAED,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCrB,CAAA"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEhF,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAQpC,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,kBAAkB,CAWtD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,4BAA4B,CAIpE,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCrB,CAAC"}
@@ -1,4 +1,3 @@
1
- export { FloatingInput } from './FloatingInput';
2
- export { DEFAULT_ANIMATION, DEFAULT_THEME } from './defaults';
3
- export type { FloatingInputAnimationConfig, FloatingInputProps, FloatingInputRef, FloatingInputStyles, FloatingInputTheme, } from './types';
1
+ export { FloatingInput } from "./FloatingInput";
2
+ export type { FloatingInputAnimationConfig, FloatingInputProps, FloatingInputRef, FloatingInputStyles, FloatingInputTheme, } from "./types";
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC7D,YAAY,EACV,4BAA4B,EAC5B,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EACV,4BAA4B,EAC5B,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { KeyboardTypeOptions, StyleProp, TextInputProps, TextStyle, ViewStyle } from 'react-native';
1
+ import type { KeyboardTypeOptions, StyleProp, TextInputProps, TextStyle, ViewStyle } from "react-native";
2
2
  export interface FloatingInputTheme {
3
3
  backgroundColor?: string;
4
4
  labelColor?: string;
@@ -7,7 +7,6 @@ export interface FloatingInputTheme {
7
7
  selectionColor?: string;
8
8
  placeholderColor?: string;
9
9
  borderRadius?: number;
10
- minHeight?: number;
11
10
  fontSize?: number;
12
11
  labelActiveFontSize?: number;
13
12
  fontFamily?: string;
@@ -25,7 +24,6 @@ export interface FloatingInputAnimationConfig {
25
24
  labelDuration?: number;
26
25
  shakeMagnitude?: number;
27
26
  shakeDuration?: number;
28
- labelTranslateY?: number;
29
27
  }
30
28
  export interface FloatingInputRef {
31
29
  focus: () => void;
@@ -47,7 +45,7 @@ export interface FloatingInputProps {
47
45
  keyboardType?: KeyboardTypeOptions;
48
46
  autoFocus?: boolean;
49
47
  editable?: boolean;
50
- autoCapitalize?: 'none' | 'sentences' | 'words' | 'characters';
48
+ autoCapitalize?: "none" | "sentences" | "words" | "characters";
51
49
  secureTextEntry?: boolean;
52
50
  right?: React.ReactNode;
53
51
  renderInput?: (props: TextInputProps) => React.ReactNode;
@@ -55,6 +53,6 @@ export interface FloatingInputProps {
55
53
  styles?: FloatingInputStyles;
56
54
  style?: StyleProp<ViewStyle>;
57
55
  animationConfig?: FloatingInputAnimationConfig;
58
- textInputProps?: Omit<TextInputProps, 'value' | 'onChangeText' | 'onBlur' | 'onFocus'>;
56
+ textInputProps?: Omit<TextInputProps, "value" | "onChangeText" | "onBlur" | "onFocus" | "multiline">;
59
57
  }
60
58
  //# sourceMappingURL=types.d.ts.map