react-native-bug-reporter 1.0.0

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 (152) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +217 -0
  3. package/android/build.gradle +49 -0
  4. package/android/src/main/AndroidManifest.xml +11 -0
  5. package/android/src/main/java/com/bugreporter/ScreenshotDetectorModule.kt +227 -0
  6. package/android/src/main/java/com/bugreporter/ScreenshotDetectorPackage.kt +20 -0
  7. package/ios/RNBugReporterScreenshot.m +11 -0
  8. package/ios/RNBugReporterScreenshot.swift +113 -0
  9. package/lib/commonjs/BugReporterProvider.js +139 -0
  10. package/lib/commonjs/BugReporterProvider.js.map +1 -0
  11. package/lib/commonjs/collectors/appInfo.js +21 -0
  12. package/lib/commonjs/collectors/appInfo.js.map +1 -0
  13. package/lib/commonjs/collectors/collectContext.js +45 -0
  14. package/lib/commonjs/collectors/collectContext.js.map +1 -0
  15. package/lib/commonjs/collectors/deviceInfo.js +41 -0
  16. package/lib/commonjs/collectors/deviceInfo.js.map +1 -0
  17. package/lib/commonjs/collectors/networkInfo.js +33 -0
  18. package/lib/commonjs/collectors/networkInfo.js.map +1 -0
  19. package/lib/commonjs/components/BugReportAdminScreen.js +225 -0
  20. package/lib/commonjs/components/BugReportAdminScreen.js.map +1 -0
  21. package/lib/commonjs/components/BugReportModal.js +341 -0
  22. package/lib/commonjs/components/BugReportModal.js.map +1 -0
  23. package/lib/commonjs/components/ScreenshotEditor.js +466 -0
  24. package/lib/commonjs/components/ScreenshotEditor.js.map +1 -0
  25. package/lib/commonjs/components/ScreenshotPreview.js +134 -0
  26. package/lib/commonjs/components/ScreenshotPreview.js.map +1 -0
  27. package/lib/commonjs/components/SeveritySelector.js +65 -0
  28. package/lib/commonjs/components/SeveritySelector.js.map +1 -0
  29. package/lib/commonjs/context/BugReporterContext.js +24 -0
  30. package/lib/commonjs/context/BugReporterContext.js.map +1 -0
  31. package/lib/commonjs/hooks/useScreenshotDetector.js +22 -0
  32. package/lib/commonjs/hooks/useScreenshotDetector.js.map +1 -0
  33. package/lib/commonjs/index.js +87 -0
  34. package/lib/commonjs/index.js.map +1 -0
  35. package/lib/commonjs/native/ScreenshotDetector.js +72 -0
  36. package/lib/commonjs/native/ScreenshotDetector.js.map +1 -0
  37. package/lib/commonjs/navigation/screenTracker.js +47 -0
  38. package/lib/commonjs/navigation/screenTracker.js.map +1 -0
  39. package/lib/commonjs/package.json +1 -0
  40. package/lib/commonjs/services/bugReportService.js +61 -0
  41. package/lib/commonjs/services/bugReportService.js.map +1 -0
  42. package/lib/commonjs/services/supabaseService.js +166 -0
  43. package/lib/commonjs/services/supabaseService.js.map +1 -0
  44. package/lib/commonjs/theme.js +28 -0
  45. package/lib/commonjs/theme.js.map +1 -0
  46. package/lib/commonjs/types.js +35 -0
  47. package/lib/commonjs/types.js.map +1 -0
  48. package/lib/commonjs/utils/logger.js +29 -0
  49. package/lib/commonjs/utils/logger.js.map +1 -0
  50. package/lib/module/BugReporterProvider.js +134 -0
  51. package/lib/module/BugReporterProvider.js.map +1 -0
  52. package/lib/module/collectors/appInfo.js +16 -0
  53. package/lib/module/collectors/appInfo.js.map +1 -0
  54. package/lib/module/collectors/collectContext.js +41 -0
  55. package/lib/module/collectors/collectContext.js.map +1 -0
  56. package/lib/module/collectors/deviceInfo.js +37 -0
  57. package/lib/module/collectors/deviceInfo.js.map +1 -0
  58. package/lib/module/collectors/networkInfo.js +29 -0
  59. package/lib/module/collectors/networkInfo.js.map +1 -0
  60. package/lib/module/components/BugReportAdminScreen.js +221 -0
  61. package/lib/module/components/BugReportAdminScreen.js.map +1 -0
  62. package/lib/module/components/BugReportModal.js +337 -0
  63. package/lib/module/components/BugReportModal.js.map +1 -0
  64. package/lib/module/components/ScreenshotEditor.js +461 -0
  65. package/lib/module/components/ScreenshotEditor.js.map +1 -0
  66. package/lib/module/components/ScreenshotPreview.js +130 -0
  67. package/lib/module/components/ScreenshotPreview.js.map +1 -0
  68. package/lib/module/components/SeveritySelector.js +61 -0
  69. package/lib/module/components/SeveritySelector.js.map +1 -0
  70. package/lib/module/context/BugReporterContext.js +19 -0
  71. package/lib/module/context/BugReporterContext.js.map +1 -0
  72. package/lib/module/hooks/useScreenshotDetector.js +18 -0
  73. package/lib/module/hooks/useScreenshotDetector.js.map +1 -0
  74. package/lib/module/index.js +32 -0
  75. package/lib/module/index.js.map +1 -0
  76. package/lib/module/native/ScreenshotDetector.js +68 -0
  77. package/lib/module/native/ScreenshotDetector.js.map +1 -0
  78. package/lib/module/navigation/screenTracker.js +41 -0
  79. package/lib/module/navigation/screenTracker.js.map +1 -0
  80. package/lib/module/services/bugReportService.js +57 -0
  81. package/lib/module/services/bugReportService.js.map +1 -0
  82. package/lib/module/services/supabaseService.js +159 -0
  83. package/lib/module/services/supabaseService.js.map +1 -0
  84. package/lib/module/theme.js +23 -0
  85. package/lib/module/theme.js.map +1 -0
  86. package/lib/module/types.js +31 -0
  87. package/lib/module/types.js.map +1 -0
  88. package/lib/module/utils/logger.js +25 -0
  89. package/lib/module/utils/logger.js.map +1 -0
  90. package/lib/typescript/src/BugReporterProvider.d.ts +18 -0
  91. package/lib/typescript/src/BugReporterProvider.d.ts.map +1 -0
  92. package/lib/typescript/src/collectors/appInfo.d.ts +6 -0
  93. package/lib/typescript/src/collectors/appInfo.d.ts.map +1 -0
  94. package/lib/typescript/src/collectors/collectContext.d.ts +7 -0
  95. package/lib/typescript/src/collectors/collectContext.d.ts.map +1 -0
  96. package/lib/typescript/src/collectors/deviceInfo.d.ts +7 -0
  97. package/lib/typescript/src/collectors/deviceInfo.d.ts.map +1 -0
  98. package/lib/typescript/src/collectors/networkInfo.d.ts +6 -0
  99. package/lib/typescript/src/collectors/networkInfo.d.ts.map +1 -0
  100. package/lib/typescript/src/components/BugReportAdminScreen.d.ts +11 -0
  101. package/lib/typescript/src/components/BugReportAdminScreen.d.ts.map +1 -0
  102. package/lib/typescript/src/components/BugReportModal.d.ts +20 -0
  103. package/lib/typescript/src/components/BugReportModal.d.ts.map +1 -0
  104. package/lib/typescript/src/components/ScreenshotEditor.d.ts +16 -0
  105. package/lib/typescript/src/components/ScreenshotEditor.d.ts.map +1 -0
  106. package/lib/typescript/src/components/ScreenshotPreview.d.ts +11 -0
  107. package/lib/typescript/src/components/ScreenshotPreview.d.ts.map +1 -0
  108. package/lib/typescript/src/components/SeveritySelector.d.ts +10 -0
  109. package/lib/typescript/src/components/SeveritySelector.d.ts.map +1 -0
  110. package/lib/typescript/src/context/BugReporterContext.d.ts +20 -0
  111. package/lib/typescript/src/context/BugReporterContext.d.ts.map +1 -0
  112. package/lib/typescript/src/hooks/useScreenshotDetector.d.ts +7 -0
  113. package/lib/typescript/src/hooks/useScreenshotDetector.d.ts.map +1 -0
  114. package/lib/typescript/src/index.d.ts +26 -0
  115. package/lib/typescript/src/index.d.ts.map +1 -0
  116. package/lib/typescript/src/native/ScreenshotDetector.d.ts +15 -0
  117. package/lib/typescript/src/native/ScreenshotDetector.d.ts.map +1 -0
  118. package/lib/typescript/src/navigation/screenTracker.d.ts +7 -0
  119. package/lib/typescript/src/navigation/screenTracker.d.ts.map +1 -0
  120. package/lib/typescript/src/services/bugReportService.d.ts +17 -0
  121. package/lib/typescript/src/services/bugReportService.d.ts.map +1 -0
  122. package/lib/typescript/src/services/supabaseService.d.ts +38 -0
  123. package/lib/typescript/src/services/supabaseService.d.ts.map +1 -0
  124. package/lib/typescript/src/theme.d.ts +7 -0
  125. package/lib/typescript/src/theme.d.ts.map +1 -0
  126. package/lib/typescript/src/types.d.ts +144 -0
  127. package/lib/typescript/src/types.d.ts.map +1 -0
  128. package/lib/typescript/src/utils/logger.d.ts +7 -0
  129. package/lib/typescript/src/utils/logger.d.ts.map +1 -0
  130. package/package.json +100 -0
  131. package/react-native-bug-reporter.podspec +22 -0
  132. package/react-native.config.js +18 -0
  133. package/src/BugReporterProvider.tsx +178 -0
  134. package/src/collectors/appInfo.ts +15 -0
  135. package/src/collectors/collectContext.ts +47 -0
  136. package/src/collectors/deviceInfo.ts +51 -0
  137. package/src/collectors/networkInfo.ts +31 -0
  138. package/src/components/BugReportAdminScreen.tsx +160 -0
  139. package/src/components/BugReportModal.tsx +315 -0
  140. package/src/components/ScreenshotEditor.tsx +410 -0
  141. package/src/components/ScreenshotPreview.tsx +98 -0
  142. package/src/components/SeveritySelector.tsx +59 -0
  143. package/src/context/BugReporterContext.ts +29 -0
  144. package/src/hooks/useScreenshotDetector.ts +20 -0
  145. package/src/index.ts +51 -0
  146. package/src/native/ScreenshotDetector.ts +87 -0
  147. package/src/navigation/screenTracker.ts +40 -0
  148. package/src/services/bugReportService.ts +81 -0
  149. package/src/services/supabaseService.ts +195 -0
  150. package/src/theme.ts +23 -0
  151. package/src/types.ts +156 -0
  152. package/src/utils/logger.ts +24 -0
