@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.
Files changed (278) hide show
  1. package/README.md +44 -7
  2. package/app.plugin.cjs +12 -17
  3. package/dist/__mocks__/async-storage.d.ts +16 -0
  4. package/dist/__mocks__/async-storage.d.ts.map +1 -0
  5. package/dist/__mocks__/async-storage.js +39 -0
  6. package/dist/__mocks__/async-storage.js.map +1 -0
  7. package/dist/__mocks__/expo-document-picker.d.ts +26 -0
  8. package/dist/__mocks__/expo-document-picker.d.ts.map +1 -0
  9. package/dist/__mocks__/expo-document-picker.js +25 -0
  10. package/dist/__mocks__/expo-document-picker.js.map +1 -0
  11. package/dist/__mocks__/expo-file-system.d.ts +42 -0
  12. package/dist/__mocks__/expo-file-system.d.ts.map +1 -0
  13. package/dist/__mocks__/expo-file-system.js +37 -0
  14. package/dist/__mocks__/expo-file-system.js.map +1 -0
  15. package/dist/__mocks__/expo-image-picker.d.ts +30 -0
  16. package/dist/__mocks__/expo-image-picker.d.ts.map +1 -0
  17. package/dist/__mocks__/expo-image-picker.js +30 -0
  18. package/dist/__mocks__/expo-image-picker.js.map +1 -0
  19. package/dist/__mocks__/expo-secure-store.d.ts +15 -0
  20. package/dist/__mocks__/expo-secure-store.d.ts.map +1 -0
  21. package/dist/__mocks__/expo-secure-store.js +30 -0
  22. package/dist/__mocks__/expo-secure-store.js.map +1 -0
  23. package/dist/__mocks__/react-native.d.ts +73 -0
  24. package/dist/__mocks__/react-native.d.ts.map +1 -0
  25. package/dist/__mocks__/react-native.js +45 -0
  26. package/dist/__mocks__/react-native.js.map +1 -0
  27. package/dist/api/client.d.ts +8 -8
  28. package/dist/api/client.d.ts.map +1 -1
  29. package/dist/api/client.js +17 -19
  30. package/dist/api/client.js.map +1 -1
  31. package/dist/api/client.test.d.ts +2 -0
  32. package/dist/api/client.test.d.ts.map +1 -0
  33. package/dist/api/client.test.js +417 -0
  34. package/dist/api/client.test.js.map +1 -0
  35. package/dist/api/errors.d.ts +3 -3
  36. package/dist/api/errors.d.ts.map +1 -1
  37. package/dist/api/errors.js +3 -3
  38. package/dist/api/errors.js.map +1 -1
  39. package/dist/api/errors.test.d.ts +2 -0
  40. package/dist/api/errors.test.d.ts.map +1 -0
  41. package/dist/api/errors.test.js +155 -0
  42. package/dist/api/errors.test.js.map +1 -0
  43. package/dist/api/index.d.ts +6 -6
  44. package/dist/api/index.d.ts.map +1 -1
  45. package/dist/api/index.js.map +1 -1
  46. package/dist/api/retry.d.ts +1 -1
  47. package/dist/api/retry.d.ts.map +1 -1
  48. package/dist/api/retry.js.map +1 -1
  49. package/dist/api/retry.test.d.ts +2 -0
  50. package/dist/api/retry.test.d.ts.map +1 -0
  51. package/dist/api/retry.test.js +193 -0
  52. package/dist/api/retry.test.js.map +1 -0
  53. package/dist/attachments/FeedbackSheet.d.ts +36 -13
  54. package/dist/attachments/FeedbackSheet.d.ts.map +1 -1
  55. package/dist/attachments/FeedbackSheet.js +50 -30
  56. package/dist/attachments/FeedbackSheet.js.map +1 -1
  57. package/dist/attachments/index.d.ts +2 -2
  58. package/dist/components/AttachmentGrid.d.ts +12 -4
  59. package/dist/components/AttachmentGrid.d.ts.map +1 -1
  60. package/dist/components/AttachmentGrid.js +44 -34
  61. package/dist/components/AttachmentGrid.js.map +1 -1
  62. package/dist/components/AttachmentPicker.d.ts +3 -3
  63. package/dist/components/AttachmentPicker.d.ts.map +1 -1
  64. package/dist/components/AttachmentPicker.js +34 -36
  65. package/dist/components/AttachmentPicker.js.map +1 -1
  66. package/dist/components/AttachmentPreview.d.ts +10 -4
  67. package/dist/components/AttachmentPreview.d.ts.map +1 -1
  68. package/dist/components/AttachmentPreview.js +48 -34
  69. package/dist/components/AttachmentPreview.js.map +1 -1
  70. package/dist/components/CategorySelector.d.ts +3 -3
  71. package/dist/components/CategorySelector.d.ts.map +1 -1
  72. package/dist/components/CategorySelector.js +21 -27
  73. package/dist/components/CategorySelector.js.map +1 -1
  74. package/dist/components/FeedbackForm.d.ts +3 -3
  75. package/dist/components/FeedbackForm.d.ts.map +1 -1
  76. package/dist/components/FeedbackForm.js +7 -8
  77. package/dist/components/FeedbackForm.js.map +1 -1
  78. package/dist/components/FeedbackSheet.d.ts +34 -11
  79. package/dist/components/FeedbackSheet.d.ts.map +1 -1
  80. package/dist/components/FeedbackSheet.js +46 -28
  81. package/dist/components/FeedbackSheet.js.map +1 -1
  82. package/dist/components/ThemedButton.d.ts +16 -5
  83. package/dist/components/ThemedButton.d.ts.map +1 -1
  84. package/dist/components/ThemedButton.js +38 -29
  85. package/dist/components/ThemedButton.js.map +1 -1
  86. package/dist/components/ThemedText.d.ts +3 -3
  87. package/dist/components/ThemedText.d.ts.map +1 -1
  88. package/dist/components/ThemedText.js +1 -1
  89. package/dist/components/ThemedText.js.map +1 -1
  90. package/dist/components/ThemedTextInput.d.ts +11 -2
  91. package/dist/components/ThemedTextInput.d.ts.map +1 -1
  92. package/dist/components/ThemedTextInput.js +19 -9
  93. package/dist/components/ThemedTextInput.js.map +1 -1
  94. package/dist/components/UploadStatusOverlay.d.ts +11 -3
  95. package/dist/components/UploadStatusOverlay.d.ts.map +1 -1
  96. package/dist/components/UploadStatusOverlay.js +59 -76
  97. package/dist/components/UploadStatusOverlay.js.map +1 -1
  98. package/dist/components/index.d.ts +18 -18
  99. package/dist/components/index.d.ts.map +1 -1
  100. package/dist/components/index.js.map +1 -1
  101. package/dist/context/HarkenContext.d.ts +20 -15
  102. package/dist/context/HarkenContext.d.ts.map +1 -1
  103. package/dist/context/HarkenContext.js +20 -17
  104. package/dist/context/HarkenContext.js.map +1 -1
  105. package/dist/context/index.d.ts +2 -2
  106. package/dist/domain/index.d.ts +2 -2
  107. package/dist/domain/index.d.ts.map +1 -1
  108. package/dist/domain/index.js.map +1 -1
  109. package/dist/hooks/index.d.ts +5 -5
  110. package/dist/hooks/useAnonymousId.js +1 -1
  111. package/dist/hooks/useAnonymousId.test.d.ts +2 -0
  112. package/dist/hooks/useAnonymousId.test.d.ts.map +1 -0
  113. package/dist/hooks/useAnonymousId.test.js +154 -0
  114. package/dist/hooks/useAnonymousId.test.js.map +1 -0
  115. package/dist/hooks/useAttachmentPicker.d.ts +3 -3
  116. package/dist/hooks/useAttachmentPicker.js +7 -7
  117. package/dist/hooks/useAttachmentStatus.d.ts +1 -1
  118. package/dist/hooks/useAttachmentStatus.d.ts.map +1 -1
  119. package/dist/hooks/useAttachmentStatus.js.map +1 -1
  120. package/dist/hooks/useAttachmentUpload.d.ts +2 -2
  121. package/dist/hooks/useAttachmentUpload.d.ts.map +1 -1
  122. package/dist/hooks/useAttachmentUpload.js +5 -5
  123. package/dist/hooks/useAttachmentUpload.js.map +1 -1
  124. package/dist/hooks/useAttachmentUpload.test.d.ts +2 -0
  125. package/dist/hooks/useAttachmentUpload.test.d.ts.map +1 -0
  126. package/dist/hooks/useAttachmentUpload.test.js +542 -0
  127. package/dist/hooks/useAttachmentUpload.test.js.map +1 -0
  128. package/dist/hooks/useFeedback.d.ts +4 -4
  129. package/dist/hooks/useFeedback.d.ts.map +1 -1
  130. package/dist/hooks/useFeedback.js +3 -5
  131. package/dist/hooks/useFeedback.js.map +1 -1
  132. package/dist/hooks/useFeedback.test.d.ts +2 -0
  133. package/dist/hooks/useFeedback.test.d.ts.map +1 -0
  134. package/dist/hooks/useFeedback.test.js +299 -0
  135. package/dist/hooks/useFeedback.test.js.map +1 -0
  136. package/dist/hooks/useHarkenContext.d.ts +1 -1
  137. package/dist/hooks/useHarkenContext.js +1 -1
  138. package/dist/hooks/useHarkenTheme.d.ts +27 -3
  139. package/dist/hooks/useHarkenTheme.d.ts.map +1 -1
  140. package/dist/hooks/useHarkenTheme.js +26 -2
  141. package/dist/hooks/useHarkenTheme.js.map +1 -1
  142. package/dist/index.d.ts +28 -28
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js.map +1 -1
  145. package/dist/services/index.d.ts +3 -3
  146. package/dist/services/index.d.ts.map +1 -1
  147. package/dist/services/index.js.map +1 -1
  148. package/dist/services/uploadQueueService.d.ts +2 -2
  149. package/dist/services/uploadQueueService.d.ts.map +1 -1
  150. package/dist/services/uploadQueueService.js +16 -17
  151. package/dist/services/uploadQueueService.js.map +1 -1
  152. package/dist/services/uploadQueueService.test.d.ts +2 -0
  153. package/dist/services/uploadQueueService.test.d.ts.map +1 -0
  154. package/dist/services/uploadQueueService.test.js +426 -0
  155. package/dist/services/uploadQueueService.test.js.map +1 -0
  156. package/dist/services/uploadQueueStorage.d.ts +1 -1
  157. package/dist/services/uploadQueueStorage.d.ts.map +1 -1
  158. package/dist/services/uploadQueueStorage.js +4 -4
  159. package/dist/services/uploadQueueStorage.js.map +1 -1
  160. package/dist/services/uploadQueueStorage.test.d.ts +2 -0
  161. package/dist/services/uploadQueueStorage.test.d.ts.map +1 -0
  162. package/dist/services/uploadQueueStorage.test.js +200 -0
  163. package/dist/services/uploadQueueStorage.test.js.map +1 -0
  164. package/dist/storage/IdentityStore.d.ts +1 -1
  165. package/dist/storage/IdentityStore.d.ts.map +1 -1
  166. package/dist/storage/IdentityStore.js.map +1 -1
  167. package/dist/storage/IdentityStore.test.d.ts +2 -0
  168. package/dist/storage/IdentityStore.test.d.ts.map +1 -0
  169. package/dist/storage/IdentityStore.test.js +176 -0
  170. package/dist/storage/IdentityStore.test.js.map +1 -0
  171. package/dist/storage/SecureStoreAdapter.d.ts +1 -1
  172. package/dist/storage/SecureStoreAdapter.test.d.ts +2 -0
  173. package/dist/storage/SecureStoreAdapter.test.d.ts.map +1 -0
  174. package/dist/storage/SecureStoreAdapter.test.js +114 -0
  175. package/dist/storage/SecureStoreAdapter.test.js.map +1 -0
  176. package/dist/storage/defaultStorage.d.ts +1 -1
  177. package/dist/storage/defaultStorage.js +4 -4
  178. package/dist/storage/defaultStorage.test.d.ts +2 -0
  179. package/dist/storage/defaultStorage.test.d.ts.map +1 -0
  180. package/dist/storage/defaultStorage.test.js +159 -0
  181. package/dist/storage/defaultStorage.test.js.map +1 -0
  182. package/dist/storage/index.d.ts +5 -5
  183. package/dist/storage/types.js +1 -1
  184. package/dist/theme/defaults.d.ts +14 -3
  185. package/dist/theme/defaults.d.ts.map +1 -1
  186. package/dist/theme/defaults.js +58 -43
  187. package/dist/theme/defaults.js.map +1 -1
  188. package/dist/theme/index.d.ts +3 -2
  189. package/dist/theme/index.d.ts.map +1 -1
  190. package/dist/theme/index.js +4 -1
  191. package/dist/theme/index.js.map +1 -1
  192. package/dist/theme/resolver.d.ts +16 -0
  193. package/dist/theme/resolver.d.ts.map +1 -0
  194. package/dist/theme/resolver.js +375 -0
  195. package/dist/theme/resolver.js.map +1 -0
  196. package/dist/theme/resolver.test.d.ts +2 -0
  197. package/dist/theme/resolver.test.d.ts.map +1 -0
  198. package/dist/theme/resolver.test.js +344 -0
  199. package/dist/theme/resolver.test.js.map +1 -0
  200. package/dist/theme/types.d.ts +378 -5
  201. package/dist/theme/types.d.ts.map +1 -1
  202. package/dist/types/config.d.ts +4 -4
  203. package/dist/types/index.d.ts +2 -2
  204. package/dist/utils/index.d.ts +1 -1
  205. package/dist/utils/uuid.d.ts.map +1 -1
  206. package/dist/utils/uuid.js +4 -5
  207. package/dist/utils/uuid.js.map +1 -1
  208. package/dist/utils/uuid.test.d.ts +2 -0
  209. package/dist/utils/uuid.test.d.ts.map +1 -0
  210. package/dist/utils/uuid.test.js +78 -0
  211. package/dist/utils/uuid.test.js.map +1 -0
  212. package/package.json +21 -13
  213. package/src/@types/expo-file-system-legacy.d.ts +3 -3
  214. package/src/__mocks__/async-storage.ts +46 -0
  215. package/src/__mocks__/expo-document-picker.ts +41 -0
  216. package/src/__mocks__/expo-file-system.ts +62 -0
  217. package/src/__mocks__/expo-image-picker.ts +48 -0
  218. package/src/__mocks__/expo-secure-store.ts +29 -0
  219. package/src/__mocks__/react-native.ts +46 -0
  220. package/src/api/client.test.ts +515 -0
  221. package/src/api/client.ts +45 -64
  222. package/src/api/errors.test.ts +193 -0
  223. package/src/api/errors.ts +7 -11
  224. package/src/api/index.ts +6 -10
  225. package/src/api/retry.test.ts +251 -0
  226. package/src/api/retry.ts +3 -6
  227. package/src/attachments/FeedbackSheet.tsx +100 -80
  228. package/src/attachments/index.ts +2 -2
  229. package/src/components/AttachmentGrid.tsx +54 -45
  230. package/src/components/AttachmentPicker.tsx +43 -54
  231. package/src/components/AttachmentPreview.tsx +51 -47
  232. package/src/components/CategorySelector.tsx +29 -35
  233. package/src/components/FeedbackForm.tsx +23 -35
  234. package/src/components/FeedbackSheet.tsx +89 -68
  235. package/src/components/ThemedButton.tsx +49 -47
  236. package/src/components/ThemedText.tsx +7 -10
  237. package/src/components/ThemedTextInput.tsx +23 -13
  238. package/src/components/UploadStatusOverlay.tsx +66 -89
  239. package/src/components/index.ts +18 -21
  240. package/src/context/HarkenContext.tsx +29 -28
  241. package/src/context/index.ts +2 -2
  242. package/src/domain/index.ts +2 -5
  243. package/src/domain/upload-queue.ts +5 -5
  244. package/src/hooks/index.ts +5 -5
  245. package/src/hooks/useAnonymousId.test.ts +189 -0
  246. package/src/hooks/useAnonymousId.ts +3 -3
  247. package/src/hooks/useAttachmentPicker.ts +12 -12
  248. package/src/hooks/useAttachmentStatus.ts +12 -16
  249. package/src/hooks/useAttachmentUpload.test.ts +632 -0
  250. package/src/hooks/useAttachmentUpload.ts +45 -54
  251. package/src/hooks/useFeedback.test.ts +376 -0
  252. package/src/hooks/useFeedback.ts +12 -14
  253. package/src/hooks/useHarkenContext.ts +4 -4
  254. package/src/hooks/useHarkenTheme.ts +30 -6
  255. package/src/index.ts +28 -52
  256. package/src/services/index.ts +3 -9
  257. package/src/services/uploadQueueService.test.ts +489 -0
  258. package/src/services/uploadQueueService.ts +40 -56
  259. package/src/services/uploadQueueStorage.test.ts +243 -0
  260. package/src/services/uploadQueueStorage.ts +7 -9
  261. package/src/storage/IdentityStore.test.ts +173 -0
  262. package/src/storage/IdentityStore.ts +4 -5
  263. package/src/storage/SecureStoreAdapter.test.ts +147 -0
  264. package/src/storage/SecureStoreAdapter.ts +1 -1
  265. package/src/storage/defaultStorage.test.ts +159 -0
  266. package/src/storage/defaultStorage.ts +6 -6
  267. package/src/storage/index.ts +5 -5
  268. package/src/storage/types.ts +1 -1
  269. package/src/theme/defaults.ts +75 -46
  270. package/src/theme/index.ts +15 -2
  271. package/src/theme/resolver.test.ts +411 -0
  272. package/src/theme/resolver.ts +446 -0
  273. package/src/theme/types.ts +453 -15
  274. package/src/types/config.ts +4 -4
  275. package/src/types/index.ts +2 -2
  276. package/src/utils/index.ts +1 -1
  277. package/src/utils/uuid.test.ts +85 -0
  278. 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/attachments';
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 = '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, containerStyle, formStyle, }) {
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 ?? 'other',
120
+ category: category ?? "other",
108
121
  attachments: enableAttachments ? getAttachmentIds() : undefined,
