@harkenapp/sdk-react-native 0.0.1-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/README.md +67 -0
  2. package/app.plugin.cjs +135 -0
  3. package/app.plugin.js +1 -0
  4. package/dist/api/client.d.ts +67 -0
  5. package/dist/api/client.d.ts.map +1 -0
  6. package/dist/api/client.js +163 -0
  7. package/dist/api/client.js.map +1 -0
  8. package/dist/api/errors.d.ts +46 -0
  9. package/dist/api/errors.d.ts.map +1 -0
  10. package/dist/api/errors.js +72 -0
  11. package/dist/api/errors.js.map +1 -0
  12. package/dist/api/index.d.ts +7 -0
  13. package/dist/api/index.d.ts.map +1 -0
  14. package/dist/api/index.js +20 -0
  15. package/dist/api/index.js.map +1 -0
  16. package/dist/api/retry.d.ts +29 -0
  17. package/dist/api/retry.d.ts.map +1 -0
  18. package/dist/api/retry.js +74 -0
  19. package/dist/api/retry.js.map +1 -0
  20. package/dist/attachments/FeedbackSheet.d.ts +88 -0
  21. package/dist/attachments/FeedbackSheet.d.ts.map +1 -0
  22. package/dist/attachments/FeedbackSheet.js +250 -0
  23. package/dist/attachments/FeedbackSheet.js.map +1 -0
  24. package/dist/attachments/index.d.ts +20 -0
  25. package/dist/attachments/index.d.ts.map +1 -0
  26. package/dist/attachments/index.js +40 -0
  27. package/dist/attachments/index.js.map +1 -0
  28. package/dist/components/AttachmentGrid.d.ts +94 -0
  29. package/dist/components/AttachmentGrid.d.ts.map +1 -0
  30. package/dist/components/AttachmentGrid.js +132 -0
  31. package/dist/components/AttachmentGrid.js.map +1 -0
  32. package/dist/components/AttachmentPicker.d.ts +98 -0
  33. package/dist/components/AttachmentPicker.d.ts.map +1 -0
  34. package/dist/components/AttachmentPicker.js +297 -0
  35. package/dist/components/AttachmentPicker.js.map +1 -0
  36. package/dist/components/AttachmentPreview.d.ts +78 -0
  37. package/dist/components/AttachmentPreview.d.ts.map +1 -0
  38. package/dist/components/AttachmentPreview.js +133 -0
  39. package/dist/components/AttachmentPreview.js.map +1 -0
  40. package/dist/components/CategorySelector.d.ts +77 -0
  41. package/dist/components/CategorySelector.d.ts.map +1 -0
  42. package/dist/components/CategorySelector.js +117 -0
  43. package/dist/components/CategorySelector.js.map +1 -0
  44. package/dist/components/FeedbackForm.d.ts +50 -0
  45. package/dist/components/FeedbackForm.d.ts.map +1 -0
  46. package/dist/components/FeedbackForm.js +141 -0
  47. package/dist/components/FeedbackForm.js.map +1 -0
  48. package/dist/components/FeedbackSheet.d.ts +75 -0
  49. package/dist/components/FeedbackSheet.d.ts.map +1 -0
  50. package/dist/components/FeedbackSheet.js +215 -0
  51. package/dist/components/FeedbackSheet.js.map +1 -0
  52. package/dist/components/ThemedButton.d.ts +23 -0
  53. package/dist/components/ThemedButton.d.ts.map +1 -0
  54. package/dist/components/ThemedButton.js +77 -0
  55. package/dist/components/ThemedButton.js.map +1 -0
  56. package/dist/components/ThemedText.d.ts +16 -0
  57. package/dist/components/ThemedText.d.ts.map +1 -0
  58. package/dist/components/ThemedText.js +44 -0
  59. package/dist/components/ThemedText.js.map +1 -0
  60. package/dist/components/ThemedTextInput.d.ts +13 -0
  61. package/dist/components/ThemedTextInput.d.ts.map +1 -0
  62. package/dist/components/ThemedTextInput.js +76 -0
  63. package/dist/components/ThemedTextInput.js.map +1 -0
  64. package/dist/components/UploadStatusOverlay.d.ts +82 -0
  65. package/dist/components/UploadStatusOverlay.d.ts.map +1 -0
  66. package/dist/components/UploadStatusOverlay.js +319 -0
  67. package/dist/components/UploadStatusOverlay.js.map +1 -0
  68. package/dist/components/index.d.ts +19 -0
  69. package/dist/components/index.d.ts.map +1 -0
  70. package/dist/components/index.js +28 -0
  71. package/dist/components/index.js.map +1 -0
  72. package/dist/context/HarkenContext.d.ts +62 -0
  73. package/dist/context/HarkenContext.d.ts.map +1 -0
  74. package/dist/context/HarkenContext.js +128 -0
  75. package/dist/context/HarkenContext.js.map +1 -0
  76. package/dist/context/index.d.ts +3 -0
  77. package/dist/context/index.d.ts.map +1 -0
  78. package/dist/context/index.js +7 -0
  79. package/dist/context/index.js.map +1 -0
  80. package/dist/domain/index.d.ts +3 -0
  81. package/dist/domain/index.d.ts.map +1 -0
  82. package/dist/domain/index.js +7 -0
  83. package/dist/domain/index.js.map +1 -0
  84. package/dist/domain/upload-queue.d.ts +116 -0
  85. package/dist/domain/upload-queue.d.ts.map +1 -0
  86. package/dist/domain/upload-queue.js +34 -0
  87. package/dist/domain/upload-queue.js.map +1 -0
  88. package/dist/hooks/index.d.ts +6 -0
  89. package/dist/hooks/index.d.ts.map +1 -0
  90. package/dist/hooks/index.js +16 -0
  91. package/dist/hooks/index.js.map +1 -0
  92. package/dist/hooks/useAnonymousId.d.ts +28 -0
  93. package/dist/hooks/useAnonymousId.d.ts.map +1 -0
  94. package/dist/hooks/useAnonymousId.js +59 -0
  95. package/dist/hooks/useAnonymousId.js.map +1 -0
  96. package/dist/hooks/useAttachmentPicker.d.ts +84 -0
  97. package/dist/hooks/useAttachmentPicker.d.ts.map +1 -0
  98. package/dist/hooks/useAttachmentPicker.js +181 -0
  99. package/dist/hooks/useAttachmentPicker.js.map +1 -0
  100. package/dist/hooks/useAttachmentStatus.d.ts +51 -0
  101. package/dist/hooks/useAttachmentStatus.d.ts.map +1 -0
  102. package/dist/hooks/useAttachmentStatus.js +69 -0
  103. package/dist/hooks/useAttachmentStatus.js.map +1 -0
  104. package/dist/hooks/useAttachmentUpload.d.ts +101 -0
  105. package/dist/hooks/useAttachmentUpload.d.ts.map +1 -0
  106. package/dist/hooks/useAttachmentUpload.js +293 -0
  107. package/dist/hooks/useAttachmentUpload.js.map +1 -0
  108. package/dist/hooks/useFeedback.d.ts +55 -0
  109. package/dist/hooks/useFeedback.d.ts.map +1 -0
  110. package/dist/hooks/useFeedback.js +96 -0
  111. package/dist/hooks/useFeedback.js.map +1 -0
  112. package/dist/hooks/useHarkenContext.d.ts +25 -0
  113. package/dist/hooks/useHarkenContext.d.ts.map +1 -0
  114. package/dist/hooks/useHarkenContext.js +35 -0
  115. package/dist/hooks/useHarkenContext.js.map +1 -0
  116. package/dist/hooks/useHarkenTheme.d.ts +26 -0
  117. package/dist/hooks/useHarkenTheme.d.ts.map +1 -0
  118. package/dist/hooks/useHarkenTheme.js +36 -0
  119. package/dist/hooks/useHarkenTheme.js.map +1 -0
  120. package/dist/index.d.ts +49 -0
  121. package/dist/index.d.ts.map +1 -0
  122. package/dist/index.js +91 -0
  123. package/dist/index.js.map +1 -0
  124. package/dist/services/index.d.ts +4 -0
  125. package/dist/services/index.d.ts.map +1 -0
  126. package/dist/services/index.js +9 -0
  127. package/dist/services/index.js.map +1 -0
  128. package/dist/services/uploadQueueService.d.ts +193 -0
  129. package/dist/services/uploadQueueService.d.ts.map +1 -0
  130. package/dist/services/uploadQueueService.js +623 -0
  131. package/dist/services/uploadQueueService.js.map +1 -0
  132. package/dist/services/uploadQueueStorage.d.ts +30 -0
  133. package/dist/services/uploadQueueStorage.d.ts.map +1 -0
  134. package/dist/services/uploadQueueStorage.js +77 -0
  135. package/dist/services/uploadQueueStorage.js.map +1 -0
  136. package/dist/storage/IdentityStore.d.ts +38 -0
  137. package/dist/storage/IdentityStore.d.ts.map +1 -0
  138. package/dist/storage/IdentityStore.js +83 -0
  139. package/dist/storage/IdentityStore.js.map +1 -0
  140. package/dist/storage/SecureStoreAdapter.d.ts +28 -0
  141. package/dist/storage/SecureStoreAdapter.d.ts.map +1 -0
  142. package/dist/storage/SecureStoreAdapter.js +52 -0
  143. package/dist/storage/SecureStoreAdapter.js.map +1 -0
  144. package/dist/storage/defaultStorage.d.ts +20 -0
  145. package/dist/storage/defaultStorage.d.ts.map +1 -0
  146. package/dist/storage/defaultStorage.js +131 -0
  147. package/dist/storage/defaultStorage.js.map +1 -0
  148. package/dist/storage/index.d.ts +6 -0
  149. package/dist/storage/index.d.ts.map +1 -0
  150. package/dist/storage/index.js +13 -0
  151. package/dist/storage/index.js.map +1 -0
  152. package/dist/storage/types.d.ts +32 -0
  153. package/dist/storage/types.d.ts.map +1 -0
  154. package/dist/storage/types.js +11 -0
  155. package/dist/storage/types.js.map +1 -0
  156. package/dist/theme/defaults.d.ts +43 -0
  157. package/dist/theme/defaults.d.ts.map +1 -0
  158. package/dist/theme/defaults.js +128 -0
  159. package/dist/theme/defaults.js.map +1 -0
  160. package/dist/theme/index.d.ts +3 -0
  161. package/dist/theme/index.d.ts.map +1 -0
  162. package/dist/theme/index.js +14 -0
  163. package/dist/theme/index.js.map +1 -0
  164. package/dist/theme/types.d.ts +136 -0
  165. package/dist/theme/types.d.ts.map +1 -0
  166. package/dist/theme/types.js +3 -0
  167. package/dist/theme/types.js.map +1 -0
  168. package/dist/types/config.d.ts +100 -0
  169. package/dist/types/config.d.ts.map +1 -0
  170. package/dist/types/config.js +3 -0
  171. package/dist/types/config.js.map +1 -0
  172. package/dist/types/index.d.ts +3 -0
  173. package/dist/types/index.d.ts.map +1 -0
  174. package/dist/types/index.js +3 -0
  175. package/dist/types/index.js.map +1 -0
  176. package/dist/types/openapi.d.ts +601 -0
  177. package/dist/types/openapi.d.ts.map +1 -0
  178. package/dist/types/openapi.js +7 -0
  179. package/dist/types/openapi.js.map +1 -0
  180. package/dist/utils/index.d.ts +2 -0
  181. package/dist/utils/index.d.ts.map +1 -0
  182. package/dist/utils/index.js +6 -0
  183. package/dist/utils/index.js.map +1 -0
  184. package/dist/utils/uuid.d.ts +10 -0
  185. package/dist/utils/uuid.d.ts.map +1 -0
  186. package/dist/utils/uuid.js +60 -0
  187. package/dist/utils/uuid.js.map +1 -0
  188. package/package.json +124 -0
  189. package/src/@types/expo-file-system-legacy.d.ts +13 -0
  190. package/src/api/client.ts +250 -0
  191. package/src/api/errors.ts +84 -0
  192. package/src/api/index.ts +15 -0
  193. package/src/api/retry.ts +99 -0
  194. package/src/attachments/FeedbackSheet.tsx +400 -0
  195. package/src/attachments/index.ts +70 -0
  196. package/src/components/AttachmentGrid.tsx +247 -0
  197. package/src/components/AttachmentPicker.tsx +391 -0
  198. package/src/components/AttachmentPreview.tsx +210 -0
  199. package/src/components/CategorySelector.tsx +174 -0
  200. package/src/components/FeedbackForm.tsx +216 -0
  201. package/src/components/FeedbackSheet.tsx +321 -0
  202. package/src/components/ThemedButton.tsx +127 -0
  203. package/src/components/ThemedText.tsx +65 -0
  204. package/src/components/ThemedTextInput.tsx +65 -0
  205. package/src/components/UploadStatusOverlay.tsx +440 -0
  206. package/src/components/index.ts +39 -0
  207. package/src/context/HarkenContext.tsx +129 -0
  208. package/src/context/index.ts +2 -0
  209. package/src/domain/index.ts +12 -0
  210. package/src/domain/upload-queue.ts +131 -0
  211. package/src/hooks/index.ts +10 -0
  212. package/src/hooks/useAnonymousId.ts +68 -0
  213. package/src/hooks/useAttachmentPicker.ts +243 -0
  214. package/src/hooks/useAttachmentStatus.ts +86 -0
  215. package/src/hooks/useAttachmentUpload.ts +370 -0
  216. package/src/hooks/useFeedback.ts +139 -0
  217. package/src/hooks/useHarkenContext.ts +35 -0
  218. package/src/hooks/useHarkenTheme.ts +36 -0
  219. package/src/index.ts +168 -0
  220. package/src/services/index.ts +11 -0
  221. package/src/services/uploadQueueService.ts +727 -0
  222. package/src/services/uploadQueueStorage.ts +78 -0
  223. package/src/storage/IdentityStore.ts +89 -0
  224. package/src/storage/SecureStoreAdapter.ts +59 -0
  225. package/src/storage/defaultStorage.ts +109 -0
  226. package/src/storage/index.ts +5 -0
  227. package/src/storage/types.ts +34 -0
  228. package/src/theme/defaults.ts +151 -0
  229. package/src/theme/index.ts +23 -0
  230. package/src/theme/types.ts +157 -0
  231. package/src/types/config.ts +112 -0
  232. package/src/types/index.ts +10 -0
  233. package/src/types/openapi.ts +601 -0
  234. package/src/utils/index.ts +1 -0
  235. package/src/utils/uuid.ts +77 -0
