@bbearai/react-native 0.5.4 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +366 -198
- package/dist/index.mjs +346 -178
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -11746,6 +11746,8 @@ var BugBearClient = class {
|
|
|
11746
11746
|
title: report.title || this.generateTitle(report),
|
|
11747
11747
|
description: report.description,
|
|
11748
11748
|
severity: report.severity,
|
|
11749
|
+
category: report.category,
|
|
11750
|
+
// Bug category (ui, performance, crash, etc.)
|
|
11749
11751
|
failed_at_step: report.failedAtStep,
|
|
11750
11752
|
voice_audio_url: report.voiceAudioUrl,
|
|
11751
11753
|
voice_transcript: report.voiceTranscript,
|
|
@@ -13361,8 +13363,8 @@ function BugBearProvider({ config, children, appVersion, enabled = true }) {
|
|
|
13361
13363
|
}
|
|
13362
13364
|
|
|
13363
13365
|
// src/BugBearButton.tsx
|
|
13364
|
-
var
|
|
13365
|
-
var
|
|
13366
|
+
var import_react19 = __toESM(require("react"));
|
|
13367
|
+
var import_react_native18 = require("react-native");
|
|
13366
13368
|
|
|
13367
13369
|
// src/widget/logo.ts
|
|
13368
13370
|
var BUGBEAR_LOGO_BASE64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAJhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAASQBAACAAAAFAAAAISgAQADAAAAAQABAACgAgAEAAAAAQAAAGCgAwAEAAAAAQAAAGAAAAAAMjAyNjowMToyNCAxNjoyMTozOABbbVCuAAAACXBIWXMAAAsTAAALEwEAmpwYAAACo2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpJcHRjNHhtcEV4dD0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcEV4dC8yMDA4LTAyLTI5LyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPElwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWE8L0lwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPgogICAgICAgICA8SXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPmZjNzJlN2Q2LTYyYTEtNDE1ZS04MjY5LWM2NjA4MjY0OWRiMDwvSXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyNi0wMS0yNFQxNjoyMTozODwveG1wOkNyZWF0ZURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+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";
|
|
@@ -14698,20 +14700,185 @@ var styles6 = import_react_native8.StyleSheet.create({
|
|
|
14698
14700
|
});
|
|
14699
14701
|
|
|
14700
14702
|
// src/widget/screens/ReportScreen.tsx
|
|
14703
|
+
var import_react11 = __toESM(require("react"));
|
|
14704
|
+
var import_react_native10 = require("react-native");
|
|
14705
|
+
|
|
14706
|
+
// src/widget/CategoryPicker.tsx
|
|
14701
14707
|
var import_react10 = __toESM(require("react"));
|
|
14702
14708
|
var import_react_native9 = require("react-native");
|
|
14709
|
+
var categoryOptions = [
|
|
14710
|
+
{ value: "ui_ux", label: "UI/UX", icon: "\u{1F3A8}" },
|
|
14711
|
+
{ value: "functional", label: "Functional", icon: "\u2699\uFE0F" },
|
|
14712
|
+
{ value: "crash", label: "Crash", icon: "\u{1F4A5}" },
|
|
14713
|
+
{ value: "security", label: "Security", icon: "\u{1F510}" },
|
|
14714
|
+
{ value: "other", label: "Other", icon: "\u{1F4DD}" }
|
|
14715
|
+
];
|
|
14716
|
+
function CategoryPicker({ value, onChange, optional = true }) {
|
|
14717
|
+
const [modalVisible, setModalVisible] = (0, import_react10.useState)(false);
|
|
14718
|
+
const selectedOption = value ? categoryOptions.find((o) => o.value === value) : null;
|
|
14719
|
+
const handleSelect = (category) => {
|
|
14720
|
+
onChange(category);
|
|
14721
|
+
setModalVisible(false);
|
|
14722
|
+
};
|
|
14723
|
+
return /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, /* @__PURE__ */ import_react10.default.createElement(
|
|
14724
|
+
import_react_native9.TouchableOpacity,
|
|
14725
|
+
{
|
|
14726
|
+
style: styles7.trigger,
|
|
14727
|
+
onPress: () => setModalVisible(true)
|
|
14728
|
+
},
|
|
14729
|
+
/* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: selectedOption ? styles7.triggerTextSelected : styles7.triggerTextPlaceholder }, selectedOption ? `${selectedOption.icon} ${selectedOption.label}` : optional ? "Select category (optional)" : "Select category"),
|
|
14730
|
+
/* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles7.chevron }, "\u25BC")
|
|
14731
|
+
), /* @__PURE__ */ import_react10.default.createElement(
|
|
14732
|
+
import_react_native9.Modal,
|
|
14733
|
+
{
|
|
14734
|
+
visible: modalVisible,
|
|
14735
|
+
transparent: true,
|
|
14736
|
+
animationType: "fade",
|
|
14737
|
+
onRequestClose: () => setModalVisible(false)
|
|
14738
|
+
},
|
|
14739
|
+
/* @__PURE__ */ import_react10.default.createElement(
|
|
14740
|
+
import_react_native9.TouchableOpacity,
|
|
14741
|
+
{
|
|
14742
|
+
style: styles7.overlay,
|
|
14743
|
+
activeOpacity: 1,
|
|
14744
|
+
onPress: () => setModalVisible(false)
|
|
14745
|
+
},
|
|
14746
|
+
/* @__PURE__ */ import_react10.default.createElement(import_react_native9.View, { style: styles7.modal, onStartShouldSetResponder: () => true }, /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles7.modalTitle }, "Select Category"), optional && /* @__PURE__ */ import_react10.default.createElement(
|
|
14747
|
+
import_react_native9.TouchableOpacity,
|
|
14748
|
+
{
|
|
14749
|
+
style: [styles7.option, !value && styles7.optionSelected],
|
|
14750
|
+
onPress: () => handleSelect(null)
|
|
14751
|
+
},
|
|
14752
|
+
/* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles7.optionText }, "\u2014 None \u2014")
|
|
14753
|
+
), categoryOptions.map(({ value: optValue, label, icon }) => /* @__PURE__ */ import_react10.default.createElement(
|
|
14754
|
+
import_react_native9.TouchableOpacity,
|
|
14755
|
+
{
|
|
14756
|
+
key: optValue,
|
|
14757
|
+
style: [styles7.option, value === optValue && styles7.optionSelected],
|
|
14758
|
+
onPress: () => handleSelect(optValue)
|
|
14759
|
+
},
|
|
14760
|
+
/* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles7.optionIcon }, icon),
|
|
14761
|
+
/* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles7.optionText }, label),
|
|
14762
|
+
value === optValue && /* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles7.checkmark }, "\u2713")
|
|
14763
|
+
)), /* @__PURE__ */ import_react10.default.createElement(
|
|
14764
|
+
import_react_native9.TouchableOpacity,
|
|
14765
|
+
{
|
|
14766
|
+
style: styles7.cancelButton,
|
|
14767
|
+
onPress: () => setModalVisible(false)
|
|
14768
|
+
},
|
|
14769
|
+
/* @__PURE__ */ import_react10.default.createElement(import_react_native9.Text, { style: styles7.cancelText }, "Cancel")
|
|
14770
|
+
))
|
|
14771
|
+
)
|
|
14772
|
+
));
|
|
14773
|
+
}
|
|
14774
|
+
var styles7 = import_react_native9.StyleSheet.create({
|
|
14775
|
+
trigger: {
|
|
14776
|
+
flexDirection: "row",
|
|
14777
|
+
alignItems: "center",
|
|
14778
|
+
justifyContent: "space-between",
|
|
14779
|
+
backgroundColor: colors.card,
|
|
14780
|
+
borderWidth: 1,
|
|
14781
|
+
borderColor: colors.border,
|
|
14782
|
+
borderRadius: 8,
|
|
14783
|
+
paddingHorizontal: 12,
|
|
14784
|
+
paddingVertical: 10
|
|
14785
|
+
},
|
|
14786
|
+
triggerTextSelected: {
|
|
14787
|
+
fontSize: 14,
|
|
14788
|
+
color: colors.textPrimary
|
|
14789
|
+
},
|
|
14790
|
+
triggerTextPlaceholder: {
|
|
14791
|
+
fontSize: 14,
|
|
14792
|
+
color: colors.textMuted
|
|
14793
|
+
},
|
|
14794
|
+
chevron: {
|
|
14795
|
+
fontSize: 10,
|
|
14796
|
+
color: colors.textMuted
|
|
14797
|
+
},
|
|
14798
|
+
overlay: {
|
|
14799
|
+
flex: 1,
|
|
14800
|
+
backgroundColor: "rgba(0, 0, 0, 0.6)",
|
|
14801
|
+
justifyContent: "center",
|
|
14802
|
+
alignItems: "center",
|
|
14803
|
+
padding: 24
|
|
14804
|
+
},
|
|
14805
|
+
modal: {
|
|
14806
|
+
width: "100%",
|
|
14807
|
+
maxWidth: 300,
|
|
14808
|
+
backgroundColor: colors.card,
|
|
14809
|
+
borderRadius: 16,
|
|
14810
|
+
padding: 8,
|
|
14811
|
+
borderWidth: 1,
|
|
14812
|
+
borderColor: colors.border
|
|
14813
|
+
},
|
|
14814
|
+
modalTitle: {
|
|
14815
|
+
fontSize: 16,
|
|
14816
|
+
fontWeight: "600",
|
|
14817
|
+
color: colors.textPrimary,
|
|
14818
|
+
textAlign: "center",
|
|
14819
|
+
paddingVertical: 12,
|
|
14820
|
+
borderBottomWidth: 1,
|
|
14821
|
+
borderBottomColor: colors.border,
|
|
14822
|
+
marginBottom: 4
|
|
14823
|
+
},
|
|
14824
|
+
option: {
|
|
14825
|
+
flexDirection: "row",
|
|
14826
|
+
alignItems: "center",
|
|
14827
|
+
paddingVertical: 14,
|
|
14828
|
+
paddingHorizontal: 16,
|
|
14829
|
+
borderRadius: 8
|
|
14830
|
+
},
|
|
14831
|
+
optionSelected: {
|
|
14832
|
+
backgroundColor: colors.blue + "20"
|
|
14833
|
+
},
|
|
14834
|
+
optionIcon: {
|
|
14835
|
+
fontSize: 18,
|
|
14836
|
+
marginRight: 12
|
|
14837
|
+
},
|
|
14838
|
+
optionText: {
|
|
14839
|
+
flex: 1,
|
|
14840
|
+
fontSize: 15,
|
|
14841
|
+
color: colors.textPrimary
|
|
14842
|
+
},
|
|
14843
|
+
checkmark: {
|
|
14844
|
+
fontSize: 16,
|
|
14845
|
+
color: colors.blue,
|
|
14846
|
+
fontWeight: "600"
|
|
14847
|
+
},
|
|
14848
|
+
cancelButton: {
|
|
14849
|
+
marginTop: 8,
|
|
14850
|
+
paddingVertical: 12,
|
|
14851
|
+
borderTopWidth: 1,
|
|
14852
|
+
borderTopColor: colors.border
|
|
14853
|
+
},
|
|
14854
|
+
cancelText: {
|
|
14855
|
+
fontSize: 15,
|
|
14856
|
+
color: colors.textMuted,
|
|
14857
|
+
textAlign: "center"
|
|
14858
|
+
}
|
|
14859
|
+
});
|
|
14860
|
+
|
|
14861
|
+
// src/widget/screens/ReportScreen.tsx
|
|
14703
14862
|
function ReportScreen({ nav, prefill }) {
|
|
14704
14863
|
const { client, getDeviceInfo, uploadImage, refreshAssignments } = useBugBear();
|
|
14705
|
-
const [reportType, setReportType] = (0,
|
|
14706
|
-
const [severity, setSeverity] = (0,
|
|
14707
|
-
const [
|
|
14708
|
-
const [
|
|
14709
|
-
const [
|
|
14710
|
-
const [
|
|
14711
|
-
const
|
|
14864
|
+
const [reportType, setReportType] = (0, import_react11.useState)(prefill?.type || "bug");
|
|
14865
|
+
const [severity, setSeverity] = (0, import_react11.useState)("medium");
|
|
14866
|
+
const [category, setCategory] = (0, import_react11.useState)(null);
|
|
14867
|
+
const [description, setDescription] = (0, import_react11.useState)("");
|
|
14868
|
+
const [affectedScreen, setAffectedScreen] = (0, import_react11.useState)("");
|
|
14869
|
+
const [submitting, setSubmitting] = (0, import_react11.useState)(false);
|
|
14870
|
+
const [error, setError] = (0, import_react11.useState)(null);
|
|
14871
|
+
const submittingRef = (0, import_react11.useRef)(false);
|
|
14712
14872
|
const images = useImageAttachments(uploadImage, 5, "screenshots");
|
|
14713
14873
|
const isRetestFailure = prefill?.type === "test_fail";
|
|
14714
14874
|
const isBugType = reportType === "bug" || reportType === "test_fail";
|
|
14875
|
+
(0, import_react11.useEffect)(() => {
|
|
14876
|
+
if (reportType === "feedback" || reportType === "suggestion") {
|
|
14877
|
+
setCategory("other");
|
|
14878
|
+
} else {
|
|
14879
|
+
setCategory(null);
|
|
14880
|
+
}
|
|
14881
|
+
}, [reportType]);
|
|
14715
14882
|
const handleSubmit = async () => {
|
|
14716
14883
|
if (!client || !description.trim()) return;
|
|
14717
14884
|
if (submittingRef.current) return;
|
|
@@ -14729,6 +14896,7 @@ function ReportScreen({ nav, prefill }) {
|
|
|
14729
14896
|
type: reportType,
|
|
14730
14897
|
description: description.trim(),
|
|
14731
14898
|
severity: isBugType ? severity : void 0,
|
|
14899
|
+
category: category || void 0,
|
|
14732
14900
|
assignmentId: prefill?.assignmentId,
|
|
14733
14901
|
testCaseId: prefill?.testCaseId,
|
|
14734
14902
|
appContext,
|
|
@@ -14753,23 +14921,23 @@ function ReportScreen({ nav, prefill }) {
|
|
|
14753
14921
|
submittingRef.current = false;
|
|
14754
14922
|
}
|
|
14755
14923
|
};
|
|
14756
|
-
return /* @__PURE__ */
|
|
14924
|
+
return /* @__PURE__ */ import_react11.default.createElement(import_react_native10.View, null, isRetestFailure ? /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement(import_react_native10.View, { style: styles8.retestBanner }, /* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: styles8.retestIcon }, "\u{1F504}"), /* @__PURE__ */ import_react11.default.createElement(import_react_native10.View, null, /* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: styles8.retestTitle }, "Bug Still Present"), /* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: styles8.retestSubtitle }, "The fix did not resolve this issue"))), /* @__PURE__ */ import_react11.default.createElement(import_react_native10.View, { style: styles8.section }, /* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: shared.label }, "Severity"), /* @__PURE__ */ import_react11.default.createElement(import_react_native10.View, { style: styles8.severityRow }, [
|
|
14757
14925
|
{ sev: "critical", color: "#ef4444" },
|
|
14758
14926
|
{ sev: "high", color: "#f97316" },
|
|
14759
14927
|
{ sev: "medium", color: "#eab308" },
|
|
14760
14928
|
{ sev: "low", color: "#6b7280" }
|
|
14761
|
-
].map(({ sev, color }) => /* @__PURE__ */
|
|
14762
|
-
|
|
14929
|
+
].map(({ sev, color }) => /* @__PURE__ */ import_react11.default.createElement(
|
|
14930
|
+
import_react_native10.TouchableOpacity,
|
|
14763
14931
|
{
|
|
14764
14932
|
key: sev,
|
|
14765
|
-
style: [
|
|
14933
|
+
style: [styles8.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
|
|
14766
14934
|
onPress: () => setSeverity(sev)
|
|
14767
14935
|
},
|
|
14768
|
-
/* @__PURE__ */
|
|
14769
|
-
)))), /* @__PURE__ */
|
|
14770
|
-
|
|
14936
|
+
/* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: [styles8.sevText, severity === sev && { color }] }, sev)
|
|
14937
|
+
)))), /* @__PURE__ */ import_react11.default.createElement(import_react_native10.View, { style: styles8.section }, /* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: shared.label }, "Category (optional)"), /* @__PURE__ */ import_react11.default.createElement(CategoryPicker, { value: category, onChange: setCategory, optional: true })), /* @__PURE__ */ import_react11.default.createElement(import_react_native10.View, { style: styles8.section }, /* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: shared.label }, "What went wrong?"), /* @__PURE__ */ import_react11.default.createElement(
|
|
14938
|
+
import_react_native10.TextInput,
|
|
14771
14939
|
{
|
|
14772
|
-
style:
|
|
14940
|
+
style: styles8.descInput,
|
|
14773
14941
|
value: description,
|
|
14774
14942
|
onChangeText: setDescription,
|
|
14775
14943
|
placeholder: "Describe what you observed. What still doesn't work?",
|
|
@@ -14778,7 +14946,7 @@ function ReportScreen({ nav, prefill }) {
|
|
|
14778
14946
|
numberOfLines: 4,
|
|
14779
14947
|
textAlignVertical: "top"
|
|
14780
14948
|
}
|
|
14781
|
-
)), /* @__PURE__ */
|
|
14949
|
+
)), /* @__PURE__ */ import_react11.default.createElement(
|
|
14782
14950
|
ImagePickerButtons,
|
|
14783
14951
|
{
|
|
14784
14952
|
images: images.images,
|
|
@@ -14788,44 +14956,44 @@ function ReportScreen({ nav, prefill }) {
|
|
|
14788
14956
|
onRemove: images.removeImage,
|
|
14789
14957
|
label: "Attachments (optional)"
|
|
14790
14958
|
}
|
|
14791
|
-
), error && /* @__PURE__ */
|
|
14792
|
-
|
|
14959
|
+
), error && /* @__PURE__ */ import_react11.default.createElement(import_react_native10.View, { style: styles8.errorBanner }, /* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: styles8.errorText }, error)), /* @__PURE__ */ import_react11.default.createElement(
|
|
14960
|
+
import_react_native10.TouchableOpacity,
|
|
14793
14961
|
{
|
|
14794
|
-
style: [shared.primaryButton,
|
|
14962
|
+
style: [shared.primaryButton, styles8.retestSubmitButton, (!description.trim() || submitting || images.isUploading) && shared.primaryButtonDisabled, { marginTop: 20 }],
|
|
14795
14963
|
onPress: handleSubmit,
|
|
14796
14964
|
disabled: !description.trim() || submitting || images.isUploading
|
|
14797
14965
|
},
|
|
14798
|
-
/* @__PURE__ */
|
|
14799
|
-
)) : /* @__PURE__ */
|
|
14966
|
+
/* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: shared.primaryButtonText }, images.isUploading ? "Uploading images..." : submitting ? "Submitting..." : error ? "Retry" : "Submit Failed Retest")
|
|
14967
|
+
)) : /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: shared.label }, "What are you reporting?"), /* @__PURE__ */ import_react11.default.createElement(import_react_native10.View, { style: styles8.typeRow }, [
|
|
14800
14968
|
{ type: "bug", label: "Bug", icon: "\u{1F41B}" },
|
|
14801
14969
|
{ type: "feedback", label: "Feedback", icon: "\u{1F4A1}" },
|
|
14802
14970
|
{ type: "suggestion", label: "Idea", icon: "\u2728" }
|
|
14803
|
-
].map(({ type, label, icon }) => /* @__PURE__ */
|
|
14804
|
-
|
|
14971
|
+
].map(({ type, label, icon }) => /* @__PURE__ */ import_react11.default.createElement(
|
|
14972
|
+
import_react_native10.TouchableOpacity,
|
|
14805
14973
|
{
|
|
14806
14974
|
key: type,
|
|
14807
|
-
style: [
|
|
14975
|
+
style: [styles8.typeCard, reportType === type && styles8.typeCardActive],
|
|
14808
14976
|
onPress: () => setReportType(type)
|
|
14809
14977
|
},
|
|
14810
|
-
/* @__PURE__ */
|
|
14811
|
-
/* @__PURE__ */
|
|
14812
|
-
))), isBugType && /* @__PURE__ */
|
|
14978
|
+
/* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: styles8.typeIcon }, icon),
|
|
14979
|
+
/* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: [styles8.typeLabel, reportType === type && styles8.typeLabelActive] }, label)
|
|
14980
|
+
))), isBugType && /* @__PURE__ */ import_react11.default.createElement(import_react_native10.View, { style: styles8.section }, /* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: shared.label }, "Severity"), /* @__PURE__ */ import_react11.default.createElement(import_react_native10.View, { style: styles8.severityRow }, [
|
|
14813
14981
|
{ sev: "critical", color: "#ef4444" },
|
|
14814
14982
|
{ sev: "high", color: "#f97316" },
|
|
14815
14983
|
{ sev: "medium", color: "#eab308" },
|
|
14816
14984
|
{ sev: "low", color: "#6b7280" }
|
|
14817
|
-
].map(({ sev, color }) => /* @__PURE__ */
|
|
14818
|
-
|
|
14985
|
+
].map(({ sev, color }) => /* @__PURE__ */ import_react11.default.createElement(
|
|
14986
|
+
import_react_native10.TouchableOpacity,
|
|
14819
14987
|
{
|
|
14820
14988
|
key: sev,
|
|
14821
|
-
style: [
|
|
14989
|
+
style: [styles8.sevButton, severity === sev && { backgroundColor: `${color}30`, borderColor: color }],
|
|
14822
14990
|
onPress: () => setSeverity(sev)
|
|
14823
14991
|
},
|
|
14824
|
-
/* @__PURE__ */
|
|
14825
|
-
)))), /* @__PURE__ */
|
|
14826
|
-
|
|
14992
|
+
/* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: [styles8.sevText, severity === sev && { color }] }, sev)
|
|
14993
|
+
)))), isBugType && /* @__PURE__ */ import_react11.default.createElement(import_react_native10.View, { style: styles8.section }, /* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: shared.label }, "Category (optional)"), /* @__PURE__ */ import_react11.default.createElement(CategoryPicker, { value: category, onChange: setCategory, optional: true })), /* @__PURE__ */ import_react11.default.createElement(import_react_native10.View, { style: styles8.section }, /* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: shared.label }, "What happened?"), /* @__PURE__ */ import_react11.default.createElement(
|
|
14994
|
+
import_react_native10.TextInput,
|
|
14827
14995
|
{
|
|
14828
|
-
style:
|
|
14996
|
+
style: styles8.descInput,
|
|
14829
14997
|
value: description,
|
|
14830
14998
|
onChangeText: setDescription,
|
|
14831
14999
|
placeholder: "Describe the issue...",
|
|
@@ -14834,16 +15002,16 @@ function ReportScreen({ nav, prefill }) {
|
|
|
14834
15002
|
numberOfLines: 4,
|
|
14835
15003
|
textAlignVertical: "top"
|
|
14836
15004
|
}
|
|
14837
|
-
)), isBugType && /* @__PURE__ */
|
|
14838
|
-
|
|
15005
|
+
)), isBugType && /* @__PURE__ */ import_react11.default.createElement(import_react_native10.View, { style: styles8.section }, /* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: shared.label }, "Which screen?"), /* @__PURE__ */ import_react11.default.createElement(
|
|
15006
|
+
import_react_native10.TextInput,
|
|
14839
15007
|
{
|
|
14840
|
-
style:
|
|
15008
|
+
style: styles8.screenInput,
|
|
14841
15009
|
value: affectedScreen,
|
|
14842
15010
|
onChangeText: setAffectedScreen,
|
|
14843
15011
|
placeholder: "e.g. Reservations, Settings...",
|
|
14844
15012
|
placeholderTextColor: colors.textMuted
|
|
14845
15013
|
}
|
|
14846
|
-
), /* @__PURE__ */
|
|
15014
|
+
), /* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: styles8.screenHint }, "Which screen or area was the bug on? (optional)")), /* @__PURE__ */ import_react11.default.createElement(
|
|
14847
15015
|
ImagePickerButtons,
|
|
14848
15016
|
{
|
|
14849
15017
|
images: images.images,
|
|
@@ -14853,17 +15021,17 @@ function ReportScreen({ nav, prefill }) {
|
|
|
14853
15021
|
onRemove: images.removeImage,
|
|
14854
15022
|
label: "Screenshots (optional)"
|
|
14855
15023
|
}
|
|
14856
|
-
), error && /* @__PURE__ */
|
|
14857
|
-
|
|
15024
|
+
), error && /* @__PURE__ */ import_react11.default.createElement(import_react_native10.View, { style: styles8.errorBanner }, /* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: styles8.errorText }, error)), /* @__PURE__ */ import_react11.default.createElement(
|
|
15025
|
+
import_react_native10.TouchableOpacity,
|
|
14858
15026
|
{
|
|
14859
15027
|
style: [shared.primaryButton, (!description.trim() || submitting || images.isUploading) && shared.primaryButtonDisabled, { marginTop: 20 }],
|
|
14860
15028
|
onPress: handleSubmit,
|
|
14861
15029
|
disabled: !description.trim() || submitting || images.isUploading
|
|
14862
15030
|
},
|
|
14863
|
-
/* @__PURE__ */
|
|
15031
|
+
/* @__PURE__ */ import_react11.default.createElement(import_react_native10.Text, { style: shared.primaryButtonText }, images.isUploading ? "Uploading images..." : submitting ? "Submitting..." : error ? "Retry" : "Submit Report")
|
|
14864
15032
|
)));
|
|
14865
15033
|
}
|
|
14866
|
-
var
|
|
15034
|
+
var styles8 = import_react_native10.StyleSheet.create({
|
|
14867
15035
|
typeRow: { flexDirection: "row", gap: 10, marginBottom: 20 },
|
|
14868
15036
|
typeCard: { flex: 1, alignItems: "center", paddingVertical: 16, borderRadius: 12, backgroundColor: colors.card, borderWidth: 1, borderColor: colors.border },
|
|
14869
15037
|
typeCardActive: { borderColor: colors.blue, backgroundColor: "#172554" },
|
|
@@ -14887,16 +15055,16 @@ var styles7 = import_react_native9.StyleSheet.create({
|
|
|
14887
15055
|
});
|
|
14888
15056
|
|
|
14889
15057
|
// src/widget/screens/ReportSuccessScreen.tsx
|
|
14890
|
-
var
|
|
14891
|
-
var
|
|
15058
|
+
var import_react12 = __toESM(require("react"));
|
|
15059
|
+
var import_react_native11 = require("react-native");
|
|
14892
15060
|
function ReportSuccessScreen({ nav }) {
|
|
14893
|
-
(0,
|
|
15061
|
+
(0, import_react12.useEffect)(() => {
|
|
14894
15062
|
const timer = setTimeout(() => nav.reset(), 2e3);
|
|
14895
15063
|
return () => clearTimeout(timer);
|
|
14896
15064
|
}, [nav]);
|
|
14897
|
-
return /* @__PURE__ */
|
|
15065
|
+
return /* @__PURE__ */ import_react12.default.createElement(import_react_native11.View, { style: styles9.container }, /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles9.emoji }, "\u{1F389}"), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles9.title }, "Report submitted!"), /* @__PURE__ */ import_react12.default.createElement(import_react_native11.Text, { style: styles9.subtitle }, "Thank you for your feedback"));
|
|
14898
15066
|
}
|
|
14899
|
-
var
|
|
15067
|
+
var styles9 = import_react_native11.StyleSheet.create({
|
|
14900
15068
|
container: { alignItems: "center", paddingVertical: 60 },
|
|
14901
15069
|
emoji: { fontSize: 48, marginBottom: 16 },
|
|
14902
15070
|
title: { fontSize: 22, fontWeight: "700", color: colors.textPrimary, marginBottom: 6 },
|
|
@@ -14904,29 +15072,29 @@ var styles8 = import_react_native10.StyleSheet.create({
|
|
|
14904
15072
|
});
|
|
14905
15073
|
|
|
14906
15074
|
// src/widget/screens/MessageListScreen.tsx
|
|
14907
|
-
var
|
|
14908
|
-
var
|
|
15075
|
+
var import_react13 = __toESM(require("react"));
|
|
15076
|
+
var import_react_native12 = require("react-native");
|
|
14909
15077
|
function MessageListScreen({ nav }) {
|
|
14910
15078
|
const { threads, unreadCount, refreshThreads } = useBugBear();
|
|
14911
|
-
return /* @__PURE__ */
|
|
14912
|
-
|
|
15079
|
+
return /* @__PURE__ */ import_react13.default.createElement(import_react_native12.View, null, /* @__PURE__ */ import_react13.default.createElement(
|
|
15080
|
+
import_react_native12.TouchableOpacity,
|
|
14913
15081
|
{
|
|
14914
|
-
style:
|
|
15082
|
+
style: styles10.newMsgButton,
|
|
14915
15083
|
onPress: () => nav.push({ name: "COMPOSE_MESSAGE" })
|
|
14916
15084
|
},
|
|
14917
|
-
/* @__PURE__ */
|
|
14918
|
-
), threads.length === 0 ? /* @__PURE__ */
|
|
14919
|
-
|
|
15085
|
+
/* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles10.newMsgText }, "\u2709\uFE0F New Message")
|
|
15086
|
+
), threads.length === 0 ? /* @__PURE__ */ import_react13.default.createElement(import_react_native12.View, { style: shared.emptyState }, /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: shared.emptyEmoji }, "\u{1F4AC}"), /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: shared.emptyTitle }, "No messages yet"), /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: shared.emptySubtitle }, "Start a conversation or wait for messages from admins")) : /* @__PURE__ */ import_react13.default.createElement(import_react_native12.View, null, threads.map((thread) => /* @__PURE__ */ import_react13.default.createElement(
|
|
15087
|
+
import_react_native12.TouchableOpacity,
|
|
14920
15088
|
{
|
|
14921
15089
|
key: thread.id,
|
|
14922
|
-
style: [
|
|
15090
|
+
style: [styles10.threadItem, thread.unreadCount > 0 && styles10.threadItemUnread],
|
|
14923
15091
|
onPress: () => nav.push({ name: "THREAD_DETAIL", thread })
|
|
14924
15092
|
},
|
|
14925
|
-
/* @__PURE__ */
|
|
14926
|
-
/* @__PURE__ */
|
|
14927
|
-
))), /* @__PURE__ */
|
|
15093
|
+
/* @__PURE__ */ import_react13.default.createElement(import_react_native12.View, { style: styles10.threadLeft }, /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles10.threadIcon }, getThreadTypeIcon(thread.threadType)), /* @__PURE__ */ import_react13.default.createElement(import_react_native12.View, { style: styles10.threadInfo }, /* @__PURE__ */ import_react13.default.createElement(import_react_native12.View, { style: styles10.threadTitleRow }, thread.isPinned && /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles10.pinIcon }, "\u{1F4CC}"), /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles10.threadSubject, numberOfLines: 1 }, thread.subject || "No subject")), thread.lastMessage && /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles10.threadPreview, numberOfLines: 1 }, thread.lastMessage.senderName, ": ", thread.lastMessage.content))),
|
|
15094
|
+
/* @__PURE__ */ import_react13.default.createElement(import_react_native12.View, { style: styles10.threadRight }, /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles10.threadTime }, formatRelativeTime(thread.lastMessageAt)), thread.unreadCount > 0 && /* @__PURE__ */ import_react13.default.createElement(import_react_native12.View, { style: styles10.unreadBadge }, /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles10.unreadText }, thread.unreadCount)), thread.priority !== "normal" && /* @__PURE__ */ import_react13.default.createElement(import_react_native12.View, { style: [styles10.priorityDot, { backgroundColor: getPriorityColor(thread.priority) }] }))
|
|
15095
|
+
))), /* @__PURE__ */ import_react13.default.createElement(import_react_native12.View, { style: styles10.footer }, /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles10.footerText }, threads.length, " thread", threads.length !== 1 ? "s" : "", " \xB7 ", unreadCount, " unread"), /* @__PURE__ */ import_react13.default.createElement(import_react_native12.TouchableOpacity, { onPress: refreshThreads }, /* @__PURE__ */ import_react13.default.createElement(import_react_native12.Text, { style: styles10.refreshText }, "\u21BB Refresh"))));
|
|
14928
15096
|
}
|
|
14929
|
-
var
|
|
15097
|
+
var styles10 = import_react_native12.StyleSheet.create({
|
|
14930
15098
|
newMsgButton: { backgroundColor: colors.blue, paddingVertical: 12, borderRadius: 12, alignItems: "center", marginBottom: 16 },
|
|
14931
15099
|
newMsgText: { fontSize: 15, fontWeight: "600", color: "#fff" },
|
|
14932
15100
|
threadItem: { flexDirection: "row", justifyContent: "space-between", paddingVertical: 12, paddingHorizontal: 12, borderRadius: 10, marginBottom: 4, backgroundColor: colors.card },
|
|
@@ -14949,17 +15117,17 @@ var styles9 = import_react_native11.StyleSheet.create({
|
|
|
14949
15117
|
});
|
|
14950
15118
|
|
|
14951
15119
|
// src/widget/screens/ThreadDetailScreen.tsx
|
|
14952
|
-
var
|
|
14953
|
-
var
|
|
15120
|
+
var import_react14 = __toESM(require("react"));
|
|
15121
|
+
var import_react_native13 = require("react-native");
|
|
14954
15122
|
function ThreadDetailScreen({ thread, nav }) {
|
|
14955
15123
|
const { getThreadMessages, sendMessage, markAsRead, uploadImage } = useBugBear();
|
|
14956
|
-
const [messages, setMessages] = (0,
|
|
14957
|
-
const [loading, setLoading] = (0,
|
|
14958
|
-
const [replyText, setReplyText] = (0,
|
|
14959
|
-
const [sending, setSending] = (0,
|
|
14960
|
-
const [sendError, setSendError] = (0,
|
|
15124
|
+
const [messages, setMessages] = (0, import_react14.useState)([]);
|
|
15125
|
+
const [loading, setLoading] = (0, import_react14.useState)(true);
|
|
15126
|
+
const [replyText, setReplyText] = (0, import_react14.useState)("");
|
|
15127
|
+
const [sending, setSending] = (0, import_react14.useState)(false);
|
|
15128
|
+
const [sendError, setSendError] = (0, import_react14.useState)(false);
|
|
14961
15129
|
const replyImages = useImageAttachments(uploadImage, 3, "discussion-attachments");
|
|
14962
|
-
(0,
|
|
15130
|
+
(0, import_react14.useEffect)(() => {
|
|
14963
15131
|
(async () => {
|
|
14964
15132
|
setLoading(true);
|
|
14965
15133
|
const msgs = await getThreadMessages(thread.id);
|
|
@@ -14991,20 +15159,20 @@ function ThreadDetailScreen({ thread, nav }) {
|
|
|
14991
15159
|
}
|
|
14992
15160
|
setSending(false);
|
|
14993
15161
|
};
|
|
14994
|
-
return /* @__PURE__ */
|
|
14995
|
-
|
|
15162
|
+
return /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles11.container }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles11.header }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles11.headerIcon }, getThreadTypeIcon(thread.threadType)), /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles11.headerSubject, numberOfLines: 2 }, thread.subject || "No subject")), loading ? /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles11.loadingContainer }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles11.loadingText }, "Loading messages...")) : /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles11.messagesContainer }, messages.map((msg) => /* @__PURE__ */ import_react14.default.createElement(
|
|
15163
|
+
import_react_native13.View,
|
|
14996
15164
|
{
|
|
14997
15165
|
key: msg.id,
|
|
14998
|
-
style: [
|
|
15166
|
+
style: [styles11.bubble, msg.senderType === "tester" ? styles11.bubbleTester : styles11.bubbleAdmin]
|
|
14999
15167
|
},
|
|
15000
|
-
/* @__PURE__ */
|
|
15001
|
-
/* @__PURE__ */
|
|
15002
|
-
msg.attachments && msg.attachments.length > 0 && /* @__PURE__ */
|
|
15003
|
-
/* @__PURE__ */
|
|
15004
|
-
))), sendError && /* @__PURE__ */
|
|
15005
|
-
|
|
15168
|
+
/* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: [styles11.sender, msg.senderType === "tester" && styles11.senderTester] }, msg.senderType === "tester" ? "You" : msg.senderName),
|
|
15169
|
+
/* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: [styles11.content, msg.senderType === "tester" && styles11.contentTester] }, msg.content),
|
|
15170
|
+
msg.attachments && msg.attachments.length > 0 && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles11.attachments }, msg.attachments.filter((a) => a.type === "image").map((att, idx) => /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Image, { key: idx, source: { uri: att.url }, style: styles11.attachmentImage, resizeMode: "cover" }))),
|
|
15171
|
+
/* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: [styles11.time, msg.senderType === "tester" && styles11.timeTester] }, formatMessageTime(msg.createdAt))
|
|
15172
|
+
))), sendError && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles11.errorBar }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles11.errorText }, "Failed to send. Tap Send to retry.")), replyImages.images.length > 0 && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles11.replyPreview }, /* @__PURE__ */ import_react14.default.createElement(ImagePreviewStrip, { images: replyImages.images, onRemove: replyImages.removeImage })), /* @__PURE__ */ import_react14.default.createElement(import_react_native13.View, { style: styles11.composer }, IMAGE_PICKER_AVAILABLE && /* @__PURE__ */ import_react14.default.createElement(import_react_native13.TouchableOpacity, { style: styles11.attachBtn, onPress: replyImages.pickFromGallery, disabled: replyImages.images.length >= 3 }, /* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles11.attachBtnText }, "\u{1F4CE}")), /* @__PURE__ */ import_react14.default.createElement(
|
|
15173
|
+
import_react_native13.TextInput,
|
|
15006
15174
|
{
|
|
15007
|
-
style:
|
|
15175
|
+
style: styles11.replyInput,
|
|
15008
15176
|
value: replyText,
|
|
15009
15177
|
onChangeText: setReplyText,
|
|
15010
15178
|
placeholder: "Type a reply...",
|
|
@@ -15012,17 +15180,17 @@ function ThreadDetailScreen({ thread, nav }) {
|
|
|
15012
15180
|
multiline: true,
|
|
15013
15181
|
maxLength: 1e3
|
|
15014
15182
|
}
|
|
15015
|
-
), /* @__PURE__ */
|
|
15016
|
-
|
|
15183
|
+
), /* @__PURE__ */ import_react14.default.createElement(
|
|
15184
|
+
import_react_native13.TouchableOpacity,
|
|
15017
15185
|
{
|
|
15018
|
-
style: [
|
|
15186
|
+
style: [styles11.sendBtn, (!replyText.trim() || sending || replyImages.isUploading) && styles11.sendBtnDisabled],
|
|
15019
15187
|
onPress: handleSend,
|
|
15020
15188
|
disabled: !replyText.trim() || sending || replyImages.isUploading
|
|
15021
15189
|
},
|
|
15022
|
-
/* @__PURE__ */
|
|
15190
|
+
/* @__PURE__ */ import_react14.default.createElement(import_react_native13.Text, { style: styles11.sendBtnText }, sending ? "..." : "Send")
|
|
15023
15191
|
)));
|
|
15024
15192
|
}
|
|
15025
|
-
var
|
|
15193
|
+
var styles11 = import_react_native13.StyleSheet.create({
|
|
15026
15194
|
container: { flex: 1 },
|
|
15027
15195
|
header: { flexDirection: "row", alignItems: "center", gap: 8, marginBottom: 16, paddingBottom: 12, borderBottomWidth: 1, borderBottomColor: colors.border },
|
|
15028
15196
|
headerIcon: { fontSize: 20 },
|
|
@@ -15054,13 +15222,13 @@ var styles10 = import_react_native12.StyleSheet.create({
|
|
|
15054
15222
|
});
|
|
15055
15223
|
|
|
15056
15224
|
// src/widget/screens/ComposeMessageScreen.tsx
|
|
15057
|
-
var
|
|
15058
|
-
var
|
|
15225
|
+
var import_react15 = __toESM(require("react"));
|
|
15226
|
+
var import_react_native14 = require("react-native");
|
|
15059
15227
|
function ComposeMessageScreen({ nav }) {
|
|
15060
15228
|
const { createThread, uploadImage } = useBugBear();
|
|
15061
|
-
const [subject, setSubject] = (0,
|
|
15062
|
-
const [message, setMessage] = (0,
|
|
15063
|
-
const [sending, setSending] = (0,
|
|
15229
|
+
const [subject, setSubject] = (0, import_react15.useState)("");
|
|
15230
|
+
const [message, setMessage] = (0, import_react15.useState)("");
|
|
15231
|
+
const [sending, setSending] = (0, import_react15.useState)(false);
|
|
15064
15232
|
const images = useImageAttachments(uploadImage, 3, "discussion-attachments");
|
|
15065
15233
|
const handleSend = async () => {
|
|
15066
15234
|
if (!subject.trim() || !message.trim()) return;
|
|
@@ -15076,20 +15244,20 @@ function ComposeMessageScreen({ nav }) {
|
|
|
15076
15244
|
nav.pop();
|
|
15077
15245
|
}
|
|
15078
15246
|
};
|
|
15079
|
-
return /* @__PURE__ */
|
|
15080
|
-
|
|
15247
|
+
return /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, null, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles12.header }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles12.title }, "New Message"), /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: styles12.subtitle }, "Send a message to the QA team")), /* @__PURE__ */ import_react15.default.createElement(import_react_native14.View, { style: styles12.form }, /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: shared.label }, "Subject"), /* @__PURE__ */ import_react15.default.createElement(
|
|
15248
|
+
import_react_native14.TextInput,
|
|
15081
15249
|
{
|
|
15082
|
-
style:
|
|
15250
|
+
style: styles12.subjectInput,
|
|
15083
15251
|
value: subject,
|
|
15084
15252
|
onChangeText: setSubject,
|
|
15085
15253
|
placeholder: "What's this about?",
|
|
15086
15254
|
placeholderTextColor: colors.textMuted,
|
|
15087
15255
|
maxLength: 100
|
|
15088
15256
|
}
|
|
15089
|
-
), /* @__PURE__ */
|
|
15090
|
-
|
|
15257
|
+
), /* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: [shared.label, { marginTop: 16 }] }, "Message"), /* @__PURE__ */ import_react15.default.createElement(
|
|
15258
|
+
import_react_native14.TextInput,
|
|
15091
15259
|
{
|
|
15092
|
-
style:
|
|
15260
|
+
style: styles12.messageInput,
|
|
15093
15261
|
value: message,
|
|
15094
15262
|
onChangeText: setMessage,
|
|
15095
15263
|
placeholder: "Write your message...",
|
|
@@ -15099,7 +15267,7 @@ function ComposeMessageScreen({ nav }) {
|
|
|
15099
15267
|
textAlignVertical: "top",
|
|
15100
15268
|
maxLength: 2e3
|
|
15101
15269
|
}
|
|
15102
|
-
), /* @__PURE__ */
|
|
15270
|
+
), /* @__PURE__ */ import_react15.default.createElement(
|
|
15103
15271
|
ImagePickerButtons,
|
|
15104
15272
|
{
|
|
15105
15273
|
images: images.images,
|
|
@@ -15108,17 +15276,17 @@ function ComposeMessageScreen({ nav }) {
|
|
|
15108
15276
|
onPickCamera: images.pickFromCamera,
|
|
15109
15277
|
onRemove: images.removeImage
|
|
15110
15278
|
}
|
|
15111
|
-
), /* @__PURE__ */
|
|
15112
|
-
|
|
15279
|
+
), /* @__PURE__ */ import_react15.default.createElement(
|
|
15280
|
+
import_react_native14.TouchableOpacity,
|
|
15113
15281
|
{
|
|
15114
15282
|
style: [shared.primaryButton, (!subject.trim() || !message.trim() || sending || images.isUploading) && shared.primaryButtonDisabled, { marginTop: 20 }],
|
|
15115
15283
|
onPress: handleSend,
|
|
15116
15284
|
disabled: !subject.trim() || !message.trim() || sending || images.isUploading
|
|
15117
15285
|
},
|
|
15118
|
-
/* @__PURE__ */
|
|
15286
|
+
/* @__PURE__ */ import_react15.default.createElement(import_react_native14.Text, { style: shared.primaryButtonText }, images.isUploading ? "Uploading..." : sending ? "Sending..." : "Send Message")
|
|
15119
15287
|
)));
|
|
15120
15288
|
}
|
|
15121
|
-
var
|
|
15289
|
+
var styles12 = import_react_native14.StyleSheet.create({
|
|
15122
15290
|
header: { marginBottom: 20 },
|
|
15123
15291
|
title: { fontSize: 20, fontWeight: "600", color: colors.textPrimary, marginBottom: 4 },
|
|
15124
15292
|
subtitle: { fontSize: 14, color: colors.textMuted },
|
|
@@ -15128,20 +15296,20 @@ var styles11 = import_react_native13.StyleSheet.create({
|
|
|
15128
15296
|
});
|
|
15129
15297
|
|
|
15130
15298
|
// src/widget/screens/ProfileScreen.tsx
|
|
15131
|
-
var
|
|
15132
|
-
var
|
|
15299
|
+
var import_react16 = __toESM(require("react"));
|
|
15300
|
+
var import_react_native15 = require("react-native");
|
|
15133
15301
|
function ProfileScreen({ nav }) {
|
|
15134
15302
|
const { testerInfo, assignments, updateTesterProfile, refreshTesterInfo } = useBugBear();
|
|
15135
|
-
const [editing, setEditing] = (0,
|
|
15136
|
-
const [name, setName] = (0,
|
|
15137
|
-
const [additionalEmails, setAdditionalEmails] = (0,
|
|
15138
|
-
const [newEmailInput, setNewEmailInput] = (0,
|
|
15139
|
-
const [platforms, setPlatforms] = (0,
|
|
15140
|
-
const [saving, setSaving] = (0,
|
|
15141
|
-
const [saved, setSaved] = (0,
|
|
15142
|
-
const [showDetails, setShowDetails] = (0,
|
|
15303
|
+
const [editing, setEditing] = (0, import_react16.useState)(false);
|
|
15304
|
+
const [name, setName] = (0, import_react16.useState)(testerInfo?.name || "");
|
|
15305
|
+
const [additionalEmails, setAdditionalEmails] = (0, import_react16.useState)(testerInfo?.additionalEmails || []);
|
|
15306
|
+
const [newEmailInput, setNewEmailInput] = (0, import_react16.useState)("");
|
|
15307
|
+
const [platforms, setPlatforms] = (0, import_react16.useState)(testerInfo?.platforms || []);
|
|
15308
|
+
const [saving, setSaving] = (0, import_react16.useState)(false);
|
|
15309
|
+
const [saved, setSaved] = (0, import_react16.useState)(false);
|
|
15310
|
+
const [showDetails, setShowDetails] = (0, import_react16.useState)(false);
|
|
15143
15311
|
const completedCount = assignments.filter((a) => a.status === "passed" || a.status === "failed").length;
|
|
15144
|
-
(0,
|
|
15312
|
+
(0, import_react16.useEffect)(() => {
|
|
15145
15313
|
if (testerInfo) {
|
|
15146
15314
|
setName(testerInfo.name);
|
|
15147
15315
|
setAdditionalEmails(testerInfo.additionalEmails || []);
|
|
@@ -15175,19 +15343,19 @@ function ProfileScreen({ nav }) {
|
|
|
15175
15343
|
}
|
|
15176
15344
|
};
|
|
15177
15345
|
if (saved) {
|
|
15178
|
-
return /* @__PURE__ */
|
|
15346
|
+
return /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: shared.emptyState }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: shared.emptyEmoji }, "\u2705"), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: shared.emptyTitle }, "Profile saved!"));
|
|
15179
15347
|
}
|
|
15180
15348
|
if (!testerInfo) {
|
|
15181
|
-
return /* @__PURE__ */
|
|
15349
|
+
return /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: shared.emptyState }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: shared.emptyEmoji }, "\u{1F464}"), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: shared.emptyTitle }, "No profile found"));
|
|
15182
15350
|
}
|
|
15183
15351
|
if (editing) {
|
|
15184
|
-
return /* @__PURE__ */
|
|
15352
|
+
return /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, null, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.editHeader }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.editTitle }, "Edit Profile"), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.TouchableOpacity, { onPress: () => {
|
|
15185
15353
|
setEditing(false);
|
|
15186
15354
|
setNewEmailInput("");
|
|
15187
|
-
} }, /* @__PURE__ */
|
|
15188
|
-
|
|
15355
|
+
} }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.cancelText }, "Cancel"))), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.field }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: shared.label }, "Name"), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.TextInput, { style: styles13.input, value: name, onChangeText: setName, placeholder: "Your name", placeholderTextColor: colors.textMuted })), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.field }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: shared.label }, "Primary Email"), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.emailFixed }, testerInfo.email)), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.field }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: shared.label }, "Additional Emails"), additionalEmails.map((email) => /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { key: email, style: styles13.emailRow }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.emailText }, email), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.TouchableOpacity, { onPress: () => setAdditionalEmails(additionalEmails.filter((e) => e !== email)) }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.removeEmail }, "\u2715")))), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.addEmailRow }, /* @__PURE__ */ import_react16.default.createElement(
|
|
15356
|
+
import_react_native15.TextInput,
|
|
15189
15357
|
{
|
|
15190
|
-
style: [
|
|
15358
|
+
style: [styles13.input, { flex: 1, marginRight: 8 }],
|
|
15191
15359
|
value: newEmailInput,
|
|
15192
15360
|
onChangeText: setNewEmailInput,
|
|
15193
15361
|
placeholder: "Add email",
|
|
@@ -15195,26 +15363,26 @@ function ProfileScreen({ nav }) {
|
|
|
15195
15363
|
keyboardType: "email-address",
|
|
15196
15364
|
autoCapitalize: "none"
|
|
15197
15365
|
}
|
|
15198
|
-
), /* @__PURE__ */
|
|
15199
|
-
|
|
15366
|
+
), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.TouchableOpacity, { style: styles13.addButton, onPress: handleAddEmail }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.addButtonText }, "Add")))), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.field }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: shared.label }, "Testing Platforms"), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.platformRow }, [{ key: "ios", label: "\u{1F4F1} iOS" }, { key: "android", label: "\u{1F916} Android" }, { key: "web", label: "\u{1F310} Web" }].map(({ key, label }) => /* @__PURE__ */ import_react16.default.createElement(
|
|
15367
|
+
import_react_native15.TouchableOpacity,
|
|
15200
15368
|
{
|
|
15201
15369
|
key,
|
|
15202
|
-
style: [
|
|
15370
|
+
style: [styles13.platformBtn, platforms.includes(key) && styles13.platformBtnActive],
|
|
15203
15371
|
onPress: () => setPlatforms((prev) => prev.includes(key) ? prev.filter((p) => p !== key) : [...prev, key])
|
|
15204
15372
|
},
|
|
15205
|
-
/* @__PURE__ */
|
|
15206
|
-
)))), /* @__PURE__ */
|
|
15373
|
+
/* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: [styles13.platformText, platforms.includes(key) && styles13.platformTextActive] }, label)
|
|
15374
|
+
)))), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.TouchableOpacity, { style: [shared.primaryButton, { marginTop: 20 }], onPress: handleSave, disabled: saving }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: shared.primaryButtonText }, saving ? "Saving..." : "Save Profile")));
|
|
15207
15375
|
}
|
|
15208
|
-
return /* @__PURE__ */
|
|
15209
|
-
|
|
15376
|
+
return /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, null, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.profileCard }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.avatar }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.avatarText }, testerInfo.name.charAt(0).toUpperCase())), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.profileName }, testerInfo.name), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.profileEmail }, testerInfo.email)), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.statsRow }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.statItem }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.statNumber }, completedCount), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.statLabel }, "Completed")), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.statDivider }), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.statItem }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.statNumber }, assignments.length), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.statLabel }, "Total Assigned"))), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.TouchableOpacity, { onPress: () => setShowDetails(!showDetails), style: styles13.detailsToggle }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.detailsToggleText }, showDetails ? "\u25BC" : "\u25B6", " Details")), showDetails && /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.detailsSection }, additionalEmails.length > 0 && /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.detailBlock }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.detailLabel }, "Additional Emails"), additionalEmails.map((e) => /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { key: e, style: styles13.detailValue }, e))), platforms.length > 0 && /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.detailBlock }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.detailLabel }, "Platforms"), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.platformTags }, platforms.map((p) => /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { key: p, style: styles13.platformTag }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.platformTagText }, p === "ios" ? "\u{1F4F1} iOS" : p === "android" ? "\u{1F916} Android" : "\u{1F310} Web")))))), /* @__PURE__ */ import_react16.default.createElement(
|
|
15377
|
+
import_react_native15.TouchableOpacity,
|
|
15210
15378
|
{
|
|
15211
15379
|
style: [shared.primaryButton, { marginTop: 20 }],
|
|
15212
15380
|
onPress: () => setEditing(true)
|
|
15213
15381
|
},
|
|
15214
|
-
/* @__PURE__ */
|
|
15382
|
+
/* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: shared.primaryButtonText }, "Edit Profile")
|
|
15215
15383
|
));
|
|
15216
15384
|
}
|
|
15217
|
-
var
|
|
15385
|
+
var styles13 = import_react_native15.StyleSheet.create({
|
|
15218
15386
|
profileCard: { alignItems: "center", backgroundColor: colors.card, borderRadius: 16, padding: 24, marginBottom: 16 },
|
|
15219
15387
|
avatar: { width: 64, height: 64, borderRadius: 32, backgroundColor: colors.blue, justifyContent: "center", alignItems: "center", marginBottom: 12 },
|
|
15220
15388
|
avatarText: { fontSize: 28, fontWeight: "700", color: "#fff" },
|
|
@@ -15255,8 +15423,8 @@ var styles12 = import_react_native14.StyleSheet.create({
|
|
|
15255
15423
|
});
|
|
15256
15424
|
|
|
15257
15425
|
// src/widget/screens/IssueListScreen.tsx
|
|
15258
|
-
var
|
|
15259
|
-
var
|
|
15426
|
+
var import_react17 = __toESM(require("react"));
|
|
15427
|
+
var import_react_native16 = require("react-native");
|
|
15260
15428
|
var CATEGORY_CONFIG = {
|
|
15261
15429
|
open: { label: "Open Issues", accent: "#f97316", emptyIcon: "\u2705", emptyText: "No open issues" },
|
|
15262
15430
|
done: { label: "Done", accent: "#22c55e", emptyIcon: "\u{1F389}", emptyText: "No completed issues yet" },
|
|
@@ -15270,10 +15438,10 @@ var SEVERITY_COLORS = {
|
|
|
15270
15438
|
};
|
|
15271
15439
|
function IssueListScreen({ nav, category }) {
|
|
15272
15440
|
const { client } = useBugBear();
|
|
15273
|
-
const [issues, setIssues] = (0,
|
|
15274
|
-
const [loading, setLoading] = (0,
|
|
15441
|
+
const [issues, setIssues] = (0, import_react17.useState)([]);
|
|
15442
|
+
const [loading, setLoading] = (0, import_react17.useState)(true);
|
|
15275
15443
|
const config = CATEGORY_CONFIG[category];
|
|
15276
|
-
(0,
|
|
15444
|
+
(0, import_react17.useEffect)(() => {
|
|
15277
15445
|
let cancelled = false;
|
|
15278
15446
|
setLoading(true);
|
|
15279
15447
|
(async () => {
|
|
@@ -15289,26 +15457,26 @@ function IssueListScreen({ nav, category }) {
|
|
|
15289
15457
|
};
|
|
15290
15458
|
}, [client, category]);
|
|
15291
15459
|
if (loading) {
|
|
15292
|
-
return /* @__PURE__ */
|
|
15460
|
+
return /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles14.emptyContainer }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.ActivityIndicator, { size: "small", color: colors.textMuted }), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.emptyText }, "Loading..."));
|
|
15293
15461
|
}
|
|
15294
15462
|
if (issues.length === 0) {
|
|
15295
|
-
return /* @__PURE__ */
|
|
15463
|
+
return /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles14.emptyContainer }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.emptyIcon }, config.emptyIcon), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.emptyText }, config.emptyText));
|
|
15296
15464
|
}
|
|
15297
|
-
return /* @__PURE__ */
|
|
15298
|
-
|
|
15465
|
+
return /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, null, issues.map((issue) => /* @__PURE__ */ import_react17.default.createElement(
|
|
15466
|
+
import_react_native16.TouchableOpacity,
|
|
15299
15467
|
{
|
|
15300
15468
|
key: issue.id,
|
|
15301
|
-
style:
|
|
15469
|
+
style: styles14.issueCard,
|
|
15302
15470
|
onPress: () => nav.push({ name: "ISSUE_DETAIL", issue }),
|
|
15303
15471
|
activeOpacity: 0.7
|
|
15304
15472
|
},
|
|
15305
|
-
/* @__PURE__ */
|
|
15306
|
-
/* @__PURE__ */
|
|
15307
|
-
category === "done" && issue.verifiedByName && /* @__PURE__ */
|
|
15308
|
-
category === "reopened" && issue.originalBugTitle && /* @__PURE__ */
|
|
15473
|
+
/* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles14.topRow }, issue.severity && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: [styles14.severityDot, { backgroundColor: SEVERITY_COLORS[issue.severity] || colors.textDim }] }), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.issueTitle, numberOfLines: 1 }, issue.title)),
|
|
15474
|
+
/* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles14.bottomRow }, issue.route && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.routeText, numberOfLines: 1 }, issue.route), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.timeText }, formatRelativeTime(issue.updatedAt))),
|
|
15475
|
+
category === "done" && issue.verifiedByName && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles14.verifiedBadge }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.verifiedBadgeText }, "\u2714", " Verified by ", issue.verifiedByName)),
|
|
15476
|
+
category === "reopened" && issue.originalBugTitle && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles14.reopenedBadge }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.reopenedBadgeText, numberOfLines: 1 }, "\u{1F504}", " Retest of: ", issue.originalBugTitle))
|
|
15309
15477
|
)));
|
|
15310
15478
|
}
|
|
15311
|
-
var
|
|
15479
|
+
var styles14 = import_react_native16.StyleSheet.create({
|
|
15312
15480
|
emptyContainer: {
|
|
15313
15481
|
alignItems: "center",
|
|
15314
15482
|
paddingVertical: 40
|
|
@@ -15399,8 +15567,8 @@ var styles13 = import_react_native15.StyleSheet.create({
|
|
|
15399
15567
|
});
|
|
15400
15568
|
|
|
15401
15569
|
// src/widget/screens/IssueDetailScreen.tsx
|
|
15402
|
-
var
|
|
15403
|
-
var
|
|
15570
|
+
var import_react18 = __toESM(require("react"));
|
|
15571
|
+
var import_react_native17 = require("react-native");
|
|
15404
15572
|
var STATUS_LABELS = {
|
|
15405
15573
|
new: { label: "New", bg: "#1e3a5f", color: "#60a5fa" },
|
|
15406
15574
|
triaging: { label: "Triaging", bg: "#1e3a5f", color: "#60a5fa" },
|
|
@@ -15424,9 +15592,9 @@ var SEVERITY_CONFIG = {
|
|
|
15424
15592
|
function IssueDetailScreen({ nav, issue }) {
|
|
15425
15593
|
const statusConfig = STATUS_LABELS[issue.status] || { label: issue.status, bg: "#27272a", color: "#a1a1aa" };
|
|
15426
15594
|
const severityConfig = issue.severity ? SEVERITY_CONFIG[issue.severity] : null;
|
|
15427
|
-
return /* @__PURE__ */
|
|
15595
|
+
return /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, null, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles15.badgeRow }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: [styles15.badge, { backgroundColor: statusConfig.bg }] }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: [styles15.badgeText, { color: statusConfig.color }] }, statusConfig.label)), severityConfig && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: [styles15.badge, { backgroundColor: severityConfig.bg }] }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: [styles15.badgeText, { color: severityConfig.color }] }, severityConfig.label))), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.title }, issue.title), issue.route && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.route }, issue.route), issue.description && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles15.descriptionCard }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.descriptionText }, issue.description)), issue.verifiedByName && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles15.verifiedCard }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles15.verifiedHeader }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.verifiedIcon }, "\u2705"), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.verifiedTitle }, "Retesting Proof")), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.verifiedBody }, "Verified by ", issue.verifiedByName, issue.verifiedAt && ` on ${new Date(issue.verifiedAt).toLocaleDateString(void 0, { month: "short", day: "numeric", year: "numeric" })}`)), issue.originalBugTitle && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles15.originalBugCard }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles15.originalBugHeader }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.originalBugIcon }, "\u{1F504}"), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.originalBugTitle }, "Original Bug")), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.originalBugBody }, "Retest of: ", issue.originalBugTitle)), issue.screenshotUrls && issue.screenshotUrls.length > 0 && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles15.screenshotSection }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.screenshotLabel }, "Screenshots (", issue.screenshotUrls.length, ")"), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles15.screenshotRow }, issue.screenshotUrls.map((url, i) => /* @__PURE__ */ import_react18.default.createElement(import_react_native17.TouchableOpacity, { key: i, onPress: () => import_react_native17.Linking.openURL(url), activeOpacity: 0.7 }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Image, { source: { uri: url }, style: styles15.screenshotThumb }))))), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles15.metaSection }, issue.reporterName && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.metaText }, "Reported by ", issue.reporterName), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.metaTextSmall }, "Created ", formatRelativeTime(issue.createdAt), " ", "\xB7", " Updated ", formatRelativeTime(issue.updatedAt))));
|
|
15428
15596
|
}
|
|
15429
|
-
var
|
|
15597
|
+
var styles15 = import_react_native17.StyleSheet.create({
|
|
15430
15598
|
badgeRow: {
|
|
15431
15599
|
flexDirection: "row",
|
|
15432
15600
|
gap: 8,
|
|
@@ -15557,8 +15725,8 @@ var styles14 = import_react_native16.StyleSheet.create({
|
|
|
15557
15725
|
});
|
|
15558
15726
|
|
|
15559
15727
|
// src/BugBearButton.tsx
|
|
15560
|
-
var screenWidth =
|
|
15561
|
-
var screenHeight =
|
|
15728
|
+
var screenWidth = import_react_native18.Dimensions.get("window").width;
|
|
15729
|
+
var screenHeight = import_react_native18.Dimensions.get("window").height;
|
|
15562
15730
|
function BugBearButton({
|
|
15563
15731
|
position = "bottom-right",
|
|
15564
15732
|
buttonStyle,
|
|
@@ -15570,7 +15738,7 @@ function BugBearButton({
|
|
|
15570
15738
|
}) {
|
|
15571
15739
|
const { shouldShowWidget, testerInfo, isLoading, unreadCount, assignments } = useBugBear();
|
|
15572
15740
|
const { currentScreen, canGoBack, push, pop, replace, reset } = useNavigation();
|
|
15573
|
-
const [modalVisible, setModalVisible] = (0,
|
|
15741
|
+
const [modalVisible, setModalVisible] = (0, import_react19.useState)(false);
|
|
15574
15742
|
const getInitialPosition = () => {
|
|
15575
15743
|
const buttonSize = 56;
|
|
15576
15744
|
const margin = 16;
|
|
@@ -15582,10 +15750,10 @@ function BugBearButton({
|
|
|
15582
15750
|
return { x, y };
|
|
15583
15751
|
};
|
|
15584
15752
|
const initialPos = getInitialPosition();
|
|
15585
|
-
const pan = (0,
|
|
15586
|
-
const isDragging = (0,
|
|
15587
|
-
const panResponder = (0,
|
|
15588
|
-
|
|
15753
|
+
const pan = (0, import_react19.useRef)(new import_react_native18.Animated.ValueXY(initialPos)).current;
|
|
15754
|
+
const isDragging = (0, import_react19.useRef)(false);
|
|
15755
|
+
const panResponder = (0, import_react19.useRef)(
|
|
15756
|
+
import_react_native18.PanResponder.create({
|
|
15589
15757
|
onStartShouldSetPanResponder: () => draggable,
|
|
15590
15758
|
onMoveShouldSetPanResponder: (_, gs) => draggable && (Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5),
|
|
15591
15759
|
onPanResponderGrant: () => {
|
|
@@ -15600,7 +15768,7 @@ function BugBearButton({
|
|
|
15600
15768
|
if (Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5) {
|
|
15601
15769
|
isDragging.current = true;
|
|
15602
15770
|
}
|
|
15603
|
-
|
|
15771
|
+
import_react_native18.Animated.event(
|
|
15604
15772
|
[null, { dx: pan.x, dy: pan.y }],
|
|
15605
15773
|
{ useNativeDriver: false }
|
|
15606
15774
|
)(_, gs);
|
|
@@ -15613,7 +15781,7 @@ function BugBearButton({
|
|
|
15613
15781
|
const margin = 16;
|
|
15614
15782
|
const snapX = currentX < screenWidth / 2 ? margin : screenWidth - buttonSize - margin;
|
|
15615
15783
|
const snapY = Math.max(minY, Math.min(currentY, screenHeight - maxYOffset));
|
|
15616
|
-
|
|
15784
|
+
import_react_native18.Animated.spring(pan, {
|
|
15617
15785
|
toValue: { x: snapX, y: snapY },
|
|
15618
15786
|
useNativeDriver: false,
|
|
15619
15787
|
friction: 7,
|
|
@@ -15660,24 +15828,24 @@ function BugBearButton({
|
|
|
15660
15828
|
}
|
|
15661
15829
|
};
|
|
15662
15830
|
const handleClose = () => {
|
|
15663
|
-
|
|
15831
|
+
import_react_native18.Keyboard.dismiss();
|
|
15664
15832
|
setModalVisible(false);
|
|
15665
15833
|
};
|
|
15666
15834
|
const nav = {
|
|
15667
15835
|
push: (screen) => {
|
|
15668
|
-
|
|
15836
|
+
import_react_native18.Keyboard.dismiss();
|
|
15669
15837
|
push(screen);
|
|
15670
15838
|
},
|
|
15671
15839
|
pop: () => {
|
|
15672
|
-
|
|
15840
|
+
import_react_native18.Keyboard.dismiss();
|
|
15673
15841
|
pop();
|
|
15674
15842
|
},
|
|
15675
15843
|
replace: (screen) => {
|
|
15676
|
-
|
|
15844
|
+
import_react_native18.Keyboard.dismiss();
|
|
15677
15845
|
replace(screen);
|
|
15678
15846
|
},
|
|
15679
15847
|
reset: () => {
|
|
15680
|
-
|
|
15848
|
+
import_react_native18.Keyboard.dismiss();
|
|
15681
15849
|
reset();
|
|
15682
15850
|
},
|
|
15683
15851
|
canGoBack,
|
|
@@ -15686,77 +15854,77 @@ function BugBearButton({
|
|
|
15686
15854
|
const renderScreen = () => {
|
|
15687
15855
|
switch (currentScreen.name) {
|
|
15688
15856
|
case "HOME":
|
|
15689
|
-
return /* @__PURE__ */
|
|
15857
|
+
return /* @__PURE__ */ import_react19.default.createElement(HomeScreen, { nav });
|
|
15690
15858
|
case "TEST_DETAIL":
|
|
15691
|
-
return /* @__PURE__ */
|
|
15859
|
+
return /* @__PURE__ */ import_react19.default.createElement(TestDetailScreen, { testId: currentScreen.testId, nav });
|
|
15692
15860
|
case "TEST_LIST":
|
|
15693
|
-
return /* @__PURE__ */
|
|
15861
|
+
return /* @__PURE__ */ import_react19.default.createElement(TestListScreen, { nav });
|
|
15694
15862
|
case "TEST_FEEDBACK":
|
|
15695
|
-
return /* @__PURE__ */
|
|
15863
|
+
return /* @__PURE__ */ import_react19.default.createElement(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
|
|
15696
15864
|
case "REPORT":
|
|
15697
|
-
return /* @__PURE__ */
|
|
15865
|
+
return /* @__PURE__ */ import_react19.default.createElement(ReportScreen, { nav, prefill: currentScreen.prefill });
|
|
15698
15866
|
case "REPORT_SUCCESS":
|
|
15699
|
-
return /* @__PURE__ */
|
|
15867
|
+
return /* @__PURE__ */ import_react19.default.createElement(ReportSuccessScreen, { nav });
|
|
15700
15868
|
case "MESSAGE_LIST":
|
|
15701
|
-
return /* @__PURE__ */
|
|
15869
|
+
return /* @__PURE__ */ import_react19.default.createElement(MessageListScreen, { nav });
|
|
15702
15870
|
case "THREAD_DETAIL":
|
|
15703
|
-
return /* @__PURE__ */
|
|
15871
|
+
return /* @__PURE__ */ import_react19.default.createElement(ThreadDetailScreen, { thread: currentScreen.thread, nav });
|
|
15704
15872
|
case "COMPOSE_MESSAGE":
|
|
15705
|
-
return /* @__PURE__ */
|
|
15873
|
+
return /* @__PURE__ */ import_react19.default.createElement(ComposeMessageScreen, { nav });
|
|
15706
15874
|
case "ISSUE_LIST":
|
|
15707
|
-
return /* @__PURE__ */
|
|
15875
|
+
return /* @__PURE__ */ import_react19.default.createElement(IssueListScreen, { nav, category: currentScreen.category });
|
|
15708
15876
|
case "ISSUE_DETAIL":
|
|
15709
|
-
return /* @__PURE__ */
|
|
15877
|
+
return /* @__PURE__ */ import_react19.default.createElement(IssueDetailScreen, { nav, issue: currentScreen.issue });
|
|
15710
15878
|
case "PROFILE":
|
|
15711
|
-
return /* @__PURE__ */
|
|
15879
|
+
return /* @__PURE__ */ import_react19.default.createElement(ProfileScreen, { nav });
|
|
15712
15880
|
default:
|
|
15713
|
-
return /* @__PURE__ */
|
|
15881
|
+
return /* @__PURE__ */ import_react19.default.createElement(HomeScreen, { nav });
|
|
15714
15882
|
}
|
|
15715
15883
|
};
|
|
15716
|
-
return /* @__PURE__ */
|
|
15717
|
-
|
|
15884
|
+
return /* @__PURE__ */ import_react19.default.createElement(import_react19.default.Fragment, null, /* @__PURE__ */ import_react19.default.createElement(
|
|
15885
|
+
import_react_native18.Animated.View,
|
|
15718
15886
|
{
|
|
15719
|
-
style: [
|
|
15887
|
+
style: [styles16.fabContainer, { transform: pan.getTranslateTransform() }, buttonStyle],
|
|
15720
15888
|
...panResponder.panHandlers
|
|
15721
15889
|
},
|
|
15722
|
-
/* @__PURE__ */
|
|
15723
|
-
|
|
15890
|
+
/* @__PURE__ */ import_react19.default.createElement(
|
|
15891
|
+
import_react_native18.TouchableOpacity,
|
|
15724
15892
|
{
|
|
15725
|
-
style:
|
|
15893
|
+
style: styles16.fab,
|
|
15726
15894
|
onPress: () => setModalVisible(true),
|
|
15727
15895
|
activeOpacity: draggable ? 1 : 0.7
|
|
15728
15896
|
},
|
|
15729
|
-
/* @__PURE__ */
|
|
15730
|
-
badgeCount > 0 && /* @__PURE__ */
|
|
15897
|
+
/* @__PURE__ */ import_react19.default.createElement(import_react_native18.Image, { source: { uri: BUGBEAR_LOGO_BASE64 }, style: styles16.fabIcon }),
|
|
15898
|
+
badgeCount > 0 && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles16.badge }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles16.badgeText }, badgeCount > 9 ? "9+" : badgeCount))
|
|
15731
15899
|
)
|
|
15732
|
-
), /* @__PURE__ */
|
|
15733
|
-
|
|
15900
|
+
), /* @__PURE__ */ import_react19.default.createElement(
|
|
15901
|
+
import_react_native18.Modal,
|
|
15734
15902
|
{
|
|
15735
15903
|
visible: modalVisible,
|
|
15736
15904
|
animationType: "slide",
|
|
15737
15905
|
transparent: true,
|
|
15738
15906
|
onRequestClose: handleClose
|
|
15739
15907
|
},
|
|
15740
|
-
/* @__PURE__ */
|
|
15741
|
-
|
|
15908
|
+
/* @__PURE__ */ import_react19.default.createElement(
|
|
15909
|
+
import_react_native18.KeyboardAvoidingView,
|
|
15742
15910
|
{
|
|
15743
|
-
behavior:
|
|
15744
|
-
style:
|
|
15911
|
+
behavior: import_react_native18.Platform.OS === "ios" ? "padding" : "height",
|
|
15912
|
+
style: styles16.modalOverlay
|
|
15745
15913
|
},
|
|
15746
|
-
/* @__PURE__ */
|
|
15747
|
-
|
|
15914
|
+
/* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles16.modalContainer }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles16.header }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles16.headerLeft }, canGoBack ? /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles16.headerNavRow }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.TouchableOpacity, { onPress: () => nav.pop(), style: styles16.backButton }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles16.backText }, "\u2190 Back")), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.TouchableOpacity, { onPress: () => nav.reset(), style: styles16.homeButton }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles16.homeText }, "\u{1F3E0}"))) : /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles16.headerTitleRow }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles16.headerTitle }, "BugBear"), testerInfo && /* @__PURE__ */ import_react19.default.createElement(import_react_native18.TouchableOpacity, { onPress: () => push({ name: "PROFILE" }) }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles16.headerName }, testerInfo.name, " \u270E")))), getHeaderTitle() ? /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles16.headerScreenTitle, numberOfLines: 1 }, getHeaderTitle()) : null, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.TouchableOpacity, { onPress: handleClose, style: styles16.closeButton }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles16.closeText }, "\u2715"))), /* @__PURE__ */ import_react19.default.createElement(
|
|
15915
|
+
import_react_native18.ScrollView,
|
|
15748
15916
|
{
|
|
15749
|
-
style:
|
|
15750
|
-
contentContainerStyle:
|
|
15917
|
+
style: styles16.content,
|
|
15918
|
+
contentContainerStyle: styles16.contentContainer,
|
|
15751
15919
|
keyboardShouldPersistTaps: "handled",
|
|
15752
15920
|
showsVerticalScrollIndicator: false
|
|
15753
15921
|
},
|
|
15754
|
-
isLoading ? /* @__PURE__ */
|
|
15922
|
+
isLoading ? /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles16.loadingContainer }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.ActivityIndicator, { size: "large", color: colors.blue }), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles16.loadingText }, "Loading...")) : renderScreen()
|
|
15755
15923
|
))
|
|
15756
15924
|
)
|
|
15757
15925
|
));
|
|
15758
15926
|
}
|
|
15759
|
-
var
|
|
15927
|
+
var styles16 = import_react_native18.StyleSheet.create({
|
|
15760
15928
|
// FAB
|
|
15761
15929
|
fabContainer: {
|
|
15762
15930
|
position: "absolute",
|
|
@@ -15898,9 +16066,9 @@ var styles15 = import_react_native17.StyleSheet.create({
|
|
|
15898
16066
|
});
|
|
15899
16067
|
|
|
15900
16068
|
// src/BugBearErrorBoundary.tsx
|
|
15901
|
-
var
|
|
15902
|
-
var
|
|
15903
|
-
var BugBearErrorBoundary = class extends
|
|
16069
|
+
var import_react20 = __toESM(require("react"));
|
|
16070
|
+
var import_react_native19 = require("react-native");
|
|
16071
|
+
var BugBearErrorBoundary = class extends import_react20.Component {
|
|
15904
16072
|
constructor(props) {
|
|
15905
16073
|
super(props);
|
|
15906
16074
|
this.reset = () => {
|
|
@@ -15944,7 +16112,7 @@ var BugBearErrorBoundary = class extends import_react19.Component {
|
|
|
15944
16112
|
if (fallback) {
|
|
15945
16113
|
return fallback;
|
|
15946
16114
|
}
|
|
15947
|
-
return /* @__PURE__ */
|
|
16115
|
+
return /* @__PURE__ */ import_react20.default.createElement(import_react_native19.View, { style: styles17.container }, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles17.title }, "Something went wrong"), /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles17.message }, error.message), /* @__PURE__ */ import_react20.default.createElement(import_react_native19.TouchableOpacity, { style: styles17.button, onPress: this.reset }, /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles17.buttonText }, "Try Again")), /* @__PURE__ */ import_react20.default.createElement(import_react_native19.Text, { style: styles17.caption }, "The error has been captured by BugBear"));
|
|
15948
16116
|
}
|
|
15949
16117
|
return children;
|
|
15950
16118
|
}
|
|
@@ -15955,7 +16123,7 @@ function useErrorContext() {
|
|
|
15955
16123
|
getEnhancedContext: () => contextCapture.getEnhancedContext()
|
|
15956
16124
|
};
|
|
15957
16125
|
}
|
|
15958
|
-
var
|
|
16126
|
+
var styles17 = import_react_native19.StyleSheet.create({
|
|
15959
16127
|
container: {
|
|
15960
16128
|
padding: 20,
|
|
15961
16129
|
margin: 20,
|