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.
- package/LICENSE +21 -0
- package/README.md +273 -0
- package/lib/commonjs/components/ChatInput/ChatInput.js +170 -0
- package/lib/commonjs/components/ChatInput/ChatInput.js.map +1 -0
- package/lib/commonjs/components/ChatInput/index.js +13 -0
- package/lib/commonjs/components/ChatInput/index.js.map +1 -0
- package/lib/commonjs/components/ChatInput/types.js +6 -0
- package/lib/commonjs/components/ChatInput/types.js.map +1 -0
- package/lib/commonjs/components/DescriptionField/DescriptionField.js +40 -0
- package/lib/commonjs/components/DescriptionField/DescriptionField.js.map +1 -0
- package/lib/commonjs/components/DescriptionField/index.js +13 -0
- package/lib/commonjs/components/DescriptionField/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowInput/FieldFlowInput.js +207 -0
- package/lib/commonjs/components/FieldFlowInput/FieldFlowInput.js.map +1 -0
- package/lib/commonjs/components/FieldFlowInput/index.js +13 -0
- package/lib/commonjs/components/FieldFlowInput/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowInput/styles.js +99 -0
- package/lib/commonjs/components/FieldFlowInput/styles.js.map +1 -0
- package/lib/commonjs/components/FieldFlowInput/types.js +6 -0
- package/lib/commonjs/components/FieldFlowInput/types.js.map +1 -0
- package/lib/commonjs/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.js +44 -0
- package/lib/commonjs/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.js.map +1 -0
- package/lib/commonjs/components/KeyboardAwareFormWrapper/index.js +13 -0
- package/lib/commonjs/components/KeyboardAwareFormWrapper/index.js.map +1 -0
- package/lib/commonjs/hooks/index.js +27 -0
- package/lib/commonjs/hooks/index.js.map +1 -0
- package/lib/commonjs/hooks/useFieldFlowForm.js +108 -0
- package/lib/commonjs/hooks/useFieldFlowForm.js.map +1 -0
- package/lib/commonjs/hooks/useFieldState.js +27 -0
- package/lib/commonjs/hooks/useFieldState.js.map +1 -0
- package/lib/commonjs/hooks/useKeyboardManager.js +68 -0
- package/lib/commonjs/hooks/useKeyboardManager.js.map +1 -0
- package/lib/commonjs/icons/Icon.js +388 -0
- package/lib/commonjs/icons/Icon.js.map +1 -0
- package/lib/commonjs/icons/index.js +13 -0
- package/lib/commonjs/icons/index.js.map +1 -0
- package/lib/commonjs/index.js +158 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/theme/ThemeProvider.js +48 -0
- package/lib/commonjs/theme/ThemeProvider.js.map +1 -0
- package/lib/commonjs/theme/defaultTheme.js +62 -0
- package/lib/commonjs/theme/defaultTheme.js.map +1 -0
- package/lib/commonjs/theme/index.js +38 -0
- package/lib/commonjs/theme/index.js.map +1 -0
- package/lib/commonjs/types/index.js +6 -0
- package/lib/commonjs/types/index.js.map +1 -0
- package/lib/commonjs/utils/formatters.js +25 -0
- package/lib/commonjs/utils/formatters.js.map +1 -0
- package/lib/commonjs/utils/keyboardTypes.js +103 -0
- package/lib/commonjs/utils/keyboardTypes.js.map +1 -0
- package/lib/commonjs/validation/index.js +80 -0
- package/lib/commonjs/validation/index.js.map +1 -0
- package/lib/commonjs/validation/useValidation.js +34 -0
- package/lib/commonjs/validation/useValidation.js.map +1 -0
- package/lib/commonjs/validation/validators.js +118 -0
- package/lib/commonjs/validation/validators.js.map +1 -0
- package/lib/module/components/ChatInput/ChatInput.js +165 -0
- package/lib/module/components/ChatInput/ChatInput.js.map +1 -0
- package/lib/module/components/ChatInput/index.js +4 -0
- package/lib/module/components/ChatInput/index.js.map +1 -0
- package/lib/module/components/ChatInput/types.js +4 -0
- package/lib/module/components/ChatInput/types.js.map +1 -0
- package/lib/module/components/DescriptionField/DescriptionField.js +35 -0
- package/lib/module/components/DescriptionField/DescriptionField.js.map +1 -0
- package/lib/module/components/DescriptionField/index.js +4 -0
- package/lib/module/components/DescriptionField/index.js.map +1 -0
- package/lib/module/components/FieldFlowInput/FieldFlowInput.js +202 -0
- package/lib/module/components/FieldFlowInput/FieldFlowInput.js.map +1 -0
- package/lib/module/components/FieldFlowInput/index.js +4 -0
- package/lib/module/components/FieldFlowInput/index.js.map +1 -0
- package/lib/module/components/FieldFlowInput/styles.js +92 -0
- package/lib/module/components/FieldFlowInput/styles.js.map +1 -0
- package/lib/module/components/FieldFlowInput/types.js +4 -0
- package/lib/module/components/FieldFlowInput/types.js.map +1 -0
- package/lib/module/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.js +39 -0
- package/lib/module/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.js.map +1 -0
- package/lib/module/components/KeyboardAwareFormWrapper/index.js +4 -0
- package/lib/module/components/KeyboardAwareFormWrapper/index.js.map +1 -0
- package/lib/module/hooks/index.js +6 -0
- package/lib/module/hooks/index.js.map +1 -0
- package/lib/module/hooks/useFieldFlowForm.js +104 -0
- package/lib/module/hooks/useFieldFlowForm.js.map +1 -0
- package/lib/module/hooks/useFieldState.js +23 -0
- package/lib/module/hooks/useFieldState.js.map +1 -0
- package/lib/module/hooks/useKeyboardManager.js +64 -0
- package/lib/module/hooks/useKeyboardManager.js.map +1 -0
- package/lib/module/icons/Icon.js +383 -0
- package/lib/module/icons/Icon.js.map +1 -0
- package/lib/module/icons/index.js +4 -0
- package/lib/module/icons/index.js.map +1 -0
- package/lib/module/index.js +18 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/theme/ThemeProvider.js +42 -0
- package/lib/module/theme/ThemeProvider.js.map +1 -0
- package/lib/module/theme/defaultTheme.js +58 -0
- package/lib/module/theme/defaultTheme.js.map +1 -0
- package/lib/module/theme/index.js +5 -0
- package/lib/module/theme/index.js.map +1 -0
- package/lib/module/types/index.js +4 -0
- package/lib/module/types/index.js.map +1 -0
- package/lib/module/utils/formatters.js +19 -0
- package/lib/module/utils/formatters.js.map +1 -0
- package/lib/module/utils/keyboardTypes.js +98 -0
- package/lib/module/utils/keyboardTypes.js.map +1 -0
- package/lib/module/validation/index.js +5 -0
- package/lib/module/validation/index.js.map +1 -0
- package/lib/module/validation/useValidation.js +30 -0
- package/lib/module/validation/useValidation.js.map +1 -0
- package/lib/module/validation/validators.js +103 -0
- package/lib/module/validation/validators.js.map +1 -0
- package/lib/typescript/components/ChatInput/ChatInput.d.ts +10 -0
- package/lib/typescript/components/ChatInput/ChatInput.d.ts.map +1 -0
- package/lib/typescript/components/ChatInput/index.d.ts +3 -0
- package/lib/typescript/components/ChatInput/index.d.ts.map +1 -0
- package/lib/typescript/components/ChatInput/types.d.ts +30 -0
- package/lib/typescript/components/ChatInput/types.d.ts.map +1 -0
- package/lib/typescript/components/DescriptionField/DescriptionField.d.ts +16 -0
- package/lib/typescript/components/DescriptionField/DescriptionField.d.ts.map +1 -0
- package/lib/typescript/components/DescriptionField/index.d.ts +3 -0
- package/lib/typescript/components/DescriptionField/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowInput/FieldFlowInput.d.ts +5 -0
- package/lib/typescript/components/FieldFlowInput/FieldFlowInput.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowInput/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowInput/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowInput/styles.d.ts +71 -0
- package/lib/typescript/components/FieldFlowInput/styles.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowInput/types.d.ts +50 -0
- package/lib/typescript/components/FieldFlowInput/types.d.ts.map +1 -0
- package/lib/typescript/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.d.ts +17 -0
- package/lib/typescript/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.d.ts.map +1 -0
- package/lib/typescript/components/KeyboardAwareFormWrapper/index.d.ts +3 -0
- package/lib/typescript/components/KeyboardAwareFormWrapper/index.d.ts.map +1 -0
- package/lib/typescript/hooks/index.d.ts +7 -0
- package/lib/typescript/hooks/index.d.ts.map +1 -0
- package/lib/typescript/hooks/useFieldFlowForm.d.ts +31 -0
- package/lib/typescript/hooks/useFieldFlowForm.d.ts.map +1 -0
- package/lib/typescript/hooks/useFieldState.d.ts +12 -0
- package/lib/typescript/hooks/useFieldState.d.ts.map +1 -0
- package/lib/typescript/hooks/useKeyboardManager.d.ts +35 -0
- package/lib/typescript/hooks/useKeyboardManager.d.ts.map +1 -0
- package/lib/typescript/icons/Icon.d.ts +17 -0
- package/lib/typescript/icons/Icon.d.ts.map +1 -0
- package/lib/typescript/icons/index.d.ts +3 -0
- package/lib/typescript/icons/index.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +18 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/theme/ThemeProvider.d.ts +16 -0
- package/lib/typescript/theme/ThemeProvider.d.ts.map +1 -0
- package/lib/typescript/theme/defaultTheme.d.ts +4 -0
- package/lib/typescript/theme/defaultTheme.d.ts.map +1 -0
- package/lib/typescript/theme/index.d.ts +4 -0
- package/lib/typescript/theme/index.d.ts.map +1 -0
- package/lib/typescript/types/index.d.ts +79 -0
- package/lib/typescript/types/index.d.ts.map +1 -0
- package/lib/typescript/utils/formatters.d.ts +5 -0
- package/lib/typescript/utils/formatters.d.ts.map +1 -0
- package/lib/typescript/utils/keyboardTypes.d.ts +18 -0
- package/lib/typescript/utils/keyboardTypes.d.ts.map +1 -0
- package/lib/typescript/validation/index.d.ts +4 -0
- package/lib/typescript/validation/index.d.ts.map +1 -0
- package/lib/typescript/validation/useValidation.d.ts +14 -0
- package/lib/typescript/validation/useValidation.d.ts.map +1 -0
- package/lib/typescript/validation/validators.d.ts +17 -0
- package/lib/typescript/validation/validators.d.ts.map +1 -0
- package/package.json +80 -0
- package/src/components/ChatInput/ChatInput.tsx +178 -0
- package/src/components/ChatInput/index.ts +2 -0
- package/src/components/ChatInput/types.ts +35 -0
- package/src/components/DescriptionField/DescriptionField.tsx +39 -0
- package/src/components/DescriptionField/index.ts +2 -0
- package/src/components/FieldFlowInput/FieldFlowInput.tsx +240 -0
- package/src/components/FieldFlowInput/index.ts +2 -0
- package/src/components/FieldFlowInput/styles.ts +94 -0
- package/src/components/FieldFlowInput/types.ts +55 -0
- package/src/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.tsx +45 -0
- package/src/components/KeyboardAwareFormWrapper/index.ts +2 -0
- package/src/hooks/index.ts +12 -0
- package/src/hooks/useFieldFlowForm.ts +133 -0
- package/src/hooks/useFieldState.ts +31 -0
- package/src/hooks/useKeyboardManager.ts +105 -0
- package/src/icons/Icon.tsx +338 -0
- package/src/icons/index.ts +2 -0
- package/src/index.ts +63 -0
- package/src/theme/ThemeProvider.tsx +49 -0
- package/src/theme/defaultTheme.ts +58 -0
- package/src/theme/index.ts +3 -0
- package/src/types/index.ts +98 -0
- package/src/utils/formatters.ts +18 -0
- package/src/utils/keyboardTypes.ts +85 -0
- package/src/validation/index.ts +15 -0
- package/src/validation/useValidation.ts +37 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|