@@ -0,0 +1,319 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.UploadStatusOverlay = UploadStatusOverlay;
7
+ const react_1 = __importDefault(require("react"));
8
+ const react_native_1 = require("react-native");
9
+ const hooks_1 = require("../hooks");
10
+ const ThemedText_1 = require("./ThemedText");
11
+ const domain_1 = require("../domain");
12
+ /**
13
+ * Overlay component showing upload status on attachments.
14
+ *
15
+ * Shows:
16
+ * - Progress bar during upload
17
+ * - Spinner during confirmation
18
+ * - Checkmark when complete
19
+ * - Error with retry button when failed
20
+ *
21
+ * @example
22
+ * ```tsx
23
+ * // Basic usage
24
+ * <UploadStatusOverlay
25
+ * phase={attachment.phase}
26
+ * progress={attachment.progress}
27
+ * onRetry={() => retryAttachment(attachment.attachmentId)}
28
+ * onRemove={() => removeAttachment(attachment.attachmentId)}
29
+ * />
30
+ *
31
+ * // With custom labels
32
+ * <UploadStatusOverlay
33
+ * phase={phase}
34
+ * progress={progress}
35
+ * labels={{
36
+ * retry: 'Try Again',
37
+ * remove: 'Delete',
38
+ * confirming: 'Processing...',
39
+ * }}
40
+ * />
41
+ *
42
+ * // With custom progress renderer
43
+ * <UploadStatusOverlay
44
+ * phase={phase}
45
+ * progress={progress}
46
+ * renderProgress={(p) => <CustomProgressBar value={p} />}
47
+ * />
48
+ * ```
49
+ */
50
+ function UploadStatusOverlay({ phase, progress, error, onRetry, onRemove, style, labels, renderProgress, renderError, renderSuccess, }) {
51
+ const theme = (0, hooks_1.useHarkenTheme)();
52
+ // Merge labels with defaults
53
+ const resolvedLabels = {
54
+ retry: labels?.retry ?? 'Retry',
55
+ remove: labels?.remove ?? 'Remove',
56
+ cancel: labels?.cancel ?? 'Cancel',
57
+ confirming: labels?.confirming ?? 'Confirming...',
58
+ waiting: labels?.waiting ?? 'Waiting...',
59
+ uploadFailed: labels?.uploadFailed ?? 'Upload failed',
60
+ };
61
+ // Completed state - just show a subtle checkmark
62
+ if (phase === domain_1.UploadPhase.COMPLETED) {
63
+ if (renderSuccess) {
64
+ return (<react_native_1.View style={[styles.overlay, style]}>{renderSuccess(onRemove)}</react_native_1.View>);
65
+ }
66
+ return (<react_native_1.View style={[styles.overlay, styles.completedOverlay, style]}>
67
+ <react_native_1.View style={[
68
+ styles.badge,
69
+ {
70
+ backgroundColor: theme.colors.success,
71
+ borderRadius: theme.radii.full,
72
+ },
73
+ ]}>
74
+ <ThemedText_1.ThemedText style={styles.badgeIcon}>✓</ThemedText_1.ThemedText>
75
+ </react_native_1.View>
76
+ {onRemove && (<react_native_1.Pressable onPress={onRemove} style={[
77
+ styles.removeButton,
78
+ {
79
+ backgroundColor: theme.colors.background,
80
+ borderRadius: theme.radii.full,
81
+ },
82
+ ]}>
83
+ <ThemedText_1.ThemedText style={styles.removeIcon}>×</ThemedText_1.ThemedText>
84
+ </react_native_1.Pressable>)}
85
+ </react_native_1.View>);
86
+ }
87
+ // Failed state - show error and retry
88
+ if (phase === domain_1.UploadPhase.FAILED) {
89
+ const errorMessage = error ?? resolvedLabels.uploadFailed;
90
+ if (renderError) {
91
+ return (<react_native_1.View style={[styles.overlay, style]}>
92
+ {renderError(errorMessage, onRetry, onRemove)}
93
+ </react_native_1.View>);
94
+ }
95
+ return (<react_native_1.View style={[
96
+ styles.overlay,
97
+ styles.fullOverlay,
98
+ { backgroundColor: theme.colors.overlayDark },
99
+ style,
100
+ ]}>
101
+ <ThemedText_1.ThemedText style={styles.errorIcon}>⚠️</ThemedText_1.ThemedText>
102
+ <ThemedText_1.ThemedText style={styles.errorText} numberOfLines={2}>
103
+ {errorMessage}
104
+ </ThemedText_1.ThemedText>
105
+ <react_native_1.View style={styles.buttonRow}>
106
+ {onRetry && (<react_native_1.Pressable onPress={onRetry} style={[
107
+ styles.actionButton,
108
+ {
109
+ backgroundColor: theme.colors.primary,
110
+ borderRadius: theme.radii.sm,
111
+ },
112
+ ]}>
113
+ <ThemedText_1.ThemedText style={styles.actionButtonText}>
114
+ {resolvedLabels.retry}
115
+ </ThemedText_1.ThemedText>
116
+ </react_native_1.Pressable>)}
117
+ {onRemove && (<react_native_1.Pressable onPress={onRemove} style={[
118
+ styles.actionButton,
119
+ {
120
+ backgroundColor: theme.colors.error,
121
+ borderRadius: theme.radii.sm,
122
+ },
123
+ ]}>
124
+ <ThemedText_1.ThemedText style={styles.actionButtonText}>
125
+ {resolvedLabels.remove}
126
+ </ThemedText_1.ThemedText>
127
+ </react_native_1.Pressable>)}
128
+ </react_native_1.View>
129
+ </react_native_1.View>);
130
+ }
131
+ // Uploading state - show progress bar
132
+ if (phase === domain_1.UploadPhase.UPLOADING) {
133
+ const progressPercent = Math.round(progress * 100);
134
+ if (renderProgress) {
135
+ return (<react_native_1.View style={[
136
+ styles.overlay,
137
+ styles.fullOverlay,
138
+ { backgroundColor: theme.colors.overlay },
139
+ style,
140
+ ]}>
141
+ {renderProgress(progress)}
142
+ </react_native_1.View>);
143
+ }
144
+ return (<react_native_1.View style={[
145
+ styles.overlay,
146
+ styles.fullOverlay,
147
+ { backgroundColor: theme.colors.overlay },
148
+ style,
149
+ ]}>
150
+ <ThemedText_1.ThemedText style={styles.progressText}>{progressPercent}%</ThemedText_1.ThemedText>
151
+ <react_native_1.View style={[
152
+ styles.progressBarContainer,
153
+ {
154
+ backgroundColor: 'rgba(255,255,255,0.3)',
155
+ borderRadius: theme.radii.sm,
156
+ },
157
+ ]}>
158
+ <react_native_1.View style={[
159
+ styles.progressBarFill,
160
+ {
161
+ width: `${progressPercent}%`,
162
+ backgroundColor: theme.colors.primary,
163
+ borderRadius: theme.radii.sm,
164
+ },
165
+ ]}/>
166
+ </react_native_1.View>
167
+ {onRemove && (<react_native_1.Pressable onPress={onRemove} style={[
168
+ styles.cancelButton,
169
+ {
170
+ borderRadius: theme.radii.sm,
171
+ },
172
+ ]}>
173
+ <ThemedText_1.ThemedText style={styles.cancelText}>
174
+ {resolvedLabels.cancel}
175
+ </ThemedText_1.ThemedText>
176
+ </react_native_1.Pressable>)}
177
+ </react_native_1.View>);
178
+ }
179
+ // Confirming state - show spinner
180
+ if (phase === domain_1.UploadPhase.CONFIRMING) {
181
+ return (<react_native_1.View style={[
182
+ styles.overlay,
183
+ styles.fullOverlay,
184
+ { backgroundColor: theme.colors.overlay },
185
+ style,
186
+ ]}>
187
+ <react_native_1.ActivityIndicator color="#fff" size="small"/>
188
+ <ThemedText_1.ThemedText style={styles.confirmingText}>
189
+ {resolvedLabels.confirming}
190
+ </ThemedText_1.ThemedText>
191
+ </react_native_1.View>);
192
+ }
193
+ // Queued state - show waiting indicator
194
+ if (phase === domain_1.UploadPhase.QUEUED) {
195
+ return (<react_native_1.View style={[
196
+ styles.overlay,
197
+ styles.fullOverlay,
198
+ { backgroundColor: theme.colors.overlay },
199
+ style,
200
+ ]}>
201
+ <react_native_1.ActivityIndicator color="#fff" size="small"/>
202
+ <ThemedText_1.ThemedText style={styles.queuedText}>
203
+ {resolvedLabels.waiting}
204
+ </ThemedText_1.ThemedText>
205
+ {onRemove && (<react_native_1.Pressable onPress={onRemove} style={[
206
+ styles.cancelButton,
207
+ {
208
+ borderRadius: theme.radii.sm,
209
+ },
210
+ ]}>
211
+ <ThemedText_1.ThemedText style={styles.cancelText}>
212
+ {resolvedLabels.cancel}
213
+ </ThemedText_1.ThemedText>
214
+ </react_native_1.Pressable>)}
215
+ </react_native_1.View>);
216
+ }
217
+ return null;
218
+ }
219
+ const styles = react_native_1.StyleSheet.create({
220
+ overlay: {
221
+ ...react_native_1.StyleSheet.absoluteFillObject,
222
+ },
223
+ fullOverlay: {
224
+ alignItems: 'center',
225
+ justifyContent: 'center',
226
+ padding: 8,
227
+ },
228
+ completedOverlay: {
229
+ alignItems: 'flex-end',
230
+ justifyContent: 'space-between',
231
+ flexDirection: 'row',
232
+ padding: 4,
233
+ },
234
+ badge: {
235
+ width: 24,
236
+ height: 24,
237
+ alignItems: 'center',
238
+ justifyContent: 'center',
239
+ },
240
+ badgeIcon: {
241
+ color: '#fff',
242
+ fontSize: 14,
243
+ fontWeight: '700',
244
+ },
245
+ removeButton: {
246
+ width: 24,
247
+ height: 24,
248
+ alignItems: 'center',
249
+ justifyContent: 'center',
250
+ shadowColor: '#000',
251
+ shadowOffset: { width: 0, height: 1 },
252
+ shadowOpacity: 0.2,
253
+ shadowRadius: 2,
254
+ elevation: 2,
255
+ },
256
+ removeIcon: {
257
+ fontSize: 18,
258
+ fontWeight: '700',
259
+ lineHeight: 20,
260
+ },
261
+ progressText: {
262
+ color: '#fff',
263
+ fontSize: 16,
264
+ fontWeight: '600',
265
+ marginBottom: 8,
266
+ },
267
+ progressBarContainer: {
268
+ width: '80%',
269
+ height: 6,
270
+ overflow: 'hidden',
271
+ },
272
+ progressBarFill: {
273
+ height: '100%',
274
+ },
275
+ cancelButton: {
276
+ marginTop: 8,
277
+ paddingHorizontal: 12,
278
+ paddingVertical: 4,
279
+ backgroundColor: 'rgba(255,255,255,0.2)',
280
+ },
281
+ cancelText: {
282
+ color: '#fff',
283
+ fontSize: 12,
284
+ },
285
+ confirmingText: {
286
+ color: '#fff',
287
+ fontSize: 12,
288
+ marginTop: 4,
289
+ },
290
+ queuedText: {
291
+ color: '#fff',
292
+ fontSize: 12,
293
+ marginTop: 4,
294
+ },
295
+ errorIcon: {
296
+ fontSize: 24,
297
+ marginBottom: 4,
298
+ },
299
+ errorText: {
300
+ color: '#fff',
301
+ fontSize: 11,
302
+ textAlign: 'center',
303
+ marginBottom: 8,
304
+ },
305
+ buttonRow: {
306
+ flexDirection: 'row',
307
+ gap: 8,
308
+ },
309
+ actionButton: {
310
+ paddingHorizontal: 12,
311
+ paddingVertical: 6,
312
+ },
313
+ actionButtonText: {
314
+ color: '#fff',
315
+ fontSize: 12,
316
+ fontWeight: '600',
317
+ },
318
+ });
319
+ //# sourceMappingURL=UploadStatusOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploadStatusOverlay.js","sourceRoot":"","sources":["../../src/components/UploadStatusOverlay.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export { ThemedText } from './ThemedText';
2
+ export type { ThemedTextProps, TextVariant } from './ThemedText';
3
+ export { ThemedTextInput } from './ThemedTextInput';
4
+ export type { ThemedTextInputProps } from './ThemedTextInput';
5
+ export { ThemedButton } from './ThemedButton';
6
+ export type { ThemedButtonProps, ButtonVariant } from './ThemedButton';
7
+ export { CategorySelector, DEFAULT_CATEGORIES } from './CategorySelector';
8
+ export type { CategorySelectorProps, CategoryOption } from './CategorySelector';
9
+ export { FeedbackForm } from './FeedbackForm';
10
+ export type { FeedbackFormProps, FeedbackFormData } from './FeedbackForm';
11
+ export { AttachmentPicker } from './AttachmentPicker';
12
+ export type { AttachmentPickerProps, AttachmentSource, PickerOptionConfig, } from './AttachmentPicker';
13
+ export { UploadStatusOverlay } from './UploadStatusOverlay';
14
+ export type { UploadStatusOverlayProps, UploadStatusLabels, } from './UploadStatusOverlay';
15
+ export { AttachmentPreview } from './AttachmentPreview';
16
+ export type { AttachmentPreviewProps } from './AttachmentPreview';
17
+ export { AttachmentGrid } from './AttachmentGrid';
18
+ export type { AttachmentGridProps } from './AttachmentGrid';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGvE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEhF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAM1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EACV,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EACV,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AttachmentGrid = exports.AttachmentPreview = exports.UploadStatusOverlay = exports.AttachmentPicker = exports.FeedbackForm = exports.DEFAULT_CATEGORIES = exports.CategorySelector = exports.ThemedButton = exports.ThemedTextInput = exports.ThemedText = void 0;
4
+ // Base themed components
5
+ var ThemedText_1 = require("./ThemedText");
6
+ Object.defineProperty(exports, "ThemedText", { enumerable: true, get: function () { return ThemedText_1.ThemedText; } });
7
+ var ThemedTextInput_1 = require("./ThemedTextInput");
8
+ Object.defineProperty(exports, "ThemedTextInput", { enumerable: true, get: function () { return ThemedTextInput_1.ThemedTextInput; } });
9
+ var ThemedButton_1 = require("./ThemedButton");
10
+ Object.defineProperty(exports, "ThemedButton", { enumerable: true, get: function () { return ThemedButton_1.ThemedButton; } });
11
+ // Feedback components
12
+ var CategorySelector_1 = require("./CategorySelector");
13
+ Object.defineProperty(exports, "CategorySelector", { enumerable: true, get: function () { return CategorySelector_1.CategorySelector; } });
14
+ Object.defineProperty(exports, "DEFAULT_CATEGORIES", { enumerable: true, get: function () { return CategorySelector_1.DEFAULT_CATEGORIES; } });
15
+ var FeedbackForm_1 = require("./FeedbackForm");
16
+ Object.defineProperty(exports, "FeedbackForm", { enumerable: true, get: function () { return FeedbackForm_1.FeedbackForm; } });
17
+ // Note: FeedbackSheet is exported from the main entry point (comes from attachments module)
18
+ // to provide full attachment support by default.
19
+ // Attachment components
20
+ var AttachmentPicker_1 = require("./AttachmentPicker");
21
+ Object.defineProperty(exports, "AttachmentPicker", { enumerable: true, get: function () { return AttachmentPicker_1.AttachmentPicker; } });
22
+ var UploadStatusOverlay_1 = require("./UploadStatusOverlay");
23
+ Object.defineProperty(exports, "UploadStatusOverlay", { enumerable: true, get: function () { return UploadStatusOverlay_1.UploadStatusOverlay; } });
24
+ var AttachmentPreview_1 = require("./AttachmentPreview");
25
+ Object.defineProperty(exports, "AttachmentPreview", { enumerable: true, get: function () { return AttachmentPreview_1.AttachmentPreview; } });
26
+ var AttachmentGrid_1 = require("./AttachmentGrid");
27
+ Object.defineProperty(exports, "AttachmentGrid", { enumerable: true, get: function () { return AttachmentGrid_1.AttachmentGrid; } });
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":";;;AAAA,yBAAyB;AACzB,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AAGnB,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AAGxB,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AAGrB,sBAAsB;AACtB,uDAA0E;AAAjE,oHAAA,gBAAgB,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AAG7C,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AAGrB,4FAA4F;AAC5F,iDAAiD;AAEjD,wBAAwB;AACxB,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AAOzB,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAM5B,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAG1B,mDAAkD;AAAzC,gHAAA,cAAc,OAAA"}
@@ -0,0 +1,62 @@
1
+ import React from 'react';
2
+ import type { HarkenTheme, ThemeMode } from '../theme';
3
+ import type { HarkenConfig, HarkenProviderProps } from '../types';
4
+ import { IdentityStore } from '../storage';
5
+ import { HarkenClient } from '../api/client';
6
+ /**
7
+ * Context value provided by HarkenProvider.
8
+ */
9
+ export interface HarkenContextValue {
10
+ /** The resolved theme based on mode and overrides */
11
+ theme: HarkenTheme;
12
+ /** Current theme mode */
13
+ themeMode: ThemeMode;
14
+ /** Whether dark mode is currently active */
15
+ isDarkMode: boolean;
16
+ /** SDK configuration */
17
+ config: HarkenConfig;
18
+ /** Identity store for anonymous ID management */
19
+ identityStore: IdentityStore;
20
+ /** API client instance */
21
+ client: HarkenClient;
22
+ }
23
+ /**
24
+ * React context for Harken SDK state.
25
+ * @internal
26
+ */
27
+ export declare const HarkenContext: React.Context<HarkenContextValue | null>;
28
+ /**
29
+ * Provider component that configures the Harken SDK.
30
+ *
31
+ * Wrap your app with this provider to enable Harken feedback components.
32
+ * By default, uses expo-secure-store for persistent anonymous ID storage
33
+ * (falls back to in-memory storage if not available).
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * import { HarkenProvider, FeedbackSheet } from '@harkenapp/sdk-react-native';
38
+ *
39
+ * function App() {
40
+ * return (
41
+ * <HarkenProvider config={{ publishableKey: 'pk_live_xxxx' }}>
42
+ * <FeedbackSheet />
43
+ * </HarkenProvider>
44
+ * );
45
+ * }
46
+ * ```
47
+ *
48
+ * @example
49
+ * ```tsx
50
+ * // With custom storage implementation
51
+ * import { HarkenProvider, createSecureStoreAdapter } from '@harkenapp/sdk-react-native';
52
+ * import * as SecureStore from 'expo-secure-store';
53
+ *
54
+ * const storage = createSecureStoreAdapter(SecureStore);
55
+ *
56
+ * <HarkenProvider config={{ publishableKey: 'pk_live_xxxx' }} storage={storage}>
57
+ * <YourApp />
58
+ * </HarkenProvider>
59
+ * ```
60
+ */
61
+ export declare function HarkenProvider({ config, themeMode, lightTheme: lightOverrides, darkTheme: darkOverrides, storage, children, }: HarkenProviderProps): React.JSX.Element;
62
+ //# sourceMappingURL=HarkenContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HarkenContext.d.ts","sourceRoot":"","sources":["../../src/context/HarkenContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiC,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,aAAa,EAAwB,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,KAAK,EAAE,WAAW,CAAC;IACnB,yBAAyB;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,wBAAwB;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,iDAAiD;IACjD,aAAa,EAAE,aAAa,CAAC;IAC7B,0BAA0B;IAC1B,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,0CAAiD,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,SAAoB,EACpB,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,aAAa,EACxB,OAAO,EACP,QAAQ,GACT,EAAE,mBAAmB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAwDzC"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.HarkenContext = void 0;
37
+ exports.HarkenProvider = HarkenProvider;
38
+ const react_1 = __importStar(require("react"));
39
+ const react_native_1 = require("react-native");
40
+ const theme_1 = require("../theme");
41
+ const storage_1 = require("../storage");
42
+ const client_1 = require("../api/client");
43
+ /**
44
+ * React context for Harken SDK state.
45
+ * @internal
46
+ */
47
+ exports.HarkenContext = (0, react_1.createContext)(null);
48
+ /**
49
+ * Provider component that configures the Harken SDK.
50
+ *
51
+ * Wrap your app with this provider to enable Harken feedback components.
52
+ * By default, uses expo-secure-store for persistent anonymous ID storage
53
+ * (falls back to in-memory storage if not available).
54
+ *
55
+ * @example
56
+ * ```tsx
57
+ * import { HarkenProvider, FeedbackSheet } from '@harkenapp/sdk-react-native';
58
+ *
59
+ * function App() {
60
+ * return (
61
+ * <HarkenProvider config={{ publishableKey: 'pk_live_xxxx' }}>
62
+ * <FeedbackSheet />
63
+ * </HarkenProvider>
64
+ * );
65
+ * }
66
+ * ```
67
+ *
68
+ * @example
69
+ * ```tsx
70
+ * // With custom storage implementation
71
+ * import { HarkenProvider, createSecureStoreAdapter } from '@harkenapp/sdk-react-native';
72
+ * import * as SecureStore from 'expo-secure-store';
73
+ *
74
+ * const storage = createSecureStoreAdapter(SecureStore);
75
+ *
76
+ * <HarkenProvider config={{ publishableKey: 'pk_live_xxxx' }} storage={storage}>
77
+ * <YourApp />
78
+ * </HarkenProvider>
79
+ * ```
80
+ */
81
+ function HarkenProvider({ config, themeMode = 'system', lightTheme: lightOverrides, darkTheme: darkOverrides, storage, children, }) {
82
+ // Get system color scheme
83
+ const systemColorScheme = (0, react_native_1.useColorScheme)();
84
+ // Determine if dark mode should be active
85
+ const isDarkMode = (0, react_1.useMemo)(() => {
86
+ if (themeMode === 'dark')
87
+ return true;
88
+ if (themeMode === 'light')
89
+ return false;
90
+ // 'system' mode - follow device preference
91
+ return systemColorScheme === 'dark';
92
+ }, [themeMode, systemColorScheme]);
93
+ // Build the resolved theme
94
+ const theme = (0, react_1.useMemo)(() => {
95
+ const baseTheme = isDarkMode ? theme_1.darkTheme : theme_1.lightTheme;
96
+ const overrides = isDarkMode ? darkOverrides : lightOverrides;
97
+ return (0, theme_1.createTheme)(baseTheme, overrides);
98
+ }, [isDarkMode, lightOverrides, darkOverrides]);
99
+ // Create identity store (memoized to persist across re-renders)
100
+ // Uses expo-secure-store by default if available, otherwise falls back to memory
101
+ const identityStore = (0, react_1.useMemo)(() => {
102
+ const storageImpl = storage ?? (0, storage_1.createDefaultStorage)();
103
+ return new storage_1.IdentityStore(storageImpl);
104
+ }, [storage]);
105
+ // Create API client (memoized)
106
+ const client = (0, react_1.useMemo)(() => {
107
+ return new client_1.HarkenClient({
108
+ publishableKey: config.publishableKey,
109
+ userToken: config.userToken,
110
+ baseUrl: config.apiBaseUrl,
111
+ });
112
+ }, [config.publishableKey, config.userToken, config.apiBaseUrl]);
113
+ // Note: Upload queue service initialization has been moved to the attachments module.
114
+ // When using attachments, the service is initialized when useAttachmentUpload is first called.
115
+ // Memoize the context value
116
+ const contextValue = (0, react_1.useMemo)(() => ({
117
+ theme,
118
+ themeMode,
119
+ isDarkMode,
120
+ config,
121
+ identityStore,
122
+ client,
123
+ }), [theme, themeMode, isDarkMode, config, identityStore, client]);
124
+ return (<exports.HarkenContext.Provider value={contextValue}>
125
+ {children}
126
+ </exports.HarkenContext.Provider>);
127
+ }
128
+ //# sourceMappingURL=HarkenContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HarkenContext.js","sourceRoot":"","sources":["../../src/context/HarkenContext.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiEA,wCA+DC;AAhID,+CAAsD;AACtD,+CAA8C;AAE9C,oCAA8D;AAE9D,wCAAiE;AACjE,0CAA6C;AAoB7C;;;GAGG;AACU,QAAA,aAAa,GAAG,IAAA,qBAAa,EAA4B,IAAI,CAAC,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,SAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,SAAS,GAAG,QAAQ,EACpB,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,aAAa,EACxB,OAAO,EACP,QAAQ,GACY;IACpB,0BAA0B;IAC1B,MAAM,iBAAiB,GAAG,IAAA,6BAAc,GAAE,CAAC;IAE3C,0CAA0C;IAC1C,MAAM,UAAU,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC9B,IAAI,SAAS,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QACtC,IAAI,SAAS,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QACxC,2CAA2C;QAC3C,OAAO,iBAAiB,KAAK,MAAM,CAAC;IACtC,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEnC,2BAA2B;IAC3B,MAAM,KAAK,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACzB,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,iBAAS,CAAC,CAAC,CAAC,kBAAU,CAAC;QACtD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC;QAC9D,OAAO,IAAA,mBAAW,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;IAEhD,gEAAgE;IAChE,iFAAiF;IACjF,MAAM,aAAa,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACjC,MAAM,WAAW,GAAG,OAAO,IAAI,IAAA,8BAAoB,GAAE,CAAC;QACtD,OAAO,IAAI,uBAAa,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,+BAA+B;IAC/B,MAAM,MAAM,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC1B,OAAO,IAAI,qBAAY,CAAC;YACtB,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,UAAU;SAC3B,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjE,sFAAsF;IACtF,+FAA+F;IAE/F,4BAA4B;IAC5B,MAAM,YAAY,GAAG,IAAA,eAAO,EAC1B,GAAG,EAAE,CAAC,CAAC;QACL,KAAK;QACL,SAAS;QACT,UAAU;QACV,MAAM;QACN,aAAa;QACb,MAAM;KACP,CAAC,EACF,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAC9D,CAAC;IAEF,OAAO,CACL,CAAC,qBAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAC1C;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,qBAAa,CAAC,QAAQ,CAAC,CAC1B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { HarkenProvider, HarkenContext } from './HarkenContext';
2
+ export type { HarkenContextValue } from './HarkenContext';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HarkenContext = exports.HarkenProvider = void 0;
4
+ var HarkenContext_1 = require("./HarkenContext");
5
+ Object.defineProperty(exports, "HarkenProvider", { enumerable: true, get: function () { return HarkenContext_1.HarkenProvider; } });
6
+ Object.defineProperty(exports, "HarkenContext", { enumerable: true, get: function () { return HarkenContext_1.HarkenContext; } });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":";;;AAAA,iDAAgE;AAAvD,+GAAA,cAAc,OAAA;AAAE,8GAAA,aAAa,OAAA"}
@@ -0,0 +1,3 @@
1
+ export { UploadPhase, DEFAULT_UPLOAD_RETRY_CONFIG, } from './upload-queue';
2
+ export type { QueueItem, QueueStatus, UploadProgress, PersistedQueue, UploadRetryConfig, } from './upload-queue';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,2BAA2B,GAC5B,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_UPLOAD_RETRY_CONFIG = exports.UploadPhase = void 0;
4
+ var upload_queue_1 = require("./upload-queue");
5
+ Object.defineProperty(exports, "UploadPhase", { enumerable: true, get: function () { return upload_queue_1.UploadPhase; } });
6
+ Object.defineProperty(exports, "DEFAULT_UPLOAD_RETRY_CONFIG", { enumerable: true, get: function () { return upload_queue_1.DEFAULT_UPLOAD_RETRY_CONFIG; } });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":";;;AAAA,+CAGwB;AAFtB,2GAAA,WAAW,OAAA;AACX,2HAAA,2BAA2B,OAAA"}