109
122
  });
110
123
  const uploadNote = enableAttachments && hasActiveUploads
111
- ? '\n\nAttachments are still uploading in the background.'
112
- : '';
124
+ ? "\n\nAttachments are still uploading in the background."
125
+ : "";
113
126
  if (showSuccessAlert && successMessage) {
114
- react_native_1.Alert.alert('Success', `${successMessage}${uploadNote}`, [
127
+ react_native_1.Alert.alert("Success", `${successMessage}${uploadNote}`, [
115
128
  {
116
- text: 'OK',
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 : 'Failed to submit feedback. Please try again.';
135
- react_native_1.Alert.alert('Submission Failed', errorMessage);
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: theme.colors.background,
172
+ ...(layout === "flex" ? { flex: 1 } : {}),
173
+ backgroundColor: form.background,
174
+ borderRadius: form.radius,
161
175
  };
162
- const contentStyle = {
163
- flexGrow: 1,
164
- padding: theme.spacing.lg,
176
+ const scrollContentStyle = {
177
+ ...(layout === "flex" ? { flexGrow: 1 } : {}),
178
+ padding: form.padding,
165
179
  };
166
180
  const sectionStyle = {
167
- marginBottom: theme.spacing.lg,
181
+ marginBottom: form.sectionGap,
168
182
  };
183
+ // Support deprecated formStyle prop
184
+ const effectiveContentStyle = contentStyle ?? formStyle;
169
185
  const buttonRowStyle = {
170
- flexDirection: 'row',
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={[baseContainerStyle, containerStyle, { justifyContent: 'center', alignItems: 'center' }]}>
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 === 'ios' ? 'padding' : 'height'} style={[baseContainerStyle, containerStyle]}>
185
- <react_native_1.ScrollView contentContainerStyle={[contentStyle, formStyle]} keyboardShouldPersistTaps="handled">
186
- {/* Title */}
187
- <react_native_1.View style={sectionStyle}>
188
- <ThemedText_1.ThemedText variant="title">{title}</ThemedText_1.ThemedText>
189
- </react_native_1.View>
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 ? '' : ' (optional)'}
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: 'right' }}>
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: 'center' }}>
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":"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"}
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 '../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';
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 'react';
2
- import type { ViewStyle, StyleProp, ImageStyle } from 'react-native';
3
- import type { AttachmentState } from '../hooks/useAttachmentUpload';
4
- import type { UploadStatusLabels } from './UploadStatusOverlay';
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,cAAc,CAAC,EAC7B,WAAW,EACX,OAAO,EACP,QAAQ,EACR,KAAK,EACL,cAAmB,EACnB,QAAa,EACb,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,CAuGzC"}
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 = 80, gap, showAddButton = true, disabled = false, style, addButtonLabel = 'Add', addButtonIcon = '+', addButtonStyle, emptyText = 'No attachments', renderAddButton, renderTile, tileStyle, tileImageStyle, statusLabels, getFileIcon, renderPlaceholder, }) {
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 effectiveGap = gap ?? theme.spacing.sm;
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={tileSize} style={tileStyle} imageStyle={tileImageStyle} statusLabels={statusLabels} getFileIcon={getFileIcon} renderPlaceholder={renderPlaceholder}/>);
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 && (renderAddButton ? (renderAddButton(onAdd, disabled)) : (<react_native_1.Pressable onPress={onAdd} disabled={disabled} style={({ pressed }) => [
79
- styles.addButton,
80
- {
81
- width: tileSize,
82
- height: tileSize,
83
- borderRadius: theme.radii.md,
84
- backgroundColor: pressed
85
- ? theme.colors.border
86
- : theme.colors.backgroundSecondary,
87
- borderWidth: 2,
88
- borderColor: theme.colors.border,
89
- borderStyle: 'dashed',
90
- opacity: disabled ? 0.5 : 1,
91
- },
92
- addButtonStyle,
93
- ]}>
94
- {typeof addButtonIcon === 'string' ? (<ThemedText_1.ThemedText style={[styles.addIcon, { color: theme.colors.textSecondary }]}>
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" secondary>
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: 'row',
117
- flexWrap: 'wrap',
128
+ flexDirection: "row",
129
+ flexWrap: "wrap",
118
130
  },
119
131
  addButton: {
120
- alignItems: 'center',
121
- justifyContent: 'center',
132
+ alignItems: "center",
133
+ justifyContent: "center",
122
134
  },
123
135
  addIcon: {
124
- fontSize: 28,
125
- fontWeight: '300',
126
- lineHeight: 32,
136
+ fontWeight: "300",
127
137
  },
128
138
  emptyState: {
129
- alignItems: 'center',
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":";;;;;AAsGA,wCA6HC;AAnOD,kDAA0B;AAC1B,+CAA2D;AAE3D,oCAA0C;AAC1C,6CAA0C;AAC1C,2DAAwD;AAqDxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,SAAgB,cAAc,CAAC,EAC7B,WAAW,EACX,OAAO,EACP,QAAQ,EACR,KAAK,EACL,cAAc,GAAG,EAAE,EACnB,QAAQ,GAAG,EAAE,EACb,GAAG,EACH,aAAa,GAAG,IAAI,EACpB,QAAQ,GAAG,KAAK,EAChB,KAAK,EACL,cAAc,GAAG,KAAK,EACtB,aAAa,GAAG,GAAG,EACnB,cAAc,EACd,SAAS,GAAG,gBAAgB,EAC5B,eAAe,EACf,UAAU,EACV,SAAS,EACT,cAAc,EACd,YAAY,EACZ,WAAW,EACX,iBAAiB,GACG;IACpB,MAAM,KAAK,GAAG,IAAA,sBAAc,GAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;IAE7C,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,GAAG,cAAc,CAAC;IACvD,MAAM,mBAAmB,GAAG,aAAa,IAAI,UAAU,IAAI,KAAK,CAAC;IAEjE,OAAO,CACL,CAAC,mBAAI,CACH,KAAK,CAAC,CAAC;YACL,MAAM,CAAC,SAAS;YAChB,EAAE,GAAG,EAAE,YAAY,EAAE;YACrB,KAAK;SACN,CAAC,CAEF;MAAA,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;YAC9B,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACjF,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAEpF,kCAAkC;YAClC,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CACL,CAAC,eAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAC3C;cAAA,CAAC,UAAU,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,CACpD;YAAA,EAAE,eAAK,CAAC,QAAQ,CAAC,CAClB,CAAC;YACJ,CAAC;YAED,OAAO,CACL,CAAC,qCAAiB,CAChB,GAAG,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAC7B,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CACzB,QAAQ,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAC9B,QAAQ,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAC9B,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CACxB,QAAQ,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAC9B,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CACxB,OAAO,CAAC,CAAC,WAAW,CAAC,CACrB,QAAQ,CAAC,CAAC,YAAY,CAAC,CACvB,IAAI,CAAC,CAAC,QAAQ,CAAC,CACf,KAAK,CAAC,CAAC,SAAS,CAAC,CACjB,UAAU,CAAC,CAAC,cAAc,CAAC,CAC3B,YAAY,CAAC,CAAC,YAAY,CAAC,CAC3B,WAAW,CAAC,CAAC,WAAW,CAAC,CACzB,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,EACrC,CACH,CAAC;QACJ,CAAC,CAAC,CAEF;;MAAA,CAAC,mBAAmB,IAAI,CACtB,eAAe,CAAC,CAAC,CAAC,CAChB,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CACjC,CAAC,CAAC,CAAC,CACF,CAAC,wBAAS,CACR,OAAO,CAAC,CAAC,KAAK,CAAC,CACf,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;gBACtB,MAAM,CAAC,SAAS;gBAChB;oBACE,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,QAAQ;oBAChB,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE;oBAC5B,eAAe,EAAE,OAAO;wBACtB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;wBACrB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB;oBACpC,WAAW,EAAE,CAAC;oBACd,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;oBAChC,WAAW,EAAE,QAAQ;oBACrB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAC5B;gBACD,cAAc;aACf,CAAC,CAEF;YAAA,CAAC,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,CACnC,CAAC,uBAAU,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CACzE;gBAAA,CAAC,aAAa,CAChB;cAAA,EAAE,uBAAU,CAAC,CACd,CAAC,CAAC,CAAC,CACF,aAAa,CACd,CACD;YAAA,CAAC,uBAAU,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CACrC;cAAA,CAAC,cAAc,CACjB;YAAA,EAAE,uBAAU,CACd;UAAA,EAAE,wBAAS,CAAC,CACb,CACF,CAED;;MAAA,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CACnD,CAAC,mBAAI,CACH,KAAK,CAAC,CAAC;gBACL,MAAM,CAAC,UAAU;gBACjB;oBACE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;iBAC1B;aACF,CAAC,CAEF;UAAA,CAAC,uBAAU,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CACrC;YAAA,CAAC,SAAS,CACZ;UAAA,EAAE,uBAAU,CACd;QAAA,EAAE,mBAAI,CAAC,CACR,CACH;IAAA,EAAE,mBAAI,CAAC,CACR,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,MAAM;KACjB;IACD,SAAS,EAAE;QACT,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;KACzB;IACD,OAAO,EAAE;QACP,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,EAAE;KACf;IACD,UAAU,EAAE;QACV,UAAU,EAAE,QAAQ;KACrB;CACF,CAAC,CAAC"}
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 'react';
2
- import type { ViewStyle, StyleProp } from 'react-native';
3
- export type AttachmentSource = 'camera' | 'library' | 'document';
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,CA4LlD"}
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 = 'Add Attachment', renderIcon, options: optionOverrides, cancelLabel = 'Cancel', overlayColor, sheetRadius, sheetStyle, optionStyle, }) {
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 screenHeight = react_native_1.Dimensions.get('window').height;
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: 'camera',
94
- label: optionOverrides?.camera?.label ?? 'Camera',
95
- description: optionOverrides?.camera?.description ?? 'Take a new photo',
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('camera') : <DefaultIcon emoji="📷"/>),
99
+ (renderIcon ? renderIcon("camera") : <DefaultIcon emoji="📷"/>),
99
100
  action: onTakePhoto,
100
101
  hidden: optionOverrides?.camera?.hidden ?? false,
101
102
  },
102
103
  {
103
- key: 'library',
104
- label: optionOverrides?.library?.label ?? 'Photo Library',
105
- description: optionOverrides?.library?.description ?? 'Choose from existing photos',
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('library') : <DefaultIcon emoji="🖼️"/>),
109
+ (renderIcon ? renderIcon("library") : <DefaultIcon emoji="🖼️"/>),
109
110
  action: onPickFromLibrary,
110
111
  hidden: optionOverrides?.library?.hidden ?? false,
111
112
  },
