@bbearai/react-native 0.1.7 → 0.1.8

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 (3) hide show
  1. package/dist/index.js +127 -71
  2. package/dist/index.mjs +127 -71
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -12345,6 +12345,7 @@ function BugBearButton({
12345
12345
  const [modalVisible, setModalVisible] = (0, import_react2.useState)(false);
12346
12346
  const [activeTab, setActiveTab] = (0, import_react2.useState)("tests");
12347
12347
  const [showSteps, setShowSteps] = (0, import_react2.useState)(false);
12348
+ const [showProfileOverlay, setShowProfileOverlay] = (0, import_react2.useState)(false);
12348
12349
  const [messageView, setMessageView] = (0, import_react2.useState)("list");
12349
12350
  const [selectedThread, setSelectedThread] = (0, import_react2.useState)(null);
12350
12351
  const [threadMessages, setThreadMessages] = (0, import_react2.useState)([]);
@@ -12545,6 +12546,15 @@ function BugBearButton({
12545
12546
  }
12546
12547
  setSendingNewMessage(false);
12547
12548
  };
12549
+ const handleOpenProfile = () => {
12550
+ if (testerInfo) {
12551
+ setProfileName(testerInfo.name);
12552
+ setProfileAdditionalEmails(testerInfo.additionalEmails || []);
12553
+ setProfilePlatforms(testerInfo.platforms || []);
12554
+ }
12555
+ setProfileEditing(false);
12556
+ setShowProfileOverlay(true);
12557
+ };
12548
12558
  const handleStartEditProfile = () => {
12549
12559
  if (testerInfo) {
12550
12560
  setProfileName(testerInfo.name);
@@ -12557,6 +12567,11 @@ function BugBearButton({
12557
12567
  setProfileEditing(false);
12558
12568
  setNewEmailInput("");
12559
12569
  };
12570
+ const handleCloseProfile = () => {
12571
+ setShowProfileOverlay(false);
12572
+ setProfileEditing(false);
12573
+ setNewEmailInput("");
12574
+ };
12560
12575
  const handleAddEmail = () => {
12561
12576
  const email = newEmailInput.trim().toLowerCase();
12562
12577
  if (email && email.includes("@") && !profileAdditionalEmails.includes(email)) {
@@ -12585,7 +12600,10 @@ function BugBearButton({
12585
12600
  if (result.success) {
12586
12601
  setProfileEditing(false);
12587
12602
  setProfileSaved(true);
12588
- setTimeout(() => setProfileSaved(false), 2e3);
12603
+ setTimeout(() => {
12604
+ setProfileSaved(false);
12605
+ setShowProfileOverlay(false);
12606
+ }, 1500);
12589
12607
  }
12590
12608
  setSavingProfile(false);
12591
12609
  };
@@ -12751,7 +12769,7 @@ function BugBearButton({
12751
12769
  behavior: import_react_native2.Platform.OS === "ios" ? "padding" : "height",
12752
12770
  style: styles.modalContainer
12753
12771
  },
12754
- /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.modalContent }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.header }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.headerLeft }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.headerEmoji }, "\u{1F43B}"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, null, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.headerTitle }, "BugBear"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.headerSubtitle }, testerInfo?.name))), /* @__PURE__ */ import_react2.default.createElement(
12772
+ /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.modalContent }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.header }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.headerLeft }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.headerEmoji }, "\u{1F43B}"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, null, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.headerTitle }, "BugBear"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.TouchableOpacity, { onPress: handleOpenProfile, style: styles.headerNameButton }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.headerSubtitle }, testerInfo?.name), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.headerPencil }, "\u270E")))), /* @__PURE__ */ import_react2.default.createElement(
12755
12773
  import_react_native2.TouchableOpacity,
12756
12774
  {
12757
12775
  onPress: () => setModalVisible(false),
@@ -12772,13 +12790,6 @@ function BugBearButton({
12772
12790
  onPress: () => setActiveTab("messages")
12773
12791
  },
12774
12792
  /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.tabWithBadge }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: [styles.tabText, activeTab === "messages" && styles.activeTabText] }, "Messages"), unreadCount > 0 && /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.tabBadge }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.tabBadgeText }, unreadCount)))
