@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
|
@@ -53,11 +53,24 @@ const CategorySelector_1 = require("./CategorySelector");
|
|
|
53
53
|
*
|
|
54
54
|
* For attachment support, import from '@harkenapp/sdk-react-native/attachments'.
|
|
55
55
|
*
|
|
56
|
+
* Uses the following theme tokens:
|
|
57
|
+
* - `colors.formBackground` for background
|
|
58
|
+
* - `spacing.formPadding` for padding
|
|
59
|
+
* - `spacing.sectionGap` for section gaps
|
|
60
|
+
* - `radii.form` for border radius
|
|
61
|
+
*
|
|
56
62
|
* @example
|
|
57
63
|
* ```tsx
|
|
58
64
|
* // Minimal usage
|
|
59
65
|
* <FeedbackSheet onSuccess={() => navigation.goBack()} />
|
|
60
66
|
*
|
|
67
|
+
* // For bottom sheet modal embedding
|
|
68
|
+
* <FeedbackSheet
|
|
69
|
+
* layout="auto"
|
|
70
|
+
* title=""
|
|
71
|
+
* onSuccess={() => closeModal()}
|
|
72
|
+
* />
|
|
73
|
+
*
|
|
61
74
|
* // With customization
|
|
62
75
|
* <FeedbackSheet
|
|
63
76
|
* title="Report a Bug"
|
|
@@ -74,18 +87,18 @@ const CategorySelector_1 = require("./CategorySelector");
|
|
|
74
87
|
* />
|
|
75
88
|
* ```
|
|
76
89
|
*/
|
|
77
|
-
function FeedbackSheet({ onSuccess, onError, onCancel, title =
|
|
90
|
+
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, successMessage = "Thank you for your feedback!", showSuccessAlert = true, clearOnSuccess = true, layout = "flex", containerStyle, contentStyle, formStyle, }) {
|
|
78
91
|
const theme = (0, hooks_1.useHarkenTheme)();
|
|
92
|
+
const { form } = theme.components;
|
|
79
93
|
const { submitFeedback, isSubmitting, error, clearError, isInitializing } = (0, hooks_1.useFeedback)();
|
|
80
|
-
const [message, setMessage] = (0, react_1.useState)(
|
|
94
|
+
const [message, setMessage] = (0, react_1.useState)("");
|
|
81
95
|
const [category, setCategory] = (0, react_1.useState)(null);
|
|
82
96
|
const trimmedMessage = message.trim();
|
|
83
|
-
const isMessageValid = trimmedMessage.length >= minMessageLength &&
|
|
84
|
-
trimmedMessage.length <= maxMessageLength;
|
|
97
|
+
const isMessageValid = trimmedMessage.length >= minMessageLength && trimmedMessage.length <= maxMessageLength;
|
|
85
98
|
const isCategoryValid = !requireCategory || category !== null;
|
|
86
99
|
const canSubmit = isMessageValid && isCategoryValid && !isSubmitting && !isInitializing;
|
|
87
100
|
const resetForm = (0, react_1.useCallback)(() => {
|
|
88
|
-
setMessage(
|
|
101
|
+
setMessage("");
|
|
89
102
|
setCategory(null);
|
|
90
103
|
clearError();
|
|
91
104
|
}, [clearError]);
|
|
@@ -96,12 +109,12 @@ function FeedbackSheet({ onSuccess, onError, onCancel, title = 'Send Feedback',
|
|
|
96
109
|
try {
|
|
97
110
|
const result = await submitFeedback({
|
|
98
111
|
message: trimmedMessage,
|
|
99
|
-
category: category ??
|
|
112
|
+
category: category ?? "other",
|
|
100
113
|
});
|
|
101
114
|
if (showSuccessAlert && successMessage) {
|
|
102
|
-
react_native_1.Alert.alert(
|
|
115
|
+
react_native_1.Alert.alert("Success", successMessage, [
|
|
103
116
|
{
|
|
104
|
-
text:
|
|
117
|
+
text: "OK",
|
|
105
118
|
onPress: () => {
|
|
106
119
|
if (clearOnSuccess) {
|
|
107
120
|
resetForm();
|
|
@@ -119,8 +132,8 @@ function FeedbackSheet({ onSuccess, onError, onCancel, title = 'Send Feedback',
|
|
|
119
132
|
}
|
|
120
133
|
}
|
|
121
134
|
catch (e) {
|
|
122
|
-
const errorMessage = e instanceof Error ? e.message :
|
|
123
|
-
react_native_1.Alert.alert(
|
|
135
|
+
const errorMessage = e instanceof Error ? e.message : "Failed to submit feedback. Please try again.";
|
|
136
|
+
react_native_1.Alert.alert("Submission Failed", errorMessage);
|
|
124
137
|
onError?.(e instanceof Error ? e : new Error(errorMessage));
|
|
125
138
|
}
|
|
126
139
|
}, [
|
|
@@ -141,41 +154,48 @@ function FeedbackSheet({ onSuccess, onError, onCancel, title = 'Send Feedback',
|
|
|
141
154
|
onCancel?.();
|
|
142
155
|
}, [resetForm, onCancel]);
|
|
143
156
|
const baseContainerStyle = {
|
|
144
|
-
flex: 1,
|
|
145
|
-
backgroundColor:
|
|
157
|
+
...(layout === "flex" ? { flex: 1 } : {}),
|
|
158
|
+
backgroundColor: form.background,
|
|
159
|
+
borderRadius: form.radius,
|
|
146
160
|
};
|
|
147
|
-
const
|
|
148
|
-
flexGrow: 1,
|
|
149
|
-
padding:
|
|
161
|
+
const scrollContentStyle = {
|
|
162
|
+
...(layout === "flex" ? { flexGrow: 1 } : {}),
|
|
163
|
+
padding: form.padding,
|
|
150
164
|
};
|
|
151
165
|
const sectionStyle = {
|
|
152
|
-
marginBottom:
|
|
166
|
+
marginBottom: form.sectionGap,
|
|
153
167
|
};
|
|
154
168
|
const buttonRowStyle = {
|
|
155
|
-
flexDirection:
|
|
169
|
+
flexDirection: "row",
|
|
156
170
|
gap: theme.spacing.sm,
|
|
157
171
|
marginTop: theme.spacing.md,
|
|
158
172
|
};
|
|
159
173
|
const characterCount = trimmedMessage.length;
|
|
160
174
|
const showCharacterWarning = characterCount > maxMessageLength * 0.9;
|
|
175
|
+
// Support deprecated formStyle prop
|
|
176
|
+
const effectiveContentStyle = contentStyle ?? formStyle;
|
|
161
177
|
if (isInitializing) {
|
|
162
|
-
return (<react_native_1.View style={[
|
|
178
|
+
return (<react_native_1.View style={[
|
|
179
|
+
baseContainerStyle,
|
|
180
|
+
containerStyle,
|
|
181
|
+
{ justifyContent: "center", alignItems: "center" },
|
|
182
|
+
]}>
|
|
163
183
|
<ThemedText_1.ThemedText variant="body" secondary>
|
|
164
184
|
Initializing...
|
|
165
185
|
</ThemedText_1.ThemedText>
|
|
166
186
|
</react_native_1.View>);
|
|
167
187
|
}
|
|
168
|
-
return (<react_native_1.KeyboardAvoidingView behavior={react_native_1.Platform.OS ===
|
|
169
|
-
<react_native_1.ScrollView contentContainerStyle={[
|
|
170
|
-
{/* Title */}
|
|
171
|
-
<react_native_1.View style={sectionStyle}>
|
|
172
|
-
|
|
173
|
-
|
|
188
|
+
return (<react_native_1.KeyboardAvoidingView behavior={react_native_1.Platform.OS === "ios" ? "padding" : "height"} style={[baseContainerStyle, containerStyle]}>
|
|
189
|
+
<react_native_1.ScrollView contentContainerStyle={[scrollContentStyle, effectiveContentStyle]} keyboardShouldPersistTaps="handled">
|
|
190
|
+
{/* Title - only render if provided */}
|
|
191
|
+
{title ? (<react_native_1.View style={sectionStyle}>
|
|
192
|
+
<ThemedText_1.ThemedText variant="title">{title}</ThemedText_1.ThemedText>
|
|
193
|
+
</react_native_1.View>) : null}
|
|
174
194
|
|
|
175
195
|
{/* Category selector */}
|
|
176
196
|
<react_native_1.View style={sectionStyle}>
|
|
177
197
|
<ThemedText_1.ThemedText variant="label" secondary style={{ marginBottom: theme.spacing.sm }}>
|
|
178
|
-
Category{requireCategory ?
|
|
198
|
+
Category{requireCategory ? "" : " (optional)"}
|
|
179
199
|
</ThemedText_1.ThemedText>
|
|
180
200
|
<CategorySelector_1.CategorySelector value={category} onChange={setCategory} categories={categories} disabled={isSubmitting}/>
|
|
181
201
|
</react_native_1.View>
|
|
@@ -186,9 +206,7 @@ function FeedbackSheet({ onSuccess, onError, onCancel, title = 'Send Feedback',
|
|
|
186
206
|
Message
|
|
187
207
|
</ThemedText_1.ThemedText>
|
|
188
208
|
<ThemedTextInput_1.ThemedTextInput value={message} onChangeText={setMessage} placeholder={placeholder} multiline numberOfLines={4} textAlignVertical="top" editable={!isSubmitting} style={{ minHeight: 120 }} maxLength={maxMessageLength + 100}/>
|
|
189
|
-
{showCharacterWarning && (<ThemedText_1.ThemedText variant="caption" color={characterCount > maxMessageLength
|
|
190
|
-
? theme.colors.error
|
|
191
|
-
: theme.colors.textSecondary} style={{ marginTop: theme.spacing.xs, textAlign: 'right' }}>
|
|
209
|
+
{showCharacterWarning && (<ThemedText_1.ThemedText variant="caption" color={characterCount > maxMessageLength ? theme.colors.error : theme.colors.textSecondary} style={{ marginTop: theme.spacing.xs, textAlign: "right" }}>
|
|
192
210
|
{characterCount}/{maxMessageLength}
|
|
193
211
|
</ThemedText_1.ThemedText>)}
|
|
194
212
|
</react_native_1.View>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackSheet.js","sourceRoot":"","sources":["../../src/components/FeedbackSheet.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"FeedbackSheet.js","sourceRoot":"","sources":["../../src/components/FeedbackSheet.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import React from
|
|
2
|
-
import type { PressableProps, ViewStyle, StyleProp } from
|
|
3
|
-
export type ButtonVariant =
|
|
4
|
-
export interface ThemedButtonProps extends Omit<PressableProps,
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { PressableProps, ViewStyle, TextStyle, StyleProp } from "react-native";
|
|
3
|
+
export type ButtonVariant = "primary" | "secondary" | "ghost";
|
|
4
|
+
export interface ThemedButtonProps extends Omit<PressableProps, "children" | "style"> {
|
|
5
5
|
/** Button text */
|
|
6
6
|
title: string;
|
|
7
7
|
/** Button variant */
|
|
@@ -15,9 +15,20 @@ export interface ThemedButtonProps extends Omit<PressableProps, 'children' | 'st
|
|
|
15
15
|
* Note: Function styles are not supported; use static StyleProp<ViewStyle>.
|
|
16
16
|
*/
|
|
17
17
|
style?: StyleProp<ViewStyle>;
|
|
18
|
+
/** Additional styles for the button text */
|
|
19
|
+
textStyle?: StyleProp<TextStyle>;
|
|
18
20
|
}
|
|
19
21
|
/**
|
|
20
22
|
* Themed button component with Harken styling.
|
|
23
|
+
*
|
|
24
|
+
* Uses the following theme tokens:
|
|
25
|
+
* - `colors.buttonPrimary*` for primary variant
|
|
26
|
+
* - `colors.buttonSecondary*` for secondary variant
|
|
27
|
+
* - `colors.buttonGhostText` for ghost variant
|
|
28
|
+
* - `spacing.buttonPadding*` for padding
|
|
29
|
+
* - `radii.button` for border radius
|
|
30
|
+
* - `sizing.buttonMinHeight` for minimum height
|
|
31
|
+
* - `opacity.disabled` for disabled state
|
|
21
32
|
*/
|
|
22
|
-
export declare function ThemedButton({ title, variant, loading, fullWidth, disabled, style, ...props }: ThemedButtonProps): React.JSX.Element;
|
|
33
|
+
export declare function ThemedButton({ title, variant, loading, fullWidth, disabled, style, textStyle, ...props }: ThemedButtonProps): React.JSX.Element;
|
|
23
34
|
//# sourceMappingURL=ThemedButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemedButton.d.ts","sourceRoot":"","sources":["../../src/components/ThemedButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ThemedButton.d.ts","sourceRoot":"","sources":["../../src/components/ThemedButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIpF,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,CAAC;IACnF,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,4CAA4C;IAC5C,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAClC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,OAAmB,EACnB,OAAe,EACf,SAAiB,EACjB,QAAQ,EACR,KAAK,EACL,SAAS,EACT,GAAG,KAAK,EACT,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAiFvC"}
|
|
@@ -10,22 +10,30 @@ const hooks_1 = require("../hooks");
|
|
|
10
10
|
const ThemedText_1 = require("./ThemedText");
|
|
11
11
|
/**
|
|
12
12
|
* Themed button component with Harken styling.
|
|
13
|
+
*
|
|
14
|
+
* Uses the following theme tokens:
|
|
15
|
+
* - `colors.buttonPrimary*` for primary variant
|
|
16
|
+
* - `colors.buttonSecondary*` for secondary variant
|
|
17
|
+
* - `colors.buttonGhostText` for ghost variant
|
|
18
|
+
* - `spacing.buttonPadding*` for padding
|
|
19
|
+
* - `radii.button` for border radius
|
|
20
|
+
* - `sizing.buttonMinHeight` for minimum height
|
|
21
|
+
* - `opacity.disabled` for disabled state
|
|
13
22
|
*/
|
|
14
|
-
function ThemedButton({ title, variant =
|
|
23
|
+
function ThemedButton({ title, variant = "primary", loading = false, fullWidth = false, disabled, style, textStyle, ...props }) {
|
|
15
24
|
const theme = (0, hooks_1.useHarkenTheme)();
|
|
25
|
+
const { button } = theme.components;
|
|
16
26
|
const getBackgroundColor = (pressed) => {
|
|
17
27
|
if (disabled) {
|
|
18
|
-
return variant ===
|
|
19
|
-
? theme.colors.border
|
|
20
|
-
: 'transparent';
|
|
28
|
+
return variant === "primary" ? theme.colors.border : "transparent";
|
|
21
29
|
}
|
|
22
30
|
switch (variant) {
|
|
23
|
-
case
|
|
24
|
-
return pressed ?
|
|
25
|
-
case
|
|
26
|
-
return pressed ? theme.colors.border :
|
|
27
|
-
case
|
|
28
|
-
return pressed ? theme.colors.
|
|
31
|
+
case "primary":
|
|
32
|
+
return pressed ? button.primary.backgroundPressed : button.primary.background;
|
|
33
|
+
case "secondary":
|
|
34
|
+
return pressed ? theme.colors.border : button.secondary.background;
|
|
35
|
+
case "ghost":
|
|
36
|
+
return pressed ? theme.colors.surface : "transparent";
|
|
29
37
|
}
|
|
30
38
|
};
|
|
31
39
|
const getTextColor = () => {
|
|
@@ -33,19 +41,20 @@ function ThemedButton({ title, variant = 'primary', loading = false, fullWidth =
|
|
|
33
41
|
return theme.colors.textPlaceholder;
|
|
34
42
|
}
|
|
35
43
|
switch (variant) {
|
|
36
|
-
case
|
|
37
|
-
return
|
|
38
|
-
case
|
|
39
|
-
|
|
40
|
-
|
|
44
|
+
case "primary":
|
|
45
|
+
return button.primary.text;
|
|
46
|
+
case "secondary":
|
|
47
|
+
return button.secondary.text;
|
|
48
|
+
case "ghost":
|
|
49
|
+
return button.ghost.text;
|
|
41
50
|
}
|
|
42
51
|
};
|
|
43
52
|
const getBorderColor = () => {
|
|
44
53
|
switch (variant) {
|
|
45
|
-
case
|
|
46
|
-
return
|
|
54
|
+
case "secondary":
|
|
55
|
+
return button.secondary.border;
|
|
47
56
|
default:
|
|
48
|
-
return
|
|
57
|
+
return "transparent";
|
|
49
58
|
}
|
|
50
59
|
};
|
|
51
60
|
// Flatten the style prop to handle arrays and registered styles
|
|
@@ -53,23 +62,23 @@ function ThemedButton({ title, variant = 'primary', loading = false, fullWidth =
|
|
|
53
62
|
return (<react_native_1.Pressable disabled={disabled || loading} style={({ pressed }) => {
|
|
54
63
|
const baseStyle = {
|
|
55
64
|
backgroundColor: getBackgroundColor(pressed),
|
|
56
|
-
borderWidth: variant ===
|
|
65
|
+
borderWidth: variant === "secondary" ? 1 : 0,
|
|
57
66
|
borderColor: getBorderColor(),
|
|
58
|
-
borderRadius:
|
|
59
|
-
paddingVertical:
|
|
60
|
-
paddingHorizontal:
|
|
61
|
-
alignItems:
|
|
62
|
-
justifyContent:
|
|
63
|
-
flexDirection:
|
|
64
|
-
minHeight:
|
|
65
|
-
opacity: disabled ?
|
|
67
|
+
borderRadius: button.radius,
|
|
68
|
+
paddingVertical: button.paddingVertical + 4,
|
|
69
|
+
paddingHorizontal: button.paddingHorizontal,
|
|
70
|
+
alignItems: "center",
|
|
71
|
+
justifyContent: "center",
|
|
72
|
+
flexDirection: "row",
|
|
73
|
+
minHeight: button.minHeight,
|
|
74
|
+
opacity: disabled ? theme.opacity.disabled : 1,
|
|
66
75
|
};
|
|
67
76
|
if (fullWidth) {
|
|
68
|
-
baseStyle.width =
|
|
77
|
+
baseStyle.width = "100%";
|
|
69
78
|
}
|
|
70
79
|
return [baseStyle, flattenedStyle];
|
|
71
80
|
}} {...props}>
|
|
72
|
-
{loading ? (<react_native_1.ActivityIndicator color={getTextColor()} size="small"/>) : (<ThemedText_1.ThemedText variant="label" color={getTextColor()}>
|
|
81
|
+
{loading ? (<react_native_1.ActivityIndicator color={getTextColor()} size="small"/>) : (<ThemedText_1.ThemedText variant="label" color={getTextColor()} style={textStyle}>
|
|
73
82
|
{title}
|
|
74
83
|
</ThemedText_1.ThemedText>)}
|
|
75
84
|
</react_native_1.Pressable>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemedButton.js","sourceRoot":"","sources":["../../src/components/ThemedButton.tsx"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"ThemedButton.js","sourceRoot":"","sources":["../../src/components/ThemedButton.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import React from
|
|
2
|
-
import type { TextProps } from
|
|
3
|
-
export type TextVariant =
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { TextProps } from "react-native";
|
|
3
|
+
export type TextVariant = "title" | "body" | "label" | "caption";
|
|
4
4
|
export interface ThemedTextProps extends TextProps {
|
|
5
5
|
/** Text variant determining size and weight */
|
|
6
6
|
variant?: TextVariant;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemedText.d.ts","sourceRoot":"","sources":["../../src/components/ThemedText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,cAAc,CAAC;AAGzD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjE,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,+CAA+C;IAC/C,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EACzB,OAAgB,EAChB,KAAK,EACL,SAAiB,EACjB,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"ThemedText.d.ts","sourceRoot":"","sources":["../../src/components/ThemedText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,cAAc,CAAC;AAGzD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjE,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,+CAA+C;IAC/C,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EACzB,OAAgB,EAChB,KAAK,EACL,SAAiB,EACjB,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAmCrC"}
|
|
@@ -10,7 +10,7 @@ const hooks_1 = require("../hooks");
|
|
|
10
10
|
/**
|
|
11
11
|
* Themed text component that uses Harken theme typography.
|
|
12
12
|
*/
|
|
13
|
-
function ThemedText({ variant =
|
|
13
|
+
function ThemedText({ variant = "body", color, secondary = false, style, children, ...props }) {
|
|
14
14
|
const theme = (0, hooks_1.useHarkenTheme)();
|
|
15
15
|
const variantStyles = {
|
|
16
16
|
title: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemedText.js","sourceRoot":"","sources":["../../src/components/ThemedText.tsx"],"names":[],"mappings":";;;;;AAmBA,
|
|
1
|
+
{"version":3,"file":"ThemedText.js","sourceRoot":"","sources":["../../src/components/ThemedText.tsx"],"names":[],"mappings":";;;;;AAmBA,gCA0CC;AA7DD,kDAA0B;AAC1B,+CAAoC;AAEpC,oCAA0C;AAa1C;;GAEG;AACH,SAAgB,UAAU,CAAC,EACzB,OAAO,GAAG,MAAM,EAChB,KAAK,EACL,SAAS,GAAG,KAAK,EACjB,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACQ;IAChB,MAAM,KAAK,GAAG,IAAA,sBAAc,GAAE,CAAC;IAE/B,MAAM,aAAa,GAAmC;QACpD,KAAK,EAAE;YACL,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS;YACpC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe;YACzE,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW;YACxC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU;SAC9E;QACD,IAAI,EAAE;YACJ,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ;YACnC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc;YACvE,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU;YACvC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU;SACxC;QACD,KAAK,EAAE;YACL,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS;YACpC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW;YACxC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU;SACxC;QACD,OAAO,EAAE;YACP,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW;YACtC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa;YAC1C,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU;SACxC;KACF,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAExF,OAAO,CACL,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAC5E;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,mBAAI,CAAC,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import React from
|
|
2
|
-
import type { TextInputProps, ViewStyle, StyleProp } from
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { TextInputProps, ViewStyle, StyleProp } from "react-native";
|
|
3
3
|
export interface ThemedTextInputProps extends TextInputProps {
|
|
4
4
|
/** Error state */
|
|
5
5
|
error?: boolean;
|
|
@@ -8,6 +8,15 @@ export interface ThemedTextInputProps extends TextInputProps {
|
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
10
|
* Themed text input component with Harken styling.
|
|
11
|
+
*
|
|
12
|
+
* Uses the following theme tokens:
|
|
13
|
+
* - `colors.inputBackground` for background
|
|
14
|
+
* - `colors.inputBorder`, `inputBorderFocused`, `inputBorderError` for border states
|
|
15
|
+
* - `colors.inputText` for text color
|
|
16
|
+
* - `colors.inputPlaceholder` for placeholder
|
|
17
|
+
* - `spacing.inputPadding` for padding
|
|
18
|
+
* - `radii.input` for border radius
|
|
19
|
+
* - `sizing.inputMinHeight` for minimum height
|
|
11
20
|
*/
|
|
12
21
|
export declare function ThemedTextInput({ error, containerStyle, style, onFocus, onBlur, ...props }: ThemedTextInputProps): React.JSX.Element;
|
|
13
22
|
//# sourceMappingURL=ThemedTextInput.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemedTextInput.d.ts","sourceRoot":"","sources":["../../src/components/ThemedTextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAa,SAAS,EAAE,MAAM,cAAc,CAAC;AAGpF,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACvC;AAED
|
|
1
|
+
{"version":3,"file":"ThemedTextInput.d.ts","sourceRoot":"","sources":["../../src/components/ThemedTextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAa,SAAS,EAAE,MAAM,cAAc,CAAC;AAGpF,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACvC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAa,EACb,cAAc,EACd,KAAK,EACL,OAAO,EACP,MAAM,EACN,GAAG,KAAK,EACT,EAAE,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA2C1C"}
|
|
@@ -39,32 +39,42 @@ const react_native_1 = require("react-native");
|
|
|
39
39
|
const hooks_1 = require("../hooks");
|
|
40
40
|
/**
|
|
41
41
|
* Themed text input component with Harken styling.
|
|
42
|
+
*
|
|
43
|
+
* Uses the following theme tokens:
|
|
44
|
+
* - `colors.inputBackground` for background
|
|
45
|
+
* - `colors.inputBorder`, `inputBorderFocused`, `inputBorderError` for border states
|
|
46
|
+
* - `colors.inputText` for text color
|
|
47
|
+
* - `colors.inputPlaceholder` for placeholder
|
|
48
|
+
* - `spacing.inputPadding` for padding
|
|
49
|
+
* - `radii.input` for border radius
|
|
50
|
+
* - `sizing.inputMinHeight` for minimum height
|
|
42
51
|
*/
|
|
43
52
|
function ThemedTextInput({ error = false, containerStyle, style, onFocus, onBlur, ...props }) {
|
|
44
53
|
const theme = (0, hooks_1.useHarkenTheme)();
|
|
54
|
+
const { input } = theme.components;
|
|
45
55
|
const [isFocused, setIsFocused] = (0, react_1.useState)(false);
|
|
46
56
|
const getBorderColor = () => {
|
|
47
57
|
if (error)
|
|
48
|
-
return
|
|
58
|
+
return input.borderError;
|
|
49
59
|
if (isFocused)
|
|
50
|
-
return
|
|
51
|
-
return
|
|
60
|
+
return input.borderFocused;
|
|
61
|
+
return input.border;
|
|
52
62
|
};
|
|
53
63
|
const inputStyle = {
|
|
54
64
|
fontSize: theme.typography.bodySize,
|
|
55
65
|
fontFamily: theme.typography.fontFamily,
|
|
56
|
-
color:
|
|
57
|
-
padding:
|
|
58
|
-
minHeight:
|
|
66
|
+
color: input.text,
|
|
67
|
+
padding: input.padding,
|
|
68
|
+
minHeight: input.minHeight,
|
|
59
69
|
};
|
|
60
70
|
const containerStyles = {
|
|
61
|
-
backgroundColor:
|
|
71
|
+
backgroundColor: input.background,
|
|
62
72
|
borderWidth: 1,
|
|
63
73
|
borderColor: getBorderColor(),
|
|
64
|
-
borderRadius:
|
|
74
|
+
borderRadius: input.radius,
|
|
65
75
|
};
|
|
66
76
|
return (<react_native_1.View style={[containerStyles, containerStyle]}>
|
|
67
|
-
<react_native_1.TextInput style={[inputStyle, style]} placeholderTextColor={
|
|
77
|
+
<react_native_1.TextInput style={[inputStyle, style]} placeholderTextColor={input.placeholder} onFocus={(e) => {
|
|
68
78
|
setIsFocused(true);
|
|
69
79
|
onFocus?.(e);
|
|
70
80
|
}} onBlur={(e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemedTextInput.js","sourceRoot":"","sources":["../../src/components/ThemedTextInput.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"ThemedTextInput.js","sourceRoot":"","sources":["../../src/components/ThemedTextInput.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,0CAkDC;AA1ED,+CAAwC;AACxC,+CAA+C;AAE/C,oCAA0C;AAS1C;;;;;;;;;;;GAWG;AACH,SAAgB,eAAe,CAAC,EAC9B,KAAK,GAAG,KAAK,EACb,cAAc,EACd,KAAK,EACL,OAAO,EACP,MAAM,EACN,GAAG,KAAK,EACa;IACrB,MAAM,KAAK,GAAG,IAAA,sBAAc,GAAE,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;IACnC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAElD,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,WAAW,CAAC;QACpC,IAAI,SAAS;YAAE,OAAO,KAAK,CAAC,aAAa,CAAC;QAC1C,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,UAAU,GAAc;QAC5B,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ;QACnC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU;QACvC,KAAK,EAAE,KAAK,CAAC,IAAI;QACjB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC;IAEF,MAAM,eAAe,GAAc;QACjC,eAAe,EAAE,KAAK,CAAC,UAAU;QACjC,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,cAAc,EAAE;QAC7B,YAAY,EAAE,KAAK,CAAC,MAAM;KAC3B,CAAC;IAEF,OAAO,CACL,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC,CAC7C;MAAA,CAAC,wBAAS,CACR,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAC3B,oBAAoB,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CACxC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;YACb,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACf,CAAC,CAAC,CACF,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;YACZ,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QACd,CAAC,CAAC,CACF,IAAI,KAAK,CAAC,EAEd;IAAA,EAAE,mBAAI,CAAC,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import React from
|
|
2
|
-
import type { ViewStyle, StyleProp } from
|
|
3
|
-
import { UploadPhase } from
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ViewStyle, StyleProp } from "react-native";
|
|
3
|
+
import { UploadPhase } from "../domain";
|
|
4
4
|
/**
|
|
5
5
|
* Customizable labels for upload status states.
|
|
6
6
|
*/
|
|
@@ -49,6 +49,14 @@ export interface UploadStatusOverlayProps {
|
|
|
49
49
|
* - Checkmark when complete
|
|
50
50
|
* - Error with retry button when failed
|
|
51
51
|
*
|
|
52
|
+
* Uses the following theme tokens:
|
|
53
|
+
* - `colors.uploadOverlay` for overlay background
|
|
54
|
+
* - `colors.uploadOverlayError` for error overlay background
|
|
55
|
+
* - `colors.uploadProgressTrack` for progress bar track
|
|
56
|
+
* - `colors.uploadProgressFill` for progress bar fill
|
|
57
|
+
* - `colors.uploadBadgeSuccess` for success badge
|
|
58
|
+
* - `colors.uploadText` for overlay text
|
|
59
|
+
*
|
|
52
60
|
* @example
|
|
53
61
|
* ```tsx
|
|
54
62
|
* // Basic usage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UploadStatusOverlay.d.ts","sourceRoot":"","sources":["../../src/components/UploadStatusOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,2BAA2B;IAC3B,KAAK,EAAE,WAAW,CAAC;IACnB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,iCAAiC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,oCAAoC;IACpC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,+BAA+B;IAC/B,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IACvD,4BAA4B;IAC5B,WAAW,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"UploadStatusOverlay.d.ts","sourceRoot":"","sources":["../../src/components/UploadStatusOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,2BAA2B;IAC3B,KAAK,EAAE,WAAW,CAAC;IACnB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,iCAAiC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,oCAAoC;IACpC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,+BAA+B;IAC/B,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IACvD,4BAA4B;IAC5B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC;IAC9F,wCAAwC;IACxC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC;CAC5D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,EACR,KAAK,EACL,OAAO,EACP,QAAQ,EACR,KAAK,EACL,MAAM,EACN,cAAc,EACd,WAAW,EACX,aAAa,GACd,EAAE,wBAAwB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA0NrD"}
|