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,48 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FieldFlowThemeProvider = FieldFlowThemeProvider;
7
+ exports.mergeDeep = mergeDeep;
8
+ exports.useFieldFlowTheme = useFieldFlowTheme;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _defaultTheme = require("./defaultTheme");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
+ const FieldFlowThemeContext = /*#__PURE__*/(0, _react.createContext)(_defaultTheme.defaultTheme);
14
+ function mergeDeep(base, override) {
15
+ if (!override) return base;
16
+ const result = {
17
+ ...base
18
+ };
19
+ for (const key of Object.keys(override)) {
20
+ const overrideValue = override[key];
21
+ const baseValue = base[key];
22
+ if (overrideValue && typeof overrideValue === 'object' && !Array.isArray(overrideValue) && baseValue && typeof baseValue === 'object') {
23
+ result[key] = mergeDeep(baseValue, overrideValue);
24
+ } else if (overrideValue !== undefined) {
25
+ result[key] = overrideValue;
26
+ }
27
+ }
28
+ return result;
29
+ }
30
+ /**
31
+ * Wrap your app (or a screen/form) in this provider to apply a custom theme.
32
+ * Any field not covered by your overrides falls back to FieldFlow's defaults,
33
+ * so you only need to specify what you want to change.
34
+ */
35
+ function FieldFlowThemeProvider({
36
+ theme,
37
+ children
38
+ }) {
39
+ const merged = (0, _react.useMemo)(() => mergeDeep(_defaultTheme.defaultTheme, theme), [theme]);
40
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(FieldFlowThemeContext.Provider, {
41
+ value: merged,
42
+ children: children
43
+ });
44
+ }
45
+ function useFieldFlowTheme() {
46
+ return (0, _react.useContext)(FieldFlowThemeContext);
47
+ }
48
+ //# sourceMappingURL=ThemeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_defaultTheme","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","FieldFlowThemeContext","createContext","defaultTheme","mergeDeep","base","override","result","key","keys","overrideValue","baseValue","Array","isArray","undefined","FieldFlowThemeProvider","theme","children","merged","useMemo","jsx","Provider","value","useFieldFlowTheme","useContext"],"sourceRoot":"../../../src","sources":["theme/ThemeProvider.tsx"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,aAAA,GAAAD,OAAA;AAA8C,IAAAE,WAAA,GAAAF,OAAA;AAAA,SAAAD,wBAAAI,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAN,uBAAA,YAAAA,CAAAI,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAE9C,MAAMkB,qBAAqB,gBAAG,IAAAC,oBAAa,EAAiBC,0BAAY,CAAC;AAEzE,SAASC,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,IAAIV,MAAM,CAACW,IAAI,CAACH,QAAQ,CAAC,EAAE;IACvC,MAAMI,aAAa,GAAIJ,QAAQ,CAASE,GAAG,CAAC;IAC5C,MAAMG,SAAS,GAAIN,IAAI,CAASG,GAAG,CAAC;IACpC,IACEE,aAAa,IACb,OAAOA,aAAa,KAAK,QAAQ,IACjC,CAACE,KAAK,CAACC,OAAO,CAACH,aAAa,CAAC,IAC7BC,SAAS,IACT,OAAOA,SAAS,KAAK,QAAQ,EAC7B;MACAJ,MAAM,CAACC,GAAG,CAAC,GAAGJ,SAAS,CAACO,SAAS,EAAED,aAAa,CAAC;IACnD,CAAC,MAAM,IAAIA,aAAa,KAAKI,SAAS,EAAE;MACtCP,MAAM,CAACC,GAAG,CAAC,GAAGE,aAAa;IAC7B;EACF;EACA,OAAOH,MAAM;AACf;AAOA;AACA;AACA;AACA;AACA;AACO,SAASQ,sBAAsBA,CAAC;EAAEC,KAAK;EAAEC;AAAsC,CAAC,EAAE;EACvF,MAAMC,MAAM,GAAG,IAAAC,cAAO,EAAC,MAAMf,SAAS,CAACD,0BAAY,EAAEa,KAAK,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EACrE,oBACE,IAAAnC,WAAA,CAAAuC,GAAA,EAACnB,qBAAqB,CAACoB,QAAQ;IAACC,KAAK,EAAEJ,MAAO;IAAAD,QAAA,EAAEA;EAAQ,CAAiC,CAAC;AAE9F;AAEO,SAASM,iBAAiBA,CAAA,EAAmB;EAClD,OAAO,IAAAC,iBAAU,EAACvB,qBAAqB,CAAC;AAC1C","ignoreList":[]}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.defaultTheme = exports.darkTheme = void 0;
7
+ const defaultTheme = exports.defaultTheme = {
8
+ colors: {
9
+ background: '#FFFFFF',
10
+ backgroundDisabled: '#F2F3F5',
11
+ border: '#D8DCE2',
12
+ borderFocused: '#3B82F6',
13
+ borderError: '#EF4444',
14
+ borderSuccess: '#22C55E',
15
+ text: '#111827',
16
+ placeholder: '#9CA3AF',
17
+ label: '#374151',
18
+ labelFocused: '#3B82F6',
19
+ error: '#EF4444',
20
+ success: '#22C55E',
21
+ icon: '#6B7280',
22
+ iconFocused: '#3B82F6'
23
+ },
24
+ spacing: {
25
+ paddingHorizontal: 14,
26
+ paddingVertical: 12,
27
+ gap: 6,
28
+ borderRadius: 10,
29
+ borderWidth: 1,
30
+ borderWidthFocused: 1.5
31
+ },
32
+ typography: {
33
+ fontSize: 15,
34
+ labelFontSize: 13,
35
+ helperFontSize: 12,
36
+ fontWeight: '400'
37
+ },
38
+ animation: {
39
+ duration: 160,
40
+ useNativeDriver: false
41
+ }
42
+ };
43
+ const darkTheme = exports.darkTheme = {
44
+ ...defaultTheme,
45
+ colors: {
46
+ background: '#1F2329',
47
+ backgroundDisabled: '#15171B',
48
+ border: '#3A3F47',
49
+ borderFocused: '#60A5FA',
50
+ borderError: '#F87171',
51
+ borderSuccess: '#4ADE80',
52
+ text: '#F3F4F6',
53
+ placeholder: '#6B7280',
54
+ label: '#D1D5DB',
55
+ labelFocused: '#60A5FA',
56
+ error: '#F87171',
57
+ success: '#4ADE80',
58
+ icon: '#9CA3AF',
59
+ iconFocused: '#60A5FA'
60
+ }
61
+ };
62
+ //# sourceMappingURL=defaultTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["defaultTheme","exports","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":";;;;;;AAEO,MAAMA,YAA4B,GAAAC,OAAA,CAAAD,YAAA,GAAG;EAC1CE,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;AAEM,MAAMC,SAAyB,GAAA/B,OAAA,CAAA+B,SAAA,GAAG;EACvC,GAAGhC,YAAY;EACfE,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,38 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "FieldFlowThemeProvider", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _ThemeProvider.FieldFlowThemeProvider;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "darkTheme", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _defaultTheme.darkTheme;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "defaultTheme", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _defaultTheme.defaultTheme;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "mergeDeep", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _ThemeProvider.mergeDeep;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "useFieldFlowTheme", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _ThemeProvider.useFieldFlowTheme;
34
+ }
35
+ });
36
+ var _defaultTheme = require("./defaultTheme");
37
+ var _ThemeProvider = require("./ThemeProvider");
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_defaultTheme","require","_ThemeProvider"],"sourceRoot":"../../../src","sources":["theme/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/index.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.sanitizeNumeric = sanitizeNumeric;
7
+ exports.sanitizePhone = sanitizePhone;
8
+ exports.truncate = truncate;
9
+ /** Strips everything except digits, a single leading "+", and "." for decimals. */
10
+ function sanitizeNumeric(value, allowDecimal = false) {
11
+ if (allowDecimal) {
12
+ const cleaned = value.replace(/[^0-9.]/g, '');
13
+ const [head, ...rest] = cleaned.split('.');
14
+ return rest.length ? `${head}.${rest.join('')}` : head;
15
+ }
16
+ return value.replace(/[^0-9]/g, '');
17
+ }
18
+ function sanitizePhone(value) {
19
+ return value.replace(/[^0-9+()\-\s]/g, '');
20
+ }
21
+ function truncate(value, maxLength) {
22
+ if (!maxLength) return value;
23
+ return value.length > maxLength ? value.slice(0, maxLength) : value;
24
+ }
25
+ //# 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;AACO,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;AAEO,SAASM,aAAaA,CAACT,KAAa,EAAU;EACnD,OAAOA,KAAK,CAACG,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;AAC5C;AAEO,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,103 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.implicitRulesForType = implicitRulesForType;
7
+ exports.resolveFieldConfig = resolveFieldConfig;
8
+ var _reactNative = require("react-native");
9
+ /**
10
+ * Central place that decides "if fieldType is X, the input should behave like Y".
11
+ * This is what powers the "just set type='email' and everything is handled" behavior.
12
+ */
13
+ function resolveFieldConfig(type) {
14
+ switch (type) {
15
+ case 'email':
16
+ return {
17
+ keyboardType: 'email-address',
18
+ secureTextEntry: false,
19
+ autoCapitalize: 'none',
20
+ autoCorrect: false,
21
+ multiline: false
22
+ };
23
+ case 'number':
24
+ return {
25
+ keyboardType: _reactNative.Platform.select({
26
+ ios: 'number-pad',
27
+ android: 'numeric',
28
+ default: 'numeric'
29
+ }),
30
+ secureTextEntry: false,
31
+ autoCapitalize: 'none',
32
+ autoCorrect: false,
33
+ multiline: false
34
+ };
35
+ case 'decimal':
36
+ return {
37
+ keyboardType: _reactNative.Platform.select({
38
+ ios: 'decimal-pad',
39
+ android: 'numeric',
40
+ default: 'decimal-pad'
41
+ }),
42
+ secureTextEntry: false,
43
+ autoCapitalize: 'none',
44
+ autoCorrect: false,
45
+ multiline: false
46
+ };
47
+ case 'phone':
48
+ return {
49
+ keyboardType: 'phone-pad',
50
+ secureTextEntry: false,
51
+ autoCapitalize: 'none',
52
+ autoCorrect: false,
53
+ multiline: false
54
+ };
55
+ case 'password':
56
+ return {
57
+ keyboardType: 'default',
58
+ secureTextEntry: true,
59
+ autoCapitalize: 'none',
60
+ autoCorrect: false,
61
+ multiline: false
62
+ };
63
+ case 'search':
64
+ return {
65
+ keyboardType: 'default',
66
+ secureTextEntry: false,
67
+ autoCapitalize: 'none',
68
+ autoCorrect: false,
69
+ multiline: false
70
+ };
71
+ case 'multiline':
72
+ case 'description':
73
+ case 'chat':
74
+ return {
75
+ keyboardType: 'default',
76
+ secureTextEntry: false,
77
+ autoCapitalize: 'sentences',
78
+ autoCorrect: true,
79
+ multiline: true
80
+ };
81
+ case 'text':
82
+ default:
83
+ return {
84
+ keyboardType: 'default',
85
+ secureTextEntry: false,
86
+ autoCapitalize: 'sentences',
87
+ autoCorrect: true,
88
+ multiline: false
89
+ };
90
+ }
91
+ }
92
+
93
+ /** Returns sensible default validation rules implied purely by the field type (before user overrides). */
94
+ function implicitRulesForType(type) {
95
+ if (type === 'email') return {
96
+ email: true
97
+ };
98
+ if (type === 'number' || type === 'decimal') return {
99
+ number: true
100
+ };
101
+ return {};
102
+ }
103
+ //# sourceMappingURL=keyboardTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","resolveFieldConfig","type","keyboardType","secureTextEntry","autoCapitalize","autoCorrect","multiline","Platform","select","ios","android","default","implicitRulesForType","email","number"],"sourceRoot":"../../../src","sources":["utils/keyboardTypes.ts"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAGA;AACA;AACA;AACA;AACO,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,EAAEK,qBAAQ,CAACC,MAAM,CAAC;UAAEC,GAAG,EAAE,YAAY;UAAEC,OAAO,EAAE,SAAS;UAAEC,OAAO,EAAE;QAAU,CAAC,CAAC;QAC5FR,eAAe,EAAE,KAAK;QACtBC,cAAc,EAAE,MAAM;QACtBC,WAAW,EAAE,KAAK;QAClBC,SAAS,EAAE;MACb,CAAC;IACH,KAAK,SAAS;MACZ,OAAO;QACLJ,YAAY,EAAEK,qBAAQ,CAACC,MAAM,CAAC;UAAEC,GAAG,EAAE,aAAa;UAAEC,OAAO,EAAE,SAAS;UAAEC,OAAO,EAAE;QAAc,CAAC,CAAC;QACjGR,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;AACO,SAASM,oBAAoBA,CAACX,IAAwB,EAAE;EAC7D,IAAIA,IAAI,KAAK,OAAO,EAAE,OAAO;IAAEY,KAAK,EAAE;EAAc,CAAC;EACrD,IAAIZ,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,SAAS,EAAE,OAAO;IAAEa,MAAM,EAAE;EAAc,CAAC;EAC7E,OAAO,CAAC,CAAC;AACX","ignoreList":[]}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "emailValidator", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _validators.emailValidator;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "isValidEmail", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _validators.isValidEmail;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "isValidNumber", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _validators.isValidNumber;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "isValidPhone", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _validators.isValidPhone;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "maxLengthValidator", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _validators.maxLengthValidator;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "minLengthValidator", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _validators.minLengthValidator;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "numberValidator", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _validators.numberValidator;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "patternValidator", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _validators.patternValidator;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "phoneValidator", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _validators.phoneValidator;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "requiredValidator", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _validators.requiredValidator;
64
+ }
65
+ });
66
+ Object.defineProperty(exports, "runRules", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _validators.runRules;
70
+ }
71
+ });
72
+ Object.defineProperty(exports, "useValidation", {
73
+ enumerable: true,
74
+ get: function () {
75
+ return _useValidation.useValidation;
76
+ }
77
+ });
78
+ var _validators = require("./validators");
79
+ var _useValidation = require("./useValidation");
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_validators","require","_useValidation"],"sourceRoot":"../../../src","sources":["validation/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAaA,IAAAC,cAAA,GAAAD,OAAA","ignoreList":[]}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useValidation = useValidation;
7
+ var _react = require("react");
8
+ var _validators = require("./validators");
9
+ /**
10
+ * Lightweight per-field validation hook for use outside of `useFieldFlowForm`,
11
+ * e.g. when a single input is validated on its own.
12
+ */
13
+ function useValidation(rules) {
14
+ const [error, setError] = (0, _react.useState)(null);
15
+ const [touched, setTouched] = (0, _react.useState)(false);
16
+ const validate = (0, _react.useCallback)(value => {
17
+ const result = (0, _validators.runRules)(value, rules);
18
+ setError(result.valid ? null : result.message ?? 'Invalid value');
19
+ return result.valid;
20
+ }, [rules]);
21
+ const markTouched = (0, _react.useCallback)(() => setTouched(true), []);
22
+ const reset = (0, _react.useCallback)(() => {
23
+ setError(null);
24
+ setTouched(false);
25
+ }, []);
26
+ return {
27
+ error,
28
+ touched,
29
+ validate,
30
+ markTouched,
31
+ reset
32
+ };
33
+ }
34
+ //# sourceMappingURL=useValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_validators","useValidation","rules","error","setError","useState","touched","setTouched","validate","useCallback","value","result","runRules","valid","message","markTouched","reset"],"sourceRoot":"../../../src","sources":["validation/useValidation.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAD,OAAA;AAUA;AACA;AACA;AACA;AACO,SAASE,aAAaA,CAACC,KAAsB,EAAuB;EACzE,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAG,IAAAC,eAAQ,EAAgB,IAAI,CAAC;EACvD,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAG,IAAAF,eAAQ,EAAC,KAAK,CAAC;EAE7C,MAAMG,QAAQ,GAAG,IAAAC,kBAAW,EACzBC,KAAa,IAAK;IACjB,MAAMC,MAAM,GAAG,IAAAC,oBAAQ,EAACF,KAAK,EAAER,KAAK,CAAC;IACrCE,QAAQ,CAACO,MAAM,CAACE,KAAK,GAAG,IAAI,GAAGF,MAAM,CAACG,OAAO,IAAI,eAAe,CAAC;IACjE,OAAOH,MAAM,CAACE,KAAK;EACrB,CAAC,EACD,CAACX,KAAK,CACR,CAAC;EAED,MAAMa,WAAW,GAAG,IAAAN,kBAAW,EAAC,MAAMF,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;EAC3D,MAAMS,KAAK,GAAG,IAAAP,kBAAW,EAAC,MAAM;IAC9BL,QAAQ,CAAC,IAAI,CAAC;IACdG,UAAU,CAAC,KAAK,CAAC;EACnB,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IAAEJ,KAAK;IAAEG,OAAO;IAAEE,QAAQ;IAAEO,WAAW;IAAEC;EAAM,CAAC;AACzD","ignoreList":[]}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.requiredValidator = exports.phoneValidator = exports.patternValidator = exports.numberValidator = exports.minLengthValidator = exports.maxLengthValidator = exports.isValidPhone = exports.isValidNumber = exports.isValidEmail = exports.emailValidator = void 0;
7
+ exports.runRules = runRules;
8
+ const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
9
+ const NUMBER_REGEX = /^-?\d+(\.\d+)?$/;
10
+ const PHONE_REGEX = /^[+]?[\d\s()-]{7,20}$/;
11
+ const isValidEmail = value => EMAIL_REGEX.test(value.trim());
12
+ exports.isValidEmail = isValidEmail;
13
+ const isValidNumber = value => NUMBER_REGEX.test(value.trim());
14
+ exports.isValidNumber = isValidNumber;
15
+ const isValidPhone = value => PHONE_REGEX.test(value.trim());
16
+ exports.isValidPhone = isValidPhone;
17
+ const requiredValidator = (message = 'This field is required') => value => value !== undefined && value !== null && value.trim().length > 0 ? {
18
+ valid: true
19
+ } : {
20
+ valid: false,
21
+ message
22
+ };
23
+ exports.requiredValidator = requiredValidator;
24
+ const emailValidator = (message = 'Enter a valid email address') => value => value.length === 0 || isValidEmail(value) ? {
25
+ valid: true
26
+ } : {
27
+ valid: false,
28
+ message
29
+ };
30
+ exports.emailValidator = emailValidator;
31
+ const numberValidator = (message = 'Enter a valid number') => value => value.length === 0 || isValidNumber(value) ? {
32
+ valid: true
33
+ } : {
34
+ valid: false,
35
+ message
36
+ };
37
+ exports.numberValidator = numberValidator;
38
+ const phoneValidator = (message = 'Enter a valid phone number') => value => value.length === 0 || isValidPhone(value) ? {
39
+ valid: true
40
+ } : {
41
+ valid: false,
42
+ message
43
+ };
44
+ exports.phoneValidator = phoneValidator;
45
+ const minLengthValidator = (min, message) => value => value.length === 0 || value.length >= min ? {
46
+ valid: true
47
+ } : {
48
+ valid: false,
49
+ message: message ?? `Must be at least ${min} characters`
50
+ };
51
+ exports.minLengthValidator = minLengthValidator;
52
+ const maxLengthValidator = (max, message) => value => value.length <= max ? {
53
+ valid: true
54
+ } : {
55
+ valid: false,
56
+ message: message ?? `Must be at most ${max} characters`
57
+ };
58
+ exports.maxLengthValidator = maxLengthValidator;
59
+ const patternValidator = (pattern, message = 'Invalid format') => value => value.length === 0 || pattern.test(value) ? {
60
+ valid: true
61
+ } : {
62
+ valid: false,
63
+ message
64
+ };
65
+
66
+ /**
67
+ * Turns a declarative `FieldFlowRules` object into an ordered list of validators
68
+ * and runs them against a value, stopping at (and returning) the first failure.
69
+ */
70
+ exports.patternValidator = patternValidator;
71
+ function runRules(value, rules) {
72
+ if (!rules) return {
73
+ valid: true
74
+ };
75
+ const validators = [];
76
+ if (rules.required) {
77
+ const message = typeof rules.required === 'string' ? rules.required : undefined;
78
+ validators.push(requiredValidator(message));
79
+ }
80
+ if (rules.email) {
81
+ const message = typeof rules.email === 'string' ? rules.email : undefined;
82
+ validators.push(emailValidator(message));
83
+ }
84
+ if (rules.number) {
85
+ const message = typeof rules.number === 'string' ? rules.number : undefined;
86
+ validators.push(numberValidator(message));
87
+ }
88
+ if (rules.minLength !== undefined) {
89
+ const cfg = typeof rules.minLength === 'number' ? {
90
+ value: rules.minLength
91
+ } : rules.minLength;
92
+ validators.push(minLengthValidator(cfg.value, cfg.message));
93
+ }
94
+ if (rules.maxLength !== undefined) {
95
+ const cfg = typeof rules.maxLength === 'number' ? {
96
+ value: rules.maxLength
97
+ } : rules.maxLength;
98
+ validators.push(maxLengthValidator(cfg.value, cfg.message));
99
+ }
100
+ if (rules.pattern) {
101
+ const cfg = rules.pattern instanceof RegExp ? {
102
+ value: rules.pattern
103
+ } : rules.pattern;
104
+ validators.push(patternValidator(cfg.value, cfg.message));
105
+ }
106
+ if (rules.custom) {
107
+ const customs = Array.isArray(rules.custom) ? rules.custom : [rules.custom];
108
+ validators.push(...customs);
109
+ }
110
+ for (const validate of validators) {
111
+ const result = validate(value ?? '');
112
+ if (!result.valid) return result;
113
+ }
114
+ return {
115
+ valid: true
116
+ };
117
+ }
118
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["EMAIL_REGEX","NUMBER_REGEX","PHONE_REGEX","isValidEmail","value","test","trim","exports","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":[]}