12775
- ), /* @__PURE__ */ import_react2.default.createElement(
12776
- import_react_native2.TouchableOpacity,
12777
- {
12778
- style: [styles.tab, activeTab === "profile" && styles.activeTab],
12779
- onPress: () => setActiveTab("profile")
12780
- },
12781
- /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: [styles.tabText, activeTab === "profile" && styles.activeTabText] }, "Profile")
12782
12793
  ), /* @__PURE__ */ import_react2.default.createElement(
12783
12794
  import_react_native2.TouchableOpacity,
12784
12795
  {
@@ -12930,7 +12941,70 @@ function BugBearButton({
12930
12941
  message.senderType === "tester" && styles.messageTimeTester
12931
12942
  ] }, formatMessageTime(message.createdAt))
12932
12943
  ))))
12933
- )), activeTab === "profile" && /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, null, profileSaved ? /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.emptyState }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.emptyEmoji }, "\u2705"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.emptyTitle }, "Profile saved!")) : profileEditing ? (
12944
+ )), activeTab === "report" && /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, null, submitted ? /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.emptyState }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.emptyEmoji }, "\u{1F389}"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.emptyTitle }, "Report submitted!")) : /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.reportTypes }, [
12945
+ { type: "bug", label: "\u{1F41B} Bug" },
12946
+ { type: "feedback", label: "\u{1F4A1} Feedback" },
12947
+ { type: "suggestion", label: "\u2728 Idea" }
12948
+ ].map(({ type, label }) => /* @__PURE__ */ import_react2.default.createElement(
12949
+ import_react_native2.TouchableOpacity,
12950
+ {
12951
+ key: type,
12952
+ style: [
12953
+ styles.reportTypeButton,
12954
+ reportType === type && styles.reportTypeActive
12955
+ ],
12956
+ onPress: () => setReportType(type)
12957
+ },
12958
+ /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: [
12959
+ styles.reportTypeText,
12960
+ reportType === type && styles.reportTypeTextActive
12961
+ ] }, label)
12962
+ ))), (reportType === "bug" || reportType === "test_fail") && /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.severitySection }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.label }, "Severity"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.severityButtons }, ["critical", "high", "medium", "low"].map((sev) => {
12963
+ const activeStyles = {
12964
+ critical: styles.severityCriticalActive,
12965
+ high: styles.severityHighActive,
12966
+ medium: styles.severityMediumActive,
12967
+ low: styles.severityLowActive
12968
+ };
12969
+ return /* @__PURE__ */ import_react2.default.createElement(
12970
+ import_react_native2.TouchableOpacity,
12971
+ {
12972
+ key: sev,
12973
+ style: [
12974
+ styles.severityButton,
12975
+ severity === sev && activeStyles[sev]
12976
+ ],
12977
+ onPress: () => setSeverity(sev)
12978
+ },
12979
+ /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: [
12980
+ styles.severityText,
12981
+ severity === sev && styles.severityTextActive
12982
+ ] }, sev)
12983
+ );
12984
+ }))), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.descriptionSection }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.label }, "What happened?"), /* @__PURE__ */ import_react2.default.createElement(
12985
+ import_react_native2.TextInput,
12986
+ {
12987
+ style: styles.textInput,
12988
+ value: description,
12989
+ onChangeText: setDescription,
12990
+ placeholder: "Describe the issue...",
12991
+ placeholderTextColor: "#9CA3AF",
12992
+ multiline: true,
12993
+ numberOfLines: 4,
12994
+ textAlignVertical: "top"
12995
+ }
12996
+ )), /* @__PURE__ */ import_react2.default.createElement(
12997
+ import_react_native2.TouchableOpacity,
12998
+ {
12999
+ style: [
13000
+ styles.submitButton,
13001
+ (!description.trim() || submitting) && styles.submitButtonDisabled
13002
+ ],
13003
+ onPress: handleSubmitReport,
13004
+ disabled: !description.trim() || submitting
13005
+ },
13006
+ /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.submitButtonText }, submitting ? "Submitting..." : "Submit Report")
13007
+ )))), showProfileOverlay && /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.profileOverlay }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.ScrollView, { style: styles.profileOverlayContent }, profileSaved ? /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.emptyState }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.emptyEmoji }, "\u2705"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.emptyTitle }, "Profile saved!")) : profileEditing ? (
12934
13008
  /* Edit Profile Form */
12935
13009
  /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, null, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.profileEditHeader }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.profileEditTitle }, "Edit Profile"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.TouchableOpacity, { onPress: handleCancelEditProfile }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.cancelText }, "Cancel"))), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.profileSection }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.label }, "Name"), /* @__PURE__ */ import_react2.default.createElement(
12936
13010
  import_react_native2.TextInput,
@@ -12997,70 +13071,14 @@ function BugBearButton({
12997
13071
  },
12998
13072
  /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.editProfileButtonText }, "Edit Profile")
