@harkenapp/sdk-react-native 0.0.1-alpha.1 → 0.0.1-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -7
- package/app.plugin.cjs +12 -17
- package/dist/__mocks__/async-storage.d.ts +16 -0
- package/dist/__mocks__/async-storage.d.ts.map +1 -0
- package/dist/__mocks__/async-storage.js +39 -0
- package/dist/__mocks__/async-storage.js.map +1 -0
- package/dist/__mocks__/expo-document-picker.d.ts +26 -0
- package/dist/__mocks__/expo-document-picker.d.ts.map +1 -0
- package/dist/__mocks__/expo-document-picker.js +25 -0
- package/dist/__mocks__/expo-document-picker.js.map +1 -0
- package/dist/__mocks__/expo-file-system.d.ts +42 -0
- package/dist/__mocks__/expo-file-system.d.ts.map +1 -0
- package/dist/__mocks__/expo-file-system.js +37 -0
- package/dist/__mocks__/expo-file-system.js.map +1 -0
- package/dist/__mocks__/expo-image-picker.d.ts +30 -0
- package/dist/__mocks__/expo-image-picker.d.ts.map +1 -0
- package/dist/__mocks__/expo-image-picker.js +30 -0
- package/dist/__mocks__/expo-image-picker.js.map +1 -0
- package/dist/__mocks__/expo-secure-store.d.ts +15 -0
- package/dist/__mocks__/expo-secure-store.d.ts.map +1 -0
- package/dist/__mocks__/expo-secure-store.js +30 -0
- package/dist/__mocks__/expo-secure-store.js.map +1 -0
- package/dist/__mocks__/react-native.d.ts +73 -0
- package/dist/__mocks__/react-native.d.ts.map +1 -0
- package/dist/__mocks__/react-native.js +45 -0
- package/dist/__mocks__/react-native.js.map +1 -0
- package/dist/api/client.d.ts +8 -8
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +17 -19
- package/dist/api/client.js.map +1 -1
- package/dist/api/client.test.d.ts +2 -0
- package/dist/api/client.test.d.ts.map +1 -0
- package/dist/api/client.test.js +417 -0
- package/dist/api/client.test.js.map +1 -0
- package/dist/api/errors.d.ts +3 -3
- package/dist/api/errors.d.ts.map +1 -1
- package/dist/api/errors.js +3 -3
- package/dist/api/errors.js.map +1 -1
- package/dist/api/errors.test.d.ts +2 -0
- package/dist/api/errors.test.d.ts.map +1 -0
- package/dist/api/errors.test.js +155 -0
- package/dist/api/errors.test.js.map +1 -0
- package/dist/api/index.d.ts +6 -6
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/retry.d.ts +1 -1
- package/dist/api/retry.d.ts.map +1 -1
- package/dist/api/retry.js.map +1 -1
- package/dist/api/retry.test.d.ts +2 -0
- package/dist/api/retry.test.d.ts.map +1 -0
- package/dist/api/retry.test.js +193 -0
- package/dist/api/retry.test.js.map +1 -0
- package/dist/attachments/FeedbackSheet.d.ts +36 -13
- package/dist/attachments/FeedbackSheet.d.ts.map +1 -1
- package/dist/attachments/FeedbackSheet.js +50 -30
- package/dist/attachments/FeedbackSheet.js.map +1 -1
- package/dist/attachments/index.d.ts +2 -2
- package/dist/components/AttachmentGrid.d.ts +12 -4
- package/dist/components/AttachmentGrid.d.ts.map +1 -1
- package/dist/components/AttachmentGrid.js +44 -34
- package/dist/components/AttachmentGrid.js.map +1 -1
- package/dist/components/AttachmentPicker.d.ts +3 -3
- package/dist/components/AttachmentPicker.d.ts.map +1 -1
- package/dist/components/AttachmentPicker.js +34 -36
- package/dist/components/AttachmentPicker.js.map +1 -1
- package/dist/components/AttachmentPreview.d.ts +10 -4
- package/dist/components/AttachmentPreview.d.ts.map +1 -1
- package/dist/components/AttachmentPreview.js +48 -34
- package/dist/components/AttachmentPreview.js.map +1 -1
- package/dist/components/CategorySelector.d.ts +3 -3
- package/dist/components/CategorySelector.d.ts.map +1 -1
- package/dist/components/CategorySelector.js +21 -27
- package/dist/components/CategorySelector.js.map +1 -1
- package/dist/components/FeedbackForm.d.ts +3 -3
- package/dist/components/FeedbackForm.d.ts.map +1 -1
- package/dist/components/FeedbackForm.js +7 -8
- package/dist/components/FeedbackForm.js.map +1 -1
- package/dist/components/FeedbackSheet.d.ts +34 -11
- package/dist/components/FeedbackSheet.d.ts.map +1 -1
- package/dist/components/FeedbackSheet.js +46 -28
- package/dist/components/FeedbackSheet.js.map +1 -1
- package/dist/components/ThemedButton.d.ts +16 -5
- package/dist/components/ThemedButton.d.ts.map +1 -1
- package/dist/components/ThemedButton.js +38 -29
- package/dist/components/ThemedButton.js.map +1 -1
- package/dist/components/ThemedText.d.ts +3 -3
- package/dist/components/ThemedText.d.ts.map +1 -1
- package/dist/components/ThemedText.js +1 -1
- package/dist/components/ThemedText.js.map +1 -1
- package/dist/components/ThemedTextInput.d.ts +11 -2
- package/dist/components/ThemedTextInput.d.ts.map +1 -1
- package/dist/components/ThemedTextInput.js +19 -9
- package/dist/components/ThemedTextInput.js.map +1 -1
- package/dist/components/UploadStatusOverlay.d.ts +11 -3
- package/dist/components/UploadStatusOverlay.d.ts.map +1 -1
- package/dist/components/UploadStatusOverlay.js +59 -76
- package/dist/components/UploadStatusOverlay.js.map +1 -1
- package/dist/components/index.d.ts +18 -18
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/context/HarkenContext.d.ts +20 -15
- package/dist/context/HarkenContext.d.ts.map +1 -1
- package/dist/context/HarkenContext.js +20 -17
- package/dist/context/HarkenContext.js.map +1 -1
- package/dist/context/index.d.ts +2 -2
- package/dist/domain/index.d.ts +2 -2
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js.map +1 -1
- package/dist/hooks/index.d.ts +5 -5
- package/dist/hooks/useAnonymousId.js +1 -1
- package/dist/hooks/useAnonymousId.test.d.ts +2 -0
- package/dist/hooks/useAnonymousId.test.d.ts.map +1 -0
- package/dist/hooks/useAnonymousId.test.js +154 -0
- package/dist/hooks/useAnonymousId.test.js.map +1 -0
- package/dist/hooks/useAttachmentPicker.d.ts +3 -3
- package/dist/hooks/useAttachmentPicker.js +7 -7
- package/dist/hooks/useAttachmentStatus.d.ts +1 -1
- package/dist/hooks/useAttachmentStatus.d.ts.map +1 -1
- package/dist/hooks/useAttachmentStatus.js.map +1 -1
- package/dist/hooks/useAttachmentUpload.d.ts +2 -2
- package/dist/hooks/useAttachmentUpload.d.ts.map +1 -1
- package/dist/hooks/useAttachmentUpload.js +5 -5
- package/dist/hooks/useAttachmentUpload.js.map +1 -1
- package/dist/hooks/useAttachmentUpload.test.d.ts +2 -0
- package/dist/hooks/useAttachmentUpload.test.d.ts.map +1 -0
- package/dist/hooks/useAttachmentUpload.test.js +542 -0
- package/dist/hooks/useAttachmentUpload.test.js.map +1 -0
- package/dist/hooks/useFeedback.d.ts +4 -4
- package/dist/hooks/useFeedback.d.ts.map +1 -1
- package/dist/hooks/useFeedback.js +3 -5
- package/dist/hooks/useFeedback.js.map +1 -1
- package/dist/hooks/useFeedback.test.d.ts +2 -0
- package/dist/hooks/useFeedback.test.d.ts.map +1 -0
- package/dist/hooks/useFeedback.test.js +299 -0
- package/dist/hooks/useFeedback.test.js.map +1 -0
- package/dist/hooks/useHarkenContext.d.ts +1 -1
- package/dist/hooks/useHarkenContext.js +1 -1
- package/dist/hooks/useHarkenTheme.d.ts +27 -3
- package/dist/hooks/useHarkenTheme.d.ts.map +1 -1
- package/dist/hooks/useHarkenTheme.js +26 -2
- package/dist/hooks/useHarkenTheme.js.map +1 -1
- package/dist/index.d.ts +28 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/services/index.d.ts +3 -3
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/uploadQueueService.d.ts +2 -2
- package/dist/services/uploadQueueService.d.ts.map +1 -1
- package/dist/services/uploadQueueService.js +16 -17
- package/dist/services/uploadQueueService.js.map +1 -1
- package/dist/services/uploadQueueService.test.d.ts +2 -0
- package/dist/services/uploadQueueService.test.d.ts.map +1 -0
- package/dist/services/uploadQueueService.test.js +426 -0
- package/dist/services/uploadQueueService.test.js.map +1 -0
- package/dist/services/uploadQueueStorage.d.ts +1 -1
- package/dist/services/uploadQueueStorage.d.ts.map +1 -1
- package/dist/services/uploadQueueStorage.js +4 -4
- package/dist/services/uploadQueueStorage.js.map +1 -1
- package/dist/services/uploadQueueStorage.test.d.ts +2 -0
- package/dist/services/uploadQueueStorage.test.d.ts.map +1 -0
- package/dist/services/uploadQueueStorage.test.js +200 -0
- package/dist/services/uploadQueueStorage.test.js.map +1 -0
- package/dist/storage/IdentityStore.d.ts +1 -1
- package/dist/storage/IdentityStore.d.ts.map +1 -1
- package/dist/storage/IdentityStore.js.map +1 -1
- package/dist/storage/IdentityStore.test.d.ts +2 -0
- package/dist/storage/IdentityStore.test.d.ts.map +1 -0
- package/dist/storage/IdentityStore.test.js +176 -0
- package/dist/storage/IdentityStore.test.js.map +1 -0
- package/dist/storage/SecureStoreAdapter.d.ts +1 -1
- package/dist/storage/SecureStoreAdapter.test.d.ts +2 -0
- package/dist/storage/SecureStoreAdapter.test.d.ts.map +1 -0
- package/dist/storage/SecureStoreAdapter.test.js +114 -0
- package/dist/storage/SecureStoreAdapter.test.js.map +1 -0
- package/dist/storage/defaultStorage.d.ts +1 -1
- package/dist/storage/defaultStorage.js +4 -4
- package/dist/storage/defaultStorage.test.d.ts +2 -0
- package/dist/storage/defaultStorage.test.d.ts.map +1 -0
- package/dist/storage/defaultStorage.test.js +159 -0
- package/dist/storage/defaultStorage.test.js.map +1 -0
- package/dist/storage/index.d.ts +5 -5
- package/dist/storage/types.js +1 -1
- package/dist/theme/defaults.d.ts +14 -3
- package/dist/theme/defaults.d.ts.map +1 -1
- package/dist/theme/defaults.js +58 -43
- package/dist/theme/defaults.js.map +1 -1
- package/dist/theme/index.d.ts +3 -2
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +4 -1
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/resolver.d.ts +16 -0
- package/dist/theme/resolver.d.ts.map +1 -0
- package/dist/theme/resolver.js +375 -0
- package/dist/theme/resolver.js.map +1 -0
- package/dist/theme/resolver.test.d.ts +2 -0
- package/dist/theme/resolver.test.d.ts.map +1 -0
- package/dist/theme/resolver.test.js +344 -0
- package/dist/theme/resolver.test.js.map +1 -0
- package/dist/theme/types.d.ts +378 -5
- package/dist/theme/types.d.ts.map +1 -1
- package/dist/types/config.d.ts +4 -4
- package/dist/types/index.d.ts +2 -2
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/uuid.d.ts.map +1 -1
- package/dist/utils/uuid.js +4 -5
- package/dist/utils/uuid.js.map +1 -1
- package/dist/utils/uuid.test.d.ts +2 -0
- package/dist/utils/uuid.test.d.ts.map +1 -0
- package/dist/utils/uuid.test.js +78 -0
- package/dist/utils/uuid.test.js.map +1 -0
- package/package.json +21 -13
- package/src/@types/expo-file-system-legacy.d.ts +3 -3
- package/src/__mocks__/async-storage.ts +46 -0
- package/src/__mocks__/expo-document-picker.ts +41 -0
- package/src/__mocks__/expo-file-system.ts +62 -0
- package/src/__mocks__/expo-image-picker.ts +48 -0
- package/src/__mocks__/expo-secure-store.ts +29 -0
- package/src/__mocks__/react-native.ts +46 -0
- package/src/api/client.test.ts +515 -0
- package/src/api/client.ts +45 -64
- package/src/api/errors.test.ts +193 -0
- package/src/api/errors.ts +7 -11
- package/src/api/index.ts +6 -10
- package/src/api/retry.test.ts +251 -0
- package/src/api/retry.ts +3 -6
- package/src/attachments/FeedbackSheet.tsx +100 -80
- package/src/attachments/index.ts +2 -2
- package/src/components/AttachmentGrid.tsx +54 -45
- package/src/components/AttachmentPicker.tsx +43 -54
- package/src/components/AttachmentPreview.tsx +51 -47
- package/src/components/CategorySelector.tsx +29 -35
- package/src/components/FeedbackForm.tsx +23 -35
- package/src/components/FeedbackSheet.tsx +89 -68
- package/src/components/ThemedButton.tsx +49 -47
- package/src/components/ThemedText.tsx +7 -10
- package/src/components/ThemedTextInput.tsx +23 -13
- package/src/components/UploadStatusOverlay.tsx +66 -89
- package/src/components/index.ts +18 -21
- package/src/context/HarkenContext.tsx +29 -28
- package/src/context/index.ts +2 -2
- package/src/domain/index.ts +2 -5
- package/src/domain/upload-queue.ts +5 -5
- package/src/hooks/index.ts +5 -5
- package/src/hooks/useAnonymousId.test.ts +189 -0
- package/src/hooks/useAnonymousId.ts +3 -3
- package/src/hooks/useAttachmentPicker.ts +12 -12
- package/src/hooks/useAttachmentStatus.ts +12 -16
- package/src/hooks/useAttachmentUpload.test.ts +632 -0
- package/src/hooks/useAttachmentUpload.ts +45 -54
- package/src/hooks/useFeedback.test.ts +376 -0
- package/src/hooks/useFeedback.ts +12 -14
- package/src/hooks/useHarkenContext.ts +4 -4
- package/src/hooks/useHarkenTheme.ts +30 -6
- package/src/index.ts +28 -52
- package/src/services/index.ts +3 -9
- package/src/services/uploadQueueService.test.ts +489 -0
- package/src/services/uploadQueueService.ts +40 -56
- package/src/services/uploadQueueStorage.test.ts +243 -0
- package/src/services/uploadQueueStorage.ts +7 -9
- package/src/storage/IdentityStore.test.ts +173 -0
- package/src/storage/IdentityStore.ts +4 -5
- package/src/storage/SecureStoreAdapter.test.ts +147 -0
- package/src/storage/SecureStoreAdapter.ts +1 -1
- package/src/storage/defaultStorage.test.ts +159 -0
- package/src/storage/defaultStorage.ts +6 -6
- package/src/storage/index.ts +5 -5
- package/src/storage/types.ts +1 -1
- package/src/theme/defaults.ts +75 -46
- package/src/theme/index.ts +15 -2
- package/src/theme/resolver.test.ts +411 -0
- package/src/theme/resolver.ts +446 -0
- package/src/theme/types.ts +453 -15
- package/src/types/config.ts +4 -4
- package/src/types/index.ts +2 -2
- package/src/utils/index.ts +1 -1
- package/src/utils/uuid.test.ts +85 -0
- package/src/utils/uuid.ts +4 -7
|
@@ -52,13 +52,26 @@ const AttachmentPicker_1 = require("../components/AttachmentPicker");
|
|
|
52
52
|
*
|
|
53
53
|
* For the version without attachment dependencies, import from the main entry point.
|
|
54
54
|
*
|
|
55
|
+
* Uses the following theme tokens:
|
|
56
|
+
* - `colors.formBackground` for background
|
|
57
|
+
* - `spacing.formPadding` for padding
|
|
58
|
+
* - `spacing.sectionGap` for section gaps
|
|
59
|
+
* - `radii.form` for border radius
|
|
60
|
+
*
|
|
55
61
|
* @example
|
|
56
62
|
* ```tsx
|
|
57
|
-
* import { FeedbackSheet } from '@harkenapp/sdk-react-native
|
|
63
|
+
* import { FeedbackSheet } from '@harkenapp/sdk-react-native';
|
|
58
64
|
*
|
|
59
65
|
* // Minimal usage with attachments
|
|
60
66
|
* <FeedbackSheet onSuccess={() => navigation.goBack()} />
|
|
61
67
|
*
|
|
68
|
+
* // For bottom sheet modal embedding
|
|
69
|
+
* <FeedbackSheet
|
|
70
|
+
* layout="auto"
|
|
71
|
+
* title=""
|
|
72
|
+
* onSuccess={() => closeModal()}
|
|
73
|
+
* />
|
|
74
|
+
*
|
|
62
75
|
* // With customization
|
|
63
76
|
* <FeedbackSheet
|
|
64
77
|
* title="Report a Bug"
|
|
@@ -79,19 +92,19 @@ const AttachmentPicker_1 = require("../components/AttachmentPicker");
|
|
|
79
92
|
* />
|
|
80
93
|
* ```
|
|
81
94
|
*/
|
|
82
|
-
function FeedbackSheet({ onSuccess, onError, onCancel, title =
|
|
95
|
+
function FeedbackSheet({ onSuccess, onError, onCancel, title = "Send Feedback", placeholder = "What would you like to share?", submitLabel = "Submit", cancelLabel = "Cancel", categories = CategorySelector_1.DEFAULT_CATEGORIES, requireCategory = false, minMessageLength = 1, maxMessageLength = 5000, enableAttachments = true, maxAttachments = 5, attachmentSources, successMessage = "Thank you for your feedback!", showSuccessAlert = true, clearOnSuccess = true, layout = "flex", containerStyle, contentStyle, formStyle, }) {
|
|
83
96
|
const theme = (0, hooks_1.useHarkenTheme)();
|
|
97
|
+
const { form } = theme.components;
|
|
84
98
|
const { submitFeedback, isSubmitting, error, clearError, isInitializing } = (0, hooks_1.useFeedback)();
|
|
85
99
|
const { attachments, removeAttachment, retryAttachment, getAttachmentIds, hasActiveUploads, openPicker, pickerProps, enabledSourceCount, } = (0, useAttachmentPicker_1.useAttachmentPicker)(attachmentSources);
|
|
86
|
-
const [message, setMessage] = (0, react_1.useState)(
|
|
100
|
+
const [message, setMessage] = (0, react_1.useState)("");
|
|
87
101
|
const [category, setCategory] = (0, react_1.useState)(null);
|
|
88
102
|
const trimmedMessage = message.trim();
|
|
89
|
-
const isMessageValid = trimmedMessage.length >= minMessageLength &&
|
|
90
|
-
trimmedMessage.length <= maxMessageLength;
|
|
103
|
+
const isMessageValid = trimmedMessage.length >= minMessageLength && trimmedMessage.length <= maxMessageLength;
|
|
91
104
|
const isCategoryValid = !requireCategory || category !== null;
|
|
92
105
|
const canSubmit = isMessageValid && isCategoryValid && !isSubmitting && !isInitializing;
|
|
93
106
|
const resetForm = (0, react_1.useCallback)(() => {
|
|
94
|
-
setMessage(
|
|
107
|
+
setMessage("");
|
|
95
108
|
setCategory(null);
|
|
96
109
|
clearError();
|
|
97
110
|
// Note: We don't clear attachments since they may still be uploading
|
|
@@ -104,16 +117,16 @@ function FeedbackSheet({ onSuccess, onError, onCancel, title = 'Send Feedback',
|
|
|
104
117
|
try {
|
|
105
118
|
const result = await submitFeedback({
|
|
106
119
|
message: trimmedMessage,
|
|
107
|
-
category: category ??
|
|
120
|
+
category: category ?? "other",
|
|
108
121
|
attachments: enableAttachments ? getAttachmentIds() : undefined,
|
|
109
122
|
});
|
|
110
123
|
const uploadNote = enableAttachments && hasActiveUploads
|
|
111
|
-
?
|
|
112
|
-
:
|
|
124
|
+
? "\n\nAttachments are still uploading in the background."
|
|
125
|
+
: "";
|
|
113
126
|
if (showSuccessAlert && successMessage) {
|
|
114
|
-
react_native_1.Alert.alert(
|
|
127
|
+
react_native_1.Alert.alert("Success", `${successMessage}${uploadNote}`, [
|
|
115
128
|
{
|
|
116
|
-
text:
|
|
129
|
+
text: "OK",
|
|
117
130
|
onPress: () => {
|
|
118
131
|
if (clearOnSuccess) {
|
|
119
132
|
resetForm();
|
|
@@ -131,8 +144,8 @@ function FeedbackSheet({ onSuccess, onError, onCancel, title = 'Send Feedback',
|
|
|
131
144
|
}
|
|
132
145
|
}
|
|
133
146
|
catch (e) {
|
|
134
|
-
const errorMessage = e instanceof Error ? e.message :
|
|
135
|
-
react_native_1.Alert.alert(
|
|
147
|
+
const errorMessage = e instanceof Error ? e.message : "Failed to submit feedback. Please try again.";
|
|
148
|
+
react_native_1.Alert.alert("Submission Failed", errorMessage);
|
|
136
149
|
onError?.(e instanceof Error ? e : new Error(errorMessage));
|
|
137
150
|
}
|
|
138
151
|
}, [
|
|
@@ -156,42 +169,49 @@ function FeedbackSheet({ onSuccess, onError, onCancel, title = 'Send Feedback',
|
|
|
156
169
|
onCancel?.();
|
|
157
170
|
}, [resetForm, onCancel]);
|
|
158
171
|
const baseContainerStyle = {
|
|
159
|
-
flex: 1,
|
|
160
|
-
backgroundColor:
|
|
172
|
+
...(layout === "flex" ? { flex: 1 } : {}),
|
|
173
|
+
backgroundColor: form.background,
|
|
174
|
+
borderRadius: form.radius,
|
|
161
175
|
};
|
|
162
|
-
const
|
|
163
|
-
flexGrow: 1,
|
|
164
|
-
padding:
|
|
176
|
+
const scrollContentStyle = {
|
|
177
|
+
...(layout === "flex" ? { flexGrow: 1 } : {}),
|
|
178
|
+
padding: form.padding,
|
|
165
179
|
};
|
|
166
180
|
const sectionStyle = {
|
|
167
|
-
marginBottom:
|
|
181
|
+
marginBottom: form.sectionGap,
|
|
168
182
|
};
|
|
183
|
+
// Support deprecated formStyle prop
|
|
184
|
+
const effectiveContentStyle = contentStyle ?? formStyle;
|
|
169
185
|
const buttonRowStyle = {
|
|
170
|
-
flexDirection:
|
|
186
|
+
flexDirection: "row",
|
|
171
187
|
gap: theme.spacing.sm,
|
|
172
188
|
marginTop: theme.spacing.md,
|
|
173
189
|
};
|
|
174
190
|
const characterCount = trimmedMessage.length;
|
|
175
191
|
const showCharacterWarning = characterCount > maxMessageLength * 0.9;
|
|
176
192
|
if (isInitializing) {
|
|
177
|
-
return (<react_native_1.View style={[
|
|
193
|
+
return (<react_native_1.View style={[
|
|
194
|
+
baseContainerStyle,
|
|
195
|
+
containerStyle,
|
|
196
|
+
{ justifyContent: "center", alignItems: "center" },
|
|
197
|
+
]}>
|
|
178
198
|
<ThemedText_1.ThemedText variant="body" secondary>
|
|
179
199
|
Initializing...
|
|
180
200
|
</ThemedText_1.ThemedText>
|
|
181
201
|
</react_native_1.View>);
|
|
182
202
|
}
|
|
183
203
|
return (<>
|
|
184
|
-
<react_native_1.KeyboardAvoidingView behavior={react_native_1.Platform.OS ===
|
|
185
|
-
<react_native_1.ScrollView contentContainerStyle={[
|
|
186
|
-
{/* Title */}
|
|
187
|
-
<react_native_1.View style={sectionStyle}>
|
|
188
|
-
|
|
189
|
-
|
|
204
|
+
<react_native_1.KeyboardAvoidingView behavior={react_native_1.Platform.OS === "ios" ? "padding" : "height"} style={[baseContainerStyle, containerStyle]}>
|
|
205
|
+
<react_native_1.ScrollView contentContainerStyle={[scrollContentStyle, effectiveContentStyle]} keyboardShouldPersistTaps="handled">
|
|
206
|
+
{/* Title - only render if provided */}
|
|
207
|
+
{title ? (<react_native_1.View style={sectionStyle}>
|
|
208
|
+
<ThemedText_1.ThemedText variant="title">{title}</ThemedText_1.ThemedText>
|
|
209
|
+
</react_native_1.View>) : null}
|
|
190
210
|
|
|
191
211
|
{/* Category selector */}
|
|
192
212
|
<react_native_1.View style={sectionStyle}>
|
|
193
213
|
<ThemedText_1.ThemedText variant="label" secondary style={{ marginBottom: theme.spacing.sm }}>
|
|
194
|
-
Category{requireCategory ?
|
|
214
|
+
Category{requireCategory ? "" : " (optional)"}
|
|
195
215
|
</ThemedText_1.ThemedText>
|
|
196
216
|
<CategorySelector_1.CategorySelector value={category} onChange={setCategory} categories={categories} disabled={isSubmitting}/>
|
|
197
217
|
</react_native_1.View>
|
|
@@ -204,7 +224,7 @@ function FeedbackSheet({ onSuccess, onError, onCancel, title = 'Send Feedback',
|
|
|
204
224
|
<ThemedTextInput_1.ThemedTextInput value={message} onChangeText={setMessage} placeholder={placeholder} multiline numberOfLines={4} textAlignVertical="top" editable={!isSubmitting} style={{ minHeight: 120 }} maxLength={maxMessageLength + 100}/>
|
|
205
225
|
{showCharacterWarning && (<ThemedText_1.ThemedText variant="caption" color={characterCount > maxMessageLength
|
|
206
226
|
? theme.colors.error
|
|
207
|
-
: theme.colors.textSecondary} style={{ marginTop: theme.spacing.xs, textAlign:
|
|
227
|
+
: theme.colors.textSecondary} style={{ marginTop: theme.spacing.xs, textAlign: "right" }}>
|
|
208
228
|
{characterCount}/{maxMessageLength}
|
|
209
229
|
</ThemedText_1.ThemedText>)}
|
|
210
230
|
</react_native_1.View>
|
|
@@ -236,7 +256,7 @@ function FeedbackSheet({ onSuccess, onError, onCancel, title = 'Send Feedback',
|
|
|
236
256
|
|
|
237
257
|
{/* Upload status indicator */}
|
|
238
258
|
{enableAttachments && hasActiveUploads && (<react_native_1.View style={{ marginTop: theme.spacing.sm }}>
|
|
239
|
-
<ThemedText_1.ThemedText variant="caption" color={theme.colors.primary} style={{ textAlign:
|
|
259
|
+
<ThemedText_1.ThemedText variant="caption" color={theme.colors.primary} style={{ textAlign: "center" }}>
|
|
240
260
|
Uploads in progress - you can still submit now
|
|
241
261
|
</ThemedText_1.ThemedText>
|
|
242
262
|
</react_native_1.View>)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackSheet.js","sourceRoot":"","sources":["../../src/attachments/FeedbackSheet.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"FeedbackSheet.js","sourceRoot":"","sources":["../../src/attachments/FeedbackSheet.tsx"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,6 @@
|
|
|
15
15
|
*
|
|
16
16
|
* @packageDocumentation
|
|
17
17
|
*/
|
|
18
|
-
export { useAttachmentUpload, useAttachmentPicker, useAttachmentStatus, AttachmentPicker, UploadStatusOverlay, AttachmentPreview, AttachmentGrid, FeedbackSheet, UploadQueueService, uploadQueueService, UploadQueueStorage, UploadPhase, DEFAULT_UPLOAD_RETRY_CONFIG, } from
|
|
19
|
-
export type { AttachmentState, UseAttachmentUploadResult, AttachmentSourceConfig, UseAttachmentPickerResult, AttachmentStatus, AttachmentPickerProps, AttachmentSource, PickerOptionConfig, UploadStatusOverlayProps, UploadStatusLabels, AttachmentPreviewProps, AttachmentGridProps, FeedbackSheetProps, UploadQueueServiceConfig, EnqueueParams, QueueItem, QueueStatus, UploadProgress, UploadRetryConfig, } from
|
|
18
|
+
export { useAttachmentUpload, useAttachmentPicker, useAttachmentStatus, AttachmentPicker, UploadStatusOverlay, AttachmentPreview, AttachmentGrid, FeedbackSheet, UploadQueueService, uploadQueueService, UploadQueueStorage, UploadPhase, DEFAULT_UPLOAD_RETRY_CONFIG, } from "../index";
|
|
19
|
+
export type { AttachmentState, UseAttachmentUploadResult, AttachmentSourceConfig, UseAttachmentPickerResult, AttachmentStatus, AttachmentPickerProps, AttachmentSource, PickerOptionConfig, UploadStatusOverlayProps, UploadStatusLabels, AttachmentPreviewProps, AttachmentGridProps, FeedbackSheetProps, UploadQueueServiceConfig, EnqueueParams, QueueItem, QueueStatus, UploadProgress, UploadRetryConfig, } from "../index";
|
|
20
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import React from
|
|
2
|
-
import type { ViewStyle, StyleProp, ImageStyle } from
|
|
3
|
-
import type { AttachmentState } from
|
|
4
|
-
import type { UploadStatusLabels } from
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ViewStyle, StyleProp, ImageStyle } from "react-native";
|
|
3
|
+
import type { AttachmentState } from "../hooks/useAttachmentUpload";
|
|
4
|
+
import type { UploadStatusLabels } from "./UploadStatusOverlay";
|
|
5
5
|
export interface AttachmentGridProps {
|
|
6
6
|
/** List of attachments to display */
|
|
7
7
|
attachments: AttachmentState[];
|
|
@@ -51,6 +51,14 @@ export interface AttachmentGridProps {
|
|
|
51
51
|
*
|
|
52
52
|
* Shows attachment previews with upload status and an optional add button.
|
|
53
53
|
*
|
|
54
|
+
* Uses the following theme tokens:
|
|
55
|
+
* - `colors.addButton*` for add button colors
|
|
56
|
+
* - `spacing.tileGap` for gap between tiles
|
|
57
|
+
* - `radii.tile` for tile border radius
|
|
58
|
+
* - `sizing.tileSize` for default tile size
|
|
59
|
+
* - `sizing.addButtonIconSize` for add icon size
|
|
60
|
+
* - `opacity.disabled` for disabled state
|
|
61
|
+
*
|
|
54
62
|
* @example
|
|
55
63
|
* ```tsx
|
|
56
64
|
* // Basic usage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttachmentGrid.d.ts","sourceRoot":"","sources":["../../src/components/AttachmentGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAIrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAClC,qCAAqC;IACrC,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,4CAA4C;IAC5C,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,uCAAuC;IACvC,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IACzC,+BAA+B;IAC/B,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,KAAK,KAAK,CAAC,SAAS,CAAC;IAC9E,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CACX,UAAU,EAAE,eAAe,EAC3B,OAAO,CAAC,EAAE,MAAM,IAAI,EACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,KAClB,KAAK,CAAC,SAAS,CAAC;IACrB,oCAAoC;IACpC,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,4BAA4B;IAC5B,cAAc,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACvC,8CAA8C;IAC9C,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,8DAA8D;IAC9D,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IAC7D,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;CAC9E;AAED
|
|
1
|
+
{"version":3,"file":"AttachmentGrid.d.ts","sourceRoot":"","sources":["../../src/components/AttachmentGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAIrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAClC,qCAAqC;IACrC,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,4CAA4C;IAC5C,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,uCAAuC;IACvC,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IACzC,+BAA+B;IAC/B,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,KAAK,KAAK,CAAC,SAAS,CAAC;IAC9E,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CACX,UAAU,EAAE,eAAe,EAC3B,OAAO,CAAC,EAAE,MAAM,IAAI,EACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,KAClB,KAAK,CAAC,SAAS,CAAC;IACrB,oCAAoC;IACpC,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,4BAA4B;IAC5B,cAAc,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACvC,8CAA8C;IAC9C,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,8DAA8D;IAC9D,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IAC7D,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;CAC9E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,wBAAgB,cAAc,CAAC,EAC7B,WAAW,EACX,OAAO,EACP,QAAQ,EACR,KAAK,EACL,cAAmB,EACnB,QAAQ,EACR,GAAG,EACH,aAAoB,EACpB,QAAgB,EAChB,KAAK,EACL,cAAsB,EACtB,aAAmB,EACnB,cAAc,EACd,SAA4B,EAC5B,eAAe,EACf,UAAU,EACV,SAAS,EACT,cAAc,EACd,YAAY,EACZ,WAAW,EACX,iBAAiB,GAClB,EAAE,mBAAmB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA0GzC"}
|
|
@@ -14,6 +14,14 @@ const AttachmentPreview_1 = require("./AttachmentPreview");
|
|
|
14
14
|
*
|
|
15
15
|
* Shows attachment previews with upload status and an optional add button.
|
|
16
16
|
*
|
|
17
|
+
* Uses the following theme tokens:
|
|
18
|
+
* - `colors.addButton*` for add button colors
|
|
19
|
+
* - `spacing.tileGap` for gap between tiles
|
|
20
|
+
* - `radii.tile` for tile border radius
|
|
21
|
+
* - `sizing.tileSize` for default tile size
|
|
22
|
+
* - `sizing.addButtonIconSize` for add icon size
|
|
23
|
+
* - `opacity.disabled` for disabled state
|
|
24
|
+
*
|
|
17
25
|
* @example
|
|
18
26
|
* ```tsx
|
|
19
27
|
* // Basic usage
|
|
@@ -53,16 +61,14 @@ const AttachmentPreview_1 = require("./AttachmentPreview");
|
|
|
53
61
|
* />
|
|
54
62
|
* ```
|
|
55
63
|
*/
|
|
56
|
-
function AttachmentGrid({ attachments, onRetry, onRemove, onAdd, maxAttachments = 10, tileSize
|
|
64
|
+
function AttachmentGrid({ attachments, onRetry, onRemove, onAdd, maxAttachments = 10, tileSize, gap, showAddButton = true, disabled = false, style, addButtonLabel = "Add", addButtonIcon = "+", addButtonStyle, emptyText = "No attachments", renderAddButton, renderTile, tileStyle, tileImageStyle, statusLabels, getFileIcon, renderPlaceholder, }) {
|
|
57
65
|
const theme = (0, hooks_1.useHarkenTheme)();
|
|
58
|
-
const
|
|
66
|
+
const { tile, addButton } = theme.components;
|
|
67
|
+
const effectiveTileSize = tileSize ?? tile.size;
|
|
68
|
+
const effectiveGap = gap ?? tile.gap;
|
|
59
69
|
const canAddMore = attachments.length < maxAttachments;
|
|
60
70
|
const shouldShowAddButton = showAddButton && canAddMore && onAdd;
|
|
61
|
-
return (<react_native_1.View style={[
|
|
62
|
-
styles.container,
|
|
63
|
-
{ gap: effectiveGap },
|
|
64
|
-
style,
|
|
65
|
-
]}>
|
|
71
|
+
return (<react_native_1.View style={[styles.container, { gap: effectiveGap }, style]}>
|
|
66
72
|
{attachments.map((attachment) => {
|
|
67
73
|
const handleRetry = onRetry ? () => onRetry(attachment.attachmentId) : undefined;
|
|
68
74
|
const handleRemove = onRemove ? () => onRemove(attachment.attachmentId) : undefined;
|
|
@@ -72,29 +78,35 @@ function AttachmentGrid({ attachments, onRetry, onRemove, onAdd, maxAttachments
|
|
|
72
78
|
{renderTile(attachment, handleRetry, handleRemove)}
|
|
73
79
|
</react_1.default.Fragment>);
|
|
74
80
|
}
|
|
75
|
-
return (<AttachmentPreview_1.AttachmentPreview key={attachment.attachmentId} uri={attachment.localUri} mimeType={attachment.mimeType} fileName={attachment.fileName} phase={attachment.phase} progress={attachment.progress} error={attachment.error} onRetry={handleRetry} onRemove={handleRemove} size={
|
|
81
|
+
return (<AttachmentPreview_1.AttachmentPreview key={attachment.attachmentId} uri={attachment.localUri} mimeType={attachment.mimeType} fileName={attachment.fileName} phase={attachment.phase} progress={attachment.progress} error={attachment.error} onRetry={handleRetry} onRemove={handleRemove} size={effectiveTileSize} style={tileStyle} imageStyle={tileImageStyle} statusLabels={statusLabels} getFileIcon={getFileIcon} renderPlaceholder={renderPlaceholder}/>);
|
|
76
82
|
})}
|
|
77
83
|
|
|
78
|
-
{shouldShowAddButton &&
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
?
|
|
86
|
-
:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
84
|
+
{shouldShowAddButton &&
|
|
85
|
+
(renderAddButton ? (renderAddButton(onAdd, disabled)) : (<react_native_1.Pressable onPress={onAdd} disabled={disabled} style={({ pressed }) => [
|
|
86
|
+
styles.addButton,
|
|
87
|
+
{
|
|
88
|
+
width: effectiveTileSize,
|
|
89
|
+
height: effectiveTileSize,
|
|
90
|
+
borderRadius: tile.radius,
|
|
91
|
+
backgroundColor: pressed ? addButton.backgroundPressed : addButton.background,
|
|
92
|
+
borderWidth: 2,
|
|
93
|
+
borderColor: addButton.border,
|
|
94
|
+
borderStyle: "dashed",
|
|
95
|
+
opacity: disabled ? theme.opacity.disabled : 1,
|
|
96
|
+
},
|
|
97
|
+
addButtonStyle,
|
|
98
|
+
]}>
|
|
99
|
+
{typeof addButtonIcon === "string" ? (<ThemedText_1.ThemedText style={[
|
|
100
|
+
styles.addIcon,
|
|
101
|
+
{
|
|
102
|
+
color: addButton.icon,
|
|
103
|
+
fontSize: addButton.iconSize,
|
|
104
|
+
lineHeight: addButton.iconSize * 1.15, // Scale lineHeight with iconSize
|
|
105
|
+
},
|
|
106
|
+
]}>
|
|
95
107
|
{addButtonIcon}
|
|
96
108
|
</ThemedText_1.ThemedText>) : (addButtonIcon)}
|
|
97
|
-
<ThemedText_1.ThemedText variant="caption"
|
|
109
|
+
<ThemedText_1.ThemedText variant="caption" color={addButton.text}>
|
|
98
110
|
{addButtonLabel}
|
|
99
111
|
</ThemedText_1.ThemedText>
|
|
100
112
|
</react_native_1.Pressable>))}
|
|
@@ -113,20 +125,18 @@ function AttachmentGrid({ attachments, onRetry, onRemove, onAdd, maxAttachments
|
|
|
113
125
|
}
|
|
114
126
|
const styles = react_native_1.StyleSheet.create({
|
|
115
127
|
container: {
|
|
116
|
-
flexDirection:
|
|
117
|
-
flexWrap:
|
|
128
|
+
flexDirection: "row",
|
|
129
|
+
flexWrap: "wrap",
|
|
118
130
|
},
|
|
119
131
|
addButton: {
|
|
120
|
-
alignItems:
|
|
121
|
-
justifyContent:
|
|
132
|
+
alignItems: "center",
|
|
133
|
+
justifyContent: "center",
|
|
122
134
|
},
|
|
123
135
|
addIcon: {
|
|
124
|
-
|
|
125
|
-
fontWeight: '300',
|
|
126
|
-
lineHeight: 32,
|
|
136
|
+
fontWeight: "300",
|
|
127
137
|
},
|
|
128
138
|
emptyState: {
|
|
129
|
-
alignItems:
|
|
139
|
+
alignItems: "center",
|
|
130
140
|
},
|
|
131
141
|
});
|
|
132
142
|
//# sourceMappingURL=AttachmentGrid.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttachmentGrid.js","sourceRoot":"","sources":["../../src/components/AttachmentGrid.tsx"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"AttachmentGrid.js","sourceRoot":"","sources":["../../src/components/AttachmentGrid.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import React from
|
|
2
|
-
import type { ViewStyle, StyleProp } from
|
|
3
|
-
export type AttachmentSource =
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ViewStyle, StyleProp } from "react-native";
|
|
3
|
+
export type AttachmentSource = "camera" | "library" | "document";
|
|
4
4
|
/**
|
|
5
5
|
* Configuration for a single picker option.
|
|
6
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttachmentPicker.d.ts","sourceRoot":"","sources":["../../src/components/AttachmentPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAUjD,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAKzD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,gCAAgC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,uCAAuC;IACvC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,8CAA8C;IAC9C,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,gDAAgD;IAChD,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,KAAK,CAAC,SAAS,CAAC;IAC3D,0CAA0C;IAC1C,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,kBAAkB,CAAC;QAC5B,OAAO,CAAC,EAAE,kBAAkB,CAAC;QAC7B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;KAC/B,CAAC;IACF,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,UAAU,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,uCAAuC;IACvC,WAAW,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACpC;AAYD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,KAAwB,EACxB,UAAU,EACV,OAAO,EAAE,eAAe,EACxB,WAAsB,EACtB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,WAAW,GACZ,EAAE,qBAAqB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"AttachmentPicker.d.ts","sourceRoot":"","sources":["../../src/components/AttachmentPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAUjD,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAKzD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,gCAAgC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,uCAAuC;IACvC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,8CAA8C;IAC9C,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,gDAAgD;IAChD,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,KAAK,CAAC,SAAS,CAAC;IAC3D,0CAA0C;IAC1C,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,kBAAkB,CAAC;QAC5B,OAAO,CAAC,EAAE,kBAAkB,CAAC;QAC7B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;KAC/B,CAAC;IACF,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,UAAU,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,uCAAuC;IACvC,WAAW,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACpC;AAYD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,KAAwB,EACxB,UAAU,EACV,OAAO,EAAE,eAAe,EACxB,WAAsB,EACtB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,WAAW,GACZ,EAAE,qBAAqB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAmLlD"}
|
|
@@ -82,40 +82,41 @@ const ThemedText_1 = require("./ThemedText");
|
|
|
82
82
|
* />
|
|
83
83
|
* ```
|
|
84
84
|
*/
|
|
85
|
-
function AttachmentPicker({ visible, onClose, onTakePhoto, onPickFromLibrary, onPickDocument, title =
|
|
85
|
+
function AttachmentPicker({ visible, onClose, onTakePhoto, onPickFromLibrary, onPickDocument, title = "Add Attachment", renderIcon, options: optionOverrides, cancelLabel = "Cancel", overlayColor, sheetRadius, sheetStyle, optionStyle, }) {
|
|
86
86
|
const theme = (0, hooks_1.useHarkenTheme)();
|
|
87
|
-
const
|
|
87
|
+
const { picker } = theme.components;
|
|
88
|
+
const screenHeight = react_native_1.Dimensions.get("window").height;
|
|
88
89
|
// Prevent double-triggering ActionSheetIOS if callbacks change
|
|
89
90
|
const isShowingRef = (0, react_1.useRef)(false);
|
|
90
91
|
// Build options with defaults and overrides
|
|
91
92
|
const options = [
|
|
92
93
|
{
|
|
93
|
-
key:
|
|
94
|
-
label: optionOverrides?.camera?.label ??
|
|
95
|
-
description: optionOverrides?.camera?.description ??
|
|
94
|
+
key: "camera",
|
|
95
|
+
label: optionOverrides?.camera?.label ?? "Camera",
|
|
96
|
+
description: optionOverrides?.camera?.description ?? "Take a new photo",
|
|
96
97
|
color: optionOverrides?.camera?.color ?? theme.colors.accent1,
|
|
97
98
|
icon: optionOverrides?.camera?.icon ??
|
|
98
|
-
(renderIcon ? renderIcon(
|
|
99
|
+
(renderIcon ? renderIcon("camera") : <DefaultIcon emoji="📷"/>),
|
|
99
100
|
action: onTakePhoto,
|
|
100
101
|
hidden: optionOverrides?.camera?.hidden ?? false,
|
|
101
102
|
},
|
|
102
103
|
{
|
|
103
|
-
key:
|
|
104
|
-
label: optionOverrides?.library?.label ??
|
|
105
|
-
description: optionOverrides?.library?.description ??
|
|
104
|
+
key: "library",
|
|
105
|
+
label: optionOverrides?.library?.label ?? "Photo Library",
|
|
106
|
+
description: optionOverrides?.library?.description ?? "Choose from existing photos",
|
|
106
107
|
color: optionOverrides?.library?.color ?? theme.colors.accent2,
|
|
107
108
|
icon: optionOverrides?.library?.icon ??
|
|
108
|
-
(renderIcon ? renderIcon(
|
|
109
|
+
(renderIcon ? renderIcon("library") : <DefaultIcon emoji="🖼️"/>),
|
|
109
110
|
action: onPickFromLibrary,
|
|
110
111
|
hidden: optionOverrides?.library?.hidden ?? false,
|
|
111
112
|
},
|
|
112
113
|
{
|
|
113
|
-
key:
|
|
114
|
-
label: optionOverrides?.document?.label ??
|
|
115
|
-
description: optionOverrides?.document?.description ??
|
|
114
|
+
key: "document",
|
|
115
|
+
label: optionOverrides?.document?.label ?? "Files",
|
|
116
|
+
description: optionOverrides?.document?.description ?? "Browse documents and files",
|
|
116
117
|
color: optionOverrides?.document?.color ?? theme.colors.accent3,
|
|
117
118
|
icon: optionOverrides?.document?.icon ??
|
|
118
|
-
(renderIcon ? renderIcon(
|
|
119
|
+
(renderIcon ? renderIcon("document") : <DefaultIcon emoji="📄"/>),
|
|
119
120
|
action: onPickDocument,
|
|
120
121
|
hidden: optionOverrides?.document?.hidden ?? false,
|
|
121
122
|
},
|
|
@@ -132,7 +133,7 @@ function AttachmentPicker({ visible, onClose, onTakePhoto, onPickFromLibrary, on
|
|
|
132
133
|
isShowingRef.current = false;
|
|
133
134
|
return;
|
|
134
135
|
}
|
|
135
|
-
if (visible && react_native_1.Platform.OS ===
|
|
136
|
+
if (visible && react_native_1.Platform.OS === "ios" && !isShowingRef.current) {
|
|
136
137
|
isShowingRef.current = true;
|
|
137
138
|
// Build iOS action sheet options from visible options
|
|
138
139
|
const iosOptions = [cancelLabel, ...visibleOptions.map((o) => o.label)];
|
|
@@ -153,11 +154,11 @@ function AttachmentPicker({ visible, onClose, onTakePhoto, onPickFromLibrary, on
|
|
|
153
154
|
}
|
|
154
155
|
}, [visible, onClose, visibleOptions, title, cancelLabel]);
|
|
155
156
|
// iOS: Don't render modal - we use ActionSheetIOS instead
|
|
156
|
-
if (react_native_1.Platform.OS ===
|
|
157
|
+
if (react_native_1.Platform.OS === "ios") {
|
|
157
158
|
return null;
|
|
158
159
|
}
|
|
159
|
-
const resolvedOverlayColor = overlayColor ??
|
|
160
|
-
const resolvedSheetRadius = sheetRadius ??
|
|
160
|
+
const resolvedOverlayColor = overlayColor ?? picker.overlay;
|
|
161
|
+
const resolvedSheetRadius = sheetRadius ?? picker.radius;
|
|
161
162
|
// Android: Use bottom sheet modal
|
|
162
163
|
return (<react_native_1.Modal visible={visible} transparent animationType="slide" onRequestClose={onClose}>
|
|
163
164
|
<react_native_safe_area_context_1.SafeAreaView style={styles.modalContainer}>
|
|
@@ -167,7 +168,7 @@ function AttachmentPicker({ visible, onClose, onTakePhoto, onPickFromLibrary, on
|
|
|
167
168
|
<react_native_1.View style={[
|
|
168
169
|
styles.bottomSheet,
|
|
169
170
|
{
|
|
170
|
-
backgroundColor:
|
|
171
|
+
backgroundColor: picker.background,
|
|
171
172
|
maxHeight: screenHeight * 0.6,
|
|
172
173
|
borderTopLeftRadius: resolvedSheetRadius,
|
|
173
174
|
borderTopRightRadius: resolvedSheetRadius,
|
|
@@ -178,10 +179,7 @@ function AttachmentPicker({ visible, onClose, onTakePhoto, onPickFromLibrary, on
|
|
|
178
179
|
onStartShouldSetResponder={() => true}>
|
|
179
180
|
{/* Handle bar */}
|
|
180
181
|
<react_native_1.View style={styles.handleContainer}>
|
|
181
|
-
<react_native_1.View style={[
|
|
182
|
-
styles.handle,
|
|
183
|
-
{ backgroundColor: theme.colors.textSecondary },
|
|
184
|
-
]}/>
|
|
182
|
+
<react_native_1.View style={[styles.handle, { backgroundColor: picker.handle }]}/>
|
|
185
183
|
</react_native_1.View>
|
|
186
184
|
|
|
187
185
|
{/* Title */}
|
|
@@ -197,8 +195,8 @@ function AttachmentPicker({ visible, onClose, onTakePhoto, onPickFromLibrary, on
|
|
|
197
195
|
styles.option,
|
|
198
196
|
{
|
|
199
197
|
backgroundColor: pressed
|
|
200
|
-
?
|
|
201
|
-
:
|
|
198
|
+
? picker.optionBackgroundPressed
|
|
199
|
+
: picker.optionBackground,
|
|
202
200
|
borderRadius: theme.radii.md,
|
|
203
201
|
},
|
|
204
202
|
optionStyle,
|
|
@@ -206,6 +204,8 @@ function AttachmentPicker({ visible, onClose, onTakePhoto, onPickFromLibrary, on
|
|
|
206
204
|
<react_native_1.View style={[
|
|
207
205
|
styles.iconContainer,
|
|
208
206
|
{
|
|
207
|
+
width: picker.iconSize,
|
|
208
|
+
height: picker.iconSize,
|
|
209
209
|
backgroundColor: option.color,
|
|
210
210
|
borderRadius: theme.radii.full,
|
|
211
211
|
},
|
|
@@ -222,7 +222,7 @@ function AttachmentPicker({ visible, onClose, onTakePhoto, onPickFromLibrary, on
|
|
|
222
222
|
|
|
223
223
|
{/* Cancel Button */}
|
|
224
224
|
<react_native_1.Pressable style={styles.cancelButton} onPress={onClose}>
|
|
225
|
-
<ThemedText_1.ThemedText
|
|
225
|
+
<ThemedText_1.ThemedText color={picker.cancelText}>{cancelLabel}</ThemedText_1.ThemedText>
|
|
226
226
|
</react_native_1.Pressable>
|
|
227
227
|
</react_native_1.View>
|
|
228
228
|
</react_native_1.View>
|
|
@@ -242,13 +242,13 @@ const styles = react_native_1.StyleSheet.create({
|
|
|
242
242
|
},
|
|
243
243
|
overlay: {
|
|
244
244
|
flex: 1,
|
|
245
|
-
justifyContent:
|
|
245
|
+
justifyContent: "flex-end",
|
|
246
246
|
},
|
|
247
247
|
bottomSheet: {
|
|
248
248
|
paddingBottom: 20,
|
|
249
249
|
},
|
|
250
250
|
handleContainer: {
|
|
251
|
-
alignItems:
|
|
251
|
+
alignItems: "center",
|
|
252
252
|
paddingVertical: 12,
|
|
253
253
|
},
|
|
254
254
|
handle: {
|
|
@@ -262,23 +262,21 @@ const styles = react_native_1.StyleSheet.create({
|
|
|
262
262
|
paddingBottom: 16,
|
|
263
263
|
},
|
|
264
264
|
title: {
|
|
265
|
-
textAlign:
|
|
265
|
+
textAlign: "center",
|
|
266
266
|
},
|
|
267
267
|
optionsContainer: {
|
|
268
268
|
paddingHorizontal: 20,
|
|
269
269
|
},
|
|
270
270
|
option: {
|
|
271
|
-
flexDirection:
|
|
272
|
-
alignItems:
|
|
271
|
+
flexDirection: "row",
|
|
272
|
+
alignItems: "center",
|
|
273
273
|
paddingVertical: 16,
|
|
274
274
|
paddingHorizontal: 16,
|
|
275
275
|
marginBottom: 8,
|
|
276
276
|
},
|
|
277
277
|
iconContainer: {
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
alignItems: 'center',
|
|
281
|
-
justifyContent: 'center',
|
|
278
|
+
alignItems: "center",
|
|
279
|
+
justifyContent: "center",
|
|
282
280
|
marginRight: 16,
|
|
283
281
|
},
|
|
284
282
|
defaultIcon: {
|
|
@@ -290,7 +288,7 @@ const styles = react_native_1.StyleSheet.create({
|
|
|
290
288
|
},
|
|
291
289
|
cancelButton: {
|
|
292
290
|
paddingVertical: 16,
|
|
293
|
-
alignItems:
|
|
291
|
+
alignItems: "center",
|
|
294
292
|
marginTop: 12,
|
|
295
293
|
},
|
|
296
294
|
});
|