112
113
  {
113
- key: 'document',
114
- label: optionOverrides?.document?.label ?? 'Files',
115
- description: optionOverrides?.document?.description ?? 'Browse documents and files',
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('document') : <DefaultIcon emoji="📄"/>),
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 === 'ios' && !isShowingRef.current) {
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 === 'ios') {
157
+ if (react_native_1.Platform.OS === "ios") {
157
158
  return null;
158
159
  }
159
- const resolvedOverlayColor = overlayColor ?? theme.colors.overlay;
160
- const resolvedSheetRadius = sheetRadius ?? theme.radii.xl;
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: theme.colors.background,
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
- ? theme.colors.border
201
- : theme.colors.backgroundSecondary,
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 secondary>{cancelLabel}</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: 'flex-end',
245
+ justifyContent: "flex-end",
246
246
  },
247
247
  bottomSheet: {
248
248
  paddingBottom: 20,
249
249
  },
250
250
  handleContainer: {
251
- alignItems: 'center',
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: 'center',
265
+ textAlign: "center",
266
266
  },
267
267
  optionsContainer: {
268
268
  paddingHorizontal: 20,
269
269
  },
270
270
  option: {
271
- flexDirection: 'row',
272
- alignItems: 'center',
271
+ flexDirection: "row",
272
+ alignItems: "center",
273
273
  paddingVertical: 16,
274
274
  paddingHorizontal: 16,
275
275
  marginBottom: 8,
276
276
  },
277
277
  iconContainer: {
278
- width: 44,
279
- height: 44,
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: 'center',
291
+ alignItems: "center",
294
292
  marginTop: 12,
295
293
  },
296
294
  });