@fovestta2/mobile-react-native 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/components/FvCheckbox.d.ts +14 -0
  2. package/dist/components/FvCheckbox.d.ts.map +1 -0
  3. package/dist/components/FvCheckbox.js +73 -0
  4. package/dist/components/FvCheckbox.js.map +1 -0
  5. package/dist/components/FvDateField.d.ts +22 -0
  6. package/dist/components/FvDateField.d.ts.map +1 -0
  7. package/dist/components/FvDateField.js +117 -0
  8. package/dist/components/FvDateField.js.map +1 -0
  9. package/dist/components/FvDropdown.d.ts +25 -0
  10. package/dist/components/FvDropdown.d.ts.map +1 -0
  11. package/dist/components/FvDropdown.js +213 -0
  12. package/dist/components/FvDropdown.js.map +1 -0
  13. package/dist/components/FvEntryField.d.ts +21 -0
  14. package/dist/components/FvEntryField.d.ts.map +1 -0
  15. package/dist/components/FvEntryField.js +124 -0
  16. package/dist/components/FvEntryField.js.map +1 -0
  17. package/dist/components/FvFileSelector.d.ts +28 -0
  18. package/dist/components/FvFileSelector.d.ts.map +1 -0
  19. package/dist/components/FvFileSelector.js +205 -0
  20. package/dist/components/FvFileSelector.js.map +1 -0
  21. package/dist/components/FvImageSelector.d.ts +32 -0
  22. package/dist/components/FvImageSelector.d.ts.map +1 -0
  23. package/dist/components/FvImageSelector.js +268 -0
  24. package/dist/components/FvImageSelector.js.map +1 -0
  25. package/dist/components/FvMonthYearField.d.ts +22 -0
  26. package/dist/components/FvMonthYearField.d.ts.map +1 -0
  27. package/dist/components/FvMonthYearField.js +115 -0
  28. package/dist/components/FvMonthYearField.js.map +1 -0
  29. package/dist/components/FvNumberField.d.ts +23 -0
  30. package/dist/components/FvNumberField.d.ts.map +1 -0
  31. package/dist/components/FvNumberField.js +140 -0
  32. package/dist/components/FvNumberField.js.map +1 -0
  33. package/dist/components/FvRadioGroup.d.ts +20 -0
  34. package/dist/components/FvRadioGroup.d.ts.map +1 -0
  35. package/dist/components/FvRadioGroup.js +95 -0
  36. package/dist/components/FvRadioGroup.js.map +1 -0
  37. package/dist/components/FvRichTextEditor.d.ts +25 -0
  38. package/dist/components/FvRichTextEditor.d.ts.map +1 -0
  39. package/dist/components/FvRichTextEditor.js +246 -0
  40. package/dist/components/FvRichTextEditor.js.map +1 -0
  41. package/dist/index.d.ts +11 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +27 -0
  44. package/dist/index.js.map +1 -0
  45. package/package.json +36 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FvEntryField.js","sourceRoot":"","sources":["../../src/components/FvEntryField.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import React from "react";