12999
13073
  ))
13000
- )), activeTab === "report" && /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, null, submitted ? /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.emptyState }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.emptyEmoji }, "\u{1F389}"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.emptyTitle }, "Report submitted!")) : /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.reportTypes }, [
13001
- { type: "bug", label: "\u{1F41B} Bug" },
13002
- { type: "feedback", label: "\u{1F4A1} Feedback" },
13003
- { type: "suggestion", label: "\u2728 Idea" }
13004
- ].map(({ type, label }) => /* @__PURE__ */ import_react2.default.createElement(
13074
+ )), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.profileOverlayFooter }, /* @__PURE__ */ import_react2.default.createElement(
13005
13075
  import_react_native2.TouchableOpacity,
13006
13076
  {
13007
- key: type,
13008
- style: [
13009
- styles.reportTypeButton,
13010
- reportType === type && styles.reportTypeActive
13011
- ],
13012
- onPress: () => setReportType(type)
13077
+ style: styles.closeProfileButton,
13078
+ onPress: handleCloseProfile
13013
13079
  },
13014
- /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: [
13015
- styles.reportTypeText,
13016
- reportType === type && styles.reportTypeTextActive
13017
- ] }, label)
13018
- ))), (reportType === "bug" || reportType === "test_fail") && /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.severitySection }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.label }, "Severity"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.severityButtons }, ["critical", "high", "medium", "low"].map((sev) => {
13019
- const activeStyles = {
13020
- critical: styles.severityCriticalActive,
13021
- high: styles.severityHighActive,
13022
- medium: styles.severityMediumActive,
13023
- low: styles.severityLowActive
13024
- };
13025
- return /* @__PURE__ */ import_react2.default.createElement(
13026
- import_react_native2.TouchableOpacity,
13027
- {
13028
- key: sev,
13029
- style: [
13030
- styles.severityButton,
13031
- severity === sev && activeStyles[sev]
13032
- ],
13033
- onPress: () => setSeverity(sev)
13034
- },
13035
- /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: [
13036
- styles.severityText,
13037
- severity === sev && styles.severityTextActive
13038
- ] }, sev)
13039
- );
13040
- }))), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.descriptionSection }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.label }, "What happened?"), /* @__PURE__ */ import_react2.default.createElement(
13041
- import_react_native2.TextInput,
13042
- {
13043
- style: styles.textInput,
13044
- value: description,
13045
- onChangeText: setDescription,
13046
- placeholder: "Describe the issue...",
13047
- placeholderTextColor: "#9CA3AF",
13048
- multiline: true,
13049
- numberOfLines: 4,
13050
- textAlignVertical: "top"
13051
- }
13052
- )), /* @__PURE__ */ import_react2.default.createElement(
13053
- import_react_native2.TouchableOpacity,
13054
- {
13055
- style: [
13056
- styles.submitButton,
13057
- (!description.trim() || submitting) && styles.submitButtonDisabled
13058
- ],
13059
- onPress: handleSubmitReport,
13060
- disabled: !description.trim() || submitting
13061
- },
13062
- /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.submitButtonText }, submitting ? "Submitting..." : "Submit Report")
13063
- )))), activeTab === "messages" && messageView === "thread" && selectedThread ? (
13080
+ /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.closeProfileButtonText }, "\u2190 Back")
13081
+ ))), activeTab === "messages" && messageView === "thread" && selectedThread ? (
13064
13082
  /* Reply Composer */
13065
13083
  /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.replyComposer }, /* @__PURE__ */ import_react2.default.createElement(
13066
13084
  import_react_native2.TextInput,
@@ -13172,6 +13190,15 @@ var styles = import_react_native2.StyleSheet.create({
13172
13190
  color: "#DDD6FE",
13173
13191
  fontSize: 12
13174
13192
  },
13193
+ headerNameButton: {
13194
+ flexDirection: "row",
13195
+ alignItems: "center",
13196
+ gap: 4
13197
+ },
13198
+ headerPencil: {
13199
+ color: "#DDD6FE",
13200
+ fontSize: 11
13201
+ },
13175
13202
  closeButton: {
13176
13203
  padding: 8
13177
13204
  },
@@ -14297,6 +14324,35 @@ var styles = import_react_native2.StyleSheet.create({
14297
14324
  fontSize: 16,
14298
14325
  fontWeight: "600",
14299
14326
  color: "#fff"
14327
+ },
14328
+ // Profile overlay styles
14329
+ profileOverlay: {
14330
+ position: "absolute",
14331
+ top: 0,
14332
+ left: 0,
14333
+ right: 0,
14334
+ bottom: 0,
14335
+ backgroundColor: "#fff",
14336
+ zIndex: 100
14337
+ },
14338
+ profileOverlayContent: {
14339
+ flex: 1,
14340
+ padding: 16
14341
+ },
14342
+ profileOverlayFooter: {
14343
+ borderTopWidth: 1,
14344
+ borderTopColor: "#E5E7EB",
14345
+ padding: 12,
14346
+ backgroundColor: "#F9FAFB"
14347
+ },
14348
+ closeProfileButton: {
14349
+ paddingVertical: 8,
14350
+ alignItems: "center"
14351
+ },
14352
+ closeProfileButtonText: {
14353
+ fontSize: 14,
14354
+ fontWeight: "500",
14355
+ color: "#7C3AED"
14300
14356
  }
14301
14357
  });
14302
14358
  // Annotate the CommonJS export names for ESM import in node:
package/dist/index.mjs CHANGED
@@ -12320,6 +12320,7 @@ function BugBearButton({
12320
12320
  const [modalVisible, setModalVisible] = useState2(false);
12321
12321
  const [activeTab, setActiveTab] = useState2("tests");
12322
12322
  const [showSteps, setShowSteps] = useState2(false);
12323
+ const [showProfileOverlay, setShowProfileOverlay] = useState2(false);
12323
12324
  const [messageView, setMessageView] = useState2("list");
12324
12325
  const [selectedThread, setSelectedThread] = useState2(null);
12325
12326
  const [threadMessages, setThreadMessages] = useState2([]);
@@ -12520,6 +12521,15 @@ function BugBearButton({
12520
12521
  }
12521
12522
  setSendingNewMessage(false);
12522
12523
  };
12524
+ const handleOpenProfile = () => {
12525
+ if (testerInfo) {
12526
+ setProfileName(testerInfo.name);
12527
+ setProfileAdditionalEmails(testerInfo.additionalEmails || []);
12528
+ setProfilePlatforms(testerInfo.platforms || []);
12529
+ }
12530
+ setProfileEditing(false);
12531
+ setShowProfileOverlay(true);
12532
+ };
12523
12533
  const handleStartEditProfile = () => {
12524
12534
  if (testerInfo) {
12525
12535
  setProfileName(testerInfo.name);
@@ -12532,6 +12542,11 @@ function BugBearButton({
12532
12542
  setProfileEditing(false);
12533
12543
  setNewEmailInput("");
12534
12544
  };
12545
+ const handleCloseProfile = () => {
12546
+ setShowProfileOverlay(false);
12547
+ setProfileEditing(false);
12548
+ setNewEmailInput("");
12549
+ };
12535
12550
  const handleAddEmail = () => {
12536
12551
  const email = newEmailInput.trim().toLowerCase();
12537
12552
  if (email && email.includes("@") && !profileAdditionalEmails.includes(email)) {
@@ -12560,7 +12575,10 @@ function BugBearButton({
12560
12575
  if (result.success) {
12561
12576
  setProfileEditing(false);
12562
12577
  setProfileSaved(true);
12563
- setTimeout(() => setProfileSaved(false), 2e3);
12578
+ setTimeout(() => {
12579
+ setProfileSaved(false);
12580
+ setShowProfileOverlay(false);
12581
+ }, 1500);
12564
12582
  }
12565
12583
  setSavingProfile(false);
12566
12584
  };
@@ -12726,7 +12744,7 @@ function BugBearButton({
12726
12744
  behavior: Platform2.OS === "ios" ? "padding" : "height",
12727
12745
  style: styles.modalContainer
12728
12746
  },
12729
- /* @__PURE__ */ React2.createElement(View, { style: styles.modalContent }, /* @__PURE__ */ React2.createElement(View, { style: styles.header }, /* @__PURE__ */ React2.createElement(View, { style: styles.headerLeft }, /* @__PURE__ */ React2.createElement(Text, { style: styles.headerEmoji }, "\u{1F43B}"), /* @__PURE__ */ React2.createElement(View, null, /* @__PURE__ */ React2.createElement(Text, { style: styles.headerTitle }, "BugBear"), /* @__PURE__ */ React2.createElement(Text, { style: styles.headerSubtitle }, testerInfo?.name))), /* @__PURE__ */ React2.createElement(
12747
+ /* @__PURE__ */ React2.createElement(View, { style: styles.modalContent }, /* @__PURE__ */ React2.createElement(View, { style: styles.header }, /* @__PURE__ */ React2.createElement(View, { style: styles.headerLeft }, /* @__PURE__ */ React2.createElement(Text, { style: styles.headerEmoji }, "\u{1F43B}"), /* @__PURE__ */ React2.createElement(View, null, /* @__PURE__ */ React2.createElement(Text, { style: styles.headerTitle }, "BugBear"), /* @__PURE__ */ React2.createElement(TouchableOpacity, { onPress: handleOpenProfile, style: styles.headerNameButton }, /* @__PURE__ */ React2.createElement(Text, { style: styles.headerSubtitle }, testerInfo?.name), /* @__PURE__ */ React2.createElement(Text, { style: styles.headerPencil }, "\u270E")))), /* @__PURE__ */ React2.createElement(
12730
12748
  TouchableOpacity,
12731
12749
  {
12732
12750
  onPress: () => setModalVisible(false),
@@ -12747,13 +12765,6 @@ function BugBearButton({
12747
12765
  onPress: () => setActiveTab("messages")
12748
12766
  },
12749
12767
  /* @__PURE__ */ React2.createElement(View, { style: styles.tabWithBadge }, /* @__PURE__ */ React2.createElement(Text, { style: [styles.tabText, activeTab === "messages" && styles.activeTabText] }, "Messages"), unreadCount > 0 && /* @__PURE__ */ React2.createElement(View, { style: styles.tabBadge }, /* @__PURE__ */ React2.createElement(Text, { style: styles.tabBadgeText }, unreadCount)))
12750
- ), /* @__PURE__ */ React2.createElement(
12751
- TouchableOpacity,
12752
- {
12753
- style: [styles.tab, activeTab === "profile" && styles.activeTab],
12754
- onPress: () => setActiveTab("profile")
12755
- },
12756
- /* @__PURE__ */ React2.createElement(Text, { style: [styles.tabText, activeTab === "profile" && styles.activeTabText] }, "Profile")
12757
12768
  ), /* @__PURE__ */ React2.createElement(
12758
12769
  TouchableOpacity,
12759
12770
  {
@@ -12905,7 +12916,70 @@ function BugBearButton({
12905
12916
  message.senderType === "tester" && styles.messageTimeTester
12906
12917
  ] }, formatMessageTime(message.createdAt))
12907
12918
  ))))
12908
- )), activeTab === "profile" && /* @__PURE__ */ React2.createElement(View, null, profileSaved ? /* @__PURE__ */ React2.createElement(View, { style: styles.emptyState }, /* @__PURE__ */ React2.createElement(Text, { style: styles.emptyEmoji }, "\u2705"), /* @__PURE__ */ React2.createElement(Text, { style: styles.emptyTitle }, "Profile saved!")) : profileEditing ? (
12919
+ )), activeTab === "report" && /* @__PURE__ */ React2.createElement(View, null, submitted ? /* @__PURE__ */ React2.createElement(View, { style: styles.emptyState }, /* @__PURE__ */ React2.createElement(Text, { style: styles.emptyEmoji }, "\u{1F389}"), /* @__PURE__ */ React2.createElement(Text, { style: styles.emptyTitle }, "Report submitted!")) : /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(View, { style: styles.reportTypes }, [
12920
+ { type: "bug", label: "\u{1F41B} Bug" },
12921
+ { type: "feedback", label: "\u{1F4A1} Feedback" },
12922
+ { type: "suggestion", label: "\u2728 Idea" }
12923
+ ].map(({ type, label }) => /* @__PURE__ */ React2.createElement(
12924
+ TouchableOpacity,
12925
+ {
12926
+ key: type,
12927
+ style: [
12928
+ styles.reportTypeButton,
12929
+ reportType === type && styles.reportTypeActive
12930
+ ],
12931
+ onPress: () => setReportType(type)
12932
+ },
12933
+ /* @__PURE__ */ React2.createElement(Text, { style: [
12934
+ styles.reportTypeText,
12935
+ reportType === type && styles.reportTypeTextActive
12936
+ ] }, label)
12937
+ ))), (reportType === "bug" || reportType === "test_fail") && /* @__PURE__ */ React2.createElement(View, { style: styles.severitySection }, /* @__PURE__ */ React2.createElement(Text, { style: styles.label }, "Severity"), /* @__PURE__ */ React2.createElement(View, { style: styles.severityButtons }, ["critical", "high", "medium", "low"].map((sev) => {
12938
+ const activeStyles = {
12939
+ critical: styles.severityCriticalActive,
12940
+ high: styles.severityHighActive,
12941
+ medium: styles.severityMediumActive,
12942
+ low: styles.severityLowActive
12943
+ };
12944
+ return /* @__PURE__ */ React2.createElement(
12945
+ TouchableOpacity,
12946
+ {
12947
+ key: sev,
12948
+ style: [
12949
+ styles.severityButton,
12950
+ severity === sev && activeStyles[sev]
12951
+ ],
12952
+ onPress: () => setSeverity(sev)
12953
+ },
12954
+ /* @__PURE__ */ React2.createElement(Text, { style: [
12955
+ styles.severityText,
12956
+ severity === sev && styles.severityTextActive
12957
+ ] }, sev)
12958
+ );
12959
+ }))), /* @__PURE__ */ React2.createElement(View, { style: styles.descriptionSection }, /* @__PURE__ */ React2.createElement(Text, { style: styles.label }, "What happened?"), /* @__PURE__ */ React2.createElement(
12960
+ TextInput,
12961
+ {
12962
+ style: styles.textInput,
12963
+ value: description,
12964
+ onChangeText: setDescription,
12965
+ placeholder: "Describe the issue...",
12966
+ placeholderTextColor: "#9CA3AF",
12967
+ multiline: true,
12968
+ numberOfLines: 4,
12969
+ textAlignVertical: "top"
12970
+ }
12971
+ )), /* @__PURE__ */ React2.createElement(
12972
+ TouchableOpacity,
12973
+ {
12974
+ style: [
12975
+ styles.submitButton,
12976
+ (!description.trim() || submitting) && styles.submitButtonDisabled
12977
+ ],
12978
+ onPress: handleSubmitReport,
12979
+ disabled: !description.trim() || submitting
12980
+ },
12981
+ /* @__PURE__ */ React2.createElement(Text, { style: styles.submitButtonText }, submitting ? "Submitting..." : "Submit Report")
12982
+ )))), showProfileOverlay && /* @__PURE__ */ React2.createElement(View, { style: styles.profileOverlay }, /* @__PURE__ */ React2.createElement(ScrollView, { style: styles.profileOverlayContent }, profileSaved ? /* @__PURE__ */ React2.createElement(View, { style: styles.emptyState }, /* @__PURE__ */ React2.createElement(Text, { style: styles.emptyEmoji }, "\u2705"), /* @__PURE__ */ React2.createElement(Text, { style: styles.emptyTitle }, "Profile saved!")) : profileEditing ? (
12909
12983
  /* Edit Profile Form */
12910
12984
  /* @__PURE__ */ React2.createElement(View, null, /* @__PURE__ */ React2.createElement(View, { style: styles.profileEditHeader }, /* @__PURE__ */ React2.createElement(Text, { style: styles.profileEditTitle }, "Edit Profile"), /* @__PURE__ */ React2.createElement(TouchableOpacity, { onPress: handleCancelEditProfile }, /* @__PURE__ */ React2.createElement(Text, { style: styles.cancelText }, "Cancel"))), /* @__PURE__ */ React2.createElement(View, { style: styles.profileSection }, /* @__PURE__ */ React2.createElement(Text, { style: styles.label }, "Name"), /* @__PURE__ */ React2.createElement(
12911
12985
  TextInput,
@@ -12972,70 +13046,14 @@ function BugBearButton({
12972
13046
  },
12973
13047
  /* @__PURE__ */ React2.createElement(Text, { style: styles.editProfileButtonText }, "Edit Profile")
12974
13048
  ))
12975
- )), activeTab === "report" && /* @__PURE__ */ React2.createElement(View, null, submitted ? /* @__PURE__ */ React2.createElement(View, { style: styles.emptyState }, /* @__PURE__ */ React2.createElement(Text, { style: styles.emptyEmoji }, "\u{1F389}"), /* @__PURE__ */ React2.createElement(Text, { style: styles.emptyTitle }, "Report submitted!")) : /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(View, { style: styles.reportTypes }, [
12976
- { type: "bug", label: "\u{1F41B} Bug" },
12977
- { type: "feedback", label: "\u{1F4A1} Feedback" },
12978
- { type: "suggestion", label: "\u2728 Idea" }
12979
- ].map(({ type, label }) => /* @__PURE__ */ React2.createElement(
13049
+ )), /* @__PURE__ */ React2.createElement(View, { style: styles.profileOverlayFooter }, /* @__PURE__ */ React2.createElement(
12980
13050
  TouchableOpacity,
12981
13051
  {
12982
- key: type,
12983
- style: [
12984
- styles.reportTypeButton,
12985
- reportType === type && styles.reportTypeActive
12986
- ],
12987
- onPress: () => setReportType(type)
13052
+ style: styles.closeProfileButton,
13053
+ onPress: handleCloseProfile
12988
13054
  },
12989
- /* @__PURE__ */ React2.createElement(Text, { style: [
12990
- styles.reportTypeText,
12991
- reportType === type && styles.reportTypeTextActive
12992
- ] }, label)
12993
- ))), (reportType === "bug" || reportType === "test_fail") && /* @__PURE__ */ React2.createElement(View, { style: styles.severitySection }, /* @__PURE__ */ React2.createElement(Text, { style: styles.label }, "Severity"), /* @__PURE__ */ React2.createElement(View, { style: styles.severityButtons }, ["critical", "high", "medium", "low"].map((sev) => {
12994
- const activeStyles = {
12995
- critical: styles.severityCriticalActive,
12996
- high: styles.severityHighActive,
12997
- medium: styles.severityMediumActive,
12998
- low: styles.severityLowActive
12999
- };
13000
- return /* @__PURE__ */ React2.createElement(
13001
- TouchableOpacity,
13002
- {
13003
- key: sev,
13004
- style: [
13005
- styles.severityButton,
13006
- severity === sev && activeStyles[sev]
13007
- ],
13008
- onPress: () => setSeverity(sev)
13009
- },
13010
- /* @__PURE__ */ React2.createElement(Text, { style: [
13011
- styles.severityText,
13012
- severity === sev && styles.severityTextActive
13013
- ] }, sev)
13014
- );
13015
- }))), /* @__PURE__ */ React2.createElement(View, { style: styles.descriptionSection }, /* @__PURE__ */ React2.createElement(Text, { style: styles.label }, "What happened?"), /* @__PURE__ */ React2.createElement(
13016
- TextInput,
13017
- {
13018
- style: styles.textInput,
13019
- value: description,
13020
- onChangeText: setDescription,
13021
- placeholder: "Describe the issue...",
13022
- placeholderTextColor: "#9CA3AF",
13023
- multiline: true,
13024
- numberOfLines: 4,
13025
- textAlignVertical: "top"
13026
- }
13027
- )), /* @__PURE__ */ React2.createElement(
13028
- TouchableOpacity,
13029
- {
13030
- style: [
13031
- styles.submitButton,
13032
- (!description.trim() || submitting) && styles.submitButtonDisabled
13033
- ],
13034
- onPress: handleSubmitReport,
13035
- disabled: !description.trim() || submitting
13036
- },
13037
- /* @__PURE__ */ React2.createElement(Text, { style: styles.submitButtonText }, submitting ? "Submitting..." : "Submit Report")
13038
- )))), activeTab === "messages" && messageView === "thread" && selectedThread ? (
13055
+ /* @__PURE__ */ React2.createElement(Text, { style: styles.closeProfileButtonText }, "\u2190 Back")
13056
+ ))), activeTab === "messages" && messageView === "thread" && selectedThread ? (
13039
13057
  /* Reply Composer */
13040
13058
  /* @__PURE__ */ React2.createElement(View, { style: styles.replyComposer }, /* @__PURE__ */ React2.createElement(
13041
13059
  TextInput,
@@ -13147,6 +13165,15 @@ var styles = StyleSheet.create({
13147
13165
  color: "#DDD6FE",
13148
13166
  fontSize: 12
13149
13167
  },
13168
+ headerNameButton: {
13169
+ flexDirection: "row",
13170
+ alignItems: "center",
13171
+ gap: 4
13172
+ },
13173
+ headerPencil: {
13174
+ color: "#DDD6FE",
13175
+ fontSize: 11
13176
+ },
13150
13177
  closeButton: {
13151
13178
  padding: 8
13152
13179
  },
@@ -14272,6 +14299,35 @@ var styles = StyleSheet.create({
14272
14299
  fontSize: 16,
14273
14300
  fontWeight: "600",
14274
14301
  color: "#fff"
14302
+ },
14303
+ // Profile overlay styles
14304
+ profileOverlay: {
14305
+ position: "absolute",
14306
+ top: 0,
14307
+ left: 0,
14308
+ right: 0,
14309
+ bottom: 0,
14310
+ backgroundColor: "#fff",
14311
+ zIndex: 100
14312
+ },
14313
+ profileOverlayContent: {
14314
+ flex: 1,
14315
+ padding: 16
14316
+ },
14317
+ profileOverlayFooter: {
14318
+ borderTopWidth: 1,
14319
+ borderTopColor: "#E5E7EB",
14320
+ padding: 12,
14321
+ backgroundColor: "#F9FAFB"
14322
+ },
14323
+ closeProfileButton: {
14324
+ paddingVertical: 8,
14325
+ alignItems: "center"
14326
+ },
14327
+ closeProfileButtonText: {
14328
+ fontSize: 14,
14329
+ fontWeight: "500",
14330
+ color: "#7C3AED"
14275
14331
  }
14276
14332
  });
14277
14333
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bbearai/react-native",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "BugBear React Native components for mobile apps",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",