@@ -0,0 +1,461 @@
1
+ "use strict";
2
+
3
+ import { Fragment, useMemo, useRef, useState } from 'react';
4
+ import { ActivityIndicator, Image, Modal, PanResponder, Platform, StatusBar, StyleSheet, Text, TextInput, TouchableOpacity, View } from 'react-native';
5
+ import Svg, { Circle, Line, Path, Polygon, Text as SvgText } from 'react-native-svg';
6
+ import { captureRef } from 'react-native-view-shot';
7
+ import { logger } from '../utils/logger';
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ const COLORS = ['#ef4444', '#f59e0b', '#22c55e', '#3b82f6', '#ffffff', '#111827'];
10
+ const STROKE = 4;
11
+ const ARROW_HEAD = 16;
12
+ const TEXT_SIZE = 22;
13
+
14
+ /**
15
+ * Full-screen screenshot annotation editor. Lets the reporter draw on the
16
+ * captured screenshot to point at the bug — freehand pen, arrows, points, and
17
+ * text labels — then flattens everything into a single PNG via view-shot.
18
+ */
19
+ export function ScreenshotEditor({
20
+ screenshot,
21
+ theme,
22
+ onCancel,
23
+ onSave
24
+ }) {
25
+ const [tool, setTool] = useState('pen');
26
+ const [color, setColor] = useState(COLORS[0]);
27
+ const [elements, setElements] = useState([]);
28
+ const [draft, setDraft] = useState(null);
29
+ const [saving, setSaving] = useState(false);
30
+ const [textPrompt, setTextPrompt] = useState(null);
31
+ const canvasRef = useRef(null);
32
+ // Refs so the (stable) PanResponder always sees the latest tool/color.
33
+ const toolRef = useRef(tool);
34
+ toolRef.current = tool;
35
+ const colorRef = useRef(color);
36
+ colorRef.current = color;
37
+ const draftRef = useRef(null);
38
+ const panResponder = useMemo(() => PanResponder.create({
39
+ onStartShouldSetPanResponder: () => true,
40
+ onMoveShouldSetPanResponder: () => true,
41
+ onPanResponderGrant: e => {
42
+ const {
43
+ locationX: x,
44
+ locationY: y
45
+ } = e.nativeEvent;
46
+ const t = toolRef.current;
47
+ const c = colorRef.current;
48
+ if (t === 'pen') {
49
+ draftRef.current = {
50
+ kind: 'path',
51
+ d: `M${x} ${y}`,
52
+ color: c,
53
+ width: STROKE
54
+ };
55
+ setDraft(draftRef.current);
56
+ } else if (t === 'arrow') {
57
+ draftRef.current = {
58
+ kind: 'arrow',
59
+ x1: x,
60
+ y1: y,
61
+ x2: x,
62
+ y2: y,
63
+ color: c,
64
+ width: STROKE
65
+ };
66
+ setDraft(draftRef.current);
67
+ } else if (t === 'point') {
68
+ setElements(prev => [...prev, {
69
+ kind: 'point',
70
+ x,
71
+ y,
72
+ color: c
73
+ }]);
74
+ } else if (t === 'text') {
75
+ setTextPrompt({
76
+ x,
77
+ y,
78
+ value: ''
79
+ });
80
+ }
81
+ },
82
+ onPanResponderMove: e => {
83
+ const {
84
+ locationX: x,
85
+ locationY: y
86
+ } = e.nativeEvent;
87
+ const d = draftRef.current;
88
+ if (!d) return;
89
+ if (d.kind === 'path') {
90
+ d.d += ` L${x} ${y}`;
91
+ setDraft({
92
+ ...d
93
+ });
94
+ } else if (d.kind === 'arrow') {
95
+ d.x2 = x;
96
+ d.y2 = y;
97
+ setDraft({
98
+ ...d
99
+ });
100
+ }
101
+ },
102
+ onPanResponderRelease: () => {
103
+ const d = draftRef.current;
104
+ if (d) {
105
+ setElements(prev => [...prev, d]);
106
+ draftRef.current = null;
107
+ setDraft(null);
108
+ }
109
+ }
110
+ }), []);
111
+ const undo = () => setElements(prev => prev.slice(0, -1));
112
+ const clear = () => {
113
+ setElements([]);
114
+ setDraft(null);
115
+ draftRef.current = null;
116
+ };
117
+ const commitText = () => {
118
+ if (textPrompt && textPrompt.value.trim()) {
119
+ setElements(prev => [...prev, {
120
+ kind: 'text',
121
+ x: textPrompt.x,
122
+ y: textPrompt.y,
123
+ text: textPrompt.value.trim(),
124
+ color
125
+ }]);
126
+ }
127
+ setTextPrompt(null);
128
+ };
129
+ const handleSave = async () => {
130
+ // Nothing drawn — just keep the original.
131
+ if (elements.length === 0) {
132
+ onSave(screenshot.uri);
133
+ return;
134
+ }
135
+ setSaving(true);
136
+ try {
137
+ // Let the SVG/layout settle before snapshotting (Android needs a tick).
138
+ await new Promise(res => setTimeout(() => res(), 150));
139
+ let uri = await captureRef(canvasRef, {
140
+ format: 'png',
141
+ quality: 1,
142
+ result: 'tmpfile'
143
+ });
144
+ if (uri && !uri.startsWith('file://') && !uri.startsWith('content://')) {
145
+ uri = `file://${uri}`;
146
+ }
147
+ onSave(uri || screenshot.uri);
148
+ } catch (e) {
149
+ logger.warn('failed to flatten annotated screenshot', e);
150
+ onSave(screenshot.uri); // fall back to the un-annotated image
151
+ } finally {
152
+ setSaving(false);
153
+ }
154
+ };
155
+ const all = draft ? [...elements, draft] : elements;
156
+ return /*#__PURE__*/_jsx(Modal, {
157
+ visible: true,
158
+ animationType: "slide",
159
+ onRequestClose: onCancel,
160
+ children: /*#__PURE__*/_jsxs(View, {
161
+ style: [styles.container, {
162
+ backgroundColor: '#000'
163
+ }],
164
+ children: [/*#__PURE__*/_jsxs(View, {
165
+ style: styles.topBar,
166
+ children: [/*#__PURE__*/_jsx(TouchableOpacity, {
167
+ onPress: onCancel,
168
+ style: styles.barBtn,
169
+ disabled: saving,
170
+ children: /*#__PURE__*/_jsx(Text, {
171
+ style: styles.barText,
172
+ children: "Cancel"
173
+ })
174
+ }), /*#__PURE__*/_jsx(Text, {
175
+ style: styles.barTitle,
176
+ children: "Mark the bug"
177
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
178
+ onPress: handleSave,
179
+ disabled: saving,
180
+ style: [styles.saveBtn, {
181
+ backgroundColor: theme.primaryColor
182
+ }],
183
+ children: saving ? /*#__PURE__*/_jsx(ActivityIndicator, {
184
+ color: "#fff",
185
+ size: "small"
186
+ }) : /*#__PURE__*/_jsx(Text, {
187
+ style: styles.saveText,
188
+ children: "\u2713 Save"
189
+ })
190
+ })]
191
+ }), /*#__PURE__*/_jsx(View, {
192
+ style: styles.canvasWrap,
193
+ children: /*#__PURE__*/_jsxs(View, {
194
+ ref: canvasRef,
195
+ collapsable: false,
196
+ style: styles.canvas,
197
+ children: [/*#__PURE__*/_jsx(Image, {
198
+ source: {
199
+ uri: screenshot.uri
200
+ },
201
+ style: StyleSheet.absoluteFill,
202
+ resizeMode: "contain"
203
+ }), /*#__PURE__*/_jsx(Svg, {
204
+ style: StyleSheet.absoluteFill,
205
+ ...panResponder.panHandlers,
206
+ children: all.map((el, i) => renderEl(el, i))
207
+ })]
208
+ })
209
+ }), /*#__PURE__*/_jsx(View, {
210
+ style: styles.colorRow,
211
+ children: COLORS.map(c => /*#__PURE__*/_jsx(TouchableOpacity, {
212
+ onPress: () => setColor(c),
213
+ style: [styles.swatch, {
214
+ backgroundColor: c
215
+ }, color === c && styles.swatchActive]
216
+ }, c))
217
+ }), /*#__PURE__*/_jsxs(View, {
218
+ style: styles.toolRow,
219
+ children: [/*#__PURE__*/_jsx(ToolButton, {
220
+ label: "\u270F\uFE0F Pen",
221
+ active: tool === 'pen',
222
+ onPress: () => setTool('pen')
223
+ }), /*#__PURE__*/_jsx(ToolButton, {
224
+ label: "\u27B4 Arrow",
225
+ active: tool === 'arrow',
226
+ onPress: () => setTool('arrow')
227
+ }), /*#__PURE__*/_jsx(ToolButton, {
228
+ label: "\u25CF Point",
229
+ active: tool === 'point',
230
+ onPress: () => setTool('point')
231
+ }), /*#__PURE__*/_jsx(ToolButton, {
232
+ label: "T Text",
233
+ active: tool === 'text',
234
+ onPress: () => setTool('text')
235
+ }), /*#__PURE__*/_jsx(ToolButton, {
236
+ label: "\u21BA Undo",
237
+ onPress: undo
238
+ }), /*#__PURE__*/_jsx(ToolButton, {
239
+ label: "\uD83D\uDDD1 Clear",
240
+ onPress: clear
241
+ })]
242
+ }), textPrompt && /*#__PURE__*/_jsxs(View, {
243
+ style: styles.textPrompt,
244
+ children: [/*#__PURE__*/_jsx(TextInput, {
245
+ autoFocus: true,
246
+ value: textPrompt.value,
247
+ onChangeText: v => setTextPrompt(p => p ? {
248
+ ...p,
249
+ value: v
250
+ } : p),
251
+ onSubmitEditing: commitText,
252
+ placeholder: "Type a label\u2026",
253
+ placeholderTextColor: "#888",
254
+ style: styles.textInput
255
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
256
+ onPress: commitText,
257
+ style: styles.textAdd,
258
+ children: /*#__PURE__*/_jsx(Text, {
259
+ style: styles.textAddLabel,
260
+ children: "Add"
261
+ })
262
+ })]
263
+ })]
264
+ })
265
+ });
266
+ }
267
+ function renderEl(el, key) {
268
+ switch (el.kind) {
269
+ case 'path':
270
+ return /*#__PURE__*/_jsx(Path, {
271
+ d: el.d,
272
+ stroke: el.color,
273
+ strokeWidth: el.width,
274
+ fill: "none",
275
+ strokeLinecap: "round",
276
+ strokeLinejoin: "round"
277
+ }, key);
278
+ case 'arrow':
279
+ {
280
+ const angle = Math.atan2(el.y2 - el.y1, el.x2 - el.x1);
281
+ const a1 = angle - Math.PI / 6;
282
+ const a2 = angle + Math.PI / 6;
283
+ const head = `${el.x2},${el.y2} ${el.x2 - ARROW_HEAD * Math.cos(a1)},${el.y2 - ARROW_HEAD * Math.sin(a1)} ${el.x2 - ARROW_HEAD * Math.cos(a2)},${el.y2 - ARROW_HEAD * Math.sin(a2)}`;
284
+ return /*#__PURE__*/_jsxs(Fragment, {
285
+ children: [/*#__PURE__*/_jsx(Line, {
286
+ x1: el.x1,
287
+ y1: el.y1,
288
+ x2: el.x2,
289
+ y2: el.y2,
290
+ stroke: el.color,
291
+ strokeWidth: el.width,
292
+ strokeLinecap: "round"
293
+ }), /*#__PURE__*/_jsx(Polygon, {
294
+ points: head,
295
+ fill: el.color
296
+ })]
297
+ }, key);
298
+ }
299
+ case 'point':
300
+ return /*#__PURE__*/_jsx(Circle, {
301
+ cx: el.x,
302
+ cy: el.y,
303
+ r: 9,
304
+ fill: "none",
305
+ stroke: el.color,
306
+ strokeWidth: 4
307
+ }, key);
308
+ case 'text':
309
+ return /*#__PURE__*/_jsx(SvgText, {
310
+ x: el.x,
311
+ y: el.y,
312
+ fill: el.color,
313
+ fontSize: TEXT_SIZE,
314
+ fontWeight: "bold",
315
+ stroke: "#00000055",
316
+ strokeWidth: 0.5,
317
+ children: el.text
318
+ }, key);
319
+ default:
320
+ return null;
321
+ }
322
+ }
323
+ function ToolButton({
324
+ label,
325
+ active,
326
+ onPress
327
+ }) {
328
+ return /*#__PURE__*/_jsx(TouchableOpacity, {
329
+ onPress: onPress,
330
+ style: [styles.toolBtn, active && styles.toolBtnActive],
331
+ children: /*#__PURE__*/_jsx(Text, {
332
+ style: [styles.toolLabel, active && styles.toolLabelActive],
333
+ children: label
334
+ })
335
+ });
336
+ }
337
+ const styles = StyleSheet.create({
338
+ container: {
339
+ flex: 1
340
+ },
341
+ topBar: {
342
+ flexDirection: 'row',
343
+ alignItems: 'center',
344
+ justifyContent: 'space-between',
345
+ paddingHorizontal: 14,
346
+ paddingTop: (Platform.OS === 'android' ? StatusBar.currentHeight ?? 24 : 50) + 8,
347
+ paddingBottom: 10
348
+ },
349
+ barBtn: {
350
+ padding: 6,
351
+ minWidth: 64
352
+ },
353
+ barText: {
354
+ color: '#fff',
355
+ fontSize: 16
356
+ },
357
+ barTitle: {
358
+ color: '#fff',
359
+ fontSize: 16,
360
+ fontWeight: '600'
361
+ },
362
+ saveBtn: {
363
+ minWidth: 84,
364
+ paddingVertical: 9,
365
+ paddingHorizontal: 16,
366
+ borderRadius: 10,
367
+ alignItems: 'center',
368
+ justifyContent: 'center'
369
+ },
370
+ saveText: {
371
+ color: '#fff',
372
+ fontSize: 15,
373
+ fontWeight: '800'
374
+ },
375
+ canvasWrap: {
376
+ flex: 1,
377
+ alignItems: 'center',
378
+ justifyContent: 'center'
379
+ },
380
+ canvas: {
381
+ flex: 1,
382
+ width: '100%',
383
+ backgroundColor: '#000'
384
+ },
385
+ colorRow: {
386
+ flexDirection: 'row',
387
+ justifyContent: 'center',
388
+ gap: 12,
389
+ paddingVertical: 12
390
+ },
391
+ swatch: {
392
+ width: 28,
393
+ height: 28,
394
+ borderRadius: 14,
395
+ borderWidth: 2,
396
+ borderColor: '#444'
397
+ },
398
+ swatchActive: {
399
+ borderColor: '#fff',
400
+ transform: [{
401
+ scale: 1.15
402
+ }]
403
+ },
404
+ toolRow: {
405
+ flexDirection: 'row',
406
+ flexWrap: 'wrap',
407
+ justifyContent: 'center',
408
+ gap: 8,
409
+ paddingHorizontal: 10,
410
+ paddingBottom: 34,
411
+ paddingTop: 4
412
+ },
413
+ toolBtn: {
414
+ paddingVertical: 9,
415
+ paddingHorizontal: 12,
416
+ borderRadius: 10,
417
+ backgroundColor: '#1c1f26'
418
+ },
419
+ toolBtnActive: {
420
+ backgroundColor: '#2563eb'
421
+ },
422
+ toolLabel: {
423
+ color: '#cbd2dc',
424
+ fontSize: 13,
425
+ fontWeight: '600'
426
+ },
427
+ toolLabelActive: {
428
+ color: '#fff'
429
+ },
430
+ textPrompt: {
431
+ position: 'absolute',
432
+ bottom: 0,
433
+ left: 0,
434
+ right: 0,
435
+ flexDirection: 'row',
436
+ gap: 8,
437
+ padding: 12,
438
+ paddingBottom: 28,
439
+ backgroundColor: '#14161c'
440
+ },
441
+ textInput: {
442
+ flex: 1,
443
+ backgroundColor: '#0b0c10',
444
+ color: '#fff',
445
+ borderRadius: 8,
446
+ paddingHorizontal: 12,
447
+ paddingVertical: 10,
448
+ fontSize: 15
449
+ },
450
+ textAdd: {
451
+ backgroundColor: '#2563eb',
452
+ borderRadius: 8,
453
+ paddingHorizontal: 18,
454
+ justifyContent: 'center'
455
+ },
456
+ textAddLabel: {
457
+ color: '#fff',
458
+ fontWeight: '700'
459
+ }
460
+ });
461
+ //# sourceMappingURL=ScreenshotEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Fragment","useMemo","useRef","useState","ActivityIndicator","Image","Modal","PanResponder","Platform","StatusBar","StyleSheet","Text","TextInput","TouchableOpacity","View","Svg","Circle","Line","Path","Polygon","SvgText","captureRef","logger","jsx","_jsx","jsxs","_jsxs","COLORS","STROKE","ARROW_HEAD","TEXT_SIZE","ScreenshotEditor","screenshot","theme","onCancel","onSave","tool","setTool","color","setColor","elements","setElements","draft","setDraft","saving","setSaving","textPrompt","setTextPrompt","canvasRef","toolRef","current","colorRef","draftRef","panResponder","create","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","onPanResponderGrant","e","locationX","x","locationY","y","nativeEvent","t","c","kind","d","width","x1","y1","x2","y2","prev","value","onPanResponderMove","onPanResponderRelease","undo","slice","clear","commitText","trim","text","handleSave","length","uri","Promise","res","setTimeout","format","quality","result","startsWith","warn","all","visible","animationType","onRequestClose","children","style","styles","container","backgroundColor","topBar","onPress","barBtn","disabled","barText","barTitle","saveBtn","primaryColor","size","saveText","canvasWrap","ref","collapsable","canvas","source","absoluteFill","resizeMode","panHandlers","map","el","i","renderEl","colorRow","swatch","swatchActive","toolRow","ToolButton","label","active","autoFocus","onChangeText","v","p","onSubmitEditing","placeholder","placeholderTextColor","textInput","textAdd","textAddLabel","key","stroke","strokeWidth","fill","strokeLinecap","strokeLinejoin","angle","Math","atan2","a1","PI","a2","head","cos","sin","points","cx","cy","r","fontSize","fontWeight","toolBtn","toolBtnActive","toolLabel","toolLabelActive","flex","flexDirection","alignItems","justifyContent","paddingHorizontal","paddingTop","OS","currentHeight","paddingBottom","padding","minWidth","paddingVertical","borderRadius","gap","height","borderWidth","borderColor","transform","scale","flexWrap","position","bottom","left","right"],"sourceRoot":"../../../src","sources":["components/ScreenshotEditor.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+
3
+ import { Image, StyleSheet, Text, TouchableOpacity, View } from 'react-native';
4
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
+ export function ScreenshotPreview({
6
+ screenshot,
7
+ onRemove,
8
+ onEdit,
9
+ theme
10
+ }) {
11
+ if (!screenshot?.uri) {
12
+ return /*#__PURE__*/_jsx(View, {
13
+ style: [styles.empty, {
14
+ borderColor: theme.borderColor
15
+ }],
16
+ children: /*#__PURE__*/_jsx(Text, {
17
+ style: [styles.emptyText, {
18
+ color: theme.mutedColor
19
+ }],
20
+ children: "No screenshot attached"
21
+ })
22
+ });
23
+ }
24
+ return /*#__PURE__*/_jsxs(View, {
25
+ style: [styles.container, {
26
+ borderColor: theme.borderColor
27
+ }],
28
+ children: [/*#__PURE__*/_jsx(Image, {
29
+ source: {
30
+ uri: screenshot.uri
31
+ },
32
+ style: styles.image,
33
+ resizeMode: "contain"
34
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
35
+ accessibilityRole: "button",
36
+ accessibilityLabel: "Remove screenshot",
37
+ onPress: onRemove,
38
+ style: styles.removeBtn,
39
+ children: /*#__PURE__*/_jsx(Text, {
40
+ style: styles.removeText,
41
+ children: "\u2715"
42
+ })
43
+ }), onEdit && /*#__PURE__*/_jsx(TouchableOpacity, {
44
+ accessibilityRole: "button",
45
+ accessibilityLabel: "Annotate screenshot",
46
+ onPress: onEdit,
47
+ style: [styles.editBtn, {
48
+ backgroundColor: theme.primaryColor
49
+ }],
50
+ children: /*#__PURE__*/_jsx(Text, {
51
+ style: styles.editText,
52
+ children: "\u270F\uFE0F Mark the bug"
53
+ })
54
+ }), /*#__PURE__*/_jsx(View, {
55
+ style: styles.badge,
56
+ children: /*#__PURE__*/_jsx(Text, {
57
+ style: styles.badgeText,
58
+ children: "Attached"
59
+ })
60
+ })]
61
+ });
62
+ }
63
+ const styles = StyleSheet.create({
64
+ container: {
65
+ height: 180,
66
+ borderRadius: 12,
67
+ borderWidth: 1,
68
+ overflow: 'hidden',
69
+ backgroundColor: '#0b0c10'
70
+ },
71
+ image: {
72
+ width: '100%',
73
+ height: '100%'
74
+ },
75
+ empty: {
76
+ height: 80,
77
+ borderRadius: 12,
78
+ borderWidth: 1,
79
+ borderStyle: 'dashed',
80
+ alignItems: 'center',
81
+ justifyContent: 'center'
82
+ },
83
+ emptyText: {
84
+ fontSize: 13
85
+ },
86
+ removeBtn: {
87
+ position: 'absolute',
88
+ top: 8,
89
+ right: 8,
90
+ width: 28,
91
+ height: 28,
92
+ borderRadius: 14,
93
+ backgroundColor: 'rgba(0,0,0,0.6)',
94
+ alignItems: 'center',
95
+ justifyContent: 'center'
96
+ },
97
+ removeText: {
98
+ color: '#fff',
99
+ fontSize: 14,
100
+ fontWeight: '700'
101
+ },
102
+ editBtn: {
103
+ position: 'absolute',
104
+ bottom: 8,
105
+ right: 8,
106
+ paddingHorizontal: 12,
107
+ paddingVertical: 6,
108
+ borderRadius: 8
109
+ },
110
+ editText: {
111
+ color: '#fff',
112
+ fontSize: 12,
113
+ fontWeight: '700'
114
+ },
115
+ badge: {
116
+ position: 'absolute',
117
+ bottom: 8,
118
+ left: 8,
119
+ paddingHorizontal: 8,
120
+ paddingVertical: 3,
121
+ borderRadius: 6,
122
+ backgroundColor: 'rgba(37,99,235,0.9)'
123
+ },
124
+ badgeText: {
125
+ color: '#fff',
126
+ fontSize: 11,
127
+ fontWeight: '600'
128
+ }
129
+ });
130
+ //# sourceMappingURL=ScreenshotPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Image","StyleSheet","Text","TouchableOpacity","View","jsx","_jsx","jsxs","_jsxs","ScreenshotPreview","screenshot","onRemove","onEdit","theme","uri","style","styles","empty","borderColor","children","emptyText","color","mutedColor","container","source","image","resizeMode","accessibilityRole","accessibilityLabel","onPress","removeBtn","removeText","editBtn","backgroundColor","primaryColor","editText","badge","badgeText","create","height","borderRadius","borderWidth","overflow","width","borderStyle","alignItems","justifyContent","fontSize","position","top","right","fontWeight","bottom","paddingHorizontal","paddingVertical","left"],"sourceRoot":"../../../src","sources":["components/ScreenshotPreview.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
4
+ import { SEVERITIES } from '../types';
5
+ import { SEVERITY_COLORS } from '../theme';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ const LABELS = {
8
+ low: 'Low',
9
+ medium: 'Medium',
10
+ high: 'High',
11
+ critical: 'Critical'
12
+ };
13
+ export function SeveritySelector({
14
+ value,
15
+ onChange,
16
+ theme
17
+ }) {
18
+ return /*#__PURE__*/_jsx(View, {
19
+ style: styles.row,
20
+ children: SEVERITIES.map(sev => {
21
+ const selected = sev === value;
22
+ const color = SEVERITY_COLORS[sev];
23
+ return /*#__PURE__*/_jsx(TouchableOpacity, {
24
+ accessibilityRole: "button",
25
+ accessibilityState: {
26
+ selected
27
+ },
28
+ onPress: () => onChange(sev),
29
+ style: [styles.chip, {
30
+ borderColor: selected ? color : theme.borderColor
31
+ }, selected && {
32
+ backgroundColor: color
33
+ }],
34
+ children: /*#__PURE__*/_jsx(Text, {
35
+ style: [styles.label, {
36
+ color: selected ? '#fff' : theme.mutedColor
37
+ }],
38
+ children: LABELS[sev]
39
+ })
40
+ }, sev);
41
+ })
42
+ });
43
+ }
44
+ const styles = StyleSheet.create({
45
+ row: {
46
+ flexDirection: 'row',
47
+ gap: 8
48
+ },
49
+ chip: {
50
+ flex: 1,
51
+ paddingVertical: 10,
52
+ borderRadius: 10,
53
+ borderWidth: 1.5,
54
+ alignItems: 'center'
55
+ },
56
+ label: {
57
+ fontSize: 13,
58
+ fontWeight: '600'
59
+ }
60
+ });
61
+ //# sourceMappingURL=SeveritySelector.js.map