2
+ import { ViewStyle, TextStyle } from "react-native";
3
+ import { ValidationSchema } from "@fovestta2/validation-engine";
4
+ export interface FileInfo {
5
+ uri: string;
6
+ name: string;
7
+ size: number;
8
+ mimeType: string;
9
+ }
10
+ export interface FvFileSelectorProps {
11
+ label?: string;
12
+ placeholder?: string;
13
+ value: FileInfo | null;
14
+ schema?: ValidationSchema;
15
+ disabled?: boolean;
16
+ accept?: string[];
17
+ maxSize?: number;
18
+ onChange: (file: FileInfo | null) => void;
19
+ onBlur?: () => void;
20
+ containerStyle?: ViewStyle;
21
+ buttonStyle?: ViewStyle;
22
+ buttonTextStyle?: TextStyle;
23
+ labelStyle?: TextStyle;
24
+ errorStyle?: TextStyle;
25
+ fileInfoStyle?: TextStyle;
26
+ }
27
+ export declare const FvFileSelector: React.FC<FvFileSelectorProps>;
28
+ //# sourceMappingURL=FvFileSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FvFileSelector.d.ts","sourceRoot":"","sources":["../../src/components/FvFileSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,EAMH,SAAS,EACT,SAAS,EACZ,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAa,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,MAAM,WAAW,QAAQ;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,aAAa,CAAC,EAAE,SAAS,CAAC;CAC7B;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAgJxD,CAAC"}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.FvFileSelector = void 0;
27
+ const react_1 = __importStar(require("react"));
28
+ const react_native_1 = require("react-native");
29
+ const DocumentPicker = __importStar(require("expo-document-picker"));
30
+ const validation_engine_1 = require("@fovestta2/validation-engine");
31
+ const FvFileSelector = ({ label, placeholder = "Select a file", value, schema, disabled = false, accept = ["*/*"], maxSize, onChange, onBlur, containerStyle, buttonStyle, buttonTextStyle, labelStyle, errorStyle, fileInfoStyle, }) => {
32
+ const [errorMessage, setErrorMessage] = (0, react_1.useState)(null);
33
+ (0, react_1.useEffect)(() => {
34
+ if (schema) {
35
+ const result = validation_engine_1.Validator.validate(value, schema);
36
+ setErrorMessage(result.errorKey);
37
+ }
38
+ }, [value, schema]);
39
+ const handlePickDocument = async () => {
40
+ try {
41
+ const result = await DocumentPicker.getDocumentAsync({
42
+ type: accept,
43
+ copyToCacheDirectory: true,
44
+ });
45
+ if (result.canceled) {
46
+ return;
47
+ }
48
+ const file = result.assets[0];
49
+ // Check file size if maxSize is specified
50
+ if (maxSize && file.size > maxSize) {
51
+ react_native_1.Alert.alert("File Too Large", `File size exceeds the maximum allowed size of ${formatFileSize(maxSize)}`);
52
+ return;
53
+ }
54
+ const fileInfo = {
55
+ uri: file.uri,
56
+ name: file.name,
57
+ size: file.size,
58
+ mimeType: file.mimeType || "application/octet-stream",
59
+ };
60
+ onChange(fileInfo);
61
+ onBlur?.();
62
+ }
63
+ catch (error) {
64
+ console.error("Error picking document:", error);
65
+ react_native_1.Alert.alert("Error", "Failed to pick document");
66
+ }
67
+ };
68
+ const handleRemoveFile = () => {
69
+ onChange(null);
70
+ onBlur?.();
71
+ };
72
+ const formatFileSize = (bytes) => {
73
+ if (bytes === 0)
74
+ return "0 Bytes";
75
+ const k = 1024;
76
+ const sizes = ["Bytes", "KB", "MB", "GB"];
77
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
78
+ return Math.round(bytes / Math.pow(k, i) * 100) / 100 + " " + sizes[i];
79
+ };
80
+ const getErrorMessage = () => {
81
+ if (!errorMessage)
82
+ return "";
83
+ const errorMessages = {
84
+ ERR_REQUIRED: "This field is required",
85
+ ERR_INVALID_FILE: "Invalid file",
86
+ };
87
+ return errorMessages[errorMessage] || errorMessage;
88
+ };
89
+ const isRequired = schema?.rules?.some((r) => r.name === "required" && r.params?.enabled);
90
+ return (<react_native_1.View style={[styles.container, containerStyle]}>
91
+ {label && (<react_native_1.View style={styles.labelContainer}>
92
+ <react_native_1.Text style={[styles.label, labelStyle]}>
93
+ {label}
94
+ {isRequired && <react_native_1.Text style={styles.requiredAsterisk}> *</react_native_1.Text>}
95
+ </react_native_1.Text>
96
+ </react_native_1.View>)}
97
+
98
+ <react_native_1.TouchableOpacity style={[
99
+ styles.button,
100
+ errorMessage && styles.buttonError,
101
+ disabled && styles.buttonDisabled,
102
+ buttonStyle,
103
+ ]} onPress={handlePickDocument} disabled={disabled}>
104
+ <react_native_1.Text style={[styles.buttonText, buttonTextStyle]}>
105
+ {placeholder}
106
+ </react_native_1.Text>
107
+ </react_native_1.TouchableOpacity>
108
+
109
+ {value && (<react_native_1.View style={styles.fileInfoContainer}>
110
+ <react_native_1.View style={styles.fileInfo}>
111
+ <react_native_1.Text style={[styles.fileName, fileInfoStyle]} numberOfLines={1}>
112
+ 📄 {value.name}
113
+ </react_native_1.Text>
114
+ <react_native_1.Text style={[styles.fileSize, fileInfoStyle]}>
115
+ {formatFileSize(value.size)}
116
+ </react_native_1.Text>
117
+ </react_native_1.View>
118
+ <react_native_1.TouchableOpacity style={styles.removeButton} onPress={handleRemoveFile} disabled={disabled}>
119
+ <react_native_1.Text style={styles.removeButtonText}>✕</react_native_1.Text>
120
+ </react_native_1.TouchableOpacity>
121
+ </react_native_1.View>)}
122
+
123
+ {errorMessage && (<react_native_1.Text style={[styles.errorText, errorStyle]}>
124
+ ⚠ {getErrorMessage()}
125
+ </react_native_1.Text>)}
126
+ </react_native_1.View>);
127
+ };
128
+ exports.FvFileSelector = FvFileSelector;
129
+ const styles = react_native_1.StyleSheet.create({
130
+ container: {
131
+ marginBottom: 16,
132
+ width: "100%",
133
+ },
134
+ labelContainer: {
135
+ marginBottom: 6,
136
+ },
137
+ label: {
138
+ fontSize: 14,
139
+ fontWeight: "500",
140
+ color: "#333333",
141
+ },
142
+ requiredAsterisk: {
143
+ color: "#dc3545",
144
+ fontWeight: "bold",
145
+ },
146
+ button: {
147
+ padding: 10,
148
+ borderWidth: 1,
149
+ borderColor: "#007bff",
150
+ borderRadius: 4,
151
+ backgroundColor: "#007bff",
152
+ alignItems: "center",
153
+ },
154
+ buttonError: {
155
+ borderColor: "#dc3545",
156
+ backgroundColor: "#dc3545",
157
+ },
158
+ buttonDisabled: {
159
+ backgroundColor: "#cccccc",
160
+ borderColor: "#cccccc",
161
+ opacity: 0.6,
162
+ },
163
+ buttonText: {
164
+ fontSize: 14,
165
+ fontWeight: "500",
166
+ color: "#ffffff",
167
+ },
168
+ fileInfoContainer: {
169
+ flexDirection: "row",
170
+ marginTop: 8,
171
+ padding: 10,
172
+ backgroundColor: "#f8f9fa",
173
+ borderRadius: 4,
174
+ borderWidth: 1,
175
+ borderColor: "#dee2e6",
176
+ alignItems: "center",
177
+ },
178
+ fileInfo: {
179
+ flex: 1,
180
+ },
181
+ fileName: {
182
+ fontSize: 14,
183
+ color: "#333333",
184
+ marginBottom: 4,
185
+ },
186
+ fileSize: {
187
+ fontSize: 12,
188
+ color: "#6c757d",
189
+ },
190
+ removeButton: {
191
+ padding: 4,
192
+ marginLeft: 8,
193
+ },
194
+ removeButtonText: {
195
+ fontSize: 18,
196
+ color: "#dc3545",
197
+ fontWeight: "bold",
198
+ },
199
+ errorText: {
200
+ marginTop: 4,
201
+ fontSize: 12,
202
+ color: "#dc3545",
203
+ },
204
+ });
205
+ //# sourceMappingURL=FvFileSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FvFileSelector.js","sourceRoot":"","sources":["../../src/components/FvFileSelector.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import React from "react";
2
+ import { ViewStyle, TextStyle, ImageStyle } from "react-native";
3
+ import { ValidationSchema } from "@fovestta2/validation-engine";
4
+ export interface ImageInfo {
5
+ uri: string;
6
+ width: number;
7
+ height: number;
8
+ type?: string;
9
+ fileSize?: number;
10
+ }
11
+ export interface FvImageSelectorProps {
12
+ label?: string;
13
+ placeholder?: string;
14
+ value: ImageInfo | null;
15
+ schema?: ValidationSchema;
16
+ disabled?: boolean;
17
+ allowCamera?: boolean;
18
+ allowGallery?: boolean;
19
+ maxWidth?: number;
20
+ maxHeight?: number;
21
+ quality?: number;
22
+ onChange: (image: ImageInfo | null) => void;
23
+ onBlur?: () => void;
24
+ containerStyle?: ViewStyle;
25
+ buttonStyle?: ViewStyle;
26
+ buttonTextStyle?: TextStyle;
27
+ labelStyle?: TextStyle;
28
+ errorStyle?: TextStyle;
29
+ previewStyle?: ImageStyle;
30
+ }
31
+ export declare const FvImageSelector: React.FC<FvImageSelectorProps>;
32
+ //# sourceMappingURL=FvImageSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FvImageSelector.d.ts","sourceRoot":"","sources":["../../src/components/FvImageSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,EAOH,SAAS,EACT,SAAS,EACT,UAAU,EACb,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAa,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,MAAM,WAAW,SAAS;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,YAAY,CAAC,EAAE,UAAU,CAAC;CAC7B;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAgN1D,CAAC"}
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.FvImageSelector = void 0;
27
+ const react_1 = __importStar(require("react"));
28
+ const react_native_1 = require("react-native");
29
+ const ImagePicker = __importStar(require("expo-image-picker"));
30
+ const validation_engine_1 = require("@fovestta2/validation-engine");
31
+ const FvImageSelector = ({ label, placeholder = "Select an image", value, schema, disabled = false, allowCamera = true, allowGallery = true, maxWidth = 1920, maxHeight = 1920, quality = 0.8, onChange, onBlur, containerStyle, buttonStyle, buttonTextStyle, labelStyle, errorStyle, previewStyle, }) => {
32
+ const [errorMessage, setErrorMessage] = (0, react_1.useState)(null);
33
+ (0, react_1.useEffect)(() => {
34
+ if (schema) {
35
+ const result = validation_engine_1.Validator.validate(value, schema);
36
+ setErrorMessage(result.errorKey);
37
+ }
38
+ }, [value, schema]);
39
+ const requestPermissions = async (type) => {
40
+ if (type === "camera") {
41
+ const { status } = await ImagePicker.requestCameraPermissionsAsync();
42
+ if (status !== "granted") {
43
+ react_native_1.Alert.alert("Permission Required", "Camera permission is required to take photos");
44
+ return false;
45
+ }
46
+ }
47
+ else {
48
+ const { status } = await ImagePicker.requestMediaLibraryPermissionsAsync();
49
+ if (status !== "granted") {
50
+ react_native_1.Alert.alert("Permission Required", "Gallery permission is required to select photos");
51
+ return false;
52
+ }
53
+ }
54
+ return true;
55
+ };
56
+ const handlePickFromGallery = async () => {
57
+ const hasPermission = await requestPermissions("gallery");
58
+ if (!hasPermission)
59
+ return;
60
+ try {
61
+ const result = await ImagePicker.launchImageLibraryAsync({
62
+ mediaTypes: ImagePicker.MediaTypeOptions.Images,
63
+ allowsEditing: true,
64
+ quality,
65
+ });
66
+ if (!result.canceled && result.assets[0]) {
67
+ const asset = result.assets[0];
68
+ const imageInfo = {
69
+ uri: asset.uri,
70
+ width: asset.width,
71
+ height: asset.height,
72
+ type: asset.type || undefined,
73
+ fileSize: asset.fileSize || undefined,
74
+ };
75
+ onChange(imageInfo);
76
+ onBlur?.();
77
+ }
78
+ }
79
+ catch (error) {
80
+ console.error("Error picking image:", error);
81
+ react_native_1.Alert.alert("Error", "Failed to pick image");
82
+ }
83
+ };
84
+ const handleTakePhoto = async () => {
85
+ const hasPermission = await requestPermissions("camera");
86
+ if (!hasPermission)
87
+ return;
88
+ try {
89
+ const result = await ImagePicker.launchCameraAsync({
90
+ allowsEditing: true,
91
+ quality,
92
+ });
93
+ if (!result.canceled && result.assets[0]) {
94
+ const asset = result.assets[0];
95
+ const imageInfo = {
96
+ uri: asset.uri,
97
+ width: asset.width,
98
+ height: asset.height,
99
+ type: asset.type || undefined,
100
+ fileSize: asset.fileSize || undefined,
101
+ };
102
+ onChange(imageInfo);
103
+ onBlur?.();
104
+ }
105
+ }
106
+ catch (error) {
107
+ console.error("Error taking photo:", error);
108
+ react_native_1.Alert.alert("Error", "Failed to take photo");
109
+ }
110
+ };
111
+ const handleSelectImage = () => {
112
+ if (disabled)
113
+ return;
114
+ if (allowCamera && allowGallery) {
115
+ react_native_1.Alert.alert("Select Image", "Choose an option", [
116
+ { text: "Camera", onPress: handleTakePhoto },
117
+ { text: "Gallery", onPress: handlePickFromGallery },
118
+ { text: "Cancel", style: "cancel" },
119
+ ]);
120
+ }
121
+ else if (allowCamera) {
122
+ handleTakePhoto();
123
+ }
124
+ else if (allowGallery) {
125
+ handlePickFromGallery();
126
+ }
127
+ };
128
+ const handleRemoveImage = () => {
129
+ onChange(null);
130
+ onBlur?.();
131
+ };
132
+ const getErrorMessage = () => {
133
+ if (!errorMessage)
134
+ return "";
135
+ const errorMessages = {
136
+ ERR_REQUIRED: "This field is required",
137
+ ERR_INVALID_IMAGE: "Invalid image",
138
+ };
139
+ return errorMessages[errorMessage] || errorMessage;
140
+ };
141
+ const isRequired = schema?.rules?.some((r) => r.name === "required" && r.params.enabled);
142
+ return (<react_native_1.View style={[styles.container, containerStyle]}>
143
+ {label && (<react_native_1.View style={styles.labelContainer}>
144
+ <react_native_1.Text style={[styles.label, labelStyle]}>
145
+ {label}
146
+ {isRequired && <react_native_1.Text style={styles.requiredAsterisk}> *</react_native_1.Text>}
147
+ </react_native_1.Text>
148
+ </react_native_1.View>)}
149
+
150
+ {!value ? (<react_native_1.TouchableOpacity style={[
151
+ styles.button,
152
+ errorMessage && styles.buttonError,
153
+ disabled && styles.buttonDisabled,
154
+ buttonStyle,
155
+ ]} onPress={handleSelectImage} disabled={disabled}>
156
+ <react_native_1.Text style={[styles.buttonText, buttonTextStyle]}>
157
+ 📷 {placeholder}
158
+ </react_native_1.Text>
159
+ </react_native_1.TouchableOpacity>) : (<react_native_1.View style={styles.previewContainer}>
160
+ <react_native_1.Image source={{ uri: value.uri }} style={[styles.preview, previewStyle]} resizeMode="cover"/>
161
+ <react_native_1.View style={styles.imageActions}>
162
+ <react_native_1.TouchableOpacity style={styles.changeButton} onPress={handleSelectImage} disabled={disabled}>
163
+ <react_native_1.Text style={styles.changeButtonText}>Change</react_native_1.Text>
164
+ </react_native_1.TouchableOpacity>
165
+ <react_native_1.TouchableOpacity style={styles.removeButton} onPress={handleRemoveImage} disabled={disabled}>
166
+ <react_native_1.Text style={styles.removeButtonText}>Remove</react_native_1.Text>
167
+ </react_native_1.TouchableOpacity>
168
+ </react_native_1.View>
169
+ <react_native_1.Text style={styles.imageInfo}>
170
+ {value.width} × {value.height}
171
+ {value.fileSize && ` • ${(value.fileSize / 1024).toFixed(0)} KB`}
172
+ </react_native_1.Text>
173
+ </react_native_1.View>)}
174
+
175
+ {errorMessage && (<react_native_1.Text style={[styles.errorText, errorStyle]}>
176
+ ⚠ {getErrorMessage()}
177
+ </react_native_1.Text>)}
178
+ </react_native_1.View>);
179
+ };
180
+ exports.FvImageSelector = FvImageSelector;
181
+ const styles = react_native_1.StyleSheet.create({
182
+ container: {
183
+ marginBottom: 16,
184
+ width: "100%",
185
+ },
186
+ labelContainer: {
187
+ marginBottom: 6,
188
+ },
189
+ label: {
190
+ fontSize: 14,
191
+ fontWeight: "500",
192
+ color: "#333333",
193
+ },
194
+ requiredAsterisk: {
195
+ color: "#dc3545",
196
+ fontWeight: "bold",
197
+ },
198
+ button: {
199
+ padding: 40,
200
+ borderWidth: 2,
201
+ borderStyle: "dashed",
202
+ borderColor: "#007bff",
203
+ borderRadius: 8,
204
+ backgroundColor: "#f8f9fa",
205
+ alignItems: "center",
206
+ justifyContent: "center",
207
+ },
208
+ buttonError: {
209
+ borderColor: "#dc3545",
210
+ },
211
+ buttonDisabled: {
212
+ borderColor: "#cccccc",
213
+ backgroundColor: "#f5f5f5",
214
+ opacity: 0.6,
215
+ },
216
+ buttonText: {
217
+ fontSize: 14,
218
+ fontWeight: "500",
219
+ color: "#007bff",
220
+ },
221
+ previewContainer: {
222
+ alignItems: "center",
223
+ },
224
+ preview: {
225
+ width: "100%",
226
+ height: 200,
227
+ borderRadius: 8,
228
+ backgroundColor: "#f0f0f0",
229
+ },
230
+ imageActions: {
231
+ flexDirection: "row",
232
+ marginTop: 8,
233
+ gap: 8,
234
+ },
235
+ changeButton: {
236
+ paddingVertical: 8,
237
+ paddingHorizontal: 16,
238
+ backgroundColor: "#007bff",
239
+ borderRadius: 4,
240
+ },
241
+ changeButtonText: {
242
+ color: "#ffffff",
243
+ fontSize: 14,
244
+ fontWeight: "500",
245
+ },
246
+ removeButton: {
247
+ paddingVertical: 8,
248
+ paddingHorizontal: 16,
249
+ backgroundColor: "#dc3545",
250
+ borderRadius: 4,
251
+ },
252
+ removeButtonText: {
253
+ color: "#ffffff",
254
+ fontSize: 14,
255
+ fontWeight: "500",
256
+ },
257
+ imageInfo: {
258
+ marginTop: 4,
259
+ fontSize: 12,
260
+ color: "#6c757d",
261
+ },
262
+ errorText: {
263
+ marginTop: 4,
264
+ fontSize: 12,
265
+ color: "#dc3545",
266
+ },
267
+ });
268
+ //# sourceMappingURL=FvImageSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FvImageSelector.js","sourceRoot":"","sources":["../../src/components/FvImageSelector.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import React from "react";
2
+ import { ViewStyle, TextStyle } from "react-native";
3
+ import { ValidationSchema } from "@fovestta2/validation-engine";
4
+ export interface FvMonthYearFieldProps {
5
+ label?: string;
6
+ placeholder?: string;
7
+ value: string;
8
+ schema?: ValidationSchema;
9
+ disabled?: boolean;
10
+ readonly?: boolean;
11
+ min?: string;
12
+ max?: string;
13
+ onChange: (value: string) => void;
14
+ onBlur?: () => void;
15
+ onFocus?: () => void;
16
+ containerStyle?: ViewStyle;
17
+ inputStyle?: TextStyle;
18
+ labelStyle?: TextStyle;
19
+ errorStyle?: TextStyle;
20
+ }
21
+ export declare const FvMonthYearField: React.FC<FvMonthYearFieldProps>;
22
+ //# sourceMappingURL=FvMonthYearField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FvMonthYearField.d.ts","sourceRoot":"","sources":["../../src/components/FvMonthYearField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,EAKH,SAAS,EACT,SAAS,EACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAa,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,MAAM,WAAW,qBAAqB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,UAAU,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAkF5D,CAAC"}