rn-inputforge 0.1.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.
Files changed (193) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +273 -0
  3. package/lib/commonjs/components/ChatInput/ChatInput.js +170 -0
  4. package/lib/commonjs/components/ChatInput/ChatInput.js.map +1 -0
  5. package/lib/commonjs/components/ChatInput/index.js +13 -0
  6. package/lib/commonjs/components/ChatInput/index.js.map +1 -0
  7. package/lib/commonjs/components/ChatInput/types.js +6 -0
  8. package/lib/commonjs/components/ChatInput/types.js.map +1 -0
  9. package/lib/commonjs/components/DescriptionField/DescriptionField.js +40 -0
  10. package/lib/commonjs/components/DescriptionField/DescriptionField.js.map +1 -0
  11. package/lib/commonjs/components/DescriptionField/index.js +13 -0
  12. package/lib/commonjs/components/DescriptionField/index.js.map +1 -0
  13. package/lib/commonjs/components/FieldFlowInput/FieldFlowInput.js +207 -0
  14. package/lib/commonjs/components/FieldFlowInput/FieldFlowInput.js.map +1 -0
  15. package/lib/commonjs/components/FieldFlowInput/index.js +13 -0
  16. package/lib/commonjs/components/FieldFlowInput/index.js.map +1 -0
  17. package/lib/commonjs/components/FieldFlowInput/styles.js +99 -0
  18. package/lib/commonjs/components/FieldFlowInput/styles.js.map +1 -0
  19. package/lib/commonjs/components/FieldFlowInput/types.js +6 -0
  20. package/lib/commonjs/components/FieldFlowInput/types.js.map +1 -0
  21. package/lib/commonjs/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.js +44 -0
  22. package/lib/commonjs/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.js.map +1 -0
  23. package/lib/commonjs/components/KeyboardAwareFormWrapper/index.js +13 -0
  24. package/lib/commonjs/components/KeyboardAwareFormWrapper/index.js.map +1 -0
  25. package/lib/commonjs/hooks/index.js +27 -0
  26. package/lib/commonjs/hooks/index.js.map +1 -0
  27. package/lib/commonjs/hooks/useFieldFlowForm.js +108 -0
  28. package/lib/commonjs/hooks/useFieldFlowForm.js.map +1 -0
  29. package/lib/commonjs/hooks/useFieldState.js +27 -0
  30. package/lib/commonjs/hooks/useFieldState.js.map +1 -0
  31. package/lib/commonjs/hooks/useKeyboardManager.js +68 -0
  32. package/lib/commonjs/hooks/useKeyboardManager.js.map +1 -0
  33. package/lib/commonjs/icons/Icon.js +388 -0
  34. package/lib/commonjs/icons/Icon.js.map +1 -0
  35. package/lib/commonjs/icons/index.js +13 -0
  36. package/lib/commonjs/icons/index.js.map +1 -0
  37. package/lib/commonjs/index.js +158 -0
  38. package/lib/commonjs/index.js.map +1 -0
  39. package/lib/commonjs/package.json +1 -0
  40. package/lib/commonjs/theme/ThemeProvider.js +48 -0
  41. package/lib/commonjs/theme/ThemeProvider.js.map +1 -0
  42. package/lib/commonjs/theme/defaultTheme.js +62 -0
  43. package/lib/commonjs/theme/defaultTheme.js.map +1 -0
  44. package/lib/commonjs/theme/index.js +38 -0
  45. package/lib/commonjs/theme/index.js.map +1 -0
  46. package/lib/commonjs/types/index.js +6 -0
  47. package/lib/commonjs/types/index.js.map +1 -0
  48. package/lib/commonjs/utils/formatters.js +25 -0
  49. package/lib/commonjs/utils/formatters.js.map +1 -0
  50. package/lib/commonjs/utils/keyboardTypes.js +103 -0
  51. package/lib/commonjs/utils/keyboardTypes.js.map +1 -0
  52. package/lib/commonjs/validation/index.js +80 -0
  53. package/lib/commonjs/validation/index.js.map +1 -0
  54. package/lib/commonjs/validation/useValidation.js +34 -0
  55. package/lib/commonjs/validation/useValidation.js.map +1 -0
  56. package/lib/commonjs/validation/validators.js +118 -0
  57. package/lib/commonjs/validation/validators.js.map +1 -0
  58. package/lib/module/components/ChatInput/ChatInput.js +165 -0
  59. package/lib/module/components/ChatInput/ChatInput.js.map +1 -0
  60. package/lib/module/components/ChatInput/index.js +4 -0
  61. package/lib/module/components/ChatInput/index.js.map +1 -0
  62. package/lib/module/components/ChatInput/types.js +4 -0
  63. package/lib/module/components/ChatInput/types.js.map +1 -0
  64. package/lib/module/components/DescriptionField/DescriptionField.js +35 -0
  65. package/lib/module/components/DescriptionField/DescriptionField.js.map +1 -0
  66. package/lib/module/components/DescriptionField/index.js +4 -0
  67. package/lib/module/components/DescriptionField/index.js.map +1 -0
  68. package/lib/module/components/FieldFlowInput/FieldFlowInput.js +202 -0
  69. package/lib/module/components/FieldFlowInput/FieldFlowInput.js.map +1 -0
  70. package/lib/module/components/FieldFlowInput/index.js +4 -0
  71. package/lib/module/components/FieldFlowInput/index.js.map +1 -0
  72. package/lib/module/components/FieldFlowInput/styles.js +92 -0
  73. package/lib/module/components/FieldFlowInput/styles.js.map +1 -0
  74. package/lib/module/components/FieldFlowInput/types.js +4 -0
  75. package/lib/module/components/FieldFlowInput/types.js.map +1 -0
  76. package/lib/module/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.js +39 -0
  77. package/lib/module/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.js.map +1 -0
  78. package/lib/module/components/KeyboardAwareFormWrapper/index.js +4 -0
  79. package/lib/module/components/KeyboardAwareFormWrapper/index.js.map +1 -0
  80. package/lib/module/hooks/index.js +6 -0
  81. package/lib/module/hooks/index.js.map +1 -0
  82. package/lib/module/hooks/useFieldFlowForm.js +104 -0
  83. package/lib/module/hooks/useFieldFlowForm.js.map +1 -0
  84. package/lib/module/hooks/useFieldState.js +23 -0
  85. package/lib/module/hooks/useFieldState.js.map +1 -0
  86. package/lib/module/hooks/useKeyboardManager.js +64 -0
  87. package/lib/module/hooks/useKeyboardManager.js.map +1 -0
  88. package/lib/module/icons/Icon.js +383 -0
  89. package/lib/module/icons/Icon.js.map +1 -0
  90. package/lib/module/icons/index.js +4 -0
  91. package/lib/module/icons/index.js.map +1 -0
  92. package/lib/module/index.js +18 -0
  93. package/lib/module/index.js.map +1 -0
  94. package/lib/module/theme/ThemeProvider.js +42 -0
  95. package/lib/module/theme/ThemeProvider.js.map +1 -0
  96. package/lib/module/theme/defaultTheme.js +58 -0
  97. package/lib/module/theme/defaultTheme.js.map +1 -0
  98. package/lib/module/theme/index.js +5 -0
  99. package/lib/module/theme/index.js.map +1 -0
  100. package/lib/module/types/index.js +4 -0
  101. package/lib/module/types/index.js.map +1 -0
  102. package/lib/module/utils/formatters.js +19 -0
  103. package/lib/module/utils/formatters.js.map +1 -0
  104. package/lib/module/utils/keyboardTypes.js +98 -0
  105. package/lib/module/utils/keyboardTypes.js.map +1 -0
  106. package/lib/module/validation/index.js +5 -0
  107. package/lib/module/validation/index.js.map +1 -0
  108. package/lib/module/validation/useValidation.js +30 -0
  109. package/lib/module/validation/useValidation.js.map +1 -0
  110. package/lib/module/validation/validators.js +103 -0
  111. package/lib/module/validation/validators.js.map +1 -0
  112. package/lib/typescript/components/ChatInput/ChatInput.d.ts +10 -0
  113. package/lib/typescript/components/ChatInput/ChatInput.d.ts.map +1 -0
  114. package/lib/typescript/components/ChatInput/index.d.ts +3 -0
  115. package/lib/typescript/components/ChatInput/index.d.ts.map +1 -0
  116. package/lib/typescript/components/ChatInput/types.d.ts +30 -0
  117. package/lib/typescript/components/ChatInput/types.d.ts.map +1 -0
  118. package/lib/typescript/components/DescriptionField/DescriptionField.d.ts +16 -0
  119. package/lib/typescript/components/DescriptionField/DescriptionField.d.ts.map +1 -0
  120. package/lib/typescript/components/DescriptionField/index.d.ts +3 -0
  121. package/lib/typescript/components/DescriptionField/index.d.ts.map +1 -0
  122. package/lib/typescript/components/FieldFlowInput/FieldFlowInput.d.ts +5 -0
  123. package/lib/typescript/components/FieldFlowInput/FieldFlowInput.d.ts.map +1 -0
  124. package/lib/typescript/components/FieldFlowInput/index.d.ts +3 -0
  125. package/lib/typescript/components/FieldFlowInput/index.d.ts.map +1 -0
  126. package/lib/typescript/components/FieldFlowInput/styles.d.ts +71 -0
  127. package/lib/typescript/components/FieldFlowInput/styles.d.ts.map +1 -0
  128. package/lib/typescript/components/FieldFlowInput/types.d.ts +50 -0
  129. package/lib/typescript/components/FieldFlowInput/types.d.ts.map +1 -0
  130. package/lib/typescript/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.d.ts +17 -0
  131. package/lib/typescript/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.d.ts.map +1 -0
  132. package/lib/typescript/components/KeyboardAwareFormWrapper/index.d.ts +3 -0
  133. package/lib/typescript/components/KeyboardAwareFormWrapper/index.d.ts.map +1 -0
  134. package/lib/typescript/hooks/index.d.ts +7 -0
  135. package/lib/typescript/hooks/index.d.ts.map +1 -0
  136. package/lib/typescript/hooks/useFieldFlowForm.d.ts +31 -0
  137. package/lib/typescript/hooks/useFieldFlowForm.d.ts.map +1 -0
  138. package/lib/typescript/hooks/useFieldState.d.ts +12 -0
  139. package/lib/typescript/hooks/useFieldState.d.ts.map +1 -0
  140. package/lib/typescript/hooks/useKeyboardManager.d.ts +35 -0
  141. package/lib/typescript/hooks/useKeyboardManager.d.ts.map +1 -0
  142. package/lib/typescript/icons/Icon.d.ts +17 -0
  143. package/lib/typescript/icons/Icon.d.ts.map +1 -0
  144. package/lib/typescript/icons/index.d.ts +3 -0
  145. package/lib/typescript/icons/index.d.ts.map +1 -0
  146. package/lib/typescript/index.d.ts +18 -0
  147. package/lib/typescript/index.d.ts.map +1 -0
  148. package/lib/typescript/theme/ThemeProvider.d.ts +16 -0
  149. package/lib/typescript/theme/ThemeProvider.d.ts.map +1 -0
  150. package/lib/typescript/theme/defaultTheme.d.ts +4 -0
  151. package/lib/typescript/theme/defaultTheme.d.ts.map +1 -0
  152. package/lib/typescript/theme/index.d.ts +4 -0
  153. package/lib/typescript/theme/index.d.ts.map +1 -0
  154. package/lib/typescript/types/index.d.ts +79 -0
  155. package/lib/typescript/types/index.d.ts.map +1 -0
  156. package/lib/typescript/utils/formatters.d.ts +5 -0
  157. package/lib/typescript/utils/formatters.d.ts.map +1 -0
  158. package/lib/typescript/utils/keyboardTypes.d.ts +18 -0
  159. package/lib/typescript/utils/keyboardTypes.d.ts.map +1 -0
  160. package/lib/typescript/validation/index.d.ts +4 -0
  161. package/lib/typescript/validation/index.d.ts.map +1 -0
  162. package/lib/typescript/validation/useValidation.d.ts +14 -0
  163. package/lib/typescript/validation/useValidation.d.ts.map +1 -0
  164. package/lib/typescript/validation/validators.d.ts +17 -0
  165. package/lib/typescript/validation/validators.d.ts.map +1 -0
  166. package/package.json +80 -0
  167. package/src/components/ChatInput/ChatInput.tsx +178 -0
  168. package/src/components/ChatInput/index.ts +2 -0
  169. package/src/components/ChatInput/types.ts +35 -0
  170. package/src/components/DescriptionField/DescriptionField.tsx +39 -0
  171. package/src/components/DescriptionField/index.ts +2 -0
  172. package/src/components/FieldFlowInput/FieldFlowInput.tsx +240 -0
  173. package/src/components/FieldFlowInput/index.ts +2 -0
  174. package/src/components/FieldFlowInput/styles.ts +94 -0
  175. package/src/components/FieldFlowInput/types.ts +55 -0
  176. package/src/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.tsx +45 -0
  177. package/src/components/KeyboardAwareFormWrapper/index.ts +2 -0
  178. package/src/hooks/index.ts +12 -0
  179. package/src/hooks/useFieldFlowForm.ts +133 -0
  180. package/src/hooks/useFieldState.ts +31 -0
  181. package/src/hooks/useKeyboardManager.ts +105 -0
  182. package/src/icons/Icon.tsx +338 -0
  183. package/src/icons/index.ts +2 -0
  184. package/src/index.ts +63 -0
  185. package/src/theme/ThemeProvider.tsx +49 -0
  186. package/src/theme/defaultTheme.ts +58 -0
  187. package/src/theme/index.ts +3 -0
  188. package/src/types/index.ts +98 -0
  189. package/src/utils/formatters.ts +18 -0
  190. package/src/utils/keyboardTypes.ts +85 -0
  191. package/src/validation/index.ts +15 -0
  192. package/src/validation/useValidation.ts +37 -0
  193. package/src/validation/validators.ts +93 -0
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ import React, { createContext, useContext, useMemo } from 'react';
4
+ import { defaultTheme } from './defaultTheme';
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ const FieldFlowThemeContext = /*#__PURE__*/createContext(defaultTheme);
7
+ function mergeDeep(base, override) {
8
+ if (!override) return base;
9
+ const result = {
10
+ ...base
11
+ };
12
+ for (const key of Object.keys(override)) {
13
+ const overrideValue = override[key];
14
+ const baseValue = base[key];
15
+ if (overrideValue && typeof overrideValue === 'object' && !Array.isArray(overrideValue) && baseValue && typeof baseValue === 'object') {
16
+ result[key] = mergeDeep(baseValue, overrideValue);
17
+ } else if (overrideValue !== undefined) {
18
+ result[key] = overrideValue;
19
+ }
20
+ }
21
+ return result;
22
+ }
23
+ /**
24
+ * Wrap your app (or a screen/form) in this provider to apply a custom theme.
25
+ * Any field not covered by your overrides falls back to FieldFlow's defaults,
26
+ * so you only need to specify what you want to change.
27
+ */
28
+ export function FieldFlowThemeProvider({
29
+ theme,
30
+ children
31
+ }) {
32
+ const merged = useMemo(() => mergeDeep(defaultTheme, theme), [theme]);
33
+ return /*#__PURE__*/_jsx(FieldFlowThemeContext.Provider, {
34
+ value: merged,
35
+ children: children
36
+ });
37
+ }
38
+ export function useFieldFlowTheme() {
39
+ return useContext(FieldFlowThemeContext);
40
+ }
41
+ export { mergeDeep };
42
+ //# sourceMappingURL=ThemeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","createContext","useContext","useMemo","defaultTheme","jsx","_jsx","FieldFlowThemeContext","mergeDeep","base","override","result","key","Object","keys","overrideValue","baseValue","Array","isArray","undefined","FieldFlowThemeProvider","theme","children","merged","Provider","value","useFieldFlowTheme"],"sourceRoot":"../../../src","sources":["theme/ThemeProvider.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,aAAa,EAAEC,UAAU,EAAEC,OAAO,QAAQ,OAAO;AAEjE,SAASC,YAAY,QAAQ,gBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE9C,MAAMC,qBAAqB,gBAAGN,aAAa,CAAiBG,YAAY,CAAC;AAEzE,SAASI,SAASA,CAAgCC,IAAO,EAAEC,QAAyB,EAAK;EACvF,IAAI,CAACA,QAAQ,EAAE,OAAOD,IAAI;EAC1B,MAAME,MAAW,GAAG;IAAE,GAAGF;EAAK,CAAC;EAC/B,KAAK,MAAMG,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACJ,QAAQ,CAAC,EAAE;IACvC,MAAMK,aAAa,GAAIL,QAAQ,CAASE,GAAG,CAAC;IAC5C,MAAMI,SAAS,GAAIP,IAAI,CAASG,GAAG,CAAC;IACpC,IACEG,aAAa,IACb,OAAOA,aAAa,KAAK,QAAQ,IACjC,CAACE,KAAK,CAACC,OAAO,CAACH,aAAa,CAAC,IAC7BC,SAAS,IACT,OAAOA,SAAS,KAAK,QAAQ,EAC7B;MACAL,MAAM,CAACC,GAAG,CAAC,GAAGJ,SAAS,CAACQ,SAAS,EAAED,aAAa,CAAC;IACnD,CAAC,MAAM,IAAIA,aAAa,KAAKI,SAAS,EAAE;MACtCR,MAAM,CAACC,GAAG,CAAC,GAAGG,aAAa;IAC7B;EACF;EACA,OAAOJ,MAAM;AACf;AAOA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASS,sBAAsBA,CAAC;EAAEC,KAAK;EAAEC;AAAsC,CAAC,EAAE;EACvF,MAAMC,MAAM,GAAGpB,OAAO,CAAC,MAAMK,SAAS,CAACJ,YAAY,EAAEiB,KAAK,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EACrE,oBACEf,IAAA,CAACC,qBAAqB,CAACiB,QAAQ;IAACC,KAAK,EAAEF,MAAO;IAAAD,QAAA,EAAEA;EAAQ,CAAiC,CAAC;AAE9F;AAEA,OAAO,SAASI,iBAAiBA,CAAA,EAAmB;EAClD,OAAOxB,UAAU,CAACK,qBAAqB,CAAC;AAC1C;AAEA,SAASC,SAAS","ignoreList":[]}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ export const defaultTheme = {
4
+ colors: {
5
+ background: '#FFFFFF',
6
+ backgroundDisabled: '#F2F3F5',
7
+ border: '#D8DCE2',
8
+ borderFocused: '#3B82F6',
9
+ borderError: '#EF4444',
10
+ borderSuccess: '#22C55E',
11
+ text: '#111827',
12
+ placeholder: '#9CA3AF',
13
+ label: '#374151',
14
+ labelFocused: '#3B82F6',
15
+ error: '#EF4444',
16
+ success: '#22C55E',
17
+ icon: '#6B7280',
18
+ iconFocused: '#3B82F6'
19
+ },
20
+ spacing: {
21
+ paddingHorizontal: 14,
22
+ paddingVertical: 12,
23
+ gap: 6,
24
+ borderRadius: 10,
25
+ borderWidth: 1,
26
+ borderWidthFocused: 1.5
27
+ },
28
+ typography: {
29
+ fontSize: 15,
30
+ labelFontSize: 13,
31
+ helperFontSize: 12,
32
+ fontWeight: '400'
33
+ },
34
+ animation: {
35
+ duration: 160,
36
+ useNativeDriver: false
37
+ }
38
+ };
39
+ export const darkTheme = {
40
+ ...defaultTheme,
41
+ colors: {
42
+ background: '#1F2329',
43
+ backgroundDisabled: '#15171B',
44
+ border: '#3A3F47',
45
+ borderFocused: '#60A5FA',
46
+ borderError: '#F87171',
47
+ borderSuccess: '#4ADE80',
48
+ text: '#F3F4F6',
49
+ placeholder: '#6B7280',
50
+ label: '#D1D5DB',
51
+ labelFocused: '#60A5FA',
52
+ error: '#F87171',
53
+ success: '#4ADE80',
54
+ icon: '#9CA3AF',
55
+ iconFocused: '#60A5FA'
56
+ }
57
+ };
58
+ //# sourceMappingURL=defaultTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["defaultTheme","colors","background","backgroundDisabled","border","borderFocused","borderError","borderSuccess","text","placeholder","label","labelFocused","error","success","icon","iconFocused","spacing","paddingHorizontal","paddingVertical","gap","borderRadius","borderWidth","borderWidthFocused","typography","fontSize","labelFontSize","helperFontSize","fontWeight","animation","duration","useNativeDriver","darkTheme"],"sourceRoot":"../../../src","sources":["theme/defaultTheme.ts"],"mappings":";;AAEA,OAAO,MAAMA,YAA4B,GAAG;EAC1CC,MAAM,EAAE;IACNC,UAAU,EAAE,SAAS;IACrBC,kBAAkB,EAAE,SAAS;IAC7BC,MAAM,EAAE,SAAS;IACjBC,aAAa,EAAE,SAAS;IACxBC,WAAW,EAAE,SAAS;IACtBC,aAAa,EAAE,SAAS;IACxBC,IAAI,EAAE,SAAS;IACfC,WAAW,EAAE,SAAS;IACtBC,KAAK,EAAE,SAAS;IAChBC,YAAY,EAAE,SAAS;IACvBC,KAAK,EAAE,SAAS;IAChBC,OAAO,EAAE,SAAS;IAClBC,IAAI,EAAE,SAAS;IACfC,WAAW,EAAE;EACf,CAAC;EACDC,OAAO,EAAE;IACPC,iBAAiB,EAAE,EAAE;IACrBC,eAAe,EAAE,EAAE;IACnBC,GAAG,EAAE,CAAC;IACNC,YAAY,EAAE,EAAE;IAChBC,WAAW,EAAE,CAAC;IACdC,kBAAkB,EAAE;EACtB,CAAC;EACDC,UAAU,EAAE;IACVC,QAAQ,EAAE,EAAE;IACZC,aAAa,EAAE,EAAE;IACjBC,cAAc,EAAE,EAAE;IAClBC,UAAU,EAAE;EACd,CAAC;EACDC,SAAS,EAAE;IACTC,QAAQ,EAAE,GAAG;IACbC,eAAe,EAAE;EACnB;AACF,CAAC;AAED,OAAO,MAAMC,SAAyB,GAAG;EACvC,GAAG/B,YAAY;EACfC,MAAM,EAAE;IACNC,UAAU,EAAE,SAAS;IACrBC,kBAAkB,EAAE,SAAS;IAC7BC,MAAM,EAAE,SAAS;IACjBC,aAAa,EAAE,SAAS;IACxBC,WAAW,EAAE,SAAS;IACtBC,aAAa,EAAE,SAAS;IACxBC,IAAI,EAAE,SAAS;IACfC,WAAW,EAAE,SAAS;IACtBC,KAAK,EAAE,SAAS;IAChBC,YAAY,EAAE,SAAS;IACvBC,KAAK,EAAE,SAAS;IAChBC,OAAO,EAAE,SAAS;IAClBC,IAAI,EAAE,SAAS;IACfC,WAAW,EAAE;EACf;AACF,CAAC","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ export { defaultTheme, darkTheme } from './defaultTheme';
4
+ export { FieldFlowThemeProvider, useFieldFlowTheme, mergeDeep } from './ThemeProvider';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["defaultTheme","darkTheme","FieldFlowThemeProvider","useFieldFlowTheme","mergeDeep"],"sourceRoot":"../../../src","sources":["theme/index.ts"],"mappings":";;AAAA,SAASA,YAAY,EAAEC,SAAS,QAAQ,gBAAgB;AACxD,SAASC,sBAAsB,EAAEC,iBAAiB,EAAEC,SAAS,QAAQ,iBAAiB","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/index.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ /** Strips everything except digits, a single leading "+", and "." for decimals. */
4
+ export function sanitizeNumeric(value, allowDecimal = false) {
5
+ if (allowDecimal) {
6
+ const cleaned = value.replace(/[^0-9.]/g, '');
7
+ const [head, ...rest] = cleaned.split('.');
8
+ return rest.length ? `${head}.${rest.join('')}` : head;
9
+ }
10
+ return value.replace(/[^0-9]/g, '');
11
+ }
12
+ export function sanitizePhone(value) {
13
+ return value.replace(/[^0-9+()\-\s]/g, '');
14
+ }
15
+ export function truncate(value, maxLength) {
16
+ if (!maxLength) return value;
17
+ return value.length > maxLength ? value.slice(0, maxLength) : value;
18
+ }
19
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["sanitizeNumeric","value","allowDecimal","cleaned","replace","head","rest","split","length","join","sanitizePhone","truncate","maxLength","slice"],"sourceRoot":"../../../src","sources":["utils/formatters.ts"],"mappings":";;AAAA;AACA,OAAO,SAASA,eAAeA,CAACC,KAAa,EAAEC,YAAY,GAAG,KAAK,EAAU;EAC3E,IAAIA,YAAY,EAAE;IAChB,MAAMC,OAAO,GAAGF,KAAK,CAACG,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;IAC7C,MAAM,CAACC,IAAI,EAAE,GAAGC,IAAI,CAAC,GAAGH,OAAO,CAACI,KAAK,CAAC,GAAG,CAAC;IAC1C,OAAOD,IAAI,CAACE,MAAM,GAAG,GAAGH,IAAI,IAAIC,IAAI,CAACG,IAAI,CAAC,EAAE,CAAC,EAAE,GAAGJ,IAAI;EACxD;EACA,OAAOJ,KAAK,CAACG,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AACrC;AAEA,OAAO,SAASM,aAAaA,CAACT,KAAa,EAAU;EACnD,OAAOA,KAAK,CAACG,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;AAC5C;AAEA,OAAO,SAASO,QAAQA,CAACV,KAAa,EAAEW,SAAkB,EAAU;EAClE,IAAI,CAACA,SAAS,EAAE,OAAOX,KAAK;EAC5B,OAAOA,KAAK,CAACO,MAAM,GAAGI,SAAS,GAAGX,KAAK,CAACY,KAAK,CAAC,CAAC,EAAED,SAAS,CAAC,GAAGX,KAAK;AACrE","ignoreList":[]}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+
3
+ import { Platform } from 'react-native';
4
+ /**
5
+ * Central place that decides "if fieldType is X, the input should behave like Y".
6
+ * This is what powers the "just set type='email' and everything is handled" behavior.
7
+ */
8
+ export function resolveFieldConfig(type) {
9
+ switch (type) {
10
+ case 'email':
11
+ return {
12
+ keyboardType: 'email-address',
13
+ secureTextEntry: false,
14
+ autoCapitalize: 'none',
15
+ autoCorrect: false,
16
+ multiline: false
17
+ };
18
+ case 'number':
19
+ return {
20
+ keyboardType: Platform.select({
21
+ ios: 'number-pad',
22
+ android: 'numeric',
23
+ default: 'numeric'
24
+ }),
25
+ secureTextEntry: false,
26
+ autoCapitalize: 'none',
27
+ autoCorrect: false,
28
+ multiline: false
29
+ };
30
+ case 'decimal':
31
+ return {
32
+ keyboardType: Platform.select({
33
+ ios: 'decimal-pad',
34
+ android: 'numeric',
35
+ default: 'decimal-pad'
36
+ }),
37
+ secureTextEntry: false,
38
+ autoCapitalize: 'none',
39
+ autoCorrect: false,
40
+ multiline: false
41
+ };
42
+ case 'phone':
43
+ return {
44
+ keyboardType: 'phone-pad',
45
+ secureTextEntry: false,
46
+ autoCapitalize: 'none',
47
+ autoCorrect: false,
48
+ multiline: false
49
+ };
50
+ case 'password':
51
+ return {
52
+ keyboardType: 'default',
53
+ secureTextEntry: true,
54
+ autoCapitalize: 'none',
55
+ autoCorrect: false,
56
+ multiline: false
57
+ };
58
+ case 'search':
59
+ return {
60
+ keyboardType: 'default',
61
+ secureTextEntry: false,
62
+ autoCapitalize: 'none',
63
+ autoCorrect: false,
64
+ multiline: false
65
+ };
66
+ case 'multiline':
67
+ case 'description':
68
+ case 'chat':
69
+ return {
70
+ keyboardType: 'default',
71
+ secureTextEntry: false,
72
+ autoCapitalize: 'sentences',
73
+ autoCorrect: true,
74
+ multiline: true
75
+ };
76
+ case 'text':
77
+ default:
78
+ return {
79
+ keyboardType: 'default',
80
+ secureTextEntry: false,
81
+ autoCapitalize: 'sentences',
82
+ autoCorrect: true,
83
+ multiline: false
84
+ };
85
+ }
86
+ }
87
+
88
+ /** Returns sensible default validation rules implied purely by the field type (before user overrides). */
89
+ export function implicitRulesForType(type) {
90
+ if (type === 'email') return {
91
+ email: true
92
+ };
93
+ if (type === 'number' || type === 'decimal') return {
94
+ number: true
95
+ };
96
+ return {};
97
+ }
98
+ //# sourceMappingURL=keyboardTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Platform","resolveFieldConfig","type","keyboardType","secureTextEntry","autoCapitalize","autoCorrect","multiline","select","ios","android","default","implicitRulesForType","email","number"],"sourceRoot":"../../../src","sources":["utils/keyboardTypes.ts"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,cAAc;AAGvC;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAACC,IAAwB,EAA8B;EACvF,QAAQA,IAAI;IACV,KAAK,OAAO;MACV,OAAO;QACLC,YAAY,EAAE,eAAe;QAC7BC,eAAe,EAAE,KAAK;QACtBC,cAAc,EAAE,MAAM;QACtBC,WAAW,EAAE,KAAK;QAClBC,SAAS,EAAE;MACb,CAAC;IACH,KAAK,QAAQ;MACX,OAAO;QACLJ,YAAY,EAAEH,QAAQ,CAACQ,MAAM,CAAC;UAAEC,GAAG,EAAE,YAAY;UAAEC,OAAO,EAAE,SAAS;UAAEC,OAAO,EAAE;QAAU,CAAC,CAAC;QAC5FP,eAAe,EAAE,KAAK;QACtBC,cAAc,EAAE,MAAM;QACtBC,WAAW,EAAE,KAAK;QAClBC,SAAS,EAAE;MACb,CAAC;IACH,KAAK,SAAS;MACZ,OAAO;QACLJ,YAAY,EAAEH,QAAQ,CAACQ,MAAM,CAAC;UAAEC,GAAG,EAAE,aAAa;UAAEC,OAAO,EAAE,SAAS;UAAEC,OAAO,EAAE;QAAc,CAAC,CAAC;QACjGP,eAAe,EAAE,KAAK;QACtBC,cAAc,EAAE,MAAM;QACtBC,WAAW,EAAE,KAAK;QAClBC,SAAS,EAAE;MACb,CAAC;IACH,KAAK,OAAO;MACV,OAAO;QACLJ,YAAY,EAAE,WAAW;QACzBC,eAAe,EAAE,KAAK;QACtBC,cAAc,EAAE,MAAM;QACtBC,WAAW,EAAE,KAAK;QAClBC,SAAS,EAAE;MACb,CAAC;IACH,KAAK,UAAU;MACb,OAAO;QACLJ,YAAY,EAAE,SAAS;QACvBC,eAAe,EAAE,IAAI;QACrBC,cAAc,EAAE,MAAM;QACtBC,WAAW,EAAE,KAAK;QAClBC,SAAS,EAAE;MACb,CAAC;IACH,KAAK,QAAQ;MACX,OAAO;QACLJ,YAAY,EAAE,SAAS;QACvBC,eAAe,EAAE,KAAK;QACtBC,cAAc,EAAE,MAAM;QACtBC,WAAW,EAAE,KAAK;QAClBC,SAAS,EAAE;MACb,CAAC;IACH,KAAK,WAAW;IAChB,KAAK,aAAa;IAClB,KAAK,MAAM;MACT,OAAO;QACLJ,YAAY,EAAE,SAAS;QACvBC,eAAe,EAAE,KAAK;QACtBC,cAAc,EAAE,WAAW;QAC3BC,WAAW,EAAE,IAAI;QACjBC,SAAS,EAAE;MACb,CAAC;IACH,KAAK,MAAM;IACX;MACE,OAAO;QACLJ,YAAY,EAAE,SAAS;QACvBC,eAAe,EAAE,KAAK;QACtBC,cAAc,EAAE,WAAW;QAC3BC,WAAW,EAAE,IAAI;QACjBC,SAAS,EAAE;MACb,CAAC;EACL;AACF;;AAEA;AACA,OAAO,SAASK,oBAAoBA,CAACV,IAAwB,EAAE;EAC7D,IAAIA,IAAI,KAAK,OAAO,EAAE,OAAO;IAAEW,KAAK,EAAE;EAAc,CAAC;EACrD,IAAIX,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,SAAS,EAAE,OAAO;IAAEY,MAAM,EAAE;EAAc,CAAC;EAC7E,OAAO,CAAC,CAAC;AACX","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ export { isValidEmail, isValidNumber, isValidPhone, requiredValidator, emailValidator, numberValidator, phoneValidator, minLengthValidator, maxLengthValidator, patternValidator, runRules } from './validators';
4
+ export { useValidation } from './useValidation';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isValidEmail","isValidNumber","isValidPhone","requiredValidator","emailValidator","numberValidator","phoneValidator","minLengthValidator","maxLengthValidator","patternValidator","runRules","useValidation"],"sourceRoot":"../../../src","sources":["validation/index.ts"],"mappings":";;AAAA,SACEA,YAAY,EACZC,aAAa,EACbC,YAAY,EACZC,iBAAiB,EACjBC,cAAc,EACdC,eAAe,EACfC,cAAc,EACdC,kBAAkB,EAClBC,kBAAkB,EAClBC,gBAAgB,EAChBC,QAAQ,QACH,cAAc;AACrB,SAASC,aAAa,QAAQ,iBAAiB","ignoreList":[]}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useState } from 'react';
4
+ import { runRules } from './validators';
5
+ /**
6
+ * Lightweight per-field validation hook for use outside of `useFieldFlowForm`,
7
+ * e.g. when a single input is validated on its own.
8
+ */
9
+ export function useValidation(rules) {
10
+ const [error, setError] = useState(null);
11
+ const [touched, setTouched] = useState(false);
12
+ const validate = useCallback(value => {
13
+ const result = runRules(value, rules);
14
+ setError(result.valid ? null : result.message ?? 'Invalid value');
15
+ return result.valid;
16
+ }, [rules]);
17
+ const markTouched = useCallback(() => setTouched(true), []);
18
+ const reset = useCallback(() => {
19
+ setError(null);
20
+ setTouched(false);
21
+ }, []);
22
+ return {
23
+ error,
24
+ touched,
25
+ validate,
26
+ markTouched,
27
+ reset
28
+ };
29
+ }
30
+ //# sourceMappingURL=useValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useState","runRules","useValidation","rules","error","setError","touched","setTouched","validate","value","result","valid","message","markTouched","reset"],"sourceRoot":"../../../src","sources":["validation/useValidation.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AAE7C,SAASC,QAAQ,QAAQ,cAAc;AAUvC;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAACC,KAAsB,EAAuB;EACzE,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGL,QAAQ,CAAgB,IAAI,CAAC;EACvD,MAAM,CAACM,OAAO,EAAEC,UAAU,CAAC,GAAGP,QAAQ,CAAC,KAAK,CAAC;EAE7C,MAAMQ,QAAQ,GAAGT,WAAW,CACzBU,KAAa,IAAK;IACjB,MAAMC,MAAM,GAAGT,QAAQ,CAACQ,KAAK,EAAEN,KAAK,CAAC;IACrCE,QAAQ,CAACK,MAAM,CAACC,KAAK,GAAG,IAAI,GAAGD,MAAM,CAACE,OAAO,IAAI,eAAe,CAAC;IACjE,OAAOF,MAAM,CAACC,KAAK;EACrB,CAAC,EACD,CAACR,KAAK,CACR,CAAC;EAED,MAAMU,WAAW,GAAGd,WAAW,CAAC,MAAMQ,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;EAC3D,MAAMO,KAAK,GAAGf,WAAW,CAAC,MAAM;IAC9BM,QAAQ,CAAC,IAAI,CAAC;IACdE,UAAU,CAAC,KAAK,CAAC;EACnB,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IAAEH,KAAK;IAAEE,OAAO;IAAEE,QAAQ;IAAEK,WAAW;IAAEC;EAAM,CAAC;AACzD","ignoreList":[]}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+
3
+ const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
4
+ const NUMBER_REGEX = /^-?\d+(\.\d+)?$/;
5
+ const PHONE_REGEX = /^[+]?[\d\s()-]{7,20}$/;
6
+ export const isValidEmail = value => EMAIL_REGEX.test(value.trim());
7
+ export const isValidNumber = value => NUMBER_REGEX.test(value.trim());
8
+ export const isValidPhone = value => PHONE_REGEX.test(value.trim());
9
+ export const requiredValidator = (message = 'This field is required') => value => value !== undefined && value !== null && value.trim().length > 0 ? {
10
+ valid: true
11
+ } : {
12
+ valid: false,
13
+ message
14
+ };
15
+ export const emailValidator = (message = 'Enter a valid email address') => value => value.length === 0 || isValidEmail(value) ? {
16
+ valid: true
17
+ } : {
18
+ valid: false,
19
+ message
20
+ };
21
+ export const numberValidator = (message = 'Enter a valid number') => value => value.length === 0 || isValidNumber(value) ? {
22
+ valid: true
23
+ } : {
24
+ valid: false,
25
+ message
26
+ };
27
+ export const phoneValidator = (message = 'Enter a valid phone number') => value => value.length === 0 || isValidPhone(value) ? {
28
+ valid: true
29
+ } : {
30
+ valid: false,
31
+ message
32
+ };
33
+ export const minLengthValidator = (min, message) => value => value.length === 0 || value.length >= min ? {
34
+ valid: true
35
+ } : {
36
+ valid: false,
37
+ message: message ?? `Must be at least ${min} characters`
38
+ };
39
+ export const maxLengthValidator = (max, message) => value => value.length <= max ? {
40
+ valid: true
41
+ } : {
42
+ valid: false,
43
+ message: message ?? `Must be at most ${max} characters`
44
+ };
45
+ export const patternValidator = (pattern, message = 'Invalid format') => value => value.length === 0 || pattern.test(value) ? {
46
+ valid: true
47
+ } : {
48
+ valid: false,
49
+ message
50
+ };
51
+
52
+ /**
53
+ * Turns a declarative `FieldFlowRules` object into an ordered list of validators
54
+ * and runs them against a value, stopping at (and returning) the first failure.
55
+ */
56
+ export function runRules(value, rules) {
57
+ if (!rules) return {
58
+ valid: true
59
+ };
60
+ const validators = [];
61
+ if (rules.required) {
62
+ const message = typeof rules.required === 'string' ? rules.required : undefined;
63
+ validators.push(requiredValidator(message));
64
+ }
65
+ if (rules.email) {
66
+ const message = typeof rules.email === 'string' ? rules.email : undefined;
67
+ validators.push(emailValidator(message));
68
+ }
69
+ if (rules.number) {
70
+ const message = typeof rules.number === 'string' ? rules.number : undefined;
71
+ validators.push(numberValidator(message));
72
+ }
73
+ if (rules.minLength !== undefined) {
74
+ const cfg = typeof rules.minLength === 'number' ? {
75
+ value: rules.minLength
76
+ } : rules.minLength;
77
+ validators.push(minLengthValidator(cfg.value, cfg.message));
78
+ }
79
+ if (rules.maxLength !== undefined) {
80
+ const cfg = typeof rules.maxLength === 'number' ? {
81
+ value: rules.maxLength
82
+ } : rules.maxLength;
83
+ validators.push(maxLengthValidator(cfg.value, cfg.message));
84
+ }
85
+ if (rules.pattern) {
86
+ const cfg = rules.pattern instanceof RegExp ? {
87
+ value: rules.pattern
88
+ } : rules.pattern;
89
+ validators.push(patternValidator(cfg.value, cfg.message));
90
+ }
91
+ if (rules.custom) {
92
+ const customs = Array.isArray(rules.custom) ? rules.custom : [rules.custom];
93
+ validators.push(...customs);
94
+ }
95
+ for (const validate of validators) {
96
+ const result = validate(value ?? '');
97
+ if (!result.valid) return result;
98
+ }
99
+ return {
100
+ valid: true
101
+ };
102
+ }
103
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["EMAIL_REGEX","NUMBER_REGEX","PHONE_REGEX","isValidEmail","value","test","trim","isValidNumber","isValidPhone","requiredValidator","message","undefined","length","valid","emailValidator","numberValidator","phoneValidator","minLengthValidator","min","maxLengthValidator","max","patternValidator","pattern","runRules","rules","validators","required","push","email","number","minLength","cfg","maxLength","RegExp","custom","customs","Array","isArray","validate","result"],"sourceRoot":"../../../src","sources":["validation/validators.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { ChatInputProps } from './types';
3
+ /**
4
+ * A ready-to-drop-in chat composer for messaging screens: expandable input,
5
+ * a configurable row of attachment buttons (camera / gallery / document /
6
+ * location / voice, plus your own custom actions), and a send button that
7
+ * only lights up once there's something to send.
8
+ */
9
+ export declare function ChatInput({ value, defaultValue, onChangeText, onSend, placeholder, attachmentActions, onAttachmentPress, customActions, disabled, loading, maxLength, minHeight, maxHeight, theme: themeOverride, testID, }: ChatInputProps): React.JSX.Element;
10
+ //# sourceMappingURL=ChatInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatInput.d.ts","sourceRoot":"","sources":["../../../../src/components/ChatInput/ChatInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,OAAO,CAAC;AAczD,OAAO,KAAK,EAAwB,cAAc,EAAE,MAAM,SAAS,CAAC;AAUpE;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,WAAuB,EACvB,iBAAsB,EACtB,iBAAiB,EACjB,aAAkB,EAClB,QAAQ,EACR,OAAO,EACP,SAAS,EACT,SAAc,EACd,SAAe,EACf,KAAK,EAAE,aAAa,EACpB,MAAM,GACP,EAAE,cAAc,qBAuFhB"}
@@ -0,0 +1,3 @@
1
+ export { ChatInput } from './ChatInput';
2
+ export type { ChatInputProps, ChatAttachmentAction, CustomChatAction } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ChatInput/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type React from 'react';
2
+ import type { DeepPartial, FieldFlowTheme } from '../../types';
3
+ import type { FieldFlowIconName } from '../../icons';
4
+ export type ChatAttachmentAction = 'camera' | 'gallery' | 'document' | 'location' | 'voice';
5
+ export interface CustomChatAction {
6
+ id: string;
7
+ icon: FieldFlowIconName | React.ReactNode;
8
+ label?: string;
9
+ onPress: () => void;
10
+ }
11
+ export interface ChatInputProps {
12
+ value?: string;
13
+ defaultValue?: string;
14
+ onChangeText?: (value: string) => void;
15
+ onSend: (message: string) => void;
16
+ placeholder?: string;
17
+ /** Which built-in attachment buttons to show in the toolbar, in order. */
18
+ attachmentActions?: ChatAttachmentAction[];
19
+ onAttachmentPress?: (action: ChatAttachmentAction) => void;
20
+ /** Extra app-specific buttons appended after the built-in ones. */
21
+ customActions?: CustomChatAction[];
22
+ disabled?: boolean;
23
+ loading?: boolean;
24
+ maxLength?: number;
25
+ minHeight?: number;
26
+ maxHeight?: number;
27
+ theme?: DeepPartial<FieldFlowTheme>;
28
+ testID?: string;
29
+ }
30
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/ChatInput/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;AAE5F,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC3C,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC3D,mEAAmE;IACnE,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,KAAK,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import type { TextInput } from 'react-native';
3
+ import type { FieldFlowInputProps } from '../FieldFlowInput/types';
4
+ export interface DescriptionFieldProps extends Omit<FieldFlowInputProps, 'type'> {
5
+ /** Minimum height in px before the field starts growing. Default 80. */
6
+ minHeight?: number;
7
+ /** Maximum height in px the field will grow to before scrolling internally. Default 200. */
8
+ maxHeight?: number;
9
+ }
10
+ /**
11
+ * A dedicated multi-line field for comments, notes, descriptions, and feedback.
12
+ * Grows automatically as the user types, up to `maxHeight`, and supports the
13
+ * same character-limit / validation / theming props as FieldFlowInput.
14
+ */
15
+ export declare const DescriptionField: React.ForwardRefExoticComponent<DescriptionFieldProps & React.RefAttributes<TextInput>>;
16
+ //# sourceMappingURL=DescriptionField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DescriptionField.d.ts","sourceRoot":"","sources":["../../../../src/components/DescriptionField/DescriptionField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAC;AACpD,OAAO,KAAK,EAAwB,SAAS,EAAuC,MAAM,cAAc,CAAC;AAEzG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC;IAC9E,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,yFAqB3B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { DescriptionField } from './DescriptionField';
2
+ export type { DescriptionFieldProps } from './DescriptionField';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/DescriptionField/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { TextInput } from 'react-native';
3
+ import type { FieldFlowInputProps } from './types';
4
+ export declare const FieldFlowInput: React.ForwardRefExoticComponent<FieldFlowInputProps & React.RefAttributes<TextInput>>;
5
+ //# sourceMappingURL=FieldFlowInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldFlowInput.d.ts","sourceRoot":"","sources":["../../../../src/components/FieldFlowInput/FieldFlowInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkF,MAAM,OAAO,CAAC;AACvG,OAAO,EAAmB,SAAS,EAAQ,MAAM,cAAc,CAAC;AAShE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAanD,eAAO,MAAM,cAAc,uFAwNzB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { FieldFlowInput } from './FieldFlowInput';
2
+ export type { FieldFlowInputProps } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/FieldFlowInput/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,71 @@
1
+ import type { FieldFlowState, FieldFlowTheme } from '../../types';
2
+ export declare function borderColorFor(theme: FieldFlowTheme, state: FieldFlowState): string;
3
+ export declare function labelColorFor(theme: FieldFlowTheme, state: FieldFlowState): string;
4
+ export declare function iconColorFor(theme: FieldFlowTheme, state: FieldFlowState): string;
5
+ export declare function createStyles(theme: FieldFlowTheme, state: FieldFlowState, multiline: boolean): {
6
+ wrapper: {
7
+ marginBottom: number;
8
+ };
9
+ label: {
10
+ fontSize: number;
11
+ marginBottom: number;
12
+ color: string;
13
+ fontWeight: "500";
14
+ };
15
+ inputContainer: {
16
+ flexDirection: "row";
17
+ alignItems: "center" | "flex-start";
18
+ backgroundColor: string;
19
+ borderRadius: number;
20
+ borderWidth: number;
21
+ borderColor: string;
22
+ paddingHorizontal: number;
23
+ paddingVertical: number;
24
+ minHeight: number | undefined;
25
+ };
26
+ input: {
27
+ flex: number;
28
+ fontSize: number;
29
+ color: string;
30
+ paddingVertical: number;
31
+ textAlignVertical: "center" | "top";
32
+ minHeight: number | undefined;
33
+ };
34
+ iconSlot: {
35
+ alignItems: "center";
36
+ justifyContent: "center";
37
+ marginTop: number;
38
+ };
39
+ iconSlotLeft: {
40
+ marginRight: number;
41
+ };
42
+ iconSlotRight: {
43
+ marginLeft: number;
44
+ };
45
+ footerRow: {
46
+ flexDirection: "row";
47
+ justifyContent: "space-between";
48
+ marginTop: number;
49
+ };
50
+ helperText: {
51
+ fontSize: number;
52
+ color: string;
53
+ flexShrink: number;
54
+ };
55
+ errorText: {
56
+ fontSize: number;
57
+ color: string;
58
+ flexShrink: number;
59
+ };
60
+ successText: {
61
+ fontSize: number;
62
+ color: string;
63
+ flexShrink: number;
64
+ };
65
+ charCount: {
66
+ fontSize: number;
67
+ color: string;
68
+ marginLeft: number;
69
+ };
70
+ };
71
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/components/FieldFlowInput/styles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElE,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM,CAWnF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM,CAIlF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM,CAEjF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmE5F"}